[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-527-g3accf9e

Günther Deschner gd at samba.org
Fri Feb 6 09:33:25 GMT 2009


The branch, master has been updated
       via  3accf9e80f52d4beba8fd4988d17e563e4e70325 (commit)
       via  4f6556d6c0c9b82770e14ce9002a90fd187e9b6c (commit)
       via  40227ef3bf42c048e321edec714bd2618bdc89c3 (commit)
      from  145fe37766cf1ecffb16a03b58b44d08f7ed7558 (commit)

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


- Log -----------------------------------------------------------------
commit 3accf9e80f52d4beba8fd4988d17e563e4e70325
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 5 02:08:40 2009 +0100

    s3: use pidl to pull a KRB5_EDATA_NTSTATUS.
    
    Guenther

commit 4f6556d6c0c9b82770e14ce9002a90fd187e9b6c
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 5 02:08:04 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 40227ef3bf42c048e321edec714bd2618bdc89c3
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 5 02:07:39 2009 +0100

    idl: add KRB5_EDATA_NTSTATUS to misc.idl.
    
    Guenther

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

Summary of changes:
 librpc/gen_ndr/misc.h     |    6 ++++++
 librpc/gen_ndr/ndr_misc.c |   36 ++++++++++++++++++++++++++++++++++++
 librpc/gen_ndr/ndr_misc.h |    3 +++
 librpc/idl/misc.idl       |    6 ++++++
 source3/include/ads.h     |    6 ------
 source3/libads/kerberos.c |   42 ++++++------------------------------------
 6 files changed, 57 insertions(+), 42 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/misc.h b/librpc/gen_ndr/misc.h
index de4abdc..e000cb0 100644
--- a/librpc/gen_ndr/misc.h
+++ b/librpc/gen_ndr/misc.h
@@ -42,4 +42,10 @@ enum netr_SchannelType
 #endif
 ;
 
+struct KRB5_EDATA_NTSTATUS {
+	NTSTATUS ntstatus;
+	uint32_t unknown1;
+	uint32_t unknown2;
+}/* [public] */;
+
 #endif /* _HEADER_misc */
diff --git a/librpc/gen_ndr/ndr_misc.c b/librpc/gen_ndr/ndr_misc.c
index 83c9772..28c8560 100644
--- a/librpc/gen_ndr/ndr_misc.c
+++ b/librpc/gen_ndr/ndr_misc.c
@@ -132,3 +132,39 @@ _PUBLIC_ void ndr_print_netr_SchannelType(struct ndr_print *ndr, const char *nam
 	ndr_print_enum(ndr, name, "ENUM", val, r);
 }
 
+_PUBLIC_ enum ndr_err_code ndr_push_KRB5_EDATA_NTSTATUS(struct ndr_push *ndr, int ndr_flags, const struct KRB5_EDATA_NTSTATUS *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_NTSTATUS(ndr, NDR_SCALARS, r->ntstatus));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_KRB5_EDATA_NTSTATUS(struct ndr_pull *ndr, int ndr_flags, struct KRB5_EDATA_NTSTATUS *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_NTSTATUS(ndr, NDR_SCALARS, &r->ntstatus));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_KRB5_EDATA_NTSTATUS(struct ndr_print *ndr, const char *name, const struct KRB5_EDATA_NTSTATUS *r)
+{
+	ndr_print_struct(ndr, name, "KRB5_EDATA_NTSTATUS");
+	ndr->depth++;
+	ndr_print_NTSTATUS(ndr, "ntstatus", r->ntstatus);
+	ndr_print_uint32(ndr, "unknown1", r->unknown1);
+	ndr_print_uint32(ndr, "unknown2", r->unknown2);
+	ndr->depth--;
+}
+
diff --git a/librpc/gen_ndr/ndr_misc.h b/librpc/gen_ndr/ndr_misc.h
index a38b3c9..938c946 100644
--- a/librpc/gen_ndr/ndr_misc.h
+++ b/librpc/gen_ndr/ndr_misc.h
@@ -20,4 +20,7 @@ void ndr_print_policy_handle(struct ndr_print *ndr, const char *name, const stru
 enum ndr_err_code ndr_push_netr_SchannelType(struct ndr_push *ndr, int ndr_flags, enum netr_SchannelType r);
 enum ndr_err_code ndr_pull_netr_SchannelType(struct ndr_pull *ndr, int ndr_flags, enum netr_SchannelType *r);
 void ndr_print_netr_SchannelType(struct ndr_print *ndr, const char *name, enum netr_SchannelType r);
+enum ndr_err_code ndr_push_KRB5_EDATA_NTSTATUS(struct ndr_push *ndr, int ndr_flags, const struct KRB5_EDATA_NTSTATUS *r);
+enum ndr_err_code ndr_pull_KRB5_EDATA_NTSTATUS(struct ndr_pull *ndr, int ndr_flags, struct KRB5_EDATA_NTSTATUS *r);
+void ndr_print_KRB5_EDATA_NTSTATUS(struct ndr_print *ndr, const char *name, const struct KRB5_EDATA_NTSTATUS *r);
 #endif /* _HEADER_NDR_misc */
diff --git a/librpc/idl/misc.idl b/librpc/idl/misc.idl
index 1ef0d91..c4d8c62 100644
--- a/librpc/idl/misc.idl
+++ b/librpc/idl/misc.idl
@@ -35,4 +35,10 @@ interface misc
 		SEC_CHAN_DOMAIN      = 4,
 		SEC_CHAN_BDC         = 6
 	} netr_SchannelType;
+
+	typedef [public] struct {
+		NTSTATUS ntstatus;
+		uint32 unknown1;
+		uint32 unknown2; /* 0x00000001 */
+	} KRB5_EDATA_NTSTATUS;
 }
