From ec67a549fcc30fb501d1f55b7cd6c7e726c4f2af Mon Sep 17 00:00:00 2001 From: Steve Jacobson Date: Thu, 23 Apr 1987 20:57:13 -0800 Subject: [PATCH] redo yacc grammer for RNFR and RNTO SCCS-vsn: libexec/ftpd/ftpcmd.y 5.8 --- usr/src/libexec/ftpd/ftpcmd.y | 63 +++++++++++++++++------------------ 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/usr/src/libexec/ftpd/ftpcmd.y b/usr/src/libexec/ftpd/ftpcmd.y index 83799d67e2..9267ae9c45 100644 --- a/usr/src/libexec/ftpd/ftpcmd.y +++ b/usr/src/libexec/ftpd/ftpcmd.y @@ -12,7 +12,7 @@ %{ #ifndef lint -static char sccsid[] = "@(#)ftpcmd.y 5.7 (Berkeley) %G%"; +static char sccsid[] = "@(#)ftpcmd.y 5.8 (Berkeley) %G%"; #endif #include @@ -51,6 +51,7 @@ static int cmd_type; static int cmd_form; static int cmd_bytesz; char cbuf[512]; +char *fromname; char *index(); %} @@ -77,6 +78,10 @@ char *index(); cmd_list: /* empty */ | cmd_list cmd + = { + fromname = (char *) 0; + } + | cmd_list rcmd ; cmd: USER SP username CRLF @@ -237,6 +242,17 @@ cmd: USER SP username CRLF if ($4 != NULL) free((char *) $4); } + | RNTO SP pathname CRLF + = { + if (fromname) { + renamecmd(fromname, (char *) $3); + free(fromname); + fromname = (char *) 0; + } else { + reply(503, "Bad sequence of commands."); + } + free((char *) $3); + } | ABOR CRLF = { reply(225, "ABOR command successful."); @@ -253,7 +269,6 @@ cmd: USER SP username CRLF if ($4 != NULL) free((char *) $4); } - | rename_cmd | HELP CRLF = { help((char *) 0); @@ -311,6 +326,19 @@ cmd: USER SP username CRLF } ; +rcmd: RNFR check_login SP pathname CRLF + = { + char *renamefrom(); + + if ($2 && $4) { + fromname = renamefrom((char *) $4); + if (fromname == (char *) 0 && $4) { + free((char *) $4); + } + } + } + ; + username: STRING ; @@ -439,37 +467,6 @@ pathname: pathstring pathstring: STRING ; -rename_cmd: rename_from rename_to - = { - if ($1 && $2) - renamecmd((char *) $1, (char *) $2); - else - reply(503, "Bad sequence of commands."); - if ($1) - free((char *) $1); - if ($2) - free((char *) $2); - } - ; - -rename_from: RNFR check_login SP pathname CRLF - = { - char *from = 0, *renamefrom(); - - if ($2 && $4) - from = renamefrom((char *) $4); - if (from == 0 && $4) - free((char *) $4); - $$ = (int)from; - } - ; - -rename_to: RNTO SP pathname CRLF - = { - $$ = $3; - } - ; - check_login: /* empty */ = { if (logged_in) -- 2.20.1