/* A recursive-descent parser generated by peg 0.1.18 */ #include #include #include #define YYRULECOUNT 40 #line 9 "parse.peg" #if HAVE_CONFIG_H # include #endif #include "net.h" #include "types.h" #include "rinetd.h" #include "parse.h" #define YY_CTX_LOCAL 1 #define YY_CTX_MEMBERS \ FILE *fp; \ int currentLine; \ int isAuthAllow; \ char *tmpPort, *bindPort, *connectPort; \ int tmpProto, bindProto, connectProto; \ int serverTimeout; \ char *bindAddress, *connectAddress, *sourceAddress; #define YY_INPUT(yyctx, buf, result, max_size) \ { \ int yyc = fgetc(yyctx->fp); \ result = (EOF == yyc) ? 0 : (*(buf) = yyc, 1); \ } #define PARSE_ERROR exit(1); #if defined __clang__ #pragma clang diagnostic ignored "-Wunused-parameter" #pragma clang diagnostic ignored "-Wunused-label" #elif defined __GNUC__ #pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wunused-label" #endif #ifndef YY_MALLOC #define YY_MALLOC(C, N) malloc(N) #endif #ifndef YY_REALLOC #define YY_REALLOC(C, P, N) realloc(P, N) #endif #ifndef YY_FREE #define YY_FREE(C, P) free(P) #endif #ifndef YY_LOCAL #define YY_LOCAL(T) static T #endif #ifndef YY_ACTION #define YY_ACTION(T) static T #endif #ifndef YY_RULE #define YY_RULE(T) static T #endif #ifndef YY_PARSE #define YY_PARSE(T) T #endif #ifndef YYPARSE #define YYPARSE yyparse #endif #ifndef YYPARSEFROM #define YYPARSEFROM yyparsefrom #endif #ifndef YYRELEASE #define YYRELEASE yyrelease #endif #ifndef YY_BEGIN #define YY_BEGIN ( yy->__begin= yy->__pos, 1) #endif #ifndef YY_END #define YY_END ( yy->__end= yy->__pos, 1) #endif #ifdef YY_DEBUG # define yyprintf(args) fprintf args #else # define yyprintf(args) #endif #ifndef YYSTYPE #define YYSTYPE int #endif #ifndef YY_STACK_SIZE #define YY_STACK_SIZE 128 #endif #ifndef YY_BUFFER_SIZE #define YY_BUFFER_SIZE 1024 #endif #ifndef YY_PART typedef struct _yycontext yycontext; typedef void (*yyaction)(yycontext *yy, char *yytext, int yyleng); typedef struct _yythunk { int begin, end; yyaction action; struct _yythunk *next; } yythunk; struct _yycontext { char *__buf; int __buflen; int __pos; int __limit; char *__text; int __textlen; int __begin; int __end; int __textmax; yythunk *__thunks; int __thunkslen; int __thunkpos; YYSTYPE __; YYSTYPE *__val; YYSTYPE *__vals; int __valslen; #ifdef YY_CTX_MEMBERS YY_CTX_MEMBERS #endif }; #ifdef YY_CTX_LOCAL #define YY_CTX_PARAM_ yycontext *yyctx, #define YY_CTX_PARAM yycontext *yyctx #define YY_CTX_ARG_ yyctx, #define YY_CTX_ARG yyctx #ifndef YY_INPUT #define YY_INPUT(yy, buf, result, max_size) \ { \ int yyc= getchar(); \ result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \ yyprintf((stderr, "<%c>", yyc)); \ } #endif #else #define YY_CTX_PARAM_ #define YY_CTX_PARAM #define YY_CTX_ARG_ #define YY_CTX_ARG yycontext _yyctx= { 0, 0 }; yycontext *yyctx= &_yyctx; #ifndef YY_INPUT #define YY_INPUT(buf, result, max_size) \ { \ int yyc= getchar(); \ result= (EOF == yyc) ? 0 : (*(buf)= yyc, 1); \ yyprintf((stderr, "<%c>", yyc)); \ } #endif #endif YY_LOCAL(int) yyrefill(yycontext *yy) { int yyn; while (yy->__buflen - yy->__pos < 512) { yy->__buflen *= 2; yy->__buf= (char *)YY_REALLOC(yy, yy->__buf, yy->__buflen); } #ifdef YY_CTX_LOCAL YY_INPUT(yy, (yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos)); #else YY_INPUT((yy->__buf + yy->__pos), yyn, (yy->__buflen - yy->__pos)); #endif if (!yyn) return 0; yy->__limit += yyn; return 1; } YY_LOCAL(int) yymatchDot(yycontext *yy) { if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0; ++yy->__pos; return 1; } YY_LOCAL(int) yymatchChar(yycontext *yy, int c) { if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0; if ((unsigned char)yy->__buf[yy->__pos] == c) { ++yy->__pos; yyprintf((stderr, " ok yymatchChar(yy, %c) @ %s\n", c, yy->__buf+yy->__pos)); return 1; } yyprintf((stderr, " fail yymatchChar(yy, %c) @ %s\n", c, yy->__buf+yy->__pos)); return 0; } YY_LOCAL(int) yymatchString(yycontext *yy, const char *s) { int yysav= yy->__pos; while (*s) { if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0; if (yy->__buf[yy->__pos] != *s) { yy->__pos= yysav; return 0; } ++s; ++yy->__pos; } return 1; } YY_LOCAL(int) yymatchClass(yycontext *yy, unsigned char *bits) { int c; if (yy->__pos >= yy->__limit && !yyrefill(yy)) return 0; c= (unsigned char)yy->__buf[yy->__pos]; if (bits[c >> 3] & (1 << (c & 7))) { ++yy->__pos; yyprintf((stderr, " ok yymatchClass @ %s\n", yy->__buf+yy->__pos)); return 1; } yyprintf((stderr, " fail yymatchClass @ %s\n", yy->__buf+yy->__pos)); return 0; } YY_LOCAL(void) yyDo(yycontext *yy, yyaction action, int begin, int end) { while (yy->__thunkpos >= yy->__thunkslen) { yy->__thunkslen *= 2; yy->__thunks= (yythunk *)YY_REALLOC(yy, yy->__thunks, sizeof(yythunk) * yy->__thunkslen); } yy->__thunks[yy->__thunkpos].begin= begin; yy->__thunks[yy->__thunkpos].end= end; yy->__thunks[yy->__thunkpos].action= action; ++yy->__thunkpos; } YY_LOCAL(int) yyText(yycontext *yy, int begin, int end) { int yyleng= end - begin; if (yyleng <= 0) yyleng= 0; else { while (yy->__textlen < (yyleng + 1)) { yy->__textlen *= 2; yy->__text= (char *)YY_REALLOC(yy, yy->__text, yy->__textlen); } memcpy(yy->__text, yy->__buf + begin, yyleng); } yy->__text[yyleng]= '\0'; return yyleng; } YY_LOCAL(void) yyDone(yycontext *yy) { int pos; for (pos= 0; pos < yy->__thunkpos; ++pos) { yythunk *thunk= &yy->__thunks[pos]; int yyleng= thunk->end ? yyText(yy, thunk->begin, thunk->end) : thunk->begin; yyprintf((stderr, "DO [%d] %p %s\n", pos, thunk->action, yy->__text)); thunk->action(yy, yy->__text, yyleng); } yy->__thunkpos= 0; } YY_LOCAL(void) yyCommit(yycontext *yy) { if ((yy->__limit -= yy->__pos)) { memmove(yy->__buf, yy->__buf + yy->__pos, yy->__limit); } yy->__begin -= yy->__pos; yy->__end -= yy->__pos; yy->__pos= yy->__thunkpos= 0; } YY_LOCAL(int) yyAccept(yycontext *yy, int tp0) { if (tp0) { fprintf(stderr, "accept denied at %d\n", tp0); return 0; } else { yyDone(yy); yyCommit(yy); } return 1; } YY_LOCAL(void) yyPush(yycontext *yy, char *text, int count) { yy->__val += count; while (yy->__valslen <= yy->__val - yy->__vals) { long offset= yy->__val - yy->__vals; yy->__valslen *= 2; yy->__vals= (YYSTYPE *)YY_REALLOC(yy, yy->__vals, sizeof(YYSTYPE) * yy->__valslen); yy->__val= yy->__vals + offset; } } YY_LOCAL(void) yyPop(yycontext *yy, char *text, int count) { yy->__val -= count; } YY_LOCAL(void) yySet(yycontext *yy, char *text, int count) { yy->__val[count]= yy->__; } #endif /* YY_PART */ #define YYACCEPT yyAccept(yy, yythunkpos0) YY_RULE(int) yy_eof(yycontext *yy); /* 40 */ YY_RULE(int) yy_id(yycontext *yy); /* 39 */ YY_RULE(int) yy_label(yycontext *yy); /* 38 */ YY_RULE(int) yy_digit(yycontext *yy); /* 37 */ YY_RULE(int) yy_hexdigit(yycontext *yy); /* 36 */ YY_RULE(int) yy_hostname(yycontext *yy); /* 35 */ YY_RULE(int) yy_ipv6(yycontext *yy); /* 34 */ YY_RULE(int) yy_ipv4(yycontext *yy); /* 33 */ YY_RULE(int) yy_name(yycontext *yy); /* 32 */ YY_RULE(int) yy_filename(yycontext *yy); /* 31 */ YY_RULE(int) yy_pattern(yycontext *yy); /* 30 */ YY_RULE(int) yy_auth_key(yycontext *yy); /* 29 */ YY_RULE(int) yy_service(yycontext *yy); /* 28 */ YY_RULE(int) yy_proto(yycontext *yy); /* 27 */ YY_RULE(int) yy_port(yycontext *yy); /* 26 */ YY_RULE(int) yy_number(yycontext *yy); /* 25 */ YY_RULE(int) yy_option_source(yycontext *yy); /* 24 */ YY_RULE(int) yy_option_timeout(yycontext *yy); /* 23 */ YY_RULE(int) yy_option(yycontext *yy); /* 22 */ YY_RULE(int) yy_option_list(yycontext *yy); /* 21 */ YY_RULE(int) yy_full_port(yycontext *yy); /* 20 */ YY_RULE(int) yy_address(yycontext *yy); /* 19 */ YY_RULE(int) yy_server_options(yycontext *yy); /* 18 */ YY_RULE(int) yy_connect_port(yycontext *yy); /* 17 */ YY_RULE(int) yy_connect_address(yycontext *yy); /* 16 */ YY_RULE(int) yy_bind_port(yycontext *yy); /* 15 */ YY_RULE(int) yy_bind_address(yycontext *yy); /* 14 */ YY_RULE(int) yy_logcommon(yycontext *yy); /* 13 */ YY_RULE(int) yy_pidlogfile(yycontext *yy); /* 12 */ YY_RULE(int) yy_logfile(yycontext *yy); /* 11 */ YY_RULE(int) yy_auth_rule(yycontext *yy); /* 10 */ YY_RULE(int) yy_server_rule(yycontext *yy); /* 9 */ YY_RULE(int) yy_comment(yycontext *yy); /* 8 */ YY_RULE(int) yy_command(yycontext *yy); /* 7 */ YY_RULE(int) yy__(yycontext *yy); /* 6 */ YY_RULE(int) yy_invalid_syntax(yycontext *yy); /* 5 */ YY_RULE(int) yy_eol(yycontext *yy); /* 4 */ YY_RULE(int) yy_line(yycontext *yy); /* 3 */ YY_RULE(int) yy_sol(yycontext *yy); /* 2 */ YY_RULE(int) yy_file(yycontext *yy); /* 1 */ YY_ACTION(void) yy_1_sol(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_sol\n")); { #line 156 ++yy->currentLine; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_invalid_syntax(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_invalid_syntax\n")); { #line 131 fprintf(stderr, "rinetd: invalid syntax at line %d: %s\n", yy->currentLine, yytext); PARSE_ERROR; /* FIXME */ ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_logcommon(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_logcommon\n")); { #line 126 logFormatCommon = 1; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_pidlogfile(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_pidlogfile\n")); { #line 118 pidLogFileName = strdup(yytext); if (!pidLogFileName) { PARSE_ERROR; } ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_logfile(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_logfile\n")); { #line 110 logFileName = strdup(yytext); if (!logFileName) { PARSE_ERROR; } ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_auth_key(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_auth_key\n")); { #line 107 yy->isAuthAllow = (yytext[0] == 'a'); ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_auth_rule(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_auth_rule\n")); { #line 85 allRules = (Rule *) realloc(allRules, sizeof(Rule) * (allRulesCount + 1)); if (!allRules) { PARSE_ERROR; } allRules[allRulesCount].pattern = strdup(yytext); if (!allRules[allRulesCount].pattern) { PARSE_ERROR; } allRules[allRulesCount].type = yy->isAuthAllow ? allowRule : denyRule; if (seTotal > 0) { if (seInfo[seTotal - 1].rulesStart == 0) { seInfo[seTotal - 1].rulesStart = allRulesCount; } ++seInfo[seTotal - 1].rulesCount; } else { ++globalRulesCount; } ++allRulesCount; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_3_proto(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_3_proto\n")); { #line 82 yy->tmpProto = IPPROTO_TCP; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_2_proto(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_2_proto\n")); { #line 81 yy->tmpProto = IPPROTO_UDP; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_proto(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_proto\n")); { #line 80 yy->tmpProto = IPPROTO_TCP; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_port(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_port\n")); { #line 79 yy->tmpPort = strdup(yytext); ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_option_source(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_option_source\n")); { #line 75 yy->sourceAddress = strdup(yytext); ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_option_timeout(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_option_timeout\n")); { #line 74 yy->serverTimeout = atoi(yytext); ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_connect_port(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_connect_port\n")); { #line 69 yy->connectPort = yy->tmpPort; yy->connectProto = yy->tmpProto; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_bind_port(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_bind_port\n")); { #line 68 yy->bindPort = yy->tmpPort; yy->bindProto = yy->tmpProto; ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_connect_address(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_connect_address\n")); { #line 67 yy->connectAddress = strdup(yytext); ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_bind_address(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_bind_address\n")); { #line 66 yy->bindAddress = strdup(yytext); ; } #undef yythunkpos #undef yypos #undef yy } YY_ACTION(void) yy_1_server_rule(yycontext *yy, char *yytext, int yyleng) { #define __ yy->__ #define yypos yy->__pos #define yythunkpos yy->__thunkpos yyprintf((stderr, "do yy_1_server_rule\n")); { #line 51 addServer(yy->bindAddress, yy->bindPort, yy->bindProto, yy->connectAddress, yy->connectPort, yy->connectProto, yy->serverTimeout > 0 ? yy->serverTimeout : RINETD_DEFAULT_UDP_TIMEOUT, yy->sourceAddress); free(yy->bindAddress); free(yy->connectAddress); free(yy->sourceAddress); yy->bindAddress = yy->connectAddress = yy->sourceAddress = NULL; free(yy->bindPort); free(yy->connectPort); yy->bindPort = yy->connectPort = NULL; yy->serverTimeout = 0; ; } #undef yythunkpos #undef yypos #undef yy } YY_RULE(int) yy_eof(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "eof")); if (!yymatchChar(yy, '\0')) goto l1; yyprintf((stderr, " ok %s @ %s\n", "eof", yy->__buf+yy->__pos)); return 1; l1:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "eof", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_id(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "id")); if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\000\000\376\377\377\207\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l2; yyprintf((stderr, " ok %s @ %s\n", "id", yy->__buf+yy->__pos)); return 1; l2:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "id", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_label(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "label")); { int yypos4= yy->__pos, yythunkpos4= yy->__thunkpos; if (!yy_id(yy)) goto l5; goto l4; l5:; yy->__pos= yypos4; yy->__thunkpos= yythunkpos4; if (!yy_digit(yy)) goto l3; } l4:; l6:; { int yypos7= yy->__pos, yythunkpos7= yy->__thunkpos; { int yypos8= yy->__pos, yythunkpos8= yy->__thunkpos; if (!yymatchChar(yy, '-')) goto l9; goto l8; l9:; yy->__pos= yypos8; yy->__thunkpos= yythunkpos8; if (!yy_id(yy)) goto l10; goto l8; l10:; yy->__pos= yypos8; yy->__thunkpos= yythunkpos8; if (!yy_digit(yy)) goto l7; } l8:; goto l6; l7:; yy->__pos= yypos7; yy->__thunkpos= yythunkpos7; } yyprintf((stderr, " ok %s @ %s\n", "label", yy->__buf+yy->__pos)); return 1; l3:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "label", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_digit(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "digit")); if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l11; yyprintf((stderr, " ok %s @ %s\n", "digit", yy->__buf+yy->__pos)); return 1; l11:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "digit", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_hexdigit(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "hexdigit")); if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\000\377\003\176\000\000\000\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l12; yyprintf((stderr, " ok %s @ %s\n", "hexdigit", yy->__buf+yy->__pos)); return 1; l12:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "hexdigit", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_hostname(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "hostname")); l14:; { int yypos15= yy->__pos, yythunkpos15= yy->__thunkpos; if (!yy_label(yy)) goto l15; if (!yymatchChar(yy, '.')) goto l15; goto l14; l15:; yy->__pos= yypos15; yy->__thunkpos= yythunkpos15; } if (!yy_name(yy)) goto l13; { int yypos16= yy->__pos, yythunkpos16= yy->__thunkpos; if (!yymatchChar(yy, '.')) goto l16; goto l17; l16:; yy->__pos= yypos16; yy->__thunkpos= yythunkpos16; } l17:; yyprintf((stderr, " ok %s @ %s\n", "hostname", yy->__buf+yy->__pos)); return 1; l13:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "hostname", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_ipv6(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "ipv6")); { int yypos19= yy->__pos, yythunkpos19= yy->__thunkpos; { int yypos23= yy->__pos, yythunkpos23= yy->__thunkpos; if (!yy_hexdigit(yy)) goto l24; goto l23; l24:; yy->__pos= yypos23; yy->__thunkpos= yythunkpos23; if (!yymatchChar(yy, ':')) goto l20; } l23:; l21:; { int yypos22= yy->__pos, yythunkpos22= yy->__thunkpos; { int yypos25= yy->__pos, yythunkpos25= yy->__thunkpos; if (!yy_hexdigit(yy)) goto l26; goto l25; l26:; yy->__pos= yypos25; yy->__thunkpos= yythunkpos25; if (!yymatchChar(yy, ':')) goto l22; } l25:; goto l21; l22:; yy->__pos= yypos22; yy->__thunkpos= yythunkpos22; } goto l19; l20:; yy->__pos= yypos19; yy->__thunkpos= yythunkpos19; if (!yymatchChar(yy, '[')) goto l18; { int yypos29= yy->__pos, yythunkpos29= yy->__thunkpos; if (!yy_hexdigit(yy)) goto l30; goto l29; l30:; yy->__pos= yypos29; yy->__thunkpos= yythunkpos29; if (!yymatchChar(yy, ':')) goto l18; } l29:; l27:; { int yypos28= yy->__pos, yythunkpos28= yy->__thunkpos; { int yypos31= yy->__pos, yythunkpos31= yy->__thunkpos; if (!yy_hexdigit(yy)) goto l32; goto l31; l32:; yy->__pos= yypos31; yy->__thunkpos= yythunkpos31; if (!yymatchChar(yy, ':')) goto l28; } l31:; goto l27; l28:; yy->__pos= yypos28; yy->__thunkpos= yythunkpos28; } if (!yymatchChar(yy, ']')) goto l18; } l19:; yyprintf((stderr, " ok %s @ %s\n", "ipv6", yy->__buf+yy->__pos)); return 1; l18:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "ipv6", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_ipv4(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "ipv4")); { int yypos34= yy->__pos, yythunkpos34= yy->__thunkpos; if (!yy_number(yy)) goto l35; if (!yymatchChar(yy, '.')) goto l35; if (!yy_number(yy)) goto l35; if (!yymatchChar(yy, '.')) goto l35; if (!yy_number(yy)) goto l35; if (!yymatchChar(yy, '.')) goto l35; if (!yy_number(yy)) goto l35; goto l34; l35:; yy->__pos= yypos34; yy->__thunkpos= yythunkpos34; if (!yymatchChar(yy, '0')) goto l33; } l34:; yyprintf((stderr, " ok %s @ %s\n", "ipv4", yy->__buf+yy->__pos)); return 1; l33:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "ipv4", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_name(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "name")); if (!yy_id(yy)) goto l36; l37:; { int yypos38= yy->__pos, yythunkpos38= yy->__thunkpos; { int yypos39= yy->__pos, yythunkpos39= yy->__thunkpos; if (!yymatchChar(yy, '-')) goto l40; goto l39; l40:; yy->__pos= yypos39; yy->__thunkpos= yythunkpos39; if (!yy_id(yy)) goto l41; goto l39; l41:; yy->__pos= yypos39; yy->__thunkpos= yythunkpos39; if (!yy_digit(yy)) goto l38; } l39:; goto l37; l38:; yy->__pos= yypos38; yy->__thunkpos= yythunkpos38; } yyprintf((stderr, " ok %s @ %s\n", "name", yy->__buf+yy->__pos)); return 1; l36:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "name", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_filename(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "filename")); { int yypos43= yy->__pos, yythunkpos43= yy->__thunkpos; if (!yymatchChar(yy, '"')) goto l44; if (!yymatchClass(yy, (unsigned char *)"\377\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377")) goto l44; l45:; { int yypos46= yy->__pos, yythunkpos46= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\377\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377")) goto l46; goto l45; l46:; yy->__pos= yypos46; yy->__thunkpos= yythunkpos46; } if (!yymatchChar(yy, '"')) goto l44; goto l43; l44:; yy->__pos= yypos43; yy->__thunkpos= yythunkpos43; if (!yymatchClass(yy, (unsigned char *)"\377\331\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377")) goto l42; l47:; { int yypos48= yy->__pos, yythunkpos48= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\377\331\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377")) goto l48; goto l47; l48:; yy->__pos= yypos48; yy->__thunkpos= yythunkpos48; } } l43:; yyprintf((stderr, " ok %s @ %s\n", "filename", yy->__buf+yy->__pos)); return 1; l42:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "filename", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_pattern(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "pattern")); { int yypos52= yy->__pos, yythunkpos52= yy->__thunkpos; if (!yy_hexdigit(yy)) goto l53; goto l52; l53:; yy->__pos= yypos52; yy->__thunkpos= yythunkpos52; if (!yymatchChar(yy, '[')) goto l54; goto l52; l54:; yy->__pos= yypos52; yy->__thunkpos= yythunkpos52; if (!yymatchChar(yy, ']')) goto l55; goto l52; l55:; yy->__pos= yypos52; yy->__thunkpos= yythunkpos52; if (!yymatchChar(yy, ':')) goto l56; goto l52; l56:; yy->__pos= yypos52; yy->__thunkpos= yythunkpos52; if (!yymatchChar(yy, '.')) goto l57; goto l52; l57:; yy->__pos= yypos52; yy->__thunkpos= yythunkpos52; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\004\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l49; } l52:; l50:; { int yypos51= yy->__pos, yythunkpos51= yy->__thunkpos; { int yypos58= yy->__pos, yythunkpos58= yy->__thunkpos; if (!yy_hexdigit(yy)) goto l59; goto l58; l59:; yy->__pos= yypos58; yy->__thunkpos= yythunkpos58; if (!yymatchChar(yy, '[')) goto l60; goto l58; l60:; yy->__pos= yypos58; yy->__thunkpos= yythunkpos58; if (!yymatchChar(yy, ']')) goto l61; goto l58; l61:; yy->__pos= yypos58; yy->__thunkpos= yythunkpos58; if (!yymatchChar(yy, ':')) goto l62; goto l58; l62:; yy->__pos= yypos58; yy->__thunkpos= yythunkpos58; if (!yymatchChar(yy, '.')) goto l63; goto l58; l63:; yy->__pos= yypos58; yy->__thunkpos= yythunkpos58; if (!yymatchClass(yy, (unsigned char *)"\000\000\000\000\000\004\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l51; } l58:; goto l50; l51:; yy->__pos= yypos51; yy->__thunkpos= yythunkpos51; } yyprintf((stderr, " ok %s @ %s\n", "pattern", yy->__buf+yy->__pos)); return 1; l49:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "pattern", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_auth_key(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "auth_key")); yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l64; #undef yytext #undef yyleng } { int yypos65= yy->__pos, yythunkpos65= yy->__thunkpos; if (!yymatchString(yy, "allow")) goto l66; goto l65; l66:; yy->__pos= yypos65; yy->__thunkpos= yythunkpos65; if (!yymatchString(yy, "deny")) goto l64; } l65:; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l64; #undef yytext #undef yyleng } yyDo(yy, yy_1_auth_key, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "auth_key", yy->__buf+yy->__pos)); return 1; l64:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "auth_key", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_service(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "service")); if (!yy_name(yy)) goto l67; yyprintf((stderr, " ok %s @ %s\n", "service", yy->__buf+yy->__pos)); return 1; l67:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "service", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_proto(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "proto")); { int yypos69= yy->__pos, yythunkpos69= yy->__thunkpos; if (!yymatchString(yy, "/tcp")) goto l70; yyDo(yy, yy_1_proto, yy->__begin, yy->__end); goto l69; l70:; yy->__pos= yypos69; yy->__thunkpos= yythunkpos69; if (!yymatchString(yy, "/udp")) goto l71; yyDo(yy, yy_2_proto, yy->__begin, yy->__end); goto l69; l71:; yy->__pos= yypos69; yy->__thunkpos= yythunkpos69; if (!yymatchString(yy, "")) goto l68; yyDo(yy, yy_3_proto, yy->__begin, yy->__end); } l69:; yyprintf((stderr, " ok %s @ %s\n", "proto", yy->__buf+yy->__pos)); return 1; l68:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "proto", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_port(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "port")); yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l72; #undef yytext #undef yyleng } { int yypos73= yy->__pos, yythunkpos73= yy->__thunkpos; if (!yy_number(yy)) goto l74; goto l73; l74:; yy->__pos= yypos73; yy->__thunkpos= yythunkpos73; if (!yy_service(yy)) goto l72; } l73:; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l72; #undef yytext #undef yyleng } yyDo(yy, yy_1_port, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "port", yy->__buf+yy->__pos)); return 1; l72:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "port", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_number(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "number")); if (!yy_digit(yy)) goto l75; l76:; { int yypos77= yy->__pos, yythunkpos77= yy->__thunkpos; if (!yy_digit(yy)) goto l77; goto l76; l77:; yy->__pos= yypos77; yy->__thunkpos= yythunkpos77; } yyprintf((stderr, " ok %s @ %s\n", "number", yy->__buf+yy->__pos)); return 1; l75:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "number", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_option_source(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "option_source")); if (!yymatchString(yy, "src")) goto l78; { int yypos79= yy->__pos, yythunkpos79= yy->__thunkpos; if (!yy__(yy)) goto l79; goto l80; l79:; yy->__pos= yypos79; yy->__thunkpos= yythunkpos79; } l80:; if (!yymatchChar(yy, '=')) goto l78; { int yypos81= yy->__pos, yythunkpos81= yy->__thunkpos; if (!yy__(yy)) goto l81; goto l82; l81:; yy->__pos= yypos81; yy->__thunkpos= yythunkpos81; } l82:; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l78; #undef yytext #undef yyleng } if (!yy_address(yy)) goto l78; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l78; #undef yytext #undef yyleng } yyDo(yy, yy_1_option_source, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "option_source", yy->__buf+yy->__pos)); return 1; l78:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "option_source", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_option_timeout(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "option_timeout")); if (!yymatchString(yy, "timeout")) goto l83; { int yypos84= yy->__pos, yythunkpos84= yy->__thunkpos; if (!yy__(yy)) goto l84; goto l85; l84:; yy->__pos= yypos84; yy->__thunkpos= yythunkpos84; } l85:; if (!yymatchChar(yy, '=')) goto l83; { int yypos86= yy->__pos, yythunkpos86= yy->__thunkpos; if (!yy__(yy)) goto l86; goto l87; l86:; yy->__pos= yypos86; yy->__thunkpos= yythunkpos86; } l87:; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l83; #undef yytext #undef yyleng } if (!yy_number(yy)) goto l83; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l83; #undef yytext #undef yyleng } yyDo(yy, yy_1_option_timeout, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "option_timeout", yy->__buf+yy->__pos)); return 1; l83:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "option_timeout", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_option(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "option")); { int yypos89= yy->__pos, yythunkpos89= yy->__thunkpos; if (!yy_option_timeout(yy)) goto l90; goto l89; l90:; yy->__pos= yypos89; yy->__thunkpos= yythunkpos89; if (!yy_option_source(yy)) goto l88; } l89:; yyprintf((stderr, " ok %s @ %s\n", "option", yy->__buf+yy->__pos)); return 1; l88:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "option", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_option_list(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "option_list")); if (!yy_option(yy)) goto l91; { int yypos92= yy->__pos, yythunkpos92= yy->__thunkpos; { int yypos94= yy->__pos, yythunkpos94= yy->__thunkpos; if (!yy__(yy)) goto l94; goto l95; l94:; yy->__pos= yypos94; yy->__thunkpos= yythunkpos94; } l95:; if (!yymatchChar(yy, ',')) goto l92; { int yypos96= yy->__pos, yythunkpos96= yy->__thunkpos; if (!yy__(yy)) goto l96; goto l97; l96:; yy->__pos= yypos96; yy->__thunkpos= yythunkpos96; } l97:; if (!yy_option_list(yy)) goto l92; goto l93; l92:; yy->__pos= yypos92; yy->__thunkpos= yythunkpos92; } l93:; yyprintf((stderr, " ok %s @ %s\n", "option_list", yy->__buf+yy->__pos)); return 1; l91:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "option_list", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_full_port(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "full_port")); if (!yy_port(yy)) goto l98; if (!yy_proto(yy)) goto l98; yyprintf((stderr, " ok %s @ %s\n", "full_port", yy->__buf+yy->__pos)); return 1; l98:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "full_port", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_address(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "address")); { int yypos100= yy->__pos, yythunkpos100= yy->__thunkpos; if (!yy_ipv4(yy)) goto l101; goto l100; l101:; yy->__pos= yypos100; yy->__thunkpos= yythunkpos100; if (!yy_ipv6(yy)) goto l102; goto l100; l102:; yy->__pos= yypos100; yy->__thunkpos= yythunkpos100; if (!yy_hostname(yy)) goto l99; } l100:; yyprintf((stderr, " ok %s @ %s\n", "address", yy->__buf+yy->__pos)); return 1; l99:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "address", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_server_options(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "server_options")); if (!yymatchChar(yy, '[')) goto l103; { int yypos104= yy->__pos, yythunkpos104= yy->__thunkpos; if (!yy__(yy)) goto l104; goto l105; l104:; yy->__pos= yypos104; yy->__thunkpos= yythunkpos104; } l105:; if (!yy_option_list(yy)) goto l103; { int yypos106= yy->__pos, yythunkpos106= yy->__thunkpos; if (!yy__(yy)) goto l106; goto l107; l106:; yy->__pos= yypos106; yy->__thunkpos= yythunkpos106; } l107:; if (!yymatchChar(yy, ']')) goto l103; yyprintf((stderr, " ok %s @ %s\n", "server_options", yy->__buf+yy->__pos)); return 1; l103:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "server_options", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_connect_port(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "connect_port")); if (!yy_full_port(yy)) goto l108; yyDo(yy, yy_1_connect_port, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "connect_port", yy->__buf+yy->__pos)); return 1; l108:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "connect_port", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_connect_address(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "connect_address")); yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l109; #undef yytext #undef yyleng } if (!yy_address(yy)) goto l109; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l109; #undef yytext #undef yyleng } yyDo(yy, yy_1_connect_address, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "connect_address", yy->__buf+yy->__pos)); return 1; l109:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "connect_address", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_bind_port(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "bind_port")); if (!yy_full_port(yy)) goto l110; yyDo(yy, yy_1_bind_port, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "bind_port", yy->__buf+yy->__pos)); return 1; l110:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "bind_port", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_bind_address(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "bind_address")); yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l111; #undef yytext #undef yyleng } if (!yy_address(yy)) goto l111; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l111; #undef yytext #undef yyleng } yyDo(yy, yy_1_bind_address, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "bind_address", yy->__buf+yy->__pos)); return 1; l111:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "bind_address", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_logcommon(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "logcommon")); if (!yymatchString(yy, "logcommon")) goto l112; yyDo(yy, yy_1_logcommon, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "logcommon", yy->__buf+yy->__pos)); return 1; l112:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "logcommon", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_pidlogfile(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "pidlogfile")); if (!yymatchString(yy, "pidlogfile")) goto l113; if (!yy__(yy)) goto l113; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l113; #undef yytext #undef yyleng } if (!yy_filename(yy)) goto l113; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l113; #undef yytext #undef yyleng } yyDo(yy, yy_1_pidlogfile, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "pidlogfile", yy->__buf+yy->__pos)); return 1; l113:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "pidlogfile", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_logfile(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "logfile")); if (!yymatchString(yy, "logfile")) goto l114; if (!yy__(yy)) goto l114; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l114; #undef yytext #undef yyleng } if (!yy_filename(yy)) goto l114; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l114; #undef yytext #undef yyleng } yyDo(yy, yy_1_logfile, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "logfile", yy->__buf+yy->__pos)); return 1; l114:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "logfile", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_auth_rule(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "auth_rule")); if (!yy_auth_key(yy)) goto l115; if (!yy__(yy)) goto l115; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l115; #undef yytext #undef yyleng } if (!yy_pattern(yy)) goto l115; yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l115; #undef yytext #undef yyleng } yyDo(yy, yy_1_auth_rule, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "auth_rule", yy->__buf+yy->__pos)); return 1; l115:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "auth_rule", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_server_rule(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "server_rule")); if (!yy_bind_address(yy)) goto l116; if (!yy__(yy)) goto l116; if (!yy_bind_port(yy)) goto l116; if (!yy__(yy)) goto l116; if (!yy_connect_address(yy)) goto l116; if (!yy__(yy)) goto l116; if (!yy_connect_port(yy)) goto l116; { int yypos117= yy->__pos, yythunkpos117= yy->__thunkpos; { int yypos119= yy->__pos, yythunkpos119= yy->__thunkpos; if (!yy__(yy)) goto l119; goto l120; l119:; yy->__pos= yypos119; yy->__thunkpos= yythunkpos119; } l120:; if (!yy_server_options(yy)) goto l117; goto l118; l117:; yy->__pos= yypos117; yy->__thunkpos= yythunkpos117; } l118:; yyDo(yy, yy_1_server_rule, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "server_rule", yy->__buf+yy->__pos)); return 1; l116:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "server_rule", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_comment(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "comment")); if (!yymatchChar(yy, '#')) goto l121; l122:; { int yypos123= yy->__pos, yythunkpos123= yy->__thunkpos; { int yypos124= yy->__pos, yythunkpos124= yy->__thunkpos; if (!yy_eol(yy)) goto l124; goto l123; l124:; yy->__pos= yypos124; yy->__thunkpos= yythunkpos124; } if (!yymatchDot(yy)) goto l123; goto l122; l123:; yy->__pos= yypos123; yy->__thunkpos= yythunkpos123; } yyprintf((stderr, " ok %s @ %s\n", "comment", yy->__buf+yy->__pos)); return 1; l121:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "comment", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_command(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "command")); { int yypos126= yy->__pos, yythunkpos126= yy->__thunkpos; if (!yy_server_rule(yy)) goto l127; goto l126; l127:; yy->__pos= yypos126; yy->__thunkpos= yythunkpos126; if (!yy_auth_rule(yy)) goto l128; goto l126; l128:; yy->__pos= yypos126; yy->__thunkpos= yythunkpos126; if (!yy_logfile(yy)) goto l129; goto l126; l129:; yy->__pos= yypos126; yy->__thunkpos= yythunkpos126; if (!yy_pidlogfile(yy)) goto l130; goto l126; l130:; yy->__pos= yypos126; yy->__thunkpos= yythunkpos126; if (!yy_logcommon(yy)) goto l125; } l126:; yyprintf((stderr, " ok %s @ %s\n", "command", yy->__buf+yy->__pos)); return 1; l125:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "command", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy__(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "_")); if (!yymatchClass(yy, (unsigned char *)"\000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l131; l132:; { int yypos133= yy->__pos, yythunkpos133= yy->__thunkpos; if (!yymatchClass(yy, (unsigned char *)"\000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000")) goto l133; goto l132; l133:; yy->__pos= yypos133; yy->__thunkpos= yythunkpos133; } yyprintf((stderr, " ok %s @ %s\n", "_", yy->__buf+yy->__pos)); return 1; l131:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "_", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_invalid_syntax(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "invalid_syntax")); yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_BEGIN)) goto l134; #undef yytext #undef yyleng } { int yypos137= yy->__pos, yythunkpos137= yy->__thunkpos; if (!yy_eol(yy)) goto l137; goto l134; l137:; yy->__pos= yypos137; yy->__thunkpos= yythunkpos137; } if (!yymatchDot(yy)) goto l134; l135:; { int yypos136= yy->__pos, yythunkpos136= yy->__thunkpos; { int yypos138= yy->__pos, yythunkpos138= yy->__thunkpos; if (!yy_eol(yy)) goto l138; goto l136; l138:; yy->__pos= yypos138; yy->__thunkpos= yythunkpos138; } if (!yymatchDot(yy)) goto l136; goto l135; l136:; yy->__pos= yypos136; yy->__thunkpos= yythunkpos136; } yyText(yy, yy->__begin, yy->__end); { #define yytext yy->__text #define yyleng yy->__textlen if (!(YY_END)) goto l134; #undef yytext #undef yyleng } if (!yy_eol(yy)) goto l134; yyDo(yy, yy_1_invalid_syntax, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "invalid_syntax", yy->__buf+yy->__pos)); return 1; l134:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "invalid_syntax", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_eol(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "eol")); { int yypos140= yy->__pos, yythunkpos140= yy->__thunkpos; { int yypos142= yy->__pos, yythunkpos142= yy->__thunkpos; if (!yymatchChar(yy, '\r')) goto l142; goto l143; l142:; yy->__pos= yypos142; yy->__thunkpos= yythunkpos142; } l143:; if (!yymatchChar(yy, '\n')) goto l141; goto l140; l141:; yy->__pos= yypos140; yy->__thunkpos= yythunkpos140; if (!yy_eof(yy)) goto l139; } l140:; yyprintf((stderr, " ok %s @ %s\n", "eol", yy->__buf+yy->__pos)); return 1; l139:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "eol", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_line(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "line")); { int yypos145= yy->__pos, yythunkpos145= yy->__thunkpos; if (!yy__(yy)) goto l145; goto l146; l145:; yy->__pos= yypos145; yy->__thunkpos= yythunkpos145; } l146:; { int yypos147= yy->__pos, yythunkpos147= yy->__thunkpos; if (!yy_command(yy)) goto l147; { int yypos149= yy->__pos, yythunkpos149= yy->__thunkpos; if (!yy__(yy)) goto l149; goto l150; l149:; yy->__pos= yypos149; yy->__thunkpos= yythunkpos149; } l150:; goto l148; l147:; yy->__pos= yypos147; yy->__thunkpos= yythunkpos147; } l148:; { int yypos151= yy->__pos, yythunkpos151= yy->__thunkpos; if (!yy_comment(yy)) goto l151; goto l152; l151:; yy->__pos= yypos151; yy->__thunkpos= yythunkpos151; } l152:; yyprintf((stderr, " ok %s @ %s\n", "line", yy->__buf+yy->__pos)); return 1; l144:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "line", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_sol(yycontext *yy) { int yypos0= yy->__pos, yythunkpos0= yy->__thunkpos; yyprintf((stderr, "%s\n", "sol")); yyDo(yy, yy_1_sol, yy->__begin, yy->__end); yyprintf((stderr, " ok %s @ %s\n", "sol", yy->__buf+yy->__pos)); return 1; l153:; yy->__pos= yypos0; yy->__thunkpos= yythunkpos0; yyprintf((stderr, " fail %s @ %s\n", "sol", yy->__buf+yy->__pos)); return 0; } YY_RULE(int) yy_file(yycontext *yy) { yyprintf((stderr, "%s\n", "file")); l155:; { int yypos156= yy->__pos, yythunkpos156= yy->__thunkpos; if (!yy_sol(yy)) goto l156; { int yypos157= yy->__pos, yythunkpos157= yy->__thunkpos; if (!yy_line(yy)) goto l158; if (!yy_eol(yy)) goto l158; goto l157; l158:; yy->__pos= yypos157; yy->__thunkpos= yythunkpos157; if (!yy_invalid_syntax(yy)) goto l156; } l157:; goto l155; l156:; yy->__pos= yypos156; yy->__thunkpos= yythunkpos156; } yyprintf((stderr, " ok %s @ %s\n", "file", yy->__buf+yy->__pos)); return 1; } #ifndef YY_PART typedef int (*yyrule)(yycontext *yy); YY_PARSE(int) YYPARSEFROM(YY_CTX_PARAM_ yyrule yystart) { int yyok; if (!yyctx->__buflen) { yyctx->__buflen= YY_BUFFER_SIZE; yyctx->__buf= (char *)YY_MALLOC(yyctx, yyctx->__buflen); yyctx->__textlen= YY_BUFFER_SIZE; yyctx->__text= (char *)YY_MALLOC(yyctx, yyctx->__textlen); yyctx->__thunkslen= YY_STACK_SIZE; yyctx->__thunks= (yythunk *)YY_MALLOC(yyctx, sizeof(yythunk) * yyctx->__thunkslen); yyctx->__valslen= YY_STACK_SIZE; yyctx->__vals= (YYSTYPE *)YY_MALLOC(yyctx, sizeof(YYSTYPE) * yyctx->__valslen); yyctx->__begin= yyctx->__end= yyctx->__pos= yyctx->__limit= yyctx->__thunkpos= 0; } yyctx->__begin= yyctx->__end= yyctx->__pos; yyctx->__thunkpos= 0; yyctx->__val= yyctx->__vals; yyok= yystart(yyctx); if (yyok) yyDone(yyctx); yyCommit(yyctx); return yyok; } YY_PARSE(int) YYPARSE(YY_CTX_PARAM) { return YYPARSEFROM(YY_CTX_ARG_ yy_file); } YY_PARSE(yycontext *) YYRELEASE(yycontext *yyctx) { if (yyctx->__buflen) { yyctx->__buflen= 0; YY_FREE(yyctx, yyctx->__buf); YY_FREE(yyctx, yyctx->__text); YY_FREE(yyctx, yyctx->__thunks); YY_FREE(yyctx, yyctx->__vals); } return yyctx; } #endif #line 160 "parse.peg" void parseConfiguration(char const *file) { FILE *in = fopen(file, "r"); if (!in) { PARSE_ERROR; } yycontext ctx; memset(&ctx, 0, sizeof(yycontext)); ctx.fp = in; if (!yyparse(&ctx)) { syslog(LOG_ERR, "invalid syntax " "on file %s, line %d.\n", file, -1); exit(1); } yyrelease(&ctx); fclose(in); /* Avoid warnings for these unused functions */ (void)yySet; (void)yyPush; (void)yyPop; (void)yyAccept; }