36 #define TOKEN_TAG "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789@" 86 static void cf_define();
88 static int get_enum_index(
char *,
char **);
92 static pthread_mutex_t cf_mutex = PTHREAD_MUTEX_INITIALIZER;
94 #define CF_DATA_LOCK() \ 95 if (pthread_mutex_lock(&cf_mutex) != 0) { \ 96 ZE_LogSysError("pthread_mutex_lock(cf_mutex)"); \ 99 #define CF_DATA_UNLOCK() \ 100 if (pthread_mutex_unlock(&cf_mutex) != 0) { \ 101 ZE_LogSysError("pthread_mutex_unlock(cf_mutex)"); \ 118 if (a->
id == 0 || b->
id == 0)
124 return (a->
id - b->
id);
159 static void fill_conf_data();
198 memset(cf, 0,
sizeof (cf));
226 for (i = 0; i <
DIM_CF; i++) {
228 switch (cf[i].
kind) {
233 if (strspn(p,
"0123456789 ") == strlen(p))
236 FD_PRINTF(fd,
" %4d %-26s %-4s %7ld %6d (%s)\n",
237 cf[i].
id, cf[i].
name,
"INT", cf[i].
iv, cf[i].
slen,
242 if (strspn(p,
"0123456789 ") == strlen(p))
246 FD_PRINTF(fd,
" %4d %-26s %7ld (%s)\n", cf[i].
id, cf[i].
name,
249 FD_PRINTF(fd,
" %4d %-26s %7ld\n", cf[i].
id, cf[i].name,
257 if (strspn(p,
"0123456789. ") == strlen(p))
260 FD_PRINTF(fd,
" %4d %-26s %-6s %7.3f %6d (%s)\n",
261 cf[i].
id, cf[i].
name,
"DOUBLE", cf[i].
dv, cf[i].
slen,
266 if (strspn(p,
"0123456789. ") == strlen(p))
270 FD_PRINTF(fd,
" %4d %-26s %7.3f (%s)\n", cf[i].
id, cf[i].
name,
273 FD_PRINTF(fd,
" %4d %-26s %7.3f\n", cf[i].
id, cf[i].name,
279 if (p == NULL || strlen(p) == 0) {
280 for (j = 0; cf[i].
opt[j] != NULL; j++) {
288 FD_PRINTF(fd,
" %4d %-26s %-4s %7ld %6d %s\n",
291 p != NULL ? p :
"(null)");
294 cf[i].
id, cf[i].
name, cf[i].
iv, p != NULL ? p :
"(null)");
298 if (cf[i].
sv != NULL) {
303 int nc = strcspn(p,
"\n");
311 FD_PRINTF(fd,
" %4d %-26s %-4s %7ld %6d %s\n",
312 cf[i].
id, cf[i].
name,
"STR", cf[i].
iv, cf[i].
slen,
321 p += strspn(p,
"\n");
325 FD_PRINTF(fd,
" %4d %-26s %-4s %7ld %6d %s\n",
326 cf[i].
id, cf[i].
name,
"STR", cf[i].
iv, cf[i].
slen,
336 FD_PRINTF(fd,
" %4d %-26s %-4s %7ld %6d %s\n",
339 "????", cf[i].
iv, cf[i].
slen,
340 cf[i].
sv != NULL ? cf[i].
sv :
"(null)");
359 time_t now = time(NULL);
365 #ifdef _POSIX_PTHREAD_SEMANTICS 368 ctime_r(&now, tstr,
sizeof (tstr));
371 ctime(&now,
sizeof (tstr));
373 strlcpy(tstr,
"-",
sizeof (tstr));
376 int n = strlen(tstr) - 1;;
383 FD_PRINTF(fd,
"# ze-filter - (c) Ecole des Mines de Paris 2008, 2009\n");
384 FD_PRINTF(fd,
"# Creation date : %s\n", tstr);
393 string =
"null filter";
399 FD_PRINTF(fd,
"# Configuration file template : %s values\n",
string);
403 if (verbose && strcasecmp(section, p->
cfsection) != 0) {
409 FD_PRINTF(fd,
"# SECTION : %s\n", section);
413 if (p->
cftag == NULL)
426 for (v = p->
enum_ptr; *v != NULL; v++)
465 for (i = 0; i < argc; i++)
487 for (i = 0; i <
DIM_CF; i++) {
488 switch (cf[i].
kind) {
531 if ((cf[i].
sv = malloc(len + 1)) == NULL) {
536 strlcpy(cf[i].name, name,
sizeof (cf[i].name));
537 memset(cf[i].
sv, 0, len + 1);
570 if ((cf[i].
sv = malloc(len + 1)) == NULL) {
575 strlcpy(cf[i].name, name,
sizeof (cf[i].name));
576 memset(cf[i].
sv, 0, len + 1);
607 strlcpy(cf[i].name, name,
sizeof (cf[i].name));
639 strlcpy(cf[i].name, name,
sizeof (cf[i].name));
662 for (i = 0; i <
DIM_CF; i++) {
663 if (strcasecmp(tag, cf[i].name) == 0)
679 for (i = 0; i <
DIM_CF; i++) {
698 if (value == NULL || strlen(value) == 0)
701 for (i = 0; i <
DIM_CF; i++) {
709 switch (cf[i].
kind) {
722 val = get_enum_index(value, cf[i].opt);
726 if (strcasecmp(cf[i].opt[val],
"OTHER") == 0)
727 strlcpy(cf[i].sv, value, cf[i].slen);
729 strlcpy(cf[i].sv, cf[i].opt[val], cf[i].slen);
748 if (value == NULL || strlen(value) == 0)
751 for (i = 0; i <
DIM_CF; i++) {
775 if (value == NULL || strlen(value) == 0)
778 for (i = 0; i <
DIM_CF; i++) {
786 if (strlen(cf[i].
sv) > 0) {
787 if ((strlen(cf[i].sv) + strlen(value) + strlen(
"\n")) < cf[i].
slen) {
788 strlcat(cf[i].sv,
"\n", cf[i].slen);
789 strlcat(cf[i].sv, value, cf[i].slen);
813 for (i = 0; i <
DIM_CF; i++) {
814 if (
id == cf[i].
id) {
838 for (i = 0; i <
DIM_CF; i++) {
839 if (
id == cf[i].
id) {
864 for (i = 0; i <
DIM_CF; i++) {
865 if (
id == cf[i].
id) {
866 switch (cf[i].
kind) {
874 if (cf[i].opt != NULL) {
875 for (j = 0; cf[i].
opt[j] != NULL; j++) {
877 if (strcasecmp(cf[i].opt[j],
"OTHER") != 0)
913 for (i = 0; i <
DIM_CF; i++) {
914 if (
id == cf[i].
id) {
916 if (cf[i].opt[cf[i].
iv] == NULL) {
920 if (strcasecmp(
"OTHER", cf[i].opt[cf[i].
iv]) == 0)
923 strlcpy(value, cf[i].opt[cf[i].iv], len);
938 get_enum_index(val, opt)
946 for (i = 0; opt[i] != NULL; i++) {
947 if (strcasecmp(opt[i], val) == 0 || strcasecmp(opt[i],
"OTHER") == 0)
959 #define KEY_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_.0123456789@" 971 if ((fname == NULL) || (strlen(fname) == 0)) {
976 if ((fin = fopen(fname,
"r")) == NULL) {
982 while (fgets(line,
sizeof (line), fin) == line) {
983 char *p, key[512], value[512];
989 if ((p = strpbrk(line,
"\n\r")) != NULL)
992 if (strlen(line) == 0)
996 p += strspn(p,
" \t");
997 if (*p ==
'#' || strlen(p) == 0)
1002 strncpy(key, p, da);
1009 while ((x =
strchr(key, (
int)
'.')) != NULL)
1014 p += strspn(p,
"= \t");
1015 strlcpy(value, p,
sizeof (value));
1016 if (strlen(value) > 0) {
1017 p = value + strlen(value) - 1;
1018 while (p > value && (*p ==
' ' || *p ==
'\t'))
1026 ZE_LogMsgDebug(20,
"KEY : %-32s (%3d) --%s--\n", key,
id, value);
1049 #define LOAD_TABLE_HEADER \ 1050 memset(fbuf, 0, sizeof(fbuf)); \ 1051 if (fname != NULL) \ 1052 strlcpy(fbuf, fname, sizeof(fbuf)); \ 1053 argc = zeStr2Tokens(fbuf, 32, argv, " ,"); \ 1054 for (i = 0; i < argc; i++) { \ 1057 tag = strchr(argv[i], ':'); \ 1061 #define LOAD_TABLE_FOOTER \ 1072 if (cfdir == NULL || strlen(cfdir) == 0)
1118 app =
STRNULL(app,
"ze-filter");
1132 char *envloglevel = NULL;
1135 if ((envloglevel = getenv(
"ZEFILTER_LOG_LEVEL")) != NULL) {
1136 level = atoi(envloglevel);
1208 static bool init_ok =
FALSE;
1234 #if FALSE && defined(CF_SOCKET) 1240 if (g_sock != NULL && strlen(g_sock) > 0)
1253 char *envsock = NULL;
1255 if ((envsock = getenv(
"ZEFILTER_SOCKET")) != NULL)
#define CF_GREY_MAX_DELAY_NULLSENDER
bool load_oradata_table(char *, char *)
int cf_get_enum_val(int id, char *value, int len)
#define CF_GREY_TO_COMPONENT
#define CF_GREY_WHITELIST_LIFETIME
int cf_add_id_enum(int id, char *name, char **opt, char *val)
void grey_set_compat_domain_check(bool enable)
#define CF_GREY_BLACKLIST_LIFETIME
int cf_set_val(int id, char *name)
bool grey_set_cleanup_interval(time_t tclean)
#define CF_GREYD_LOG_FACILITY
bool grey_set_tuples(char *ip, char *from, char *to)
int zeLog_FacilityValue(char *)
int cf_add_id_int(int id, char *name, char *val)
bool grey_set_delays(time_t tp_min_norm, time_t tp_max_norm, time_t tp_min_null, time_t tp_max_null)
#define CF_GREY_IP_COMPONENT
int cf_set_int_val(int id, int val)
#define CF_GREY_MIN_DELAY_NORMAL
int cf_set_str_val(int id, char *val)
char * zeLog_FacilityName(int)
void mk_cf_file(int fd, bool inuse, bool verbose)
#define ZE_LogMsgError(level,...)
bool load_xfiles_table(char *, char *)
#define FD_PRINTF(fdp,...)
int zeStr2Tokens(char *, int, char **, char *)
bool load_regex_table(char *, char *)
void zeLog_SetFacility(char *)
long zeStr2long(char *s, int *error, long dval)
#define CF_GREY_DEWHITE_FLAGS
#define CF_ORACLE_SCORES_FILE
size_t zeDb_SetDefaultCacheSize(size_t size)
#define ZE_LogMsgDebug(level,...)
bool grey_set_lifetime(time_t tv, time_t tw, time_t tb)
int cf_add_id_str(int id, char *name, int len, char *val)
double zeStr2double(char *s, int *error, double dval)
char * zeStrSet(char *, int, int)
int cf_append_str_val(int id, char *value)
bool configure_after(char *app)
bool load_oracle_defs(char *cfdir, char *fname)
#define ZE_MessageInfo(level,...)
#define CF_GREY_FROM_COMPONENT
#define ZE_MessageWarning(level,...)
#define CF_STATS_INTERVAL
#define ZE_LogSysError(...)
#define CF_GREY_MAX_DELAY_NORMAL
#define ZE_MessageError(level,...)
char * cf_get_str(int id)
#define CF_GREY_MAX_PENDING_NORMAL
#define CF_GREY_MIN_DELAY_NULLSENDER
#define CF_GREY_COMPAT_DOMAIN_CHECK
int cf_add_id_double(int id, char *name, char *val)
#define CF_GREY_VALIDLIST_LIFETIME
#define ZE_LogMsgWarning(level,...)
void grey_set_dewhite_flags(char *, bool)
int configure(char *app, char *fname, bool only_cf)
bool grey_set_max_pending(int normal, int bounce)
#define STRCASEEQUAL(a, b)
int cf_set_double_val(int id, double val)
bool load_iprbwl_table(char *cfdir, char *fname)
double cf_get_double(int id)
#define CF_GREY_MAX_PENDING_NULLSENDER
#define CF_ORACLE_DATA_FILE
unsigned int statistics_interval
bool load_urlbl_table(char *cfdir, char *fname)
int cf_read_file(char *fname)
void cf_dump(int fd, bool full)
#define CF_GREY_CLEANUP_INTERVAL
void init_file_extension_regex()