Module Name: src
Committed By: christos
Date: Sun Feb 18 22:29:56 UTC 2024
Modified Files:
src/usr.bin/ftp: fetch.c ftp.1 ftp.c ftp_var.h main.c ssl.c
Log Message:
Add -b <buflen> to specify the buffer size.
To generate a diff of this commit:
cvs rdiff -u -r1.238 -r1.239 src/usr.bin/ftp/fetch.c
cvs rdiff -u -r1.151 -r1.152 src/usr.bin/ftp/ftp.1
cvs rdiff -u -r1.175 -r1.176 src/usr.bin/ftp/ftp.c
cvs rdiff -u -r1.86 -r1.87 src/usr.bin/ftp/ftp_var.h
cvs rdiff -u -r1.129 -r1.130 src/usr.bin/ftp/main.c
cvs rdiff -u -r1.16 -r1.17 src/usr.bin/ftp/ssl.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/ftp/fetch.c
diff -u src/usr.bin/ftp/fetch.c:1.238 src/usr.bin/ftp/fetch.c:1.239
--- src/usr.bin/ftp/fetch.c:1.238 Sat Aug 12 03:40:13 2023
+++ src/usr.bin/ftp/fetch.c Sun Feb 18 17:29:56 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: fetch.c,v 1.238 2023/08/12 07:40:13 mlelstv Exp $ */
+/* $NetBSD: fetch.c,v 1.239 2024/02/18 22:29:56 christos Exp $ */
/*-
* Copyright (c) 1997-2015 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: fetch.c,v 1.238 2023/08/12 07:40:13 mlelstv Exp $");
+__RCSID("$NetBSD: fetch.c,v 1.239 2024/02/18 22:29:56 christos Exp $");
#endif /* not lint */
/*
@@ -1116,15 +1116,17 @@ negotiate_connection(FETCH *fin, const c
char **auth, struct urlinfo *ui)
{
int len, hcode, rv;
- char buf[FTPBUFLEN], *ep;
+ char *buf = NULL, *ep;
const char *cp, *token;
char *location, *message;
*auth = message = location = NULL;
+ buf = ftp_malloc(ftp_buflen);
+
/* Read the response */
ep = buf;
- switch (getresponse(fin, &ep, sizeof(buf), &hcode)) {
+ switch (getresponse(fin, &ep, ftp_buflen, &hcode)) {
case C_CLEANUP:
goto cleanup_fetch_url;
case C_IMPROPER:
@@ -1137,7 +1139,7 @@ negotiate_connection(FETCH *fin, const c
/* Read the rest of the header. */
for (;;) {
- if ((rv = getresponseline(fin, buf, sizeof(buf), &len)) != C_OK)
+ if ((rv = getresponseline(fin, buf, ftp_buflen, &len)) != C_OK)
goto cleanup_fetch_url;
if (len == 0)
break;
@@ -1265,6 +1267,7 @@ improper:
rv = C_IMPROPER;
goto out;
out:
+ FREEPTR(buf);
FREEPTR(message);
FREEPTR(location);
return rv;
@@ -1279,7 +1282,7 @@ connectmethod(FETCH *fin, const char *ur
void *ssl;
int hcode, rv;
const char *cp;
- char buf[FTPBUFLEN], *ep;
+ char *buf = NULL, *ep;
char *message = NULL;
print_connect(fin, oui);
@@ -1299,9 +1302,11 @@ connectmethod(FETCH *fin, const char *ur
}
alarmtimer(0);
+ buf = ftp_malloc(ftp_buflen);
+
/* Read the response */
ep = buf;
- switch (getresponse(fin, &ep, sizeof(buf), &hcode)) {
+ switch (getresponse(fin, &ep, ftp_buflen, &hcode)) {
case C_CLEANUP:
goto cleanup_fetch_url;
case C_IMPROPER:
@@ -1313,7 +1318,7 @@ connectmethod(FETCH *fin, const char *ur
for (;;) {
int len;
- if (getresponseline(fin, buf, sizeof(buf), &len) != C_OK)
+ if (getresponseline(fin, buf, ftp_buflen, &len) != C_OK)
goto cleanup_fetch_url;
if (len == 0)
break;
@@ -1364,6 +1369,7 @@ cleanup_fetch_url:
rv = C_CLEANUP;
goto out;
out:
+ FREEPTR(buf);
FREEPTR(message);
return rv;
}
Index: src/usr.bin/ftp/ftp.1
diff -u src/usr.bin/ftp/ftp.1:1.151 src/usr.bin/ftp/ftp.1:1.152
--- src/usr.bin/ftp/ftp.1:1.151 Fri Dec 8 21:15:11 2023
+++ src/usr.bin/ftp/ftp.1 Sun Feb 18 17:29:56 2024
@@ -1,4 +1,4 @@
-.\" $NetBSD: ftp.1,v 1.151 2023/12/09 02:15:11 lukem Exp $
+.\" $NetBSD: ftp.1,v 1.152 2024/02/18 22:29:56 christos Exp $
.\"
.\" Copyright (c) 1996-2023 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -57,7 +57,7 @@
.\"
.\" @(#)ftp.1 8.3 (Berkeley) 10/9/94
.\"
-.Dd December 9, 2023
+.Dd February 18, 2024
.Dt FTP 1
.Os
.Sh NAME
@@ -69,6 +69,7 @@
.Op Fl N Ar netrc
.Op Fl o Ar output
.Op Fl P Ar port
+.Op Fl b Ar bufsize
.Op Fl q Ar quittime
.Op Fl r Ar retry
.Op Fl s Ar srcaddr
@@ -201,6 +202,9 @@ implement passive mode properly.
Causes
.Nm
to bypass normal login procedure, and use an anonymous login instead.
+.It Fl b Ar bufsize
+Change the input buffer size to
+.Ar bufsize .
.It Fl d
Enables debugging.
.It Fl e
Index: src/usr.bin/ftp/ftp.c
diff -u src/usr.bin/ftp/ftp.c:1.175 src/usr.bin/ftp/ftp.c:1.176
--- src/usr.bin/ftp/ftp.c:1.175 Fri May 5 11:46:06 2023
+++ src/usr.bin/ftp/ftp.c Sun Feb 18 17:29:56 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ftp.c,v 1.175 2023/05/05 15:46:06 lukem Exp $ */
+/* $NetBSD: ftp.c,v 1.176 2024/02/18 22:29:56 christos Exp $ */
/*-
* Copyright (c) 1996-2021 The NetBSD Foundation, Inc.
@@ -92,7 +92,7 @@
#if 0
static char sccsid[] = "@(#)ftp.c 8.6 (Berkeley) 10/27/94";
#else
-__RCSID("$NetBSD: ftp.c,v 1.175 2023/05/05 15:46:06 lukem Exp $");
+__RCSID("$NetBSD: ftp.c,v 1.176 2024/02/18 22:29:56 christos Exp $");
#endif
#endif /* not lint */
@@ -130,6 +130,7 @@ sigjmp_buf ptabort;
int ptabflg;
int ptflag = 0;
char pasv[BUFSIZ]; /* passive port for proxy data connection */
+size_t ftp_buflen = FTPBUFLEN;
static int empty(FILE *, FILE *, int);
__dead static void abort_squared(int);
Index: src/usr.bin/ftp/ftp_var.h
diff -u src/usr.bin/ftp/ftp_var.h:1.86 src/usr.bin/ftp/ftp_var.h:1.87
--- src/usr.bin/ftp/ftp_var.h:1.86 Fri Sep 10 17:52:17 2021
+++ src/usr.bin/ftp/ftp_var.h Sun Feb 18 17:29:56 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ftp_var.h,v 1.86 2021/09/10 21:52:17 rillig Exp $ */
+/* $NetBSD: ftp_var.h,v 1.87 2024/02/18 22:29:56 christos Exp $ */
/*-
* Copyright (c) 1996-2009 The NetBSD Foundation, Inc.
@@ -323,6 +323,7 @@ GLOBAL int data;
extern struct cmd cmdtab[];
extern struct option optiontab[];
+extern size_t ftp_buflen;
#define EMPTYSTRING(x) ((x) == NULL || (*(x) == '\0'))
#define FREEPTR(x) if ((x) != NULL) { free(x); (x) = NULL; }
Index: src/usr.bin/ftp/main.c
diff -u src/usr.bin/ftp/main.c:1.129 src/usr.bin/ftp/main.c:1.130
--- src/usr.bin/ftp/main.c:1.129 Sat Feb 25 07:07:25 2023
+++ src/usr.bin/ftp/main.c Sun Feb 18 17:29:56 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.129 2023/02/25 12:07:25 mlelstv Exp $ */
+/* $NetBSD: main.c,v 1.130 2024/02/18 22:29:56 christos Exp $ */
/*-
* Copyright (c) 1996-2023 The NetBSD Foundation, Inc.
@@ -98,7 +98,7 @@ __COPYRIGHT("@(#) Copyright (c) 1985, 19
#if 0
static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94";
#else
-__RCSID("$NetBSD: main.c,v 1.129 2023/02/25 12:07:25 mlelstv Exp $");
+__RCSID("$NetBSD: main.c,v 1.130 2024/02/18 22:29:56 christos Exp $");
#endif
#endif /* not lint */
@@ -267,7 +267,7 @@ main(int volatile argc, char **volatile
}
}
- while ((ch = getopt(argc, argv, ":46AadefginN:o:pP:q:r:Rs:tT:u:vVx:")) != -1) {
+ while ((ch = getopt(argc, argv, ":46Aab:defginN:o:pP:q:r:Rs:tT:u:vVx:")) != -1) {
switch (ch) {
case '4':
family = AF_INET;
@@ -290,6 +290,12 @@ main(int volatile argc, char **volatile
anonftp = 1;
break;
+ case 'b':
+ ftp_buflen = strtol(optarg, &ep, 0);
+ if (ftp_buflen < 1 || *ep != '\0')
+ errx(1, "Bad buflen value: %s", optarg);
+ break;
+
case 'd':
options |= SO_DEBUG;
ftp_debug++;
@@ -1089,6 +1095,7 @@ usage_help(void)
" -6 Only use IPv6 addresses\n"
" -A Force active mode\n"
" -a Use anonymous login\n"
+" -b BUFLEN Use BUFLEN bytes for fetch buffer\n"
" -d Enable debugging\n"
" -e Disable command-line editing\n"
" -f Force cache reload for FTP or HTTP proxy transfers\n"
Index: src/usr.bin/ftp/ssl.c
diff -u src/usr.bin/ftp/ssl.c:1.16 src/usr.bin/ftp/ssl.c:1.17
--- src/usr.bin/ftp/ssl.c:1.16 Tue May 16 14:52:09 2023
+++ src/usr.bin/ftp/ssl.c Sun Feb 18 17:29:56 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ssl.c,v 1.16 2023/05/16 18:52:09 christos Exp $ */
+/* $NetBSD: ssl.c,v 1.17 2024/02/18 22:29:56 christos Exp $ */
/*-
* Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: ssl.c,v 1.16 2023/05/16 18:52:09 christos Exp $");
+__RCSID("$NetBSD: ssl.c,v 1.17 2024/02/18 22:29:56 christos Exp $");
#endif
#include <err.h>
@@ -579,7 +579,7 @@ fetch_getline(struct fetch_connect *conn
break;
}
if (errormsg)
- *errormsg = "Input line is too long";
+ *errormsg = "Input line is too long (specify -b > 4K)";
fetch_clearerr(conn);
return -3;
}