[Samba] [samba] 4.4.0rc2 demote and --remove-other-dead-server

mathias dufresne infractory at gmail.com
Wed Feb 10 16:35:10 UTC 2016


Hi all,

We were trying the new --remove-other-dead-server coming with the 4.4.0rc.
The domain is a brand new one with several DC added and two Windows
clients, no user yet.

Here is the smb.conf:
[global]
        workgroup = SAMBA
        realm = SAMBADOMAIN.TLD
        netbios name = DC200
        server role = active directory domain controller

        server services = -dns
        idmap_ldb:use rfc2307 = yes

[netlogon]
        path = /var/lib/samba/sysvol/samba.domain.tld/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No

This smb.conf is the same on al DC, modulo "netbios name" of course.

When trying to demote some dead DC, it always ends like that one:

dc200:~# samba-tool domain demote --verbose --remove-other-dead-server=dc201

Removing nTDSConnection: CN=54e7a869-12c4-45e2-91e5-8ef015a3dec2,CN=NTDS
Settings,CN=DC200,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samba,DC=domain,DC=tld
Removing nTDSConnection: CN=26405655-8fcb-4156-ba5a-8e0b7a60e8ab,CN=NTDS
Settings,CN=DC202,CN=Servers,CN=Authentification,CN=Sites,CN=Configuration,DC=samba,DC=domain,DC=tld
Removing nTDSConnection: CN=39270189-99f8-4640-b209-f1d421fb6661,CN=NTDS
Settings,CN=DC203,CN=Servers,CN=Authentification,CN=Sites,CN=Configuration,DC=samba,DC=domain,DC=tld
Removing nTDSDSA: CN=NTDS
Settings,CN=DC201,CN=Servers,CN=Authentification,CN=Sites,CN=Configuration,DC=samba,DC=domain,DC=tld
(and any children)
Removing RID Set: CN=RID Set,CN=DC201,OU=Domain
Controllers,DC=samba,DC=domain,DC=tld
Removing computer account: CN=DC201,OU=Domain
Controllers,DC=samba,DC=domain,DC=tld (and any child objects)
Removing Samba-specific DNS service account:
CN=dns-DC201,CN=Users,DC=samba,DC=domain,DC=tld
checking for DNS records to remove on samba.domain.tld
updating samba.domain.tld keeping 5 values, removing 1 values
checking for DNS records to remove on DomainDnsZones.samba.domain.tld
updating DomainDnsZones.samba.domain.tld keeping 3 values, removing 1 values
checking for DNS records to remove on ForestDnsZones.samba.domain.tld
updating ForestDnsZones.samba.domain.tld keeping 3 values, removing 1 values
checking
DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
updating
DC=_ldap._tcp.Authentification._sites.DomainDnsZones,DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
keeping 2 values, removing 1 values
updating
DC=_ldap._tcp.Authentification._sites.ForestDnsZones,DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
keeping 2 values, removing 1 values
updating
DC=_kerberos._tcp.Authentification._sites,DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
keeping 2 values, removing 1 values
updating
DC=_ldap._tcp.Authentification._sites,DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
keeping 2 values, removing 1 values
updating
DC=_gc._tcp.Authentification._sites,DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
keeping 2 values, removing 1 values
updating
DC=_ldap._tcp.DomainDnsZones,DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
keeping 3 values, removing 1 values
updating
DC=_ldap._tcp.ForestDnsZones,DC=samba.domain.tld,CN=MicrosoftDNS,DC=DomainDnsZones,DC=samba,DC=domain,DC=tld
keeping 3 values, removing 1 values
ERROR(<type 'exceptions.TypeError'>): uncaught exception - __ndr_unpack__()
argument 1 must be string or read-only buffer, not dnsp.DnssrvRpcRecord
  File "/usr/lib64/python2.7/site-packages/samba/netcmd/__init__.py", line
175, in _run
    return self.run(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/samba/netcmd/domain.py", line
720, in run
    remove_dc.remove_dc(samdb, logger, remove_other_dead_server)
  File "/usr/lib64/python2.7/site-packages/samba/remove_dc.py", line 423,
in remove_dc
    remove_dns_account=True)
  File "/usr/lib64/python2.7/site-packages/samba/remove_dc.py", line 351,
in offline_remove_ntds_dc
    remove_dns_account=remove_dns_account)
  File "/usr/lib64/python2.7/site-packages/samba/remove_dc.py", line 266,
in offline_remove_server
    remove_dns_references(samdb, logger, dnsHostName)
  File "/usr/lib64/python2.7/site-packages/samba/remove_dc.py", line 186,
in remove_dns_references
    for v in values if not to_remove(v) ]
  File "/usr/lib64/python2.7/site-packages/samba/remove_dc.py", line 160,
in to_remove
    dnsRecord = ndr_unpack(dnsp.DnssrvRpcRecord, value)
  File "/usr/lib64/python2.7/site-packages/samba/ndr.py", line 45, in
ndr_unpack
    object.__ndr_unpack__(data, allow_remaining=allow_remaining)
A transaction is still active in ldb context [0x17a4800] on
tdb:///var/lib/samba/private/sam.ldb

It seems a function is missing to extract encoded value of DNS record
before to use ndr_unpack() or __ndr_unpack()

Anyway, it smells good. I'm eager to be able to use that as when we tried
to restore Samba AD database all went well... but almost all went wrong
when we had to re-join all others DC. I would be able to re-test
restoration of Samba AD database after we used "samba-tool domain demote
--verbose --remove-other-dead-server=" to clean up database from old
references to DC.

Best regards,

mathias


More information about the samba mailing list