s4: Changes the old occurences of "lp_realm" in "lp_dnsdomain" where needed
authorMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>
Mon, 12 Oct 2009 17:09:18 +0000 (19:09 +0200)
committerMatthias Dieter Wallnöfer <mwallnoefer@yahoo.de>
Wed, 14 Oct 2009 08:50:43 +0000 (10:50 +0200)
For KERBEROS applications the realm should be upcase (function "lp_realm") but
for DNS ones it should be used lowcase (function "lp_dnsdomain"). This patch
implements the use of both in the right way.

15 files changed:
source4/auth/gensec/gensec_gssapi.c
source4/auth/kerberos/krb5_init_context.c
source4/cldap_server/netlogon.c
source4/dsdb/kcc/kcc_periodic.c
source4/dsdb/repl/drepl_out_helpers.c
source4/kdc/kdc.c
source4/lib/tls/tls.c
source4/libcli/ldap/ldap_client.c
source4/ntptr/simple_ldb/ntptr_simple_ldb.c
source4/rpc_server/drsuapi/addentry.c
source4/rpc_server/netlogon/dcerpc_netlogon.c
source4/rpc_server/spoolss/dcesrv_spoolss.c
source4/torture/rpc/frsapi.c
source4/torture/rpc/netlogon.c
source4/torture/rpc/wkssvc.c

index a23f913264b1b030513c25c3a7e2f879bf9b173d..2759ab41c3062c07b0d14cdbb86590af169a16b6 100644 (file)
@@ -147,6 +147,7 @@ static NTSTATUS gensec_gssapi_start(struct gensec_security *gensec_security)
        struct gensec_gssapi_state *gensec_gssapi_state;
        krb5_error_code ret;
        struct gsskrb5_send_to_kdc send_to_kdc;
+       const char *realm;
 
        gensec_gssapi_state = talloc(gensec_security, struct gensec_gssapi_state);
        if (!gensec_gssapi_state) {
@@ -226,15 +227,10 @@ static NTSTATUS gensec_gssapi_start(struct gensec_security *gensec_security)
                talloc_free(gensec_gssapi_state);
                return NT_STATUS_INTERNAL_ERROR;
        }
