Blob Blame History Raw
From 8fec0f145a06d900bbcfc8959749cc78ab6be8ed Mon Sep 17 00:00:00 2001
From: Andreas Schneider <asn@samba.org>
Date: Thu, 25 Aug 2016 14:24:08 +0200
Subject: [PATCH] s3-util: Fix asking for username and password in smbget.

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>

(cherry picked from commit f5401ff3146aabc5fb2dac25e4856c6c3756c8f7)
---
 source3/utils/smbget.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/source3/utils/smbget.c b/source3/utils/smbget.c
index 4909fa2..74ca7f8 100644
--- a/source3/utils/smbget.c
+++ b/source3/utils/smbget.c
@@ -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);
-- 
2.9.3