s3: Try to avoid dns searches with an empty site
[ira/wip.git] / source3 / libsmb / dsgetdcname.c
index 5279b8faf1fc169cfee9431700e588be7ead5d82..76a52c8923a07cc13a784db3fea8285466830308 100644 (file)
@@ -314,7 +314,7 @@ static bool check_cldap_reply_required_flags(uint32_t ret_flags,
 
 static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
                                        const char *domain_name,
-                                       struct GUID *domain_guid,
+                                       const struct GUID *domain_guid,
                                        uint32_t flags,
                                        const char *site_name,
                                        struct netr_DsRGetDCNameInfo **info_p)
@@ -331,7 +331,7 @@ static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
                return NT_STATUS_NO_MEMORY;
        }
 
-       if (!gencache_get_data_blob(key, &blob, NULL)) {
+       if (!gencache_get_data_blob(key, &blob, NULL, NULL)) {
                return NT_STATUS_NOT_FOUND;
        }
 
@@ -381,7 +381,7 @@ static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
 static NTSTATUS dsgetdcname_cached(TALLOC_CTX *mem_ctx,
                                   struct messaging_context *msg_ctx,
                                   const char *domain_name,
-                                  struct GUID *domain_guid,
+                                  const struct GUID *domain_guid,
                                   uint32_t flags,
                                   const char *site_name,
                                   struct netr_DsRGetDCNameInfo **info)
@@ -527,7 +527,7 @@ static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx,
 
 static NTSTATUS discover_dc_dns(TALLOC_CTX *mem_ctx,
                                const char *domain_name,
-                               struct GUID *domain_guid,
+                               const struct GUID *domain_guid,
                                uint32_t flags,
                                const char *site_name,
                                struct ip_service_name **returned_dclist,
@@ -686,7 +686,7 @@ static NTSTATUS make_domain_controller_info(TALLOC_CTX *mem_ctx,
        if (forest_name && *forest_name) {
                info->forest_name = talloc_strdup(mem_ctx, forest_name);
                NT_STATUS_HAVE_NO_MEMORY(info->forest_name);
-               flags |= DS_DNS_FOREST;
+               flags |= DS_DNS_FOREST_ROOT;
        }
 
        info->dc_flags = flags;
@@ -1033,7 +1033,7 @@ static NTSTATUS process_dc_netbios(TALLOC_CTX *mem_ctx,
 static NTSTATUS dsgetdcname_rediscover(TALLOC_CTX *mem_ctx,
                                       struct messaging_context *msg_ctx,
                                       const char *domain_name,
-                                      struct GUID *domain_guid,
+                                      const struct GUID *domain_guid,
                                       uint32_t flags,
                                       const char *site_name,
                                       struct netr_DsRGetDCNameInfo **info)
@@ -1114,7 +1114,7 @@ static bool is_closest_site(struct netr_DsRGetDCNameInfo *info)
 NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
                     struct messaging_context *msg_ctx,
                     const char *domain_name,
-                    struct GUID *domain_guid,
+                    const struct GUID *domain_guid,
                     const char *site_name,
                     uint32_t flags,
                     struct netr_DsRGetDCNameInfo **info)
@@ -1138,7 +1138,7 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       if (!site_name) {
+       if ((site_name == NULL) || (site_name[0] == '\0')) {
                query_site = sitename_fetch(domain_name);
        } else {
                query_site = SMB_STRDUP(site_name);