summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2008-07-07 18:39:47 +0000
committerAlexander Motin <mav@FreeBSD.org>2008-07-07 18:39:47 +0000
commitbbfb692933fa2710baf1187565d04d3af3781ea9 (patch)
treef3c687578382c8d0832b465ac3390da4c5f5cb4c
parent5e9b7039084c247915e6ca33d2827c6cf391905f (diff)
Notes
-rw-r--r--sys/netinet/libalias/alias_ftp.c117
1 files changed, 21 insertions, 96 deletions
diff --git a/sys/netinet/libalias/alias_ftp.c b/sys/netinet/libalias/alias_ftp.c
index 68134af1ab27..aa61c41a9831 100644
--- a/sys/netinet/libalias/alias_ftp.c
+++ b/sys/netinet/libalias/alias_ftp.c
@@ -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: