Add support for PORT/EPRT FTP commands in lowercase.

Use strncasecmp() instead of huge local implementation to reduce code size.
Check space presence after command/code.

PR:		kern/73034
This commit is contained in:
Alexander Motin 2008-06-21 16:22:56 +00:00
parent cd83aa9707
commit b46d3e21bb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=179912

View File

@ -270,36 +270,14 @@ ParseFtpPortCommand(struct libalias *la, char *sptr, int dlen)
if (dlen < 18)
return (0);
if (strncasecmp("PORT ", sptr, 5))
return (0);
addr = port = octet = 0;
state = -4;
for (i = 0; i < dlen; i++) {
state = 0;
for (i = 5; i < dlen; i++) {
ch = sptr[i];
switch (state) {
case -4:
if (ch == 'P')
state++;
else
return (0);
break;
case -3:
if (ch == 'O')
state++;
else
return (0);
break;
case -2:
if (ch == 'R')
state++;
else
return (0);
break;
case -1:
if (ch == 'T')
state++;
else
return (0);
break;
case 0:
if (isspace(ch))
break;
@ -365,37 +343,15 @@ ParseFtpEprtCommand(struct libalias *la, char *sptr, int dlen)
if (dlen < 18)
return (0);
if (strncasecmp("EPRT ", sptr, 5))
return (0);
addr = port = octet = 0;
delim = '|'; /* XXX gcc -Wuninitialized */
state = -4;
for (i = 0; i < dlen; i++) {
state = 0;
for (i = 5; i < dlen; i++) {
ch = sptr[i];
switch (state) {
case -4:
if (ch == 'E')
state++;
else
return (0);
break;
case -3:
if (ch == 'P')
state++;
else
return (0);
break;
case -2:
if (ch == 'R')
state++;
else
return (0);
break;
case -1:
if (ch == 'T')
state++;
else
return (0);
break;
case 0:
if (!isspace(ch)) {
delim = ch;
@ -477,31 +433,15 @@ ParseFtp227Reply(struct libalias *la, char *sptr, int dlen)
if (dlen < 17)
return (0);
if (strncmp("227 ", sptr, 4))
return (0);
addr = port = octet = 0;
state = -3;
for (i = 0; i < dlen; i++) {
state = 0;
for (i = 4; i < dlen; i++) {
ch = sptr[i];
switch (state) {
case -3:
if (ch == '2')
state++;
else
return (0);
break;
case -2:
if (ch == '2')
state++;
else
return (0);
break;
case -1:
if (ch == '7')
state++;
else
return (0);
break;
case 0:
if (ch == '(')
state++;
@ -564,32 +504,16 @@ ParseFtp229Reply(struct libalias *la, char *sptr, int dlen)
if (dlen < 11)
return (0);
if (strncmp("229 ", sptr, 4))
return (0);
port = 0;
delim = '|'; /* XXX gcc -Wuninitialized */
state = -3;
for (i = 0; i < dlen; i++) {
state = 0;
for (i = 4; i < dlen; i++) {
ch = sptr[i];
switch (state) {
case -3:
if (ch == '2')
state++;
else
return (0);
break;
case -2:
if (ch == '2')
state++;
else
return (0);
break;
case -1:
if (ch == '9')
state++;
else
return (0);
break;
case 0:
if (ch == '(')
state++;
@ -689,6 +613,7 @@ NewFtpMessage(struct libalias *la, struct ip *pip,
alias_port = GetAliasPort(ftp_lnk);
/* Prepare new command */
switch (ftp_message_type) {
case FTP_PORT_COMMAND:
case FTP_227_REPLY: