r25032: Contact an off site DC if non is available on site.
authorLars Müller <lmuelle@samba.org>
Sat, 8 Sep 2007 14:56:11 +0000 (14:56 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:30:36 +0000 (12:30 -0500)
(This used to be commit 50879e6de5101b6c5ab8b3fb954f1d2a48530716)

source3/libsmb/namequery_dc.c
source3/nsswitch/winbindd_cm.c

index 7dac69e2db127960ad9b619bffa290602a36a670..bdac833d13c7e21850130b4233260b34d4fd8531 100644 (file)
@@ -98,15 +98,22 @@ static BOOL ads_dc_name(const char *domain,
                }
 
 #ifdef HAVE_KRB5
-               if (is_our_primary_domain(domain) && (ads->config.flags & ADS_KDC) && ads_closest_dc(ads)) {
-                       /* We're going to use this KDC for this realm/domain.
-                          If we are using sites, then force the krb5 libs
-                          to use this KDC. */
-
-                       create_local_private_krb5_conf_for_domain(realm,
-                                                               domain,
-                                                               sitename,
-                                                               ads->ldap.ip);
+               if (is_our_primary_domain(domain) && (ads->config.flags & ADS_KDC)) {
+                       if (ads_closest_dc(ads)) {
+                               /* We're going to use this KDC for this realm/domain.
+                                  If we are using sites, then force the krb5 libs
+                                  to use this KDC. */
+
+                               create_local_private_krb5_conf_for_domain(realm,
+                                                                       domain,
+                                                                       sitename,
+                                                                       ads->ldap.ip);
+                       } else {
+                               create_local_private_krb5_conf_for_domain(realm,
+                                                                       domain,
+                                                                       NULL,
+                                                                       ads->ldap.ip);
+                       }
                }
 #endif
                break;
index 0888a934d15f6d707085d9869a6b53eaf402c275..28d8179cb654891e788335a62e8242183388df91 100644 (file)
@@ -1084,21 +1084,29 @@ static BOOL dcip_to_name(const struct winbindd_domain *domain, struct in_addr ip
 
                        DEBUG(10,("dcip_to_name: flags = 0x%x\n", (unsigned int)ads->config.flags));
 
-                       if (domain->primary && (ads->config.flags & ADS_KDC) && ads_closest_dc(ads)) {
-                               char *sitename = sitename_fetch(ads->config.realm);
-
-                               /* We're going to use this KDC for this realm/domain.
-                                  If we are using sites, then force the krb5 libs
-                                  to use this KDC. */
-
-                               create_local_private_krb5_conf_for_domain(domain->alt_name,
-                                                               domain->name,
-                                                               sitename,
-                                                               ip);
-
+                       if (domain->primary && (ads->config.flags & ADS_KDC)) {
+                               if (ads_closest_dc(ads)) {
+                                       char *sitename = sitename_fetch(ads->config.realm);
+
+                                       /* We're going to use this KDC for this realm/domain.
+                                          If we are using sites, then force the krb5 libs
+                                          to use this KDC. */
+
+                                       create_local_private_krb5_conf_for_domain(domain->alt_name,
+                                                                       domain->name,
+                                                                       sitename,
+                                                                       ip);
+
+                                       SAFE_FREE(sitename);
+                               } else {
+                                       /* use an off site KDC */
+                                       create_local_private_krb5_conf_for_domain(domain->alt_name,
+                                                                       domain->name,
+                                                                       NULL,
+                                                                       ip);
+                               }
                                winbindd_set_locator_kdc_envs(domain);
 
-                               SAFE_FREE(sitename);
                                /* Ensure we contact this DC also. */
                                saf_store( domain->name, name);
                                saf_store( domain->alt_name, name);