diff options
Diffstat (limited to 'epan/dissectors/dcerpc/butc')
-rw-r--r-- | epan/dissectors/dcerpc/butc/butc.cnf | 6 | ||||
-rw-r--r-- | epan/dissectors/dcerpc/butc/butc.idl | 487 | ||||
-rw-r--r-- | epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.c | 71 | ||||
-rw-r--r-- | epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.h | 19 |
4 files changed, 583 insertions, 0 deletions
diff --git a/epan/dissectors/dcerpc/butc/butc.cnf b/epan/dissectors/dcerpc/butc/butc.cnf new file mode 100644 index 00000000..5c67a396 --- /dev/null +++ b/epan/dissectors/dcerpc/butc/butc.cnf @@ -0,0 +1,6 @@ +# +# +TYPE butcNameString_t butc_dissect_NameString_t FT_STRING BASE_NONE 0 NULL 4 +# +UNION_TAG_SIZE tc_statusInfoSwitch 4 +# diff --git a/epan/dissectors/dcerpc/butc/butc.idl b/epan/dissectors/dcerpc/butc/butc.idl new file mode 100644 index 00000000..dfdb28f5 --- /dev/null +++ b/epan/dissectors/dcerpc/butc/butc.idl @@ -0,0 +1,487 @@ +/* This idl file originally came from the DCE project but has been + significantly refactored to pass through the idl2wrs idl-lite + compiler. + + DCE has been released as LGPL, hats off to TheOpenGroup + + + The original copyright of the IDL file follos below: +*/ + +/* + * @OSF_COPYRIGHT@ + * COPYRIGHT NOTICE + * Copyright (c) 1990, 1991, 1992, 1993, 1994 Open Software Foundation, Inc. + * ALL RIGHTS RESERVED (DCE). See the file named COPYRIGHT.DCE for + * the full copyright text. + */ +/* + * HISTORY + * $Log: butc.idl,v $ + * Revision 1.1.41.1 1996/10/02 17:05:24 damon + * Newest DFS from Transarc + * [1996/10/01 18:05:16 damon] + * + * Revision 1.1.35.2 1994/06/09 13:52:46 annie + * fixed copyright in src/file + * [1994/06/08 21:26:40 annie] + * + * Revision 1.1.35.1 1994/02/04 20:06:46 devsrc + * Merged from 1.0.3a to 1.1 + * [1994/02/04 15:06:52 devsrc] + * + * Revision 1.1.33.1 1993/12/07 17:13:22 jaffe + * 1.0.3a update from Transarc + * [1993/12/03 12:59:50 jaffe] + * + * Revision 1.1.2.5 1993/01/18 20:47:57 cjd + * embedded copyright notice + * [1993/01/18 17:33:13 cjd] + * + * Revision 1.1.2.4 1993/01/13 15:53:56 shl + * Transarc delta: cfe-ot6054-genl-and-i18n-spares 1.1 + * Selected comments: + * Add spares to several RPC structures, with two goals: + * - general future usage + * - allow for at least some internationalization designs + * The only tricky part of this work is that the on-the-wire representation for + * directory contents is expanded. + * Transarc delta: vijay-ot6381-correct-handling-of-device-queue-lock 1.4 + * Selected comments: + * + * The aim of this delta is to get bak restore to succeed. The problems in restore + * were some spurious thread exceptions and assertions that made bak dump core. + * Upon investigation it turned out that there were some locking problems in + * backup and butc. The delta cleans up locking in backup and butc. + * The delta is not ready for export. Much more needs to be done to get all the + * locking issues right. This is just a checkpoint. + * Second set of changes to get locking issues in order. This time the changes + * are mostly in bakserver. The changes introduced are + * 1. Establish a global lock so that two RPCs do not interfere with each other. + * This was introduced because there are some global data structures in + * backup that might get affected. These global structures now have + * individual locks to serialize changes. The global lock in temporary, and + * will go away once we have serialized all accesses to all global data + * structures. + * 2. Disable cancels in bakserver RPCs. Care is taken to not disable cancels in + * operations that can be cancelled. There is some more work that needs to be + * done in this area. + * 3. Accesses to the database are controlled by memoryDB.lock. The accesses are + * by means of dbread and dbwrite. The hash tables too are protected by this + * mechanism. + * 4. Changes to the backup database dump code to simplify the dump operation. In + * particular, the Unix pipe mechanism is used to synchronize reader and + * writer without need for condition variables. + * 5. Get rid of any pthread_mutex and pthread_cond operations. Use afslk and + * afsos routines instead. + * 6. Continue the work described by the previous revision of the delta in bak + * and butc. This should be it for changes in bak and butc. + * Fix compilation problems on the RIOS. + * This is hopefully the final revision of this delta. The fixes here are + * 1. Changes to the bakserver and butc RPC interfaces. + * The RPCs that handle variable size arrays now use conformant arrays. + * This avoids allocating lots of memory on the client thread stack which + * was the cause of the exceptions in restoreft. The server allocates + * memory which is freed by the server stub on the way out. The client thread + * frees the memory allocated by the client stub. + * 2. get database dump and restore to handle status correctly. + * 3. Get the locking hierarchy right in bakserver, bak and butc. + * 4. Other minor nits. + * There is still a problem with scantape -dbadd that has to be addressed. With + * this delta, all backup commands should work when used in a straightforward + * manner. Some error cases are still not handled properly though. Subsequent + * deltas would fix those. + * Transarc delta: vijay-ot6604-butc-add-spares 1.1 + * Selected comments: + * + * Add spares to butc structures wherever necessary. + * [1993/01/12 18:39:46 shl] + * + * Revision 1.1.2.3 1992/11/24 15:42:03 bolinger + * Change include file install directory from .../afs to .../dcedfs. + * [1992/11/22 16:10:10 bolinger] + * + * Revision 1.1.2.2 1992/08/31 18:37:26 jaffe + * Transarc delta: cfe-ot4029-portable-rpc-data-types 1.2 + * Selected comments: + * If ``long'' could possibly mean ``64 bits'' any time soon, we need to keep + * our RPC interfaces from breaking. + * More of the same. Forgot a couple of .idl files, and needed to change + * a couple of procedure signatures to match. + * forgot this one too + * [1992/08/28 20:59:01 jaffe] + * + * Revision 1.1 1992/01/19 02:57:17 devrcs + * Initial revision + * + * $EndLog$ + */ + + +/* changed to the following types: + time_t 4 bytes, aligned at 4 bytes holding a unix time_t + uint32 4 byte unsigned integer + int32 4 byte signed integer + + renamed error_status_t WERROR a 32bit integer ststus code + removed handle_t it has no wire encoding + + rewrote the unions so that idl2wrs can parse them + + changed all varying strings to the type butcNameString_t which is + implemented in the template + + changed the structs so they are compatible with idl2wrs + + afshyper is called udlong in idl2wrs 8 bytes, aligned at 4 bytes + + added afsnetaddr definition + +*/ +[ +uuid("1d193c08-000b-11ca-ba1d-02608c2ea96e"), +version(4.0), +/*provider_version(1)*/ +pointer_default(ptr) /* All pointers are by default Full pointers */ +] interface butc +{ + +const long TC_DEFAULT_STACK_SIZE = 153600; /* stack size for tc threads */ +const long TC_MAXGENNAMELEN = 512; /* length of generic name */ +const long TC_MAXDUMPPATH = 256; /* dump path names*/ +const long TC_MAXNAMELEN = 128; /* name length */ +const long TC_MAXFORMATLEN = 100; /*size of the format statement */ +const long TC_MAXHOSTLEN = 128; /*for server/machine names */ +const long TC_MAXTAPELEN = 256; /*max tape name allowed */ +const long TC_STAT_DONE = 1; /* all done */ +const long TC_STAT_OPRWAIT = 2; /* waiting for user interaction */ +const long TC_STAT_DUMP = 4; /* true if dump, false if restore */ +const long TC_STAT_ABORTED = 8; /* the operation was aborted */ +const long TC_STAT_ERROR = 16; /* error ocuured in the operation */ +const long TSK_STAT_FIRST = 0x1; /* get id of first task */ +const long TSK_STAT_END = 0x2; /* no more tasks */ +const long TSK_STAT_NOTFOUND= 0x4; /* couldn't find task id requested */ + +const long TCOP_NONE = 0; +const long TCOP_READLABEL = 1; +const long TCOP_LABELTAPE = 2; +const long TCOP_DUMP = 3; +const long TCOP_RESTORE = 4; +const long TCOP_SCANTAPE = 5; +const long TCOP_SAVEDB = 6; +const long TCOP_RESTOREDB = 7; +const long TCOP_STATUS = 8; +const long TCOP_SPARE = 9; + + +/* restore flags */ +typedef [bitmap32bit] bitmap { + TC_RESTORE_CREATE = 0x00000001, /* create new volume; fail if there */ + TC_RESTORE_INCR = 0x00000002 /* incremental, must already exist */ +} butc_Restore_flags; + + +/*typedef [string] byte butcNameString_t[TC_MAXGENNAMELEN];*/ + +typedef struct { + uint16 type; + uint8 data[14]; +} afsNetAddr; + +typedef struct { + udlong vid; /* volume to dump */ + butcNameString_t name; /* name of volume whose clone is to + be dumped*/ + int32 partition; /* partition at which to find the volume */ + time_t date; /* date from which to do the dump */ + time_t cloneDate; /* clone date of the volume */ + afsNetAddr hostAddr; /* file server for this volume */ + uint32 spare1; + uint32 spare2; + uint32 spare3; + uint32 spare4; +} tc_dumpDesc; + +typedef struct { + int32 frag; /* fragment number, 1..n */ + butcNameString_t tapeName; /*name of tape frag is on*/ + int32 position; /*start position of frag on tape */ + udlong origVid; /* original volume id */ + udlong vid; /* 0 means allocate new volid */ + int32 partition; /* where to restore the volume */ + butc_Restore_flags flags; /* flags */ + afsNetAddr hostAddr; /* file server to restore volume to */ + uint32 realDumpId; /* dump id associated with this tape */ + uint32 spare2; + uint32 spare3; + uint32 spare4; + butcNameString_t oldName; /* volume whose clone is to + be dumped */ + butcNameString_t newName; /* new name suffix */ +} tc_restoreDesc; + +/*describes the current status of a dump */ +typedef struct { + int32 dumpID; /* dump id we're returning */ + int32 bytesDumped; /* bytes dumped so far */ + udlong volumeBeingDumped; /* guess ?*/ + int32 numVolErrs; /* # of volumes that had errors */ + int32 flags; /* true if the dump is done */ + uint32 spare1; + uint32 spare2; + uint32 spare3; + uint32 spare4; +} tc_dumpStat; + +/*identifier for a tape */ +typedef struct { + uint32 size; /* size of tape in bytes */ + uint32 size_ext; + uint32 spare1; + uint32 spare2; + uint32 spare3; + uint32 spare4; + uint32 nameLen; /* length of tape name */ + butcNameString_t name; +} tc_tapeLabel; + + +typedef struct { /* describes a tape sequence */ + int32 id; /* unique id of tapeSet, + assigned by budb */ + butcNameString_t tapeServer; /* name of server where + this tape is */ + butcNameString_t format; /* using printf to make + tape name */ + int32 maxTapes; /* maximum number of tapes in seq. */ + int32 a; int32 b; /* linear transforms for tape */ + int32 expDate; /* expiration date */ + int32 expType; /* absolute or relative expiration */ + uint32 spare1; + uint32 spare2; + uint32 spare3; + uint32 spare4; +} tc_tapeSet; + +/* identifies the tape coordinator interface */ +typedef struct { + int32 tcVersion; /* for the interface & this struct */ + uint32 spare1; + uint32 spare2; + uint32 spare3; + uint32 spare4; +} tc_tcInfo; + +typedef struct { + uint32 tc_restoreArray_len; /* count of restore descriptors */ + [size_is(tc_restoreArray_len),ptr] tc_restoreDesc tc_restoreArray_val[*]; +} tc_restoreArray; + +typedef struct { + uint32 tc_dumpArray_len; /* count of dump descriptors */ + [size_is(tc_dumpArray_len),ptr] tc_dumpDesc tc_dumpArray[*]; +} tc_dumpArray; + +/* interface structure */ +typedef struct { + butcNameString_t dumpPath; /* full dump path */ + butcNameString_t volumeSetName; /* volume set name */ + butcNameString_t dumpName; /* volset.dump */ + tc_tapeSet tapeSet; + int32 parentDumpId; + int32 dumpLevel; + uint32 spare1; + uint32 spare2; + uint32 spare3; + uint32 spare4; +} tc_dumpInterface; + +/* The status structure returns information about the task running in butc. + It contains a union that returns the info about the particular operation + currently running in butc. +*/ +typedef struct { + uint32 nKBytes; /* bytes xferred */ + butcNameString_t volumeName; /* current volume (if any) */ + int32 volsFailed; /* # operation failures */ + uint32 spare1; +} tc_statusInfoSwitchVol; +typedef struct { + tc_tapeLabel tapeLabel; + uint32 spare1; +} tc_statusInfoSwitchLabel; + +/* 32bit tag */ +typedef union { + [case(TCOP_NONE)] uint32 none; + [case(TCOP_DUMP)] tc_statusInfoSwitchVol vol; + [case(TCOP_RESTORE)] tc_statusInfoSwitchVol vol; + [case(TCOP_LABELTAPE)] tc_statusInfoSwitchLabel label; + [case(TCOP_READLABEL)] tc_statusInfoSwitchLabel label; + [case(TCOP_SCANTAPE)] uint32 spare1; + [case(TCOP_STATUS)] uint32 spare2; + [case(TCOP_SAVEDB)] uint32 spare3; + [case(TCOP_RESTOREDB)] uint32 spare4; + [case(TCOP_SPARE)] uint32 spare5; +} tc_statusInfoSwitch; + +typedef struct { + /* general info */ + butcNameString_t taskName; /* task name */ + uint32 flags; /* as above */ + time_t lastPolled; /* last successful poll */ + + /* op specific info */ + tc_statusInfoSwitch info; + uint32 taskId; + + + /* nominal spares */ + uint32 spare2; + uint32 spare3; + uint32 spare4; +} tciStatusS; + +/* + * Procedure Definitions + */ + +/* Start a dump, given a dump set name, a tape set name and the volumes to + * dump. + */ +/* + * provider_version(1) + */ +WERROR BUTC_PerformDump +( + [ref, in] tc_dumpInterface *tcdiPtr, + [ref, in] tc_dumpArray *dumps, + [ref, out] int32 *dumpID +); + +/* Start a restore, given a dump set name, a tape set name and the volumes to + * dump. + */ +/* + * provider_version(1) + */ +WERROR BUTC_PerformRestore +( + [in] butcNameString_t *dumpSetName, + [ref, in] tc_restoreArray *restores, + [ref, out] int32 *dumpID +); + +/* abort a dump */ + +/* + * provider_version(1) + */ +WERROR BUTC_AbortDump +( + [in] int32 dumpID +); + +/* + * provider_version(1) + */ +WERROR BUTC_LabelTape +( + [ref, in] tc_tapeLabel *label, + [ref, out] uint32 *taskId +); + +/* + * provider_version(1) + */ +WERROR BUTC_ReadLabel +( + [ref, out] uint32 *taskId /* unused */ +); + +/* + * provider_version(1) + */ +WERROR BUTC_ScanDumps +( + [in] int32 addDbFlag, + [ref, out] uint32 *taskId +); + +/* For returning information about the butc interface. + * Currently this is just the version number + */ + +/* + * provider_version(1) + */ +WERROR BUTC_TCInfo +( + [ref, out] tc_tcInfo *tciptr +); + +/* for database dump/restores */ + +/* + * provider_version(1) + */ +WERROR BUTC_SaveDb +( + [ref, out] uint32 *taskId +); + +/* + * provider_version(1) + */ +WERROR BUTC_RestoreDb +( + [ref, out] uint32 *taskId +); + +/* new status management */ +/* + * provider_version(1) + */ +WERROR BUTC_EndStatus +( + [in] uint32 taskId +); + +/* + * provider_version(1) + */ +WERROR BUTC_GetStatus +( + [in] uint32 taskId, + [ref, out] tciStatusS *statusPtr +); + +/* + * provider_version(1) + */ +WERROR BUTC_RequestAbort +( + [in] uint32 taskId +); + +/* + * provider_version(1) + */ +WERROR BUTC_ScanStatus +( + [ref, in, out] uint32 *taskId, + [ref, out] tciStatusS *statusPtr, + [ref, in, out] uint32 *flags +); + + +/* + * provider_version(1) + */ + +WERROR BUTC_GetServerInterfaces +( +/* [ref, in, out] dfs_interfaceList *serverInterfacesP*/ +); + +} diff --git a/epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.c b/epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.c new file mode 100644 index 00000000..5d012d36 --- /dev/null +++ b/epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.c @@ -0,0 +1,71 @@ +/* DO NOT EDIT + * This dissector is autogenerated + */ + +/* packet-dcerpc-butc.c + * Routines for BUTC packet disassembly + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "config.h" + +#include <glib.h> +#include <string.h> + +#include <epan/packet.h> +#include "packet-dcerpc.h" +#include "packet-dcerpc-nt.h" +#include "packet-windows-common.h" +#include "packet-dcerpc-butc.h" + +void proto_register_butc(void); +void proto_reg_handoff_butc(void); + +static int proto_butc = -1; +ETH_HF + +ETH_ETT + +static int +butc_dissect_NameString_t(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep, int hf_index, guint32 param _U_) +{ + offset=dissect_ndr_vstring(tvb, offset, pinfo, tree, di, drep, 1, hf_index, FALSE, NULL); + return offset; +} + +ETH_CODE + +void +proto_register_butc(void) +{ + static hf_register_info hf[] = { + +ETH_HFARR + }; + + static gint *ett[] = { +ETH_ETTARR + }; + + proto_butc = proto_register_protocol( + "DCE/RPC BUTC", + "BUTC", "butc"); + proto_register_field_array(proto_butc, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); +} + +static dcerpc_sub_dissector function_dissectors[] = { +ETH_FT + { 0, NULL, NULL, NULL }, +}; + +void +proto_reg_handoff_butc(void) +{ +ETH_HANDOFF +} diff --git a/epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.h b/epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.h new file mode 100644 index 00000000..16832841 --- /dev/null +++ b/epan/dissectors/dcerpc/butc/packet-dcerpc-butc-template.h @@ -0,0 +1,19 @@ +/* DO NOT EDIT + * This dissector is autogenerated + */ +/* packet-dcerpc-butc.h + * Routines for BUTC packet disassembly + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef __PACKET_DCERPC_BUTC_H +#define __PACKET_DCERPC_BUTC_H + +ETH_HDR + +#endif /* packet-dcerpc-butc.h */ |