![Gilbert Ramirez](/assets/img/avatar_default.png)
Also move ncp222.py, x11-fields, process-x11-fields.pl, make-reg-dotc, and make-reg-dotc.py. Adjust #include lines in files that include packet-*.h files. svn path=/trunk/; revision=11410
4659 lines
144 KiB
C
4659 lines
144 KiB
C
/* packet-dcerpc-afs4int.c
|
|
*
|
|
* Routines for dcerpc Afs4Int dissection
|
|
* Copyright 2002, Jaime Fournier <Jaime.Fournier@hush.com>
|
|
* This information is based off the released idl files from opengroup.
|
|
* ftp://ftp.opengroup.org/pub/dce122/dce/src/file.tar.gz file/fsint/afs4int.idl
|
|
*
|
|
* $Id$
|
|
*
|
|
* Ethereal - Network traffic analyzer
|
|
* By Gerald Combs <gerald@ethereal.com>
|
|
* Copyright 1998 Gerald Combs
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
* test
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
|
|
#ifdef HAVE_SYS_TYPES_H
|
|
#include <sys/types.h>
|
|
#endif
|
|
|
|
#include <string.h>
|
|
|
|
#include <glib.h>
|
|
#include <epan/packet.h>
|
|
#include "packet-dcerpc.h"
|
|
#include "packet-dcerpc-dce122.h"
|
|
|
|
#define AFS_SETMODTIME 1
|
|
#define AFS_SETOWNER 2
|
|
#define AFS_SETGROUP 4
|
|
#define AFS_SETMODE 8
|
|
#define AFS_SETACCESSTIME 0x10
|
|
#define AFS_SETCHANGETIME 0x20
|
|
#define AFS_SETLENGTH 0x40
|
|
#define AFS_SETTYPEUUID 0x80
|
|
#define AFS_SETDEVNUM 0x100
|
|
#define AFS_SETMODEXACT 0x200
|
|
#define AFS_SETTRUNCLENGTH 0x400
|
|
#define AFS_SETCLIENTSPARE 0x800
|
|
|
|
#define TKN_LOCK_READ 0x001
|
|
#define TKN_LOCK_WRITE 0x002
|
|
#define TKN_DATA_READ 0x004
|
|
#define TKN_DATA_WRITE 0x008
|
|
#define TKN_OPEN_READ 0x010
|
|
#define TKN_OPEN_WRITE 0x020
|
|
#define TKN_OPEN_SHARED 0x040
|
|
#define TKN_OPEN_EXCLUSIVE 0x080
|
|
#define TKN_OPEN_DELETE 0x100
|
|
#define TKN_OPEN_PRESERVE 0x200
|
|
#define TKN_STATUS_READ 0x400
|
|
#define TKN_STATUS_WRITE 0x800
|
|
#define TKN_OPEN_UNLINK 0x1000
|
|
#define TKN_SPOT_HERE 0x2000
|
|
#define TKN_SPOT_THERE 0x4000
|
|
#define TKN_OPEN_NO_READ 0x8000
|
|
#define TKN_OPEN_NO_WRITE 0x10000
|
|
#define TKN_OPEN_NO_UNLINK 0x20000
|
|
|
|
#define AFS_CONN_PARAM_HOSTLIFE 0
|
|
#define AFS_CONN_PARAM_HOSTRPC 1
|
|
#define AFS_CONN_PARAM_DEADSERVER 2
|
|
#define AFS_CONN_PARAM_EPOCH 3
|
|
#define AFS_CONN_PARAM_MAXFILE_CLIENT 4
|
|
#define AFS_CONN_PARAM_MAXFILE_SERVER 5
|
|
#define AFS_CONN_PARAM_HOST_TYPE_CLIENT 6
|
|
#define AFS_CONN_PARAM_HOST_TYPE_SERVER 7
|
|
#define AFS_CONN_PARAM_FT_MASK_CLIENT 8
|
|
#define AFS_CONN_PARAM_FT_MASK_SERVER 9
|
|
#define AFS_CONN_PARAM_SUPPORTS_64BITS 0x10000
|
|
#define AFS_CONN_PARAM_512BYTE_BLOCKS 0x20000
|
|
|
|
#define AFS_FLAG_SEC_SERVICE 0x1
|
|
#define AFS_FLAG_CONTEXT_NEW_IF 0x2
|
|
#define AFS_FLAG_CONTEXT_DO_RESET 0x4
|
|
#define AFS_FLAG_CONTEXT_NEW_ACL_IF 0x8
|
|
#define AFS_FLAG_CONTEXT_NEW_TKN_TYPES 0x10
|
|
|
|
#define AFS_FLAG_RETURNTOKEN 1
|
|
#define AFS_FLAG_TOKENJUMPQUEUE 2
|
|
#define AFS_FLAG_SKIPTOKEN 4
|
|
#define AFS_FLAG_NOOPTIMISM 0x8
|
|
#define AFS_FLAG_TOKENID 0x10
|
|
#define AFS_FLAG_RETURNBLOCKER 0x20
|
|
#define AFS_FLAG_ASYNCGRANT 0x40
|
|
#define AFS_FLAG_NOREVOKE 0x80
|
|
#define AFS_FLAG_MOVE_REESTABLISH 0x100
|
|
#define AFS_FLAG_SERVER_REESTABLISH 0x200
|
|
#define AFS_FLAG_NO_NEW_EPOCH 0x400
|
|
#define AFS_FLAG_MOVE_SOURCE_OK 0x800
|
|
#define AFS_FLAG_SYNC 0x1000
|
|
#define AFS_FLAG_ZERO 0x2000
|
|
#define AFS_FLAG_SKIPSTATUS 0x4000
|
|
#define AFS_FLAG_FORCEREVOCATIONS 0x8000
|
|
#define AFS_FLAG_FORCEVOLQUIESCE 0x10000
|
|
#define AFS_FLAG_FORCEREVOCATIONDOWN 0x20000
|
|
|
|
static int hf_afs4int_opnum = -1;
|
|
|
|
|
|
static int hf_afs4int_afsFid_cell_high = -1;
|
|
static int hf_afs4int_afsuuid_uuid = -1;
|
|
static int hf_afs4int_fetchdata_pipe_t_size = -1;
|
|
static int hf_afs4int_afsNameString_t_principalName_string = -1;
|
|
static int hf_afs4int_afsFid_cell_low = -1;
|
|
static int hf_afs4int_afsFid_volume_high = -1;
|
|
static int hf_afs4int_afsFid_volume_low = -1;
|
|
static int hf_afs4int_afsFid_Vnode = -1;
|
|
static int hf_afs4int_afsFid_Unique = -1;
|
|
static int hf_afs4int_volume_high = -1;
|
|
static int hf_afs4int_volume_low = -1;
|
|
static int hf_afs4int_vnode = -1;
|
|
static int hf_afs4int_unique = -1;
|
|
static int hf_afs4int_interfaceversion = -1;
|
|
static int hf_afs4int_filetype = -1;
|
|
static int hf_afs4int_linkcount = -1;
|
|
static int hf_afs4int_length_high = -1;
|
|
static int hf_afs4int_length_low = -1;
|
|
static int hf_afs4int_dataversion_high = -1;
|
|
static int hf_afs4int_dataversion_low = -1;
|
|
static int hf_afs4int_author = -1;
|
|
static int hf_afs4int_owner = -1;
|
|
static int hf_afs4int_group = -1;
|
|
static int hf_afs4int_calleraccess = -1;
|
|
static int hf_afs4int_anonymousaccess = -1;
|
|
static int hf_afs4int_aclexpirationtime = -1;
|
|
static int hf_afs4int_mode = -1;
|
|
static int hf_afs4int_parentvnode = -1;
|
|
static int hf_afs4int_parentunique = -1;
|
|
static int hf_afs4int_modtime_sec = -1;
|
|
static int hf_afs4int_modtime_msec = -1;
|
|
static int hf_afs4int_changetime_sec = -1;
|
|
static int hf_afs4int_changetime_msec = -1;
|
|
static int hf_afs4int_accesstime_sec = -1;
|
|
static int hf_afs4int_accesstime_msec = -1;
|
|
static int hf_afs4int_servermodtime_sec = -1;
|
|
static int hf_afs4int_servermodtime_msec = -1;
|
|
static int hf_afs4int_typeuuid = -1;
|
|
static int hf_afs4int_objectuuid = -1;
|
|
static int hf_afs4int_devicenumber = -1;
|
|
static int hf_afs4int_blocksused = -1;
|
|
static int hf_afs4int_clientspare1 = -1;
|
|
static int hf_afs4int_devicenumberhighbits = -1;
|
|
static int hf_afs4int_agtypeunique = -1;
|
|
static int hf_afs4int_himaxspare = -1;
|
|
static int hf_afs4int_lomaxspare = -1;
|
|
static int hf_afs4int_pathconfspare = -1;
|
|
static int hf_afs4int_spare4 = -1;
|
|
static int hf_afs4int_spare5 = -1;
|
|
static int hf_afs4int_spare6 = -1;
|
|
static int hf_afs4int_volid_hi = -1;
|
|
static int hf_afs4int_volid_low = -1;
|
|
static int hf_afs4int_vvage = -1;
|
|
static int hf_afs4int_vv_hi = -1;
|
|
static int hf_afs4int_vv_low = -1;
|
|
static int hf_afs4int_vvpingage = -1;
|
|
static int hf_afs4int_vvspare1 = -1;
|
|
static int hf_afs4int_vvspare2 = -1;
|
|
static int hf_afs4int_beginrange = -1;
|
|
static int hf_afs4int_beginrangeext = -1;
|
|
static int hf_afs4int_endrange = -1;
|
|
static int hf_afs4int_endrangeext = -1;
|
|
static int hf_afs4int_expirationtime = -1;
|
|
static int hf_afs4int_tokenid_hi = -1;
|
|
static int hf_afs4int_tokenid_low = -1;
|
|
static int hf_afs4int_type_hi = -1;
|
|
static int hf_afs4int_type_low = -1;
|
|
static int hf_afs4int_tn_length = -1;
|
|
static int hf_afs4int_storestatus_accesstime_sec = -1;
|
|
static int hf_afs4int_storestatus_accesstime_usec = -1;
|
|
static int hf_afs4int_storestatus_changetime_sec = -1;
|
|
static int hf_afs4int_storestatus_changetime_usec = -1;
|
|
static int hf_afs4int_storestatus_clientspare1 = -1;
|
|
static int hf_afs4int_storestatus_cmask = -1;
|
|
static int hf_afs4int_storestatus_devicenumber = -1;
|
|
static int hf_afs4int_storestatus_devicenumberhighbits = -1;
|
|
static int hf_afs4int_storestatus_devicetype = -1;
|
|
static int hf_afs4int_storestatus_group = -1;
|
|
static int hf_afs4int_storestatus_length_high = -1;
|
|
static int hf_afs4int_storestatus_length_low = -1;
|
|
static int hf_afs4int_storestatus_mask = -1;
|
|
static int hf_afs4int_storestatus_mode = -1;
|
|
static int hf_afs4int_storestatus_modtime_sec = -1;
|
|
static int hf_afs4int_storestatus_modtime_usec = -1;
|
|
static int hf_afs4int_storestatus_owner = -1;
|
|
static int hf_afs4int_storestatus_spare1 = -1;
|
|
static int hf_afs4int_storestatus_spare2 = -1;
|
|
static int hf_afs4int_storestatus_spare3 = -1;
|
|
static int hf_afs4int_storestatus_spare4 = -1;
|
|
static int hf_afs4int_storestatus_spare5 = -1;
|
|
static int hf_afs4int_storestatus_spare6 = -1;
|
|
static int hf_afs4int_storestatus_trunc_high = -1;
|
|
static int hf_afsconnparams_mask = -1;
|
|
static int hf_afs4int_storestatus_trunc_low = -1;
|
|
static int hf_afs4int_storestatus_typeuuid = -1;
|
|
static int hf_afs4int_l_end_pos = -1;
|
|
static int hf_afs4int_l_end_pos_ext = -1;
|
|
static int hf_afs4int_l_fstype = -1;
|
|
static int hf_afs4int_l_pid = -1;
|
|
static int hf_afs4int_l_start_pos = -1;
|
|
static int hf_afs4int_l_start_pos_ext = -1;
|
|
static int hf_afs4int_l_sysid = -1;
|
|
static int hf_afs4int_l_type = -1;
|
|
static int hf_afs4int_l_whence = -1;
|
|
static int hf_afs4int_acl_len = -1;
|
|
static int hf_afs4int_st = -1;
|
|
static int hf_afs4int_uint = -1;
|
|
static int hf_afs4int_setcontext_rqst_epochtime = -1;
|
|
static int hf_afs4int_setcontext_rqst_secobjectid = -1;
|
|
static int hf_afs4int_setcontext_rqst_clientsizesattrs = -1;
|
|
static int hf_afs4int_setcontext_rqst_parm7 = -1;
|
|
static int hf_afs4int_afsNetAddr_type = -1;
|
|
static int hf_afs4int_afsNetAddr_data = -1;
|
|
static int hf_afs4int_returntokenidp_high = -1;
|
|
static int hf_afs4int_minvvp_low = -1;
|
|
static int hf_afs4int_position_high = -1;
|
|
static int hf_afs4int_position_low = -1;
|
|
static int hf_afs4int_offsetp_high = -1;
|
|
static int hf_afs4int_nextoffsetp_low = -1;
|
|
static int hf_afs4int_cellidp_high = -1;
|
|
static int hf_afserrorstatus_st = -1;
|
|
static int hf_afs4int_length = -1;
|
|
static int hf_afsconnparams_values = -1;
|
|
static int hf_afs4int_acltype = -1;
|
|
static int hf_afs4int_afsTaggedPath_tp_chars = -1;
|
|
static int hf_afs4int_afsTaggedPath_tp_tag = -1;
|
|
static int hf_afs4int_afsacl_uuid1 = -1;
|
|
static int hf_afs4int_bulkfetchstatus_size = -1;
|
|
static int hf_afs4int_flags = -1;
|
|
static int hf_afs4int_afsreturndesc_tokenid_high = -1;
|
|
static int hf_afs4int_afsreturndesc_tokenid_low = -1;
|
|
static int hf_afs4int_afsreturndesc_type_high = -1;
|
|
static int hf_afs4int_afsreturndesc_type_low = -1;
|
|
static int hf_afs4int_returntokenidp_low = -1;
|
|
static int hf_afs4int_minvvp_high = -1;
|
|
static int hf_afs4int_offsetp_low = -1;
|
|
static int hf_afs4int_nextoffsetp_high = -1;
|
|
static int hf_afs4int_cellidp_low = -1;
|
|
static int hf_afs4int_tn_tag = -1;
|
|
static int hf_afs4int_tn_size = -1;
|
|
static int hf_afs4int_tn_string = -1;
|
|
static int hf_afs4int_bulkfetchvv_numvols = -1;
|
|
static int hf_afs4int_bulkfetchvv_spare1 = -1;
|
|
static int hf_afs4int_bulkfetchvv_spare2 = -1;
|
|
static int hf_afs4int_bulkkeepalive_numexecfids = -1;
|
|
static int hf_afs4int_bulkkeepalive_spare4 = -1;
|
|
static int hf_afs4int_bulkkeepalive_spare2 = -1;
|
|
static int hf_afs4int_bulkkeepalive_spare1 = -1;
|
|
static int hf_afs4int_afsacl_defaultcell_uuid = -1;
|
|
static int hf_afs4int_gettime_syncdispersion = -1;
|
|
static int hf_afs4int_gettime_syncdistance = -1;
|
|
static int hf_afs4int_gettime_usecondsp = -1;
|
|
static int hf_afs4int_readdir_size = -1;
|
|
static int hf_afs4int_afsNameString_t_principalName_size = -1;
|
|
static int hf_afs4int_afsNameString_t_principalName_size2 = -1;
|
|
static int hf_afs4int_afsTaggedPath_tp_length = -1;
|
|
static int hf_afs4int_fstype = -1;
|
|
static int hf_afs4int_gettime_secondsp = -1;
|
|
|
|
static int proto_afs4int = -1;
|
|
|
|
static gint ett_afs4int = -1;
|
|
static gint ett_afs4int_afsFid = -1;
|
|
static gint ett_afs4int_afsReturnDesc = -1;
|
|
static gint ett_afs4int_afsNetAddr = -1;
|
|
static gint ett_afs4int_fetchstatus = -1;
|
|
static gint ett_afs4int_afsflags = -1;
|
|
static gint ett_afs4int_volsync = -1;
|
|
static gint ett_afs4int_minvvp = -1;
|
|
static gint ett_afs4int_afsfidtaggedname = -1;
|
|
static gint ett_afs4int_afstaggedname = -1;
|
|
static gint ett_afs4int_afstoken = -1;
|
|
static gint ett_afs4int_afsstorestatus = -1;
|
|
static gint ett_afs4int_afsRecordLock = -1;
|
|
static gint ett_afs4int_afsAcl = -1;
|
|
static gint ett_afs4int_afsNameString_t = -1;
|
|
static gint ett_afs4int_afsConnParams = -1;
|
|
static gint ett_afs4int_afsErrorStatus = -1;
|
|
static gint ett_afs4int_afsNetData = -1;
|
|
static gint ett_afs4int_afsTaggedPath = -1;
|
|
static gint ett_afs4int_afsBulkStat = -1;
|
|
static gint ett_afs4int_afsuuid = -1;
|
|
static gint ett_afs4int_offsetp = -1;
|
|
static gint ett_afs4int_returntokenidp = -1;
|
|
static gint ett_afs4int_afsbundled_stat = -1;
|
|
|
|
|
|
/* vars for our macro(s) */
|
|
static int hf_error_st = -1;
|
|
static guint32 st;
|
|
static char *st_str;
|
|
|
|
|
|
static e_uuid_t uuid_afs4int =
|
|
{ 0x4d37f2dd, 0xed93, 0x0000, {0x02, 0xc0, 0x37, 0xcf, 0x1e, 0x00, 0x00,
|
|
0x00}
|
|
};
|
|
static guint16 ver_afs4int = 4;
|
|
|
|
/* XXX the only macro that I could not find the right way to convert easily.
|
|
The reason is because we reset col_info if st is non zero for many rpcs.
|
|
This is because on error, many structures are filled with garbage.
|
|
We end up not knowing if data is valid until we get the st var at the very end of the stubdata..
|
|
We can not just jump to the end, because more often than not an extra buffer exists in payload
|
|
after st. Thus we have to advance on each item until we read in ST, then we clear col_info. on error
|
|
A good example is FetchStatus() on a file that returns ENOEXIST.
|
|
inode, volume, etc all will be garbage.
|
|
*/
|
|
|
|
#define MACRO_ST_CLEAR(name) \
|
|
offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_error_st, &st); \
|
|
st_str = val_to_str (st, dce_error_vals, "%u"); \
|
|
if (st){ \
|
|
if (check_col (pinfo->cinfo, COL_INFO)) \
|
|
col_add_fstr (pinfo->cinfo, COL_INFO, "%s st:%s ", name, st_str); \
|
|
}else{ \
|
|
if (check_col (pinfo->cinfo, COL_INFO)) \
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " st:%s ", st_str); \
|
|
}
|
|
|
|
static int
|
|
dissect_afsFid (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
|
|
/*
|
|
afsHyper Cell;
|
|
afsHyper Volume;
|
|
unsigned32 Vnode;
|
|
unsigned32 Unique;
|
|
*/
|
|
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 volume_low, unique, vnode, inode;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "afsFid:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsFid);
|
|
}
|
|
|
|
|
|
offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsFid_cell_high, NULL);
|
|
|
|
offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsFid_cell_low, NULL);
|
|
|
|
offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsFid_volume_high, NULL);
|
|
|
|
offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsFid_volume_low, &volume_low);
|
|
|
|
offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsFid_Vnode, &vnode);
|
|
|
|
offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsFid_Unique, &unique);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " :FSID:%u ", volume_low);
|
|
|
|
if ((vnode == 1) || (vnode == 2))
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, " InFS ");
|
|
}
|
|
else
|
|
{
|
|
inode = ((volume_low << 16) + vnode) & 0x7fffffff;
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " inode:%u ", inode);
|
|
}
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afsConnParams (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
/*
|
|
unsigned32 Mask;
|
|
unsigned32 Values[20];
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 mask, Values[20];
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item =
|
|
proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsConnParams_t:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsConnParams);
|
|
}
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_mask, &mask);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[0]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[1]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[2]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[3]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[4]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[5]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[6]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[7]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[9]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[9]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[10]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[11]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[12]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[13]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[14]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[15]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[16]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[17]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[18]);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afsconnparams_values, &Values[19]);
|
|
if ((mask & AFS_CONN_PARAM_HOSTLIFE) == AFS_CONN_PARAM_HOSTLIFE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":HOSTLIFE");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_HOSTRPC) == AFS_CONN_PARAM_HOSTRPC)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":HOSTRPC");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_DEADSERVER) == AFS_CONN_PARAM_DEADSERVER)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":DEADSERVER");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_EPOCH) == AFS_CONN_PARAM_EPOCH)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":EPOCH");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_MAXFILE_CLIENT) == AFS_CONN_PARAM_MAXFILE_CLIENT)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":MAXFILE_CLIENT");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_MAXFILE_SERVER) == AFS_CONN_PARAM_MAXFILE_SERVER)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":MAXFILE_SERVER");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_HOST_TYPE_CLIENT) ==
|
|
AFS_CONN_PARAM_HOST_TYPE_CLIENT)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":HOST_TYPE_CLIENT");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_HOST_TYPE_SERVER) ==
|
|
AFS_CONN_PARAM_HOST_TYPE_SERVER)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":HOST_TYPE_SERVER");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_FT_MASK_CLIENT) == AFS_CONN_PARAM_FT_MASK_CLIENT)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":FT_MASK_CLIENT");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_FT_MASK_SERVER) == AFS_CONN_PARAM_FT_MASK_SERVER)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":FT_MASK_SERVER");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_SUPPORTS_64BITS) ==
|
|
AFS_CONN_PARAM_SUPPORTS_64BITS)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SUPPORTS_64BITS");
|
|
}
|
|
if ((mask & AFS_CONN_PARAM_512BYTE_BLOCKS) == AFS_CONN_PARAM_512BYTE_BLOCKS)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":512BYTE_BLOCKS");
|
|
}
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" Values:%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u%u",
|
|
Values[0], Values[1], Values[2], Values[3],
|
|
Values[4], Values[5], Values[6], Values[7], Values[8],
|
|
Values[9], Values[10], Values[11], Values[12],
|
|
Values[13], Values[14], Values[15], Values[16],
|
|
Values[17], Values[18], Values[19]);
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afsNameString_t (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
/*
|
|
typedef [string] byte NameString_t[AFS_NAMEMAX];
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
#define AFS_NAMEMAX 256
|
|
guint32 string_size;
|
|
const guint8 *namestring;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item =
|
|
proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsNameString_t:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsNameString_t);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsNameString_t_principalName_size,
|
|
&string_size);
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " String_size:%u", string_size);
|
|
if (string_size < AFS_NAMEMAX)
|
|
{
|
|
/* proto_tree_add_string(tree, id, tvb, start, length, value_ptr); */
|
|
|
|
proto_tree_add_string (tree, hf_afs4int_afsNameString_t_principalName_string, tvb, offset, string_size, tvb_get_ptr (tvb, offset, string_size));
|
|
namestring = tvb_get_ptr (tvb, offset, string_size);
|
|
offset += string_size;
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Principal:%s", namestring);
|
|
}
|
|
else
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" :FIXME!: Invalid string length of %u",
|
|
string_size);
|
|
}
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
static int
|
|
dissect_afsNetAddr (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
|
|
/* unsigned16 type;
|
|
unsigned8 data[14];
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint16 type;
|
|
guint8 data;
|
|
int i;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsNetAddr:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsNetAddr);
|
|
}
|
|
|
|
|
|
offset =
|
|
dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsNetAddr_type, &type);
|
|
|
|
if (type)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Type:%u ", type);
|
|
|
|
|
|
for (i = 0; i < 14; i++)
|
|
{
|
|
|
|
offset =
|
|
dissect_ndr_uint8 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsNetAddr_data, &data);
|
|
|
|
|
|
switch (i)
|
|
{
|
|
case 1:
|
|
if (data)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Port:%u",
|
|
data);
|
|
}
|
|
break;
|
|
case 2:
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " IP:%u.", data);
|
|
break;
|
|
case 3:
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, "%u.", data);
|
|
break;
|
|
case 4:
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, "%u.", data);
|
|
break;
|
|
case 5:
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, "%u", data);
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
offset += 14; /* space left after reading in type for the array. */
|
|
}
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
static int
|
|
dissect_afsNetData (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
/*
|
|
afsNetAddr sockAddr;
|
|
NameString_t principalName;
|
|
*/
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
if (parent_tree)
|
|
{
|
|
item =
|
|
proto_tree_add_text (parent_tree, tvb, offset, -1, "afsNetData:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsNetData);
|
|
}
|
|
|
|
|
|
offset = dissect_afsNetAddr ( tvb, offset, pinfo, tree, drep);
|
|
offset += 4; /* buffer */
|
|
offset = dissect_afsNameString_t ( tvb, offset, pinfo, tree, drep);
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
|
|
}
|
|
|
|
static int
|
|
dissect_afsTaggedPath (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
/*
|
|
codesetTag tp_tag;
|
|
unsigned16 tp_length;
|
|
byte tp_chars[AFS_PATHMAX+1]; 1024+1
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 tp_tag;
|
|
guint16 tp_length;
|
|
const guint8 *tp_chars;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item =
|
|
proto_tree_add_text (parent_tree, tvb, offset, -1, "afsTaggedPath");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsTaggedPath);
|
|
}
|
|
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsTaggedPath_tp_tag, &tp_tag);
|
|
offset =
|
|
dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsTaggedPath_tp_length, &tp_length);
|
|
proto_tree_add_string (tree, hf_afs4int_afsTaggedPath_tp_chars, tvb, offset,
|
|
hf_afs4int_afsTaggedPath_tp_length, tvb_get_ptr (tvb,
|
|
offset,
|
|
tp_length));
|
|
tp_chars = tvb_get_ptr (tvb, offset, 1025);
|
|
offset += 1025;
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " :tp_chars %s", tp_chars);
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afsAcl (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
/*
|
|
unsigned32 afsACL_len;
|
|
[length_is(afsACL_len)] byte afsACL_val[AFS_ACLMAX];
|
|
*/
|
|
|
|
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 acl_len;
|
|
e_uuid_t uuid1, defaultcell;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "afsAcl");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsAcl);
|
|
}
|
|
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_acl_len,
|
|
&acl_len);
|
|
offset += 8; /* bypass spare and duplicate acl_len */
|
|
offset =
|
|
dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsacl_uuid1, &uuid1);
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" - %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
|
uuid1.Data1, uuid1.Data2, uuid1.Data3, uuid1.Data4[0],
|
|
uuid1.Data4[1], uuid1.Data4[2], uuid1.Data4[3],
|
|
uuid1.Data4[4], uuid1.Data4[5], uuid1.Data4[6],
|
|
uuid1.Data4[7]);
|
|
|
|
offset =
|
|
dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsacl_defaultcell_uuid, &defaultcell);
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
|
defaultcell.Data1, defaultcell.Data2, defaultcell.Data3,
|
|
defaultcell.Data4[0], defaultcell.Data4[1],
|
|
defaultcell.Data4[2], defaultcell.Data4[3],
|
|
defaultcell.Data4[4], defaultcell.Data4[5],
|
|
defaultcell.Data4[6], defaultcell.Data4[7]);
|
|
|
|
offset += (acl_len - 38);
|
|
|
|
proto_item_set_len(item, offset-old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
static int
|
|
dissect_afsErrorStatus (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 st;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsErrorStatus");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsErrorStatus);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afserrorstatus_st,
|
|
&st);
|
|
st_str = val_to_str (st, dce_error_vals, "%u");
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " st:%s ", st_str);
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afsRecordLock (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
/*
|
|
signed16 l_type;
|
|
signed16 l_whence;
|
|
unsigned32 l_start_pos;
|
|
unsigned32 l_end_pos;
|
|
unsigned32 l_pid;
|
|
unsigned32 l_sysid;
|
|
unsigned32 l_fstype;
|
|
unsigned32 l_start_pos_ext; was l_spare0: high 32b of l_start_pos
|
|
unsigned32 l_end_pos_ext; was l_spare1: high 32b of l_end_pos
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint16 l_type, l_whence;
|
|
guint32 l_start_pos, l_end_pos, l_pid, l_sysid, l_fstype, l_start_pos_ext,
|
|
l_end_pos_ext;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsRecordLock:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsRecordLock);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep, hf_afs4int_l_type,
|
|
&l_type);
|
|
offset =
|
|
dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep, hf_afs4int_l_whence,
|
|
&l_whence);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_l_start_pos, &l_start_pos);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_l_end_pos,
|
|
&l_end_pos);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_l_pid,
|
|
&l_pid);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_l_sysid,
|
|
&l_sysid);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_l_fstype,
|
|
&l_fstype);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_l_start_pos_ext, &l_start_pos_ext);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_l_end_pos_ext, &l_end_pos_ext);
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afsstorestatus (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
/*
|
|
unsigned32 mask;
|
|
afsTimeval modTime;
|
|
afsTimeval accessTime;
|
|
afsTimeval changeTime;
|
|
unsigned32 owner;
|
|
unsigned32 group;
|
|
unsigned32 mode;
|
|
afsHyper truncLength; applied first
|
|
afsHyper length;
|
|
afsUUID typeUUID;
|
|
unsigned32 deviceType; character or block
|
|
unsigned32 deviceNumber;
|
|
unsigned32 cmask;
|
|
unsigned32 clientSpare1; client-only attrs
|
|
unsigned32 deviceNumberHighBits;
|
|
unsigned32 spare1;
|
|
unsigned32 spare2;
|
|
unsigned32 spare3;
|
|
unsigned32 spare4;
|
|
unsigned32 spare5;
|
|
unsigned32 spare6;
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 mask, modtime_sec, changetime_sec, accesstime_sec, devicenumber,
|
|
clientspare1, devicenumberhighbits, spare1, spare2, spare3, spare4,
|
|
spare5, spare6, accesstime_usec, changetime_usec, owner, group, mode,
|
|
trunc_high, trunc_low, length_high, length_low, devicetype,
|
|
cmask, modtime_usec;
|
|
e_uuid_t typeuuid;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsStoreStatus:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsstorestatus);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_mask, &mask);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_modtime_sec, &modtime_sec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_modtime_usec, &modtime_usec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_accesstime_sec,
|
|
&accesstime_sec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_accesstime_usec,
|
|
&accesstime_usec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_changetime_sec,
|
|
&changetime_sec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_changetime_usec,
|
|
&changetime_usec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_owner, &owner);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_group, &group);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_mode, &mode);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_trunc_high, &trunc_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_trunc_low, &trunc_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_length_high, &length_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_length_low, &length_low);
|
|
offset =
|
|
dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_typeuuid, &typeuuid);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_devicetype, &devicetype);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_devicenumber, &devicenumber);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_cmask, &cmask);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_clientspare1, &clientspare1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_devicenumberhighbits,
|
|
&devicenumberhighbits);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_spare1, &spare1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_spare2, &spare2);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_spare3, &spare3);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_spare4, &spare4);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_spare5, &spare5);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_storestatus_spare6, &spare6);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Mask=");
|
|
if ((mask & AFS_SETMODTIME) == AFS_SETMODTIME)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, ":SETMODTIME-%u.%u",
|
|
modtime_sec, modtime_usec);
|
|
}
|
|
if ((mask & AFS_SETOWNER) == AFS_SETOWNER)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, ":SETOWNER-%u", owner);
|
|
}
|
|
if ((mask & AFS_SETGROUP) == AFS_SETGROUP)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, ":SETGROUP-%u", group);
|
|
}
|
|
if ((mask & AFS_SETMODE) == AFS_SETMODE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, ":SETMODE-%o", mode);
|
|
}
|
|
if ((mask & AFS_SETACCESSTIME) == AFS_SETACCESSTIME)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, ":SETACCESSTIME-%u.%u",
|
|
accesstime_sec, accesstime_usec);
|
|
}
|
|
if ((mask & AFS_SETCHANGETIME) == AFS_SETCHANGETIME)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, ":SETCHANGETIME-%u.%u",
|
|
changetime_sec, changetime_usec);
|
|
}
|
|
if ((mask & AFS_SETLENGTH) == AFS_SETLENGTH)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SETLENGTH");
|
|
}
|
|
if ((mask & AFS_SETTYPEUUID) == AFS_SETTYPEUUID)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SETTYPEUUID");
|
|
}
|
|
if ((mask & AFS_SETDEVNUM) == AFS_SETDEVNUM)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SETDEVNUM");
|
|
}
|
|
if ((mask & AFS_SETMODEXACT) == AFS_SETMODEXACT)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SETMODEXACT");
|
|
}
|
|
if ((mask & AFS_SETTRUNCLENGTH) == AFS_SETTRUNCLENGTH)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SETTRUNCLENGTH");
|
|
}
|
|
if ((mask & AFS_SETCLIENTSPARE) == AFS_SETCLIENTSPARE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SETCLIENTSPARE");
|
|
}
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afstoken (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
/*
|
|
afsHyper tokenID;
|
|
unsigned32 expirationTime;
|
|
afsHyper type;
|
|
unsigned32 beginRange;
|
|
unsigned32 endRange;
|
|
unsigned32 beginRangeExt;
|
|
unsigned32 endRangeExt;
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 tokenid_hi, tokenid_low, expirationtime, type_hi, type_low,
|
|
beginrange, endrange, beginrangeext, endrangeext, type;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "afsToken:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afstoken);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_tokenid_hi,
|
|
&tokenid_hi);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_tokenid_low, &tokenid_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_expirationtime, &expirationtime);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_type_hi,
|
|
&type_hi);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_type_low,
|
|
&type_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_beginrange,
|
|
&beginrange);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_endrange,
|
|
&endrange);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_beginrangeext, &beginrangeext);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_endrangeext, &endrangeext);
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" :Tokenid:%u/%u ExpirationTime:%u beginrange:%u endrange:%u beginrangeext:%u endrangeext:%u",
|
|
tokenid_hi, tokenid_low, expirationtime, beginrange,
|
|
endrange, beginrangeext, endrangeext);
|
|
type = type_low;
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, " Type=");
|
|
|
|
if ((type & TKN_LOCK_READ) == TKN_LOCK_READ)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":LOCK_READ");
|
|
}
|
|
if ((type & TKN_LOCK_WRITE) == TKN_LOCK_WRITE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":LOCK_WRITE");
|
|
}
|
|
if ((type & TKN_DATA_READ) == TKN_DATA_READ)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":DATA_READ");
|
|
}
|
|
if ((type & TKN_DATA_WRITE) == TKN_DATA_WRITE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":DATA_WRITE");
|
|
}
|
|
if ((type & TKN_OPEN_READ) == TKN_OPEN_READ)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_READ");
|
|
}
|
|
if ((type & TKN_OPEN_WRITE) == TKN_OPEN_WRITE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_WRITE");
|
|
}
|
|
if ((type & TKN_OPEN_SHARED) == TKN_OPEN_SHARED)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_SHARED");
|
|
}
|
|
if ((type & TKN_OPEN_EXCLUSIVE) == TKN_OPEN_EXCLUSIVE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_EXCLUSIVE");
|
|
}
|
|
if ((type & TKN_OPEN_DELETE) == TKN_OPEN_DELETE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_DELETE");
|
|
}
|
|
if ((type & TKN_OPEN_PRESERVE) == TKN_OPEN_PRESERVE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_PRESERVE");
|
|
}
|
|
if ((type & TKN_STATUS_READ) == TKN_STATUS_READ)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":STATUS_READ");
|
|
}
|
|
if ((type & TKN_STATUS_WRITE) == TKN_STATUS_WRITE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":STATUS_WRITE");
|
|
}
|
|
if ((type & TKN_OPEN_UNLINK) == TKN_OPEN_UNLINK)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_UNLINK");
|
|
}
|
|
if ((type & TKN_SPOT_HERE) == TKN_SPOT_HERE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SPOT_HERE");
|
|
}
|
|
if ((type & TKN_SPOT_THERE) == TKN_SPOT_THERE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SPOT_THERE");
|
|
}
|
|
if ((type & TKN_OPEN_NO_READ) == TKN_OPEN_NO_READ)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_NO_READ");
|
|
}
|
|
if ((type & TKN_OPEN_NO_WRITE) == TKN_OPEN_NO_WRITE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_NO_WRITE");
|
|
}
|
|
if ((type & TKN_OPEN_NO_UNLINK) == TKN_OPEN_NO_UNLINK)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":OPEN_NO_UNLINK");
|
|
}
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afstaggedname (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
/*
|
|
codesetTag tn_tag;
|
|
unsigned16 tn_length;
|
|
byte tn_chars[AFS_NAMEMAX+1];
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 tn_tag;
|
|
guint16 tn_length;
|
|
const guint8 *tn_string;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsTaggedName:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afstaggedname);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_tn_tag,
|
|
&tn_tag);
|
|
offset =
|
|
dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep, hf_afs4int_tn_length,
|
|
&tn_length);
|
|
if (tn_length < 254)
|
|
{
|
|
proto_tree_add_string (tree, hf_afs4int_tn_string, tvb, offset,
|
|
hf_afs4int_tn_size, tvb_get_ptr (tvb, offset,
|
|
tn_length));
|
|
tn_string = tvb_get_ptr (tvb, offset, 257);
|
|
offset += 257;
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " :tn_tag: %s", tn_string);
|
|
}
|
|
else
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" :FIXME!: Invalid string length of %u", tn_length);
|
|
}
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afsfidtaggedname (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
/*
|
|
afsFid fid;
|
|
afsTaggedName name;
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"FidTaggedName:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsfidtaggedname);
|
|
}
|
|
offset = dissect_afsFid (tvb, offset, pinfo, tree, drep);
|
|
offset = dissect_afstaggedname (tvb, offset, pinfo, tree, drep);
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
|
|
}
|
|
|
|
static int
|
|
dissect_minvvp (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
|
|
/* unsigned32 minvvp_high
|
|
unsigned32 minvvp_low
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 minvvp_high, minvvp_low;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "minVVp:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_minvvp);
|
|
}
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_minvvp_high, &minvvp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_minvvp_low,
|
|
&minvvp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " minVVp:%u/%u", minvvp_high,
|
|
minvvp_low);
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
static int
|
|
dissect_afsuuid (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
|
|
/* uuid UUID
|
|
*/
|
|
/*HEREN*/
|
|
|
|
e_uuid_t uuid1;
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "afsUUID:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsuuid);
|
|
}
|
|
|
|
offset = dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep, hf_afs4int_afsuuid_uuid, &uuid1);
|
|
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO)) col_append_fstr (pinfo->cinfo, COL_INFO, ":%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", uuid1.Data1, uuid1.Data2, uuid1.Data3, uuid1.Data4[0], uuid1.Data4[1], uuid1.Data4[2], uuid1.Data4[3], uuid1.Data4[4], uuid1.Data4[5], uuid1.Data4[6], uuid1.Data4[7]);
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
static int
|
|
dissect_offsetp (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
|
|
/* unsigned32 offsetp_high
|
|
unsigned32 offsetp_low
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 offsetp_high, offsetp_low;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "minVVp:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_offsetp);
|
|
}
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_offsetp_high, &offsetp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_offsetp_low,
|
|
&offsetp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " offsetp:%u/%u", offsetp_high,
|
|
offsetp_low);
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
static int
|
|
dissect_returntokenidp (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
|
|
/* unsigned32 returntokenidp_high
|
|
unsigned32 returntokenidp_low
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 returntokenidp_high, returntokenidp_low;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "returnTokenIDp:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_returntokenidp);
|
|
}
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_returntokenidp_high, &returntokenidp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_returntokenidp_low,
|
|
&returntokenidp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " returnTokenIDp:%u/%u", returntokenidp_high,
|
|
returntokenidp_low);
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
static int
|
|
dissect_volsync (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
/*
|
|
afsHyper VolID;
|
|
afsHyper VV; volume's version
|
|
unsigned32 VVAge; age, in seconds, of the knowledge that the
|
|
given VolVers is current
|
|
unsigned32 VVPingAge; age, in seconds, of the last probe from
|
|
the callee (the secondary) to the primary
|
|
unsigned32 vv_spare1;
|
|
unsigned32 vv_spare2;
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 volid_hi, volid_low, vv_hi, vv_low, vvage, vvpingage, vvspare1,
|
|
vvspare2;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"AfsVolSync:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_volsync);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_volid_hi,
|
|
&volid_hi);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_volid_low,
|
|
&volid_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_vv_hi,
|
|
&vv_hi);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_vv_low,
|
|
&vv_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_vvage,
|
|
&vvage);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_vvpingage,
|
|
&vvpingage);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_vvspare1,
|
|
&vvspare1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_vvspare2,
|
|
&vvspare2);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" volid_hi:%u volid_low:%u vv_hi:%u vv_low:%u vvage:%u vvpingage:%u vvpspare1:%u vvspare2:%u",
|
|
volid_hi, volid_low, vv_hi, vv_low, vvage, vvpingage,
|
|
vvspare1, vvspare2);
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
|
|
}
|
|
|
|
static int
|
|
dissect_afsFlags (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep)
|
|
{
|
|
|
|
|
|
/*
|
|
unsigned32 flags
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 flags;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "AfsFlags:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsflags);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_flags,
|
|
&flags);
|
|
|
|
if (flags)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, " Flags=");
|
|
if ((flags & AFS_FLAG_RETURNTOKEN) == AFS_FLAG_RETURNTOKEN)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":RETURNTOKEN");
|
|
}
|
|
if ((flags & AFS_FLAG_TOKENJUMPQUEUE) == AFS_FLAG_TOKENJUMPQUEUE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":TOKENJUMPQUEUE");
|
|
}
|
|
if ((flags & AFS_FLAG_SKIPTOKEN) == AFS_FLAG_SKIPTOKEN)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SKIPTOKEN");
|
|
}
|
|
if ((flags & AFS_FLAG_NOOPTIMISM) == AFS_FLAG_NOOPTIMISM)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":NOOPTIMISM");
|
|
}
|
|
if ((flags & AFS_FLAG_TOKENID) == AFS_FLAG_TOKENID)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":TOKENID");
|
|
}
|
|
if ((flags & AFS_FLAG_RETURNBLOCKER) == AFS_FLAG_RETURNBLOCKER)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":RETURNBLOCKER");
|
|
}
|
|
if ((flags & AFS_FLAG_ASYNCGRANT) == AFS_FLAG_ASYNCGRANT)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":ASYNCGRANT");
|
|
}
|
|
if ((flags & AFS_FLAG_NOREVOKE) == AFS_FLAG_NOREVOKE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":NOREVOKE");
|
|
}
|
|
if ((flags & AFS_FLAG_MOVE_REESTABLISH) == AFS_FLAG_MOVE_REESTABLISH)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":MOVE_REESTABLISH");
|
|
}
|
|
if ((flags & AFS_FLAG_SERVER_REESTABLISH) ==
|
|
AFS_FLAG_SERVER_REESTABLISH)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SERVER_REESTABLISH");
|
|
}
|
|
if ((flags & AFS_FLAG_NO_NEW_EPOCH) == AFS_FLAG_NO_NEW_EPOCH)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":NO_NEW_EPOCH");
|
|
}
|
|
if ((flags & AFS_FLAG_MOVE_SOURCE_OK) == AFS_FLAG_MOVE_SOURCE_OK)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":MOVE_SOURCE_OK");
|
|
}
|
|
if ((flags & AFS_FLAG_SYNC) == AFS_FLAG_SYNC)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SYNC");
|
|
}
|
|
if ((flags & AFS_FLAG_ZERO) == AFS_FLAG_ZERO)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":ZERO");
|
|
}
|
|
if ((flags & AFS_FLAG_SKIPSTATUS) == AFS_FLAG_SKIPSTATUS)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SKIPSTATUS");
|
|
}
|
|
if ((flags & AFS_FLAG_FORCEREVOCATIONS) == AFS_FLAG_FORCEREVOCATIONS)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":FORCEREVOCATIONS");
|
|
}
|
|
if ((flags & AFS_FLAG_FORCEVOLQUIESCE) == AFS_FLAG_FORCEVOLQUIESCE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":FORCEVOLQUIESCE");
|
|
}
|
|
if ((flags & AFS_FLAG_SEC_SERVICE) == AFS_FLAG_SEC_SERVICE)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":SEC_SERVICE");
|
|
}
|
|
if ((flags & AFS_FLAG_CONTEXT_NEW_ACL_IF) ==
|
|
AFS_FLAG_CONTEXT_NEW_ACL_IF)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO, ":CONTEXT_NEW_ACL_IF");
|
|
}
|
|
}
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_fetchstatus (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
/*
|
|
unsigned32 interfaceVersion;
|
|
unsigned32 fileType;
|
|
unsigned32 linkCount;
|
|
afsHyper length;
|
|
afsHyper dataVersion;
|
|
unsigned32 author;
|
|
unsigned32 owner;
|
|
unsigned32 group;
|
|
unsigned32 callerAccess;
|
|
unsigned32 anonymousAccess;
|
|
unsigned32 aclExpirationTime;
|
|
unsigned32 mode;
|
|
unsigned32 parentVnode;
|
|
unsigned32 parentUnique;
|
|
afsTimeval modTime;
|
|
afsTimeval changeTime;
|
|
afsTimeval accessTime;
|
|
afsTimeval serverModTime;
|
|
afsUUID typeUUID;
|
|
afsUUID objectUUID;
|
|
unsigned32 deviceNumber;
|
|
unsigned32 blocksUsed;
|
|
unsigned32 clientSpare1; * client-only attrs *
|
|
unsigned32 deviceNumberHighBits;
|
|
unsigned32 spare0;
|
|
unsigned32 spare1;
|
|
unsigned32 spare2;
|
|
unsigned32 spare3;
|
|
unsigned32 spare4;
|
|
unsigned32 spare5;
|
|
unsigned32 spare6;
|
|
*/
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 interfaceversion, filetype, linkcount, length_high, length_low,
|
|
dataversion_high, dataversion_low, author, owner, group, calleraccess,
|
|
anonymousaccess, aclexpirationtime, mode, parentvnode, parentunique,
|
|
modtime_sec, modtime_msec, changetime_sec, changetime_msec,
|
|
accesstime_sec, accesstime_msec, servermodtime_msec, servermodtime_sec,
|
|
devicenumber, blocksused, clientspare1, devicenumberhighbits,
|
|
agtypeunique, himaxspare, lomaxspare, pathconfspare, spare4, spare5,
|
|
spare6;
|
|
e_uuid_t typeuuid, objectuuid;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"FetchStatus:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_fetchstatus);
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_interfaceversion, &interfaceversion);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_filetype,
|
|
&filetype);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_linkcount,
|
|
&linkcount);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_length_high, &length_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_length_low,
|
|
&length_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_dataversion_high, &dataversion_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_dataversion_low, &dataversion_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_author,
|
|
&author);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_owner,
|
|
&owner);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_group,
|
|
&group);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_calleraccess, &calleraccess);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_anonymousaccess, &anonymousaccess);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_aclexpirationtime, &aclexpirationtime);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_mode,
|
|
&mode);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_parentvnode, &parentvnode);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_parentunique, &parentunique);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_modtime_sec, &modtime_sec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_modtime_msec, &modtime_msec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_changetime_sec, &changetime_sec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_changetime_msec, &changetime_msec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_accesstime_sec, &accesstime_sec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_accesstime_msec, &accesstime_msec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_servermodtime_sec, &servermodtime_sec);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_servermodtime_msec, &servermodtime_msec);
|
|
offset =
|
|
dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep, hf_afs4int_typeuuid,
|
|
&typeuuid);
|
|
offset =
|
|
dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep, hf_afs4int_objectuuid,
|
|
&objectuuid);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_devicenumber, &devicenumber);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_blocksused,
|
|
&blocksused);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_clientspare1, &clientspare1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_devicenumberhighbits,
|
|
&devicenumberhighbits);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_agtypeunique, &agtypeunique);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_himaxspare,
|
|
&himaxspare);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_lomaxspare,
|
|
&lomaxspare);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_pathconfspare, &pathconfspare);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_spare4,
|
|
&spare4);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_spare5,
|
|
&spare5);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_spare6,
|
|
&spare6);
|
|
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO,
|
|
" :interfacever:%u filetype:%u linkcount:%u length:%u dataver:%u author:%u owner:%u group:%u calleraccess:%u anonaccess:%u aclexpire:%u mode:%u parentvnode:%u parentunique:%u modtimesec:%u changetime_sec:%u accesstime_sec:%u servermodtimesec:%u devicenumber:%u blocksused:%u clientspare:%u devicehighbits:%u agtypeunique:%u",
|
|
interfaceversion, filetype, linkcount, length_low,
|
|
dataversion_low, author, owner, group, calleraccess,
|
|
anonymousaccess, aclexpirationtime, mode, parentvnode,
|
|
parentunique, modtime_sec, changetime_sec,
|
|
accesstime_sec, servermodtime_sec, devicenumber,
|
|
blocksused, clientspare1, devicenumberhighbits,
|
|
agtypeunique);
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
dissect_afsReturnDesc (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree,
|
|
guint8 *drep)
|
|
{
|
|
/*
|
|
afsFid fid; * useful hint *
|
|
afsHyper tokenID;
|
|
afsHyper type; * mask *
|
|
unsigned32 flags; * just in case *
|
|
*/
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
guint32 tokenid_high, tokenid_low, type_high, type_low;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1,
|
|
"afsReturnDesc:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsReturnDesc);
|
|
}
|
|
|
|
|
|
offset = dissect_afsFid ( tvb, offset, pinfo, tree, drep);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsreturndesc_tokenid_high, &tokenid_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsreturndesc_tokenid_low, &tokenid_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsreturndesc_type_high, &type_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_afsreturndesc_type_low, &type_low);
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " TokenId:%u/%u Type:%u/%u",
|
|
tokenid_high, tokenid_low, type_high, type_low);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags: ", -1);
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
dissect_afsReturns (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
|
|
/*
|
|
long afsReturns_len;
|
|
[length_is(afsReturns_len)] afsReturnDesc afsReturns_val[AFS_BULKMAX];
|
|
*/
|
|
|
|
/* this is not really a ucvarray, but with the initial len, we can
|
|
cheat and pretend it is */
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
offset =
|
|
dissect_ndr_ucvarray (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsReturnDesc);
|
|
|
|
return offset;
|
|
}
|
|
|
|
#if 0 /* not used */
|
|
|
|
static int
|
|
dissect_afsbundled_stat (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * parent_tree, guint8 *drep _U_)
|
|
{
|
|
|
|
|
|
proto_item *item = NULL;
|
|
proto_tree *tree = NULL;
|
|
int old_offset = offset;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
if (parent_tree)
|
|
{
|
|
item = proto_tree_add_text (parent_tree, tvb, offset, -1, "afsbundled_stat:");
|
|
tree = proto_item_add_subtree (item, ett_afs4int_afsbundled_stat);
|
|
}
|
|
|
|
/* bundled_stat
|
|
|
|
afsFid fid;
|
|
afsFetchStatus stat;
|
|
afsToken token;
|
|
error_status_t error;
|
|
*/
|
|
|
|
/*
|
|
offset = dissect_afsFid(tvb, offset, pinfo, tree, drep);
|
|
*/
|
|
/* SKIPTOKEN/STAT?
|
|
offset = dissect_fetchstatus(tvb, offset, pinfo, tree, drep);
|
|
offset = dissect_afstoken(tvb, offset, pinfo, tree, drep);
|
|
*/
|
|
/* This is currently under construction as I figure out the reverse layout of the packet. */
|
|
/*
|
|
offset = dissect_afsErrorStatus (tvb, offset, pinfo, tree, drep);
|
|
*/
|
|
|
|
|
|
|
|
|
|
proto_item_set_len (item, offset - old_offset);
|
|
return offset;
|
|
|
|
}
|
|
|
|
#endif /* not used */
|
|
|
|
static int
|
|
dissect_afsBulkStat (tvbuff_t * tvb _U_, int offset,
|
|
packet_info * pinfo _U_, proto_tree * tree _U_,
|
|
guint8 *drep _U_)
|
|
{
|
|
/*
|
|
unsigned32 BulkStat_len;
|
|
[length_is(BulkStat_len)] bundled_stat BulkStat_val[AFS_BULKMAX];
|
|
*/
|
|
/* this is not really a ucvarray, but with the initial len, we can
|
|
cheat and pretend it is */
|
|
/*
|
|
offset = dissect_ndr_ucvarray(tvb, offset, pinfo, tree, drep,
|
|
dissect_afsbundled_stat);
|
|
*/
|
|
|
|
return offset;
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
afs4int_dissect_removefile_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsFidTaggedName *Namep,
|
|
[in] afsHyper *returnTokenIDp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsfidtaggedname, NDR_POINTER_REF,
|
|
"afsFidTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_returntokenidp,
|
|
NDR_POINTER_REF, "afsReturnTokenIDp:", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "afsMinVVp:", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_storedata_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
guint32 position_high, position_low, length;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] afsStoreStatus *InStatusp,
|
|
[in] afsHyper *Position,
|
|
[in] signed32 Length,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
[in] pipe_t *storeStream,
|
|
*/
|
|
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsstorestatus, NDR_POINTER_REF,
|
|
"afsStoreStatus:", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_position_high, &position_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_position_low, &position_low);
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_length, &length);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Position:%u/%u Length:%u",
|
|
position_high, position_low, length);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
/* XXX need to decode pipe_t still here */
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_gettoken_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] afsToken *MinTokenp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
return offset;
|
|
}
|
|
static int
|
|
afs4int_dissect_gettoken_resp (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
dcerpc_info *di;
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsRecordLock *OutBlockerp,
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsRecordLock, NDR_POINTER_REF,
|
|
"afsRecordLock: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "afsFetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsErrorStatus, NDR_POINTER_REF,
|
|
"afsErrorStatus: ", -1);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_lookuproot_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
* [in] afsFid *InFidp,
|
|
* [in] afsHyper *minVVp,
|
|
* [in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_fetchdata_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
guint32 position_high, position_low, length;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] afsHyper *minVVp,
|
|
[in] afsHyper *Position,
|
|
[in] signed32 Length,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_position_high, &position_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_position_low, &position_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_length, &length);
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Position:%u/%u Length:%u",
|
|
position_high, position_low, length);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_fetchacl_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
|
|
guint32 acltype;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] unsigned32 aclType,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_acltype,
|
|
&acltype);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
if (acltype)
|
|
{
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_str (pinfo->cinfo, COL_INFO,
|
|
" :copy the ACL from specified fid:");
|
|
}
|
|
|
|
|
|
return offset;
|
|
}
|
|
static int
|
|
afs4int_dissect_fetchstatus_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
return offset;
|
|
}
|
|
static int
|
|
afs4int_dissect_storeacl_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
guint32 acltype;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] afsACL *AccessListp,
|
|
[in] unsigned32 aclType,
|
|
[in] afsFid *aclFidp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsAcl,
|
|
NDR_POINTER_REF, "afsAcl: ", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_afs4int_acltype,
|
|
&acltype);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " aclType:%u",acltype);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_storestatus_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] afsStoreStatus *InStatusp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsstorestatus, NDR_POINTER_REF,
|
|
"afsStoreStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_createfile_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsTaggedName *Namep,
|
|
[in] afsStoreStatus *InStatusp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsstorestatus, NDR_POINTER_REF,
|
|
"afsStoreStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_rename_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *OldDirFidp,
|
|
[in] afsFidTaggedName *OldNamep,
|
|
[in] afsFid *NewDirFidp,
|
|
[in] afsFidTaggedName *NewNamep,
|
|
[in] afsHyper *returnTokenIDp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsfidtaggedname, NDR_POINTER_REF,
|
|
"afsFidTaggedName: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsFidTaggedName: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_returntokenidp, NDR_POINTER_REF,
|
|
"afsReturnTokenIDp: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_minvvp, NDR_POINTER_REF,
|
|
"afsminVVp: ", -1);
|
|
|
|
offset = dissect_afsFlags(tvb, offset, pinfo, tree, drep);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_symlink_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsTaggedName *Namep,
|
|
[in] afsTaggedPath *LinkContentsp,
|
|
[in] afsStoreStatus *InStatusp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsTaggedPath, NDR_POINTER_REF,
|
|
"afsTaggedPath: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsstorestatus, NDR_POINTER_REF,
|
|
"afsStoreStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset = dissect_afsFlags (tvb, offset, pinfo, tree, drep);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_readdir_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
guint32 size;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsHyper *Offsetp,
|
|
[in] unsigned32 Size,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_offsetp,
|
|
NDR_POINTER_REF, "Offsetp: ", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_readdir_size, &size);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Size:%u", size);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset = dissect_afsFlags ( tvb, offset, pinfo, tree, drep);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_makedir_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsTaggedName *Namep,
|
|
[in] afsStoreStatus *InStatusp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsstorestatus, NDR_POINTER_REF,
|
|
"afsStoreStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset = dissect_afsFlags ( tvb, offset, pinfo, tree, drep);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_removedir_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
guint32 returntokenidp_high, returntokenidp_low;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsFidTaggedName *Namep,
|
|
[in] afsHyper *returnTokenIDp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsfidtaggedname, NDR_POINTER_REF,
|
|
"afsFidTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_returntokenidp_high, &returntokenidp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_returntokenidp_low, &returntokenidp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " returnTokenIDp:%u/%u",
|
|
returntokenidp_high, returntokenidp_low);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset = dissect_afsFlags ( tvb, offset, pinfo, tree, drep );
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_lookup_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsTaggedName *Namep,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset = dissect_afsFlags ( tvb, offset, pinfo, tree, drep);
|
|
|
|
return offset;
|
|
}
|
|
static int
|
|
afs4int_dissect_lookup_resp (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFid *OutFidp,
|
|
[out] afsFetchStatus *OutFidStatusp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("Lookup reply");
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_makemountpoint_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
guint16 type;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsTaggedName *Namep,
|
|
[in] afsTaggedName *cellNamep,
|
|
[in] afsFStype Type,
|
|
[in] afsTaggedName *volumeNamep,
|
|
[in] afsStoreStatus *InStatusp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep, hf_afs4int_fstype,
|
|
&type);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsstorestatus, NDR_POINTER_REF,
|
|
"afsStoreStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
|
|
offset = dissect_afsFlags (tvb, offset, pinfo, tree, drep);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Type:%u", type);
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_setcontext_rqst (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
guint32 epochtime, clientsizesattrs, parm7;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] unsigned32 epochTime,
|
|
[in] afsNetData *callbackAddr,
|
|
[in] unsigned32 Flags,
|
|
[in] afsUUID *secObjectID,
|
|
[in] unsigned32 clientSizesAttrs,
|
|
[in] unsigned32 parm7
|
|
*/
|
|
|
|
|
|
offset =
|
|
dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_setcontext_rqst_epochtime, &epochtime);
|
|
|
|
offset = dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsNetData,
|
|
NDR_POINTER_REF, "afsNetData:", -1);
|
|
|
|
offset = dissect_afsFlags (tvb, offset, pinfo, tree, drep);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO)) col_append_str (pinfo->cinfo, COL_INFO, " setObjectID");
|
|
|
|
offset = dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsuuid,
|
|
NDR_POINTER_REF, "afsUUID:", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_setcontext_rqst_clientsizesattrs,
|
|
&clientsizesattrs);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_setcontext_rqst_parm7, &parm7);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO)) col_append_fstr (pinfo->cinfo, COL_INFO, " epochTime:%u clientSizesAttrs:%u parm7:%u", epochtime, clientsizesattrs, parm7);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_setcontext_resp (tvbuff_t * tvb, int offset,
|
|
packet_info * pinfo, proto_tree * tree,
|
|
guint8 *drep)
|
|
{
|
|
/* nothing but error code */
|
|
|
|
dcerpc_info *di;
|
|
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
MACRO_ST_CLEAR ("SetContext reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_lookuproot_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
* [out] afsFid *OutFidp,
|
|
* [out] afsFetchStatus *OutFidStatusp,
|
|
* [out] afsToken *OutTokenp,
|
|
* [out] afsVolSync *Syncp
|
|
*/
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("LookupRoot reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_fetchdata_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
|
|
dcerpc_info *di;
|
|
guint32 pipe_t_size;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp,
|
|
[out] pipe_t *fetchStream
|
|
*/
|
|
/* The SkipToken/SkipStatus flags are always used in every fetchdata request I have seen.
|
|
There is also not sign of the afsVolSync structure... Just size, and data string... aka pipe_t */
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_fetchdata_pipe_t_size, &pipe_t_size);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_fetchacl_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[out] afsACL *AccessListp,
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsAcl,
|
|
NDR_POINTER_REF, "afsAcl: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("FetchAcl reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_fetchstatus_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("FetchStatus reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_storedata_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("StoreData reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_storeacl_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("StoreAcl reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_storestatus_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("StoreStatus reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_removefile_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsFetchStatus *OutFileStatusp,
|
|
[out] afsFid *OutFileFidp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("RemoveFile reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_createfile_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFid *OutFidp,
|
|
[out] afsFetchStatus *OutFidStatusp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("CreateFile reply");
|
|
|
|
return offset;
|
|
}
|
|
static int
|
|
afs4int_dissect_rename_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutOldDirStatusp,
|
|
[out] afsFetchStatus *OutNewDirStatusp,
|
|
[out] afsFid *OutOldFileFidp,
|
|
[out] afsFetchStatus *OutOldFileStatusp,
|
|
[out] afsFid *OutNewFileFidp,
|
|
[out] afsFetchStatus *OutNewFileStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR("Rename reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_symlink_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFid *OutFidp,
|
|
[out] afsFetchStatus *OutFidStatusp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("Symlink reply");
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_hardlink_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutFidStatusp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("Hardlink reply");
|
|
|
|
return offset;
|
|
}
|
|
static int
|
|
afs4int_dissect_hardlink_rqst
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsTaggedName *Namep,
|
|
[in] afsFid *ExistingFidp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afstaggedname, NDR_POINTER_REF,
|
|
"afsTaggedName: ", -1);
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
|
|
offset = dissect_afsFlags ( tvb, offset, pinfo, tree, drep);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_makedir_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFid *OutFidp,
|
|
[out] afsFetchStatus *OutFidStatusp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
|
|
MACRO_ST_CLEAR ("MakeDir reply");
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_removedir_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsFid *OutFidp,
|
|
[out] afsFetchStatus *OutDelStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("RemoveDir reply");
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_readdir_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
|
|
guint32 nextoffsetp_high, nextoffsetp_low;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[out] afsHyper *NextOffsetp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp,
|
|
[out] pipe_t *dirStream
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_nextoffsetp_high, &nextoffsetp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_nextoffsetp_low, &nextoffsetp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " NextOffsetp:%u/%u",
|
|
nextoffsetp_high, nextoffsetp_low);
|
|
|
|
/* all packets seem to have SKIPTOKEN/SKIPSTATUS sent, and thus these structures are missing on calls holding tokens. */
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
/* XXX need to add pipe_t here, once figured out. */
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_releasetokens_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/* no out */
|
|
MACRO_ST_CLEAR ("ReleaseTokens reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_releasetokens_rqst
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsReturns *Tokens_Arrayp,
|
|
[in] unsigned32 Flags
|
|
*/
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsReturns,
|
|
NDR_POINTER_REF, "afsReturns: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags: ", -1);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_gettime_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
|
|
guint32 secondsp, usecondsp, syncdistance, syncdispersion;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] unsigned32 *Secondsp,
|
|
[out] unsigned32 *USecondsp,
|
|
[out] unsigned32 *SyncDistance,
|
|
[out] unsigned32 *SyncDispersion
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_gettime_secondsp, &secondsp);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_gettime_usecondsp, &usecondsp);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_gettime_syncdistance, &syncdistance);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_gettime_syncdispersion, &syncdispersion);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO)) col_append_fstr (pinfo->cinfo, COL_INFO, " Secondsp:%u Usecondsp:%u SyncDistance:/%u SyncDispersion:%u", secondsp, usecondsp, syncdistance, syncdispersion);
|
|
|
|
MACRO_ST_CLEAR ("GetTime reply");
|
|
|
|
return offset;
|
|
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_gettime_rqst
|
|
(tvbuff_t *
|
|
tvb _U_, int offset, packet_info * pinfo, proto_tree * tree _U_, guint8 *drep _U_)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/* nothing */
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_processquota_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in,out] afsQuota *quotaListp,
|
|
[out] afsFetchStatus *OutStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
|
|
/* XXX need afsQuota */
|
|
offset += 92;
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("ProcessQuota reply");
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_processquota_rqst
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsFid *Fidp,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
[in,out] afsQuota *quotaListp,
|
|
*/
|
|
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset = dissect_afsFlags ( tvb, offset, pinfo, tree, drep);
|
|
|
|
/* XXX need to figure out afsQuota here */
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_getserverinterfaces_rqst
|
|
(tvbuff_t *
|
|
tvb _U_, int offset, packet_info * pinfo, proto_tree * tree _U_, guint8 *drep _U_)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in, out] dfs_interfaceList *serverInterfacesP
|
|
*/
|
|
/* XXX figure out dfs_interfacelist */
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_getserverinterfaces_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in, out] dfs_interfaceList *serverInterfacesP
|
|
*/
|
|
/* XXX figure out dfs_interfacelist */
|
|
|
|
MACRO_ST_CLEAR ("GetServerInterfaces reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_setparams_rqst
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] unsigned32 Flags,
|
|
[in, out] afsConnParams *paramsP
|
|
*/
|
|
offset = dissect_afsFlags( tvb, offset, pinfo, tree, drep);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsConnParams, NDR_POINTER_REF,
|
|
"afsConnParams:", -1);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_setparams_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in, out] afsConnParams *paramsP
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
|
|
dissect_afsConnParams, NDR_POINTER_REF,
|
|
"afsConnParams:", -1);
|
|
MACRO_ST_CLEAR ("SetParams reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_makemountpoint_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsFid *OutFidp,
|
|
[out] afsFetchStatus *OutFidStatusp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsVolSync *Syncp
|
|
*/
|
|
/* afsFid */
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
MACRO_ST_CLEAR ("MakeMountPoint reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_getstatistics_rqst
|
|
(tvbuff_t *
|
|
tvb _U_, int offset, packet_info * pinfo, proto_tree * tree _U_, guint8 *drep _U_)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/* nothing for request */
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_getstatistics_resp
|
|
(tvbuff_t *
|
|
tvb _U_, int offset, packet_info * pinfo, proto_tree * tree _U_, guint8 *drep _U_)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsStatistics *Statisticsp
|
|
*/
|
|
/* XXX figure out afsStatistics */
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_bulkfetchvv_rqst
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
|
|
guint32 cellidp_high, cellidp_low, numvols, spare1, spare2;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsHyper *cellIdp,
|
|
[in] afsBulkVolIDs *VolIDsp,
|
|
[in] unsigned32 NumVols,
|
|
[in] unsigned32 Flags,
|
|
[in] unsigned32 spare1,
|
|
[in] unsigned32 spare2,
|
|
*/
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_cellidp_high, &cellidp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_cellidp_low, &cellidp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " CellIDp:%u/%u", cellidp_high,
|
|
cellidp_low);
|
|
|
|
/* XXX figure out the afsBulkVolIDS */
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkfetchvv_numvols, &numvols);
|
|
|
|
offset = dissect_afsFlags (tvb, offset, pinfo, tree, drep);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkfetchvv_spare1, &spare1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkfetchvv_spare2, &spare2);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_bulkfetchvv_resp
|
|
(tvbuff_t *
|
|
tvb _U_, int offset, packet_info * pinfo, proto_tree * tree _U_, guint8 *drep _U_)
|
|
{
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] afsBulkVVs *VolVVsp,
|
|
[out] unsigned32 *spare4
|
|
*/
|
|
/* XXX need to figure out afsBulkVVs ; */
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_bulkkeepalive_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
guint32 spare4;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] unsigned32 *spare4
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkkeepalive_spare4, &spare4);
|
|
MACRO_ST_CLEAR ("BulkKeepAlive reply");
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_bulkkeepalive_rqst
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
guint32 numexecfids, spare1, spare2;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[in] afsBulkFEX *KAFEXp,
|
|
[in] unsigned32 numExecFids,
|
|
[in] unsigned32 Flags,
|
|
[in] unsigned32 spare1,
|
|
[in] unsigned32 spare2,
|
|
*/
|
|
/* XXX figure out afsBulkFEX */
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkkeepalive_numexecfids, &numexecfids);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFlags,
|
|
NDR_POINTER_REF, "afsFlags:", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkkeepalive_spare1, &spare1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkkeepalive_spare2, &spare2);
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_bulkfetchstatus_rqst
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
guint32 offsetp_high, offsetp_low, size;
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
|
|
/*
|
|
[in] afsFid *DirFidp,
|
|
[in] afsHyper *Offsetp,
|
|
[in] unsigned32 Size,
|
|
[in] afsHyper *minVVp,
|
|
[in] unsigned32 Flags,
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsFid,
|
|
NDR_POINTER_REF, "afsFid: ", -1);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_offsetp_high, &offsetp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_offsetp_low, &offsetp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " Offsetp:%u/%u", offsetp_high,
|
|
offsetp_low);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_bulkfetchstatus_size, &size);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_minvvp,
|
|
NDR_POINTER_REF, "MinVVp:", -1);
|
|
offset = dissect_afsFlags(tvb, offset, pinfo, tree, drep);
|
|
|
|
return offset;
|
|
}
|
|
|
|
static int
|
|
afs4int_dissect_bulkfetchstatus_resp
|
|
(tvbuff_t *
|
|
tvb, int offset, packet_info * pinfo, proto_tree * tree, guint8 *drep)
|
|
{
|
|
|
|
dcerpc_info *di;
|
|
|
|
di = pinfo->private_data;
|
|
if (di->conformant_run)
|
|
{
|
|
return offset;
|
|
}
|
|
|
|
/*
|
|
[out] BulkStat *bulkstats,
|
|
[out] afsHyper *NextOffsetp,
|
|
[out] afsFetchStatus *OutDirStatusp,
|
|
[out] afsToken *OutTokenp,
|
|
[out] afsVolSync *Syncp,
|
|
[out] pipe_t *dirStream
|
|
*/
|
|
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afsBulkStat,
|
|
NDR_POINTER_REF, "BulkStat: ", -1);
|
|
/* Under construction. The packet seems to have the pipe_t before the rest of the data listed in idl. */
|
|
|
|
/*
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_nextoffsetp_high, &nextoffsetp_high);
|
|
offset =
|
|
dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
|
|
hf_afs4int_nextoffsetp_low, &nextoffsetp_low);
|
|
|
|
if (check_col (pinfo->cinfo, COL_INFO))
|
|
col_append_fstr (pinfo->cinfo, COL_INFO, " NextOffsetp:%u/%u",
|
|
nextoffsetp_high, nextoffsetp_low);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_fetchstatus,
|
|
NDR_POINTER_REF, "FetchStatus: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_afstoken,
|
|
NDR_POINTER_REF, "afsToken: ", -1);
|
|
offset =
|
|
dissect_ndr_pointer (tvb, offset, pinfo, tree, drep, dissect_volsync,
|
|
NDR_POINTER_REF, "VolSync: ", -1);
|
|
*/
|
|
/* XXX figure out pipe_t */
|
|
|
|
return offset;
|
|
}
|
|
|
|
static dcerpc_sub_dissector afs4int_dissectors[] = {
|
|
{ 0, "SetContext", afs4int_dissect_setcontext_rqst, afs4int_dissect_setcontext_resp} ,
|
|
{ 1, "LookupRoot", afs4int_dissect_lookuproot_rqst, afs4int_dissect_lookuproot_resp} ,
|
|
{ 2, "FetchData", afs4int_dissect_fetchdata_rqst, afs4int_dissect_fetchdata_resp} ,
|
|
{ 3, "FetchAcl", afs4int_dissect_fetchacl_rqst, afs4int_dissect_fetchacl_resp} ,
|
|
{ 4, "FetchStatus", afs4int_dissect_fetchstatus_rqst, afs4int_dissect_fetchstatus_resp} ,
|
|
{ 5, "StoreData", afs4int_dissect_storedata_rqst, afs4int_dissect_storedata_resp} ,
|
|
{ 6, "StoreAcl", afs4int_dissect_storeacl_rqst, afs4int_dissect_storeacl_resp} ,
|
|
{ 7, "StoreStatus", afs4int_dissect_storestatus_rqst, afs4int_dissect_storestatus_resp} ,
|
|
{ 8, "RemoveFile", afs4int_dissect_removefile_rqst, afs4int_dissect_removefile_resp} ,
|
|
{ 9, "CreateFile", afs4int_dissect_createfile_rqst, afs4int_dissect_createfile_resp} ,
|
|
{ 10, "Rename", afs4int_dissect_rename_rqst, afs4int_dissect_rename_resp} ,
|
|
{ 11, "Symlink", afs4int_dissect_symlink_rqst, afs4int_dissect_symlink_resp} ,
|
|
{ 12, "HardLink", afs4int_dissect_hardlink_rqst, afs4int_dissect_hardlink_resp} ,
|
|
{ 13, "MakeDir", afs4int_dissect_makedir_rqst, afs4int_dissect_makedir_resp} ,
|
|
{ 14, "RemoveDir", afs4int_dissect_removedir_rqst, afs4int_dissect_removedir_resp} ,
|
|
{ 15, "Readdir", afs4int_dissect_readdir_rqst, afs4int_dissect_readdir_resp} ,
|
|
{ 16, "Lookup", afs4int_dissect_lookup_rqst, afs4int_dissect_lookup_resp} ,
|
|
{ 17, "GetToken", afs4int_dissect_gettoken_rqst, afs4int_dissect_gettoken_resp} ,
|
|
{ 18, "ReleaseTokens", afs4int_dissect_releasetokens_rqst, afs4int_dissect_releasetokens_resp} ,
|
|
{ 19, "GetTime", afs4int_dissect_gettime_rqst, afs4int_dissect_gettime_resp} ,
|
|
{ 20, "MakeMountPoint", afs4int_dissect_makemountpoint_rqst, afs4int_dissect_makemountpoint_resp} ,
|
|
{ 21, "GetStatistics", afs4int_dissect_getstatistics_rqst, afs4int_dissect_getstatistics_resp} ,
|
|
{ 22, "BulkFetchVV", afs4int_dissect_bulkfetchvv_rqst, afs4int_dissect_bulkfetchvv_resp} ,
|
|
{ 23, "BulkKeepAlive", afs4int_dissect_bulkkeepalive_rqst, afs4int_dissect_bulkkeepalive_resp} ,
|
|
{ 24, "ProcessQuota", afs4int_dissect_processquota_rqst, afs4int_dissect_processquota_resp} ,
|
|
{ 25, "GetServerInterfaces", afs4int_dissect_getserverinterfaces_rqst, afs4int_dissect_getserverinterfaces_resp} ,
|
|
{ 26, "SetParams", afs4int_dissect_setparams_rqst, afs4int_dissect_setparams_resp} ,
|
|
{ 27, "BulkFetchStatus", afs4int_dissect_bulkfetchstatus_rqst, afs4int_dissect_bulkfetchstatus_resp} ,
|
|
{ 0, NULL, NULL, NULL}
|
|
,
|
|
};
|
|
void
|
|
proto_register_afs4int (void)
|
|
{
|
|
|
|
|
|
static hf_register_info hf[] = {
|
|
{ &hf_error_st, {"AFS4Int Error Status Code", "afs4int.st", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_flags, {"DFS Flags", "afs4int.flags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_tn_string, {"String ", "afs4int.string", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_tn_size, {"String Size", "afs4int.tn_size", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_opnum, {"Operation", "afs4int.opnum", FT_UINT16, BASE_DEC, NULL, 0x0, "Operation", HFILL}},
|
|
{ &hf_afs4int_setcontext_rqst_epochtime, {"EpochTime:", "afs4int.setcontext_rqst_epochtime", FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_setcontext_rqst_secobjectid, { "SetObjectid:", "afs4int.setcontext_secobjextid", FT_STRING, BASE_NONE, NULL, 0x0, "UUID", HFILL} } ,
|
|
{ &hf_afs4int_setcontext_rqst_clientsizesattrs, { "ClientSizeAttrs:", "afs4int.setcontext_clientsizesattrs", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_setcontext_rqst_parm7, { "Parm7:", "afs4int.setcontext.parm7", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_acl_len, {"Acl Length", "afs4int.acl_len", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_acltype, {"afs4int.acltype", "afs4int.acltype", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_minvvp_high, {"afs4int.minvvp_high", "afs4int.minvvp_high", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_minvvp_low, {"afs4int.minvvp_low", "afs4int.minvvp_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_volume_low, { "afs4int.volume_low", "afs4int.volume_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_volume_high, { "afs4int.volume_high", "afs4int.volume_high", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_vnode, { "afs4int.vnode", "afs4int.vnode", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_unique, { "afs4int.unique", "afs4int.unique", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_accesstime_msec, { "afs4int.accesstime_msec", "afs4int.accesstime_msec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_accesstime_sec, { "afs4int.accesstime_sec", "afs4int.accesstime_sec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_aclexpirationtime, { "afs4int.aclexpirationtime", "afs4int.aclexpirationtime", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_agtypeunique, { "afs4int.agtypeunique", "afs4int.agtypeunique", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_anonymousaccess, { "afs4int.anonymousaccess", "afs4int.anonymousaccess", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_author, { "afs4int.author", "afs4int.author", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_blocksused, { "afs4int.blocksused", "afs4int.blocksused", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} },
|
|
{ &hf_afs4int_calleraccess, { "afs4int.calleraccess", "afs4int.calleraccess", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_changetime_msec, { "afs4int.changetime_msec", "afs4int.changetime_msec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_changetime_sec, { "afs4int.changetime_sec", "afs4int.changetime_sec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_clientspare1, { "afs4int.clientspare1", "afs4int.clientspare1", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_dataversion_high, { "afs4int.dataversion_high", "afs4int.dataversion_high", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_dataversion_low, { "afs4int.dataversion_low", "afs4int.dataversion_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_devicenumber, { "afs4int.devicenumber", "afs4int.devicenumber", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_devicenumberhighbits, { "afs4int.devicenumberhighbits", "afs4int.devicenumberhighbits", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_filetype, { "afs4int.filetype", "afs4int.filetype", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_group, { "afs4int.group", "afs4int.group", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_himaxspare, { "afs4int.himaxspare", "afs4int.himaxspare", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_interfaceversion, { "afs4int.interfaceversion", "afs4int.interfaceversion", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_length_high, { "afs4int.length_high", "afs4int.length_high", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_length_low, { "afs4int.length_low", "afs4int.length_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_linkcount, { "afs4int.linkcount", "afs4int.linkcount", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_lomaxspare, { "afs4int.lomaxspare", "afs4int.lomaxspare", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_mode, { "afs4int.mode", "afs4int.mode", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_modtime_msec, { "afs4int.modtime_msec", "afs4int.modtime_msec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_modtime_sec, { "afs4int.modtime_sec", "afs4int.modtime_sec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_objectuuid, { "afs4int.objectuuid", "afs4int.objectuuid", FT_STRING, BASE_NONE, NULL, 0x0, "UUID", HFILL} } ,
|
|
{ &hf_afs4int_owner, { "afs4int.owner", "afs4int.owner", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_parentunique, { "afs4int.parentunique", "afs4int.parentunique", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_parentvnode, { "afs4int.parentvnode", "afs4int.parentvnode", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_pathconfspare, { "afs4int.pathconfspare", "afs4int.pathconfspare", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_servermodtime_msec, { "afs4int.servermodtime_msec", "afs4int.servermodtime_msec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_servermodtime_sec, { "afs4int.servermodtime_sec", "afs4int.servermodtime_sec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_spare4, { "afs4int.spare4", "afs4int.spare4", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_spare5, { "afs4int.spare5", "afs4int.spare5", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_spare6, { "afs4int.spare6", "afs4int.spare6", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_typeuuid, { "afs4int.typeuuid", "afs4int.typeuuid", FT_STRING, BASE_NONE, NULL, 0x0, "UUID", HFILL} } ,
|
|
{ &hf_afs4int_volid_hi, { "afs4int.volid_hi", "afs4int.volid_hi", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_volid_low, { "afs4int.volid_low", "afs4int.volid_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_vvage, { "afs4int.vvage", "afs4int.vvage", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_vv_hi, { "afs4int.vv_hi", "afs4int.vv_hi", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_vv_low, { "afs4int.vv_low", "afs4int.vv_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_vvpingage, { "afs4int.vvpingage", "afs4int.vvpingage", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_vvspare1, { "afs4int.vvspare1", "afs4int.vvspare1", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_vvspare2, { "afs4int.vvspare2", "afs4int.vvspare2", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_beginrange, { "afs4int.beginrange", "afs4int.beginrange", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_beginrangeext, { "afs4int.beginrangeext", "afs4int.beginrangeext", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_endrange, { "afs4int.endrange", "afs4int.endrange", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_endrangeext, { "afs4int.endrangeext", "afs4int.endrangeext", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_expirationtime, { "afs4int.expirationtime", "afs4int.expirationtime", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_tokenid_hi, { "afs4int.tokenid_hi", "afs4int.tokenid_hi", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_tokenid_low, { "afs4int.tokenid_low", "afs4int.tokenid_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_type_hi, { "afs4int.type_hi", "afs4int.type_hi", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_type_low, { "afs4int.type_low", "afs4int.type_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_tn_length, { "afs4int.tn_length", "afs4int.tn_length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_tn_tag, { "afs4int.tn_tag", "afs4int.tn_tag", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_accesstime_sec, { "afs4int.storestatus_accesstime_sec", "afs4int.storestatus_accesstime_sec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_accesstime_usec, { "afs4int.storestatus_accesstime_usec", "afs4int.storestatus_accesstime_usec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_changetime_sec, { "afs4int.storestatus_changetime_sec", "afs4int.storestatus_changetime_sec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_changetime_usec, { "afs4int.storestatus_changetime_usec", "afs4int.storestatus_changetime_usec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_clientspare1, { "afs4int.storestatus_clientspare1", "afs4int.storestatus_clientspare1", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_cmask, { "afs4int.storestatus_cmask", "afs4int.storestatus_cmask", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_devicenumber, { "afs4int.storestatus_devicenumber", "afs4int.storestatus_devicenumber", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_devicenumberhighbits, { "afs4int.storestatus_devicenumberhighbits", "afs4int.storestatus_devicenumberhighbits", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_devicetype, { "afs4int.storestatus_devicetype", "afs4int.storestatus_devicetype", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_group, { "afs4int.storestatus_group", "afs4int.storestatus_group", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_length_high, { "afs4int.storestatus_length_high", "afs4int.storestatus_length_high", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_length_low, { "afs4int.storestatus_length_low", "afs4int.storestatus_length_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_mask, { "afs4int.storestatus_mask", "afs4int.storestatus_mask", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_mode, { "afs4int.storestatus_mode", "afs4int.storestatus_mode", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_modtime_sec, { "afs4int.storestatus_modtime_sec", "afs4int.storestatus_modtime_sec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_modtime_usec, { "afs4int.storestatus_modtime_usec", "afs4int.storestatus_modtime_usec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_owner, { "afs4int.storestatus_owner", "afs4int.storestatus_owner", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_spare1, { "afs4int.storestatus_spare1", "afs4int.storestatus_spare1", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_spare2, { "afs4int.storestatus_spare2", "afs4int.storestatus_spare2", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_spare3, { "afs4int.storestatus_spare3", "afs4int.storestatus_spare3", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_spare4, { "afs4int.storestatus_spare4", "afs4int.storestatus_spare4", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_spare5, { "afs4int.storestatus_spare5", "afs4int.storestatus_spare5", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_spare6, { "afs4int.storestatus_spare6", "afs4int.storestatus_spare6", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_trunc_high, { "afs4int.storestatus_trunc_high", "afs4int.storestatus_trunc_high", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_trunc_low, { "afs4int.storestatus_trunc_low", "afs4int.storestatus_trunc_low", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_storestatus_typeuuid, { "afs4int.storestatus_typeuuid", "afs4int.storestatus_typeuuid", FT_STRING, BASE_NONE, NULL, 0x0, "UUID", HFILL} } ,
|
|
{ &hf_afs4int_st, { "afs4int.st", "afs4int.st", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_uint, {"afs4int.uint", "afs4int.uint", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{ &hf_afs4int_l_end_pos, { "afs4int.l_end_pos", "afs4int.l_end_pos", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_end_pos_ext, { "afs4int.l_end_pos_ext", "afs4int.l_end_pos_ext", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_fstype, { "afs4int.l_fstype", "afs4int.l_fstype", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_pid, { "afs4int.l_pid", "afs4int.l_pid", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_start_pos, { "afs4int.l_start_pos", "afs4int.l_start_pos", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_start_pos_ext, { "afs4int.l_start_pos_ext", "afs4int.l_start_pos_ext", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_sysid, { "afs4int.l_sysid", "afs4int.l_sysid", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_type, { "afs4int.l_type", "afs4int.l_type", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{ &hf_afs4int_l_whence, { "afs4int.l_whence", "afs4int.l_whence", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL} } ,
|
|
{&hf_afsconnparams_mask,
|
|
{"hf_afsconnparams_mask", "hf_afsconnparams_mask",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{&hf_afsconnparams_values,
|
|
{"hf_afsconnparams_values", "hf_afsconnparams_values",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsFid_cell_high,
|
|
{"Cell High", "afs4int.afsFid.cell_high", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"afsFid Cell High", HFILL}},
|
|
{&hf_afs4int_afsFid_cell_low,
|
|
{"Cell Low", "afs4int.afsFid.cell_low", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"afsFid Cell Low", HFILL}},
|
|
{&hf_afs4int_afsFid_volume_high,
|
|
{"Volume High", "afs4int.afsFid.volume_high", FT_UINT32, BASE_HEX, NULL,
|
|
0x0, "afsFid Volume High", HFILL}},
|
|
{&hf_afs4int_afsFid_volume_low,
|
|
{"Volume Low", "afs4int.afsFid.volume_low", FT_UINT32, BASE_HEX, NULL,
|
|
0x0, "afsFid Volume Low", HFILL}},
|
|
{&hf_afs4int_afsFid_Vnode,
|
|
{"Vnode", "afs4int.afsFid.Vnode", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"afsFid Vnode", HFILL}},
|
|
{&hf_afs4int_afsFid_Unique,
|
|
{"Unique", "afs4int.afsFid.Unique", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"afsFid Unique", HFILL}},
|
|
{&hf_afs4int_afsNetAddr_type,
|
|
{"Type", "afsNetAddr.type", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsNetAddr_data,
|
|
{"IP Data", "afsNetAddr.data", FT_UINT8, BASE_DEC, NULL, 0x0, "",
|
|
HFILL}},
|
|
{&hf_afs4int_position_high,
|
|
{"Position High", "afs4int.position_high", FT_UINT32, BASE_HEX, NULL,
|
|
0x0, "", HFILL}},
|
|
{&hf_afs4int_position_low,
|
|
{"Position Low", "afs4int.position_low", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"", HFILL}},
|
|
{&hf_afs4int_afsreturndesc_tokenid_high,
|
|
{"Tokenid High", "afs4int.afsreturndesc_tokenid_high", FT_UINT32,
|
|
BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsreturndesc_tokenid_low,
|
|
{"Tokenid low", "afs4int.afsreturndesc_tokenid_low", FT_UINT32, BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsreturndesc_type_high,
|
|
{"Type high", "afs4int.type_high", FT_UINT32, BASE_HEX, NULL, 0x0, "",
|
|
HFILL}},
|
|
{&hf_afs4int_afsreturndesc_type_low,
|
|
{"Type low", "afs4int.type_low", FT_UINT32, BASE_HEX, NULL, 0x0, "",
|
|
HFILL}},
|
|
{&hf_afs4int_offsetp_high,
|
|
{"offset high", "afs4int.offset_high", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"", HFILL}},
|
|
{&hf_afs4int_offsetp_low,
|
|
{"offset high", "afs4int.offset_high", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"", HFILL}},
|
|
{&hf_afs4int_nextoffsetp_high,
|
|
{"next offset high", "afs4int.nextoffset_high", FT_UINT32, BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_nextoffsetp_low,
|
|
{"next offset low", "afs4int.nextoffset_low", FT_UINT32, BASE_HEX, NULL,
|
|
0x0, "", HFILL}},
|
|
{&hf_afs4int_returntokenidp_high,
|
|
{"return token idp high", "afs4int.returntokenidp_high", FT_UINT32,
|
|
BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_returntokenidp_low,
|
|
{"return token idp low", "afs4int.returntokenidp_low", FT_UINT32,
|
|
BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_cellidp_high,
|
|
{"cellidp high", "afs4int.cellidp_high", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"", HFILL}},
|
|
{&hf_afs4int_cellidp_low,
|
|
{"cellidp low", "afs4int.cellidp_low", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"", HFILL}},
|
|
{&hf_afserrorstatus_st,
|
|
{"AFS Error Code", "afs4int.afserrortstatus_st", FT_UINT32, BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_length,
|
|
{"Length", "afs4int.length", FT_UINT32, BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsTaggedPath_tp_chars,
|
|
{"AFS Tagged Path", "afs4int.TaggedPath_tp_chars", FT_STRING, BASE_NONE,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsTaggedPath_tp_tag,
|
|
{"AFS Tagged Path Name", "afs4int.TaggedPath_tp_tag", FT_UINT32,
|
|
BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsacl_uuid1,
|
|
{"AFS ACL UUID1", "afs4int.afsacl_uuid1", FT_STRING, BASE_NONE,
|
|
NULL, 0x0, "UUID", HFILL}},
|
|
{&hf_afs4int_bulkfetchstatus_size,
|
|
{"BulkFetchStatus Size", "afs4int.bulkfetchstatus_size", FT_UINT32,
|
|
BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_bulkfetchvv_numvols,
|
|
{"afs4int.bulkfetchvv_numvols", "afs4int.bulkfetchvv_numvols",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_bulkfetchvv_spare1,
|
|
{"afs4int.bulkfetchvv_spare1", "afs4int.bulkfetchvv_spare1",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_bulkfetchvv_spare2,
|
|
{"afs4int.bulkfetchvv_spare2", "afs4int.bulkfetchvv_spare2",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_bulkkeepalive_numexecfids, {"BulkKeepAlive numexecfids", "afs4int.bulkkeepalive_numexecfids", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_bulkkeepalive_spare4,
|
|
{"BulkKeepAlive spare4", "afs4int.bulkfetchkeepalive_spare2",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_bulkkeepalive_spare2,
|
|
{"BulkKeepAlive spare2", "afs4int.bulkfetchkeepalive_spare2",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_bulkkeepalive_spare1,
|
|
{"BulkFetch KeepAlive spare1", "afs4int.bulkfetchkeepalive_spare1",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsacl_defaultcell_uuid,
|
|
{"Default Cell UUID",
|
|
"afs4int.defaultcell_uuid", FT_STRING, BASE_NONE, NULL, 0x0,
|
|
"UUID", HFILL}},
|
|
{&hf_afs4int_afsuuid_uuid,
|
|
{"AFS UUID",
|
|
"afs4int.uuid", FT_STRING, BASE_NONE, NULL, 0x0,
|
|
"UUID", HFILL}},
|
|
{&hf_afs4int_gettime_syncdispersion,
|
|
{"GetTime Syncdispersion",
|
|
"afs4int.gettime_syncdispersion", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"", HFILL}},
|
|
{&hf_afs4int_gettime_syncdistance,
|
|
{"SyncDistance", "afs4int.gettime.syncdistance",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_gettime_usecondsp,
|
|
{"GetTime usecondsp", "afs4int.gettime_usecondsp",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_readdir_size,
|
|
{"Readdir Size", "afs4int.readdir.size", FT_UINT32,
|
|
BASE_HEX, NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsNameString_t_principalName_size,
|
|
{"Principal Name Size",
|
|
"afs4int.principalName_size", FT_UINT32, BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsNameString_t_principalName_size2,
|
|
{"Principal Name Size2",
|
|
"afs4int.principalName_size2", FT_UINT32, BASE_HEX,
|
|
NULL, 0x0, "", HFILL}},
|
|
{&hf_afs4int_afsTaggedPath_tp_length,
|
|
{"Tagged Path Length",
|
|
"afs4int.afsTaggedPath_length", FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"", HFILL}},
|
|
{&hf_afs4int_fstype,
|
|
{"Filetype", "afs4int.fstype", FT_UINT32, BASE_HEX, NULL,
|
|
0x0, "", HFILL}},
|
|
{&hf_afs4int_gettime_secondsp,
|
|
{"GetTime secondsp", "afs4int.gettime_secondsp", FT_UINT32,
|
|
BASE_HEX, NULL,
|
|
0x0, "", HFILL}},
|
|
{&hf_afs4int_afsNameString_t_principalName_string,
|
|
{"Principal Name", "afs4int.NameString_principal", FT_STRING,
|
|
BASE_NONE, NULL,
|
|
0x0, "", HFILL}},
|
|
{&hf_afs4int_fetchdata_pipe_t_size,
|
|
{"FetchData Pipe_t size", "afs4int.fetchdata_pipe_t_size", FT_STRING,
|
|
BASE_NONE, NULL,
|
|
0x0, "", HFILL}},
|
|
};
|
|
static gint *ett[] = {
|
|
&ett_afs4int,
|
|
&ett_afs4int_afsReturnDesc,
|
|
&ett_afs4int_afsFid,
|
|
&ett_afs4int_afsNetAddr,
|
|
&ett_afs4int_fetchstatus,
|
|
&ett_afs4int_afsflags,
|
|
&ett_afs4int_volsync,
|
|
&ett_afs4int_minvvp,
|
|
&ett_afs4int_afsfidtaggedname,
|
|
&ett_afs4int_afstaggedname,
|
|
&ett_afs4int_afstoken,
|
|
&ett_afs4int_afsstorestatus,
|
|
&ett_afs4int_afsRecordLock,
|
|
&ett_afs4int_afsAcl,
|
|
&ett_afs4int_afsNameString_t,
|
|
&ett_afs4int_afsConnParams,
|
|
&ett_afs4int_afsErrorStatus,
|
|
&ett_afs4int_afsTaggedPath,
|
|
&ett_afs4int_afsNetData,
|
|
&ett_afs4int_afsBulkStat,
|
|
&ett_afs4int_afsuuid,
|
|
&ett_afs4int_offsetp,
|
|
&ett_afs4int_returntokenidp,
|
|
&ett_afs4int_afsbundled_stat,
|
|
};
|
|
proto_afs4int = proto_register_protocol ("DFS Calls", "DCE_DFS", "dce_dfs");
|
|
proto_register_field_array (proto_afs4int, hf, array_length (hf));
|
|
proto_register_subtree_array (ett, array_length (ett));
|
|
}
|
|
|
|
void
|
|
proto_reg_handoff_afs4int (void)
|
|
{
|
|
/*
|
|
* Register the protocol as dcerpc
|
|
*/
|
|
dcerpc_init_uuid (proto_afs4int, ett_afs4int, &uuid_afs4int, ver_afs4int,
|
|
afs4int_dissectors, hf_afs4int_opnum);
|
|
}
|