mirror of
https://github.com/samhocevar/rinetd.git
synced 2025-03-22 15:50:08 +08:00
Fix a configuration parsing bug.
This commit is contained in:
parent
7887c17096
commit
5e8be95d8a
50
src/parse.c
50
src/parse.c
@ -356,7 +356,7 @@ YY_ACTION(void) yy_1_sol(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_sol\n"));
|
yyprintf((stderr, "do yy_1_sol\n"));
|
||||||
{
|
{
|
||||||
#line 152
|
#line 156
|
||||||
++yy->currentLine; ;
|
++yy->currentLine; ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -370,7 +370,7 @@ YY_ACTION(void) yy_1_invalid_syntax(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_invalid_syntax\n"));
|
yyprintf((stderr, "do yy_1_invalid_syntax\n"));
|
||||||
{
|
{
|
||||||
#line 127
|
#line 131
|
||||||
|
|
||||||
fprintf(stderr, "rinetd: invalid syntax at line %d: %s\n",
|
fprintf(stderr, "rinetd: invalid syntax at line %d: %s\n",
|
||||||
yy->currentLine, yytext);
|
yy->currentLine, yytext);
|
||||||
@ -388,7 +388,7 @@ YY_ACTION(void) yy_1_logcommon(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_logcommon\n"));
|
yyprintf((stderr, "do yy_1_logcommon\n"));
|
||||||
{
|
{
|
||||||
#line 122
|
#line 126
|
||||||
|
|
||||||
logFormatCommon = 1;
|
logFormatCommon = 1;
|
||||||
;
|
;
|
||||||
@ -404,7 +404,7 @@ YY_ACTION(void) yy_1_pidlogfile(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_pidlogfile\n"));
|
yyprintf((stderr, "do yy_1_pidlogfile\n"));
|
||||||
{
|
{
|
||||||
#line 114
|
#line 118
|
||||||
|
|
||||||
pidLogFileName = strdup(yytext);
|
pidLogFileName = strdup(yytext);
|
||||||
if (!pidLogFileName) {
|
if (!pidLogFileName) {
|
||||||
@ -423,7 +423,7 @@ YY_ACTION(void) yy_1_logfile(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_logfile\n"));
|
yyprintf((stderr, "do yy_1_logfile\n"));
|
||||||
{
|
{
|
||||||
#line 106
|
#line 110
|
||||||
|
|
||||||
logFileName = strdup(yytext);
|
logFileName = strdup(yytext);
|
||||||
if (!logFileName) {
|
if (!logFileName) {
|
||||||
@ -442,7 +442,7 @@ YY_ACTION(void) yy_1_auth_key(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_auth_key\n"));
|
yyprintf((stderr, "do yy_1_auth_key\n"));
|
||||||
{
|
{
|
||||||
#line 103
|
#line 107
|
||||||
yy->isAuthAllow = (yytext[0] == 'a'); ;
|
yy->isAuthAllow = (yytext[0] == 'a'); ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -456,7 +456,7 @@ YY_ACTION(void) yy_1_auth_rule(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_auth_rule\n"));
|
yyprintf((stderr, "do yy_1_auth_rule\n"));
|
||||||
{
|
{
|
||||||
#line 81
|
#line 85
|
||||||
|
|
||||||
allRules = (Rule *)
|
allRules = (Rule *)
|
||||||
realloc(allRules, sizeof(Rule) * (allRulesCount + 1));
|
realloc(allRules, sizeof(Rule) * (allRulesCount + 1));
|
||||||
@ -490,7 +490,7 @@ YY_ACTION(void) yy_3_proto(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_3_proto\n"));
|
yyprintf((stderr, "do yy_3_proto\n"));
|
||||||
{
|
{
|
||||||
#line 78
|
#line 82
|
||||||
yy->tmpProto = IPPROTO_TCP; ;
|
yy->tmpProto = IPPROTO_TCP; ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -504,7 +504,7 @@ YY_ACTION(void) yy_2_proto(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_2_proto\n"));
|
yyprintf((stderr, "do yy_2_proto\n"));
|
||||||
{
|
{
|
||||||
#line 77
|
#line 81
|
||||||
yy->tmpProto = IPPROTO_UDP; ;
|
yy->tmpProto = IPPROTO_UDP; ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -518,7 +518,7 @@ YY_ACTION(void) yy_1_proto(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_proto\n"));
|
yyprintf((stderr, "do yy_1_proto\n"));
|
||||||
{
|
{
|
||||||
#line 76
|
#line 80
|
||||||
yy->tmpProto = IPPROTO_TCP; ;
|
yy->tmpProto = IPPROTO_TCP; ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -532,9 +532,8 @@ YY_ACTION(void) yy_1_port(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_port\n"));
|
yyprintf((stderr, "do yy_1_port\n"));
|
||||||
{
|
{
|
||||||
#line 74
|
#line 79
|
||||||
free(yy->tmpPort);
|
yy->tmpPort = strdup(yytext); ;
|
||||||
yy->tmpPort = strdup(yytext); ;
|
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
#undef yypos
|
#undef yypos
|
||||||
@ -547,9 +546,8 @@ YY_ACTION(void) yy_1_option_source(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_option_source\n"));
|
yyprintf((stderr, "do yy_1_option_source\n"));
|
||||||
{
|
{
|
||||||
#line 69
|
#line 75
|
||||||
free(yy->sourceAddress);
|
yy->sourceAddress = strdup(yytext); ;
|
||||||
yy->sourceAddress = strdup(yytext); ;
|
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
#undef yypos
|
#undef yypos
|
||||||
@ -562,7 +560,7 @@ YY_ACTION(void) yy_1_option_timeout(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_option_timeout\n"));
|
yyprintf((stderr, "do yy_1_option_timeout\n"));
|
||||||
{
|
{
|
||||||
#line 68
|
#line 74
|
||||||
yy->serverTimeout = atoi(yytext); ;
|
yy->serverTimeout = atoi(yytext); ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -576,7 +574,7 @@ YY_ACTION(void) yy_1_connect_port(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_connect_port\n"));
|
yyprintf((stderr, "do yy_1_connect_port\n"));
|
||||||
{
|
{
|
||||||
#line 63
|
#line 69
|
||||||
yy->connectPort = yy->tmpPort; yy->connectProto = yy->tmpProto; ;
|
yy->connectPort = yy->tmpPort; yy->connectProto = yy->tmpProto; ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -590,7 +588,7 @@ YY_ACTION(void) yy_1_bind_port(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_bind_port\n"));
|
yyprintf((stderr, "do yy_1_bind_port\n"));
|
||||||
{
|
{
|
||||||
#line 62
|
#line 68
|
||||||
yy->bindPort = yy->tmpPort; yy->bindProto = yy->tmpProto; ;
|
yy->bindPort = yy->tmpPort; yy->bindProto = yy->tmpProto; ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -604,7 +602,7 @@ YY_ACTION(void) yy_1_connect_address(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_connect_address\n"));
|
yyprintf((stderr, "do yy_1_connect_address\n"));
|
||||||
{
|
{
|
||||||
#line 61
|
#line 67
|
||||||
yy->connectAddress = strdup(yytext); ;
|
yy->connectAddress = strdup(yytext); ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -618,7 +616,7 @@ YY_ACTION(void) yy_1_bind_address(yycontext *yy, char *yytext, int yyleng)
|
|||||||
#define yythunkpos yy->__thunkpos
|
#define yythunkpos yy->__thunkpos
|
||||||
yyprintf((stderr, "do yy_1_bind_address\n"));
|
yyprintf((stderr, "do yy_1_bind_address\n"));
|
||||||
{
|
{
|
||||||
#line 60
|
#line 66
|
||||||
yy->bindAddress = strdup(yytext); ;
|
yy->bindAddress = strdup(yytext); ;
|
||||||
}
|
}
|
||||||
#undef yythunkpos
|
#undef yythunkpos
|
||||||
@ -638,7 +636,13 @@ YY_ACTION(void) yy_1_server_rule(yycontext *yy, char *yytext, int yyleng)
|
|||||||
yy->connectAddress, yy->connectPort, yy->connectProto,
|
yy->connectAddress, yy->connectPort, yy->connectProto,
|
||||||
yy->serverTimeout > 0 ? yy->serverTimeout : RINETD_DEFAULT_UDP_TIMEOUT,
|
yy->serverTimeout > 0 ? yy->serverTimeout : RINETD_DEFAULT_UDP_TIMEOUT,
|
||||||
yy->sourceAddress);
|
yy->sourceAddress);
|
||||||
|
free(yy->bindAddress);
|
||||||
|
free(yy->connectAddress);
|
||||||
|
free(yy->sourceAddress);
|
||||||
yy->bindAddress = yy->connectAddress = yy->sourceAddress = NULL;
|
yy->bindAddress = yy->connectAddress = yy->sourceAddress = NULL;
|
||||||
|
free(yy->bindPort);
|
||||||
|
free(yy->connectPort);
|
||||||
|
yy->bindPort = yy->connectPort = NULL;
|
||||||
yy->serverTimeout = 0;
|
yy->serverTimeout = 0;
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
@ -1396,7 +1400,7 @@ YY_PARSE(yycontext *) YYRELEASE(yycontext *yyctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#line 156 "parse.peg"
|
#line 160 "parse.peg"
|
||||||
|
|
||||||
|
|
||||||
void parseConfiguration(char const *file)
|
void parseConfiguration(char const *file)
|
||||||
@ -1414,8 +1418,6 @@ void parseConfiguration(char const *file)
|
|||||||
"on file %s, line %d.\n", file, -1);
|
"on file %s, line %d.\n", file, -1);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
free(ctx.sourceAddress);
|
|
||||||
free(ctx.tmpPort);
|
|
||||||
yyrelease(&ctx);
|
yyrelease(&ctx);
|
||||||
|
|
||||||
fclose(in);
|
fclose(in);
|
||||||
|
@ -53,7 +53,13 @@ server-rule = bind-address - bind-port - connect-address - connect-port (-? se
|
|||||||
yy->connectAddress, yy->connectPort, yy->connectProto,
|
yy->connectAddress, yy->connectPort, yy->connectProto,
|
||||||
yy->serverTimeout > 0 ? yy->serverTimeout : RINETD_DEFAULT_UDP_TIMEOUT,
|
yy->serverTimeout > 0 ? yy->serverTimeout : RINETD_DEFAULT_UDP_TIMEOUT,
|
||||||
yy->sourceAddress);
|
yy->sourceAddress);
|
||||||
|
free(yy->bindAddress);
|
||||||
|
free(yy->connectAddress);
|
||||||
|
free(yy->sourceAddress);
|
||||||
yy->bindAddress = yy->connectAddress = yy->sourceAddress = NULL;
|
yy->bindAddress = yy->connectAddress = yy->sourceAddress = NULL;
|
||||||
|
free(yy->bindPort);
|
||||||
|
free(yy->connectPort);
|
||||||
|
yy->bindPort = yy->connectPort = NULL;
|
||||||
yy->serverTimeout = 0;
|
yy->serverTimeout = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,13 +72,11 @@ server-options = "[" -? option-list -? "]"
|
|||||||
option-list = option (-? ',' -? option-list)?
|
option-list = option (-? ',' -? option-list)?
|
||||||
option = (option-timeout | option-source)
|
option = (option-timeout | option-source)
|
||||||
option-timeout = "timeout" -? "=" -? < number > { yy->serverTimeout = atoi(yytext); }
|
option-timeout = "timeout" -? "=" -? < number > { yy->serverTimeout = atoi(yytext); }
|
||||||
option-source = "src" -? "=" -? < address > { free(yy->sourceAddress);
|
option-source = "src" -? "=" -? < address > { yy->sourceAddress = strdup(yytext); }
|
||||||
yy->sourceAddress = strdup(yytext); }
|
|
||||||
|
|
||||||
full-port = port proto
|
full-port = port proto
|
||||||
|
|
||||||
port = < (number | service) > { free(yy->tmpPort);
|
port = < (number | service) > { yy->tmpPort = strdup(yytext); }
|
||||||
yy->tmpPort = strdup(yytext); }
|
|
||||||
proto = '/tcp' { yy->tmpProto = IPPROTO_TCP; }
|
proto = '/tcp' { yy->tmpProto = IPPROTO_TCP; }
|
||||||
| '/udp' { yy->tmpProto = IPPROTO_UDP; }
|
| '/udp' { yy->tmpProto = IPPROTO_UDP; }
|
||||||
| '' { yy->tmpProto = IPPROTO_TCP; }
|
| '' { yy->tmpProto = IPPROTO_TCP; }
|
||||||
@ -170,8 +174,6 @@ void parseConfiguration(char const *file)
|
|||||||
"on file %s, line %d.\n", file, -1);
|
"on file %s, line %d.\n", file, -1);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
free(ctx.sourceAddress);
|
|
||||||
free(ctx.tmpPort);
|
|
||||||
yyrelease(&ctx);
|
yyrelease(&ctx);
|
||||||
|
|
||||||
fclose(in);
|
fclose(in);
|
||||||
|
@ -261,8 +261,8 @@ void addServer(char *bindAddress, char *bindPort, int bindProtocol,
|
|||||||
int serverTimeout, char *sourceAddress)
|
int serverTimeout, char *sourceAddress)
|
||||||
{
|
{
|
||||||
ServerInfo si = {
|
ServerInfo si = {
|
||||||
.fromHost = bindAddress,
|
.fromHost = strdup(bindAddress),
|
||||||
.toHost = connectAddress,
|
.toHost = strdup(connectAddress),
|
||||||
.serverTimeout = serverTimeout,
|
.serverTimeout = serverTimeout,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user