dns: added example python script for dnsserver protocol
authorAndrew Tridgell <tridge@samba.org>
Sun, 25 Sep 2011 23:50:41 +0000 (09:50 +1000)
committerAndrew Tridgell <tridge@samba.org>
Tue, 4 Oct 2011 04:08:56 +0000 (15:08 +1100)
source4/scripting/python/examples/dnsserver.py [new file with mode: 0755]

diff --git a/source4/scripting/python/examples/dnsserver.py b/source4/scripting/python/examples/dnsserver.py
new file mode 100755 (executable)
index 0000000..c65b1c4
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+
+# script to test the dnsserver RPC protocol
+
+import sys
+from optparse import OptionParser
+
+sys.path.insert(0, "bin/python")
+
+import samba
+import samba.getopt as options
+from samba.dcerpc import dnsserver, security, dnsp
+
+
+########### main code ###########
+if __name__ == "__main__":
+    parser = OptionParser("dnsserver [options] server")
+    sambaopts = options.SambaOptions(parser)
+    credopts = options.CredentialsOptionsDouble(parser)
+    parser.add_option_group(credopts)
+
+    (opts, args) = parser.parse_args()
+
+    if len(args) < 3:
+        print("Usage: dnsserver.py [options] DNSSERVER DNSZONE NEWNAME")
+        sys.exit(1)
+
+    server = args[0]
+    dnszone   = args[1]
+    newname   = args[2]
+
+    lp = sambaopts.get_loadparm()
+    creds = credopts.get_credentials(lp)
+
+    if not creds.authentication_requested():
+        parser.error("You must supply credentials")
+
+    binding_str = "ncacn_ip_tcp:%s[print,sign]" % server
+
+    dns_conn = dnsserver.dnsserver(binding_str, lp, creds)
+
+    print("querying a NS record")
+    res = dns_conn.DnssrvEnumRecords2(0x00070000,
+                                      0,
+                                      server,
+                                      dnszone,
+                                      newname,
+                                      None,
+                                      dnsp.DNS_TYPE_NS,
+                                      0x0f,
+                                      None,
+                                      None)
+
+    print("adding a NS glue record")
+    name = dnsserver.DNS_RPC_NAME()
+    name.str = newname
+
+    addrec = dnsserver.DNS_RPC_RECORD()
+    addrec.wType = dnsp.DNS_TYPE_NS
+    addrec.dwFlags = 0
+    addrec.dwSerial = 0
+    addrec.dwTtlSeconds = 3600
+    addrec.dwTimeStamp = 0
+    addrec.dwReserved = 0
+    addrec.data = name
+
+    addrecbuf     = dnsserver.DNS_RPC_RECORD_BUF()
+    addrecbuf.rec = addrec
+
+    res = dns_conn.DnssrvUpdateRecord2(0x00070000,
+                                       0,
+                                       server,
+                                       dnszone,
+                                       newname,
+                                       addrecbuf,
+                                       None)
+
+
+    print("querying the NS record")
+    res = dns_conn.DnssrvEnumRecords2(0x00070000,
+                                      0,
+                                      server,
+                                      dnszone,
+                                      newname,
+                                      None,
+                                      dnsp.DNS_TYPE_NS,
+                                      0x0f,
+                                      None,
+                                      None)