check_parent_exists() can change errno. Ensure we preserve it across calls.
[Samba.git] / librpc / idl / dns.idl
blob90ac47a83113126117dc9287c8964e88e81e3336
1 #include "idl_types.h"
3 /*
4 IDL structures for DNS operations
6 DNS is not traditionally encoded using IDL/NDR. This is a bit of an
7 experiment, and I may well switch us back to a more traditional
8 encoding if it doesn't work out
9 */
11 import "misc.idl";
13 helper("librpc/ndr/ndr_dns.h"),
14 helpstring("DNS records"),
15 version(0.0),
16 uuid("a047c001-5f22-40b0-9d52-7042c43f711a")
18 interface dns
20 const int DNS_SERVICE_PORT = 53;
22 typedef [public,bitmap16bit] bitmap {
23 DNS_RCODE = 0x000F,
24 DNS_FLAG_BROADCAST = 0x0010,
25 DNS_FLAG_RECURSION_AVAIL = 0x0080,
26 DNS_FLAG_RECURSION_DESIRED = 0x0100,
27 DNS_FLAG_TRUNCATION = 0x0200,
28 DNS_FLAG_AUTHORITATIVE = 0x0400,
29 DNS_OPCODE = 0x7800,
30 DNS_FLAG_REPLY = 0x8000
31 } dns_operation;
33 /* the opcodes are in the operation field, masked with
34 DNS_OPCODE */
35 typedef [public] enum {
36 DNS_OPCODE_QUERY = (0x0<<11),
37 DNS_OPCODE_IQUERY = (0x1<<11),
38 DNS_OPCODE_STATUS = (0x2<<11),
39 DNS_OPCODE_REGISTER = (0x5<<11),
40 DNS_OPCODE_RELEASE = (0x6<<11),
41 DNS_OPCODE_WACK = (0x7<<11),
42 DNS_OPCODE_REFRESH = (0x8<<11),
43 DNS_OPCODE_REFRESH2 = (0x9<<11),
44 DNS_OPCODE_MULTI_HOME_REG = (0xf<<11)
45 } dns_opcode;
47 /* rcode values */
48 typedef [public] enum {
49 DNS_RCODE_OK = 0x0,
50 DNS_RCODE_FORMERR = 0x1,
51 DNS_RCODE_SERVFAIL = 0x2,
52 DNS_RCODE_NXDOMAIN = 0x3,
53 DNS_RCODE_NOTIMP = 0x4,
54 DNS_RCODE_REFUSED = 0x5,
55 DNS_RCODE_YXDOMAIN = 0x6,
56 DNS_RCODE_YXRRSET = 0x7,
57 DNS_RCODE_NXRRSET = 0x8,
58 DNS_RCODE_NOTAUTH = 0x9,
59 DNS_RCODE_NOTZONE = 0xA
60 } dns_rcode;
62 typedef [public,enum16bit] enum {
63 DNS_QCLASS_IP = 0x0001,
64 DNS_QCLASS_NONE = 0x00FE,
65 DNS_QCLASS_ANY = 0x00FF
66 } dns_qclass;
68 /* These vese values could have been merged with NBT_QTYPE values, but
69 DNS_QTYPE_SRV and NBT_QTYPE_STATUS have the same numeric value. */
70 typedef [public,enum16bit] enum {
71 DNS_QTYPE_ZERO = 0x0000,
72 DNS_QTYPE_A = 0x0001,
73 DNS_QTYPE_NS = 0x0002,
74 DNS_QTYPE_MD = 0x0003,
75 DNS_QTYPE_MF = 0x0004,
76 DNS_QTYPE_CNAME = 0x0005,
77 DNS_QTYPE_SOA = 0x0006,
78 DNS_QTYPE_MB = 0x0007,
79 DNS_QTYPE_MG = 0x0008,
80 DNS_QTYPE_MR = 0x0009,
81 DNS_QTYPE_NULL = 0x000A,
82 DNS_QTYPE_WKS = 0x000B,
83 DNS_QTYPE_PTR = 0x000C,
84 DNS_QTYPE_HINFO = 0x000D,
85 DNS_QTYPE_MINFO = 0x000E,
86 DNS_QTYPE_MX = 0x000F,
87 DNS_QTYPE_TXT = 0x0010,
88 DNS_QTYPE_RP = 0x0011,
89 DNS_QTYPE_AFSDB = 0x0012,
90 DNS_QTYPE_X25 = 0x0013,
91 DNS_QTYPE_ISDN = 0x0014,
92 DNS_QTYPE_RT = 0x0015,
93 DNS_QTYPE_SIG = 0x0018,
94 DNS_QTYPE_KEY = 0x0019,
95 DNS_QTYPE_AAAA = 0x001C,
96 DNS_QTYPE_LOC = 0x001D,
97 DNS_QTYPE_NXT = 0x001E,
98 DNS_QTYPE_NETBIOS= 0x0020,
99 DNS_QTYPE_SRV = 0x0021,
100 DNS_QTYPE_ATMA = 0x0022,
101 DNS_QTYPE_NAPTR = 0x0023,
102 DNS_QTYPE_DNAME = 0x0027,
103 DNS_QTYPE_DS = 0x002B,
104 DNS_QTYPE_RRSIG = 0x002E,
105 DNS_QTYPE_NSEC = 0x002F,
106 DNS_QTYPE_DNSKEY = 0x0030,
107 DNS_QTYPE_DHCID = 0x0031,
108 DNS_QTYPE_ALL = 0x00FF,
109 DNS_QTYPE_WINS = 0xFF01,
110 DNS_QTYPE_WINSR = 0xFF02
111 } dns_qtype;
113 typedef [public] struct {
114 dns_string name;
115 dns_qtype question_type;
116 dns_qclass question_class;
117 } dns_name_question;
119 typedef [public] struct {
120 uint16 length;
121 uint8 data[length];
122 } dns_rdata_data;
124 typedef struct {
125 dns_string mname;
126 dns_string rname;
127 uint32 serial;
128 uint32 refresh;
129 uint32 retry;
130 uint32 expire;
131 uint32 minimum;
132 } dns_soa_record;
134 typedef [public] struct {
135 uint16 priority;
136 uint16 weight;
137 uint16 port;
138 dns_string target;
139 } dns_srv_record;
141 typedef [public] struct {
142 uint16 preference;
143 dns_string exchange;
144 } dns_mx_record;
146 typedef [nodiscriminant,public,flag(NDR_NOALIGN)] union {
147 [case(DNS_QTYPE_A)] ipv4address ipv4_record;
148 [case(DNS_QTYPE_NS)] dns_string ns_record;
149 [case(DNS_QTYPE_CNAME)] dns_string cname_record;
150 [case(DNS_QTYPE_SOA)] dns_soa_record soa_record;
151 [case(DNS_QTYPE_PTR)] dns_string ptr_record;
152 [case(DNS_QTYPE_MX)] dns_mx_record mx_record;
153 [case(DNS_QTYPE_AAAA)] ipv6address ipv6_record;
154 [case(DNS_QTYPE_SRV)] dns_srv_record srv_record;
155 [default];
156 } dns_rdata;
158 typedef [flag(LIBNDR_PRINT_ARRAY_HEX|NDR_NOALIGN),nopush,nopull] struct {
159 dns_string name;
160 dns_qtype rr_type;
161 dns_qclass rr_class;
162 uint32 ttl;
163 uint16 length; /* Should be set to either UINT16_MAX or 0 */
164 [switch_is(rr_type)] dns_rdata rdata;
165 DATA_BLOB unexpected;
166 } dns_res_rec;
168 typedef [flag(NDR_NOALIGN|NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
169 uint16 id;
170 dns_operation operation;
171 uint16 qdcount;
172 uint16 ancount;
173 uint16 nscount;
174 uint16 arcount;
175 dns_name_question questions[qdcount];
176 dns_res_rec answers[ancount];
177 dns_res_rec nsrecs[nscount];
178 dns_res_rec additional[arcount];
179 } dns_name_packet;
182 this is a convenience hook for ndrdump
184 void decode_dns_name_packet(
185 [in] dns_name_packet packet