8
static char *yyPTR = NULL;
18
#define YY_INPUT(buf,result,max_size) \
19
if ((yyPTR == NULL) || (*yyPTR == '\0')) \
21
debug(13,"YY_INPUT unavail, %d reqd",max_size); \
26
yyBUFL=strlen(yyPTR); \
27
debug(13,"YY_INPUT \"%s\" (%d) avail, %d reqd",\
28
yyPTR,yyBUFL,max_size); \
29
if (yyBUFL > max_size) yyBUFL=max_size; \
30
memcpy(buf,yyPTR,yyBUFL); \
35
#else /* this is most probably native lex? */
41
#define input() (((yyPTR == NULL) || (*yyPTR == '\0'))?NULL:*yyPTR++)
43
#define unput(c) (*--yyPTR = (c))
54
Speed [Ss][Pp][Ee][Ee][Dd]
55
Phone [Pp][Hh][Oo][Nn][Ee]
57
Address [Aa][Dd][Dd][Rr][Ee][Ss][Ss]
82
Dow ({Sun}|{Mon}|{Tue}|{Wed}|{Thu}|{Fri}|{Sat}|{Any}|{Wk}|{We})
83
Hour (([0-1][0-9])|(2[0-3]))
88
Ident [A-Za-z][A-Za-z0-9]*
89
Timestr {Dow}({Hour}{Minute}\-{Hour}{Minute})?
90
Addrstr (({Decimal}|\*):)?({Decimal}|\*)\/({Numeric}|\*)(.({Numeric}|\*))?(@({Ident}|\*))?
93
{Decimal} {debug(13,"Decimal: \"%s\"",yytext);yylval=strtol(yytext,NULL,0);return(NUMBER);}
94
{Timestr} {debug(13,"Timestr: \"%s\"",yytext);yylval=chktime(yytext);return(TIMESTR);}
95
{Phstr} {debug(13,"Phstr: \"%s\"",yytext);yylval=PHSTR;return(PHSTR);}
96
{Eq} {yylval=EQ;return(AROP);}
97
{Ne} {yylval=NE;return(AROP);}
98
{Gt} {yylval=GT;return(AROP);}
99
{Ge} {yylval=GE;return(AROP);}
100
{Lt} {yylval=LT;return(AROP);}
101
{Le} {yylval=LE;return(AROP);}
102
{And} {yylval=AND;return(LOGOP);}
103
{Or} {yylval=OR;return(LOGOP);}
104
{Not} {yylval=NOT;return(NOT);}
105
{Xor} {yylval=XOR;return(LOGOP);}
106
{Lb} {yylval=LB;return(LB);}
107
{Rb} {yylval=RB;return(RB);}
108
{Comma} {yylval=COMMA;return(COMMA);}
109
{Asterisk} {yylval=ASTERISK;return(ASTERISK);}
110
{Speed} {yylval=SPEED;return(SPEED);}
111
{Phone} {yylval=PHONE;return(PHONE);}
112
{Time} {yylval=TIME;return(TIME);}
113
{Address} {yylval=ADDRESS;return(ADDRESS);}
114
{Ident} {debug(13,"Ident: \"%s\"",yytext);yylval=flagfor(yytext);return(IDENT);}
115
{Addrstr} {debug(13,"Addrstr: \"%s\"",yytext);yylval=chkaddr(yytext);return(ADDRSTR);}
123
debug(13,"flagfor \"%s\"",str);
124
for (i=0;fkey[i].key;i++)
125
if (strcasecmp(str,fkey[i].key) == 0) return fkey[i].flag;
135
if ((addr=parsefnode(str)) == NULL)
137
logerr("unparsable address \"%s\" in expression",str);
140
debug(13,"chkaddr: does spec %s match remote address ?",
141
ascfnode(addr,0x1f));
142
if ((addr->domain) && (nodebuf->addr.domain) &&
143
(strcasecmp(addr->domain,nodebuf->addr.domain) != 0))
145
if (((int)addr->zone != -1) &&(addr->zone != 0) &&
146
(addr->zone != nodebuf->addr.zone)) rc=0;
147
if (((int)addr->net != -1) && (addr->net != nodebuf->addr.net)) rc=0;
148
if (((int)addr->node != -1) && (addr->node != nodebuf->addr.node)) rc=0;
149
if (((int)addr->point != -1) && (addr->point != nodebuf->addr.point)) rc=0;
157
int h1,h2,m1,m2,beg,end,cur,dayok,day;
159
if (strncasecmp(str,"Sun",3) == 0) day=0;
160
else if (strncasecmp(str,"Mon",3) == 0) day=1;
161
else if (strncasecmp(str,"Tue",3) == 0) day=2;
162
else if (strncasecmp(str,"Wed",3) == 0) day=3;
163
else if (strncasecmp(str,"Thu",3) == 0) day=4;
164
else if (strncasecmp(str,"Fri",3) == 0) day=5;
165
else if (strncasecmp(str,"Sat",3) == 0) day=6;
166
else if (strncasecmp(str,"Any",3) == 0) day=-1;
167
else if (strncasecmp(str,"Wk",2) == 0) day=-2;
168
else if (strncasecmp(str,"We",2) == 0) day=-3;
171
debug(13,"chkday: does day %d match spec %d ?",now->tm_wday,day);
172
if (day >= 0) dayok=(now->tm_wday == day);
175
case -3: dayok=((now->tm_wday == 0) || (now->tm_wday == 6)); break;
176
case -2: dayok=((now->tm_wday != 0) && (now->tm_wday != 6)); break;
177
case -1: dayok=1; break;
178
default: logerr("internal error: chkday got %d",day); dayok=0; break;
181
if (dayok == 0) return 0;
183
while (*str && ((*str < '0') || (*str > '9'))) str++;
188
if (sscanf(str,"%02d%02d-%02d%02d",&h1,&m1,&h2,&m2) != 4)
190
logerr("invalid time string \"%s\" in expression",str);
193
debug(13,"chktime: is %02d:%02d between %02d:%02d and %02d:%02d ?",
194
now->tm_hour,now->tm_min,h1,m1,h2,m2);
195
cur=now->tm_hour*60+now->tm_min;
200
return ((cur >= beg) && (cur <= end));
204
return ((cur >= beg) || (cur <= end));