s4:use "samdb_forest_name" for the forest DNS domainname lookup
authorMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>
Mon, 12 Apr 2010 13:02:10 +0000 (15:02 +0200)
committerMatthias Dieter Wallnöfer <mdw@samba.org>
Tue, 13 Apr 2010 07:32:33 +0000 (09:32 +0200)
source4/cldap_server/netlogon.c
source4/rpc_server/netlogon/dcerpc_netlogon.c

index e6a4ab373c2e32df1b32426536638a19b80764bd..292327496c4efa563ad75bf809d51df7f33b8b74 100644 (file)
@@ -62,6 +62,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
        const char *pdc_name;
        struct GUID domain_uuid;
        const char *dns_domain;
+       const char *forest_domain;
        const char *pdc_dns_name;
        const char *flatname;
        const char *server_site;
@@ -241,6 +242,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
        pdc_name         = talloc_asprintf(mem_ctx, "\\\\%s", lp_netbios_name(lp_ctx));
        domain_uuid      = samdb_result_guid(dom_res->msgs[0], "objectGUID");
        dns_domain       = lp_dnsdomain(lp_ctx);
+       forest_domain    = samdb_forest_name(sam_ctx, mem_ctx);
        pdc_dns_name     = talloc_asprintf(mem_ctx, "%s.%s", 
                                           strlower_talloc(mem_ctx, 
                                                           lp_netbios_name(lp_ctx)), 
@@ -268,7 +270,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                }
                netlogon->data.nt5_ex.server_type  = server_type;
                netlogon->data.nt5_ex.domain_uuid  = domain_uuid;
-               netlogon->data.nt5_ex.forest       = dns_domain;
+               netlogon->data.nt5_ex.forest       = forest_domain;
                netlogon->data.nt5_ex.dns_domain   = dns_domain;
                netlogon->data.nt5_ex.pdc_dns_name = pdc_dns_name;
                netlogon->data.nt5_ex.domain       = flatname;
@@ -301,7 +303,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                netlogon->data.nt5.user_name    = user;
                netlogon->data.nt5.domain_name  = flatname;
                netlogon->data.nt5.domain_uuid  = domain_uuid;
-               netlogon->data.nt5.forest       = dns_domain;
+               netlogon->data.nt5.forest       = forest_domain;
                netlogon->data.nt5.dns_domain   = dns_domain;
                netlogon->data.nt5.pdc_dns_name = pdc_dns_name;
                netlogon->data.nt5.pdc_ip       = pdc_ip;
index 3fa5c69aeade905e1fa524bd45d2016e4b32d555..698930ea5d61243ee5463cc4991dc41af7674f33 100644 (file)
@@ -1122,18 +1122,10 @@ static NTSTATUS fill_one_domain_info(TALLOC_CTX *mem_ctx,
                /* MS-NRPC 3.5.4.3.9 - must be set to NULL for trust list */
                info->dns_forestname.string = NULL;
        } else {
-               char *p;
-               /* TODO: we need a common function for pulling the forest */
-               info->dns_forestname.string = ldb_dn_canonical_string(info, ldb_get_root_basedn(sam_ctx));
-               if (!info->dns_forestname.string) {
-                       return NT_STATUS_NO_SUCH_DOMAIN;
-               }
-               p = strchr(info->dns_forestname.string, '/');
-               if (p) {
-                       *p = '\0';
-               }
+               info->dns_forestname.string = samdb_forest_name(sam_ctx, mem_ctx);
+               NT_STATUS_HAVE_NO_MEMORY(info->dns_forestname.string);
                info->dns_forestname.string = talloc_asprintf(mem_ctx, "%s.", info->dns_forestname.string);
-
+               NT_STATUS_HAVE_NO_MEMORY(info->dns_forestname.string);
        }
 
        if (is_local) {
@@ -1530,7 +1522,8 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call,
        info->dc_address_type = DS_ADDRESS_TYPE_INET;
        info->domain_guid = samdb_result_guid(res[0], "objectGUID");
        info->domain_name = lp_dnsdomain(lp_ctx);
-       info->forest_name = lp_dnsdomain(lp_ctx);
+       info->forest_name = samdb_forest_name(sam_ctx, mem_ctx);
+       W_ERROR_HAVE_NO_MEMORY(info->forest_name);
        info->dc_flags  = DS_DNS_FOREST_ROOT |
                          DS_DNS_DOMAIN |
                          DS_DNS_CONTROLLER |
@@ -1925,7 +1918,9 @@ static WERROR fill_forest_trust_array(TALLOC_CTX *mem_ctx,
        e->flags = 0;
        e->type = LSA_FOREST_TRUST_TOP_LEVEL_NAME;
        e->time = 0; /* so far always 0 in trces. */
-       e->forest_trust_data.top_level_name.string = lp_dnsdomain(lp_ctx);
+       e->forest_trust_data.top_level_name.string = samdb_forest_name(sam_ctx,
+                                                                      mem_ctx);
+       W_ERROR_HAVE_NO_MEMORY(e->forest_trust_data.top_level_name.string);
 
        info->entries[0] = e;