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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> Date: Fri Aug 1 15:53:01 2008 +0200 auth_server: fix the logic of server_get_challenge() metze commit c2cc8ef943e8c2e02edb1eb20214de245cc6914c Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Aug 1 15:19:27 2008 +0200 auth_server: fix segfault reported by Julien Kerihuel <[EMAIL PROTECTED]> metze commit afd07073b9caa4b5f7d2ad747e79afaec4203506 Author: Stefan Metzmacher <[EMAIL PROTECTED]> 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