[SCM] Samba Shared Repository - branch master updated

Amitay Isaacs amitay at samba.org
Mon Dec 12 19:29:02 MST 2011


The branch, master has been updated
       via  2142405 s4-provision: Do not guess partition file names, use @PARTITION record
       via  7f50890 s4-param: Added bin_dir(),sbin_dir() methods to get compiled in dirs
       via  a648563 s4-provision: Extract common utility routines in separate file
       via  20789bf tdb: Fix python documentation for tdb module
       via  eee2191 s4-provision: CN=MicrosoftDNS,CN=System container is in forest and not domain
       via  f02e4eb s4-cldap: Set DS_DNS_CONTROLLER bit if we are running RPC dnsserver
      from  a77b0dd libcli: Remove an unused variable

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 21424056bb4ad914871b009aee3a7567a3efdec0
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Mon Dec 12 10:53:55 2011 +1100

    s4-provision: Do not guess partition file names, use @PARTITION record
    
    This is to avoid duplicating the logic of generating partition file
    names. (partition file names are encoded partially as per RFC1738).
    
    Also, use tdb_copy() instead of filesystem copy function to copy
    database files, which guarantees correct database copy.
    
    Autobuild-User: Amitay Isaacs <amitay at samba.org>
    Autobuild-Date: Tue Dec 13 03:28:03 CET 2011 on sn-devel-104

commit 7f50890cd67fed69b049bde5328c4f662bab1806
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Mon Dec 12 14:18:21 2011 +1100

    s4-param: Added bin_dir(),sbin_dir() methods to get compiled in dirs

commit a648563cb732bd357c3d3eac1b5064293e2738ac
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Sun Dec 11 17:00:03 2011 +1100

    s4-provision: Extract common utility routines in separate file

commit 20789bfdde37ee3140422b5599d41a280c01d29f
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Sun Dec 11 16:09:32 2011 +1100

    tdb: Fix python documentation for tdb module

commit eee2191076472db3773d9ef2a900c744abe2a768
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Dec 8 17:34:57 2011 +1100

    s4-provision: CN=MicrosoftDNS,CN=System container is in forest and not domain

commit f02e4ebfafa6e5911e3fe744b1780527ab12c970
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Dec 8 09:28:45 2011 +1100

    s4-cldap: Set DS_DNS_CONTROLLER bit if we are running RPC dnsserver
    
    Till we have internal DNS server which appears in services, use
    endpoint services to find out if we are running dns server.

-----------------------------------------------------------------------

Summary of changes:
 lib/tdb/pytdb.c                                    |    2 +-
 source4/cldap_server/netlogon.c                    |    5 +
 source4/param/pyparam.c                            |   20 ++-
 .../scripting/python/samba/provision/__init__.py   |   62 +-----
 source4/scripting/python/samba/provision/common.py |   84 ++++++++
 .../scripting/python/samba/provision/sambadns.py   |  203 +++++++++----------
 6 files changed, 213 insertions(+), 163 deletions(-)
 create mode 100644 source4/scripting/python/samba/provision/common.py


Changeset truncated at 500 lines:

diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c
index b1ca075..4892752 100644
--- a/lib/tdb/pytdb.c
+++ b/lib/tdb/pytdb.c
@@ -539,7 +539,7 @@ static PyMappingMethods tdb_object_mapping = {
 	.mp_ass_subscript = (objobjargproc)obj_setitem,
 };
 static PyTypeObject PyTdb = {
-	.tp_name = "Tdb",
+	.tp_name = "tdb.Tdb",
 	.tp_basicsize = sizeof(PyTdbObject),
 	.tp_methods = tdb_object_methods,
 	.tp_getset = tdb_object_getsetters,
diff --git a/source4/cldap_server/netlogon.c b/source4/cldap_server/netlogon.c
index 9d9f45e..e9ec074 100644
--- a/source4/cldap_server/netlogon.c
+++ b/source4/cldap_server/netlogon.c
@@ -61,6 +61,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
 	struct ldb_result *dom_res = NULL, *user_res = NULL;
 	int ret;
 	const char **services = lpcfg_server_services(lp_ctx);
+	const char **rpc_services = lpcfg_dcerpc_endpoint_servers(lp_ctx);
 	uint32_t server_type;
 	const char *pdc_name;
 	struct GUID domain_uuid;
@@ -246,6 +247,10 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx,
 		server_type |= DS_SERVER_KDC;
 	}
 
+	if (str_list_check(rpc_services, "dnsserver")) {
+		server_type |= DS_DNS_CONTROLLER;
+	}
+
 	if (samdb_rodc(sam_ctx, &am_rodc) == LDB_SUCCESS && !am_rodc) {
 		server_type |= DS_SERVER_WRITABLE;
 	}
