Module Name:    src
Committed By:   martin
Date:           Mon Jun 14 11:57:39 UTC 2021

Modified Files:
        src/usr.bin/ftp [netbsd-9]: Makefile ssl.c ssl.h version.h

Log Message:
Pull up following revision(s) (requested by lukem in ticket #1295):

        usr.bin/ftp/ssl.c: revision 1.10
        usr.bin/ftp/ssl.h: revision 1.5
        usr.bin/ftp/version.h: revision 1.93
        usr.bin/ftp/Makefile: revision 1.39

use fetch_*() for I/O with SMALLPROG / !WITH_SSL builds

Adapt the SMALLPROG / -UWITH_SSL build to also use the fetch_*()
methods from ssl.c, instead of using stdio, as stdio isn't robust
when using interruptable signals.

Disable ssl-specific support in the fetch_*() methods if WITH_SSL
isn't defined, so SMALLPROG still doesn't have ssl support (as expected).

The resulting SMALLPROG binary is slightly larger than before
(e.g., 157KiB vs 153KiB on amd64).

Set version to 20210603 for this fix and the SO_KEEPALIVE fix for PR 56129.

PR install/56219


To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.37.12.1 src/usr.bin/ftp/Makefile
cvs rdiff -u -r1.8.2.1 -r1.8.2.2 src/usr.bin/ftp/ssl.c
cvs rdiff -u -r1.4 -r1.4.2.1 src/usr.bin/ftp/ssl.h
cvs rdiff -u -r1.87.18.2 -r1.87.18.3 src/usr.bin/ftp/version.h

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/Makefile
diff -u src/usr.bin/ftp/Makefile:1.37 src/usr.bin/ftp/Makefile:1.37.12.1
--- src/usr.bin/ftp/Makefile:1.37	Sun May 21 15:28:43 2017
+++ src/usr.bin/ftp/Makefile	Mon Jun 14 11:57:39 2021
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.37 2017/05/21 15:28:43 riastradh Exp $
+#	$NetBSD: Makefile,v 1.37.12.1 2021/06/14 11:57:39 martin Exp $
 #	from: @(#)Makefile	8.2 (Berkeley) 4/3/94
 
 .include <bsd.own.mk>
@@ -8,6 +8,7 @@ USE_FORT?= yes	# network client
 PROG=	ftp
 SRCS=	cmds.c cmdtab.c complete.c domacro.c fetch.c ftp.c main.c \
 	progressbar.c ruserpass.c util.c
+SRCS+=	ssl.c
 
 # Uncomment the following to provide defaults for gate-ftp operation
 #
@@ -19,7 +20,6 @@ CPPFLAGS+=-DNO_EDITCOMPLETE -DNO_ABOUT -
 LDADD+=	-ledit -lterminfo
 DPADD+=	${LIBEDIT} ${LIBTERMINFO}
 CPPFLAGS+= -DWITH_SSL
-SRCS+=ssl.c
 LDADD+= -lssl -lcrypto
 DPADD+= ${LIBSSL} ${LIBCRYPTO}
 .endif

Index: src/usr.bin/ftp/ssl.c
diff -u src/usr.bin/ftp/ssl.c:1.8.2.1 src/usr.bin/ftp/ssl.c:1.8.2.2
--- src/usr.bin/ftp/ssl.c:1.8.2.1	Fri Jan 29 20:58:19 2021
+++ src/usr.bin/ftp/ssl.c	Mon Jun 14 11:57:39 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: ssl.c,v 1.8.2.1 2021/01/29 20:58:19 martin Exp $	*/
+/*	$NetBSD: ssl.c,v 1.8.2.2 2021/06/14 11:57:39 martin Exp $	*/
 
 /*-
  * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav
@@ -34,13 +34,17 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: ssl.c,v 1.8.2.1 2021/01/29 20:58:19 martin Exp $");
+__RCSID("$NetBSD: ssl.c,v 1.8.2.2 2021/06/14 11:57:39 martin Exp $");
 #endif
 
+#include <errno.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <time.h>
 #include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
 
 #include <sys/param.h>
 #include <sys/select.h>
@@ -48,11 +52,14 @@ __RCSID("$NetBSD: ssl.c,v 1.8.2.1 2021/0
 
 #include <netinet/tcp.h>
 #include <netinet/in.h>
+
+#ifdef WITH_SSL
 #include <openssl/crypto.h>
 #include <openssl/x509.h>
 #include <openssl/pem.h>
 #include <openssl/ssl.h>
 #include <openssl/err.h>
+#endif
 
 #include "ssl.h"
 
@@ -75,7 +82,9 @@ struct fetch_connect {
 	int 			 issock;
 	int			 iserr;
 	int			 iseof;
+#ifdef WITH_SSL
 	SSL			*ssl;		/* SSL handle */
+#endif
 };
 
 /*
@@ -121,9 +130,11 @@ fetch_writev(struct fetch_connect *conn,
 			}
 		}
 		errno = 0;
+#ifdef WITH_SSL
 		if (conn->ssl != NULL)
 			len = SSL_write(conn->ssl, iov->iov_base, iov->iov_len);
 		else
+#endif
 			len = writev(fd, iov, iovcnt);
 		if (len == 0) {
 			/* we consider a short write a failure */
