summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/auth/auth_domain.c10
-rw-r--r--source3/include/ads.h1
-rw-r--r--source3/libads/ads_struct.c6
-rw-r--r--source3/utils/net_ads.c1
4 files changed, 14 insertions, 4 deletions
diff --git a/source3/auth/auth_domain.c b/source3/auth/auth_domain.c
index f74f1bb9e8..327d49144f 100644
--- a/source3/auth/auth_domain.c
+++ b/source3/auth/auth_domain.c
@@ -46,6 +46,8 @@ static NTSTATUS ads_resolve_dc(fstring remote_machine,
return NT_STATUS_NO_LOGON_SERVERS;
}
+ DEBUG(4,("ads_resolve_dc: realm=%s\n", ads->realm));
+
#ifdef HAVE_ADS
/* a full ads_connect() is actually overkill, as we don't srictly need
to do the SASL auth in order to get the info we need, but libads
@@ -57,10 +59,10 @@ static NTSTATUS ads_resolve_dc(fstring remote_machine,
fstrcpy(remote_machine, ads->ldap_server_name);
strupper(remote_machine);
- *dest_ip = *interpret_addr2(ads->ldap_server);
+ *dest_ip = ads->ldap_ip;
ads_destroy(&ads);
- if (!*remote_machine) {
+ if (!*remote_machine || is_zero_ip(*dest_ip)) {
return NT_STATUS_NO_LOGON_SERVERS;
}
@@ -166,8 +168,8 @@ static NTSTATUS connect_to_domain_password_server(struct cli_state **cli,
return NT_STATUS_NO_LOGON_SERVERS;
/* Attempt connection */
- result = cli_full_connection(cli, global_myname, server,
- &dest_ip, 0, "IPC$", "IPC", "", "", "", 0);
+ result = cli_full_connection(cli, global_myname, remote_machine,
+ &dest_ip, 0, "IPC$", "IPC", "", "", "");
if (!NT_STATUS_IS_OK(result)) {
release_server_mutex();
diff --git a/source3/include/ads.h b/source3/include/ads.h
index b3e18f18b8..78d2fcf4b5 100644
--- a/source3/include/ads.h
+++ b/source3/include/ads.h
@@ -17,6 +17,7 @@ typedef struct {
char *password;
char *user_name;
char *server_realm;
+ struct in_addr ldap_ip;
} ADS_STRUCT;
typedef struct {
diff --git a/source3/libads/ads_struct.c b/source3/libads/ads_struct.c
index 0be79673a0..af0b5d4143 100644
--- a/source3/libads/ads_struct.c
+++ b/source3/libads/ads_struct.c
@@ -162,6 +162,7 @@ ADS_STRUCT *ads_init(const char *realm,
ads->ldap_server = strdup(lp_ads_server());
}
if (!ads->ldap_server || !ads->ldap_server[0]) {
+ SAFE_FREE(ads->ldap_server);
ads->ldap_server = find_ldap_server(ads);
}
}
@@ -170,6 +171,11 @@ ADS_STRUCT *ads_init(const char *realm,
ads->kdc_server = ads->ldap_server? strdup(ads->ldap_server) : NULL;
}
+ if (ads->ldap_server) {
+ /* its very useful knowing the IP of the ldap server */
+ ads->ldap_ip = *interpret_addr2(ads->ldap_server);
+ }
+
return ads;
}
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c
index fa3eac6bd3..a449395641 100644
--- a/source3/utils/net_ads.c
+++ b/source3/utils/net_ads.c
@@ -67,6 +67,7 @@ static int net_ads_info(int argc, const char **argv)
}
d_printf("LDAP server: %s\n", ads->ldap_server);
+ d_printf("LDAP server IP: %s\n", inet_ntoa(ads->ldap_ip));
d_printf("LDAP server name: %s\n", ads->ldap_server_name);
d_printf("Realm: %s\n", ads->realm);
d_printf("Bind Path: %s\n", ads->bind_path);