[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha5-198-gc01fee8

Stefan Metzmacher metze at samba.org
Fri Aug 1 14:11:47 GMT 2008


The branch, v4-0-test has been updated
       via  c01fee80a79cd9e0f7bb295333bb03bd37328d05 (commit)
       via  699e3cdb52acdf2524347d8c053730306c579dd9 (commit)
       via  c2cc8ef943e8c2e02edb1eb20214de245cc6914c (commit)
       via  afd07073b9caa4b5f7d2ad747e79afaec4203506 (commit)
      from  816bb64a56a75d1eb5e879b4abf211af27243686 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit c01fee80a79cd9e0f7bb295333bb03bd37328d05
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Aug 1 16:10:06 2008 +0200

    auth/ntlmssp: don't crash when the backend give no challenge
    
    metze

commit 699e3cdb52acdf2524347d8c053730306c579dd9
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Aug 1 15:53:01 2008 +0200

    auth_server: fix the logic of server_get_challenge()
    
    metze

commit c2cc8ef943e8c2e02edb1eb20214de245cc6914c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Aug 1 15:19:27 2008 +0200

    auth_server: fix segfault reported by Julien Kerihuel <j.kerihuel at openchange.org>
    
    metze

commit afd07073b9caa4b5f7d2ad747e79afaec4203506
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Aug 1 09:20:46 2008 +0200

    Revert "Start implementind domain trusts in our KDC."
    
    This reverts commit 736ce50afd9da9b5fbc3db777fd5341dfa4b721a.
    
    This breaks the build...
    
    metze

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

Summary of changes:
 source/auth/ntlm/auth_server.c       |   10 ++++----
 source/auth/ntlmssp/ntlmssp_server.c |    6 +++++
 source/kdc/hdb-ldb.c                 |   40 ++++++----------------------------
 3 files changed, 18 insertions(+), 38 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/auth/ntlm/auth_server.c b/source/auth/ntlm/auth_server.c
index f154cf0..42606c1 100644
--- a/source/auth/ntlm/auth_server.c
+++ b/source/auth/ntlm/auth_server.c
@@ -70,7 +70,7 @@ static NTSTATUS server_get_challenge(struct auth_method_context *ctx, TALLOC_CTX
 	io.in.called_name = strupper_talloc(mem_ctx, io.in.dest_host);
 
 	/* We don't want to get as far as the session setup */
-	io.in.credentials = NULL;
+	io.in.credentials = cli_credentials_init_anon(mem_ctx);
 	io.in.service = NULL;
 
 	io.in.workgroup = ""; /* only used with SPNEGO, disabled above */
@@ -79,10 +79,10 @@ static NTSTATUS server_get_challenge(struct auth_method_context *ctx, TALLOC_CTX
 
 	status = smb_composite_connect(&io, mem_ctx, lp_resolve_context(ctx->auth_ctx->lp_ctx),
 				       ctx->auth_ctx->event_ctx);
-	if (!NT_STATUS_IS_OK(status)) {
-		*_blob = io.out.tree->session->transport->negotiate.secblob;
-		ctx->private_data = talloc_steal(ctx, io.out.tree->session);
-	}
+	NT_STATUS_NOT_OK_RETURN(status);
+
+	*_blob = io.out.tree->session->transport->negotiate.secblob;
+	ctx->private_data = talloc_steal(ctx, io.out.tree->session);
 	return NT_STATUS_OK;
 }
 
diff --git a/source/auth/ntlmssp/ntlmssp_server.c b/source/auth/ntlmssp/ntlmssp_server.c
index dfc5940..838596e 100644
--- a/source/auth/ntlmssp/ntlmssp_server.c
+++ b/source/auth/ntlmssp/ntlmssp_server.c
@@ -157,6 +157,10 @@ NTSTATUS ntlmssp_server_negotiate(struct gensec_security *gensec_security,
 
 	/* Ask our caller what challenge they would like in the packet */
 	cryptkey = gensec_ntlmssp_state->get_challenge(gensec_ntlmssp_state);
+	if (!cryptkey) {
+		DEBUG(1, ("ntlmssp_server_negotiate: backend doesn't give a challenge\n"));
+		return NT_STATUS_INTERNAL_ERROR;
+	}
 
 	/* Check if we may set the challenge */
 	if (!gensec_ntlmssp_state->may_set_challenge(gensec_ntlmssp_state)) {
@@ -614,6 +618,8 @@ static const uint8_t *auth_ntlmssp_get_challenge(const struct gensec_ntlmssp_sta
 
 	status = auth_get_challenge(gensec_ntlmssp_state->auth_context, &chal);
 	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("auth_ntlmssp_get_challenge: failed to get challenge: %s\n",
+			nt_errstr(status)));
 		return NULL;
 	}
 
diff --git a/source/kdc/hdb-ldb.c b/source/kdc/hdb-ldb.c
index a997eb0..8f8ce30 100644
--- a/source/kdc/hdb-ldb.c
+++ b/source/kdc/hdb-ldb.c
@@ -853,8 +853,7 @@ static krb5_error_code LDB_fetch_krbtgt(krb5_context context, HDB *db,
 {
 	krb5_error_code ret;
 	struct ldb_message **msg = NULL;
-	struct ldb_message **realm_ref_msg_1 = NULL;
-	struct ldb_message **realm_ref_msg_2 = NULL;
+	struct ldb_message **realm_ref_msg = NULL;
 	struct ldb_dn *realm_dn;
 
 	krb5_principal alloc_principal = NULL;
@@ -865,18 +864,14 @@ static krb5_error_code LDB_fetch_krbtgt(krb5_context context, HDB *db,
 	}
 
 	/* krbtgt case.  Either us or a trusted realm */
-
 	if ((LDB_lookup_realm(context, (struct ldb_context *)db->hdb_db,
-			      mem_ctx, principal->realm, &realm_ref_msg_1) == 0)
-	    && (LDB_lookup_realm(context, (struct ldb_context *)db->hdb_db,
-				 mem_ctx, principal->name.name_string.val[1], &realm_ref_msg_2) == 0)
-	    && (ldb_dn_cmp(realm_ref_msg_1[0]->dn, realm_ref_msg_1[0]->dn) == 0)) {
+			      mem_ctx, principal->name.name_string.val[1], &realm_ref_msg) == 0)) {
 		/* us */		
  		/* Cludge, cludge cludge.  If the realm part of krbtgt/realm,
  		 * is in our db, then direct the caller at our primary
- 		 * krbtgt */
+ 		 * krgtgt */
  		
- 		const char *dnsdomain = ldb_msg_find_attr_as_string(realm_ref_msg_1[0], "dnsRoot", NULL);
+ 		const char *dnsdomain = ldb_msg_find_attr_as_string(realm_ref_msg[0], "dnsRoot", NULL);
  		char *realm_fixed = strupper_talloc(mem_ctx, dnsdomain);
  		if (!realm_fixed) {
  			krb5_set_error_string(context, "strupper_talloc: out of memory");
@@ -896,26 +891,8 @@ static krb5_error_code LDB_fetch_krbtgt(krb5_context context, HDB *db,
  			return ENOMEM;
  		}
  		principal = alloc_principal;
-		realm_dn = samdb_result_dn((struct ldb_context *)db->hdb_db, mem_ctx, realm_ref_msg_1[0], "nCName", NULL);
+		realm_dn = samdb_result_dn((struct ldb_context *)db->hdb_db, mem_ctx, realm_ref_msg[0], "nCName", NULL);
 	} else {
-		enum direction {
-			INBOUND,
-			OUTBOUND
-		}
-
-		struct loadparm_context *lp_ctx = talloc_get_type(ldb_get_opaque(ldb, "loadparm"), struct loadparm_context *);
-		/* Either an inbound or outbound trust */
-
-		if (strcasecmp(lp_realm(lp_ctx), principal->realm) == 0) {
-			/* look for inbound trust */
-		}
-
-		if (strcasecmp(lp_realm(lp_ctx), principal->name.name_string.val[1]) == 0) {
-			/* look for outbound trust */
-		}
-
-		/* Trusted domains are under CN=system */
-		
 		/* we should lookup trusted domains */
 		return HDB_ERR_NOENTRY;
 	}
@@ -1045,13 +1022,10 @@ static krb5_error_code LDB_fetch(krb5_context context, HDB *db,
 		if (ret != HDB_ERR_NOENTRY) goto done;
 	}
 	if (flags & HDB_F_GET_SERVER) {
-		/* krbtgt fits into this situation for trusted realms, and for resolving different versions of our own realm name */
-		ret = LDB_fetch_krbtgt(context, db, mem_ctx, principal, flags, entry_ex);
-		if (ret != HDB_ERR_NOENTRY) goto done;
-
-		/* We return 'no entry' if it does not start with krbtgt/, so move to the common case quickly */
 		ret = LDB_fetch_server(context, db, mem_ctx, principal, flags, entry_ex);
 		if (ret != HDB_ERR_NOENTRY) goto done;
+		ret = LDB_fetch_krbtgt(context, db, mem_ctx, principal, flags, entry_ex);
+		if (ret != HDB_ERR_NOENTRY) goto done;
 	}
 	if (flags & HDB_F_GET_KRBTGT) {
 		ret = LDB_fetch_krbtgt(context, db, mem_ctx, principal, flags, entry_ex);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list