diff options
author | Kai Blin <kai@samba.org> | 2010-10-22 09:08:20 +0200 |
---|---|---|
committer | Kai Blin <kai@samba.org> | 2010-10-23 10:17:05 +0000 |
commit | 97868713a0ed4a8519796abc69d282c9b2ea3121 (patch) | |
tree | 0230dc11e3ba0f22701d9e81bec6096bff43fafe /librpc | |
parent | 4ffdf09623da867f5c0dd3031820f7d033681b1f (diff) | |
download | samba-97868713a0ed4a8519796abc69d282c9b2ea3121.tar.gz |
idl: Add idl describing DNS structures
Diffstat (limited to 'librpc')
-rw-r--r-- | librpc/idl/dns.idl | 155 | ||||
-rw-r--r-- | librpc/idl/wscript_build | 2 | ||||
-rw-r--r-- | librpc/wscript_build | 5 |
3 files changed, 161 insertions, 1 deletions
diff --git a/librpc/idl/dns.idl b/librpc/idl/dns.idl new file mode 100644 index 00000000000..faa623be5d9 --- /dev/null +++ b/librpc/idl/dns.idl @@ -0,0 +1,155 @@ +#include "idl_types.h" + +/* + IDL structures for DNS operations + + DNS is not traditionally encoded using IDL/NDR. This is a bit of an + experiment, and I may well switch us back to a more traditional + encoding if it doesn't work out +*/ + +import "misc.idl"; +[ + helper("librpc/ndr/ndr_dnsp.h"), + helpstring("DNS records"), + version(0.0), + uuid("a047c001-5f22-40b0-9d52-7042c43f711a") +] +interface dns +{ + const int DNS_SERVICE_PORT = 53; + + typedef [public,bitmap16bit] bitmap { + DNS_RCODE = 0x000F, + DNS_FLAG_BROADCAST = 0x0010, + DNS_FLAG_RECURSION_AVAIL = 0x0080, + DNS_FLAG_RECURSION_DESIRED = 0x0100, + DNS_FLAG_TRUNCATION = 0x0200, + DNS_FLAG_AUTHORITIVE = 0x0400, + DNS_OPCODE = 0x7800, + DNS_FLAG_REPLY = 0x8000 + } dns_operation; + + /* the opcodes are in the operation field, masked with + DNS_OPCODE */ + typedef [public] enum { + DNS_OPCODE_QUERY = (0x0<<11), + DNS_OPCODE_IQUERY = (0x1<<11), + DNS_OPCODE_STATUS = (0x2<<11), + DNS_OPCODE_REGISTER = (0x5<<11), + DNS_OPCODE_RELEASE = (0x6<<11), + DNS_OPCODE_WACK = (0x7<<11), + DNS_OPCODE_REFRESH = (0x8<<11), + DNS_OPCODE_REFRESH2 = (0x9<<11), + DNS_OPCODE_MULTI_HOME_REG = (0xf<<11) + } dns_opcode; + + /* rcode values */ + typedef [public] enum { + DNS_RCODE_OK = 0x0, + DNS_RCODE_FORMERR = 0x1, + DNS_RCODE_SERVFAIL = 0x2, + DNS_RCODE_NXDOMAIN = 0x3, + DNS_RCODE_NOTIMP = 0x4, + DNS_RCODE_REFUSED = 0x5, + DNS_RCODE_YXDOMAIN = 0x6, + DNS_RCODE_YXRRSET = 0x7, + DNS_RCODE_NXRRSET = 0x8, + DNS_RCODE_NOTAUTH = 0x9, + DNS_RCODE_NOTZONE = 0xA + } dns_rcode; + + typedef [public,enum16bit] enum { + DNS_QCLASS_IP = 0x01 + } dns_qclass; + + /* These vese values could have been merged with NBT_QTYPE values, but + DNS_QTYPE_SRV and NBT_QTYPE_STATUS have the same numeric value. */ + typedef [public,enum16bit] enum { + DNS_QTYPE_ZERO = 0x0000, + DNS_QTYPE_A = 0x0001, + DNS_QTYPE_NS = 0x0002, + DNS_QTYPE_MD = 0x0003, + DNS_QTYPE_MF = 0x0004, + DNS_QTYPE_CNAME = 0x0005, + DNS_QTYPE_SOA = 0x0006, + DNS_QTYPE_MB = 0x0007, + DNS_QTYPE_MG = 0x0008, + DNS_QTYPE_MR = 0x0009, + DNS_QTYPE_NULL = 0x000A, + DNS_QTYPE_WKS = 0x000B, + DNS_QTYPE_PTR = 0x000C, + DNS_QTYPE_HINFO = 0x000D, + DNS_QTYPE_MINFO = 0x000E, + DNS_QTYPE_MX = 0x000F, + DNS_QTYPE_TXT = 0x0010, + DNS_QTYPE_RP = 0x0011, + DNS_QTYPE_AFSDB = 0x0012, + DNS_QTYPE_X25 = 0x0013, + DNS_QTYPE_ISDN = 0x0014, + DNS_QTYPE_RT = 0x0015, + DNS_QTYPE_SIG = 0x0018, + DNS_QTYPE_KEY = 0x0019, + DNS_QTYPE_AAAA = 0x001C, + DNS_QTYPE_LOC = 0x001D, + DNS_QTYPE_NXT = 0x001E, + DNS_QTYPE_NETBIOS= 0x0020, + DNS_QTYPE_SRV = 0x0021, + DNS_QTYPE_ATMA = 0x0022, + DNS_QTYPE_NAPTR = 0x0023, + DNS_QTYPE_DNAME = 0x0027, + DNS_QTYPE_DS = 0x002B, + DNS_QTYPE_RRSIG = 0x002E, + DNS_QTYPE_NSEC = 0x002F, + DNS_QTYPE_DNSKEY = 0x0030, + DNS_QTYPE_DHCID = 0x0031, + DNS_QTYPE_ALL = 0x00FF, + DNS_QTYPE_WINS = 0xFF01, + DNS_QTYPE_WINSR = 0xFF02 + } dns_qtype; + + typedef [public] struct { + dnsp_name name; + dns_qtype question_type; + dns_qclass question_class; + } dns_name_question; + + typedef [public] struct { + uint16 length; + uint8 data[length]; + } dns_rdata_data; + + typedef [nodiscriminant,public] union { + [case(DNS_QTYPE_A)] ipv4address ipv4_address; + [default] dns_rdata_data data; + } dns_rdata; + + typedef [flag(LIBNDR_PRINT_ARRAY_HEX),public] struct { + dnsp_name name; + dns_qtype rr_type; + dns_qclass rr_class; + uint32 ttl; + [switch_is(rr_type)] dns_rdata rdata; + } dns_res_rec; + + typedef [flag(NDR_NOALIGN|NDR_BIG_ENDIAN|NDR_PAHEX),public] struct { + uint16 id; + dns_operation operation; + uint16 qdcount; + uint16 ancount; + uint16 nscount; + uint16 arcount; + dns_name_question questions[qdcount]; + dns_res_rec answers[ancount]; + dns_res_rec nsrecs[nscount]; + dns_res_rec additional[arcount]; + [flag(NDR_REMAINING)] DATA_BLOB padding; + } dns_name_packet; + + /* + this is a convenience hook for ndrdump + */ + void decode_dns_name_packet( + [in] dns_name_packet packet + ); +} diff --git a/librpc/idl/wscript_build b/librpc/idl/wscript_build index 4dc1199092b..eed608075ec 100644 --- a/librpc/idl/wscript_build +++ b/librpc/idl/wscript_build @@ -7,7 +7,7 @@ bld.SAMBA_PIDL_LIST('PIDL', msgsvc.idl ntsvcs.idl remact.idl security.idl unixinfo.idl wzcsvc.idl browser.idl dfs.idl dssetup.idl frsapi.idl krb5pac.idl named_pipe_auth.idl orpc.idl rot.idl spoolss.idl w32time.idl xattr.idl - dbgidl.idl dnsserver.idl echo.idl frsrpc.idl lsa.idl nbt.idl + dbgidl.idl dnsserver.idl echo.idl frsrpc.idl lsa.idl nbt.idl dns.idl oxidresolver.idl samr.idl srvsvc.idl winreg.idl dcerpc.idl drsblobs.idl efs.idl frstrans.idl mgmt.idl netlogon.idl policyagent.idl scerpc.idl svcctl.idl wkssvc.idl eventlog6.idl''', diff --git a/librpc/wscript_build b/librpc/wscript_build index 4a45095eec6..2d053e49a52 100644 --- a/librpc/wscript_build +++ b/librpc/wscript_build @@ -17,6 +17,11 @@ bld.SAMBA_SUBSYSTEM('NDR_DNSSERVER', public_deps='LIBNDR' ) +bld.SAMBA_SUBSYSTEM('NDR_DNS', + source='../librpc/gen_ndr/ndr_dns.c', + public_deps='LIBNDR NDR_DNSP' + ) + bld.SAMBA_SUBSYSTEM('NDR_DSBACKUP', source='../librpc/gen_ndr/ndr_dsbackup.c', public_deps='LIBNDR' |