ADS_STATUS ads_connect(ADS_STRUCT *ads)
{
int version = LDAP_VERSION3;
+ int code;
ADS_STATUS status;
ads->last_attempt = time(NULL);
ldap_set_option(ads->ld, LDAP_OPT_PROTOCOL_VERSION, &version);
if (ads->password) {
- ads_kinit_password(ads);
+ if ((code = ads_kinit_password(ads)))
+ return ADS_ERROR_KRB5(code);
}
return ads_sasl_bind(ads);
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;
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) {
{
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);
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;
}