summaryrefslogtreecommitdiff
path: root/librpc/idl/dnsp.idl
blob: 7c013db514195f2dfcc5e05bab89c8063d597fd8 (plain)
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
		);
}