diff options
Diffstat (limited to 'source4/scripting/python')
| -rw-r--r-- | source4/scripting/python/samba/provision/__init__.py | 62 | ||||
| -rw-r--r-- | source4/scripting/python/samba/provision/common.py | 84 | ||||
| -rw-r--r-- | source4/scripting/python/samba/provision/sambadns.py | 52 | 
3 files changed, 106 insertions, 92 deletions
| diff --git a/source4/scripting/python/samba/provision/__init__.py b/source4/scripting/python/samba/provision/__init__.py index c3150a183c..5c4866cac9 100644 --- a/source4/scripting/python/samba/provision/__init__.py +++ b/source4/scripting/python/samba/provision/__init__.py @@ -48,7 +48,6 @@ from samba.dsdb import DS_DOMAIN_FUNCTION_2000  from samba import (      Ldb,      check_all_substituted, -    read_and_sub_file,      setup_file,      substitute_var,      valid_netbios_name, @@ -78,7 +77,16 @@ from samba.provision.descriptor import (      get_config_descriptor,      get_domain_descriptor      ) -from samba.provision.sambadns import setup_ad_dns, create_dns_update_list +from samba.provision.common import ( +    setup_path, +    setup_add_ldif, +    setup_modify_ldif, +    setup_ldb +    ) +from samba.provision.sambadns import ( +    setup_ad_dns, +    create_dns_update_list +    )  import samba.param  import samba.registry @@ -94,11 +102,6 @@ DEFAULTSITE = "Default-First-Site-Name"  LAST_PROVISION_USN_ATTRIBUTE = "lastProvisionUSN" -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) - -  class ProvisionPaths(object):      def __init__(self): @@ -402,51 +405,6 @@ findnss_uid = lambda names: findnss(pwd.getpwnam, names)[2]  findnss_gid = lambda names: findnss(grp.getgrnam, names)[2] -def setup_add_ldif(ldb, ldif_path, subst_vars=None,controls=["relax:0"]): -    """Setup a ldb in the private dir. - -    :param ldb: LDB file to import data into -    :param ldif_path: Path of the LDIF file to load -    :param subst_vars: Optional variables to subsitute in LDIF. -    :param nocontrols: Optional list of controls, can be None for no controls -    """ -    assert isinstance(ldif_path, str) -    data = read_and_sub_file(ldif_path, subst_vars) -    ldb.add_ldif(data, controls) - - -def setup_modify_ldif(ldb, ldif_path, subst_vars=None,controls=["relax:0"]): -    """Modify a ldb in the private dir. - -    :param ldb: LDB object. -    :param ldif_path: LDIF file path. -    :param subst_vars: Optional dictionary with substitution variables. -    """ -    data = read_and_sub_file(ldif_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: -        setup_add_ldif(ldb, ldif_path, subst_vars) -    except Exception: -        ldb.transaction_cancel() -        raise -    else: -        ldb.transaction_commit() - -  def provision_paths_from_lp(lp, dnsdomain):      """Set the default paths for provisioning. diff --git a/source4/scripting/python/samba/provision/common.py b/source4/scripting/python/samba/provision/common.py new file mode 100644 index 0000000000..04bdb0f3c3 --- /dev/null +++ b/source4/scripting/python/samba/provision/common.py @@ -0,0 +1,84 @@ + +# Unix SMB/CIFS implementation. +# utility functions for provisioning a Samba4 server + +# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007-2010 +# Copyright (C) Andrew Bartlett <abartlet@samba.org> 2008-2009 +# Copyright (C) Oliver Liebel <oliver@itc.li> 2008-2009 +# +# Based on the original in EJS: +# Copyright (C) Andrew Tridgell <tridge@samba.org> 2005 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# + +"""Functions for setting up a Samba configuration.""" + +__docformat__ = "restructuredText" + +import os +import tdb +import ldb +from samba import read_and_sub_file +from samba.param import setup_dir + + +def setup_path(file): +    """Return an absolute path to the provision tempate file specified by file""" +    return os.path.join(setup_dir(), file) + + +def setup_add_ldif(ldb, ldif_path, subst_vars=None,controls=["relax:0"]): +    """Setup a ldb in the private dir. + +    :param ldb: LDB file to import data into +    :param ldif_path: Path of the LDIF file to load +    :param subst_vars: Optional variables to subsitute in LDIF. +    :param nocontrols: Optional list of controls, can be None for no controls +    """ +    assert isinstance(ldif_path, str) +    data = read_and_sub_file(ldif_path, subst_vars) +    ldb.add_ldif(data, controls) + + +def setup_modify_ldif(ldb, ldif_path, subst_vars=None,controls=["relax:0"]): +    """Modify a ldb in the private dir. + +    :param ldb: LDB object. +    :param ldif_path: LDIF file path. +    :param subst_vars: Optional dictionary with substitution variables. +    """ +    data = read_and_sub_file(ldif_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: +        setup_add_ldif(ldb, ldif_path, subst_vars) +    except Exception: +        ldb.transaction_cancel() +        raise +    else: +        ldb.transaction_commit() diff --git a/source4/scripting/python/samba/provision/sambadns.py b/source4/scripting/python/samba/provision/sambadns.py index b3e5bdc64b..8ccb054785 100644 --- a/source4/scripting/python/samba/provision/sambadns.py +++ b/source4/scripting/python/samba/provision/sambadns.py @@ -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 | 
