s3:utils/smbget fix recursive download
authorChristian Ambach <ambi@samba.org>
Wed, 30 Dec 2015 20:25:13 +0000 (21:25 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Mon, 25 Jan 2016 09:24:23 +0000 (10:24 +0100)
get_auth_data is called multiple times (once for the directory listing and then
for every file to be downloaded). Save the obtained values across multiple calls
to make smbclient use the correct username for each download.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=6482
Signed-off-by: Christian Ambach <ambi@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/utils/smbget.c

index b3ce7432ede71d01bafeca836f23f916bd6aa667..a077aa16a41fc0bb32fdf8492f6c5a144454df8a 100644 (file)
@@ -91,10 +91,18 @@ static void human_readable(off_t s, char *buffer, int l)
 static void get_auth_data(const char *srv, const char *shr, char *wg, int wglen, char *un, int unlen, char *pw, int pwlen)
 {
        static char hasasked = 0;
+       static char *savedwg;
+       static char *savedun;
+       static char *savedpw;
        char *wgtmp, *usertmp;
        char tmp[128];
 
-       if(hasasked) return;
+       if (hasasked) {
+               strncpy(wg, savedwg, wglen - 1);
+               strncpy(un, savedun, unlen - 1);
+               strncpy(pw, savedpw, pwlen - 1);
+               return;
+       }
        hasasked = 1;
 
        if(!nonprompt && !username) {
@@ -119,6 +127,11 @@ static void get_auth_data(const char *srv, const char *shr, char *wg, int wglen,
 
        if(workgroup)strncpy(wg, workgroup, wglen-1);
 
+       /* save the values found for later */
+       savedwg = SMB_STRDUP(wg);
+       savedun = SMB_STRDUP(un);
+       savedpw = SMB_STRDUP(pw);
+
        wgtmp = SMB_STRNDUP(wg, wglen); 
        usertmp = SMB_STRNDUP(un, unlen);
        if(!quiet)printf("Using workgroup %s, %s%s\n", wgtmp, *usertmp?"user ":"guest user", usertmp);