diff --git a/source4/param/pyparam.c b/source4/param/pyparam.c
index e7eb43f..4d246a7 100644
--- a/source4/param/pyparam.c
+++ b/source4/param/pyparam.c
@@ -451,17 +451,27 @@ PyTypeObject PyLoadparmService = {
 
 static PyObject *py_default_path(PyObject *self)
 {
-    return PyString_FromString(lp_default_path());
+	return PyString_FromString(lp_default_path());
 }
 
 static PyObject *py_setup_dir(PyObject *self)
 {
-    return PyString_FromString(dyn_SETUPDIR);
+	return PyString_FromString(dyn_SETUPDIR);
 }
 
 static PyObject *py_modules_dir(PyObject *self)
 {
-    return PyString_FromString(dyn_MODULESDIR);
+	return PyString_FromString(dyn_MODULESDIR);
+}
+
+static PyObject *py_bin_dir(PyObject *self)
+{
+	return PyString_FromString(dyn_BINDIR);
+}
+
+static PyObject *py_sbin_dir(PyObject *self)
+{
+	return PyString_FromString(dyn_SBINDIR);
 }
 
 static PyMethodDef pyparam_methods[] = {
@@ -471,6 +481,10 @@ static PyMethodDef pyparam_methods[] = {
         "Returns the compiled in location of provision tempates." },
     { "modules_dir", (PyCFunction)py_modules_dir, METH_NOARGS,
         "Returns the compiled in location of modules." },
+    { "bin_dir", (PyCFunction)py_bin_dir, METH_NOARGS,
+	"Returns the compiled in BINDIR." },
+    { "sbin_dir", (PyCFunction)py_sbin_dir, METH_NOARGS,
+	"Returns the compiled in SBINDIR." },
     { NULL }
 };
 
diff --git a/source4/scripting/python/samba/provision/__init__.py b/source4/scripting/python/samba/provision/__init__.py
index c3150a1..5c4866c 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 0000000..04bdb0f
--- /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 at samba.org> 2007-2010
+# Copyright (C) Andrew Bartlett <abartlet at samba.org> 2008-2009
+# Copyright (C) Oliver Liebel <oliver at itc.li> 2008-2009
+#
+# Based on the original in EJS:
+# Copyright (C) Andrew Tridgell <tridge at 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 bffb621..335ea8d 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,
         })
 
