[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha5-337-gadbff0b

Stefan Metzmacher metze at samba.org
Wed Aug 20 13:30:31 GMT 2008


The branch, v4-0-test has been updated
       via  adbff0b0f92aa0742a8293071776b388879cbd8e (commit)
       via  7d297f7fb7a3ac388390429db7cb16fa60d3f8c0 (commit)
      from  4b054cee51c39c5430bcadd5c06a94dc3e6b0d8f (commit)

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


- Log -----------------------------------------------------------------
commit adbff0b0f92aa0742a8293071776b388879cbd8e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 19 08:51:45 2008 +0200

    krb5pac.idl: make use of subcontext(0xFFFFFC01) to handle the type Serialization header
    
    Now we should be able to handle bigendian PAC_LOGON_INFO buffers.
    
    metze

commit 7d297f7fb7a3ac388390429db7cb16fa60d3f8c0
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Aug 19 13:23:09 2008 +0200

    kdc/pac-glue: pull/push the logon_info via the PAC_INFO union
    
    This prepares the next commit...
    
    metze

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

Summary of changes:
 source/kdc/pac-glue.c         |   24 +++++++++++++-----------
 source/librpc/idl/krb5pac.idl |    6 +-----
 2 files changed, 14 insertions(+), 16 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/kdc/pac-glue.c b/source/kdc/pac-glue.c
index cab1446..bee271e 100644
--- a/source/kdc/pac-glue.c
+++ b/source/kdc/pac-glue.c
@@ -51,7 +51,7 @@ static krb5_error_code make_pac(krb5_context context,
 				struct auth_serversupplied_info *server_info,
 				krb5_pac *pac) 
 {
-	struct PAC_LOGON_INFO_CTR logon_info;
+	union PAC_INFO info;
 	struct netr_SamInfo3 *info3;
 	krb5_data pac_data;
 	NTSTATUS nt_status;
@@ -59,7 +59,7 @@ static krb5_error_code make_pac(krb5_context context,
 	DATA_BLOB pac_out;
 	krb5_error_code ret;
 
-	ZERO_STRUCT(logon_info);
+	ZERO_STRUCT(info);
 
 	nt_status = auth_convert_server_info_saminfo3(mem_ctx, server_info, &info3);
 	if (!NT_STATUS_IS_OK(nt_status)) {
@@ -67,15 +67,16 @@ static krb5_error_code make_pac(krb5_context context,
 		return EINVAL;
 	}
 
-	logon_info.info = talloc_zero(mem_ctx, struct PAC_LOGON_INFO);
+	info.logon_info.info = talloc_zero(mem_ctx, struct PAC_LOGON_INFO);
 	if (!mem_ctx) {
 		return ENOMEM;
 	}
 
-	logon_info.info->info3 = *info3;
+	info.logon_info.info->info3 = *info3;
 
-	ndr_err = ndr_push_struct_blob(&pac_out, mem_ctx, iconv_convenience, &logon_info,
-				       (ndr_push_flags_fn_t)ndr_push_PAC_LOGON_INFO_CTR);
+	ndr_err = ndr_push_union_blob(&pac_out, mem_ctx, iconv_convenience, &info,
+				      PAC_TYPE_LOGON_INFO,
+				      (ndr_push_flags_fn_t)ndr_push_PAC_INFO);
 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 		nt_status = ndr_map_error2ntstatus(ndr_err);
 		DEBUG(1, ("PAC (presig) push failed: %s\n", nt_errstr(nt_status)));
@@ -162,7 +163,7 @@ krb5_error_code samba_kdc_reget_pac(void *priv, krb5_context context,
 	krb5_data k5pac_in;
 	DATA_BLOB pac_in;
 
-	struct PAC_LOGON_INFO_CTR logon_info;
+	union PAC_INFO info;
 	union netr_Validation validation;
 	struct auth_serversupplied_info *server_info_out;
 
@@ -191,9 +192,10 @@ krb5_error_code samba_kdc_reget_pac(void *priv, krb5_context context,
 		return ENOMEM;
 	}
 		
-	ndr_err = ndr_pull_struct_blob(&pac_in, mem_ctx, private->iconv_convenience, &logon_info,
-				       (ndr_pull_flags_fn_t)ndr_pull_PAC_LOGON_INFO_CTR);
-	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err) || !logon_info.info) {
+	ndr_err = ndr_pull_union_blob(&pac_in, mem_ctx, private->iconv_convenience, &info,
+				      PAC_TYPE_LOGON_INFO,
+				      (ndr_pull_flags_fn_t)ndr_pull_PAC_INFO);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err) || !info.logon_info.info) {
 		nt_status = ndr_map_error2ntstatus(ndr_err);
 		DEBUG(0,("can't parse the PAC LOGON_INFO: %s\n", nt_errstr(nt_status)));
 		talloc_free(mem_ctx);
@@ -201,7 +203,7 @@ krb5_error_code samba_kdc_reget_pac(void *priv, krb5_context context,
 	}
 
 	/* Pull this right into the normal auth sysstem structures */
-	validation.sam3 = &logon_info.info->info3;
+	validation.sam3 = &info.logon_info.info->info3;
 	nt_status = make_server_info_netlogon_validation(mem_ctx,
 							 "",
 							 3, &validation,
diff --git a/source/librpc/idl/krb5pac.idl b/source/librpc/idl/krb5pac.idl
index b450908..ca0efae 100644
--- a/source/librpc/idl/krb5pac.idl
+++ b/source/librpc/idl/krb5pac.idl
@@ -45,10 +45,6 @@ interface krb5pac
 	} PAC_UNKNOWN_12;
 
 	typedef [public] struct {
-		[value(0x00081001)] uint32 unknown1;
-		[value(0xCCCCCCCC)] uint32 unknown2;
-		[value(NDR_ROUND(ndr_size_PAC_LOGON_INFO(info, ndr->flags)+4,8))] uint32 _ndr_size;
-		[value(0x00000000)] uint32 unknown3;
 		PAC_LOGON_INFO *info;
     	} PAC_LOGON_INFO_CTR;
 
@@ -66,7 +62,7 @@ interface krb5pac
 	} DATA_BLOB_REM;
 
 	typedef [public,nodiscriminant,gensize] union {
-		[case(PAC_TYPE_LOGON_INFO)]	PAC_LOGON_INFO_CTR logon_info;
+		[case(PAC_TYPE_LOGON_INFO)][subcontext(0xFFFFFC01)] PAC_LOGON_INFO_CTR logon_info;
 		[case(PAC_TYPE_SRV_CHECKSUM)]	PAC_SIGNATURE_DATA srv_cksum;
 		[case(PAC_TYPE_KDC_CHECKSUM)]	PAC_SIGNATURE_DATA kdc_cksum;
 		[case(PAC_TYPE_LOGON_NAME)]	PAC_LOGON_NAME logon_name;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list