selftest/Samba4: make use of get_cmd_env_vars() to setup all relevant env variables
[samba.git] / librpc / idl / dnsp.idl
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,public] 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_CERT  = 0x25,
58                 DNS_TYPE_DNAME = 0x27,
59                 DNS_TYPE_DS    = 0x2B,
60                 DNS_TYPE_SSHFP = 0x2C,
61                 DNS_TYPE_IPSECKEY = 0x2D,
62                 DNS_TYPE_RRSIG = 0x2E,
63                 DNS_TYPE_NSEC  = 0x2F,
64                 DNS_TYPE_DNSKEY= 0x30,
65                 DNS_TYPE_DHCID = 0x31,
66                 DNS_TYPE_NSEC3 = 0x32,
67                 DNS_TYPE_NSEC3PARAM = 0x33,
68                 DNS_TYPE_TLSA  = 0x34,
69                 DNS_TYPE_CDS   = 0x3B,
70                 DNS_TYPE_CDNSKEY = 0x3C,
71                 DNS_TYPE_SVCB  = 0x40,
72                 DNS_TYPE_HTTPS = 0x41,
73                 DNS_TYPE_ALL   = 0xFF,
74                 DNS_TYPE_URI   = 0x100,
75                 DNS_TYPE_CAA   = 0x101,
76                 DNS_TYPE_WINS  = 0xFF01,
77                 DNS_TYPE_WINSR = 0xFF02
78         } dns_record_type;
79
80         typedef [bitmap32bit] bitmap {
81                 DNS_RPC_FLAG_SUPPRESS_NOTIFY    = 0x00010000,
82                 DNS_RPC_FLAG_AGING_ON                   = 0x00020000,
83                 DNS_RPC_FLAG_OPEN_ACL                   = 0x00040000,
84                 DNS_RPC_FLAG_RECORD_WIRE_FORMAT         = 0x00100000,
85                 DNS_RPC_FLAG_SUPPRESS_RECORD_UPDATE_PTR = 0x00200000,
86                 DNS_RPC_FLAG_NODE_COMPLETE              = 0x00800000,
87                 DNS_RPC_FLAG_NODE_STICKY                = 0x01000000,
88                 DNS_RPC_FLAG_RECORD_CREATE_PTR  = 0x02000000,
89                 DNS_RPC_FLAG_RECORD_TTL_CHANGE  = 0x04000000,
90                 DNS_RPC_FLAG_RECORD_DEFAULT_TTL = 0x08000000,
91                 DNS_RPC_FLAG_ZONE_DELEGATION    = 0x10000000,
92                 DNS_RPC_FLAG_AUTH_ZONE_ROOT             = 0x20000000,
93                 DNS_RPC_FLAG_ZONE_ROOT                  = 0x40000000,
94                 DNS_RPC_FLAG_CACHE_DATA                 = 0x80000000
95         }
96         dns_rpc_node_flags;
97
98
99         typedef [enum8bit] enum {
100                 DNS_RANK_NONE                   = 0x00,
101                 DNS_RANK_CACHE_BIT              = 0x01,
102                 DNS_RANK_ROOT_HINT              = 0x08,
103                 DNS_RANK_OUTSIDE_GLUE           = 0x20,
104                 DNS_RANK_CACHE_NA_ADDITIONAL    = 0x31,
105                 DNS_RANK_CACHE_NA_AUTHORITY     = 0x41,
106                 DNS_RANK_CACHE_A_ADDITIONAL     = 0x51,
107                 DNS_RANK_CACHE_NA_ANSWER        = 0x61,
108                 DNS_RANK_CACHE_A_AUTHORITY      = 0x71,
109                 DNS_RANK_GLUE                   = 0x80,
110                 DNS_RANK_NS_GLUE                = 0x82,
111                 DNS_RANK_CACHE_A_ANSWER         = 0xc1,
112                 DNS_RANK_ZONE                   = 0xf0
113         } dns_record_rank;
114
115         typedef [v1_enum] enum {
116                 DNS_ZONE_TYPE_CACHE             = 0x00,
117                 DNS_ZONE_TYPE_PRIMARY           = 0x01,
118                 DNS_ZONE_TYPE_SECONDARY         = 0x02,
119                 DNS_ZONE_TYPE_STUB              = 0x03,
120                 DNS_ZONE_TYPE_FORWARDER         = 0x04,
121                 DNS_ZONE_TYPE_SECONDARY_CACHE   = 0x05
122         } dns_zone_type;
123
124         typedef [public,enum8bit] enum {
125                 DNS_ZONE_UPDATE_OFF         = 0x00,
126                 DNS_ZONE_UPDATE_UNSECURE    = 0x01,
127                 DNS_ZONE_UPDATE_SECURE      = 0x02
128         } dns_zone_update;
129
130         typedef [v1_enum] enum {
131                 DSPROPERTY_ZONE_EMPTY                   = 0x00,
132                 DSPROPERTY_ZONE_TYPE                    = 0x01,
133                 DSPROPERTY_ZONE_ALLOW_UPDATE            = 0x02,
134                 DSPROPERTY_ZONE_SECURE_TIME             = 0x08,
135                 DSPROPERTY_ZONE_NOREFRESH_INTERVAL      = 0x10,
136                 DSPROPERTY_ZONE_SCAVENGING_SERVERS      = 0x11,
137                 DSPROPERTY_ZONE_AGING_ENABLED_TIME      = 0x12,
138                 DSPROPERTY_ZONE_REFRESH_INTERVAL        = 0x20,
139                 DSPROPERTY_ZONE_AGING_STATE             = 0x40,
140                 DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME   = 0x80,
141                 DSPROPERTY_ZONE_MASTER_SERVERS          = 0x81,
142                 DSPROPERTY_ZONE_AUTO_NS_SERVERS         = 0x82,
143                 DSPROPERTY_ZONE_DCPROMO_CONVERT         = 0x83,
144                 DSPROPERTY_ZONE_SCAVENGING_SERVERS_DA   = 0x90,
145                 DSPROPERTY_ZONE_MASTER_SERVERS_DA       = 0x91,
146                 DSPROPERTY_ZONE_NS_SERVERS_DA           = 0x92,
147                 DSPROPERTY_ZONE_NODE_DBFLAGS                    = 0x100
148
149         } dns_property_id;
150
151         typedef [enum8bit] enum {
152                 DCPROMO_CONVERT_NONE    = 0x00,
153                 DCPROMO_CONVERT_DOMAIN  = 0x01,
154                 DCPROMO_CONVERT_FOREST  = 0x02
155         } dns_dcpromo_flag;
156
157         typedef [public] struct {
158                 uint32          serial;
159                 uint32          refresh;
160                 uint32          retry;
161                 uint32          expire;
162                 uint32          minimum;
163                 dnsp_name       mname;
164                 dnsp_name       rname;
165         } dnsp_soa;
166
167         typedef [public] struct {
168                 uint16          wPriority;
169                 dnsp_name       nameTarget;
170         } dnsp_mx;
171
172         typedef [public] struct {
173                 dnsp_string     cpu;
174                 dnsp_string     os;
175         } dnsp_hinfo;
176
177         typedef [public] struct {
178                 uint16          wPriority;
179                 uint16          wWeight;
180                 uint16          wPort;
181                 dnsp_name       nameTarget;
182         } dnsp_srv;
183
184         typedef struct {
185                 uint32  addrCount;
186                 uint32 addrArray[addrCount];
187         } dnsp_ip4_array;
188
189         typedef struct {
190                 uint16  family;
191                 [flag(NDR_BIG_ENDIAN)] uint16   port;
192                 [flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
193                 ipv6address ipv6;
194                 uint8   pad[8];
195                 uint32  unused[8];
196         } dnsp_dns_addr;
197
198         typedef [public] struct {
199                 uint32  MaxCount;
200                 uint32  AddrCount;
201                 uint32  Tag;
202                 uint16  Family;
203                 uint16  Reserved0;
204                 uint32  Flags;
205                 uint32  MatchFlag;
206                 uint32  Reserved1;
207                 uint32  Reserved2;
208                 dnsp_dns_addr AddrArray[AddrCount];
209         } dnsp_dns_addr_array;
210
211         typedef [public,nopull,nopush,noprint,gensize] struct {
212                 uint8           count;
213                 dnsp_string     str[count];
214         } dnsp_string_list;
215
216         typedef [nodiscriminant,gensize] union {
217                 [case(DNS_TYPE_TOMBSTONE)]                  NTTIME EntombedTime;
218                 [case(DNS_TYPE_A)] [flag(NDR_BIG_ENDIAN)]   ipv4address ipv4;
219                 [case(DNS_TYPE_NS)]                         dnsp_name ns;
220                 [case(DNS_TYPE_CNAME)]                      dnsp_name cname;
221                 [case(DNS_TYPE_SOA)] [flag(NDR_BIG_ENDIAN)] dnsp_soa soa;
222                 [case(DNS_TYPE_MX)] [flag(NDR_BIG_ENDIAN)]  dnsp_mx mx;
223                 [case(DNS_TYPE_TXT)]                        dnsp_string_list txt;
224                 [case(DNS_TYPE_PTR)]                        dnsp_name ptr;
225                 [case(DNS_TYPE_HINFO)]                      dnsp_hinfo hinfo;
226                 [case(DNS_TYPE_AAAA)]                       ipv6address ipv6;
227                 [case(DNS_TYPE_SRV)] [flag(NDR_BIG_ENDIAN)] dnsp_srv srv;
228                 [default] [flag(NDR_REMAINING)] DATA_BLOB data;
229         } dnsRecordData;
230
231         /* this is the format for the dnsRecord attribute in the DNS
232            partitions in AD */
233         typedef [public] struct {
234                 [value(ndr_size_dnsRecordData(&data,wType,ndr->flags))] uint16 wDataLength;
235                 dns_record_type         wType;
236                 [value(5)] uint8        version;
237                 dns_record_rank         rank;
238                 uint16                  flags;
239                 uint32                  dwSerial;
240                 [flag(NDR_BIG_ENDIAN)]  uint32   dwTtlSeconds;
241                 uint32                  dwReserved;
242                 uint32                  dwTimeStamp;
243                 [switch_is(wType)] dnsRecordData data;
244         } dnsp_DnssrvRpcRecord;
245
246         typedef [nodiscriminant,gensize] union {
247                 [case(DSPROPERTY_ZONE_EMPTY)]                                   ;
248                 [case(DSPROPERTY_ZONE_TYPE)]                    dns_zone_type zone_type;
249                 [case(DSPROPERTY_ZONE_ALLOW_UPDATE)]            dns_zone_update allow_update_flag;
250                 [case(DSPROPERTY_ZONE_SECURE_TIME)]             NTTIME zone_secure_time;
251                 [case(DSPROPERTY_ZONE_NOREFRESH_INTERVAL)]      uint32 norefresh_hours;
252                 [case(DSPROPERTY_ZONE_REFRESH_INTERVAL)]        uint32 refresh_hours;
253                 [case(DSPROPERTY_ZONE_AGING_STATE)]             uint32 aging_enabled;
254                 [case(DSPROPERTY_ZONE_SCAVENGING_SERVERS)]      dnsp_ip4_array servers;
255                 [case(DSPROPERTY_ZONE_AGING_ENABLED_TIME)]      uint32 next_scavenging_cycle_hours;
256                 [case(DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME)]   nstring deleted_by_hostname;
257                 [case(DSPROPERTY_ZONE_MASTER_SERVERS)]          dnsp_ip4_array master_servers;
258                 [case(DSPROPERTY_ZONE_AUTO_NS_SERVERS)]         dnsp_ip4_array ns_servers;
259                 [case(DSPROPERTY_ZONE_DCPROMO_CONVERT)]         dns_dcpromo_flag dcpromo_flag;
260                 [case(DSPROPERTY_ZONE_SCAVENGING_SERVERS_DA)]   dnsp_dns_addr_array s_ns_servers;
261                 [case(DSPROPERTY_ZONE_MASTER_SERVERS_DA)]               dnsp_dns_addr_array z_master_servers;
262                 [case(DSPROPERTY_ZONE_NS_SERVERS_DA)]                   dnsp_dns_addr_array d_ns_servers;
263                 [case(DSPROPERTY_ZONE_NODE_DBFLAGS)]                    dns_rpc_node_flags flags;
264         } dnsPropertyData;
265
266         /* this is the format for the dnsProperty attribute in the DNS
267            partitions in AD */
268         typedef [flag(NDR_NOALIGN),public] struct {
269                 [value(ndr_size_dnsPropertyData(&data,id,ndr->flags))] uint32 wDataLength;
270                 uint32                          namelength;
271                 [value(0)] uint32   flag;
272                 [value(1)] uint32   version;
273                 dns_property_id     id;
274                 [switch_is(id)]     dnsPropertyData data;
275                 uint32              name;
276         } dnsp_DnsProperty;
277
278         /*
279          * this is the format for the dnsProperty attribute in the DNS
280          * partitions in AD when the wDataLength is 0.  This is an
281          * invalid format seen from some Windows servers in the same
282          * domain.
283          */
284         typedef [flag(NDR_NOALIGN),public] struct {
285                 [range(0, 0), value(0)] uint32         wDataLength;
286                 uint32                                 namelength;
287                 [value(0)] uint32                      flag;
288                 [value(1)] uint32                      version;
289                 dns_property_id                        id;
290                 [switch_is(DSPROPERTY_ZONE_EMPTY)]     dnsPropertyData data;
291                 uint32                                 name;
292         } dnsp_DnsProperty_short;
293 }