idl: Add idl describing DNS structures
authorKai Blin <kai@samba.org>
Fri, 22 Oct 2010 07:08:20 +0000 (09:08 +0200)
committerKai Blin <kai@samba.org>
Sat, 23 Oct 2010 10:17:05 +0000 (10:17 +0000)
librpc/idl/dns.idl [new file with mode: 0644]
librpc/idl/wscript_build
librpc/wscript_build
source4/librpc/wscript_build

diff --git a/librpc/idl/dns.idl b/librpc/idl/dns.idl
new file mode 100644 (file)
index 0000000..faa623b
--- /dev/null
@@ -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
+                                  );
+}
index 4dc1199092b957d5313bb9b4ded219993fc89c93..eed608075ec18c87812aa365088a565e6930569b 100644 (file)
@@ -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''',
index 4a45095eec6440358d6b5f26fb530120b48d1d6f..2d053e49a527152efa7f29cb747150f02ca4da29 100644 (file)
@@ -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'
index 920d6a2c310cab0d0b17adcd7ac87507311f9c7b..734274379a9c63876524e8a55b4f70a3ad3c70d5 100755 (executable)
@@ -123,10 +123,20 @@ bld.SAMBA_PIDL_TABLES('GEN_NDR_TABLES', 'gen_ndr/tables.c')
 
 bld.SAMBA_LIBRARY('NDR_TABLE',
        source='../../librpc/ndr/ndr_table.c gen_ndr/tables.c',
-       public_deps='NDR_STANDARD NDR_AUDIOSRV NDR_DSBACKUP NDR_EFS NDR_DRSUAPI NDR_POLICYAGENT NDR_UNIXINFO NDR_SPOOLSS NDR_EPMAPPER NDR_DBGIDL NDR_DSSETUP NDR_MSGSVC NDR_WINSIF NDR_MGMT NDR_PROTECTED_STORAGE NDR_OXIDRESOLVER NDR_REMACT NDR_WZCSVC NDR_BROWSER NDR_W32TIME NDR_SCERPC NDR_TRKWKS NDR_KEYSVC NDR_KRB5PAC NDR_XATTR NDR_SCHANNEL NDR_ROT NDR_DRSBLOBS NDR_NBT NDR_WINSREPL NDR_SECURITY NDR_DNSSERVER NDR_WINSTATION NDR_IRPC NDR_OPENDB NDR_SASL_HELPERS NDR_NOTIFY NDR_WINBIND NDR_FRSRPC NDR_FRSAPI NDR_FRSTRANS NDR_NFS4ACL NDR_NTP_SIGND NDR_DCOM NDR_WMI NDR_NAMED_PIPE_AUTH NDR_NTLMSSP NDR_DFSBLOBS NDR_DNSP NDR_NTPRINTING',
+        public_deps='''NDR_STANDARD NDR_AUDIOSRV NDR_DSBACKUP NDR_EFS
+        NDR_DRSUAPI NDR_POLICYAGENT NDR_UNIXINFO NDR_SPOOLSS NDR_EPMAPPER
+        NDR_DBGIDL NDR_DSSETUP NDR_MSGSVC NDR_WINSIF NDR_MGMT
+        NDR_PROTECTED_STORAGE NDR_OXIDRESOLVER NDR_REMACT NDR_WZCSVC
+        NDR_BROWSER NDR_W32TIME NDR_SCERPC NDR_TRKWKS NDR_KEYSVC NDR_KRB5PAC
+        NDR_XATTR NDR_SCHANNEL NDR_ROT NDR_DRSBLOBS NDR_NBT NDR_WINSREPL
+        NDR_SECURITY NDR_DNSSERVER NDR_WINSTATION NDR_IRPC NDR_OPENDB
+        NDR_SASL_HELPERS NDR_NOTIFY NDR_WINBIND NDR_FRSRPC NDR_FRSAPI
+        NDR_FRSTRANS NDR_NFS4ACL NDR_NTP_SIGND NDR_DCOM NDR_WMI
+        NDR_NAMED_PIPE_AUTH NDR_NTLMSSP NDR_DFSBLOBS NDR_DNSP
+        NDR_NTPRINTING NDR_DNS''',
         private_library=True,
         depends_on='GEN_NDR_TABLES'
-       )
+        )
 
 
 bld.SAMBA_SUBSYSTEM('RPC_NDR_IRPC',
@@ -150,6 +160,15 @@ bld.SAMBA_LIBRARY('dcerpc_samr',
        )
 
 
+bld.SAMBA_LIBRARY('dcerpc_dns',
+       source='../../librpc/gen_ndr/ndr_dns_c.c',
+       vnum='0.0.1',
+       public_deps='dcerpc NDR_STANDARD',
+       public_headers='../../librpc/gen_ndr/ndr_dns_c.h',
+        header_path='gen_ndr'
+       )
+
+
 bld.SAMBA_LIBRARY('dcerpc_atsvc',
        source='../../librpc/gen_ndr/ndr_atsvc_c.c',
        pc_files='dcerpc_atsvc.pc',
@@ -344,6 +363,12 @@ bld.SAMBA_PYTHON('python_dcerpc_xattr',
        realname='samba/dcerpc/xattr.so'
        )
 
+bld.SAMBA_PYTHON('python_dns',
+       source='../../librpc/gen_ndr/py_dns.c',
+       deps='PYTALLOC NDR_DNS pyrpc_util dcerpc_dns',
+       realname='samba/dcerpc/dns.so'
+       )
+
 bld.SAMBA_PYTHON('python_netlogon',
        source='../../librpc/gen_ndr/py_netlogon.c',
        deps='RPC_NDR_NETLOGON PYTALLOC pyrpc_util',