summaryrefslogtreecommitdiffstats
path: root/source4/scripting/python/samba/netcmd/dns.py
diff options
context:
space:
mode:
Diffstat (limited to 'source4/scripting/python/samba/netcmd/dns.py')
-rw-r--r--source4/scripting/python/samba/netcmd/dns.py137
1 files changed, 67 insertions, 70 deletions
diff --git a/source4/scripting/python/samba/netcmd/dns.py b/source4/scripting/python/samba/netcmd/dns.py
index 8a79de08d8d..b227e960809 100644
--- a/source4/scripting/python/samba/netcmd/dns.py
+++ b/source4/scripting/python/samba/netcmd/dns.py
@@ -35,6 +35,7 @@ def dns_connect(server, lp, creds):
dns_conn = dnsserver.dnsserver(binding_str, lp, creds)
return dns_conn
+
def bool_string(flag):
if flag == 0:
ret = 'FALSE'
@@ -44,6 +45,7 @@ def bool_string(flag):
ret = 'UNKNOWN (0x%x)' % flag
return ret
+
def enum_string(module, enum_defs, value):
ret = None
for e in enum_defs:
@@ -54,6 +56,7 @@ def enum_string(module, enum_defs, value):
ret = 'UNKNOWN (0x%x)' % value
return ret
+
def bitmap_string(module, bitmap_defs, value):
ret = ''
for b in bitmap_defs:
@@ -63,42 +66,50 @@ def bitmap_string(module, bitmap_defs, value):
ret = 'NONE'
return ret
+
def boot_method_string(boot_method):
enum_defs = [ 'DNS_BOOT_METHOD_UNINITIALIZED', 'DNS_BOOT_METHOD_FILE',
'DNS_BOOT_METHOD_REGISTRY', 'DNS_BOOT_METHOD_DIRECTORY' ]
return enum_string(dnsserver, enum_defs, boot_method)
+
def name_check_flag_string(check_flag):
enum_defs = [ 'DNS_ALLOW_RFC_NAMES_ONLY', 'DNS_ALLOW_NONRFC_NAMES',
'DNS_ALLOW_MULTIBYTE_NAMES', 'DNS_ALLOW_ALL_NAMES' ]
return enum_string(dnsserver, enum_defs, check_flag)
+
def zone_type_string(zone_type):
enum_defs = [ 'DNS_ZONE_TYPE_CACHE', 'DNS_ZONE_TYPE_PRIMARY',
'DNS_ZONE_TYPE_SECONDARY', 'DNS_ZONE_TYPE_STUB',
'DNS_ZONE_TYPE_FORWARDER', 'DNS_ZONE_TYPE_SECONDARY_CACHE' ]
return enum_string(dnsp, enum_defs, zone_type)
+
def zone_update_string(zone_update):
enum_defs = [ 'DNS_ZONE_UPDATE_OFF', 'DNS_ZONE_UPDATE_SECURE',
'DNS_ZONE_UPDATE_SECURE' ]
return enum_string(dnsp, enum_defs, zone_update)
+
def zone_secondary_security_string(security):
enum_defs = [ 'DNS_ZONE_SECSECURE_NO_SECURITY', 'DNS_ZONE_SECSECURE_NS_ONLY',
'DNS_ZONE_SECSECURE_LIST_ONLY', 'DNS_ZONE_SECSECURE_NO_XFER' ]
return enum_string(dnsserver, enum_defs, security)
+
def zone_notify_level_string(notify_level):
enum_defs = [ 'DNS_ZONE_NOTIFY_OFF', 'DNS_ZONE_NOTIFY_ALL_SECONDARIES',
'DNS_ZONE_NOTIFY_LIST_ONLY' ]
return enum_string(dnsserver, enum_defs, notify_level)
+
def dp_flags_string(dp_flags):
bitmap_defs = [ 'DNS_DP_AUTOCREATED', 'DNS_DP_LEGACY', 'DNS_DP_DOMAIN_DEFAULT',
'DNS_DP_FOREST_DEFAULT', 'DNS_DP_ENLISTED', 'DNS_DP_DELETED' ]
return bitmap_string(dnsserver, bitmap_defs, dp_flags)
+
def zone_flags_string(flags):
bitmap_defs = [ 'DNS_RPC_ZONE_PAUSED', 'DNS_RPC_ZONE_SHUTDOWN',
'DNS_RPC_ZONE_REVERSE', 'DNS_RPC_ZONE_AUTOCREATED',
@@ -107,6 +118,7 @@ def zone_flags_string(flags):
'DNS_RPC_ZONE_READONLY']
return bitmap_string(dnsserver, bitmap_defs, flags)
+
def ip4_array_string(array):
ret = []
if not array:
@@ -116,6 +128,7 @@ def ip4_array_string(array):
ret.append(addr)
return ret
+
def dns_addr_array_string(array):
ret = []
if not array:
@@ -132,6 +145,7 @@ def dns_addr_array_string(array):
ret.append(addr)
return ret
+
def dns_type_flag(rec_type):
rtype = rec_type.upper()
if rtype == 'A':
@@ -158,6 +172,7 @@ def dns_type_flag(rec_type):
raise CommandError('Unknown type of DNS record %s' % rec_type)
return record_type
+
def dns_client_version(cli_version):
version = cli_version.upper()
if version == 'W2K':
@@ -170,6 +185,7 @@ def dns_client_version(cli_version):
raise CommandError('Unknown client version %s' % cli_version)
return client_version
+
def print_serverinfo(outf, typeid, serverinfo):
outf.write(' dwVersion : 0x%x\n' % serverinfo.dwVersion)
outf.write(' fBootMethod : %s\n' % boot_method_string(serverinfo.fBootMethod))
@@ -384,7 +400,9 @@ class ARecord(dnsserver.DNS_RPC_RECORD):
self._ip_addr = ip_addr[:]
self.data = self._ip_addr
+
class AAAARecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, ip6_addr, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE,
node_flag=0):
super(AAAARecord, self).__init__()
@@ -395,7 +413,9 @@ class AAAARecord(dnsserver.DNS_RPC_RECORD):
self._ip6_addr = ip6_addr[:]
self.data = self._ip6_addr
+
class PTRRecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, ptr, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE,
node_flag=0):
super(PTRRecord, self).__init__()
@@ -409,7 +429,9 @@ class PTRRecord(dnsserver.DNS_RPC_RECORD):
ptr_name.len = len(ptr)
self.data = ptr_name
+
class CNameRecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, cname, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE,
node_flag=0):
super(CNameRecord, self).__init__()
@@ -423,7 +445,9 @@ class CNameRecord(dnsserver.DNS_RPC_RECORD):
cname_name.len = len(cname)
self.data = cname_name
+
class NSRecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, dns_server, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE,
node_flag=0):
super(NSRecord, self).__init__()
@@ -437,7 +461,9 @@ class NSRecord(dnsserver.DNS_RPC_RECORD):
ns.len = len(dns_server)
self.data = ns
+
class MXRecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, mail_server, preference, serial=1, ttl=900,
rank=dnsp.DNS_RANK_ZONE, node_flag=0):
super(MXRecord, self).__init__()
@@ -452,7 +478,9 @@ class MXRecord(dnsserver.DNS_RPC_RECORD):
mx.nameExchange.len = len(mail_server)
self.data = mx
+
class SOARecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, mname, rname, serial=1, refresh=900, retry=600,
expire=86400, minimum=3600, ttl=3600, rank=dnsp.DNS_RANK_ZONE,
node_flag=dnsp.DNS_RPC_FLAG_AUTH_ZONE_ROOT):
@@ -474,7 +502,9 @@ class SOARecord(dnsserver.DNS_RPC_RECORD):
soa.ZoneAdministratorEmail.len = len(rname)
self.data = soa
+
class SRVRecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, target, port, priority=0, weight=100, serial=1, ttl=900,
rank=dnsp.DNS_RANK_ZONE, node_flag=0):
super(SRVRecord, self).__init__()
@@ -491,7 +521,9 @@ class SRVRecord(dnsserver.DNS_RPC_RECORD):
srv.nameTarget.len = len(target)
self.data = srv
+
class TXTRecord(dnsserver.DNS_RPC_RECORD):
+
def __init__(self, slist, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE,
node_flag=0):
super(TXTRecord, self).__init__()
@@ -576,16 +608,9 @@ def dns_record_match(dns_conn, server, zone, name, record_type, data):
select_flags = dnsserver.DNS_RPC_VIEW_AUTHORITY_DATA
try:
- buflen, res = dns_conn.DnssrvEnumRecords2(dnsserver.DNS_CLIENT_VERSION_LONGHORN,
- 0,
- server,
- zone,
- name,
- None,
- record_type,
- select_flags,
- None,
- None)
+ buflen, res = dns_conn.DnssrvEnumRecords2(
+ dnsserver.DNS_CLIENT_VERSION_LONGHORN, 0, server, zone, name, None,
+ record_type, select_flags, None, None)
except RuntimeError, e:
return None
@@ -667,18 +692,16 @@ class cmd_serverinfo(Command):
choices=['w2k','dotnet','longhorn'], dest='cli_ver'),
]
- def run(self, server, cli_ver, sambaopts=None, credopts=None, versionopts=None):
+ def run(self, server, cli_ver, sambaopts=None, credopts=None,
+ versionopts=None):
self.lp = sambaopts.get_loadparm()
self.creds = credopts.get_credentials(self.lp)
dns_conn = dns_connect(server, self.lp, self.creds)
client_version = dns_client_version(cli_ver)
- typeid, res = dns_conn.DnssrvQuery2(client_version,
- 0,
- server,
- None,
- 'ServerInfo')
+ typeid, res = dns_conn.DnssrvQuery2(client_version, 0, server,
+ None, 'ServerInfo')
print_serverinfo(self.outf, typeid, res)
@@ -701,17 +724,15 @@ class cmd_zoneinfo(Command):
choices=['w2k','dotnet','longhorn'], dest='cli_ver'),
]
- def run(self, server, zone, cli_ver, sambaopts=None, credopts=None, versionopts=None):
+ def run(self, server, zone, cli_ver, sambaopts=None, credopts=None,
+ versionopts=None):
self.lp = sambaopts.get_loadparm()
self.creds = credopts.get_credentials(self.lp)
dns_conn = dns_connect(server, self.lp, self.creds)
client_version = dns_client_version(cli_ver)
- typeid, res = dns_conn.DnssrvQuery2(client_version,
- 0,
- server,
- zone,
+ typeid, res = dns_conn.DnssrvQuery2(client_version, 0, server, zone,
'ZoneInfo')
print_zoneinfo(self.outf, typeid, res)
@@ -783,9 +804,7 @@ class cmd_zonelist(Command):
client_version = dns_client_version(cli_ver)
typeid, res = dns_conn.DnssrvComplexOperation2(client_version,
- 0,
- server,
- None,
+ 0, server, None,
'EnumZones',
dnsserver.DNSSRV_TYPEID_DWORD,
request_filter)
@@ -850,13 +869,8 @@ class cmd_zonecreate(Command):
zone_create_info.fAging = 0
zone_create_info.dwDpFlags = dnsserver.DNS_DP_DOMAIN_DEFAULT
- res = dns_conn.DnssrvOperation2(client_version,
- 0,
- server,
- None,
- 0,
- 'ZoneCreate',
- typeid,
+ res = dns_conn.DnssrvOperation2(client_version, 0, server, None,
+ 0, 'ZoneCreate', typeid,
zone_create_info)
self.outf.write('Zone %s created successfully\n' % zone)
@@ -874,7 +888,8 @@ class cmd_zonedelete(Command):
"credopts": options.CredentialsOptions,
}
- def run(self, server, zone, sambaopts=None, credopts=None, versionopts=None):
+ def run(self, server, zone, sambaopts=None, credopts=None,
+ versionopts=None):
self.lp = sambaopts.get_loadparm()
self.creds = credopts.get_credentials(self.lp)
@@ -882,11 +897,7 @@ class cmd_zonedelete(Command):
zone = zone.lower()
res = dns_conn.DnssrvOperation2(dnsserver.DNS_CLIENT_VERSION_LONGHORN,
- 0,
- server,
- zone,
- 0,
- 'DeleteZoneFromDs',
+ 0, server, zone, 0, 'DeleteZoneFromDs',
dnsserver.DNSSRV_TYPEID_NULL,
None)
self.outf.write('Zone %s delete successfully\n' % zone)
@@ -922,9 +933,10 @@ class cmd_query(Command):
action='store_true', dest='only_children')
]
- def run(self, server, zone, name, rtype, authority=False, cache=False, glue=False,
- root=False, additional=False, no_children=False, only_children=False,
- sambaopts=None, credopts=None, versionopts=None):
+ def run(self, server, zone, name, rtype, authority=False, cache=False,
+ glue=False, root=False, additional=False, no_children=False,
+ only_children=False, sambaopts=None, credopts=None,
+ versionopts=None):
record_type = dns_type_flag(rtype)
select_flags = 0
@@ -955,16 +967,9 @@ class cmd_query(Command):
self.creds = credopts.get_credentials(self.lp)
dns_conn = dns_connect(server, self.lp, self.creds)
- buflen, res = dns_conn.DnssrvEnumRecords2(dnsserver.DNS_CLIENT_VERSION_LONGHORN,
- 0,
- server,
- zone,
- name,
- None,
- record_type,
- select_flags,
- None,
- None)
+ buflen, res = dns_conn.DnssrvEnumRecords2(
+ dnsserver.DNS_CLIENT_VERSION_LONGHORN, 0, server, zone, name,
+ None, record_type, select_flags, None, None)
print_dnsrecords(self.outf, res)
@@ -981,7 +986,8 @@ class cmd_roothints(Command):
"credopts": options.CredentialsOptions,
}
- def run(self, server, name='.', sambaopts=None, credopts=None, versionopts=None):
+ def run(self, server, name='.', sambaopts=None, credopts=None,
+ versionopts=None):
record_type = dnsp.DNS_TYPE_NS
select_flags = (dnsserver.DNS_RPC_VIEW_ROOT_HINT_DATA |
dnsserver.DNS_RPC_VIEW_ADDITIONAL_DATA)
@@ -990,16 +996,9 @@ class cmd_roothints(Command):
self.creds = credopts.get_credentials(self.lp)
dns_conn = dns_connect(server, self.lp, self.creds)
- buflen, res = dns_conn.DnssrvEnumRecords2(dnsserver.DNS_CLIENT_VERSION_LONGHORN,
- 0,
- server,
- '..RootHints',
- name,
- None,
- record_type,
- select_flags,
- None,
- None)
+ buflen, res = dns_conn.DnssrvEnumRecords2(
+ dnsserver.DNS_CLIENT_VERSION_LONGHORN, 0, server, '..RootHints',
+ name, None, record_type, select_flags, None, None)
print_dnsrecords(self.outf, res)
@@ -1027,7 +1026,8 @@ class cmd_add_record(Command):
"credopts": options.CredentialsOptions,
}
- def run(self, server, zone, name, rtype, data, sambaopts=None, credopts=None, versionopts=None):
+ def run(self, server, zone, name, rtype, data, sambaopts=None,
+ credopts=None, versionopts=None):
if rtype.upper() not in ('A','AAAA','PTR','CNAME','NS','MX','SRV','TXT'):
raise CommandError('Adding record of type %s is not supported' % rtype)
@@ -1039,7 +1039,8 @@ class cmd_add_record(Command):
self.creds = credopts.get_credentials(self.lp)
dns_conn = dns_connect(server, self.lp, self.creds)
- rec_match = dns_record_match(dns_conn, server, zone, name, record_type, data)
+ rec_match = dns_record_match(dns_conn, server, zone, name, record_type,
+ data)
if rec_match is not None:
raise CommandError('Record already exists')
@@ -1047,12 +1048,7 @@ class cmd_add_record(Command):
add_rec_buf.rec = rec
dns_conn.DnssrvUpdateRecord2(dnsserver.DNS_CLIENT_VERSION_LONGHORN,
- 0,
- server,
- zone,
- name,
- add_rec_buf,
- None)
+ 0, server, zone, name, add_rec_buf, None)
self.outf.write('Record added successfully\n')
@@ -1093,7 +1089,8 @@ class cmd_update_record(Command):
self.creds = credopts.get_credentials(self.lp)
dns_conn = dns_connect(server, self.lp, self.creds)
- rec_match = dns_record_match(dns_conn, server, zone, name, record_type, olddata)
+ rec_match = dns_record_match(dns_conn, server, zone, name, record_type,
+ olddata)
if not rec_match:
raise CommandError('Record does not exist')