@@ -275,7 +286,9 @@ fetch_close(struct fetch_connect *conn)
 		return 0;
 
 	fetch_flush(conn);
+#ifdef WITH_SSL
 	SSL_free(conn->ssl);
+#endif
 	close(conn->sd);
 	free(conn->cache.buf);
 	free(conn->buf);
@@ -287,6 +300,7 @@ fetch_close(struct fetch_connect *conn)
 #define FETCH_READ_WAIT		-2
 #define FETCH_READ_ERROR	-1
 
+#ifdef WITH_SSL
 static ssize_t
 fetch_ssl_read(SSL *ssl, void *buf, size_t len)
 {
@@ -305,6 +319,7 @@ fetch_ssl_read(SSL *ssl, void *buf, size
 		return FETCH_READ_ERROR;
 	}
 }
+#endif /* WITH_SSL */
 
 static ssize_t
 fetch_nonssl_read(int sd, void *buf, size_t len)
@@ -433,9 +448,11 @@ fetch_read(void *ptr, size_t size, size_
 		 * In the non-SSL case, it may improve performance (very
 		 * slightly) when reading small amounts of data.
 		 */
+#ifdef WITH_SSL
 		if (conn->ssl != NULL)
 			rlen = fetch_ssl_read(conn->ssl, buf, len);
 		else
+#endif
 			rlen = fetch_nonssl_read(conn->sd, buf, len);
 		switch (rlen) {
 		case 0:
@@ -564,6 +581,7 @@ fetch_getline(struct fetch_connect *conn
 	return len;
 }
 
+#ifdef WITH_SSL
 void *
 fetch_start_ssl(int sock, const char *servername)
 {
@@ -624,10 +642,13 @@ fetch_start_ssl(int sock, const char *se
 
 	return ssl;
 }
+#endif /* WITH_SSL */
 
 
 void
 fetch_set_ssl(struct fetch_connect *conn, void *ssl)
 {
+#ifdef WITH_SSL
 	conn->ssl = ssl;
+#endif
 }

Index: src/usr.bin/ftp/ssl.h
diff -u src/usr.bin/ftp/ssl.h:1.4 src/usr.bin/ftp/ssl.h:1.4.2.1
--- src/usr.bin/ftp/ssl.h:1.4	Thu Apr  4 00:36:09 2019
+++ src/usr.bin/ftp/ssl.h	Mon Jun 14 11:57:39 2021
@@ -1,7 +1,7 @@
-/*	$NetBSD: ssl.h,v 1.4 2019/04/04 00:36:09 christos Exp $	*/
+/*	$NetBSD: ssl.h,v 1.4.2.1 2021/06/14 11:57:39 martin Exp $	*/
 
 /*-
- * Copyright (c) 2012 The NetBSD Foundation, Inc.
+ * Copyright (c) 2012-2021 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,6 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  */
-#ifdef WITH_SSL
 
 #define FETCH struct fetch_connect
 struct fetch_connect;
@@ -43,21 +42,3 @@ char *fetch_getln(char *, int, struct fe
 int fetch_getline(struct fetch_connect *, char *, size_t, const char **);
 void fetch_set_ssl(struct fetch_connect *, void *);
 void *fetch_start_ssl(int, const char *);
-
-#else	/* !WITH_SSL */
-
-#define FETCH FILE
-
-#define	fetch_printf	fprintf
-#define	fetch_fileno	fileno
-#define	fetch_error	ferror
-#define	fetch_flush	fflush
-#define	fetch_open	fopen
-#define	fetch_fdopen	fdopen
-#define	fetch_close	fclose
-#define	fetch_read	fread
-#define	fetch_getln	fgets
-#define	fetch_getline	get_line
-#define	fetch_set_ssl(a, b)
-
-#endif	/* !WITH_SSL */

Index: src/usr.bin/ftp/version.h
diff -u src/usr.bin/ftp/version.h:1.87.18.2 src/usr.bin/ftp/version.h:1.87.18.3
--- src/usr.bin/ftp/version.h:1.87.18.2	Mon Jun 14 11:22:16 2021
+++ src/usr.bin/ftp/version.h	Mon Jun 14 11:57:39 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: version.h,v 1.87.18.2 2021/06/14 11:22:16 martin Exp $	*/
+/*	$NetBSD: version.h,v 1.87.18.3 2021/06/14 11:57:39 martin Exp $	*/
 
 /*-
  * Copyright (c) 1999-2021 The NetBSD Foundation, Inc.
@@ -34,5 +34,5 @@
 #endif
 
 #ifndef FTP_VERSION
-#define	FTP_VERSION	"20200711"
+#define	FTP_VERSION	"20210603"
 #endif

Reply via email to