Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/libexec/ftpd - Change lexer to support numbers > 2^31-1 (sto...
details: https://anonhg.NetBSD.org/src/rev/014843426e99
branches: trunk
changeset: 533496:014843426e99
user: lukem <lukem%NetBSD.org@localhost>
date: Tue Jul 02 02:18:01 2002 +0000
description:
- Change lexer to support numbers > 2^31-1 (stored in an off_t), and allow
RESTart to use the larger numbers.
Fix from Maxim Konovalov <maxim%freebsd.org@localhost>
- Update version
- Minor whitespace changes
diffstat:
libexec/ftpd/ftpcmd.y | 78 ++++++++++++++++++++++++++++---------------------
libexec/ftpd/version.h | 4 +-
2 files changed, 47 insertions(+), 35 deletions(-)
diffs (233 lines):
diff -r ba194c931f08 -r 014843426e99 libexec/ftpd/ftpcmd.y
--- a/libexec/ftpd/ftpcmd.y Mon Jul 01 23:10:19 2002 +0000
+++ b/libexec/ftpd/ftpcmd.y Tue Jul 02 02:18:01 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ftpcmd.y,v 1.69 2002/06/30 04:54:43 tv Exp $ */
+/* $NetBSD: ftpcmd.y,v 1.70 2002/07/02 02:18:01 lukem Exp $ */
/*-
* Copyright (c) 1997-2002 The NetBSD Foundation, Inc.
@@ -83,7 +83,7 @@
#if 0
static char sccsid[] = "@(#)ftpcmd.y 8.3 (Berkeley) 4/6/94";
#else
-__RCSID("$NetBSD: ftpcmd.y,v 1.69 2002/06/30 04:54:43 tv Exp $");
+__RCSID("$NetBSD: ftpcmd.y,v 1.70 2002/07/02 02:18:01 lukem Exp $");
#endif
#endif /* not lint */
@@ -127,7 +127,10 @@
%}
%union {
- int i;
+ struct {
+ off_t o;
+ int i;
+ } u;
char *s;
}
@@ -162,10 +165,10 @@
%token <s> STRING
%token <s> ALL
-%token <i> NUMBER
+%token <u> NUMBER
-%type <i> check_login octal_number byte_size
-%type <i> struct_code mode_code type_code form_code decimal_integer
+%type <u.i> check_login octal_number byte_size
+%type <u.i> struct_code mode_code type_code form_code decimal_integer
%type <s> pathstring pathname password username
%type <s> mechanism_name base64data prot_code
@@ -308,7 +311,8 @@
{
if ($2) {
if (CURCLASS_FLAGS_ISSET(passive))
- long_passive("EPSV", epsvproto2af($4));
+ long_passive("EPSV",
+ epsvproto2af($4.i));
else
reply(500, "EPSV mode not available.");
}
@@ -318,7 +322,8 @@
{
if ($2) {
if (CURCLASS_FLAGS_ISSET(passive)) {
- reply(200, "EPSV ALL command successful.");
+ reply(200,
+ "EPSV ALL command successful.");
epsvall++;
} else
reply(500, "EPSV mode not available.");
@@ -573,12 +578,12 @@
| SITE SP IDLE check_login SP NUMBER CRLF
{
if ($4) {
- if ($6 < 30 || $6 > curclass.maxtimeout) {
+ if ($6.i < 30 || $6.i > curclass.maxtimeout) {
reply(501,
"IDLE time limit must be between 30 and %d seconds",
curclass.maxtimeout);
} else {
- curclass.timeout = $6;
+ curclass.timeout = $6.i;
(void) alarm(curclass.timeout);
reply(200,
"IDLE time limit set to %d seconds",
@@ -875,11 +880,11 @@
;
rcmd
- : REST check_login SP byte_size CRLF
+ : REST check_login SP NUMBER CRLF
{
if ($2) {
fromname = NULL;
- restart_point = $4; /* XXX: $4 is only "int" */
+ restart_point = $4.o;
reply(350,
"Restarting at " LLF ". Send STORE or RETRIEVE to initiate transfer.",
(LLT)restart_point);
@@ -911,6 +916,9 @@
byte_size
: NUMBER
+ {
+ $$ = $1.i;
+ }
;
host_port
@@ -923,9 +931,9 @@
data_dest.su_len = sizeof(struct sockaddr_in);
data_dest.su_family = AF_INET;
p = (char *)&data_dest.su_port;
- p[0] = $9; p[1] = $11;
+ p[0] = $9.i; p[1] = $11.i;
a = (char *)&data_dest.su_addr;
- a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
+ a[0] = $1.i; a[1] = $3.i; a[2] = $5.i; a[3] = $7.i;
}
;
@@ -940,12 +948,12 @@
data_dest.su_len = sizeof(struct sockaddr_in);
data_dest.su_family = AF_INET;
p = (char *)&data_dest.su_port;
- p[0] = $15; p[1] = $17;
+ p[0] = $15.i; p[1] = $17.i;
a = (char *)&data_dest.su_addr;
- a[0] = $5; a[1] = $7; a[2] = $9; a[3] = $11;
+ a[0] = $5.i; a[1] = $7.i; a[2] = $9.i; a[3] = $11.i;
/* reject invalid LPRT command */
- if ($1 != 4 || $3 != 4 || $13 != 2)
+ if ($1.i != 4 || $3.i != 4 || $13.i != 2)
memset(&data_dest, 0, sizeof(data_dest));
}
;
@@ -965,12 +973,12 @@
data_dest.su_len = sizeof(struct sockaddr_in6);
data_dest.su_family = AF_INET6;
p = (char *)&data_dest.su_port;
- p[0] = $39; p[1] = $41;
+ p[0] = $39.i; p[1] = $41.i;
a = (char *)&data_dest.si_su.su_sin6.sin6_addr;
- a[0] = $5; a[1] = $7; a[2] = $9; a[3] = $11;
- a[4] = $13; a[5] = $15; a[6] = $17; a[7] = $19;
- a[8] = $21; a[9] = $23; a[10] = $25; a[11] = $27;
- a[12] = $29; a[13] = $31; a[14] = $33; a[15] = $35;
+ a[0] = $5.i; a[1] = $7.i; a[2] = $9.i; a[3] = $11.i;
+ a[4] = $13.i; a[5] = $15.i; a[6] = $17.i; a[7] = $19.i;
+ a[8] = $21.i; a[9] = $23.i; a[10] = $25.i; a[11] = $27.i;
+ a[12] = $29.i; a[13] = $31.i; a[14] = $33.i; a[15] = $35.i;
if (his_addr.su_family == AF_INET6) {
/* XXX: more sanity checks! */
data_dest.su_scope_id = his_addr.su_scope_id;
@@ -979,7 +987,7 @@
memset(&data_dest, 0, sizeof(data_dest));
#endif /* INET6 */
/* reject invalid LPRT command */
- if ($1 != 6 || $3 != 16 || $37 != 2)
+ if ($1.i != 6.i || $3.i != 16.i || $37.i != 2)
memset(&data_dest, 0, sizeof(data_dest));
}
;
@@ -1141,7 +1149,7 @@
* Convert a number that was read as decimal number
* to what it would be if it had been read as octal.
*/
- dec = $1;
+ dec = $1.i;
multby = 1;
ret = 0;
while (dec) {
@@ -1172,6 +1180,9 @@
decimal_integer
: NUMBER
+ {
+ $$ = $1.i;
+ }
;
check_login
@@ -1279,13 +1290,13 @@
};
struct tab sitetab[] = {
- { "CHMOD", CHMOD, NSTR, 1, "<sp> mode <sp> file-name" },
- { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
- { "IDLE", IDLE, ARGS, 1, "[ <sp> maximum-idle-time ]" },
- { "RATEGET", RATEGET,OSTR, 1, "[ <sp> get-throttle-rate ]" },
- { "RATEPUT", RATEPUT,OSTR, 1, "[ <sp> put-throttle-rate ]" },
- { "UMASK", UMASK, ARGS, 1, "[ <sp> umask ]" },
- { NULL, 0, 0, 0, NULL }
+ { "CHMOD", CHMOD, NSTR, 1, "<sp> mode <sp> file-name" },
+ { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" },
+ { "IDLE", IDLE, ARGS, 1, "[ <sp> maximum-idle-time ]" },
+ { "RATEGET", RATEGET,OSTR, 1, "[ <sp> get-throttle-rate ]" },
+ { "RATEPUT", RATEPUT,OSTR, 1, "[ <sp> put-throttle-rate ]" },
+ { "UMASK", UMASK, ARGS, 1, "[ <sp> umask ]" },
+ { NULL, 0, 0, 0, NULL }
};
static int check_write(const char *, int);
@@ -1599,7 +1610,7 @@
;
c = cmdp[cpos];
cmdp[cpos] = '\0';
- yylval.i = atoi(cp);
+ yylval.u.i = atoi(cp);
cmdp[cpos] = c;
state = STR1;
return (NUMBER);
@@ -1614,7 +1625,8 @@
;
c = cmdp[cpos];
cmdp[cpos] = '\0';
- yylval.i = atoi(cp);
+ yylval.u.i = atoi(cp);
+ yylval.u.o = strtoull(cp, (char **)NULL, 10);
cmdp[cpos] = c;
return (NUMBER);
}
diff -r ba194c931f08 -r 014843426e99 libexec/ftpd/version.h
--- a/libexec/ftpd/version.h Mon Jul 01 23:10:19 2002 +0000
+++ b/libexec/ftpd/version.h Tue Jul 02 02:18:01 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: version.h,v 1.44 2002/06/15 03:40:46 lukem Exp $ */
+/* $NetBSD: version.h,v 1.45 2002/07/02 02:18:02 lukem Exp $ */
/*-
* Copyright (c) 1999-2002 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -36,5 +36,5 @@
*/
#ifndef FTPD_VERSION
-#define FTPD_VERSION "NetBSD-ftpd 20020615"
+#define FTPD_VERSION "NetBSD-ftpd 20020702"
#endif
Home |
Main Index |
Thread Index |
Old Index