The branch, master has been updated
       via  5931734... s4:password_hash - load the domain parameters from the 
"loadparm context"
       via  8a505ec... s4:torture - fix up "ldap_basic" test
       via  e968698... s4: Changes the old occurences of "lp_realm" in 
"lp_dnsdomain" where needed
       via  ccfbe7b... s4:loadparm - adapt "realm" handling
      from  8e91c40... s3: Fix reference to freed memory in pam_winbind.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 5931734be69d802a6fabbf2ec70866c60cac4b25
Author: Matthias Dieter Wallnöfer <[email protected]>
Date:   Wed Oct 14 11:40:25 2009 +0200

    s4:password_hash - load the domain parameters from the "loadparm context"
    
    And don't cut them out from the DNS hostname.

commit 8a505ec7555b6eda6ebff0af24b3db7a5f4b14c8
Author: Matthias Dieter Wallnöfer <[email protected]>
Date:   Wed Oct 14 10:50:57 2009 +0200

    s4:torture - fix up "ldap_basic" test

commit e9686985cbf1f5234d9e9731176b1eb4e02911e8
Author: Matthias Dieter Wallnöfer <[email protected]>
Date:   Mon Oct 12 19:09:18 2009 +0200

    s4: Changes the old occurences of "lp_realm" in "lp_dnsdomain" where needed
    
    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.

commit ccfbe7bcb1f09530091ad6c986eae19a378bd2ea
Author: Matthias Dieter Wallnöfer <[email protected]>
Date:   Tue Oct 13 18:18:50 2009 +0200

    s4:loadparm - adapt "realm" handling
    
    Change "lp_realm" behaviour to return the realm always upcased and add a
    function "lp_dnsdomain" which returns it always lowcased.

-----------------------------------------------------------------------

Summary of changes:
 source4/auth/gensec/gensec_gssapi.c            |   14 ++----
 source4/auth/kerberos/krb5_init_context.c      |   13 ++----
 source4/cldap_server/netlogon.c                |   12 ++---
 source4/dsdb/kcc/kcc_periodic.c                |    2 +-
 source4/dsdb/repl/drepl_out_helpers.c          |    3 +-
 source4/dsdb/samdb/ldb_modules/password_hash.c |   53 +++++-------------------
 source4/kdc/kdc.c                              |    2 +-
 source4/lib/tls/tls.c                          |    3 +-
 source4/libcli/ldap/ldap_client.c              |    4 +-
 source4/ntptr/simple_ldb/ntptr_simple_ldb.c    |    8 ++-
 source4/param/loadparm.c                       |   26 ++++++++++-
 source4/param/param.h                          |    1 +
 source4/rpc_server/drsuapi/addentry.c          |    2 +-
 source4/rpc_server/netlogon/dcerpc_netlogon.c  |   12 +++---
 source4/rpc_server/spoolss/dcesrv_spoolss.c    |    6 ++-
 source4/torture/ldap/basic.c                   |   11 +++--
 source4/torture/rpc/frsapi.c                   |    3 +-
 source4/torture/rpc/netlogon.c                 |    6 +-
 source4/torture/rpc/wkssvc.c                   |    2 +-
 19 files changed, 84 insertions(+), 99 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/auth/gensec/gensec_gssapi.c 
