diff options
author | Günther Deschner <gd@samba.org> | 2010-07-16 04:06:48 +0200 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2010-08-25 13:27:50 +0200 |
commit | e2f15d2a25302ee529006b2d1d6b99993c7102e8 (patch) | |
tree | 0189ae9cc476c77cb1f0dde4aa7274cd4a7cc043 /librpc/idl | |
parent | 2eff142cce536a8966e63bdf9e514bc22d03acc4 (diff) | |
download | samba-e2f15d2a25302ee529006b2d1d6b99993c7102e8.tar.gz |
s4-trusts: fix trustDomainPasswords drsblobs IDL and server side support.
Also remove bogus trustCurrentPasswords struct which we just had because our IDL
was incorrect.
Guenther
Diffstat (limited to 'librpc/idl')
-rw-r--r-- | librpc/idl/drsblobs.idl | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/librpc/idl/drsblobs.idl b/librpc/idl/drsblobs.idl index 1b4649cff9f..d16027055b3 100644 --- a/librpc/idl/drsblobs.idl +++ b/librpc/idl/drsblobs.idl @@ -468,39 +468,37 @@ interface drsblobs { typedef [public] struct { NTTIME LastUpdateTime; lsa_TrustAuthType AuthType; - [switch_is(AuthType)] AuthInfo AuthInfo; [flag(NDR_ALIGN4)] DATA_BLOB _pad; } AuthenticationInformation; - typedef [nopull,nopush,noprint] struct { - /* sizeis here is bogus, but this is here just for the structure */ - [size_is(1)] AuthenticationInformation array[]; + /* count is not on the wire */ + typedef [public,nopull,nopush,gensize] struct { + uint32 count; + AuthenticationInformation array[count]; } AuthenticationInformationArray; - /* This is nopull,nopush because we pass count down to the - * manual parser of AuthenticationInformationArray */ - typedef [public,nopull,nopush,noprint,gensize] struct { + /* we cannot use [relative] pointers here because Windows expects the + * previous_offset to match the total size of the struct in case + * the previous array is empty, see MS-LSAD 2.2.7.16 - gd */ + typedef [public,gensize,nopush] struct { uint32 count; - [relative] AuthenticationInformationArray *current; - [relative] AuthenticationInformationArray *previous; + [value((count > 0) ? 12 : 0)] uint32 current_offset; + [value((count > 0) ? 12 + ndr_size_AuthenticationInformationArray(¤t, ndr->flags) : 0)] uint32 previous_offset; + [subcontext(0),subcontext_size((previous_offset)-(current_offset))] AuthenticationInformationArray current; + [subcontext(0)] [flag(NDR_REMAINING)] AuthenticationInformationArray previous; } trustAuthInOutBlob; [nopython] void decode_trustAuthInOut( [in] trustAuthInOutBlob blob ); - typedef [public,gensize] struct { - uint32 count; - [relative] AuthenticationInformation *current[count]; - } trustCurrentPasswords; - typedef [public,nopull] struct { uint8 confounder[512]; - [subcontext(0),subcontext_size(outgoing_size)] trustCurrentPasswords outgoing; - [subcontext(0),subcontext_size(incoming_size)] trustCurrentPasswords incoming; - [value(ndr_size_trustCurrentPasswords(&outgoing, ndr->flags))] uint32 outgoing_size; - [value(ndr_size_trustCurrentPasswords(&incoming, ndr->flags))] uint32 incoming_size; + [subcontext(0),subcontext_size(outgoing_size)] trustAuthInOutBlob outgoing; + [subcontext(0),subcontext_size(incoming_size)] trustAuthInOutBlob incoming; + [value(ndr_size_trustAuthInOutBlob(&outgoing, ndr->flags))] uint32 outgoing_size; + [value(ndr_size_trustAuthInOutBlob(&incoming, ndr->flags))] uint32 incoming_size; } trustDomainPasswords; [nopython] void decode_trustDomainPasswords( |