On Fri, Jul 11, 2014 at 12:20:00PM +0200, Alexander Hall wrote: > 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:
Thanks for simplifying this. The original diff used an environment variable and for consistency with the existing code that deals with environment variables, I implemented it within auto_fetch(). When I changed it to use a command-line option, I continued implementing it within auto_fetch() because that was where my original code was. But as your diff shows, that's unnecessary, so I appreciate your work in making it less cumbersome. I agree with your diff except for this part: > 1. You may specify -U as many times as you please, using only the last > one. This is the behavious I'd expect. What is the use case for specifying multiple -U instances and only choosing the last one? To me that sounds like something I would accidentally do as opposed to something I would intentionally do, so that's why my code tried to prevent it. > 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 */ >