b/source4/auth/gensec/gensec_gssapi.c
index a23f913..2759ab4 100644
--- a/source4/auth/gensec/gensec_gssapi.c
+++ b/source4/auth/gensec/gensec_gssapi.c
@@ -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);
diff --git a/source4/auth/kerberos/krb5_init_context.c 
b/source4/auth/kerberos/krb5_init_context.c
index 04f0718..c00d7b1 100644
--- a/source4/auth/kerberos/krb5_init_context.c
+++ b/source4/auth/kerberos/krb5_init_context.c
@@ -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)));
diff --git a/source4/cldap_server/netlogon.c b/source4/cldap_server/netlogon.c
index 50a8775..b06fd60 100644
--- a/source4/cldap_server/netlogon.c
+++ b/source4/cldap_server/netlogon.c
@@ -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) {
diff --git a/source4/dsdb/kcc/kcc_periodic.c b/source4/dsdb/kcc/kcc_periodic.c
index 44e0c7a..30d4303 100644
--- a/source4/dsdb/kcc/kcc_periodic.c
+++ b/source4/dsdb/kcc/kcc_periodic.c
@@ -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            = 
diff --git a/source4/dsdb/repl/drepl_out_helpers.c 
b/source4/dsdb/repl/drepl_out_helpers.c
index 5c63c11..598ceb5 100644
--- a/source4/dsdb/repl/drepl_out_helpers.c
+++ b/source4/dsdb/repl/drepl_out_helpers.c
@@ -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;
diff --git a/source4/dsdb/samdb/ldb_modules/password_hash.c 
b/source4/dsdb/samdb/ldb_modules/password_hash.c
index adb62d3..a3c99f4 100644
--- a/source4/dsdb/samdb/ldb_modules/password_hash.c
+++ b/source4/dsdb/samdb/ldb_modules/password_hash.c
@@ -87,9 +87,9 @@ struct domain_data {
        bool store_cleartext;
        uint_t pwdProperties;
        uint_t pwdHistoryLength;
-       char *netbios_domain;
-       char *dns_domain;
-       char *realm;
+       const char *netbios_domain;
+       const char *dns_domain;
+       const char *realm;
 };
 
 struct setup_password_fields_io {
@@ -1552,9 +1552,8 @@ static int get_domain_data_callback(struct ldb_request 
*req,
        struct ldb_context *ldb;
        struct domain_data *data;
        struct ph_context *ac;
+       struct loadparm_context *lp_ctx;
        int ret;
-       char *tmp;
-       char *p;
 
        ac = talloc_get_type(req->context, struct ph_context);
        ldb = ldb_module_get_ctx(ac->module);
@@ -1591,43 +1590,13 @@ static int get_domain_data_callback(struct ldb_request 
*req,
                 * but that doesn't really matter, as it's just used for salt
                 * and kerberos principals, which don't exist here */
 
-               tmp = ldb_dn_canonical_string(data, ares->message->dn);
-               if (!tmp) {
-                       return ldb_module_done(ac->req, NULL, NULL,
-                                               LDB_ERR_OPERATIONS_ERROR);
-               }
+               lp_ctx = talloc_get_type(ldb_get_opaque(ldb, "loadparm"),
+                                        struct loadparm_context);
 
-               /* But it puts a trailing (or just before 'builtin') / on 
things, so kill that */
-               p = strchr(tmp, '/');
-               if (p) {
-                       p[0] = '\0';
-               }
-
-               data->dns_domain = strlower_talloc(data, tmp);
-               if (data->dns_domain == NULL) {
-                       ldb_oom(ldb);
-                       return ldb_module_done(ac->req, NULL, NULL,
-                                               LDB_ERR_OPERATIONS_ERROR);
-               }
-               data->realm = strupper_talloc(data, tmp);
-               if (data->realm == NULL) {
-                       ldb_oom(ldb);
-                       return ldb_module_done(ac->req, NULL, NULL,
-                                               LDB_ERR_OPERATIONS_ERROR);
-               }
-               /* FIXME: NetbIOS name is *always* the first domain component 
?? -SSS */
-               p = strchr(tmp, '.');
-               if (p) {
-                       p[0] = '\0';
-               }
-               data->netbios_domain = strupper_talloc(data, tmp);
-               if (data->netbios_domain == NULL) {
-                       ldb_oom(ldb);
-                       return ldb_module_done(ac->req, NULL, NULL,
-                                               LDB_ERR_OPERATIONS_ERROR);
-               }
+               data->dns_domain = lp_dnsdomain(lp_ctx);
+               data->realm = lp_realm(lp_ctx);
+               data->netbios_domain = lp_workgroup(lp_ctx);
 
-               talloc_free(tmp);
                ac->domain = data;
                break;
 
@@ -1673,7 +1642,7 @@ static int build_domain_data_request(struct ph_context 
*ac)
        ldb = ldb_module_get_ctx(ac->module);
 
        filter = talloc_asprintf(ac,
-                               
"(&(objectSid=%s)(|(objectClass=domain)(objectClass=builtinDomain)))",
+                                "(objectSid=%s)",
                                 ldap_encode_ndr_dom_sid(ac, ac->domain_sid));
        if (filter == NULL) {
                ldb_oom(ldb);
@@ -1682,7 +1651,7 @@ static int build_domain_data_request(struct ph_context 
*ac)
 
        return ldb_build_search_req(&ac->dom_req, ldb, ac,
                                    ldb_get_default_basedn(ldb),
-                                   LDB_SCOPE_SUBTREE,
+                                   LDB_SCOPE_BASE,
                                    filter, attrs,
                                    NULL,
                                    ac, get_domain_data_callback,
diff --git a/source4/kdc/kdc.c b/source4/kdc/kdc.c
index a67aa09..1260e90 100644
--- a/source4/kdc/kdc.c
+++ b/source4/kdc/kdc.c
@@ -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);
 
diff --git a/source4/lib/tls/tls.c b/source4/lib/tls/tls.c
index ba2e9e4..470b555 100644
--- a/source4/lib/tls/tls.c
+++ b/source4/lib/tls/tls.c
@@ -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;
                }
diff --git a/source4/libcli/ldap/ldap_client.c 
b/source4/libcli/ldap/ldap_client.c
index 3c78a7c..eb53276 100644
--- a/source4/libcli/ldap/ldap_client.c
+++ b/source4/libcli/ldap/ldap_client.c
@@ -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;
                }
diff --git a/source4/ntptr/simple_ldb/ntptr_simple_ldb.c 
b/source4/ntptr/simple_ldb/ntptr_simple_ldb.c
index 601f790..e179f52 100644
--- a/source4/ntptr/simple_ldb/ntptr_simple_ldb.c
+++ b/source4/ntptr/simple_ldb/ntptr_simple_ldb.c
@@ -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;
        }
diff --git a/source4/param/loadparm.c b/source4/param/loadparm.c
index f7cd95b..882de13 100644
--- a/source4/param/loadparm.c
+++ b/source4/param/loadparm.c
@@ -103,6 +103,8 @@ struct loadparm_global
        const char **szPasswordServers;
        char *szSocketOptions;
        char *szRealm;
+       char *szRealm_upper;
+       char *szRealm_lower;
        const char **szWINSservers;
        const char **szInterfaces;
        char *szSocketAddress;
@@ -234,6 +236,8 @@ struct loadparm_service
 /* prototypes for the special type handlers */
 static bool handle_include(struct loadparm_context *lp_ctx,
                           const char *pszParmValue, char **ptr);
+static bool handle_realm(struct loadparm_context *lp_ctx,
+                        const char *pszParmValue, char **ptr);
 static bool handle_copy(struct loadparm_context *lp_ctx,
                        const char *pszParmValue, char **ptr);
 static bool handle_debuglevel(struct loadparm_context *lp_ctx,
@@ -339,7 +343,7 @@ static struct parm_struct parm_table[] = {
        {"path", P_STRING, P_LOCAL, LOCAL_VAR(szPath), NULL, NULL},
        {"directory", P_STRING, P_LOCAL, LOCAL_VAR(szPath), NULL, NULL},
        {"workgroup", P_USTRING, P_GLOBAL, GLOBAL_VAR(szWorkgroup), NULL, NULL},
-       {"realm", P_STRING, P_GLOBAL, GLOBAL_VAR(szRealm), NULL, NULL},
+       {"realm", P_STRING, P_GLOBAL, GLOBAL_VAR(szRealm), handle_realm, NULL},
        {"netbios name", P_USTRING, P_GLOBAL, GLOBAL_VAR(szNetbiosName), NULL, 
NULL},
        {"netbios aliases", P_LIST, P_GLOBAL, GLOBAL_VAR(szNetbiosAliases), 
NULL, NULL},
        {"netbios scope", P_USTRING, P_GLOBAL, GLOBAL_VAR(szNetbiosScope), 
NULL, NULL},
@@ -648,7 +652,8 @@ _PUBLIC_ FN_GLOBAL_STRING(lp_auto_services, szAutoServices)
 _PUBLIC_ FN_GLOBAL_STRING(lp_passwd_chat, szPasswdChat)
 _PUBLIC_ FN_GLOBAL_LIST(lp_passwordserver, szPasswordServers)
 _PUBLIC_ FN_GLOBAL_LIST(lp_name_resolve_order, szNameResolveOrder)
-_PUBLIC_ FN_GLOBAL_STRING(lp_realm, szRealm)
+_PUBLIC_ FN_GLOBAL_STRING(lp_realm, szRealm_upper)
+_PUBLIC_ FN_GLOBAL_STRING(lp_dnsdomain, szRealm_lower)
 _PUBLIC_ FN_GLOBAL_STRING(lp_socket_options, socket_options)
 _PUBLIC_ FN_GLOBAL_STRING(lp_workgroup, szWorkgroup)
 _PUBLIC_ FN_GLOBAL_STRING(lp_netbios_name, szNetbiosName)
@@ -657,7 +662,6 @@ _PUBLIC_ FN_GLOBAL_LIST(lp_wins_server_list, szWINSservers)
 _PUBLIC_ FN_GLOBAL_LIST(lp_interfaces, szInterfaces)
 _PUBLIC_ FN_GLOBAL_STRING(lp_socket_address, szSocketAddress)
 _PUBLIC_ FN_GLOBAL_LIST(lp_netbios_aliases, szNetbiosAliases)
-
 _PUBLIC_ FN_GLOBAL_BOOL(lp_disable_netbios, bDisableNetbios)
 _PUBLIC_ FN_GLOBAL_BOOL(lp_wins_support, bWINSsupport)
 _PUBLIC_ FN_GLOBAL_BOOL(lp_wins_dns_proxy, bWINSdnsProxy)
@@ -695,6 +699,7 @@ _PUBLIC_ FN_GLOBAL_INTEGER(lp_cli_minprotocol, 
cli_minprotocol)
 _PUBLIC_ FN_GLOBAL_INTEGER(lp_security, security)
 _PUBLIC_ FN_GLOBAL_BOOL(lp_paranoid_server_security, paranoid_server_security)
 _PUBLIC_ FN_GLOBAL_INTEGER(lp_announce_as, announce_as)
+
 const char *lp_servicename(const struct loadparm_service *service)
 {
        return lp_string((const char *)service->szService);
@@ -1448,6 +1453,21 @@ bool lp_file_list_changed(struct loadparm_context 
*lp_ctx)
 }
 
 /***************************************************************************
+ Handle the "realm" parameter
+***************************************************************************/
+
+static bool handle_realm(struct loadparm_context *lp_ctx,
+                        const char *pszParmValue, char **ptr)
+{
+       string_set(lp_ctx, ptr, pszParmValue);
+
+       lp_ctx->globals->szRealm_upper = strupper_talloc(lp_ctx, pszParmValue);
+       lp_ctx->globals->szRealm_lower = strlower_talloc(lp_ctx, pszParmValue);
+
+       return true;
+}
+
+/***************************************************************************
  Handle the include operation.
 ***************************************************************************/
 
diff --git a/source4/param/param.h b/source4/param/param.h
index 5c49f34..0c8e73e 100644
--- a/source4/param/param.h
+++ b/source4/param/param.h
@@ -115,6 +115,7 @@ const char *lp_passwd_chat(struct loadparm_context *);
 const char **lp_passwordserver(struct loadparm_context *);
 const char **lp_name_resolve_order(struct loadparm_context *);
 const char *lp_realm(struct loadparm_context *);
+const char *lp_dnsdomain(struct loadparm_context *);
 const char *lp_socket_options(struct loadparm_context *);
 const char *lp_workgroup(struct loadparm_context *);
 const char *lp_netbios_name(struct loadparm_context *);
diff --git a/source4/rpc_server/drsuapi/addentry.c 
b/source4/rpc_server/drsuapi/addentry.c
index 2c913dd..dbaf627 100644
--- a/source4/rpc_server/drsuapi/addentry.c
+++ b/source4/rpc_server/drsuapi/addentry.c
@@ -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
diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c 
b/source4/rpc_server/netlogon/dcerpc_netlogon.c
index 5eccd7f..f763069 100644
--- a/source4/rpc_server/netlogon/dcerpc_netlogon.c
+++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c
@@ -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", 
                                                         
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 | 
diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c 
b/source4/rpc_server/spoolss/dcesrv_spoolss.c
index d380b10..0e071dc 100644
--- a/source4/rpc_server/spoolss/dcesrv_spoolss.c
+++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c
@@ -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);
diff --git a/source4/torture/ldap/basic.c b/source4/torture/ldap/basic.c
index c2a26f8..a9d9ea0 100644
--- a/source4/torture/ldap/basic.c
+++ b/source4/torture/ldap/basic.c
@@ -213,7 +213,8 @@ static bool test_error_codes(struct torture_context *tctx,
 {
        struct ldap_message *msg, *rep;
        struct ldap_request *req;
-       char *err_code_str, *endptr;
+       const char *err_code_str;


-- 
Samba Shared Repository

Reply via email to