Author: tridge Date: 2005-04-08 09:38:16 +0000 (Fri, 08 Apr 2005) New Revision: 6248
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=6248 Log: added parsing of type 10 UAS announce netlogon packets Modified: branches/SAMBA_4_0/source/libcli/dgram/netlogon.c branches/SAMBA_4_0/source/librpc/idl/nbt.idl Changeset: Modified: branches/SAMBA_4_0/source/libcli/dgram/netlogon.c =================================================================== --- branches/SAMBA_4_0/source/libcli/dgram/netlogon.c 2005-04-08 08:57:09 UTC (rev 6247) +++ branches/SAMBA_4_0/source/libcli/dgram/netlogon.c 2005-04-08 09:38:16 UTC (rev 6248) @@ -70,5 +70,12 @@ status = ndr_pull_struct_blob(data, mem_ctx, netlogon, (ndr_pull_flags_fn_t)ndr_pull_nbt_netlogon_packet); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0,("Failed to parse netlogon packet of length %d\n", + data->length)); +#if 0 + file_save("netlogon.dat", data->data, data->length); +#endif + } return status; } Modified: branches/SAMBA_4_0/source/librpc/idl/nbt.idl =================================================================== --- branches/SAMBA_4_0/source/librpc/idl/nbt.idl 2005-04-08 08:57:09 UTC (rev 6247) +++ branches/SAMBA_4_0/source/librpc/idl/nbt.idl 2005-04-08 09:38:16 UTC (rev 6248) @@ -8,7 +8,10 @@ encoding if it doesn't work out */ -interface nbt +[ uuid("1-2-3-4"), + version(1.0), + depends(security) +] interface nbt { const int NBT_NAME_SERVICE_PORT = 137; const int NBT_DGRAM_SERVICE_PORT = 138; @@ -326,6 +329,7 @@ /* \MAILSLOT\NET\NETLOGON mailslot requests */ typedef [enum8bit] enum { NETLOGON_QUERY_FOR_PDC = 0x7, + NETLOGON_ANNOUNCE_UAS = 0xa, NETLOGON_RESPONSE_FROM_PDC = 0xc } nbt_netlogon_command; @@ -351,8 +355,37 @@ uint16 lm20_token; } nbt_netlogon_response_from_pdc; + /* announce change to UAS or SAM */ + typedef struct { + uint32 db_index; + hyper serial; + NTTIME timestamp; + } nbt_db_change; + + /* used to announce SAM changes */ + typedef struct { + uint32 serial_lo; + time_t timestamp; + uint32 pulse; + uint32 random; + astring pdc_name; + astring domain; + [flag(NDR_ALIGN2)] DATA_BLOB _pad; + nstring unicode_pdc_name; + nstring unicode_domain; + uint32 db_count; + nbt_db_change dbchange[db_count]; + [value(ndr_size_dom_sid(&r->sid))] uint32 sid_size; + uint16 unknown; + dom_sid sid; + uint32 nt_version; + uint16 lmnt_token; + uint16 lm20_token; + } nbt_netlogon_announce_uas; + typedef [nodiscriminant] union { [case(NETLOGON_QUERY_FOR_PDC)] nbt_netlogon_query_for_pdc pdc; + [case(NETLOGON_ANNOUNCE_UAS)] nbt_netlogon_announce_uas uas; [case(NETLOGON_RESPONSE_FROM_PDC)] nbt_netlogon_response_from_pdc response; } nbt_netlogon_request; @@ -361,4 +394,6 @@ uint8 pad; [switch_is(command)] nbt_netlogon_request req; } nbt_netlogon_packet; + + void nbt_netlogon([in] nbt_netlogon_packet logon); }