Applied, except for - h->protocol = P_FTP; + h->protocol = NULL;
bit (->protocol[0] must exist). On Sun, Jan 17, 2021 at 7:35 PM Sergey Ponomarev <stok...@gmail.com> wrote: > > Introduce a separate option FTPS_SUPPORTED instead of not obvious > ENABLE_FEATURE_WGET_HTTPS. > > function old new delta > P_FTP 4 - -4 > P_FTPS 5 - -5 > reset_beg_range_to_zero 41 - -41 > parse_url 431 366 -65 > parse_pasv_epsv 154 - -154 > .rodata 115566 115408 -158 > ftpcmd 204 - -204 > spawn_ssl_client 291 - -291 > wget_main 2998 2664 -334 > ------------------------------------------------------------------------------ > (add/remove: 0/7 grow/shrink: 0/3 up/down: 0/-1256) Total: -1256 bytes > > Signed-off-by: Sergey Ponomarev <stok...@gmail.com> > --- > networking/wget.c | 43 ++++++++++++++++++++++++++++++++----------- > 1 file changed, 32 insertions(+), 11 deletions(-) > > diff --git a/networking/wget.c b/networking/wget.c > index e660c279c..51cac1f90 100644 > --- a/networking/wget.c > +++ b/networking/wget.c > @@ -25,6 +25,13 @@ > //config: default y > //config: depends on WGET > //config: > +//config:config FEATURE_WGET_FTP > +//config: bool "Enable FTP protocol (+1k)" > +//config: default y > +//config: depends on WGET > +//config: help > +//config: For support FTPS enable FEATURE_WGET_HTTPS > +//config: > //config:config FEATURE_WGET_AUTHENTICATION > //config: bool "Enable HTTP authentication" > //config: default y > @@ -48,12 +55,12 @@ > //config: > //config:config FEATURE_WGET_HTTPS > //config: bool "Support HTTPS using internal TLS code" > -//it also enables FTPS support, but it's not well tested yet > //config: default y > //config: depends on WGET > //config: select TLS > //config: help > //config: wget will use internal TLS code to connect to https:// URLs. > +//config: It also enables FTPS support, but it's not well tested yet. > //config: Note: > //config: On NOMMU machines, ssl_helper applet should be available > //config: in the $PATH for this to work. Make sure to select that > applet. > @@ -173,6 +180,7 @@ > > > #define SSL_SUPPORTED (ENABLE_FEATURE_WGET_OPENSSL || > ENABLE_FEATURE_WGET_HTTPS) > +#define FTPS_SUPPORTED (ENABLE_FEATURE_WGET_FTP && ENABLE_FEATURE_WGET_HTTPS) > > struct host_info { > char *allocated; > @@ -182,14 +190,16 @@ struct host_info { > char *host; > int port; > }; > -static const char P_FTP[] ALIGN1 = "ftp"; > static const char P_HTTP[] ALIGN1 = "http"; > #if SSL_SUPPORTED > -# if ENABLE_FEATURE_WGET_HTTPS > -static const char P_FTPS[] ALIGN1 = "ftps"; > -# endif > static const char P_HTTPS[] ALIGN1 = "https"; > #endif > +#if ENABLE_FEATURE_WGET_FTP > +static const char P_FTP[] ALIGN1 = "ftp"; > +#endif > +#if FTPS_SUPPORTED > +static const char P_FTPS[] ALIGN1 = "ftps"; > +#endif > > #if ENABLE_FEATURE_WGET_LONG_OPTIONS > /* User-specified headers prevent using our corresponding built-in headers. > */ > @@ -482,6 +492,7 @@ static char fgets_trim_sanitize(FILE *fp, const char *fmt) > return c; > } > > +#if ENABLE_FEATURE_WGET_FTP > static int ftpcmd(const char *s1, const char *s2, FILE *fp) > { > int result; > @@ -507,6 +518,7 @@ static int ftpcmd(const char *s1, const char *s2, FILE > *fp) > G.wget_buf[3] = ' '; > return result; > } > +#endif > > static void parse_url(const char *src_url, struct host_info *h) > { > @@ -515,21 +527,24 @@ static void parse_url(const char *src_url, struct > host_info *h) > free(h->allocated); > h->allocated = url = xstrdup(src_url); > > - h->protocol = P_FTP; > + h->protocol = NULL; > p = strstr(url, "://"); > if (p) { > *p = '\0'; > h->host = p + 3; > +#if ENABLE_FEATURE_WGET_FTP > if (strcmp(url, P_FTP) == 0) { > h->port = bb_lookup_std_port(P_FTP, "tcp", 21); > + h->protocol = P_FTP; > } else > -#if SSL_SUPPORTED > -# if ENABLE_FEATURE_WGET_HTTPS > +#endif > +#if FTPS_SUPPORTED > if (strcmp(url, P_FTPS) == 0) { > h->port = bb_lookup_std_port(P_FTPS, "tcp", 990); > h->protocol = P_FTPS; > } else > -# endif > +#endif > +#if SSL_SUPPORTED > if (strcmp(url, P_HTTPS) == 0) { > h->port = bb_lookup_std_port(P_HTTPS, "tcp", 443); > h->protocol = P_HTTPS; > @@ -796,6 +811,7 @@ static void spawn_ssl_client(const char *host, int > network_fd, int flags) > } > #endif > > +#if ENABLE_FEATURE_WGET_FTP > static FILE* prepare_ftp_session(FILE **dfpp, struct host_info *target, > len_and_sockaddr *lsa) > { > FILE *sfp; > @@ -803,7 +819,7 @@ static FILE* prepare_ftp_session(FILE **dfpp, struct > host_info *target, len_and_ > int port; > > sfp = open_socket(lsa); > -#if ENABLE_FEATURE_WGET_HTTPS > +#if FTPS_SUPPORTED > if (target->protocol == P_FTPS) > spawn_ssl_client(target->host, fileno(sfp), > TLSLOOP_EXIT_ON_LOCAL_EOF); > #endif > @@ -859,7 +875,7 @@ static FILE* prepare_ftp_session(FILE **dfpp, struct > host_info *target, len_and_ > > *dfpp = open_socket(lsa); > > -#if ENABLE_FEATURE_WGET_HTTPS > +#if FTPS_SUPPORTED > if (target->protocol == P_FTPS) { > /* "PROT P" enables encryption of data stream. > * Without it (or with "PROT C"), data is sent unencrypted. > @@ -885,6 +901,7 @@ static FILE* prepare_ftp_session(FILE **dfpp, struct > host_info *target, len_and_ > > return sfp; > } > +#endif > > static void NOINLINE retrieve_file_data(FILE *dfp) > { > @@ -1407,10 +1424,12 @@ However, in real world it was observed that some web > servers > /* For HTTP, data is pumped over the same connection */ > dfp = sfp; > } else { > +#if ENABLE_FEATURE_WGET_FTP > /* > * FTP session > */ > sfp = prepare_ftp_session(&dfp, &target, lsa); > +#endif > } > > free(lsa); > @@ -1428,6 +1447,7 @@ However, in real world it was observed that some web > servers > fprintf(stderr, "remote file exists\n"); > } > > +#if ENABLE_FEATURE_WGET_FTP > if (dfp != sfp) { > /* It's ftp. Close data connection properly */ > fclose(dfp); > @@ -1435,6 +1455,7 @@ However, in real world it was observed that some web > servers > bb_error_msg_and_die("ftp error: %s", G.wget_buf); > /* ftpcmd("QUIT", NULL, sfp); - why bother? */ > } > +#endif > fclose(sfp); > > free(server.allocated); > -- > 2.27.0 > > _______________________________________________ > busybox mailing list > busybox@busybox.net > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox