[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-1792-g6ef6538

Andrew Bartlett abartlet at samba.org
Tue May 26 02:39:37 GMT 2009


The branch, master has been updated
       via  6ef65389fd2f2bdcafe840e0cd0221bb9f26bdfc (commit)
       via  86039855759ce38e6074f956073199b0ccd29bdf (commit)
      from  714acfac013a46c3677c3eb72ad57db6d97c7d61 (commit)

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


- Log -----------------------------------------------------------------
commit 6ef65389fd2f2bdcafe840e0cd0221bb9f26bdfc
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue May 26 12:31:39 2009 +1000

    Don't use crossRef records to find our own domain
    
    A single AD server can only host a single domain, so don't stuff about
    with looking up our crossRef record in the cn=Partitions container.
    We instead trust that lp_realm() and lp_workgroup() works correctly.
    
    Andrew Bartlett

commit 86039855759ce38e6074f956073199b0ccd29bdf
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue May 26 11:43:37 2009 +1000

    Add support for sendmsg() in socket_wrapper
    
    This is required because the deferred connect code skips the connect()
    until sending the packet, but unless we catch this call, the connect()
    never happens.
    
    Andrew Bartlett

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

Summary of changes:
 lib/socket_wrapper/socket_wrapper.c           |   71 +++++++++
 lib/socket_wrapper/socket_wrapper.h           |    6 +
 source4/auth/auth.h                           |    8 +-
 source4/auth/ntlm/auth_sam.c                  |  144 +++--------------
 source4/auth/sam.c                            |   49 ++----
 source4/cldap_server/netlogon.c               |  116 +++------------
 source4/kdc/config.mk                         |    4 +-
 source4/kdc/hdb-samba4.c                      |  207 ++++++++----------------
 source4/kdc/kdc.h                             |    4 +-
 source4/kdc/pac-glue.c                        |   10 +-
 source4/nbt_server/dgram/netlogon.c           |   21 +--
 source4/param/loadparm.c                      |    1 +
 source4/param/param.h                         |    5 +
 source4/param/util.c                          |   17 ++
 source4/rpc_server/config.mk                  |    3 +-
 source4/rpc_server/lsa/lsa_init.c             |   69 ++-------
 source4/rpc_server/netlogon/dcerpc_netlogon.c |   82 ++++------
 source4/rpc_server/samr/dcesrv_samr.c         |  128 ++++-----------
 18 files changed, 330 insertions(+), 615 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/socket_wrapper/socket_wrapper.c b/lib/socket_wrapper/socket_wrapper.c
index d809d8a..bd848f9 100644
--- a/lib/socket_wrapper/socket_wrapper.c
+++ b/lib/socket_wrapper/socket_wrapper.c
@@ -118,6 +118,7 @@
 #define real_setsockopt setsockopt
 #define real_recvfrom recvfrom
 #define real_sendto sendto
+#define real_sendmsg sendmsg
 #define real_ioctl ioctl
 #define real_recv recv
 #define real_send send
@@ -2064,6 +2065,76 @@ _PUBLIC_ ssize_t swrap_send(int s, const void *buf, size_t len, int flags)
 	return ret;
 }
 
