diff options
Diffstat (limited to 'source3/nsswitch')
-rw-r--r-- | source3/nsswitch/winbindd_cm.c | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index 3aaaf6b670..dcbd47303f 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -148,47 +148,46 @@ static BOOL cm_get_dc_name(const char *domain, fstring srv_name, struct in_addr } /* Pick a nice close server */ - - if (strequal(lp_passwordserver(), "*")) { + /* Look for DC on local net */ + + for (i = 0; i < count; i++) { + if (!is_local_net(ip_list[i])) + continue; - /* Look for DC on local net */ - - for (i = 0; i < count; i++) { - if (is_local_net(ip_list[i]) && - name_status_find(domain, 0x1c, 0x20, - ip_list[i], srv_name)) { - dc_ip = ip_list[i]; - goto done; - } - zero_ip(&ip_list[i]); + if (name_status_find(domain, 0x1c, 0x20, ip_list[i], srv_name)) { + dc_ip = ip_list[i]; + goto done; } + zero_ip(&ip_list[i]); + } - /* Look for other DCs */ - - for (i = 0; i < count; i++) { - if (!is_zero_ip(ip_list[i]) && - name_status_find(domain, 0x1c, 0x20, - ip_list[i], srv_name)) { - dc_ip = ip_list[i]; - goto done; - } - } + /* + * Secondly try and contact a random PDC/BDC. + */ - /* No-one to talk to )-: */ + i = (sys_random() % count); - return False; + if (!is_zero_ip(ip_list[i]) && + name_status_find(domain, 0x1c, 0x20, + ip_list[i], srv_name)) { + dc_ip = ip_list[i]; + goto done; } + zero_ip(&ip_list[i]); /* Tried and failed. */ - /* Return first DC that we can contact */ + /* Finally return first DC that we can contact */ for (i = 0; i < count; i++) { - if (name_status_find(domain, 0x1c, 0x20, ip_list[i], - srv_name)) { + if (is_zero_ip(ip_list[i])) + continue; + + if (name_status_find(domain, 0x1c, 0x20, ip_list[i], srv_name)) { dc_ip = ip_list[i]; goto done; } } + /* No-one to talk to )-: */ return False; /* Boo-hoo */ done: @@ -201,7 +200,7 @@ static BOOL cm_get_dc_name(const char *domain, fstring srv_name, struct in_addr fstrcpy(dcc->srv_name, srv_name); - DEBUG(3, ("Returning DC %s (%s) for domain %s\n", srv_name, + DEBUG(3, ("cm_get_dc_name: Returning DC %s (%s) for domain %s\n", srv_name, inet_ntoa(dc_ip), domain)); *ip_out = dc_ip; |