Module Name:    src
Committed By:   dsl
Date:           Tue Feb 19 23:29:16 UTC 2013

Modified Files:
        src/usr.bin/ftp: util.c

Log Message:
When using the response to SYST to decide whether to default to 'binary'
  be a lot less specific.
Kyocera printers report "230 Linux" but really don't want text transfers
of pdf files!


To generate a diff of this commit:
cvs rdiff -u -r1.157 -r1.158 src/usr.bin/ftp/util.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/util.c
diff -u src/usr.bin/ftp/util.c:1.157 src/usr.bin/ftp/util.c:1.158
--- src/usr.bin/ftp/util.c:1.157	Wed Jul  4 06:09:37 2012
+++ src/usr.bin/ftp/util.c	Tue Feb 19 23:29:15 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.157 2012/07/04 06:09:37 is Exp $	*/
+/*	$NetBSD: util.c,v 1.158 2013/02/19 23:29:15 dsl Exp $	*/
 
 /*-
  * Copyright (c) 1997-2009 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: util.c,v 1.157 2012/07/04 06:09:37 is Exp $");
+__RCSID("$NetBSD: util.c,v 1.158 2013/02/19 23:29:15 dsl Exp $");
 #endif /* not lint */
 
 /*
@@ -202,25 +202,20 @@ getremoteinfo(void)
 			/* determine remote system type */
 	if (command("SYST") == COMPLETE) {
 		if (overbose) {
-			char *cp, c;
-
-			c = 0;
-			cp = strchr(reply_string + 4, ' ');
-			if (cp == NULL)
-				cp = strchr(reply_string + 4, '\r');
-			if (cp) {
-				if (cp[-1] == '.')
-					cp--;
-				c = *cp;
-				*cp = '\0';
-			}
-
-			fprintf(ttyout, "Remote system type is %s.\n",
-			    reply_string + 4);
-			if (cp)
-				*cp = c;
+			int os_len = strcspn(reply_string + 4, " \r\n\t");
+			if (os_len > 1 && reply_string[4 + os_len - 1] == '.')
+				os_len--;
+			fprintf(ttyout, "Remote system type is %.*s.\n",
+			    os_len, reply_string + 4);
 		}
-		if (!strncmp(reply_string, "215 UNIX Type: L8", 17)) {
+		/*
+		 * Decide whether we should default to bninary.
+		 * Traditionally checked for "215 UNIX Type: L8", but
+		 * some printers report "Linux" ! so be more forgiving.
+		 * In reality we probably almost never want text any more.
+		 */
+		if (!strncasecmp(reply_string + 4, "unix", 4) ||
+		    !strncasecmp(reply_string + 4, "linux", 5)) {
 			if (proxy)
 				unix_proxy = 1;
 			else

Reply via email to