+_PUBLIC_ ssize_t swrap_sendmsg(int s, const struct msghdr *msg, int flags)
+{
+	int ret;
+	uint8_t *buf;
+	off_t ofs = 0;
+	size_t i;
+	size_t remain;
+	
+	struct socket_info *si = find_socket_info(s);
+
+	if (!si) {
+		return real_sendmsg(s, msg, flags);
+	}
+
+	if (si->defer_connect) {
+		struct sockaddr_un un_addr;
+		int bcast = 0;
+
+		if (si->bound == 0) {
+			ret = swrap_auto_bind(si, si->family);
+			if (ret == -1) return -1;
+		}
+
+		ret = sockaddr_convert_to_un(si, si->peername, si->peername_len,
+					     &un_addr, 0, &bcast);
+		if (ret == -1) return -1;
+
+		ret = real_connect(s, (struct sockaddr *)&un_addr,
+				   sizeof(un_addr));
+
+		/* to give better errors */
+		if (ret == -1 && errno == ENOENT) {
+			errno = EHOSTUNREACH;
+		}
+
+		if (ret == -1) {
+			return ret;
+		}
+		si->defer_connect = 0;
+	}
+
+	ret = real_sendmsg(s, msg, flags);
+	remain = ret;
+		
+	/* we capture it as one single packet */
+	buf = (uint8_t *)malloc(ret);
+	if (!buf) {
+		/* we just not capture the packet */
+		errno = 0;
+		return ret;
+	}
+	
+	for (i=0; i < msg->msg_iovlen; i++) {
+		size_t this_time = MIN(remain, msg->msg_iov[i].iov_len);
+		memcpy(buf + ofs,
+		       msg->msg_iov[i].iov_base,
+		       this_time);
+		ofs += this_time;
+		remain -= this_time;
+	}
+	
+	swrap_dump_packet(si, NULL, SWRAP_SEND, buf, ret);
+	free(buf);
+	if (ret == -1) {
+		swrap_dump_packet(si, NULL, SWRAP_SEND_RST, NULL, 0);
+	}
+
+	return ret;
+}
+
 int swrap_readv(int s, const struct iovec *vector, size_t count)
 {
 	int ret;
diff --git a/lib/socket_wrapper/socket_wrapper.h b/lib/socket_wrapper/socket_wrapper.h
index b2d4476..56282e2 100644
--- a/lib/socket_wrapper/socket_wrapper.h
+++ b/lib/socket_wrapper/socket_wrapper.h
@@ -49,6 +49,7 @@ int swrap_getsockopt(int s, int level, int optname, void *optval, socklen_t *opt
 int swrap_setsockopt(int s, int  level,  int  optname,  const  void  *optval, socklen_t optlen);
 ssize_t swrap_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
 ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
+ssize_t swrap_sendmsg(int s, const struct msghdr *msg, int flags);
 int swrap_ioctl(int s, int req, void *ptr);
 ssize_t swrap_recv(int s, void *buf, size_t len, int flags);
 ssize_t swrap_send(int s, const void *buf, size_t len, int flags);
@@ -108,6 +109,11 @@ int swrap_close(int);
 #endif
 #define sendto(s,buf,len,flags,to,tolen)          swrap_sendto(s,buf,len,flags,to,tolen)
 
+#ifdef sendmsg
+#undef sendmsg
+#endif
+#define sendmsg(s,msg,flags)            swrap_sendmsg(s,msg,flags)
+
 #ifdef ioctl
 #undef ioctl
 #endif
diff --git a/source4/auth/auth.h b/source4/auth/auth.h
index 973102d..f6d7393 100644
--- a/source4/auth/auth.h
+++ b/source4/auth/auth.h
@@ -221,24 +221,26 @@ struct auth_critical_sizes {
 
 struct ldb_message;
 struct ldb_context;
+struct ldb_dn;
 struct gensec_security;
 
 NTSTATUS auth_get_challenge(struct auth_context *auth_ctx, const uint8_t **_chal);
 NTSTATUS authsam_account_ok(TALLOC_CTX *mem_ctx,
 			    struct ldb_context *sam_ctx,
 			    uint32_t logon_parameters,
+			    struct ldb_dn *domain_dn,
 			    struct ldb_message *msg,
-			    struct ldb_message *msg_domain_ref,
 			    const char *logon_workstation,
 			    const char *name_for_logs,
 			    bool allow_domain_trust);
 struct auth_session_info *system_session(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx);
 NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, struct ldb_context *sam_ctx,
 					   const char *netbios_name,
+					   const char *domain_name,
+					   struct ldb_dn *domain_dn, 
 					   struct ldb_message *msg,
-					   struct ldb_message *msg_domain_ref,
 					   DATA_BLOB user_sess_key, DATA_BLOB lm_sess_key,
-					   struct auth_serversupplied_info **_server_info);
+				  struct auth_serversupplied_info **_server_info);
 NTSTATUS auth_system_session_info(TALLOC_CTX *parent_ctx, 
 					   struct loadparm_context *lp_ctx,
 					   struct auth_session_info **_session_info) ;
diff --git a/source4/auth/ntlm/auth_sam.c b/source4/auth/ntlm/auth_sam.c
index e99d0e1..75ed324 100644
--- a/source4/auth/ntlm/auth_sam.c
+++ b/source4/auth/ntlm/auth_sam.c
@@ -42,26 +42,12 @@ extern const char *domain_ref_attrs[];
 
 static NTSTATUS authsam_search_account(TALLOC_CTX *mem_ctx, struct ldb_context *sam_ctx,
 				       const char *account_name,
-				       const char *domain_name,
-				       struct ldb_message ***ret_msgs,
-				       struct ldb_message ***ret_msgs_domain_ref)
+				       struct ldb_dn *domain_dn,
+				       struct ldb_message ***ret_msgs)
 {
-	struct ldb_message **msgs_tmp;
 	struct ldb_message **msgs;
-	struct ldb_message **msgs_domain_ref;
-	struct ldb_dn *partitions_basedn = samdb_partitions_dn(sam_ctx, mem_ctx);
 
 	int ret;
-	int ret_domain;
-
-	struct ldb_dn *domain_dn = NULL;
-
-	if (domain_name) {
-		domain_dn = samdb_domain_to_dn(sam_ctx, mem_ctx, domain_name);
-		if (!domain_dn) {
-			return NT_STATUS_INTERNAL_DB_CORRUPTION;
-		}
-	}
 
 	/* pull the user attributes */
 	ret = gendb_search(sam_ctx, mem_ctx, domain_dn, &msgs, user_attrs,
@@ -72,8 +58,8 @@ static NTSTATUS authsam_search_account(TALLOC_CTX *mem_ctx, struct ldb_context *
 	}
 
 	if (ret == 0) {
-		DEBUG(3,("sam_search_user: Couldn't find user [%s\\%s] in samdb, under %s\n", 
-			 domain_name, account_name, ldb_dn_get_linearized(domain_dn)));
+		DEBUG(3,("sam_search_user: Couldn't find user [%s] in samdb, under %s\n", 
+			 account_name, ldb_dn_get_linearized(domain_dn)));
 		return NT_STATUS_NO_SUCH_USER;
 	}
 
@@ -82,57 +68,7 @@ static NTSTATUS authsam_search_account(TALLOC_CTX *mem_ctx, struct ldb_context *
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
 
-	if (!domain_dn) {
-		struct dom_sid *domain_sid;
-
-		domain_sid = samdb_result_sid_prefix(mem_ctx, msgs[0], "objectSid");
-		if (!domain_sid) {
-			return NT_STATUS_INTERNAL_DB_CORRUPTION;
-		}
-
-		/* find the domain's DN */
-		ret = gendb_search(sam_ctx, mem_ctx, NULL, &msgs_tmp, NULL,
-				   "(&(objectSid=%s)(objectClass=domain))", 
-				   ldap_encode_ndr_dom_sid(mem_ctx, domain_sid));
-		if (ret == -1) {
-			return NT_STATUS_INTERNAL_DB_CORRUPTION;
-		}
-		
-		if (ret == 0) {
-			DEBUG(3,("check_sam_security: Couldn't find domain_sid [%s] in passdb file.\n",
-				 dom_sid_string(mem_ctx, domain_sid)));
-			return NT_STATUS_NO_SUCH_USER;
-		}
-		
-		if (ret > 1) {
-			DEBUG(0,("Found %d records matching domain_sid [%s]\n", 
-				 ret, dom_sid_string(mem_ctx, domain_sid)));
-			return NT_STATUS_INTERNAL_DB_CORRUPTION;
-		}
-
-		domain_dn = msgs_tmp[0]->dn;
-	}
-
-	ret_domain = gendb_search(sam_ctx, mem_ctx, partitions_basedn, &msgs_domain_ref, domain_ref_attrs,
-				  "(nCName=%s)", ldb_dn_get_linearized(domain_dn));
-	if (ret_domain == -1) {
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-		
-	if (ret_domain == 0) {
-		DEBUG(3,("check_sam_security: Couldn't find domain [%s] in passdb file.\n",
-			 ldb_dn_get_linearized(msgs_tmp[0]->dn)));
-		return NT_STATUS_NO_SUCH_USER;
-	}
-		
-	if (ret_domain > 1) {
-		DEBUG(0,("Found %d records matching domain [%s]\n", 
-			 ret_domain, ldb_dn_get_linearized(msgs_tmp[0]->dn)));
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
-
 	*ret_msgs = msgs;
-	*ret_msgs_domain_ref = msgs_domain_ref;
 	
 	return NT_STATUS_OK;
 }
@@ -210,14 +146,13 @@ static NTSTATUS authsam_password_ok(struct auth_context *auth_context,
 
 static NTSTATUS authsam_authenticate(struct auth_context *auth_context, 
 				     TALLOC_CTX *mem_ctx, struct ldb_context *sam_ctx, 
+				     struct ldb_dn *domain_dn,
 				     struct ldb_message **msgs,
-				     struct ldb_message **msgs_domain_ref,
 				     const struct auth_usersupplied_info *user_info, 
 				     DATA_BLOB *user_sess_key, DATA_BLOB *lm_sess_key) 
 {
 	struct samr_Password *lm_pwd, *nt_pwd;
 	NTSTATUS nt_status;
-	struct ldb_dn *domain_dn = samdb_result_dn(sam_ctx, mem_ctx, msgs_domain_ref[0], "nCName", NULL);
 
 	uint16_t acct_flags = samdb_result_acct_flags(sam_ctx, mem_ctx, msgs[0], domain_dn);
 	
@@ -245,8 +180,8 @@ static NTSTATUS authsam_authenticate(struct auth_context *auth_context,
 
 	nt_status = authsam_account_ok(mem_ctx, sam_ctx, 
 				       user_info->logon_parameters,
+				       domain_dn,
 				       msgs[0],
-				       msgs_domain_ref[0],
 				       user_info->workstation_name,
 				       user_info->mapped.account_name,
 				       false);
@@ -258,15 +193,14 @@ static NTSTATUS authsam_authenticate(struct auth_context *auth_context,
 
 static NTSTATUS authsam_check_password_internals(struct auth_method_context *ctx,
 						 TALLOC_CTX *mem_ctx,
-						 const char *domain,
 						 const struct auth_usersupplied_info *user_info, 
 						 struct auth_serversupplied_info **server_info)
 {
 	NTSTATUS nt_status;
 	const char *account_name = user_info->mapped.account_name;
 	struct ldb_message **msgs;
-	struct ldb_message **domain_ref_msgs;
 	struct ldb_context *sam_ctx;
+	struct ldb_dn *domain_dn;
 	DATA_BLOB user_sess_key, lm_sess_key;
 	TALLOC_CTX *tmp_ctx;
 
@@ -286,13 +220,19 @@ static NTSTATUS authsam_check_password_internals(struct auth_method_context *ctx
 		return NT_STATUS_INVALID_SYSTEM_SERVICE;
 	}
 
-	nt_status = authsam_search_account(tmp_ctx, sam_ctx, account_name, domain, &msgs, &domain_ref_msgs);
+	domain_dn = ldb_get_default_basedn(sam_ctx);
+	if (domain_dn == NULL) {
+		talloc_free(tmp_ctx);
+		return NT_STATUS_NO_SUCH_DOMAIN;
+	}
+
+	nt_status = authsam_search_account(tmp_ctx, sam_ctx, account_name, domain_dn, &msgs);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		talloc_free(tmp_ctx);
 		return nt_status;
 	}
 
-	nt_status = authsam_authenticate(ctx->auth_ctx, tmp_ctx, sam_ctx, msgs, domain_ref_msgs, user_info,
+	nt_status = authsam_authenticate(ctx->auth_ctx, tmp_ctx, sam_ctx, domain_dn, msgs, user_info,
 					 &user_sess_key, &lm_sess_key);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		talloc_free(tmp_ctx);
@@ -300,7 +240,9 @@ static NTSTATUS authsam_check_password_internals(struct auth_method_context *ctx
 	}
 
 	nt_status = authsam_make_server_info(tmp_ctx, sam_ctx, lp_netbios_name(ctx->auth_ctx->lp_ctx), 
-					     msgs[0], domain_ref_msgs[0],
+ 					     lp_sam_name(ctx->auth_ctx->lp_ctx),
+					     domain_dn,
+					     msgs[0],
 					     user_sess_key, lm_sess_key,
 					     server_info);
 	if (!NT_STATUS_IS_OK(nt_status)) {
@@ -325,14 +267,6 @@ static NTSTATUS authsam_ignoredomain_want_check(struct auth_method_context *ctx,
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS authsam_ignoredomain_check_password(struct auth_method_context *ctx,
-						    TALLOC_CTX *mem_ctx,
-						    const struct auth_usersupplied_info *user_info, 
-						    struct auth_serversupplied_info **server_info)
-{
-	return authsam_check_password_internals(ctx, mem_ctx, NULL, user_info, server_info);
-}
-
 /****************************************************************************
 Check SAM security (above) but with a few extra checks.
 ****************************************************************************/
@@ -377,34 +311,6 @@ static NTSTATUS authsam_want_check(struct auth_method_context *ctx,
 	return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-/****************************************************************************
-Check SAM security (above) but with a few extra checks.
-****************************************************************************/
-static NTSTATUS authsam_check_password(struct auth_method_context *ctx,
-				       TALLOC_CTX *mem_ctx,
-				       const struct auth_usersupplied_info *user_info, 
-				       struct auth_serversupplied_info **server_info)
-{
-	const char *domain;
-
-	/* check whether or not we service this domain/workgroup name */
-	switch (lp_server_role(ctx->auth_ctx->lp_ctx)) {
-		case ROLE_STANDALONE:
-		case ROLE_DOMAIN_MEMBER:
-			domain = lp_netbios_name(ctx->auth_ctx->lp_ctx);
-			break;
-
-		case ROLE_DOMAIN_CONTROLLER:
-			domain = lp_workgroup(ctx->auth_ctx->lp_ctx);
-			break;
-
-		default:
-			return NT_STATUS_NO_SUCH_USER;
-	}
-
-	return authsam_check_password_internals(ctx, mem_ctx, domain, user_info, server_info);
-}
-
 				   
 /* Used in the gensec_gssapi and gensec_krb5 server-side code, where the PAC isn't available */
 NTSTATUS authsam_get_server_info_principal(TALLOC_CTX *mem_ctx, 
@@ -417,9 +323,9 @@ NTSTATUS authsam_get_server_info_principal(TALLOC_CTX *mem_ctx,
 	DATA_BLOB lm_sess_key = data_blob(NULL, 0);
 
 	struct ldb_message **msgs;
-	struct ldb_message **msgs_domain_ref;
 	struct ldb_context *sam_ctx;
-
+	struct ldb_dn *domain_dn;
+	
 	TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
 	if (!tmp_ctx) {
 		return NT_STATUS_NO_MEMORY;
@@ -433,14 +339,16 @@ NTSTATUS authsam_get_server_info_principal(TALLOC_CTX *mem_ctx,
 	}
 
 	nt_status = sam_get_results_principal(sam_ctx, tmp_ctx, principal, 
-					      &msgs, &msgs_domain_ref);
+					      &domain_dn, &msgs);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		return nt_status;
 	}
 
 	nt_status = authsam_make_server_info(tmp_ctx, sam_ctx, 
 					     lp_netbios_name(auth_context->lp_ctx),
-					     msgs[0], msgs_domain_ref[0],
+ 					     lp_workgroup(auth_context->lp_ctx),
+					     domain_dn, 
+					     msgs[0],
 					     user_sess_key, lm_sess_key,
 					     server_info);
 	if (NT_STATUS_IS_OK(nt_status)) {
@@ -454,7 +362,7 @@ static const struct auth_operations sam_ignoredomain_ops = {
 	.name		           = "sam_ignoredomain",
 	.get_challenge	           = auth_get_challenge_not_implemented,
 	.want_check	           = authsam_ignoredomain_want_check,
-	.check_password	           = authsam_ignoredomain_check_password,
+	.check_password	           = authsam_check_password_internals,
 	.get_server_info_principal = authsam_get_server_info_principal
 };
 
@@ -462,7 +370,7 @@ static const struct auth_operations sam_ops = {
 	.name		           = "sam",
 	.get_challenge	           = auth_get_challenge_not_implemented,
 	.want_check	           = authsam_want_check,
-	.check_password	           = authsam_check_password,
+	.check_password	           = authsam_check_password_internals,
 	.get_server_info_principal = authsam_get_server_info_principal
 };
 
diff --git a/source4/auth/sam.c b/source4/auth/sam.c
index 819bca0..ebdf193 100644
--- a/source4/auth/sam.c
+++ b/source4/auth/sam.c
@@ -139,21 +139,19 @@ static bool logon_hours_ok(struct ldb_message *msg, const char *name_for_logs)
  (ie not disabled, expired and the like).
 ****************************************************************************/
 _PUBLIC_ NTSTATUS authsam_account_ok(TALLOC_CTX *mem_ctx,
-			    struct ldb_context *sam_ctx,
-			    uint32_t logon_parameters,
-			    struct ldb_message *msg,
-			    struct ldb_message *msg_domain_ref,
-			    const char *logon_workstation,
-			    const char *name_for_logs,
-			    bool allow_domain_trust)
+				     struct ldb_context *sam_ctx,
+				     uint32_t logon_parameters,
+				     struct ldb_dn *domain_dn,
+				     struct ldb_message *msg,
+				     const char *logon_workstation,
+				     const char *name_for_logs,
+				     bool allow_domain_trust)
 {
 	uint16_t acct_flags;
 	const char *workstation_list;
 	NTTIME acct_expiry;
 	NTTIME must_change_time;
 
-	struct ldb_dn *domain_dn = samdb_result_dn(sam_ctx, mem_ctx, msg_domain_ref, "nCName", ldb_dn_new(mem_ctx, sam_ctx, NULL));
-
 	NTTIME now;
 	DEBUG(4,("authsam_account_ok: Checking SMB password for user %s\n", name_for_logs));
 
@@ -256,8 +254,9 @@ _PUBLIC_ NTSTATUS authsam_account_ok(TALLOC_CTX *mem_ctx,
 
 _PUBLIC_ NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, struct ldb_context *sam_ctx,
 					   const char *netbios_name,
+					   const char *domain_name,
+					   struct ldb_dn *domain_dn, 
 					   struct ldb_message *msg,
-					   struct ldb_message *msg_domain_ref,
 					   DATA_BLOB user_sess_key, DATA_BLOB lm_sess_key,
 					   struct auth_serversupplied_info **_server_info)
 {
@@ -269,7 +268,6 @@ _PUBLIC_ NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, struct ldb_conte
 	struct dom_sid **groupSIDs = NULL;
 	struct dom_sid *account_sid;
 	struct dom_sid *primary_group_sid;
-	struct ldb_dn *domain_dn;
 	const char *str;
 	struct ldb_dn *ncname;
 	int i;
@@ -327,7 +325,8 @@ _PUBLIC_ NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, struct ldb_conte
 
 	server_info->account_name = talloc_steal(server_info, samdb_result_string(msg, "sAMAccountName", NULL));
 
-	server_info->domain_name = talloc_steal(server_info, samdb_result_string(msg_domain_ref, "nETBIOSName", NULL));
+	server_info->domain_name = talloc_strdup(server_info, domain_name);
+	NT_STATUS_HAVE_NO_MEMORY(server_info->domain_name);
 
 	str = samdb_result_string(msg, "displayName", "");
 	server_info->full_name = talloc_strdup(server_info, str);
@@ -357,10 +356,6 @@ _PUBLIC_ NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, struct ldb_conte
 	server_info->acct_expiry = samdb_result_account_expires(msg);
 	server_info->last_password_change = samdb_result_nttime(msg, "pwdLastSet", 0);
 
-	ncname = samdb_result_dn(sam_ctx, mem_ctx, msg_domain_ref, "nCName", NULL);
-	if (!ncname) {
-		return NT_STATUS_INTERNAL_DB_CORRUPTION;
-	}
 	server_info->allow_password_change
 		= samdb_result_allow_password_change(sam_ctx, mem_ctx, 
 						     ncname, msg, "pwdLastSet");
@@ -371,8 +366,6 @@ _PUBLIC_ NTSTATUS authsam_make_server_info(TALLOC_CTX *mem_ctx, struct ldb_conte
 	server_info->logon_count = samdb_result_uint(msg, "logonCount", 0);
 	server_info->bad_password_count = samdb_result_uint(msg, "badPwdCount", 0);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list