On 07/10/14 06:30, Lawrence Teo wrote: > About a month ago, I sent a diff that allows ftp(1) to set its > User-Agent. > > Based on feedback from halex@ and deraadt@, I have changed it so that > the User-Agent can be set via a -U command-line option instead of an > environment variable. > > I have also fixed a conflict with guenther@'s recent fetch.c commit. > > Would anyone like to ok this latest version?
I was reviewing this and I couldn't help finding it unnecessarily cumbersome. I propose this diff (ontop on the already proposed and committed diff). Apart from making the code simpler, this diff will change two things: 1. You may specify -U as many times as you please, using only the last one. This is the behavious I'd expect. 2. If you compile with -DSMALL, using -U will produce an error. This does not follow the common, IMO questionable, practice of just ignoring the switches. However I find it a totally reasonable for most unavailable switches (possibly -C aside). OK? /Alexander Index: fetch.c =================================================================== RCS file: /cvs/src/usr.bin/ftp/fetch.c,v retrieving revision 1.124 diff -u -p -r1.124 fetch.c --- fetch.c 11 Jul 2014 03:31:52 -0000 1.124 +++ fetch.c 11 Jul 2014 10:18:25 -0000 @@ -1284,9 +1284,6 @@ auto_fetch(int argc, char *argv[], char char *cp, *url, *host, *dir, *file, *portnum; char *username, *pass, *pathstart; char *ftpproxy, *httpproxy; -#ifndef SMALL - char *uagent = NULL; -#endif /* !SMALL */ int rval, xargc; volatile int argpos; int dirhasglob, filehasglob, oautologin; @@ -1307,13 +1304,6 @@ auto_fetch(int argc, char *argv[], char if ((httpproxy = getenv(HTTP_PROXY)) != NULL && *httpproxy == '\0') httpproxy = NULL; - if (httpuseragent == NULL) - httpuseragent = HTTP_USER_AGENT; -#ifndef SMALL - else - uagent = httpuseragent; -#endif /* !SMALL */ - /* * Loop through as long as there's files to fetch. */ @@ -1590,9 +1580,6 @@ bad_ftp_url: } if (connected && rval != -1) disconnect(0, NULL); -#ifndef SMALL - free(uagent); -#endif /* !SMALL */ return (rval); } Index: main.c =================================================================== RCS file: /cvs/src/usr.bin/ftp/main.c,v retrieving revision 1.88 diff -u -p -r1.88 main.c --- main.c 11 Jul 2014 03:31:52 -0000 1.88 +++ main.c 11 Jul 2014 10:18:25 -0000 @@ -362,19 +362,17 @@ main(volatile int argc, char *argv[]) trace = 1; break; - case 'U': #ifndef SMALL - if (httpuseragent) - errx(1, "User-Agent was already defined"); - /* Ensure that User-Agent value is in a single line. */ + case 'U': + free (httpuseragent); if (strcspn(optarg, "\r\n") != strlen(optarg)) errx(1, "Invalid User-Agent: %s.", optarg); if (asprintf(&httpuseragent, "User-Agent: %s", optarg) == -1) errx(1, "Can't allocate memory for HTTP(S) " "User-Agent"); -#endif /* !SMALL */ break; +#endif /* !SMALL */ case 'v': verbose = 1; @@ -394,6 +392,8 @@ main(volatile int argc, char *argv[]) #ifndef SMALL cookie_load(); #endif /* !SMALL */ + if (httpuseragent == NULL) + httpuseragent = HTTP_USER_AGENT; cpend = 0; /* no pending replies */ proxy = 0; /* proxy not active */