summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2016-08-25 14:24:08 +0200
committerKarolin Seeger <kseeger@samba.org>2016-09-13 12:27:29 +0200
commit438a79ede0f658313a51bee5df507d996c079636 (patch)
treef92545998912b5e0dfa4c83becdebd82c62927c5
parent88c1b5caeb547a1a3ebe94614fa827dc473cb64c (diff)
downloadsamba-438a79ede0f658313a51bee5df507d996c079636.tar.gz
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)
-rw-r--r--source3/utils/smbget.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/source3/utils/smbget.c b/source3/utils/smbget.c
index 4909fa2ca07..74ca7f8939d 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);