1
0
mirror of https://github.com/samba-team/samba.git synced 2025-07-12 04:59:09 +03:00

s4-provision: Extract common utility routines in separate file

This commit is contained in:
Amitay Isaacs
2011-12-11 17:00:03 +11:00
parent 20789bfdde
commit a648563cb7
3 changed files with 106 additions and 92 deletions

View File

@ -41,42 +41,14 @@ from samba.provision.descriptor import (
get_domain_descriptor,
get_dns_partition_descriptor
)
from samba.provision.common import (
setup_path,
setup_add_ldif,
setup_modify_ldif,
setup_ldb
)
def add_ldif(ldb, ldif_file, subst_vars, controls=["relax:0"]):
ldif_file_path = os.path.join(samba.param.setup_dir(), ldif_file)
data = read_and_sub_file(ldif_file_path, subst_vars)
ldb.add_ldif(data, controls)
def modify_ldif(ldb, ldif_file, subst_vars, controls=["relax:0"]):
ldif_file_path = os.path.join(samba.param.setup_dir(), ldif_file)
data = read_and_sub_file(ldif_file_path, subst_vars)
ldb.modify_ldif(data, controls)
def setup_ldb(ldb, ldif_path, subst_vars):
"""Import a LDIF a file into a LDB handle, optionally substituting
variables.
:note: Either all LDIF data will be added or none (using transactions).
:param ldb: LDB file to import into.
:param ldif_path: Path to the LDIF file.
:param subst_vars: Dictionary with substitution variables.
"""
assert ldb is not None
ldb.transaction_start()
try:
add_ldif(ldb, ldif_path, subst_vars)
except Exception:
ldb.transaction_cancel()
raise
else:
ldb.transaction_commit()
def setup_path(file):
"""Return an absolute path to the provision tempate file specified by file"""
return os.path.join(samba.param.setup_dir(), file)
def get_domainguid(samdb, domaindn):
res = samdb.search(base=domaindn, scope=ldb.SCOPE_BASE, attrs=["objectGUID"])
domainguid = str(ndr_unpack(misc.GUID, res[0]["objectGUID"][0]))
@ -173,7 +145,7 @@ def setup_dns_partitions(samdb, domainsid, domaindn, forestdn, configdn, serverd
domainzone_dn = "DC=DomainDnsZones,%s" % domaindn
forestzone_dn = "DC=ForestDnsZones,%s" % forestdn
descriptor = get_dns_partition_descriptor(domainsid)
add_ldif(samdb, "provision_dnszones_partitions.ldif", {
setup_add_ldif(samdb, setup_path("provision_dnszones_partitions.ldif"), {
"DOMAINZONE_DN": domainzone_dn,
"FORESTZONE_DN": forestzone_dn,
"SECDESC" : b64encode(descriptor)
@ -188,7 +160,7 @@ def setup_dns_partitions(samdb, domainsid, domaindn, forestdn, configdn, serverd
domainzone_dns = ldb.Dn(samdb, domainzone_dn).canonical_ex_str().strip()
forestzone_dns = ldb.Dn(samdb, forestzone_dn).canonical_ex_str().strip()
add_ldif(samdb, "provision_dnszones_add.ldif", {
setup_add_ldif(samdb, setup_path("provision_dnszones_add.ldif"), {
"DOMAINZONE_DN": domainzone_dn,
"FORESTZONE_DN": forestzone_dn,
"DOMAINZONE_GUID": domainzone_guid,
@ -199,7 +171,7 @@ def setup_dns_partitions(samdb, domainsid, domaindn, forestdn, configdn, serverd
"SERVERDN": serverdn,
})
modify_ldif(samdb, "provision_dnszones_modify.ldif", {
setup_modify_ldif(samdb, setup_path("provision_dnszones_modify.ldif"), {
"CONFIGDN": configdn,
"SERVERDN": serverdn,
"DOMAINZONE_DN": domainzone_dn,
@ -208,7 +180,7 @@ def setup_dns_partitions(samdb, domainsid, domaindn, forestdn, configdn, serverd
def add_dns_accounts(samdb, domaindn):
add_ldif(samdb, "provision_dns_accounts_add.ldif", {
setup_add_ldif(samdb, setup_path("provision_dns_accounts_add.ldif"), {
"DOMAINDN": domaindn,
})
@ -678,12 +650,12 @@ def create_samdb_copy(logger, paths, names, domainsid, domainguid):
ldb = samba.Ldb(os.path.join(dns_samldb_dir, domainpart_file))
domainguid_line = "objectGUID: %s\n-" % domainguid
descr = b64encode(get_domain_descriptor(domainsid))
add_ldif(ldb, "provision_basedn.ldif", {
setup_add_ldif(ldb, setup_path("provision_basedn.ldif"), {
"DOMAINDN" : names.domaindn,
"DOMAINGUID" : domainguid_line,
"DOMAINSID" : str(domainsid),
"DESCRIPTOR" : descr})
add_ldif(ldb, "provision_basedn_options.ldif", None)
setup_add_ldif(ldb, setup_path("provision_basedn_options.ldif"), None)
except:
logger.error("Failed to setup database for BIND, AD based DNS cannot be used")
raise