forked from osmocom/wireshark
176 lines
4.9 KiB
Text
176 lines
4.9 KiB
Text
A note about PIDL generated files
|
|
=================================
|
|
|
|
Quick guide
|
|
===========
|
|
|
|
for file in *.idl */*.idl; do
|
|
echo "Generating dissector for $file"
|
|
../../../tools/pidl/pidl --includedir . --ws-parser -- $file;
|
|
done
|
|
cp packet-dcerpc*.* ..
|
|
|
|
Complete infos
|
|
==============
|
|
|
|
The following files:
|
|
../packet-dcerpc-atsvc.h
|
|
../packet-dcerpc-budb.c
|
|
../packet-dcerpc-budb.h
|
|
../packet-dcerpc-butc.c
|
|
../packet-dcerpc-butc.h
|
|
../packet-dcerpc-dfs.h
|
|
../packet-dcerpc-dnsserver.h
|
|
../packet-dcerpc-drsuapi.c
|
|
../packet-dcerpc-drsuapi.h
|
|
../packet-dcerpc-dssetup.h
|
|
../packet-dcerpc-efs.h
|
|
../packet-dcerpc-eventlog.h
|
|
../packet-dcerpc-frsrpc.h
|
|
../packet-dcerpc-frstrans.h
|
|
../packet-dcerpc-initshutdown.h
|
|
../packet-dcerpc-lsa.h
|
|
../packet-dcerpc-mapi.h
|
|
../packet-dcerpc-misc.h
|
|
../packet-dcerpc-nspi.h
|
|
../packet-dcerpc-rfr.h
|
|
../packet-dcerpc-samr.h
|
|
../packet-dcerpc-srvsvc.h
|
|
../packet-dcerpc-winreg.h
|
|
../packet-dcerpc-wkssvc.h
|
|
../packet-dcerpc-wzcsvc.h
|
|
|
|
are automatically generated via a tool called "pidl"; you shouldn't
|
|
modify them manually.
|
|
|
|
The pidl tool is maintained by the Samba project (http://samba.org,
|
|
samba-technical@samba.org). We have a version in ../../../tools/pidl;
|
|
it currently differs from the Samba version only in its Wireshark-parser
|
|
generator, as we had to change it to reflect some API differences
|
|
between the current Wireshark release and the development trunk.
|
|
|
|
The Samba version can be fetched from their git tree:
|
|
git clone git://git.samba.org/samba.git
|
|
|
|
Running pidl
|
|
============
|
|
|
|
You have to run the pidl command inside the pidl folder of the wireshark
|
|
source tree.
|
|
|
|
The command to compile file:
|
|
../../../tools/pidl/pidl --includedir . --ws-parser -- <idl-file>
|
|
^^^
|
|
This is *VERY* important
|
|
The command generate 2 files:
|
|
packet-dcerpc-<interfacename>.h
|
|
packet-dcerpc-<interfacename>.c
|
|
|
|
For instance, with the atsvc.idl, the command will be:
|
|
|
|
../../../tools/pidl/pidl --includedir . --ws-parser -- atsvc.idl
|
|
|
|
This will generate 2 files:
|
|
packet-dcerpc-atsvc.h
|
|
packet-dcerpc-atsvc.c
|
|
|
|
If you run outside the dissectors/pidl directory, this *will* result in a
|
|
warning such as:
|
|
|
|
atsvc.idl:5:23: idl_types.h: No such file or directory
|
|
|
|
and *may* result in additional warnings such as:
|
|
|
|
Warning: No conformance file `initshutdown.cnf'
|
|
Unable to handle string with flags STR_LEN4|STR_NOTERM at /usr/lib/perl5/site_perl/5.8.6/Parse/Pidl/Wireshark/NDR.pm line 283.
|
|
|
|
Notes about the in-tree pidl
|
|
============================
|
|
|
|
To allow building Wireshark pidl dissectors without having to
|
|
*explicitly* access a remote git repository, and to allow us to make
|
|
changes to the Wireshark parser generator that the Samba developers
|
|
might not want to make until a new major release of Wireshark comes out,
|
|
so as to allow users to build dissectors to run in the current Wireshark
|
|
release, a copy of pidl is located in tools/pidl.
|
|
|
|
Not compiling idl
|
|
=================
|
|
As of November 23, 2013, the following idl have issues when generating
|
|
and compiling:
|
|
|
|
pidl generates declarations of functions that take a dcerpc_info *
|
|
argument and definitions of those functions that don't:
|
|
|
|
eventlog.idl
|
|
|
|
pidl generates declarations and definitions of functions that take a
|
|
dcerpc_info * argument, but calls to those functions that don't:
|
|
|
|
frsrpc.idl
|
|
|
|
pidl generates code that refers to a type just named "g", perhaps
|
|
because the NDR type is an empty string (not set?) and it's prepending
|
|
"g" to the NDR type:
|
|
|
|
dfs.idl
|
|
|
|
pidl generates code that, after declaring a guint1632 variable, has, on
|
|
the next line, a declaration that has a blank, a letter, and a
|
|
semicolon. It can't handle, for example:
|
|
|
|
typedef enum {
|
|
FRSTRANS_RDC_FILTER_GENERIC = 0x0000,
|
|
FRSTRANS_RDC_FILTER_MAX = 0x0001,
|
|
FRSTRANS_RDC_FILTER_POINT = 0x0002,
|
|
FRSTRANS_RDC_MAX_ALGORITHM = 0x0003
|
|
} frstrans_RdcChunckerAlgorithm;
|
|
|
|
...
|
|
|
|
typedef [switch_type(frstrans_RdcChunckerAlgorithm)] union {
|
|
[case(FRSTRANS_RDC_FILTER_GENERIC)]
|
|
frstrans_RdcParameterGeneric filter_generic;
|
|
[case(FRSTRANS_RDC_FILTER_MAX)]
|
|
frstrans_RdcParameterFilterMax filter_max;
|
|
[case(FRSTRANS_RDC_FILTER_POINT)]
|
|
frstrans_RdcParameterFilterPoint filter_point;
|
|
} frstrans_RdcParameterUnion;
|
|
|
|
typedef struct {
|
|
frstrans_RdcChunckerAlgorithm rdc_chunker_algorithm;
|
|
[switch_is(rdc_chunker_algorithm)] frstrans_RdcParameterUnion u;
|
|
} frstrans_RdcParameters;
|
|
|
|
but there's no reason for it to bother to generate a C variable
|
|
corresponding to that union in the first place - it'd be unused.
|
|
|
|
Samba bug 10291:
|
|
|
|
https://bugzilla.samba.org/show_bug.cgi?id=10291
|
|
|
|
has been filed on this.
|
|
|
|
dfs.idl
|
|
frstrans.idl
|
|
|
|
pidl generates code that passes "*0" rather than "0" as the last
|
|
argument in calls:
|
|
|
|
dfs.idl
|
|
dnsserver.idl
|
|
dssetup.idl
|
|
lsa.idl
|
|
samr.idl
|
|
|
|
pidl generates possibly-incorrect code for these - this needs checking:
|
|
|
|
rfr/rfr.idl
|
|
|
|
pidl rejects these with errors:
|
|
|
|
srvsvc.idl
|
|
wkssvc.cnf
|
|
mapi/mapi.idl
|
|
nspi/nspi.idl
|