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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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