s3-util: Fix asking for username and password in smbget.
authorAndreas Schneider <asn@samba.org>
Thu, 25 Aug 2016 12:24:08 +0000 (14:24 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 26 Aug 2016 02:22:27 +0000 (04:22 +0200)
If the user specified the username in the URI with with:

  smb://DOMAIN;user:secret@server/share

the tool should not prompt for the username nor the password.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12175

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Aug 26 04:22:27 CEST 2016 on sn-devel-144

source3/utils/smbget.c

index 99261e3740d6a6d0f530b2220106104d31bb0151..d2d5e00a8edfb527905cea8e32a11482bac2b8f9 100644 (file)
@@ -105,7 +105,6 @@ static void get_auth_data(const char *srv, const char *shr, char *wg, int wglen,
        static char *savedwg;
        static char *savedun;
        static char *savedpw;
-       char tmp[128];
 
        if (hasasked) {
                strncpy(wg, savedwg, wglen - 1);
@@ -115,23 +114,22 @@ static void get_auth_data(const char *srv, const char *shr, char *wg, int wglen,
        }
        hasasked = true;
 
-       if (!opt.nonprompt && !opt.username_specified) {
-               printf("Username for %s at %s [guest] ", shr, srv);
-               if (fgets(tmp, sizeof(tmp), stdin) == NULL) {
-                       return;
-               }
-               if ((strlen(tmp) > 0) && (tmp[strlen(tmp) - 1] == '\n')) {
-                       tmp[strlen(tmp) - 1] = '\0';
-               }
-               strncpy(un, tmp, unlen - 1);
-       } else if (opt.username != NULL) {
+       /*
+        * If no user has been specified un is initialized with the current
+        * username of the user who started smbget.
+        */
+       if (opt.username_specified) {
                strncpy(un, opt.username, unlen - 1);
        }
 
-       if (!opt.nonprompt && !opt.password_specified) {
+       if (!opt.nonprompt && !opt.password_specified && pw[0] == '\0') {
                char *prompt;
-               if (asprintf(&prompt, "Password for %s at %s: ", shr, srv) ==
-                   -1) {
+               int rc;
+
+               rc = asprintf(&prompt,
+                             "Password for [%s] connecting to //%s/%s: ",
+                             un, shr, srv);
+               if (rc == -1) {
                        return;
                }
                (void)samba_getpass(prompt, pw, pwlen, false, false);