@@ -624,66 +596,88 @@ def create_zone_file(lp, logger, paths, targetdir, dnsdomain,
     if targetdir is None:
         os.system(rndc + " unfreeze " + lp.get("realm"))
 
+def tdb_copy(logger, file1, file2):
+    """Copy tdb file using tdbbackup utility and rename it
+    """
+    # Find the location of tdbbackup tool
+    dirs = ["bin", samba.param.bin_dir()]
+    for d in dirs:
+        toolpath = os.path.join(d, "tdbbackup")
+        if os.path.exists(toolpath):
+            break
+    status = os.system("%s -s '.dns' %s" % (toolpath, file1))
+    if status == 0:
+        os.rename("%s.dns" % file1, file2)
+    else:
+        raise Exception("Error copying %s" % file1)
 
-def create_samdb_copy(logger, paths, names, domainsid, domainguid):
+def create_samdb_copy(samdb, logger, paths, names, domainsid, domainguid):
     """Create a copy of samdb and give write permissions to named for dns partitions
     """
     private_dir = paths.private_dir
     samldb_dir = os.path.join(private_dir, "sam.ldb.d")
     dns_dir = os.path.dirname(paths.dns)
     dns_samldb_dir = os.path.join(dns_dir, "sam.ldb.d")
-    domainpart_file = "%s.ldb" % names.domaindn.upper()
-    configpart_file = "%s.ldb" % names.configdn.upper()
-    schemapart_file = "%s.ldb" % names.schemadn.upper()
-    domainzone_file = "DC=DOMAINDNSZONES,%s.ldb" % names.domaindn.upper()
-    forestzone_file = "DC=FORESTDNSZONES,%s.ldb" % names.rootdn.upper()
-    metadata_file = "metadata.tdb"
 
-    # Copy config, schema partitions, create empty domain partition
+    # Find the partitions and corresponding filenames
+    partfile = {}
+    res = samdb.search(base="@PARTITION", scope=ldb.SCOPE_BASE, attrs=["partition"])
+    for tmp in res[0]["partition"]:
+        (nc, fname) = tmp.split(':')
+        partfile[nc.upper()] = fname
+
+    # Create empty domain partition
+    domaindn = names.domaindn.upper()
+    domainpart_file = os.path.join(dns_dir, partfile[domaindn])
     try:
-        shutil.copyfile(os.path.join(private_dir, "sam.ldb"),
-                        os.path.join(dns_dir, "sam.ldb"))
         os.mkdir(dns_samldb_dir)
-        file(os.path.join(dns_samldb_dir, domainpart_file), 'w').close()
-        shutil.copyfile(os.path.join(samldb_dir, configpart_file),
-                        os.path.join(dns_samldb_dir, configpart_file))
-        shutil.copyfile(os.path.join(samldb_dir, schemapart_file),
-                        os.path.join(dns_samldb_dir, schemapart_file))
+        file(domainpart_file, 'w').close()
+
+        # Fill the basedn and @OPTION records in domain partition
+        dom_ldb = samba.Ldb(domainpart_file)
+        domainguid_line = "objectGUID: %s\n-" % domainguid
+        descr = b64encode(get_domain_descriptor(domainsid))
+        setup_add_ldif(dom_ldb, setup_path("provision_basedn.ldif"), {
+            "DOMAINDN" : names.domaindn,
+            "DOMAINGUID" : domainguid_line,
+            "DOMAINSID" : str(domainsid),
+            "DESCRIPTOR" : descr})
+        setup_add_ldif(dom_ldb, setup_path("provision_basedn_options.ldif"), None)
     except:
         logger.error("Failed to setup database for BIND, AD based DNS cannot be used")
         raise
+    del partfile[domaindn]
 
-    # Link metadata and dns partitions
+    # Link dns partitions and metadata
+    domainzonedn = "DC=DOMAINDNSZONES,%s" % names.domaindn.upper()
+    forestzonedn = "DC=FORESTDNSZONES,%s" % names.rootdn.upper()
+    domainzone_file = partfile[domainzonedn]
+    forestzone_file = partfile[forestzonedn]
+    metadata_file = "metadata.tdb"
     try:
         os.link(os.path.join(samldb_dir, metadata_file),
             os.path.join(dns_samldb_dir, metadata_file))
-        os.link(os.path.join(samldb_dir, domainzone_file),
-            os.path.join(dns_samldb_dir, domainzone_file))
-        os.link(os.path.join(samldb_dir, forestzone_file),
-            os.path.join(dns_samldb_dir, forestzone_file))
-    except OSError, e:
-        try:
-            os.symlink(os.path.join(samldb_dir, metadata_file),
-                os.path.join(dns_samldb_dir, metadata_file))
-            os.symlink(os.path.join(samldb_dir, domainzone_file),
-                os.path.join(dns_samldb_dir, domainzone_file))
-            os.symlink(os.path.join(samldb_dir, forestzone_file),
-                os.path.join(dns_samldb_dir, forestzone_file))
-        except OSError, e:
-            logger.error("Failed to setup database for BIND, AD based DNS cannot be used")
-            raise
-
-    # Fill the basedn and @OPTION records in domain partition
+        os.link(os.path.join(private_dir, domainzone_file),
+            os.path.join(dns_dir, domainzone_file))
+        os.link(os.path.join(private_dir, forestzone_file),
+            os.path.join(dns_dir, forestzone_file))
+    except OSError:
+        logger.error("Failed to setup database for BIND, AD based DNS cannot be used")
+        raise
+    del partfile[domainzonedn]
+    del partfile[forestzonedn]
+
+    # Copy root, config, schema partitions (and any other if any)
+    # Since samdb is open in the current process, copy them in a child process
     try:
-        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", {
-            "DOMAINDN" : names.domaindn,
-            "DOMAINGUID" : domainguid_line,
-            "DOMAINSID" : str(domainsid),
-            "DESCRIPTOR" : descr})
-        add_ldif(ldb, "provision_basedn_options.ldif", None)
+        tdb_copy(logger,
+                 os.path.join(private_dir, "sam.ldb"),
+                 os.path.join(dns_dir, "sam.ldb"))
+        for nc in partfile:
+            pfile = partfile[nc]
+            tdb_copy(logger,
+                     os.path.join(private_dir, pfile),
+                     os.path.join(dns_dir, pfile))
     except:
         logger.error("Failed to setup database for BIND, AD based DNS cannot be used")
         raise
@@ -693,22 +687,17 @@ def create_samdb_copy(logger, paths, names, domainsid, domainguid):
         try:
             os.chown(samldb_dir, -1, paths.bind_gid)
             os.chmod(samldb_dir, 0750)
-            os.chown(os.path.join(dns_dir, "sam.ldb"), -1, paths.bind_gid)
-            os.chmod(os.path.join(dns_dir, "sam.ldb"), 0660)
-            os.chown(dns_samldb_dir, -1, paths.bind_gid)
-            os.chmod(dns_samldb_dir, 0770)
-            os.chown(os.path.join(dns_samldb_dir, domainpart_file), -1, paths.bind_gid)
-            os.chmod(os.path.join(dns_samldb_dir, domainpart_file), 0660)
-            os.chown(os.path.join(dns_samldb_dir, configpart_file), -1, paths.bind_gid)
-            os.chmod(os.path.join(dns_samldb_dir, configpart_file), 0660)
-            os.chown(os.path.join(dns_samldb_dir, schemapart_file), -1, paths.bind_gid)
-            os.chmod(os.path.join(dns_samldb_dir, schemapart_file), 0660)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list