aboutsummaryrefslogtreecommitdiff
path: root/libexec/ftpd/ftpcmd.y
diff options
context:
space:
mode:
authorYaroslav Tykhiy <ytykhiy@gmail.com>2002-08-29 09:23:08 +0000
committerYaroslav Tykhiy <ytykhiy@gmail.com>2002-08-29 09:23:08 +0000
commit371348ae25b1f861a44e62578da1ed2535d32ad2 (patch)
treeb5ce8cf78b04d66325a971f14b49520255be3344 /libexec/ftpd/ftpcmd.y
parentc4d2c0a1def839cdac4a31dc77572f8fc23cf263 (diff)
downloadsrc-371348ae25b1f861a44e62578da1ed2535d32ad2.tar.gz
src-371348ae25b1f861a44e62578da1ed2535d32ad2.zip
Fix lexer jam on unimplemented commands.
Submitted by: maxim MFC after: 5 days
Notes
Notes: svn path=/head/; revision=102565
Diffstat (limited to 'libexec/ftpd/ftpcmd.y')
-rw-r--r--libexec/ftpd/ftpcmd.y25
1 files changed, 13 insertions, 12 deletions
diff --git a/libexec/ftpd/ftpcmd.y b/libexec/ftpd/ftpcmd.y
index 6f038be9d3bd..ec11dcd47c05 100644
--- a/libexec/ftpd/ftpcmd.y
+++ b/libexec/ftpd/ftpcmd.y
@@ -136,7 +136,7 @@ extern int epsvall;
UMASK IDLE CHMOD MDFIVE
- LEXERR
+ LEXERR NOTIMPL
%token <s> STRING
%token <u> NUMBER
@@ -145,7 +145,7 @@ extern int epsvall;
%type <u.i> check_login_ro check_login_epsv
%type <u.i> struct_code mode_code type_code form_code
%type <s> pathstring pathname password username
-%type <s> ALL
+%type <s> ALL NOTIMPL
%start cmd_list
@@ -752,11 +752,15 @@ cmd
reply(221, "Goodbye.");
dologout(0);
}
+ | NOTIMPL
+ {
+ nack($1);
+ }
| error
{
yyclearin; /* discard lookahead data */
yyerrok; /* clear error condition */
- state = 0; /* reset lexer state */
+ state = CMD; /* reset lexer state */
}
;
rcmd
@@ -1289,12 +1293,10 @@ yylex(void)
p = lookup(cmdtab, cbuf);
cbuf[cpos] = c;
if (p != 0) {
- if (p->implemented == 0) {
- nack(p->name);
- return (LEXERR);
- }
- state = p->state;
yylval.s = p->name;
+ if (!p->implemented)
+ return (NOTIMPL); /* state remains CMD */
+ state = p->state;
return (p->token);
}
break;
@@ -1313,13 +1315,12 @@ yylex(void)
p = lookup(sitetab, cp);
cbuf[cpos] = c;
if (guest == 0 && p != 0) {
- if (p->implemented == 0) {
+ yylval.s = p->name;
+ if (!p->implemented) {
state = CMD;
- nack(p->name);
- return (LEXERR);
+ return (NOTIMPL);
}
state = p->state;
- yylval.s = p->name;
return (p->token);
}
state = CMD;