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