diff --git a/epan/dissectors/dcerpc/drsuapi/drsuapi.idl b/epan/dissectors/dcerpc/drsuapi/drsuapi.idl index e76f9249e3..0a4a7d93fa 100644 --- a/epan/dissectors/dcerpc/drsuapi/drsuapi.idl +++ b/epan/dissectors/dcerpc/drsuapi/drsuapi.idl @@ -238,8 +238,7 @@ interface drsuapi typedef struct { drsuapi_DsReplicaCoursor coursor; -# NTTIME_1sec time1; - hyper time1; + NTTIME_1sec time1; } drsuapi_DsReplicaCoursorEx; typedef struct { @@ -291,23 +290,23 @@ interface drsuapi DRSUAPI_DS_REPLICA_UPDATE_0x00000010 = 0x00000010 } drsuapi_DsReplicaUpdateRefsOptions; -# typedef struct { -# uint32 unknown1; -# uint32 unknown2; -# GUID dest_dsa_guid; -# drsuapi_DsReplicaUpdateRefsOptions options; -# drsuapi_DsReplicaSyncRequest1Info sync_req_info1; -# ascstr dest_dsa_dns_name; -# } drsuapi_DsReplicaUpdateRefsRequest1; -# -# typedef [switch_type(int32)] union { -# [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1; -# } drsuapi_DsReplicaUpdateRefsRequest; + typedef struct { + uint32 unknown1; + uint32 unknown2; + GUID dest_dsa_guid; + drsuapi_DsReplicaUpdateRefsOptions options; + drsuapi_DsReplicaSyncRequest1Info sync_req_info1; + ascstr dest_dsa_dns_name; + } drsuapi_DsReplicaUpdateRefsRequest1; + + typedef [switch_type(int32)] union { + [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1; + } drsuapi_DsReplicaUpdateRefsRequest; WERROR drsuapi_DsReplicaUpdateRefs( -# [in,ref] policy_handle *bind_handle, -# [in] int32 level, -# [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req + [in,ref] policy_handle *bind_handle, + [in] int32 level, + [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req ); /*****************/ @@ -787,21 +786,21 @@ interface drsuapi [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[]; } drsuapi_DsReplicaAttrValMetaData2Ctr; -# typedef struct { -# hyper u1; /* session number? */ -# uint32 u2; -# uint32 u3; -# GUID bind_guid; -# NTTIME_1sec bind_time; -# uint32 u4; /* flags? */ -# uint32 u5; -# } drsuapi_DsReplicaConnection04; -# -# typedef struct { -# [range(0,10000)] uint32 count; -# uint32 reserved; -# [size_is(count)] drsuapi_DsReplicaConnection04 array[]; -# } drsuapi_DsReplicaConnection04Ctr; + typedef struct { + hyper u1; /* session number? */ + uint32 u2; + uint32 u3; + GUID bind_guid; + NTTIME_1sec bind_time; + uint32 u4; /* flags? */ + uint32 u5; + } drsuapi_DsReplicaConnection04; + + typedef struct { + [range(0,10000)] uint32 count; + uint32 reserved; + [size_is(count)] drsuapi_DsReplicaConnection04 array[]; + } drsuapi_DsReplicaConnection04Ctr; typedef struct { unistr *str1; @@ -833,7 +832,7 @@ interface drsuapi [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2; [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2; [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02; -# [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04; + [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04; [case(DRSUAPI_DS_REPLICA_INFO_CURSURS05)] drsuapi_DsReplicaCoursor05Ctr *coursors05; [case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06; } drsuapi_DsReplicaInfo; diff --git a/epan/dissectors/dcerpc/idl2eth.c b/epan/dissectors/dcerpc/idl2eth.c index 187326416e..679f882fc1 100644 --- a/epan/dissectors/dcerpc/idl2eth.c +++ b/epan/dissectors/dcerpc/idl2eth.c @@ -32,6 +32,8 @@ TODO time_t A 32 bit integer holding a unix style time_t + NTTIME_hyper A 64 bit integer representing a NTTIME + NTTIME_1sec bool8 @@ -42,7 +44,6 @@ TODO uuid_t policy_handle NTTIME - NTTIME_hyper */ /* All field dissectors that call a normal type @@ -1169,6 +1170,22 @@ find_type(char *name) FPRINTF(eth_code, "}\n"); FPRINTF(eth_code, "\n"); tmptype=register_new_type("NTTIME_hyper", dissectorname, "FT_ABSOLUTE_TIME", "BASE_NONE", "0", "NULL", 4); + } else if(!strcmp(name,"NTTIME_1sec")){ + /* 8 bytes, aligned to 8 bytes */ + sprintf(dissectorname, "%s_dissect_%s", ifname, name); + FPRINTF(NULL,"\nAutogenerating built-in type:%s\n------------\n",name); + FPRINTF(eth_code, "\n"); + FPRINTF(eth_code, "static int\n"); + FPRINTF(eth_code, "%s(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_)\n", dissectorname); + FPRINTF(eth_code, "{\n"); + FPRINTF(eth_code, " ALIGN_TO_8_BYTES;\n"); + FPRINTF(eth_code, " offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, hf_index);\n"); + + FPRINTF(eth_code, "\n"); + FPRINTF(eth_code, " return offset;\n"); + FPRINTF(eth_code, "}\n"); + FPRINTF(eth_code, "\n"); + tmptype=register_new_type("NTTIME_1sec", dissectorname, "FT_ABSOLUTE_TIME", "BASE_NONE", "0", "NULL", 4); } else if(!strcmp(name,"udlong")){ /* 8 bytes, aligned to 4 bytes */ sprintf(dissectorname, "%s_dissect_%s", ifname, name); diff --git a/epan/dissectors/packet-dcerpc-drsuapi.c b/epan/dissectors/packet-dcerpc-drsuapi.c index 77f978d78b..c1839713fe 100644 --- a/epan/dissectors/packet-dcerpc-drsuapi.c +++ b/epan/dissectors/packet-dcerpc-drsuapi.c @@ -198,6 +198,16 @@ static int hf_drsuapi_DsReplicaUpdateRefsOptions_DRSUAPI_DS_REPLICA_UPDATE_WRITE static int hf_drsuapi_DsReplicaUpdateRefsOptions_DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE = -1; static int hf_drsuapi_DsReplicaUpdateRefsOptions_DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE = -1; static int hf_drsuapi_DsReplicaUpdateRefsOptions_DRSUAPI_DS_REPLICA_UPDATE_0x00000010 = -1; +static int hf_drsuapi_DsReplicaUpdateRefsRequest1_unknown1 = -1; +static int hf_drsuapi_DsReplicaUpdateRefsRequest1_unknown2 = -1; +static int hf_drsuapi_DsReplicaUpdateRefsRequest1_dest_dsa_guid = -1; +static int hf_drsuapi_DsReplicaUpdateRefsRequest1_options = -1; +static int hf_drsuapi_DsReplicaUpdateRefsRequest1_sync_req_info1 = -1; +static int hf_drsuapi_DsReplicaUpdateRefsRequest1_dest_dsa_dns_name = -1; +static int hf_drsuapi_DsReplicaUpdateRefsRequest_1_req1 = -1; +static int hf_drsuapi_DsReplicaUpdateRefs_bind_handle = -1; +static int hf_drsuapi_DsReplicaUpdateRefs_level = -1; +static int hf_drsuapi_DsReplicaUpdateRefs_req = -1; static int hf_drsuapi_DsReplicaAddOptions_DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION = -1; static int hf_drsuapi_DsReplicaAddOptions_DRSUAPI_DS_REPLICA_ADD_WRITEABLE = -1; static int hf_drsuapi_DsReplicaDeleteOptions_DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION = -1; @@ -401,6 +411,16 @@ static int hf_drsuapi_DsReplicaAttrValMetaData2_originating_dsa_obj_dn = -1; static int hf_drsuapi_DsReplicaAttrValMetaData2Ctr_count = -1; static int hf_drsuapi_DsReplicaAttrValMetaData2Ctr_enumeration_context = -1; static int hf_drsuapi_DsReplicaAttrValMetaData2Ctr_array = -1; +static int hf_drsuapi_DsReplicaConnection04_u1 = -1; +static int hf_drsuapi_DsReplicaConnection04_u2 = -1; +static int hf_drsuapi_DsReplicaConnection04_u3 = -1; +static int hf_drsuapi_DsReplicaConnection04_bind_guid = -1; +static int hf_drsuapi_DsReplicaConnection04_bind_time = -1; +static int hf_drsuapi_DsReplicaConnection04_u4 = -1; +static int hf_drsuapi_DsReplicaConnection04_u5 = -1; +static int hf_drsuapi_DsReplicaConnection04Ctr_count = -1; +static int hf_drsuapi_DsReplicaConnection04Ctr_reserved = -1; +static int hf_drsuapi_DsReplicaConnection04Ctr_array = -1; static int hf_drsuapi_DsReplica06_str1 = -1; static int hf_drsuapi_DsReplica06_u1 = -1; static int hf_drsuapi_DsReplica06_u2 = -1; @@ -424,6 +444,7 @@ static int hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CURSORS3_coursors3 = static int hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2_objmetadata2 = -1; static int hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2_attrvalmetadata2 = -1; static int hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02_neighbours02 = -1; +static int hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04_connections04 = -1; static int hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CURSURS05_coursors05 = -1; static int hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_06_i06 = -1; static int hf_drsuapi_DsReplicaGetInfo_bind_handle = -1; @@ -461,6 +482,8 @@ static gint ett_drsuapi_DsGetNCChangesCtr6 = -1; static gint ett_drsuapi_DsGetNCChangesCtr7 = -1; static gint ett_drsuapi_DsGetNCChangesCtr = -1; static gint ett_drsuapi_DsReplicaUpdateRefsOptions = -1; +static gint ett_drsuapi_DsReplicaUpdateRefsRequest1 = -1; +static gint ett_drsuapi_DsReplicaUpdateRefsRequest = -1; static gint ett_drsuapi_DsReplicaAddOptions = -1; static gint ett_drsuapi_DsReplicaDeleteOptions = -1; static gint ett_drsuapi_DsReplicaModifyOptions = -1; @@ -506,6 +529,8 @@ static gint ett_drsuapi_DsReplicaObjMetaData2 = -1; static gint ett_drsuapi_DsReplicaObjMetaData2Ctr = -1; static gint ett_drsuapi_DsReplicaAttrValMetaData2 = -1; static gint ett_drsuapi_DsReplicaAttrValMetaData2Ctr = -1; +static gint ett_drsuapi_DsReplicaConnection04 = -1; +static gint ett_drsuapi_DsReplicaConnection04Ctr = -1; static gint ett_drsuapi_DsReplica06 = -1; static gint ett_drsuapi_DsReplica06Ctr = -1; static gint ett_drsuapi_DsReplicaInfo = -1; @@ -2419,11 +2444,21 @@ drsuapi_dissect_DsReplicaCoursorEx_coursor(tvbuff_t *tvb, int offset, packet_inf return offset; } + +static int +drsuapi_dissect_NTTIME_1sec(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_) +{ + ALIGN_TO_8_BYTES; + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, hf_index); + + return offset; +} + static int drsuapi_dissect_DsReplicaCoursorEx_time1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) { guint32 param=0; - offset=drsuapi_dissect_uint64(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaCoursorEx_time1, param); + offset=drsuapi_dissect_NTTIME_1sec(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaCoursorEx_time1, param); return offset; } @@ -2933,10 +2968,178 @@ drsuapi_dissect_DsReplicaUpdateRefsOptions(tvbuff_t *tvb, int offset, packet_inf return offset; } +static int +drsuapi_dissect_DsReplicaUpdateRefsRequest1_unknown1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefsRequest1_unknown1, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaUpdateRefsRequest1_unknown2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefsRequest1_unknown2, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaUpdateRefsRequest1_dest_dsa_guid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_GUID(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefsRequest1_dest_dsa_guid, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaUpdateRefsRequest1_options(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_DsReplicaUpdateRefsOptions(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefsRequest1_options, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaUpdateRefsRequest1_sync_req_info1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_DsReplicaSyncRequest1Info(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefsRequest1_sync_req_info1, param); + return offset; +} + + +static int +drsuapi_dissect_ascstr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param _U_) +{ + offset=dissect_ndr_cvstring(tvb, offset, pinfo, tree, drep, 1, hf_index, FALSE, NULL); + return offset; +} + +static int +drsuapi_dissect_DsReplicaUpdateRefsRequest1_dest_dsa_dns_name(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_ascstr(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefsRequest1_dest_dsa_dns_name, param); + return offset; +} + + +int +drsuapi_dissect_DsReplicaUpdateRefsRequest1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_) +{ + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset; + + ALIGN_TO_4_BYTES; + + old_offset=offset; + if(parent_tree){ + item=proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree=proto_item_add_subtree(item, ett_drsuapi_DsReplicaUpdateRefsRequest1); + } + + offset=drsuapi_dissect_DsReplicaUpdateRefsRequest1_unknown1(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaUpdateRefsRequest1_unknown2(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaUpdateRefsRequest1_dest_dsa_guid(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaUpdateRefsRequest1_options(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaUpdateRefsRequest1_sync_req_info1(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaUpdateRefsRequest1_dest_dsa_dns_name(tvb, offset, pinfo, tree, drep); + + proto_item_set_len(item, offset-old_offset); + + return offset; +} +static int +drsuapi_dissect_union_DsReplicaUpdateRefsRequest_1_req1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_DsReplicaUpdateRefsRequest1(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefsRequest_1_req1, param); + return offset; +} + + +static int +drsuapi_dissect_union_DsReplicaUpdateRefsRequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_) +{ + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset; + guint32 level; + + ALIGN_TO_4_BYTES; + + old_offset=offset; + if(parent_tree){ + item=proto_tree_add_text(parent_tree, tvb, offset, -1, "DsReplicaUpdateRefsRequest"); + tree=proto_item_add_subtree(item, ett_drsuapi_DsReplicaUpdateRefsRequest); + } + + offset=dissect_ndr_uint32(tvb, offset, pinfo, tree, + drep, hf_index, &level); + + switch(level){ + case 1: + ALIGN_TO_4_BYTES; + offset=drsuapi_dissect_union_DsReplicaUpdateRefsRequest_1_req1(tvb, offset, pinfo, tree, drep); + break; + + } + + proto_item_set_len(item, offset-old_offset); + + return offset; +} +static int +drsuapi_dissect_DsReplicaUpdateRefs_bind_handle(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_policy_handle(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefs_bind_handle, param); + return offset; +} + +static int +ref_drsuapi_dissect_DsReplicaUpdateRefs_bind_handle(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + offset=dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, drep, drsuapi_dissect_DsReplicaUpdateRefs_bind_handle, NDR_POINTER_REF, "bind_handle", -1); + return offset; +} + +static int +drsuapi_dissect_DsReplicaUpdateRefs_level(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_int32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefs_level, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaUpdateRefs_req(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_union_DsReplicaUpdateRefsRequest(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaUpdateRefs_req, param); + return offset; +} + static int drsuapi_dissect_DsReplicaUpdateRefs_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_) { + offset=ref_drsuapi_dissect_DsReplicaUpdateRefs_bind_handle(tvb, offset, pinfo, tree, drep); + offset=dissect_deferred_pointers(pinfo, tvb, offset, drep); + + offset=drsuapi_dissect_DsReplicaUpdateRefs_level(tvb, offset, pinfo, tree, drep); + offset=dissect_deferred_pointers(pinfo, tvb, offset, drep); + + offset=drsuapi_dissect_DsReplicaUpdateRefs_req(tvb, offset, pinfo, tree, drep); + offset=dissect_deferred_pointers(pinfo, tvb, offset, drep); + return offset; } @@ -6905,6 +7108,153 @@ drsuapi_dissect_DsReplicaAttrValMetaData2Ctr(tvbuff_t *tvb, int offset, packet_i return offset; } static int +drsuapi_dissect_DsReplicaConnection04_u1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint64(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04_u1, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04_u2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04_u2, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04_u3(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04_u3, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04_bind_guid(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_GUID(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04_bind_guid, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04_bind_time(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_NTTIME_1sec(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04_bind_time, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04_u4(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04_u4, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04_u5(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04_u5, param); + return offset; +} + + +int +drsuapi_dissect_DsReplicaConnection04(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_) +{ + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset; + + ALIGN_TO_8_BYTES; + + old_offset=offset; + if(parent_tree){ + item=proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree=proto_item_add_subtree(item, ett_drsuapi_DsReplicaConnection04); + } + + offset=drsuapi_dissect_DsReplicaConnection04_u1(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaConnection04_u2(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaConnection04_u3(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaConnection04_bind_guid(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaConnection04_bind_time(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaConnection04_u4(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaConnection04_u5(tvb, offset, pinfo, tree, drep); + + proto_item_set_len(item, offset-old_offset); + + return offset; +} +static int +drsuapi_dissect_DsReplicaConnection04Ctr_count(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04Ctr_count, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04Ctr_reserved(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_uint32(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04Ctr_reserved, param); + return offset; +} + +static int +drsuapi_dissect_DsReplicaConnection04Ctr_array(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_DsReplicaConnection04(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaConnection04Ctr_array, param); + return offset; +} + +static int +ucarray_drsuapi_dissect_DsReplicaConnection04Ctr_array(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + offset=dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, drsuapi_dissect_DsReplicaConnection04Ctr_array); + return offset; +} + + +int +drsuapi_dissect_DsReplicaConnection04Ctr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, guint8 *drep, int hf_index, guint32 param _U_) +{ + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset; + + ALIGN_TO_8_BYTES; + + old_offset=offset; + if(parent_tree){ + item=proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree=proto_item_add_subtree(item, ett_drsuapi_DsReplicaConnection04Ctr); + } + + offset=drsuapi_dissect_DsReplicaConnection04Ctr_count(tvb, offset, pinfo, tree, drep); + + offset=drsuapi_dissect_DsReplicaConnection04Ctr_reserved(tvb, offset, pinfo, tree, drep); + + offset=ucarray_drsuapi_dissect_DsReplicaConnection04Ctr_array(tvb, offset, pinfo, tree, drep); + + proto_item_set_len(item, offset-old_offset); + + return offset; +} +static int drsuapi_dissect_DsReplica06_str1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) { guint32 param=0; @@ -7248,6 +7598,21 @@ drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02_neighbou return offset; } +static int +drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04_connections04(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + guint32 param=0; + offset=drsuapi_dissect_DsReplicaConnection04Ctr(tvb, offset, pinfo, tree, drep, hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04_connections04, param); + return offset; +} + +static int +drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04_connections04_unique(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) +{ + offset=dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04_connections04, NDR_POINTER_UNIQUE, "connections04", -1); + return offset; +} + static int drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CURSURS05_coursors05(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep) { @@ -7359,6 +7724,11 @@ drsuapi_dissect_union_DsReplicaInfo(tvbuff_t *tvb, int offset, packet_info *pinf offset=drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02_neighbours02_unique(tvb, offset, pinfo, tree, drep); break; + case DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04: + ALIGN_TO_4_BYTES; + offset=drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04_connections04_unique(tvb, offset, pinfo, tree, drep); + break; + case DRSUAPI_DS_REPLICA_INFO_CURSURS05: ALIGN_TO_4_BYTES; offset=drsuapi_dissect_union_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CURSURS05_coursors05_unique(tvb, offset, pinfo, tree, drep); @@ -8165,7 +8535,7 @@ proto_register_drsuapi(void) "", HFILL }}, { &hf_drsuapi_DsReplicaCoursorEx_time1, - { "time1", "drsuapi.DsReplicaCoursorEx.time1", FT_UINT64, BASE_DEC, + { "time1", "drsuapi.DsReplicaCoursorEx.time1", FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0, "", HFILL }}, @@ -8314,6 +8684,56 @@ proto_register_drsuapi(void) TFS(&DRSUAPI_DS_REPLICA_UPDATE_0x00000010_tfs), 0x00000010, "", HFILL }}, + { &hf_drsuapi_DsReplicaUpdateRefsRequest1_unknown1, + { "unknown1", "drsuapi.DsReplicaUpdateRefsRequest1.unknown1", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefsRequest1_unknown2, + { "unknown2", "drsuapi.DsReplicaUpdateRefsRequest1.unknown2", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefsRequest1_dest_dsa_guid, + { "dest_dsa_guid", "drsuapi.DsReplicaUpdateRefsRequest1.dest_dsa_guid", FT_STRING, BASE_NONE, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefsRequest1_options, + { "options", "drsuapi.DsReplicaUpdateRefsRequest1.options", FT_UINT32, BASE_HEX, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefsRequest1_sync_req_info1, + { "sync_req_info1", "drsuapi.DsReplicaUpdateRefsRequest1.sync_req_info1", FT_NONE, BASE_NONE, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefsRequest1_dest_dsa_dns_name, + { "dest_dsa_dns_name", "drsuapi.DsReplicaUpdateRefsRequest1.dest_dsa_dns_name", FT_STRING, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefsRequest_1_req1, + { "req1", "drsuapi.DsReplicaUpdateRefsRequest.req1", FT_NONE, BASE_NONE, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefs_bind_handle, + { "bind_handle", "drsuapi.DsReplicaUpdateRefs.bind_handle", FT_BYTES, BASE_NONE, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefs_level, + { "level", "drsuapi.DsReplicaUpdateRefs.level", FT_INT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaUpdateRefs_req, + { "req", "drsuapi.DsReplicaUpdateRefs.req", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + { &hf_drsuapi_DsReplicaAddOptions_DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION, { "DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION", "drsuapi.DsReplicaAddOptions.DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION", FT_BOOLEAN, 32, TFS(&DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION_tfs), 0x00000001, @@ -9329,6 +9749,56 @@ proto_register_drsuapi(void) NULL, 0, "", HFILL }}, + { &hf_drsuapi_DsReplicaConnection04_u1, + { "u1", "drsuapi.DsReplicaConnection04.u1", FT_UINT64, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04_u2, + { "u2", "drsuapi.DsReplicaConnection04.u2", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04_u3, + { "u3", "drsuapi.DsReplicaConnection04.u3", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04_bind_guid, + { "bind_guid", "drsuapi.DsReplicaConnection04.bind_guid", FT_STRING, BASE_NONE, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04_bind_time, + { "bind_time", "drsuapi.DsReplicaConnection04.bind_time", FT_ABSOLUTE_TIME, BASE_NONE, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04_u4, + { "u4", "drsuapi.DsReplicaConnection04.u4", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04_u5, + { "u5", "drsuapi.DsReplicaConnection04.u5", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04Ctr_count, + { "count", "drsuapi.DsReplicaConnection04Ctr.count", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04Ctr_reserved, + { "reserved", "drsuapi.DsReplicaConnection04Ctr.reserved", FT_UINT32, BASE_DEC, + NULL, 0, + "", HFILL }}, + + { &hf_drsuapi_DsReplicaConnection04Ctr_array, + { "array", "drsuapi.DsReplicaConnection04Ctr.array", FT_NONE, BASE_NONE, + NULL, 0, + "", HFILL }}, + { &hf_drsuapi_DsReplica06_str1, { "str1", "drsuapi.DsReplica06.str1", FT_STRING, BASE_DEC, NULL, 0, @@ -9444,6 +9914,11 @@ proto_register_drsuapi(void) NULL, 0, "", HFILL }}, + { &hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04_connections04, + { "connections04", "drsuapi.DsReplicaInfo.connections04", FT_NONE, BASE_NONE, + NULL, 0, + "", HFILL }}, + { &hf_drsuapi_DsReplicaInfo_DRSUAPI_DS_REPLICA_INFO_CURSURS05_coursors05, { "coursors05", "drsuapi.DsReplicaInfo.coursors05", FT_NONE, BASE_NONE, NULL, 0, @@ -9511,6 +9986,8 @@ proto_register_drsuapi(void) &ett_drsuapi_DsGetNCChangesCtr7, &ett_drsuapi_DsGetNCChangesCtr, &ett_drsuapi_DsReplicaUpdateRefsOptions, + &ett_drsuapi_DsReplicaUpdateRefsRequest1, + &ett_drsuapi_DsReplicaUpdateRefsRequest, &ett_drsuapi_DsReplicaAddOptions, &ett_drsuapi_DsReplicaDeleteOptions, &ett_drsuapi_DsReplicaModifyOptions, @@ -9556,6 +10033,8 @@ proto_register_drsuapi(void) &ett_drsuapi_DsReplicaObjMetaData2Ctr, &ett_drsuapi_DsReplicaAttrValMetaData2, &ett_drsuapi_DsReplicaAttrValMetaData2Ctr, + &ett_drsuapi_DsReplicaConnection04, + &ett_drsuapi_DsReplicaConnection04Ctr, &ett_drsuapi_DsReplica06, &ett_drsuapi_DsReplica06Ctr, &ett_drsuapi_DsReplicaInfo, diff --git a/epan/dissectors/packet-dcerpc-drsuapi.h b/epan/dissectors/packet-dcerpc-drsuapi.h index 8aa15c5ba4..d335b1aec2 100644 --- a/epan/dissectors/packet-dcerpc-drsuapi.h +++ b/epan/dissectors/packet-dcerpc-drsuapi.h @@ -51,6 +51,7 @@ int drsuapi_dissect_DsReplicaCoursorEx05Ctr(tvbuff_t *tvb, int offset, packet_in int drsuapi_dissect_DsGetNCChangesCtr6(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsGetNCChangesCtr7(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplicaUpdateRefsOptions(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); +int drsuapi_dissect_DsReplicaUpdateRefsRequest1(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplicaAddOptions(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplicaDeleteOptions(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplicaModifyOptions(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); @@ -172,6 +173,8 @@ int drsuapi_dissect_DsReplicaObjMetaData2(tvbuff_t *tvb, int offset, packet_info int drsuapi_dissect_DsReplicaObjMetaData2Ctr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplicaAttrValMetaData2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplicaAttrValMetaData2Ctr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); +int drsuapi_dissect_DsReplicaConnection04(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); +int drsuapi_dissect_DsReplicaConnection04Ctr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplica06(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); int drsuapi_dissect_DsReplica06Ctr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hf_index, guint32 param); /* END OF INCLUDED FILE : ETH_HDR */