15 |
extern char logfile[PATH_MAX]; |
extern char logfile[PATH_MAX]; |
16 |
extern unsigned int options; |
extern unsigned int options; |
17 |
|
|
18 |
|
long timeout = -1; /* Server non-response timeout in seconds. */ |
19 |
|
|
20 |
|
|
21 |
/* |
/* |
22 |
* Find the path to configuration file, open it and call parse_config(). |
* Find the path to configuration file, open it and call parse_config(). |
99 |
int i, r = 0; |
int i, r = 0; |
100 |
unsigned int row = 0; |
unsigned int row = 0; |
101 |
char line[LINE_MAX]; |
char line[LINE_MAX]; |
102 |
regex_t creg[12]; |
regex_t creg[13]; |
103 |
regmatch_t match[7]; |
regmatch_t match[7]; |
104 |
const char *reg[12] = { |
const char *reg[13] = { |
105 |
"^([[:blank:]]*\n|#.*\n)$", |
"^([[:blank:]]*\n|#.*\n)$", |
106 |
#ifndef SSL_TLS |
#ifndef SSL_TLS |
107 |
"^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+)(:[[:digit:]]+)?[[:blank:]]*\n$", |
"^[[:blank:]]*ACCOUNT[[:blank:]]+([[:graph:]]*):([[:graph:]]*)@([[:alnum:].-]+)(:[[:digit:]]+)?[[:blank:]]*\n$", |
117 |
"^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(LARGER|SMALLER|OLDER|NEWER)[[:blank:]]+([[:digit:]]+)[[:blank:]]*\n$", |
"^[[:blank:]]*(MASK[[:blank:]])?[[:blank:]]*(OR[[:blank:]]|AND[[:blank:]])?[[:blank:]]*(NOT[[:blank:]])?[[:blank:]]*(LARGER|SMALLER|OLDER|NEWER)[[:blank:]]+([[:digit:]]+)[[:blank:]]*\n$", |
118 |
"^[[:blank:]]*JOB[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]*\n$", |
"^[[:blank:]]*JOB[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]+([[:alnum:],_-]+)[[:blank:]]*\n$", |
119 |
"^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(LOGFILE)[[:blank:]]*=[[:blank:]]*([[:print:]]+)\n$", |
"^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(LOGFILE)[[:blank:]]*=[[:blank:]]*([[:print:]]+)\n$", |
120 |
"^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(HEADERS)[[:blank:]]*=[[:blank:]]*(YES|NO)[[:blank:]]*\n$" |
"^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(HEADERS|NAMESPACE)[[:blank:]]*=[[:blank:]]*(YES|NO)[[:blank:]]*\n$", |
121 |
|
"^[[:blank:]]*(SET[[:blank:]])?[[:blank:]]*(TIMEOUT)[[:blank:]]*=[[:blank:]]*(-?[[:digit:]]+)\n$" |
122 |
}; |
}; |
123 |
|
|
124 |
for (i = 0; i < 12; i++) |
for (i = 0; i < 13; i++) |
125 |
regcomp(&creg[i], reg[i], REG_EXTENDED | REG_ICASE); |
regcomp(&creg[i], reg[i], REG_EXTENDED | REG_ICASE); |
126 |
|
|
127 |
while (fgets(line, LINE_MAX - 1, fp)) { |
while (fgets(line, LINE_MAX - 1, fp)) { |
148 |
else if (!regexec(&creg[9], line, 3, match, 0)) |
else if (!regexec(&creg[9], line, 3, match, 0)) |
149 |
r = set_job(line, match); |
r = set_job(line, match); |
150 |
else if (!regexec(&creg[10], line, 4, match, 0) || |
else if (!regexec(&creg[10], line, 4, match, 0) || |
151 |
!regexec(&creg[11], line, 4, match, 0)) |
!regexec(&creg[11], line, 4, match, 0) || |
152 |
|
!regexec(&creg[12], line, 4, match, 0)) |
153 |
set_options(line, match); |
set_options(line, match); |
154 |
else |
else |
155 |
return row; |
return row; |
158 |
return row; |
return row; |
159 |
} |
} |
160 |
|
|
161 |
for (i = 0; i < 12; i++) |
for (i = 0; i < 13; i++) |
162 |
regfree(&creg[i]); |
regfree(&creg[i]); |
163 |
|
|
164 |
destroy_data(); |
destroy_data(); |
176 |
if (!*logfile) |
if (!*logfile) |
177 |
strncat(logfile, line + match[3].rm_so, |
strncat(logfile, line + match[3].rm_so, |
178 |
min((match[3].rm_eo - match[3].rm_so), PATH_MAX - 1)); |
min((match[3].rm_eo - match[3].rm_so), PATH_MAX - 1)); |
179 |
} else { |
} else if (!strncasecmp(line + match[2].rm_so, "header", 6)) { |
180 |
if (!strncasecmp(line + match[3].rm_so, "yes", 3)) |
if (!strncasecmp(line + match[3].rm_so, "yes", 3)) |
181 |
options |= OPTION_HEADERS; |
options |= OPTION_HEADERS; |
182 |
else |
else |
183 |
options &= ~(OPTION_HEADERS); |
options &= ~(OPTION_HEADERS); |
184 |
|
} else if (!strncasecmp(line + match[2].rm_so, "namespace", 9)) { |
185 |
|
if (!strncasecmp(line + match[3].rm_so, "yes", 3)) |
186 |
|
options |= OPTION_NAMESPACE; |
187 |
|
else |
188 |
|
options &= ~(OPTION_NAMESPACE); |
189 |
|
} else if (!strncasecmp(line + match[2].rm_so, "timeout", 7)) { |
190 |
|
errno = 0; |
191 |
|
timeout = strtol(line + match[3].rm_so, NULL, 10); |
192 |
|
if (errno) |
193 |
|
timeout = 0; |
194 |
} |
} |
195 |
} |
} |