[SCM] Samba Shared Repository - branch master updated
Douglas Bagnall
dbagnall at samba.org
Thu Apr 8 23:04:02 UTC 2021
The branch, master has been updated
via c033fdf5996 pytests/dns_forwarder: remove unused import
via 99a88cf82eb samba-tool dns: use dnsserver.flag_from_string()
via 87e71cd6116 samba-tool dns: use dnsserver.record_from_string
via df60fe15b33 pytests/dns: use dnsserver.record_from_string
via 55c4f75a282 pytests/dns: import dnsserver.TXTRecord directly
via 579e56bc3da pytest/dcerpc/dnsserver.py: use dnsserver.flag_from_string
via a59dcfcfd1f pytest/dcerpcdnsserver: use record_from_string helper
via 4ce9a0d4879 py/dnsserver add flag from string function
via a572a260535 py/dnsserver: add record_from_string helper function
via d84d10bb0e7 py/dnsserver: add .from_string() methods
via bddce1f7e69 py/dnsserver: remove workaround of fixed bug
via 3bb4dbecc30 py/provision/sambadns: Add a comment about DNS types
via dbffeeefd86 py/provision/sambadns: rename CNameRecord -> CNAMERecord
via 16254139617 py/dnsserver: replace obsolete comments with useful ones
via bdc2567324c pydns: rename s/CNameRecord/CNAMERecord/ for consistency
from 0332ddde1a1 VFS: Remove SMB_VFS_SET_DOS_ATTRIBUTE, no longer used
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit c033fdf59962c345dc34f02ede4d6ffef4ac9c44
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Apr 7 15:34:52 2021 +1200
pytests/dns_forwarder: remove unused import
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
Autobuild-User(master): Douglas Bagnall <dbagnall at samba.org>
Autobuild-Date(master): Thu Apr 8 23:03:52 UTC 2021 on sn-devel-184
commit 99a88cf82eb24ab5ca668b4bb7be346783fa81fe
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Mar 26 20:52:20 2021 +1300
samba-tool dns: use dnsserver.flag_from_string()
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit 87e71cd61168bbd6ed61484c98b84a72fb93482d
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Mar 26 20:41:29 2021 +1300
samba-tool dns: use dnsserver.record_from_string
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit df60fe15b33ba2ffa957758e30c5d219dee71555
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Apr 7 15:28:11 2021 +1200
pytests/dns: use dnsserver.record_from_string
not netcmd.dns.data_to_dns_record, which is a UI function.
The only practical difference is it will raise DNSParseError, not CommandError.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit 55c4f75a282f2e56a8eb2ab473e4b9ba8d9c4daa
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Apr 7 15:16:58 2021 +1200
pytests/dns: import dnsserver.TXTRecord directly
Not through samba-tool, which should not be used as a library.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit 579e56bc3dac70d0458137e3ddde06ad607777ff
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Mar 26 21:04:20 2021 +1300
pytest/dcerpc/dnsserver.py: use dnsserver.flag_from_string
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit a59dcfcfd1fc7cd91ff3af9ed8ba404245f18263
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sat Mar 27 15:41:10 2021 +1300
pytest/dcerpcdnsserver: use record_from_string helper
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit 4ce9a0d4879a717fad7830dd70a1f2200d879db2
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Apr 1 15:29:32 2021 +1300
py/dnsserver add flag from string function
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit a572a260535da0956e324a092cfd459a1c5b4205
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Apr 1 15:28:49 2021 +1300
py/dnsserver: add record_from_string helper function
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit d84d10bb0e71a7c27c8a880c5eb2a98e23778fc9
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Apr 7 13:34:50 2021 +1200
py/dnsserver: add .from_string() methods
The logic to parse DNS value strings (e.g. "example.com 10" for an MX,
which needs to be split on the space) is repeated at least in
samba-tool dns and tests/dcerpc/dnsserver.py. Here we bring it
together so we can do it once.
The sep= keyword allows callers to separate on all runs of
whitespace (the default, as samba-tool dns does) or, using sep='', to
separate on true spaces only.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit bddce1f7e6989bcba704d8a1bdc7db9128340b75
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Apr 1 15:26:01 2021 +1300
py/dnsserver: remove workaround of fixed bug
We used to do something wrong with the refcounts, but we don't anymore,
so we don't need this confusing nonsense.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit 3bb4dbecc3020a7eae58b06d5d312be6d4979dfb
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Thu Apr 1 15:23:48 2021 +1300
py/provision/sambadns: Add a comment about DNS types
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit dbffeeefd86cb4ec1cb551a696175f9624bbd151
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Sat Mar 27 15:55:03 2021 +1300
py/provision/sambadns: rename CNameRecord -> CNAMERecord
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit 16254139617f7a56cb5d88cf6a34d9d83ecdbd91
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Mar 26 20:42:49 2021 +1300
py/dnsserver: replace obsolete comments with useful ones
The replaced comment was about a long fixed Python reference counting bug.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
commit bdc2567324c6b8069d3fd809ed1d1d68bd92a9d7
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Mar 26 18:22:17 2021 +1300
pydns: rename s/CNameRecord/CNAMERecord/ for consistency
Everything else is TXTRecord, SRVRrcord, SOARecord.
Making CNAME the same allows easier lookups.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn at samba.org>
-----------------------------------------------------------------------
Summary of changes:
python/samba/dnsserver.py | 167 ++++++++++++++++++++++++++++-----
python/samba/join.py | 4 +-
python/samba/netcmd/dns.py | 80 ++--------------
python/samba/provision/sambadns.py | 15 ++-
python/samba/tests/dcerpc/dnsserver.py | 44 ++-------
python/samba/tests/dns.py | 24 ++---
python/samba/tests/dns_forwarder.py | 2 +-
python/samba/tests/dns_wildcard.py | 6 +-
source4/scripting/bin/samba_upgradedns | 4 +-
9 files changed, 192 insertions(+), 154 deletions(-)
Changeset truncated at 500 lines:
diff --git a/python/samba/dnsserver.py b/python/samba/dnsserver.py
index 6d8a72919df..a9fcb7662e8 100644
--- a/python/samba/dnsserver.py
+++ b/python/samba/dnsserver.py
@@ -16,12 +16,32 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
+import shlex
from samba.dcerpc import dnsserver, dnsp
+# Note: these are not quite the same as similar looking classes in
+# provision/sambadns.py -- those ones are based on
+# dnsp.DnssrvRpcRecord, these are based on dnsserver.DNS_RPC_RECORD.
+# They encode the same information in slightly different ways.
#
-# Always create a copy of strings when creating DNS_RPC_RECORDs
-# to overcome the bug in pidl generated python bindings.
+# DNS_RPC_RECORD structures ([MS-DNSP]2.2.2.2.5 "DNS_RPC_RECORD") are
+# used on the wire by DnssrvEnumRecords2. The dnsp.DnssrvRpcRecord
+# versions have the in-database version of the same information, where
+# the flags field is unpacked, and the struct ordering is different.
+# See [MS-DNSP] 2.3.2.2 "DnsRecord".
#
+# In both cases the structure and contents of .data depend on .wType.
+# For example, if .wType is DNS_TYPE_A, .data is an IPv4 address. If
+# the .wType is changed to DNS_TYPE_CNAME, the contents of .data will
+# be interpreted as a cname blob, but the bytes there will still be
+# those of the IPv4 address. If you don't also set the .data you may
+# encounter stability problems. These DNS_RPC_RECORD subclasses
+# attempt to hide that from you, but are only pretending -- any of
+# them can represent any type of record.
+
+
+class DNSParseError(ValueError):
+ pass
class ARecord(dnsserver.DNS_RPC_RECORD):
@@ -32,8 +52,11 @@ class ARecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._ip_addr = ip_addr[:]
- self.data = self._ip_addr
+ self.data = ip_addr
+
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ return cls(data, **kwargs)
class AAAARecord(dnsserver.DNS_RPC_RECORD):
@@ -45,8 +68,11 @@ class AAAARecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._ip6_addr = ip6_addr[:]
- self.data = self._ip6_addr
+ self.data = ip6_addr
+
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ return cls(data, **kwargs)
class PTRRecord(dnsserver.DNS_RPC_RECORD):
@@ -58,28 +84,34 @@ class PTRRecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._ptr = ptr[:]
ptr_name = dnsserver.DNS_RPC_NAME()
- ptr_name.str = self._ptr
+ ptr_name.str = ptr
ptr_name.len = len(ptr)
self.data = ptr_name
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ return cls(data, **kwargs)
-class CNameRecord(dnsserver.DNS_RPC_RECORD):
+
+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__()
+ super().__init__()
self.wType = dnsp.DNS_TYPE_CNAME
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._cname = cname[:]
cname_name = dnsserver.DNS_RPC_NAME()
- cname_name.str = self._cname
+ cname_name.str = cname
cname_name.len = len(cname)
self.data = cname_name
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ return cls(data, **kwargs)
+
class NSRecord(dnsserver.DNS_RPC_RECORD):
@@ -90,12 +122,15 @@ class NSRecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._dns_server = dns_server[:]
ns = dnsserver.DNS_RPC_NAME()
- ns.str = self._dns_server
+ ns.str = dns_server
ns.len = len(dns_server)
self.data = ns
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ return cls(data, **kwargs)
+
class MXRecord(dnsserver.DNS_RPC_RECORD):
@@ -106,13 +141,22 @@ class MXRecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._mail_server = mail_server[:]
mx = dnsserver.DNS_RPC_RECORD_NAME_PREFERENCE()
mx.wPreference = preference
- mx.nameExchange.str = self._mail_server
+ mx.nameExchange.str = mail_server
mx.nameExchange.len = len(mail_server)
self.data = mx
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ try:
+ server, priority = data.split(sep)
+ priority = int(priority)
+ except ValueError as e:
+ raise DNSParseError("MX data must have server and priority "
+ "(space separated), not %r" % data) from e
+ return cls(server, priority, **kwargs)
+
class SOARecord(dnsserver.DNS_RPC_RECORD):
@@ -124,20 +168,33 @@ class SOARecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._mname = mname[:]
- self._rname = rname[:]
soa = dnsserver.DNS_RPC_RECORD_SOA()
soa.dwSerialNo = serial
soa.dwRefresh = refresh
soa.dwRetry = retry
soa.dwExpire = expire
soa.dwMinimumTtl = minimum
- soa.NamePrimaryServer.str = self._mname
+ soa.NamePrimaryServer.str = mname
soa.NamePrimaryServer.len = len(mname)
- soa.ZoneAdministratorEmail.str = self._rname
+ soa.ZoneAdministratorEmail.str = rname
soa.ZoneAdministratorEmail.len = len(rname)
self.data = soa
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ args = data.split(sep)
+ if len(args) != 7:
+ raise DNSParseError('Data requires 7 space separated elements - '
+ 'nameserver, email, serial, '
+ 'refresh, retry, expire, minimumttl')
+ try:
+ for i in range(2, 7):
+ args[i] = int(args[i])
+ except ValueError as e:
+ raise DNSParseError("SOA serial, refresh, retry, expire, minimumttl' "
+ "should be integers") from e
+ return cls(*args, **kwargs)
+
class SRVRecord(dnsserver.DNS_RPC_RECORD):
@@ -148,15 +205,31 @@ class SRVRecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._target = target[:]
srv = dnsserver.DNS_RPC_RECORD_SRV()
srv.wPriority = priority
srv.wWeight = weight
srv.wPort = port
- srv.nameTarget.str = self._target
+ srv.nameTarget.str = target
srv.nameTarget.len = len(target)
self.data = srv
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ try:
+ target, port, priority, weight = data.split(sep)
+ except ValueError as e:
+ raise DNSParseError("SRV data must have four space "
+ "separated elements: "
+ "server, port, priority, weight; "
+ "not %r" % data) from e
+ try:
+ args = (target, int(port), int(priority), int(weight))
+ except ValueError as e:
+ raise DNSParseError("SRV port, priority, and weight "
+ "must be integers") from e
+
+ return cls(*args, **kwargs)
+
class TXTRecord(dnsserver.DNS_RPC_RECORD):
@@ -167,11 +240,8 @@ class TXTRecord(dnsserver.DNS_RPC_RECORD):
self.dwFlags = rank | node_flag
self.dwSerial = serial
self.dwTtlSeconds = ttl
- self._slist = []
- for s in slist:
- self._slist.append(s[:])
names = []
- for s in self._slist:
+ for s in slist:
name = dnsserver.DNS_RPC_NAME()
name.str = s
name.len = len(s)
@@ -180,3 +250,48 @@ class TXTRecord(dnsserver.DNS_RPC_RECORD):
txt.count = len(slist)
txt.str = names
self.data = txt
+
+ @classmethod
+ def from_string(cls, data, sep=None, **kwargs):
+ slist = shlex.split(data)
+ return cls(slist, **kwargs)
+
+
+#
+# Don't add new Record types after this line
+
+_RECORD_TYPE_LUT = {}
+def _setup_record_type_lut():
+ for k, v in globals().items():
+ if k[-6:] == 'Record':
+ k = k[:-6]
+ flag = getattr(dnsp, 'DNS_TYPE_' + k)
+ _RECORD_TYPE_LUT[k] = v
+ _RECORD_TYPE_LUT[flag] = v
+
+_setup_record_type_lut()
+del _setup_record_type_lut
+
+
+def record_from_string(t, data, sep=None, **kwargs):
+ """Get a DNS record of type t based on the data string.
+ Additional keywords (ttl, rank, etc) can be passed in.
+
+ t can be a dnsp.DNS_TYPE_* integer or a string like "A", "TXT", etc.
+ """
+ if isinstance(t, str):
+ t = t.upper()
+ try:
+ Record = _RECORD_TYPE_LUT[t]
+ except KeyError as e:
+ raise DNSParseError("Unsupported record type") from e
+
+ return Record.from_string(data, sep=sep, **kwargs)
+
+
+def flag_from_string(rec_type):
+ rtype = rec_type.upper()
+ try:
+ return getattr(dnsp, 'DNS_TYPE_' + rtype)
+ except AttributeError:
+ raise DNSParseError('Unknown type of DNS record %s' % rec_type) from e
diff --git a/python/samba/join.py b/python/samba/join.py
index d78375441fb..97745a3901a 100644
--- a/python/samba/join.py
+++ b/python/samba/join.py
@@ -41,7 +41,7 @@ from samba import werror
from base64 import b64encode
from samba import WERRORError, NTSTATUSError
from samba import sd_utils
-from samba.dnsserver import ARecord, AAAARecord, CNameRecord
+from samba.dnsserver import ARecord, AAAARecord, CNAMERecord
import logging
import random
import time
@@ -1192,7 +1192,7 @@ class DCJoinContext(object):
% (msdcs_cname, msdcs_zone, cname_target))
add_rec_buf = dnsserver.DNS_RPC_RECORD_BUF()
- rec = CNameRecord(cname_target)
+ rec = CNAMERecord(cname_target)
add_rec_buf.rec = rec
dns_conn.DnssrvUpdateRecord2(client_version,
0,
diff --git a/python/samba/netcmd/dns.py b/python/samba/netcmd/dns.py
index d4b06929aa3..a267c4105b5 100644
--- a/python/samba/netcmd/dns.py
+++ b/python/samba/netcmd/dns.py
@@ -40,7 +40,7 @@ from samba.netcmd import (
)
from samba.dcerpc import dnsp, dnsserver
-from samba.dnsserver import ARecord, AAAARecord, PTRRecord, CNameRecord, NSRecord, MXRecord, SOARecord, SRVRecord, TXTRecord
+from samba.dnsserver import record_from_string, DNSParseError, flag_from_string
def dns_connect(server, lp, creds):
@@ -166,30 +166,10 @@ def dns_addr_array_string(array):
def dns_type_flag(rec_type):
- rtype = rec_type.upper()
- if rtype == 'A':
- record_type = dnsp.DNS_TYPE_A
- elif rtype == 'AAAA':
- record_type = dnsp.DNS_TYPE_AAAA
- elif rtype == 'PTR':
- record_type = dnsp.DNS_TYPE_PTR
- elif rtype == 'NS':
- record_type = dnsp.DNS_TYPE_NS
- elif rtype == 'CNAME':
- record_type = dnsp.DNS_TYPE_CNAME
- elif rtype == 'SOA':
- record_type = dnsp.DNS_TYPE_SOA
- elif rtype == 'MX':
- record_type = dnsp.DNS_TYPE_MX
- elif rtype == 'SRV':
- record_type = dnsp.DNS_TYPE_SRV
- elif rtype == 'TXT':
- record_type = dnsp.DNS_TYPE_TXT
- elif rtype == 'ALL':
- record_type = dnsp.DNS_TYPE_ALL
- else:
- raise CommandError('Unknown type of DNS record %s' % rec_type)
- return record_type
+ try:
+ return flag_from_string(rec_type)
+ except DNSParseError as e:
+ raise CommandError(*e.args)
def dns_client_version(cli_version):
@@ -406,51 +386,11 @@ def print_dnsrecords(outf, records):
# Convert data into a dns record
def data_to_dns_record(record_type, data):
- if record_type == dnsp.DNS_TYPE_A:
- rec = ARecord(data)
- elif record_type == dnsp.DNS_TYPE_AAAA:
- rec = AAAARecord(data)
- elif record_type == dnsp.DNS_TYPE_PTR:
- rec = PTRRecord(data)
- elif record_type == dnsp.DNS_TYPE_CNAME:
- rec = CNameRecord(data)
- elif record_type == dnsp.DNS_TYPE_NS:
- rec = NSRecord(data)
- elif record_type == dnsp.DNS_TYPE_MX:
- tmp = data.split()
- if len(tmp) != 2:
- raise CommandError('Data requires 2 elements - mail_server, preference')
- mail_server = tmp[0]
- preference = int(tmp[1])
- rec = MXRecord(mail_server, preference)
- elif record_type == dnsp.DNS_TYPE_SRV:
- tmp = data.split()
- if len(tmp) != 4:
- raise CommandError('Data requires 4 elements - server, port, priority, weight')
- server = tmp[0]
- port = int(tmp[1])
- priority = int(tmp[2])
- weight = int(tmp[3])
- rec = SRVRecord(server, port, priority=priority, weight=weight)
- elif record_type == dnsp.DNS_TYPE_SOA:
- tmp = data.split()
- if len(tmp) != 7:
- raise CommandError('Data requires 7 elements - nameserver, email, serial, '
- 'refresh, retry, expire, minimumttl')
- nameserver = tmp[0]
- email = tmp[1]
- serial = int(tmp[2])
- refresh = int(tmp[3])
- retry = int(tmp[4])
- expire = int(tmp[5])
- minimum = int(tmp[6])
- rec = SOARecord(nameserver, email, serial=serial, refresh=refresh,
- retry=retry, expire=expire, minimum=minimum)
- elif record_type == dnsp.DNS_TYPE_TXT:
- slist = shlex.split(data)
- rec = TXTRecord(slist)
- else:
- raise CommandError('Unsupported record type')
+ try:
+ rec = record_from_string(record_type, data)
+ except DNSParseError as e:
+ raise CommandError(*e.args) from None
+
return rec
diff --git a/python/samba/provision/sambadns.py b/python/samba/provision/sambadns.py
index 8a5d8a93442..4ddde36b4cb 100644
--- a/python/samba/provision/sambadns.py
+++ b/python/samba/provision/sambadns.py
@@ -75,6 +75,15 @@ def get_dnsadmins_sid(samdb, domaindn):
return dnsadmins_sid
+# Note: these classses are not quite the same as similar looking ones
+# in ../dnsserver.py -- those ones are based on
+# dnsserver.DNS_RPC_RECORD ([MS-DNSP]2.2.2.2.5 "DNS_RPC_RECORD"),
+# these are based on dnsp.DnssrvRpcRecord ([MS-DNSP] 2.3.2.2
+# "DnsRecord").
+#
+# They are not interchangeable or mergeable. If you're talking over
+# the wire you want those other ones; these are the on-disk format.
+
class ARecord(dnsp.DnssrvRpcRecord):
def __init__(self, ip_addr, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE):
@@ -97,10 +106,10 @@ class AAAARecord(dnsp.DnssrvRpcRecord):
self.data = ip6_addr
-class CNameRecord(dnsp.DnssrvRpcRecord):
+class CNAMERecord(dnsp.DnssrvRpcRecord):
def __init__(self, cname, serial=1, ttl=900, rank=dnsp.DNS_RANK_ZONE):
- super(CNameRecord, self).__init__()
+ super().__init__()
self.wType = dnsp.DNS_TYPE_CNAME
self.rank = rank
self.dwSerial = serial
@@ -447,7 +456,7 @@ def add_ns_glue_record(samdb, container_dn, prefix, host):
def add_cname_record(samdb, container_dn, prefix, host):
- cname_record = CNameRecord(host)
+ cname_record = CNAMERecord(host)
msg = ldb.Message(ldb.Dn(samdb, "%s,%s" % (prefix, container_dn)))
msg["objectClass"] = ["top", "dnsNode"]
msg["dnsRecord"] = ldb.MessageElement(ndr_pack(cname_record), ldb.FLAG_MOD_ADD, "dnsRecord")
diff --git a/python/samba/tests/dcerpc/dnsserver.py b/python/samba/tests/dcerpc/dnsserver.py
index 604add7e642..5f7aa378575 100644
--- a/python/samba/tests/dcerpc/dnsserver.py
+++ b/python/samba/tests/dcerpc/dnsserver.py
@@ -26,7 +26,7 @@ from samba.samdb import SamDB
from samba.ndr import ndr_unpack, ndr_pack
from samba.dcerpc import dnsp, dnsserver, security
from samba.tests import RpcInterfaceTestCase, env_get_var_value
-from samba.netcmd.dns import ARecord, AAAARecord, PTRRecord, CNameRecord, NSRecord, MXRecord, SRVRecord, TXTRecord
+from samba.dnsserver import record_from_string, flag_from_string, ARecord
from samba import sd_utils, descriptor
from samba import WERRORError, werror
@@ -178,7 +178,7 @@ class DnsserverTests(RpcInterfaceTestCase):
self.custom_zone,
"@",
None,
- self.record_type_int(record_type_str),
+ flag_from_string(record_type_str),
dnsserver.DNS_RPC_VIEW_AUTHORITY_DATA,
None,
None)
@@ -219,7 +219,7 @@ class DnsserverTests(RpcInterfaceTestCase):
self.custom_zone,
"@",
None,
- self.record_type_int(record_type_str),
+ flag_from_string(record_type_str),
dnsserver.DNS_RPC_VIEW_AUTHORITY_DATA,
None,
None)
@@ -261,7 +261,7 @@ class DnsserverTests(RpcInterfaceTestCase):
self.custom_zone,
"a.b",
None,
- self.record_type_int(record_type_str),
+ flag_from_string(record_type_str),
dnsserver.DNS_RPC_VIEW_AUTHORITY_DATA,
None,
None)
@@ -291,7 +291,7 @@ class DnsserverTests(RpcInterfaceTestCase):
self.custom_zone,
"a.b",
None,
- self.record_type_int(record_type_str),
+ flag_from_string(record_type_str),
--
Samba Shared Repository
More information about the samba-cvs
mailing list