diff --git a/source3/include/ads.h b/source3/include/ads.h
index abff9ea..0fa19b5 100644
--- a/source3/include/ads.h
+++ b/source3/include/ads.h
@@ -364,12 +364,6 @@ typedef void **ADS_MODLIST;
 
 #ifdef HAVE_KRB5
 typedef struct {
-	NTSTATUS ntstatus;
-	uint32 unknown1;
-	uint32 unknown2; /* 0x00000001 */
-} KRB5_EDATA_NTSTATUS;
-
-typedef struct {
 #if defined(HAVE_MAGIC_IN_KRB5_ADDRESS) && defined(HAVE_ADDRTYPE_IN_KRB5_ADDRESS) /* MIT */
 	krb5_address **addrs;
 #elif defined(HAVE_KRB5_ADDRESSES) /* Heimdal */
diff --git a/source3/libads/kerberos.c b/source3/libads/kerberos.c
index b752fc2..56d7b06 100644
--- a/source3/libads/kerberos.c
+++ b/source3/libads/kerberos.c
@@ -56,47 +56,14 @@ kerb_prompter(krb5_context ctx, void *data,
 	return 0;
 }
 
-static bool smb_krb5_err_io_nstatus(TALLOC_CTX *mem_ctx, 
-				    DATA_BLOB *edata_blob, 
-				    KRB5_EDATA_NTSTATUS *edata)
-{
-	bool ret = False;
-	prs_struct ps;
-
-	if (!mem_ctx || !edata_blob || !edata) 
-		return False;
-
-	if (!prs_init(&ps, edata_blob->length, mem_ctx, UNMARSHALL))
-		return False;
-
-	if (!prs_copy_data_in(&ps, (char *)edata_blob->data, edata_blob->length))
-		goto out;
-
-	prs_set_offset(&ps, 0);
-
-	if (!prs_ntstatus("ntstatus", &ps, 1, &edata->ntstatus))
-		goto out;
-
-	if (!prs_uint32("unknown1", &ps, 1, &edata->unknown1))
-		goto out;
-
-	if (!prs_uint32("unknown2", &ps, 1, &edata->unknown2)) /* only seen 00000001 here */
-		goto out;
-
-	ret = True;
- out:
-	prs_mem_free(&ps);
-
-	return ret;
-}
-
  static bool smb_krb5_get_ntstatus_from_krb5_error(krb5_error *error,
 						   NTSTATUS *nt_status)
 {
 	DATA_BLOB edata;
 	DATA_BLOB unwrapped_edata;
 	TALLOC_CTX *mem_ctx;
-	KRB5_EDATA_NTSTATUS parsed_edata;
+	struct KRB5_EDATA_NTSTATUS parsed_edata;
+	enum ndr_err_code ndr_err;
 
 #ifdef HAVE_E_DATA_POINTER_IN_KRB5_ERROR
 	edata = data_blob(error->e_data->data, error->e_data->length);
@@ -122,7 +89,10 @@ static bool smb_krb5_err_io_nstatus(TALLOC_CTX *mem_ctx,
 
 	data_blob_free(&edata);
 
-	if (!smb_krb5_err_io_nstatus(mem_ctx, &unwrapped_edata, &parsed_edata)) {
+	ndr_err = ndr_pull_struct_blob_all(&unwrapped_edata, mem_ctx, NULL,
+			&parsed_edata,
+			(ndr_pull_flags_fn_t)ndr_pull_KRB5_EDATA_NTSTATUS);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 		data_blob_free(&unwrapped_edata);
 		TALLOC_FREE(mem_ctx);
 		return False;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list