GNU wget and OpenWrt uclient allows to pass user/pass via dedicated options.
For BB wget we must adjust a URL.
The patch adds the options to improve compatibility and experience.

function                                             old     new   delta
usage_messages                                      3914    3977     +63
parse_url                                            347     397     +50
static.wget_longopts                                 185     203     +18
wget_main                                           2680    2693     +13
retrieve_file_data                                   623     629      +6
get_sanitized_hdr                                    176     179      +3
fgets_trim_sanitize                                  166     169      +3
base64enc                                             56      59      +3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 8/0 up/down: 159/0)             Total: 159 bytes
   text    data     bss     dec     hex filename
 164088    3747    1688  169523   29633 busybox_old
 164247    3747    1688  169682   296d2 busybox_unstripped

Signed-off-by: Sergey Ponomarev <stok...@gmail.com>
---
 networking/wget.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/networking/wget.c b/networking/wget.c
index 36461e489..797c66b47 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -152,6 +152,10 @@
 //usage:     "\n       --header STR    Add STR (of form 'header: value') to 
headers"
 //usage:     "\n       --post-data STR Send STR using POST method"
 //usage:     "\n       --post-file FILE        Send FILE using POST method"
+//usage:       IF_FEATURE_WGET_AUTHENTICATION(
+//usage:     "\n       --user=USER     User (Basic Auth / FTP)"
+//usage:     "\n       --password=PASS Password"
+//usage:       )
 //usage:       IF_FEATURE_WGET_OPENSSL(
 //usage:     "\n       --no-check-certificate  Don't validate the server's 
certificate"
 //usage:       )
@@ -255,6 +259,10 @@ struct globals {
        char *post_file;
        char *extra_headers;
        unsigned char user_headers; /* Headers mentioned by the user */
+#if ENABLE_FEATURE_WGET_AUTHENTICATION
+       char *user;
+       char *password;
+#endif
 #endif
        char *fname_out;        /* where to direct output (-O) */
        char *fname_log;        /* where to direct log (-o) */
@@ -302,6 +310,8 @@ enum {
        WGET_OPT_SPIDER     = (1 << 13) * ENABLE_FEATURE_WGET_LONG_OPTIONS,
        WGET_OPT_NO_CHECK_CERT = (1 << 14) * ENABLE_FEATURE_WGET_LONG_OPTIONS,
        WGET_OPT_POST_FILE  = (1 << 15) * ENABLE_FEATURE_WGET_LONG_OPTIONS,
+       WGET_OPT_USER       = (1 << 16) * ENABLE_FEATURE_WGET_LONG_OPTIONS,
+       WGET_OPT_PASSWORD   = (1 << 17) * ENABLE_FEATURE_WGET_LONG_OPTIONS,
        /* hijack this bit for other than opts purposes: */
        WGET_NO_FTRUNCATE   = (1 << 31)
 };
@@ -617,6 +627,11 @@ static void parse_url(const char *src_url, struct 
host_info *h)
                h->user = xstrdup(percent_decode_in_place(h->host, /*strict:*/ 
0));
                h->host = sp + 1;
        }
+#if ENABLE_FEATURE_WGET_LONG_OPTIONS && ENABLE_FEATURE_WGET_AUTHENTICATION
+       if (h->user == NULL && G.user != NULL && G.password != NULL) {
+               h->user = xasprintf("%s:%s", G.user, G.password);
+       }
+#endif
        /* else: h->user remains NULL, or as set by original request
         * before redirect (if we are here after a redirect).
         */
@@ -1521,6 +1536,9 @@ IF_DESKTOP(       "no-verbose\0"       No_argument       
"\xf0")
 IF_DESKTOP(    "no-clobber\0"       No_argument       "\xf0")
 IF_DESKTOP(    "no-host-directories\0" No_argument    "\xf0")
 IF_DESKTOP(    "no-parent\0"        No_argument       "\xf0")
+IF_FEATURE_WGET_AUTHENTICATION(
+               "user\0"             Required_argument     "\xf1"
+               "password\0"         Required_argument     "\xf2")
                ;
 # define GETOPT32 getopt32long
 # define LONGOPTS ,wget_longopts
@@ -1569,6 +1587,8 @@ IF_DESKTOP(       "no-parent\0"        No_argument       
"\xf0")
                IF_FEATURE_WGET_LONG_OPTIONS(, &headers_llist)
                IF_FEATURE_WGET_LONG_OPTIONS(, &G.post_data)
                IF_FEATURE_WGET_LONG_OPTIONS(, &G.post_file)
+               IF_FEATURE_WGET_LONG_OPTIONS(IF_FEATURE_WGET_AUTHENTICATION(, 
&G.user))
+               IF_FEATURE_WGET_LONG_OPTIONS(IF_FEATURE_WGET_AUTHENTICATION(, 
&G.password))
        );
 #if 0 /* option bits debug */
        if (option_mask32 & WGET_OPT_RETRIES) bb_error_msg("-t NUM");
-- 
2.34.1

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to