| 248 | | #define CHECK_N_SET(a) if(!strcmp((char *)an->name, #a)) a = 1 |
|---|
| 249 | | CHECK_N_SET(name); |
|---|
| 250 | | else CHECK_N_SET(module); |
|---|
| 251 | | else CHECK_N_SET(target); |
|---|
| 252 | | else CHECK_N_SET(period); |
|---|
| 253 | | else CHECK_N_SET(timeout); |
|---|
| 254 | | else CHECK_N_SET(filterset); |
|---|
| 255 | | else CHECK_N_SET(disable); |
|---|
| | 249 | #define CHECK_N_SET(a) if(!strcmp((char *)an->name, #a)) |
|---|
| | 250 | CHECK_N_SET(name) { |
|---|
| | 251 | xmlChar *tmp; |
|---|
| | 252 | pcre *valid_name = noit_conf_get_valid_name_checker(); |
|---|
| | 253 | int ovector[30], valid; |
|---|
| | 254 | tmp = xmlNodeGetContent(an); |
|---|
| | 255 | valid = (pcre_exec(valid_name, NULL, |
|---|
| | 256 | (char *)tmp, strlen((char *)tmp), 0, 0, |
|---|
| | 257 | ovector, sizeof(ovector)/sizeof(*ovector)) > 0); |
|---|
| | 258 | xmlFree(tmp); |
|---|
| | 259 | if(!valid) { *error = "invalid name"; return 0; } |
|---|
| | 260 | name = 1; |
|---|
| | 261 | } |
|---|
| | 262 | else CHECK_N_SET(module) module = 1; /* This is validated by called */ |
|---|
| | 263 | else CHECK_N_SET(target) { |
|---|
| | 264 | int valid; |
|---|
| | 265 | xmlChar *tmp; |
|---|
| | 266 | tmp = xmlNodeGetContent(an); |
|---|
| | 267 | valid = noit_check_is_valid_target((char *)tmp); |
|---|
| | 268 | xmlFree(tmp); |
|---|
| | 269 | if(!valid) { *error = "invalid target"; return 0; } |
|---|
| | 270 | target = 1; |
|---|
| | 271 | } |
|---|
| | 272 | else CHECK_N_SET(period) { |
|---|
| | 273 | int pint; |
|---|
| | 274 | xmlChar *tmp; |
|---|
| | 275 | tmp = xmlNodeGetContent(an); |
|---|
| | 276 | pint = noit_conf_string_to_int((char *)tmp); |
|---|
| | 277 | xmlFree(tmp); |
|---|
| | 278 | if(pint < 5000 || pint > 300000) { |
|---|
| | 279 | *error = "invalid period"; |
|---|
| | 280 | return 0; |
|---|
| | 281 | } |
|---|
| | 282 | period = 1; |
|---|
| | 283 | } |
|---|
| | 284 | else CHECK_N_SET(timeout) { |
|---|
| | 285 | int pint; |
|---|
| | 286 | xmlChar *tmp; |
|---|
| | 287 | tmp = xmlNodeGetContent(an); |
|---|
| | 288 | pint = noit_conf_string_to_int((char *)tmp); |
|---|
| | 289 | xmlFree(tmp); |
|---|
| | 290 | if(pint < 0 || pint > 300000) { |
|---|
| | 291 | *error = "invalid timeout"; |
|---|
| | 292 | return 0; |
|---|
| | 293 | } |
|---|
| | 294 | timeout = 1; |
|---|
| | 295 | } |
|---|
| | 296 | else CHECK_N_SET(filterset) filterset = 1; |
|---|
| | 297 | else CHECK_N_SET(disable) { /* not required */ |
|---|
| | 298 | int valid; |
|---|
| | 299 | xmlChar *tmp; |
|---|
| | 300 | tmp = xmlNodeGetContent(an); |
|---|
| | 301 | valid = (!strcasecmp((char *)tmp, "true") || |
|---|
| | 302 | !strcasecmp((char *)tmp, "on") || |
|---|
| | 303 | !strcasecmp((char *)tmp, "false") || |
|---|
| | 304 | !strcasecmp((char *)tmp, "off")); |
|---|
| | 305 | xmlFree(tmp); |
|---|
| | 306 | if(!valid) { *error = "bad disable parameter"; return 0; } |
|---|
| | 307 | target = 1; |
|---|
| | 308 | } |
|---|