from samba.dsdb import (
DS_DOMAIN_FUNCTION_2000,
DS_DOMAIN_FUNCTION_2003,
- DS_DOMAIN_FUNCTION_2008_R2
+ DS_DOMAIN_FUNCTION_2008_R2,
+ DS_DOMAIN_FUNCTION_2012_R2
)
from samba.descriptor import (
get_domain_descriptor,
def is_valid_os_level(os_level):
- return DS_DOMAIN_FUNCTION_2000 <= os_level <= DS_DOMAIN_FUNCTION_2008_R2
+ return DS_DOMAIN_FUNCTION_2000 <= os_level <= DS_DOMAIN_FUNCTION_2012_R2
def create_dns_legacy(samdb, domainsid, forestdn, dnsadmins_sid):
dnsadmins_sid = get_dnsadmins_sid(samdb, domaindn)
domainguid = get_domainguid(samdb, domaindn)
- # Create CN=System
- logger.info("Creating CN=MicrosoftDNS,CN=System,%s" % domaindn)
- create_dns_legacy(samdb, names.domainsid, domaindn, dnsadmins_sid)
-
- if os_level == DS_DOMAIN_FUNCTION_2000:
- # Populating legacy dns
- logger.info("Populating CN=MicrosoftDNS,CN=System,%s" % domaindn)
- fill_dns_data_legacy(samdb, names.domainsid, domaindn, dnsdomain, site,
- hostname, hostip, hostip6, dnsadmins_sid)
-
- elif dns_backend in ("SAMBA_INTERNAL", "BIND9_DLZ") and \
- os_level >= DS_DOMAIN_FUNCTION_2003:
-
- # Create DNS partitions
- logger.info("Creating DomainDnsZones and ForestDnsZones partitions")
- create_dns_partitions(samdb, names.domainsid, names, domaindn, forestdn,
- dnsadmins_sid, fill_level)
+ samdb.transaction_start()
+ try:
+ # Create CN=System
+ logger.info("Creating CN=MicrosoftDNS,CN=System,%s" % domaindn)
+ create_dns_legacy(samdb, names.domainsid, domaindn, dnsadmins_sid)
+
+ if os_level == DS_DOMAIN_FUNCTION_2000:
+ # Populating legacy dns
+ logger.info("Populating CN=MicrosoftDNS,CN=System,%s" % domaindn)
+ fill_dns_data_legacy(samdb, names.domainsid, domaindn, dnsdomain, site,
+ hostname, hostip, hostip6, dnsadmins_sid)
+
+ elif dns_backend in ("SAMBA_INTERNAL", "BIND9_DLZ") and \
+ os_level >= DS_DOMAIN_FUNCTION_2003:
+
+ # Create DNS partitions
+ logger.info("Creating DomainDnsZones and ForestDnsZones partitions")
+ create_dns_partitions(samdb, names.domainsid, names, domaindn, forestdn,
+ dnsadmins_sid, fill_level)
+
+ # Populating dns partitions
+ logger.info("Populating DomainDnsZones and ForestDnsZones partitions")
+ fill_dns_data_partitions(samdb, names.domainsid, site, domaindn, forestdn,
+ dnsdomain, dnsforest, hostname, hostip, hostip6,
+ domainguid, names.ntdsguid, dnsadmins_sid,
+ fill_level=fill_level)
- # Populating dns partitions
- logger.info("Populating DomainDnsZones and ForestDnsZones partitions")
- fill_dns_data_partitions(samdb, names.domainsid, site, domaindn, forestdn,
- dnsdomain, dnsforest, hostname, hostip, hostip6,
- domainguid, names.ntdsguid, dnsadmins_sid,
- fill_level=fill_level)
+ except:
+ samdb.transaction_cancel()
+ raise
+ else:
+ samdb.transaction_commit()
if dns_backend.startswith("BIND9_"):
setup_bind9_dns(samdb, secretsdb, names, paths, lp, logger,
dns_keytab_path=paths.dns_keytab, dnspass=dnspass,
key_version_number=key_version_number)
+ dns_keytab_path = os.path.join(paths.private_dir, paths.dns_keytab)
+ if os.path.isfile(dns_keytab_path) and paths.bind_gid is not None:
+ try:
+ os.chmod(dns_keytab_path, 0640)
+ os.chown(dns_keytab_path, -1, paths.bind_gid)
+ except OSError:
+ if not os.environ.has_key('SAMBA_SELFTEST'):
+ logger.info("Failed to chown %s to bind gid %u",
+ dns_keytab_path, paths.bind_gid)
+
create_dns_dir(logger, paths)
if dns_backend == "BIND9_FLATFILE":