summaryrefslogtreecommitdiff
path: root/source3/utils
diff options
context:
space:
mode:
Diffstat (limited to 'source3/utils')
-rw-r--r--source3/utils/net.c2
-rw-r--r--source3/utils/net_ads.c23
2 files changed, 21 insertions, 4 deletions
diff --git a/source3/utils/net.c b/source3/utils/net.c
index 89eb9211ca..81968e6f84 100644
--- a/source3/utils/net.c
+++ b/source3/utils/net.c
@@ -61,6 +61,7 @@ char *opt_requester_name = NULL;
char *opt_host = NULL;
char *opt_password = NULL;
char *opt_user_name = NULL;
+BOOL opt_user_specified = False;
char *opt_workgroup = NULL;
int opt_long_list_entries = 0;
int opt_reboot = 0;
@@ -394,6 +395,7 @@ static struct functable net_func[] = {
opt_have_ip = True;
break;
case 'U':
+ opt_user_specified = True;
opt_user_name = strdup(opt_user_name);
p = strchr(opt_user_name,'%');
if (p) {
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c
index fec31c6ea3..ae7bf5d446 100644
--- a/source3/utils/net_ads.c
+++ b/source3/utils/net_ads.c
@@ -75,8 +75,12 @@ static ADS_STRUCT *ads_startup(void)
{
ADS_STRUCT *ads;
ADS_STATUS status;
+ BOOL need_password = False;
+ BOOL second_time = False;
extern char *opt_password;
extern char *opt_user_name;
+ extern BOOL opt_user_specified;
+
ads = ads_init(NULL, NULL, NULL, NULL);
@@ -84,19 +88,30 @@ static ADS_STRUCT *ads_startup(void)
opt_user_name = "administrator";
}
- if (!opt_password) {
+ if (opt_user_specified)
+ need_password = True;
+
+retry:
+ if (!opt_password && need_password) {
char *prompt;
asprintf(&prompt,"%s password: ", opt_user_name);
opt_password = getpass(prompt);
free(prompt);
+ ads->password = strdup(opt_password);
}
- ads->password = strdup(opt_password);
+
ads->user_name = strdup(opt_user_name);
status = ads_connect(ads);
if (!ADS_ERR_OK(status)) {
- d_printf("ads_connect: %s\n", ads_errstr(status));
- return NULL;
+ if (!need_password && !second_time) {
+ need_password = True;
+ second_time = True;
+ goto retry;
+ } else {
+ d_printf("ads_connect: %s\n", ads_errstr(status));
+ return NULL;
+ }
}
return ads;
}