77 |
static char *handle_quoted_string(char *); |
static char *handle_quoted_string(char *); |
78 |
static void push_buffer_state(YY_BUFFER_STATE, char*); |
static void push_buffer_state(YY_BUFFER_STATE, char*); |
79 |
static int pop_buffer_state(void); |
static int pop_buffer_state(void); |
80 |
|
static URL_T create_URL(char *proto); |
81 |
|
|
82 |
%} |
%} |
83 |
|
|
84 |
ws [ \r\t]+ |
ws [ \r\t]+ |
85 |
wws [ \r\t=;,()]+ |
wws [ \r\t;,()]+ |
86 |
number [0-9]+ |
number [0-9]+ |
87 |
real [0-9]+([.][0-9]+)? |
real [0-9]+([.][0-9]+)? |
88 |
str [^\000-\041@:{}"';(),%]+ |
str [^\000-\041@:{}"';(),%]+ |
89 |
hostname {str}(\.{str})* |
hostname {str}(\.{str})* |
90 |
greater ("greater"|"gt"|">") |
greater ("greater"|"gt"|">") |
91 |
less ("less"|"lt"|"<") |
less ("less"|"lt"|"<") |
92 |
equal ("equal"|"eq"|"==") |
equal ("equal"|"eq"|"=="|"=") |
93 |
notequal ("notequal"|"ne"|"!=") |
notequal ("notequal"|"ne"|"!=") |
94 |
loadavg1 load(avg)[ ]*(\([ ]*1[ ]*(m|min)?[ ]*\))? |
loadavg1 load(avg)[ ]*(\([ ]*1[ ]*(m|min)?[ ]*\))? |
95 |
loadavg5 load(avg)[ ]*\([ ]*5[ ]*(m|min)?[ ]*\) |
loadavg5 load(avg)[ ]*\([ ]*5[ ]*(m|min)?[ ]*\) |
96 |
loadavg15 load(avg)[ ]*\([ ]*15[ ]*(m|min)?[ ]*\) |
loadavg15 load(avg)[ ]*\([ ]*15[ ]*(m|min)?[ ]*\) |
97 |
startarg start{wws}?(program)?{wws}?["] |
startarg start{ws}?(program)?{ws}?([=]{ws})?["] |
98 |
stoparg stop{wws}?(program)?{wws}?["] |
stoparg stop{ws}?(program)?{ws}?([=]{ws})?["] |
99 |
execarg exec(ute)?{wws}?["] |
execarg exec(ute)?{ws}?["] |
100 |
percent ("percent"|"%") |
percent ("percent"|"%") |
101 |
byte ("byte"|"b") |
byte ("byte"|"b") |
102 |
kilobyte ("kilobyte"|"kb") |
kilobyte ("kilobyte"|"kb") |
103 |
megabyte ("megabyte"|"mb") |
megabyte ("megabyte"|"mb") |
104 |
gigabyte ("gigabyte"|"gb") |
gigabyte ("gigabyte"|"gb") |
105 |
|
|
106 |
%x ARGUMENT_COND DEPEND_COND SERVICE_COND INCLUDE |
%x ARGUMENT_COND DEPEND_COND SERVICE_COND URL_COND INCLUDE |
107 |
|
|
108 |
%% |
%% |
109 |
|
|
245 |
recovered { return RECOVERED; } |
recovered { return RECOVERED; } |
246 |
else { return ELSE; } |
else { return ELSE; } |
247 |
collector { return COLLECTOR; } |
collector { return COLLECTOR; } |
248 |
include { BEGIN(INCLUDE); } |
url { return URL; } |
249 |
|
content { return CONTENT; } |
250 |
{byte} { return BYTE; } |
{byte} { return BYTE; } |
251 |
{kilobyte} { return KILOBYTE; } |
{kilobyte} { return KILOBYTE; } |
252 |
{megabyte} { return MEGABYTE; } |
{megabyte} { return MEGABYTE; } |
253 |
{gigabyte} { return GIGABYTE; } |
{gigabyte} { return GIGABYTE; } |
|
|
|
254 |
{loadavg1} { return LOADAVG1; } |
{loadavg1} { return LOADAVG1; } |
255 |
{loadavg5} { return LOADAVG5; } |
{loadavg5} { return LOADAVG5; } |
256 |
{loadavg15} { return LOADAVG15; } |
{loadavg15} { return LOADAVG15; } |
|
|
|
257 |
{greater} { return GREATER; } |
{greater} { return GREATER; } |
258 |
{less} { return LESS; } |
{less} { return LESS; } |
259 |
{equal} { return EQUAL; } |
{equal} { return EQUAL; } |
260 |
{notequal} { return NOTEQUAL; } |
{notequal} { return NOTEQUAL; } |
261 |
|
|
262 |
|
include { BEGIN(INCLUDE); } |
263 |
|
|
264 |
|
|
265 |
depend(s)?[ \t]+(on[ \t]*)? { |
depend(s)?[ \t]+(on[ \t]*)? { |
266 |
BEGIN(DEPEND_COND); |
BEGIN(DEPEND_COND); |
267 |
return DEPENDS; |
return DEPENDS; |
292 |
return CHECKHOST; |
return CHECKHOST; |
293 |
} |
} |
294 |
|
|
295 |
|
[a-zA-Z0-9]+"://" { |
296 |
|
yylval.url= |
297 |
|
create_URL(xstrndup(yytext, strlen(yytext)-3)); |
298 |
|
BEGIN(URL_COND); |
299 |
|
} |
300 |
|
|
301 |
{number} { |
{number} { |
302 |
yylval.number= atoi(yytext); |
yylval.number= atoi(yytext); |
303 |
save_arg(); return NUMBER; |
save_arg(); return NUMBER; |
464 |
|
|
465 |
} |
} |
466 |
|
|
467 |
|
<URL_COND>{ |
468 |
|
|
469 |
|
{ws} { |
470 |
|
exit_url_scan: |
471 |
|
BEGIN(INITIAL); |
472 |
|
if(!yylval.url->path) |
473 |
|
yylval.url->path= xstrdup("/"); |
474 |
|
if(!yylval.url->hostname) |
475 |
|
yyerror("missing hostname in URL"); |
476 |
|
save_arg(); return URLOBJECT; |
477 |
|
} |
478 |
|
|
479 |
|
[\n] { |
480 |
|
/* Do not count line number here, it mess up the |
481 |
|
* overall count */ |
482 |
|
goto exit_url_scan; |
483 |
|
} |
484 |
|
|
485 |
|
|
486 |
|
[^:@ ]+/[:][^@: ]+[@] { |
487 |
|
yylval.url->user= xstrdup(yytext); |
488 |
|
} |
489 |
|
|
490 |
|
[:][^@ ]+[@] { |
491 |
|
yytext++; |
492 |
|
yylval.url->password= xstrndup(yytext, strlen(yytext)-1); |
493 |
|
} |
494 |
|
|
495 |
|
[^/?:#\r\n ]+ { |
496 |
|
yylval.url->hostname= xstrdup(yytext); |
497 |
|
} |
498 |
|
|
499 |
|
[:]{number} { |
500 |
|
yylval.url->port= atoi(++yytext); |
501 |
|
} |
502 |
|
|
503 |
|
[/][^?#\r\n ]* { |
504 |
|
yylval.url->path= xstrdup(yytext); |
505 |
|
} |
506 |
|
|
507 |
|
[?][^#\r\n ]* { |
508 |
|
/* The separator char ? is included on purpose |
509 |
|
* so it's easy to recreate the full url request */ |
510 |
|
yylval.url->query= xstrdup(yytext); |
511 |
|
} |
512 |
|
|
513 |
|
[#][^\r\n ]* { |
514 |
|
/* EMPTY */ |
515 |
|
} |
516 |
|
|
517 |
|
} |
518 |
|
|
519 |
<INITIAL,ARGUMENT_COND,SERVICE_COND,DEPEND_COND>. { |
<INITIAL,ARGUMENT_COND,SERVICE_COND,DEPEND_COND>. { |
520 |
return yytext[0]; |
return yytext[0]; |
521 |
} |
} |
632 |
globfree(&globbuf); |
globfree(&globbuf); |
633 |
} |
} |
634 |
|
|
635 |
|
|
636 |
static void push_buffer_state(YY_BUFFER_STATE buffer, char *filename) { |
static void push_buffer_state(YY_BUFFER_STATE buffer, char *filename) { |
637 |
|
|
638 |
if ( buffer_stack_ptr >= MAX_STACK_DEPTH ) |
if ( buffer_stack_ptr >= MAX_STACK_DEPTH ) |
639 |
{ |
{ |
640 |
|
|
641 |
yyerror( "include files are nested too deeply" ); |
yyerror("include files are nested too deeply" ); |
642 |
exit( 1 ); |
exit( 1 ); |
643 |
|
|
644 |
} |
} |
658 |
|
|
659 |
} |
} |
660 |
|
|
661 |
|
|
662 |
static int pop_buffer_state(void) { |
static int pop_buffer_state(void) { |
663 |
|
|
664 |
if ( --buffer_stack_ptr < 0 ) { |
if ( --buffer_stack_ptr < 0 ) { |
681 |
|
|
682 |
} |
} |
683 |
|
|
684 |
|
|
685 |
static void save_arg(void) { |
static void save_arg(void) { |
686 |
|
|
687 |
arglineno=lineno; |
arglineno=lineno; |
690 |
argyytext=xstrdup(yytext); |
argyytext=xstrdup(yytext); |
691 |
|
|
692 |
} |
} |
693 |
|
|
694 |
|
|
695 |
|
static URL_T create_URL(char *proto) { |
696 |
|
ASSERT(proto); |
697 |
|
URL_T url; |
698 |
|
NEW(url); |
699 |
|
url->protocol= proto; |
700 |
|
if(IS(url->protocol, "https")) { |
701 |
|
url->port= 443; |
702 |
|
if(!have_ssl()) |
703 |
|
yyerror("HTTPS protocol not supported -- SSL support disabled" ); |
704 |
|
} else if(IS(url->protocol, "http")) { |
705 |
|
url->port= 80; |
706 |
|
} |
707 |
|
return url; |
708 |
|
} |