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