-       if (lp_realm(gensec_security->settings->lp_ctx) && *lp_realm(gensec_security->settings->lp_ctx)) {
-               char *upper_realm = strupper_talloc(gensec_gssapi_state, lp_realm(gensec_security->settings->lp_ctx));
-               if (!upper_realm) {
-                       DEBUG(1,("gensec_krb5_start: could not uppercase realm: %s\n", lp_realm(gensec_security->settings->lp_ctx)));
-                       talloc_free(gensec_gssapi_state);
-                       return NT_STATUS_NO_MEMORY;
-               }
-               ret = gsskrb5_set_default_realm(upper_realm);
-               talloc_free(upper_realm);
+
+       realm = lp_realm(gensec_security->settings->lp_ctx);
+       if (realm != NULL) {
+               ret = gsskrb5_set_default_realm(realm);
                if (ret) {
                        DEBUG(1,("gensec_krb5_start: gsskrb5_set_default_realm failed\n"));
                        talloc_free(gensec_gssapi_state);
index 04f0718a62eca73fd77e4de552916edee9161532..c00d7b16182bc03b010adbc5f14a2ddc3b818af5 100644 (file)
@@ -368,7 +368,7 @@ krb5_error_code smb_krb5_init_context(void *parent_ctx,
        krb5_error_code ret;
        TALLOC_CTX *tmp_ctx;
        char **config_files;
-       const char *config_file;
+       const char *config_file, *realm;
        
        initialize_krb5_error_table();
        
@@ -415,14 +415,9 @@ krb5_error_code smb_krb5_init_context(void *parent_ctx,
                return ret;
        }
                                                
-       if (lp_realm(lp_ctx) && *lp_realm(lp_ctx)) {
-               char *upper_realm = strupper_talloc(tmp_ctx, lp_realm(lp_ctx));
-               if (!upper_realm) {
-                       DEBUG(1,("gensec_krb5_start: could not uppercase realm: %s\n", lp_realm(lp_ctx)));
-                       talloc_free(tmp_ctx);
-                       return ENOMEM;
-               }
-               ret = krb5_set_default_realm((*smb_krb5_context)->krb5_context, upper_realm);
+       realm = lp_realm(lp_ctx);
+       if (realm != NULL) {
+               ret = krb5_set_default_realm((*smb_krb5_context)->krb5_context, realm);
                if (ret) {
                        DEBUG(1,("krb5_set_default_realm failed (%s)\n", 
                                 smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx)));
index 50a8775ae492abc25121be02871e466af1835a6e..b06fd609f29239bc5a7da767dfc96f767b742860 100644 (file)
@@ -61,7 +61,6 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
        uint32_t server_type;
        const char *pdc_name;
        struct GUID domain_uuid;
-       const char *realm;
        const char *dns_domain;
        const char *pdc_dns_name;
        const char *flatname;
@@ -78,7 +77,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
                domain = talloc_strndup(mem_ctx, domain, strlen(domain)-1);
        }
 
-       if (domain && strcasecmp_m(domain, lp_realm(lp_ctx)) == 0) {
+       if (domain && strcasecmp_m(domain, lp_dnsdomain(lp_ctx)) == 0) {
                domain_dn = ldb_get_default_basedn(sam_ctx);
        }
 
@@ -245,8 +244,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");
-       realm            = lp_realm(lp_ctx);
-       dns_domain       = lp_realm(lp_ctx);
+       dns_domain       = lp_dnsdomain(lp_ctx);
        pdc_dns_name     = talloc_asprintf(mem_ctx, "%s.%s", 
                                           strlower_talloc(mem_ctx, 
                                                           lp_netbios_name(lp_ctx)), 
@@ -274,7 +272,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       = realm;
+               netlogon->data.nt5_ex.forest       = dns_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;
@@ -307,7 +305,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       = realm;
+               netlogon->data.nt5.forest       = dns_domain;
                netlogon->data.nt5.dns_domain   = dns_domain;
                netlogon->data.nt5.pdc_dns_name = pdc_dns_name;
                netlogon->data.nt5.pdc_ip       = pdc_ip;
@@ -403,7 +401,7 @@ void cldapd_netlogon_request(struct cldap_socket *cldap,
        }
 
        if (domain_guid == NULL && domain == NULL) {
-               domain = lp_realm(cldapd->task->lp_ctx);
+               domain = lp_dnsdomain(cldapd->task->lp_ctx);
        }
 
        if (version == -1) {
index 44e0c7ae8bc5178c6300805914c0dfe542b4910c..30d43033cbc80402dca36b812d640906662f92b2 100644 (file)
@@ -152,7 +152,7 @@ static NTSTATUS kccsrv_simple_update(struct kccsrv_service *s, TALLOC_CTX *mem_c
                r1->other_info               = talloc_zero(reps, struct repsFromTo1OtherInfo);
                r1->other_info->dns_name     = talloc_asprintf(r1->other_info, "%s._msdcs.%s",
                                                               GUID_string(mem_ctx, &ntds_guid),
-                                                              lp_realm(s->task->lp_ctx));
+                                                              lp_dnsdomain(s->task->lp_ctx));
                r1->source_dsa_obj_guid      = ntds_guid;
                r1->source_dsa_invocation_id = invocation_id;
                r1->replica_flags            = 
index 5c63c111f3af0f4b6de77c90c6f432971dc48e28..598ceb58b9a668704b7a2e3f73f26e7dd5738daf 100644 (file)
@@ -506,10 +506,9 @@ static void dreplsrv_update_refs_send(struct dreplsrv_op_pull_source_state *st)
        ntds_guid_str = GUID_string(r, &service->ntds_guid);
        if (composite_nomem(ntds_guid_str, c)) return;
 
-       /* lp_realm() is not really right here */
        ntds_dns_name = talloc_asprintf(r, "%s._msdcs.%s",
                                        ntds_guid_str,
-                                       lp_realm(service->task->lp_ctx));
+                                       lp_dnsdomain(service->task->lp_ctx));
        if (composite_nomem(ntds_dns_name, c)) return;
 
        r->in.bind_handle       = &drsuapi->bind_handle;
index a67aa094613fe3299110601e4ee2a396dfd244b1..1260e9000f8a0cc01a5883688dff64757b592b11 100644 (file)
@@ -602,7 +602,7 @@ static NTSTATUS kdc_check_generic_kerberos(struct irpc_message *msg,
        }
 
        ret = krb5_make_principal(kdc->smb_krb5_context->krb5_context, &principal, 
-                                 lp_realm(kdc->task->lp_ctx), 
+                                 lp_realm(kdc->task->lp_ctx),
                                  "krbtgt", lp_realm(kdc->task->lp_ctx), 
                                  NULL);
 
index ba2e9e431b3b94a4a9d286b1f4524faac25d4fad..470b555aeeaf6633136d1d9a9f80a4f6a9909703 100644 (file)
@@ -377,7 +377,8 @@ struct tls_params *tls_initialise(TALLOC_CTX *mem_ctx, struct loadparm_context *
 
        if (!file_exist(cafile)) {
                char *hostname = talloc_asprintf(mem_ctx, "%s.%s",
-                                                lp_netbios_name(lp_ctx), lp_realm(lp_ctx));
+                                                lp_netbios_name(lp_ctx),
+                                                lp_dnsdomain(lp_ctx));
                if (hostname == NULL) {
                        goto init_failed;
                }
index 3c78a7c7e29dc0f5a7d58a25466044ee8db1ad81..eb532769362a10d5bd09e51c34789b59cfc5e8c6 100644 (file)
@@ -338,7 +338,9 @@ _PUBLIC_ struct composite_context *ldap_connect_send(struct ldap_connection *con
                /* LDAPI connections are to localhost, so give the
                 * local host name as the target for gensec's
                 * DIGEST-MD5 mechanism */
-               conn->host = talloc_asprintf(conn, "%s.%s", lp_netbios_name(conn->lp_ctx),  lp_realm(conn->lp_ctx));
+               conn->host = talloc_asprintf(conn, "%s.%s",
+                                            lp_netbios_name(conn->lp_ctx),
+                                            lp_dnsdomain(conn->lp_ctx));
                if (composite_nomem(conn->host, state->ctx)) {
                        return result;
                }
index 601f7902df639ae077296cfc198678717ba059cb..e179f52926ba8e3596674db26e652efc69677ebe 100644 (file)
@@ -208,12 +208,14 @@ static WERROR sptr_GetPrintServerData(struct ntptr_GenericHandle *server, TALLOC
                r->out.data->binary     = blob;
                return WERR_OK;
        } else if (strcmp("DNSMachineName", r->in.value_name) == 0) {
-               if (!lp_realm(server->ntptr->lp_ctx)) return WERR_INVALID_PARAM;
+               const char *dnsdomain = lp_dnsdomain(server->ntptr->lp_ctx);
+
+               if (dnsdomain == NULL) return WERR_INVALID_PARAM;
 
                *r->out.type            = REG_SZ;
                r->out.data->string     = talloc_asprintf(mem_ctx, "%s.%s",
-                                                                  lp_netbios_name(server->ntptr->lp_ctx),
-                                                                  lp_realm(server->ntptr->lp_ctx));
+                                                         lp_netbios_name(server->ntptr->lp_ctx),
+                                                         dnsdomain);
                W_ERROR_HAVE_NO_MEMORY(r->out.data->string);
                return WERR_OK;
        }
index 2c913dd91d8fbe147eadf8509910ec2abdfab724..dbaf6271304d738f06514f8de0a5f1676721bd33 100644 (file)
@@ -82,7 +82,7 @@ static WERROR drsuapi_add_SPNs(struct drsuapi_bind_state *b_state,
 
                ntds_guid_str = GUID_string(res, &ntds_guid);
 
-               dom_string = lp_realm(dce_call->conn->dce_ctx->lp_ctx);
+               dom_string = lp_dnsdomain(dce_call->conn->dce_ctx->lp_ctx);
 
                /*
                 * construct a modify request to add the new SPNs to
index 5eccd7f6a81fbdd996785a57b7f371269f08f9b3..f763069a3b5d84a26a66e74c1c9dae050d701fad 100644 (file)
@@ -643,7 +643,7 @@ static NTSTATUS dcesrv_netr_LogonSamLogon_base(struct dcesrv_call_state *dce_cal
                sam6 = talloc_zero(mem_ctx, struct netr_SamInfo6);
                NT_STATUS_HAVE_NO_MEMORY(sam6);
                sam6->base = *sam;
-               sam6->forest.string = lp_realm(dce_call->conn->dce_ctx->lp_ctx);
+               sam6->forest.string = lp_dnsdomain(dce_call->conn->dce_ctx->lp_ctx);
                sam6->principle.string = talloc_asprintf(mem_ctx, "%s@%s", 
                                                         sam->account_name.string, sam6->forest.string);
                NT_STATUS_HAVE_NO_MEMORY(sam6->principle.string);
@@ -1096,7 +1096,7 @@ static NTSTATUS fill_one_domain_info(TALLOC_CTX *mem_ctx,
 
        if (is_local) {
                info->domainname.string = lp_sam_name(lp_ctx);
-               info->dns_domainname.string = lp_realm(lp_ctx);
+               info->dns_domainname.string = lp_dnsdomain(lp_ctx);
                info->domain_guid = samdb_result_guid(res, "objectGUID");
                info->domain_sid = samdb_result_dom_sid(mem_ctx, res, "objectSid");
        } else {
@@ -1432,14 +1432,14 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call, TA
         */
        info->dc_unc                    = talloc_asprintf(mem_ctx, "\\\\%s.%s",
                                                          lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx), 
-                                                         lp_realm(dce_call->conn->dce_ctx->lp_ctx));
+                                                         lp_dnsdomain(dce_call->conn->dce_ctx->lp_ctx));
        W_ERROR_HAVE_NO_MEMORY(info->dc_unc);
        info->dc_address                = talloc_strdup(mem_ctx, "\\\\0.0.0.0");
        W_ERROR_HAVE_NO_MEMORY(info->dc_address);
        info->dc_address_type           = DS_ADDRESS_TYPE_INET;
        info->domain_guid               = samdb_result_guid(res[0], "objectGUID");
-       info->domain_name               = lp_realm(dce_call->conn->dce_ctx->lp_ctx);
-       info->forest_name               = lp_realm(dce_call->conn->dce_ctx->lp_ctx);
+       info->domain_name               = lp_dnsdomain(dce_call->conn->dce_ctx->lp_ctx);
+       info->forest_name               = lp_dnsdomain(dce_call->conn->dce_ctx->lp_ctx);
        info->dc_flags                  = DS_DNS_FOREST_ROOT |
                                          DS_DNS_DOMAIN |
                                          DS_DNS_CONTROLLER |
@@ -1614,7 +1614,7 @@ static WERROR dcesrv_netr_DsrEnumerateDomainTrusts(struct dcesrv_call_state *dce
        /* TODO: add filtering by trust_flags, and correct trust_type
           and attributes */
        trusts->array[0].netbios_name = lp_sam_name(dce_call->conn->dce_ctx->lp_ctx);
-       trusts->array[0].dns_name     = lp_realm(dce_call->conn->dce_ctx->lp_ctx);
+       trusts->array[0].dns_name     = lp_dnsdomain(dce_call->conn->dce_ctx->lp_ctx);
        trusts->array[0].trust_flags =
                NETR_TRUST_FLAG_TREEROOT | 
                NETR_TRUST_FLAG_IN_FOREST | 
index d380b10d8e06abd9215d7f61b6397ed1b0b38d07..0e071dc74c965747861791d404661a476c623b1b 100644 (file)
@@ -150,6 +150,7 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal
        bool ret;
        struct socket_address *myaddr;
        const char **aliases;
+       const char *dnsdomain;
        int i;
 
        /* NULL is ok */
@@ -186,12 +187,13 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal
        /* DNS NAME is ok
         * TODO: we need to check if aliases are also ok
         */
-       if (lp_realm(dce_call->conn->dce_ctx->lp_ctx)) {
+       dnsdomain = lp_dnsdomain(dce_call->conn->dce_ctx->lp_ctx);
+       if (dnsdomain != NULL) {
                char *str;
 
                str = talloc_asprintf(mem_ctx, "%s.%s",
                                                lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx),
-                                               lp_realm(dce_call->conn->dce_ctx->lp_ctx));
+                                               dnsdomain);
                W_ERROR_HAVE_NO_MEMORY(str);
 
                ret = strequal(str, server_name);
index e9a19bcf96d21a85f2d1cff15649583d8c540e25..24d769a3107569d8ed21e8dc2052178a81592e4f 100644 (file)
@@ -193,8 +193,7 @@ static bool test_ForceReplication(struct torture_context *tctx,
 
        r.in.replica_set_guid = NULL;
        r.in.connection_guid = NULL;
-       r.in.replica_set_name = talloc_asprintf(tctx, "%s",
-                                               lp_realm(tctx->lp_ctx));
+       r.in.replica_set_name = lp_dnsdomain(tctx->lp_ctx);
        r.in.partner_dns_name = dcerpc_server_name(p);
 
        torture_assert_ntstatus_ok(tctx,
index 35f1a5942f78f5710f8da168ce23a53a9f36cae2..6a753ed41233679a257bb6b55a4cef99e11d63fc 100644 (file)
@@ -1991,7 +1991,7 @@ static bool test_netr_DsRGetDCName(struct torture_context *tctx,
        struct netr_DsRGetDCNameInfo *info = NULL;
 
        r.in.server_unc         = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
-       r.in.domain_name        = talloc_asprintf(tctx, "%s", lp_realm(tctx->lp_ctx));
+       r.in.domain_name        = lp_dnsdomain(tctx->lp_ctx);
        r.in.domain_guid        = NULL;
        r.in.site_guid          = NULL;
        r.in.flags              = DS_RETURN_DNS_NAME;
@@ -2016,7 +2016,7 @@ static bool test_netr_DsRGetDCNameEx(struct torture_context *tctx,
        struct netr_DsRGetDCNameInfo *info = NULL;
 
        r.in.server_unc         = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
-       r.in.domain_name        = talloc_asprintf(tctx, "%s", lp_realm(tctx->lp_ctx));
+       r.in.domain_name        = lp_dnsdomain(tctx->lp_ctx);
        r.in.domain_guid        = NULL;
        r.in.site_name          = NULL;
        r.in.flags              = DS_RETURN_DNS_NAME;
@@ -2043,7 +2043,7 @@ static bool test_netr_DsRGetDCNameEx2(struct torture_context *tctx,
        r.in.server_unc         = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
        r.in.client_account     = NULL;
        r.in.mask               = 0x00000000;
-       r.in.domain_name        = talloc_asprintf(tctx, "%s", lp_realm(tctx->lp_ctx));
+       r.in.domain_name        = lp_dnsdomain(tctx->lp_ctx);
        r.in.domain_guid        = NULL;
        r.in.site_name          = NULL;
        r.in.flags              = DS_RETURN_DNS_NAME;
index 06b1d05ee4dce2ee8063caf17485569c52e17727..d5ef0a4fdafcfc658c159512672c206a571ff766 100644 (file)
@@ -1132,7 +1132,7 @@ static bool test_NetrJoinDomain(struct torture_context *tctx,
                                        user);
 
        r.in.server_name = dcerpc_server_name(p);
-       r.in.domain_name = lp_realm(tctx->lp_ctx);
+       r.in.domain_name = lp_dnsdomain(tctx->lp_ctx);
        r.in.account_ou = NULL;
        r.in.Account = admin_account;
        r.in.password = NULL;