diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-05-10 23:33:56 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:16:37 -0500 |
commit | 2f2fc84a7c6724f6eab39bf301be70ba5bec15cc (patch) | |
tree | 13eb42b0238a5744bb2f368f8e686d350287afe5 /source4/librpc/idl | |
parent | 398a3130f5166d4a4d455529ae3048316510f867 (diff) | |
download | samba-2f2fc84a7c6724f6eab39bf301be70ba5bec15cc.tar.gz samba-2f2fc84a7c6724f6eab39bf301be70ba5bec15cc.tar.bz2 samba-2f2fc84a7c6724f6eab39bf301be70ba5bec15cc.zip |
r6720: added support for the remaining 2 types of CLDAP netlogon
response.
To work around the fact that the type of the returned data is not
encoded in the packet, this required adding ndr_pull_union_blob()
which allows us to pull a blob into a union with a specified switch
value, in this case the switch value comes from the calling NtVer field.
(This used to be commit bd27e626c27be72913d1a1569ee6e2e2711df84e)
Diffstat (limited to 'source4/librpc/idl')
-rw-r--r-- | source4/librpc/idl/nbt.idl | 72 |
1 files changed, 55 insertions, 17 deletions
diff --git a/source4/librpc/idl/nbt.idl b/source4/librpc/idl/nbt.idl index 3719b2fdad..2468e4e8bf 100644 --- a/source4/librpc/idl/nbt.idl +++ b/source4/librpc/idl/nbt.idl @@ -452,24 +452,38 @@ /*******************************************/ /* CLDAP netlogon response */ - typedef enum { - CLDAP_NETLOGON_19 = 0x13, - CLDAP_NETLOGON_23 = 0x17 - } nbt_cldap_netlogon_command; + /* note that these structures are very similar to, but not + quite identical to, the netlogon structures above */ - /* cldap type 19 netlogon response */ typedef struct { + [value(19)] uint16 type; nstring pdc_name; nstring unknown; nstring domain_name; uint32 nt_version; uint16 lmnt_token; uint16 lm20_token; - } nbt_cldap_netlogon_19; + } nbt_cldap_netlogon_1; - /* cldap type 23 netlogon response */ typedef struct { - [flag(NDR_ALIGN4)] DATA_BLOB _pad; + [value(19)] uint16 type; + nstring pdc_name; + nstring unknown; + nstring domain_name; + GUID domain_uuid; + GUID unknown_uuid; + nbt_string forest; + nbt_string dns_domain; + nbt_string pdc_dns_name; + ipv4address pdc_ip; + nbt_server_type server_type; + uint32 nt_version; + uint16 lmnt_token; + uint16 lm20_token; + } nbt_cldap_netlogon_2; + + typedef struct { + [value(23)] uint32 type; nbt_server_type server_type; GUID domain_uuid; nbt_string forest; @@ -483,16 +497,40 @@ uint32 nt_version; uint16 lmnt_token; uint16 lm20_token; - } nbt_cldap_netlogon_23; + } nbt_cldap_netlogon_3; - typedef [nodiscriminant] union { - [case(CLDAP_NETLOGON_19)] nbt_cldap_netlogon_19 logon19; - [case(CLDAP_NETLOGON_23)] nbt_cldap_netlogon_23 logon23; - } nbt_cldap_netlogon_info; - - typedef [flag(NDR_NOALIGN),public] struct { - nbt_cldap_netlogon_command command; - [switch_is(command)] nbt_cldap_netlogon_info info; + typedef struct { + [value(23)] uint32 type; + nbt_server_type server_type; + GUID domain_uuid; + nbt_string forest; + nbt_string dns_domain; + nbt_string pdc_dns_name; + nbt_string domain; + nbt_string pdc_name; + nbt_string user_name; + nbt_string site_name; + nbt_string site_name2; + uint8 unknown; + uint32 unknown2; + [flag(NDR_BIG_ENDIAN)] + ipv4address pdc_ip; + uint32 unknown3[2]; + uint32 nt_version; + uint16 lmnt_token; + uint16 lm20_token; + } nbt_cldap_netlogon_4; + + typedef [flag(NDR_NOALIGN),public,nodiscriminant] union { + [case(0)] nbt_cldap_netlogon_1 logon1; + [case(1)] nbt_cldap_netlogon_1 logon1; + [case(2)] nbt_cldap_netlogon_2 logon2; + [case(3)] nbt_cldap_netlogon_2 logon2; + [case(4)] nbt_cldap_netlogon_3 logon3; + [case(5)] nbt_cldap_netlogon_3 logon3; + [case(6)] nbt_cldap_netlogon_3 logon3; + [case(7)] nbt_cldap_netlogon_3 logon3; + [default] nbt_cldap_netlogon_4 logon4; } nbt_cldap_netlogon; /*******************************************/ |