1 | #include "idl_types.h"
|
---|
2 |
|
---|
3 | /*
|
---|
4 | IDL structures for DNSP structures
|
---|
5 |
|
---|
6 | See [MS-DNSP].pdf in MCPP for details
|
---|
7 | */
|
---|
8 |
|
---|
9 | import "misc.idl";
|
---|
10 |
|
---|
11 | /*
|
---|
12 | note that this is not a real RPC interface. We are just using PIDL
|
---|
13 | to save us a lot of tedious hand parsing of the dnsRecord
|
---|
14 | attribute. The uuid is randomly generated.
|
---|
15 | */
|
---|
16 | [
|
---|
17 | uuid("bdd66e9e-d45f-4202-85c0-6132edc4f30a"),
|
---|
18 | version(0.0),
|
---|
19 | pointer_default(unique),
|
---|
20 | helper("../librpc/ndr/ndr_dnsp.h"),
|
---|
21 | helpstring("DNSP interfaces")
|
---|
22 | ]
|
---|
23 |
|
---|
24 | interface dnsp
|
---|
25 | {
|
---|
26 | typedef [enum16bit] enum {
|
---|
27 | DNS_TYPE_TOMBSTONE = 0x0,
|
---|
28 | DNS_TYPE_A = 0x1,
|
---|
29 | DNS_TYPE_NS = 0x2,
|
---|
30 | DNS_TYPE_MD = 0x3,
|
---|
31 | DNS_TYPE_MF = 0x4,
|
---|
32 | DNS_TYPE_CNAME = 0x5,
|
---|
33 | DNS_TYPE_SOA = 0x6,
|
---|
34 | DNS_TYPE_MB = 0x7,
|
---|
35 | DNS_TYPE_MG = 0x8,
|
---|
36 | DNS_TYPE_MR = 0x9,
|
---|
37 | DNS_TYPE_NULL = 0xA,
|
---|
38 | DNS_TYPE_WKS = 0xB,
|
---|
39 | DNS_TYPE_PTR = 0xC,
|
---|
40 | DNS_TYPE_HINFO = 0xD,
|
---|
41 | DNS_TYPE_MINFO = 0xE,
|
---|
42 | DNS_TYPE_MX = 0xF,
|
---|
43 | DNS_TYPE_TXT = 0x10,
|
---|
44 | DNS_TYPE_RP = 0x11,
|
---|
45 | DNS_TYPE_AFSDB = 0x12,
|
---|
46 | DNS_TYPE_X25 = 0x13,
|
---|
47 | DNS_TYPE_ISDN = 0x14,
|
---|
48 | DNS_TYPE_RT = 0x15,
|
---|
49 | DNS_TYPE_SIG = 0x18,
|
---|
50 | DNS_TYPE_KEY = 0x19,
|
---|
51 | DNS_TYPE_AAAA = 0x1C,
|
---|
52 | DNS_TYPE_LOC = 0x1D,
|
---|
53 | DNS_TYPE_NXT = 0x1E,
|
---|
54 | DNS_TYPE_SRV = 0x21,
|
---|
55 | DNS_TYPE_ATMA = 0x22,
|
---|
56 | DNS_TYPE_NAPTR = 0x23,
|
---|
57 | DNS_TYPE_DNAME = 0x27,
|
---|
58 | DNS_TYPE_DS = 0x2B,
|
---|
59 | DNS_TYPE_RRSIG = 0x2E,
|
---|
60 | DNS_TYPE_NSEC = 0x2F,
|
---|
61 | DNS_TYPE_DNSKEY= 0x30,
|
---|
62 | DNS_TYPE_DHCID = 0x31,
|
---|
63 | DNS_TYPE_ALL = 0xFF,
|
---|
64 | DNS_TYPE_WINS = 0xFF01,
|
---|
65 | DNS_TYPE_WINSR = 0xFF02
|
---|
66 | } dns_record_type;
|
---|
67 |
|
---|
68 | typedef [enum8bit] enum {
|
---|
69 | DNS_RANK_NONE = 0x00,
|
---|
70 | DNS_RANK_CACHE_BIT = 0x01,
|
---|
71 | DNS_RANK_ROOT_HINT = 0x08,
|
---|
72 | DNS_RANK_OUTSIDE_GLUE = 0x20,
|
---|
73 | DNS_RANK_CACHE_NA_ADDITIONAL = 0x31,
|
---|
74 | DNS_RANK_CACHE_NA_AUTHORITY = 0x41,
|
---|
75 | DNS_RANK_CACHE_A_ADDITIONAL = 0x51,
|
---|
76 | DNS_RANK_CACHE_NA_ANSWER = 0x61,
|
---|
77 | DNS_RANK_CACHE_A_AUTHORITY = 0x71,
|
---|
78 | DNS_RANK_GLUE = 0x80,
|
---|
79 | DNS_RANK_NS_GLUE = 0x82,
|
---|
80 | DNS_RANK_CACHE_A_ANSWER = 0xc1,
|
---|
81 | DNS_RANK_ZONE = 0xf0
|
---|
82 | } dns_record_rank;
|
---|
83 |
|
---|
84 | typedef [public] struct {
|
---|
85 | uint32 serial;
|
---|
86 | uint32 refresh;
|
---|
87 | uint32 retry;
|
---|
88 | uint32 expire;
|
---|
89 | uint32 minimum;
|
---|
90 | dnsp_name mname;
|
---|
91 | dnsp_name rname;
|
---|
92 | } dnsp_soa;
|
---|
93 |
|
---|
94 | typedef [public] struct {
|
---|
95 | uint16 wPriority;
|
---|
96 | dnsp_name nameTarget;
|
---|
97 | } dnsp_mx;
|
---|
98 |
|
---|
99 | typedef [public] struct {
|
---|
100 | dnsp_string cpu;
|
---|
101 | dnsp_string os;
|
---|
102 | } dnsp_hinfo;
|
---|
103 |
|
---|
104 | typedef [public] struct {
|
---|
105 | uint16 wPriority;
|
---|
106 | uint16 wWeight;
|
---|
107 | uint16 wPort;
|
---|
108 | dnsp_name nameTarget;
|
---|
109 | } dnsp_srv;
|
---|
110 |
|
---|
111 | typedef [nodiscriminant,gensize] union {
|
---|
112 | [case(DNS_TYPE_TOMBSTONE)] NTTIME timestamp;
|
---|
113 | [case(DNS_TYPE_A)] [flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
|
---|
114 | [case(DNS_TYPE_NS)] dnsp_name ns;
|
---|
115 | [case(DNS_TYPE_CNAME)] dnsp_name cname;
|
---|
116 | [case(DNS_TYPE_SOA)] [flag(NDR_BIG_ENDIAN)] dnsp_soa soa;
|
---|
117 | [case(DNS_TYPE_MX)] [flag(NDR_BIG_ENDIAN)] dnsp_mx mx;
|
---|
118 | [case(DNS_TYPE_TXT)] dnsp_string txt;
|
---|
119 | [case(DNS_TYPE_PTR)] dnsp_name ptr;
|
---|
120 | [case(DNS_TYPE_HINFO)] dnsp_hinfo hinfo;
|
---|
121 | [case(DNS_TYPE_AAAA)] ipv6address ipv6;
|
---|
122 | [case(DNS_TYPE_SRV)] [flag(NDR_BIG_ENDIAN)] dnsp_srv srv;
|
---|
123 | [default] [flag(NDR_REMAINING)] DATA_BLOB data;
|
---|
124 | } dnsRecordData;
|
---|
125 |
|
---|
126 | /* this is the format for the dnsRecord attribute in the DNS
|
---|
127 | partitions in AD */
|
---|
128 | typedef [public] struct {
|
---|
129 | [value(ndr_size_dnsRecordData(&data,wType,ndr->flags))] uint16 wDataLength;
|
---|
130 | dns_record_type wType;
|
---|
131 | [value(5)] uint8 version;
|
---|
132 | dns_record_rank rank;
|
---|
133 | uint16 flags;
|
---|
134 | uint32 dwSerial;
|
---|
135 | [flag(NDR_BIG_ENDIAN)] uint32 dwTtlSeconds;
|
---|
136 | uint32 dwReserved;
|
---|
137 | uint32 dwTimeStamp;
|
---|
138 | [switch_is(wType)] dnsRecordData data;
|
---|
139 | } dnsp_DnssrvRpcRecord;
|
---|
140 |
|
---|
141 |
|
---|
142 | /*
|
---|
143 | this is a convenience hook for ndrdump
|
---|
144 | */
|
---|
145 | void decode_DnssrvRpcRecord(
|
---|
146 | [in] dnsp_DnssrvRpcRecord blob
|
---|
147 | );
|
---|
148 | }
|
---|