Rev 12007: Some more work on python bindings. in file:///home/jelmer/bzr.samba/python/

Jelmer Vernooij jelmer at samba.org
Fri Apr 27 21:34:38 GMT 2007


At file:///home/jelmer/bzr.samba/python/

------------------------------------------------------------
revno: 12007
revision-id: jelmer at samba.org-20070427213420-357blszvnfm0ynou
parent: jelmer at samba.org-20070426105008-heuatyry9ce2tccm
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: python
timestamp: Fri 2007-04-27 23:34:20 +0200
message:
  Some more work on python bindings.
added:
  source/scripting/python/credentials.py credentials.py-20070427191210-euo61ov2u851ndr7-1
  source/scripting/python/tests/ tests-20070427191204-rfs15exymc1wf5rw-1
  source/scripting/python/tests/param.py param.py-20070427191204-rfs15exymc1wf5rw-2
renamed:
  source/scripting/python/param.c => source/scripting/python/parammodule.c param.c-20070425124147-y6pej29g7xqsb3n6-1
modified:
  .bzrignore                     svn-v2:17811 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-.bzrignore
  source/build/m4/public.m4      svn-v2:7274 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fbuild%2fm4%2fpublic.m4
  source/build/smb_build/config_mk.pm svn-v2:3690 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fbuild%2fsmb_build%2fconfig_mk.pm
  source/build/smb_build/input.pm svn-v2:3690 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fbuild%2fsmb_build%2finput.pm
  source/lib/ldb/config.mk       svn-v2:665 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2flib%2fldb%2fconfig.mk
  source/lib/python/config.m4    configure.in-20070423105804-3mrp9flhlt8pjj8v-11
  source/lib/python/config.mk    makefile.pre.in-20070423105804-3mrp9flhlt8pjj8v-5
  source/lib/python/setup.py*    setup.py-20070423105804-3mrp9flhlt8pjj8v-14
  source/lib/tdb/config.mk       svn-v2:728 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2flib%2ftdb%2fconfig.mk
  source/libcli/config.mk        svn-v2:1436 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2flibcli%2fconfig.mk
  source/scripting/python/config.mk config.mk-20070425124132-wptmykwi2tvyqm26-1
  source/scripting/python/provision.py provision.py-20070424120955-t8vt1hp427dqjp2u-1
  source/scripting/python/upgrade.py upgrade.py-20070424123152-541ykovl4lb6s03k-1
  source/scripting/swig/config.mk svn-v2:14906 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fscripting%2fswig%2fconfig.mk
  source/setup/provision         svn-v2:8319 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fsetup%2fprovision
  source/scripting/python/parammodule.c param.c-20070425124147-y6pej29g7xqsb3n6-1
=== added file 'source/scripting/python/credentials.py'
--- a/source/scripting/python/credentials.py	1970-01-01 00:00:00 +0000
+++ b/source/scripting/python/credentials.py	2007-04-27 21:34:20 +0000
@@ -0,0 +1,3 @@
+credentials = ""
+def system_session():
+    pass

=== added directory 'source/scripting/python/tests'
=== added file 'source/scripting/python/tests/param.py'
--- a/source/scripting/python/tests/param.py	1970-01-01 00:00:00 +0000
+++ b/source/scripting/python/tests/param.py	2007-04-27 21:34:20 +0000
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+# Some simple tests for the Python bindings for param.
+# Note that this tests just the interface of the Python bindings, 
+# not the param code itself.
+#
+# Copyright (C) 2007 Jelmer Vernooij <jelmer at samba.org>
+# Published under the GNU LGPL
+from param import ParamFile, global_params
+from unittest import TestCase
+
+class SimpleParamTest(TestCase):
+    def setUp(self):
+        super(SimpleParamTest, self).setUp()
+        self.param = ParamFile("bla")
+
+    def test_get_string(self):
+        self.param.globals["bla"] = "some long text"
+        self.assertEquals("some long text", self.param.globals["bla"])
+
+    def test_get_list(self):
+        self.param.globals["some variable"] = "value;list"
+        self.assertEquals(["value", "list"], 
+                self.param.globals.get_list("some variable"))
+
+    def test_get_integer(self):
+        self.param.globals["some integer"] = "42"
+        self.assertEquals(42, self.param.globals.get_int("some integer"))
+
+    def test_set_integer(self):
+        self.param.globals["bla int"] = 42
+        self.assertEquals(42, self.param.globals.get_int("bla int"))
+
+    def set_parameter(self):
+        self.param.set("bla", "foobar")
+        self.assertEquals("foobar", self.param.get_string("bla"))
+
+    def get_share(self):
+        self.param.shares["nonexisting"]["read only"] = True
+
+class DefaultConfTest(TestCase):
+    def test_default_config(self):
+        self.assertTrue(len(self.param.globals["netbios name"]) > 1)

=== renamed file 'source/scripting/python/param.c' => 'source/scripting/python/parammodule.c'
--- a/source/scripting/python/param.c	2007-04-25 12:42:41 +0000
+++ b/source/scripting/python/parammodule.c	2007-04-27 21:34:20 +0000
@@ -25,6 +25,21 @@
 #include "Python.h"
 #include "param/param.h"
 
+PyTypeObject noddy_NoddyType;
+
+typedef struct {
+	    PyObject_HEAD
+} noddy_NoddyObject;
+
+static PyObject *loadparm_object(void)
+{
+	PyObject *self = PyObject_New();	
+
+	/* FIXME */
+
+	return self;
+}
+
 static PyObject *param_load(PyObject *self, PyObject *args)
 {
 	char *filename;
@@ -35,11 +50,16 @@
 
 	param = PyObject_New();
 
-	
+	/* FIXME: Add members:
+	 *   globals
+	 *   shares
+	 */
+
+	return param;
 }
 
 static PyMethodDef methods[] = {
-	{ "load", (PyCFunction)param_load, METH_VARARGS, NULL},
+	{ "ParamFile", (PyCFunction)param_load, METH_VARARGS, NULL},
 	{ NULL, NULL }
 };
 
@@ -51,6 +71,6 @@
 	if (mod == NULL)
 		return;
 
-	PyModule_AddObject
-
+	/* FIXME: Check error code */
+	PyModule_AddObject(mod, "default_config", loadparm_object());
 }

=== modified file '.bzrignore'
--- a/.bzrignore	2007-04-25 12:42:41 +0000
+++ b/.bzrignore	2007-04-27 21:34:20 +0000
@@ -179,3 +179,4 @@
 lib/ldb/swig/ldb.py
 source/lib/ldb/swig/ldb.py
 source/lib/tdb/swig/tdb.py
+source/lib/tdb/swig/tdb_wrap.c

=== modified file 'source/build/m4/public.m4'
--- a/source/build/m4/public.m4	2007-04-24 10:52:53 +0000
+++ b/source/build/m4/public.m4	2007-04-27 21:34:20 +0000
@@ -24,7 +24,7 @@
 # Start Subsystem $1
 @<:@SUBSYSTEM::$1@:>@
 OBJ_FILES = $2
-PRIVATE_DEPENDENCIES = $3
+PUBLIC_DEPENDENCIES = $3
 CFLAGS = $4
 ENABLE = YES
 # End Subsystem $1

=== modified file 'source/build/smb_build/config_mk.pm'
--- a/source/build/smb_build/config_mk.pm	2007-04-24 15:41:33 +0000
+++ b/source/build/smb_build/config_mk.pm	2007-04-27 21:34:20 +0000
@@ -19,10 +19,11 @@
 		"CPPFLAGS"		=> "list",
 		"LDFLAGS"		=> "list",
 		},
-	"SWIG" => {
+	"PYTHON" => {
 		SWIG_FILE => "string",
 		"PRIVATE_DEPENDENCIES"	=> "list",
 		"PUBLIC_DEPENDENCIES"	=> "list",
+		"OBJ_FILES" => "list",
 		"ENABLE"		=> "bool",
 	},
 	"SUBSYSTEM" => {

=== modified file 'source/build/smb_build/input.pm'
--- a/source/build/smb_build/input.pm	2007-04-25 10:52:04 +0000
+++ b/source/build/smb_build/input.pm	2007-04-27 21:34:20 +0000
@@ -133,22 +133,28 @@
 	add_libreplace($lib);
 }
 
-sub check_swig($$)
+sub check_python($$)
 {
-	my ($INPUT, $swig) = @_;
-
-	return if ($swig->{ENABLE} ne "YES");
-	
-	my $dirname = dirname($swig->{SWIG_FILE});
-	my $basename = basename($swig->{SWIG_FILE}, ".i");
-
-	$swig->{OUTPUT_TYPE} = ["SHARED_LIBRARY"];
-	$swig->{LIBRARY_REALNAME} = "$dirname/_$basename.\$(SHLIBEXT)";
-	$swig->{OBJ_FILES} = ["$dirname/$basename\_wrap\.o"];
-	$swig->{INSTALLDIR} = "PYTHONDIR";
-	push (@{$swig->{PUBLIC_DEPENDENCIES}}, "LIBPYTHON");
-
-	check_library($INPUT, $swig, ["SHARED_LIBRARY"]);
+	my ($INPUT, $python) = @_;
+
+	return if ($python->{ENABLE} ne "YES");
+
+	$python->{OUTPUT_TYPE} = ["SHARED_LIBRARY"];
+	$python->{INSTALLDIR} = "PYTHONDIR";
+	push (@{$python->{PUBLIC_DEPENDENCIES}}, "LIBPYTHON");
+	if (defined($python->{SWIG_FILE})) {
+		my $dirname = dirname($python->{SWIG_FILE});
+		my $basename = basename($python->{SWIG_FILE}, ".i");
+
+		$python->{OBJ_FILES} = ["$dirname/$basename\_wrap.o"];
+		$python->{LIBRARY_REALNAME} = "$dirname/_$basename.\$(SHLIBEXT)";
+	} else {
+		my $basename = $python->{NAME};
+		$basename =~ s/^python_//g;
+		$python->{LIBRARY_REALNAME} = "$basename.\$(SHLIBEXT)";
+	}
+
+	check_library($INPUT, $python, ["SHARED_LIBRARY"]);
 }
 
 sub check_binary($$)
@@ -259,8 +265,8 @@
 			check_library($INPUT, $part, $lib_ot);
 		} elsif ($part->{TYPE} eq "BINARY") {
 			check_binary($INPUT, $part);
-		} elsif ($part->{TYPE} eq "SWIG") {
-			check_swig($INPUT, $part);
+		} elsif ($part->{TYPE} eq "PYTHON") {
+			check_python($INPUT, $part);
 		} elsif ($part->{TYPE} eq "EXT_LIB") {
 		} else {
 			die("Unknown type $part->{TYPE}");

=== modified file 'source/lib/ldb/config.mk'
--- a/source/lib/ldb/config.mk	2007-04-24 15:41:33 +0000
+++ b/source/lib/ldb/config.mk	2007-04-27 21:34:20 +0000
@@ -304,7 +304,7 @@
 
 #######################
 # Start LIBRARY swig_ldb
-[SWIG::swig_ldb]
+[PYTHON::python_ldb]
 PUBLIC_DEPENDENCIES = ldb DYNCONFIG LIBPYTHON 
 PRIVATE_DEPENDENCIES = gensec
 SWIG_FILE = swig/ldb.i

=== modified file 'source/lib/python/config.m4'
--- a/source/lib/python/config.m4	2007-04-25 10:52:04 +0000
+++ b/source/lib/python/config.m4	2007-04-27 21:34:20 +0000
@@ -1518,7 +1518,6 @@
 	cp $srcdir/lib/python/Modules/Setup.dist lib/python/Modules/Setup
 fi
 
-AC_DEFINE_UNQUOTED(PLATFORM, $MACHDEP, [Platforms])
 SMB_SUBSYSTEM(LIBPYTHON, [], [INTERNAL_PYTHON], [-Ilib/python/Include -Ilib/python])
 SMB_ENABLE(python, YES)
 SMB_ENABLE(pgen, YES)

=== modified file 'source/lib/python/config.mk'
--- a/source/lib/python/config.mk	2007-04-24 10:52:53 +0000
+++ b/source/lib/python/config.mk	2007-04-27 21:34:20 +0000
@@ -35,7 +35,7 @@
 # XXX Note that a build now requires Python exist before the build starts
 ASDLGEN=	$(srcdir)/lib/python/Parser/asdl_c.py
 
-[LIBRARY::INTERNAL_PYTHON]
+[SUBSYSTEM::INTERNAL_PYTHON]
 LDFLAGS = -lm -lutil
 CFLAGS = -DPy_BUILD_CORE -Ilib/python/Include -Ilib/python -DPYTHONPATH=":plat-linux2" -DVERSION="2.6" -DPLATFORM="linux2"
 OBJ_FILES =	\
@@ -149,7 +149,7 @@
 # Build the interpreter
 [BINARY::python]
 ENABLE = NO
-PRIVATE_DEPENDENCIES = INTERNAL_PYTHON
+PRIVATE_DEPENDENCIES = LIBPYTHON python_param
 CFLAGS = -DPy_BUILD_CORE -Ilib/python/Include -Ilib/python
 OBJ_FILES = \
 			Modules/python.o

=== modified file 'source/lib/python/setup.py' (properties changed)
=== modified file 'source/lib/tdb/config.mk'
--- a/source/lib/tdb/config.mk	2007-04-24 15:41:33 +0000
+++ b/source/lib/tdb/config.mk	2007-04-27 21:34:20 +0000
@@ -60,7 +60,7 @@
 
 #######################
 # Start LIBRARY swig_tdb
-[SWIG::swig_tdb]
+[PYTHON::swig_tdb]
 SWIG_FILE = swig/tdb.i
 PUBLIC_DEPENDENCIES = LIBTDB DYNCONFIG
 # End LIBRARY swig_tdb

=== modified file 'source/libcli/config.mk'
--- a/source/libcli/config.mk	2007-04-24 15:41:33 +0000
+++ b/source/libcli/config.mk	2007-04-27 21:34:20 +0000
@@ -56,7 +56,7 @@
 PUBLIC_DEPENDENCIES = LIBNDR NDR_NBT LIBCLI_COMPOSITE LIBEVENTS \
 	NDR_SECURITY samba-socket LIBSAMBA-UTIL
 
-[SWIG::swig_libcli_nbt]
+[PYTHON::swig_libcli_nbt]
 SWIG_FILE = swig/libcli_nbt.i
 PUBLIC_DEPENDENCIES = LIBCLI_NBT DYNCONFIG LIBSAMBA-CONFIG
 

=== modified file 'source/scripting/python/config.mk'
--- a/source/scripting/python/config.mk	2007-04-25 12:42:41 +0000
+++ b/source/scripting/python/config.mk	2007-04-27 21:34:20 +0000
@@ -1,4 +1,4 @@
-[SUBSYSTEM::python_param]
-PUBLIC_DEPENDENCIES = LIBPYTHON LIBSAMBA-CONFIG
+[PYTHON::python_param]
+PRIVATE_DEPENDENCIES = LIBSAMBA-CONFIG
 OBJ_FILES = \
-			param.o
+			parammodule.o

=== modified file 'source/scripting/python/provision.py'
--- a/source/scripting/python/provision.py	2007-04-26 10:50:08 +0000
+++ b/source/scripting/python/provision.py	2007-04-27 21:34:20 +0000
@@ -5,21 +5,22 @@
 #    Released under the GNU GPL v2 or later
 #
 
+import os
+import pwd
+import grp
 from uuid import uuid4
+from socket import gethostname
+from param import default_config
 
 #
 #  return True if the current install seems to be OK
 #
 def install_ok(session_info, credentials):
-    lp = loadparm_init()
-    ldb = ldb_init()
-    ldb.session_info = session_info
-    ldb.credentials = credentials
-    if lp.get("realm") == "":
+    if default_config.get("realm") == "":
         return False
-    ldb.connect(lp.get("sam database"))
-    res = ldb.search("(cn=Administrator)")
-    if len(res) != 1:
+    ldb = Ldb(lp.get("sam database"), session_info=session_info, 
+            credentials=credentials)
+    if len(ldb.search("(cn=Administrator)")) != 1:
         return False
     return True
 
@@ -28,9 +29,11 @@
 #
 def findnss(nssfn, *names):
     for name in names:
-        if nssfn(name) is not None:
-            return name
-    print "Unable to find user/group for %s\n" % arguments[1]
+        try:
+            return nssfn(name)
+        except KeyError:
+            pass
+    raise Exception("Unable to find user/group for %s" % arguments[1])
 
 #
 # add a foreign security principle
@@ -91,15 +94,15 @@
 #  return first part of hostname
 #
 def hostname():
-    return sys.hostname().split(".")[0]
+    return gethostname().split(".")[0]
 
 # the ldb is in bad shape, possibly due to being built from an
 #   incompatible previous version of the code, so delete it
 #   completely 
 def ldb_delete(ldb):
-    println("Deleting %s\n" % ldb.filename)
+    print "Deleting %s\n" % ldb.filename
     lp = loadparm_init()
-    sys.unlink(sprintf("%s/%s", lp.get("private dir"), ldb.filename))
+    os.unlink("%s/%s" % (lp.get("private dir"), ldb.filename))
     ldb.transaction_cancel()
     ldb.close()
     ldb.connect(ldb.filename)
@@ -122,13 +125,12 @@
     attrs = ["dn"]
     basedn = ""
     try:
-        res = ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", basedn, ldb.SCOPE_SUBTREE, attrs)
+        for msg in ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", \
+                basedn, ldb.SCOPE_SUBTREE, attrs):
+            ldb.delete(msg.dn)
     except LdbError:
         ldb_delete(ldb)
 
-    for msg in res:
-        ldb.delete(msg.dn)
-
     try:
         res = ldb.search("(&(|(objectclass=*)(dn=*))(!(dn=@BASEINFO)))", basedn, ldb.SCOPE_SUBTREE, attrs)
     except LdbError:
@@ -147,7 +149,7 @@
 
     res = ldb.search("(objectClass=*)", "", ldb.SCOPE_BASE, rootDSE_attrs)
     assert len(res) == 1
-    if (typeof(res[0].namingContexts) == "undefined"):
+    if res[0].namingContexts is None:
         return
     for basedn in res[0].namingContexts:
         anything = "(|(objectclass=*)(dn=*))"
@@ -182,17 +184,13 @@
                 info.message("Failed to delete all records under " + basedn + ", " + len(res3) + " records remaining\n")
 
 def open_ldb(info, dbname, erase):
-    ldb = ldb_init()
-    ldb.session_info = info.session_info
-    ldb.credentials = info.credentials
-    ldb.filename = dbname
-
     try:
-        ldb.connect(dbname)
+        ldb = Ldb(dbname, session_info=info.session_info, 
+                credentials=info.credentials)
     except LdbError:
-        lp = loadparm_init()
-        sys.unlink(sprintf("%s/%s", lp.get("private dir"), dbname))
-        ldb.connect(dbname)
+        os.unlink("%s/%s" % (default_config.get("private dir"), dbname))
+        ldb = Ldb(dbname, session_info=info.session_info, 
+                credentials=info.credentials)
 
     ldb.transaction_start()
 
@@ -207,7 +205,7 @@
     lp = loadparm_init()
     src = lp.get("setup directory") + "/" + ldif
 
-    data = sys.file_load(src)
+    data = open(src, 'r').read()
     data = substitute_var(data, info.subobj)
 
     try:
@@ -223,7 +221,7 @@
     lp = loadparm_init()
     src = lp.get("setup directory") + "/" + ldif
 
-    data = sys.file_load(src)
+    data = open(src, 'r').read()
     data = substitute_var(data, info.subobj)
 
     try:
@@ -248,7 +246,7 @@
 
     src = lp.get("setup directory") + "/" + ldif
 
-    data = sys.file_load(src)
+    data = open(src, 'r').read()
     data = substitute_var(data, info.subobj)
 
     try:
@@ -266,9 +264,9 @@
     f = fname
     src = lp.get("setup directory") + "/" + template
 
-    sys.unlink(f)
+    os.unlink(f)
 
-    data = sys.file_load(src)
+    data = open(src, 'r').read()
     data = substitute_var(data, subobj)
 
     open(f, 'w').write(data)
@@ -352,7 +350,6 @@
 
 def provision_become_dc(subobj, message, paths, session_info):
     lp = loadparm_init()
-    sys = sys_init()
     info = Object()
 
     provision_fix_subobj(subobj, message, paths)
@@ -396,18 +393,17 @@
 #
 def provision(subobj, message, blank, paths, session_info, credentials, ldapbackend):
     lp = loadparm_init()
-    sys = sys_init()
     info = Object()
 
     provision_fix_subobj(subobj, message, paths)
 
     if subobj.DOMAINGUID is not None:
-        subobj.DOMAINGUID_MOD = sprintf("replace: objectGUID\nobjectGUID: %s\n-", subobj.DOMAINGUID)
+        subobj.DOMAINGUID_MOD = "replace: objectGUID\nobjectGUID: %s\n-" % subobj.DOMAINGUID
     else:
         subobj.DOMAINGUID_MOD = ""
 
     if subobj.HOSTGUID is not None:
-        subobj.HOSTGUID_ADD = sprintf("objectGUID: %s", subobj.HOSTGUID)
+        subobj.HOSTGUID_ADD = "objectGUID: %s" % subobj.HOSTGUID
     else:
         subobj.HOSTGUID_ADD = ""
 
@@ -417,13 +413,13 @@
     info.session_info = session_info
 
     # only install a new smb.conf if there isn't one there already
-    st = sys.stat(paths.smbconf)
+    st = os.stat(paths.smbconf)
     if st is None:
         message("Setting up smb.conf\n")
         setup_file("provision.smb.conf", info.message, paths.smbconf, subobj)
         lp.reload()
     # only install a new shares config db if there is none
-    st = sys.stat(paths.shareconf)
+    st = os.stat(paths.shareconf)
     if st is None:
         message("Setting up share.ldb\n")
         setup_ldb("share.ldif", info, paths.shareconf)
@@ -565,12 +561,8 @@
 # Write out a DNS zone file, from the info in the current database
 def provision_dns(subobj, message, paths, session_info, credentials):
     message("Setting up DNS zone: " + subobj.DNSDOMAIN + " \n")
-    ldb = ldb_init()
-    ldb.session_info = session_info
-    ldb.credentials = credentials
-
     # connect to the sam
-    ldb.connect(paths.samdb)
+    ldb = Ldb(paths.samdb, session_info=session_info, credentials=credentials)
 
     # These values may have changed, due to an incoming SamSync,
     # or may not have been specified, so fetch them from the database
@@ -643,19 +635,17 @@
     subobj.NTTIME       = sys.nttime()
     subobj.LDAPTIME     = ldaptime
     subobj.DATESTRING   = datestring
-    subobj.ROOT         = findnss(nss.getpwnam, "root")
-    subobj.NOBODY       = findnss(nss.getpwnam, "nobody")
-    subobj.NOGROUP      = findnss(nss.getgrnam, "nogroup", "nobody")
-    subobj.WHEEL        = findnss(nss.getgrnam, "wheel", "root", "staff", "adm")
-    subobj.BACKUP       = findnss(nss.getgrnam, "backup", "wheel", "root", "staff")
-    subobj.USERS        = findnss(nss.getgrnam, "users", "guest", "other", "unknown", "usr")
+    subobj.ROOT         = findnss(pwd.getpwnam, "root")[4]
+    subobj.NOBODY       = findnss(pwd.getpwnam, "nobody")[4]
+    subobj.NOGROUP      = findnss(grp.getgrnam, "nogroup", "nobody")[2]
+    subobj.WHEEL        = findnss(grp.getgrnam, "wheel", "root", "staff", "adm")[2]
+    subobj.BACKUP       = findnss(grp.getgrnam, "backup", "wheel", "root", "staff")[2]
+    subobj.USERS        = findnss(grp.getgrnam, "users", "guest", "other", "unknown", "usr")[2]
 
     subobj.DNSDOMAIN    = strlower(subobj.REALM)
-    subobj.DNSNAME      = sprintf("%s.%s", 
-                      strlower(subobj.HOSTNAME), 
-                      subobj.DNSDOMAIN)
+    subobj.DNSNAME      = "%s.%s" % (subobj.HOSTNAME.lower(), subobj.DNSDOMAIN)
     rdn_list = split(".", subobj.DNSDOMAIN)
-    subobj.DOMAINDN     = "DC=" + join(",DC=", rdn_list)
+    subobj.DOMAINDN     = "DC=" + ",DC=".join(rdn_list)
     subobj.DOMAINDN_LDB = "users.ldb"
     subobj.ROOTDN       = subobj.DOMAINDN
     subobj.CONFIGDN     = "CN=Configuration," + subobj.ROOTDN
@@ -726,14 +716,10 @@
 #
 def newuser(username, unixname, password, message, session_info, credentials):
     lp = loadparm_init()
-    samdb = lp.get("sam database")
-    ldb = ldb_init()
     random_init(local)
-    ldb.session_info = session_info
-    ldb.credentials = credentials
-
     # connect to the sam 
-    ldb.connect(samdb)
+    samdb = Ldb(lp.get("sam database"), session_info=session_info, 
+            credentials=credentials)
 
     ldb.transaction_start()
 
@@ -759,8 +745,7 @@
 unixName: %s
 sambaPassword: %s
 objectClass: user
-""" % (user_dn, username, dom_users,
-               unixname, password)
+""" % (user_dn, username, dom_users, unixname, password)
     #
     #  add the user to the users group as well
     #

=== modified file 'source/scripting/python/upgrade.py'
--- a/source/scripting/python/upgrade.py	2007-04-26 10:50:08 +0000
+++ b/source/scripting/python/upgrade.py	2007-04-27 21:34:20 +0000
@@ -4,7 +4,10 @@
 #	Released under the GNU GPL v2 or later
 #
 
+from provision import findnss
 import provision
+import grp
+import pwd
 from uuid import uuid4
 from param import default_configuration
 
@@ -26,14 +29,14 @@
 
 def upgrade_registry(regdb,prefix,ldb):
     assert regdb is not None:
-	prefix_up = strupper(prefix)
+	prefix_up = prefix.upper()
 	ldif = []
 
     for rk in regdb.keys:
 		pts = rk.name.split("/")
 
 		# Only handle selected hive
-        if strupper(pts[0]) != prefix_up:
+        if pts[0].upper() != prefix_up:
 			continue
 
 		keydn = regkey_to_dn(rk.name)
@@ -84,11 +87,9 @@
 		acc.nt_username = acc.username
 
     if acc.fullname is None:
-		var pw = nss.getpwnam(acc.fullname)
-		acc.fullname = pw.pw_gecos
+		acc.fullname = pwd.getpwnam(acc.fullname)[4]
 
-	pts = split(',', acc.fullname)
-	acc.fullname = pts[0]
+	acc.fullname = acc.fullname.split(",")[0]
 
     if acc.fullname is None:
 		acc.fullname = acc.username
@@ -96,8 +97,7 @@
 	assert acc.fullname is not None
 	assert acc.nt_username is not None
 
-	ldif = 
-"""dn: cn=%s,%s
+	ldif = """dn: cn=%s,%s
 objectClass: top
 objectClass: user
 lastLogon: %d
@@ -134,29 +134,26 @@
 
 	return ldif
 
-def upgrade_sam_group(grp,domaindn):
-	nss = nss_init()
-
-	if grp.sid_name_use == 5: # Well-known group
+def upgrade_sam_group(group,domaindn):
+	if group.sid_name_use == 5: # Well-known group
 		return None
 
-    if grp.nt_name in ("Domain Guests", "Domain Users", "Domain Admins"):
+    if group.nt_name in ("Domain Guests", "Domain Users", "Domain Admins"):
 		return None
 	
-    if grp.gid == -1:
-		gr = nss.getgrnam(grp.nt_name)
+    if group.gid == -1:
+		gr = grp.getgrnam(grp.nt_name)
     else:
-		gr = nss.getgrgid(grp.gid)
+		gr = grp.getgrgid(grp.gid)
 
     if gr is None:
-		grp.unixname = "UNKNOWN"
+		group.unixname = "UNKNOWN"
     else:
-		grp.unixname = gr.gr_name
+		group.unixname = gr.gr_name
 
-	assert grp.unixname is not None
+	assert group.unixname is not None
 	
-	ldif = 
-"""dn: cn=%s,%s
+	ldif = """dn: cn=%s,%s
 objectClass: top
 objectClass: group
 description: %s
@@ -164,8 +161,8 @@
 objectSid: %s
 unixName: %s
 samba3SidNameUse: %d
-""" % (grp.nt_name, domaindn, 
-grp.comment, grp.nt_name, grp.sid, grp.unixname, grp.sid_name_use)
+""" % (group.nt_name, domaindn, 
+group.comment, group.nt_name, group.sid, group.unixname, group.sid_name_use)
 
 	return ldif
 
@@ -247,7 +244,6 @@
 
 def upgrade_provision(samba3):
 	subobj = Object()
-	nss = nss_init()
 	lp = loadparm_init()
 
 	domainname = samba3.configuration.get("workgroup")
@@ -278,7 +274,7 @@
 		subobj.DOMAINGUID   = domsec.guid
 		subobj.DOMAINSID    = domsec.sid
     else:
-		println("Can't find domain secrets for '" + domainname + "'; using random SID and GUID")
+		print "Can't find domain secrets for '%s'; using random SID and GUID\n" % domainname
 		subobj.DOMAINGUID = uuid4()
 		subobj.DOMAINSID = randsid()
 	
@@ -295,18 +291,16 @@
 	subobj.NTTIME       = nttime()
 	subobj.LDAPTIME     = ldaptime()
 	subobj.DATESTRING   = datestring()
-	subobj.ROOT         = findnss(nss.getpwnam, "root")
-	subobj.NOBODY       = findnss(nss.getpwnam, "nobody")
-	subobj.NOGROUP      = findnss(nss.getgrnam, "nogroup", "nobody")
-	subobj.WHEEL        = findnss(nss.getgrnam, "wheel", "root")
-	subobj.USERS        = findnss(nss.getgrnam, "users", "guest", "other")
-	subobj.DNSDOMAIN    = strlower(subobj.REALM)
-	subobj.DNSNAME      = sprintf("%s.%s", 
-				      strlower(subobj.HOSTNAME), 
-				      subobj.DNSDOMAIN)
-	subobj.BASEDN       = "DC=" + join(",DC=", split(".", subobj.REALM))
-	rdn_list = split(".", subobj.DNSDOMAIN)
-	subobj.DOMAINDN     = "DC=" + join(",DC=", rdn_list)
+	subobj.ROOT         = findnss(pwd.getpwnam, "root")[4]
+	subobj.NOBODY       = findnss(pwd.getpwnam, "nobody")[4]
+	subobj.NOGROUP      = findnss(grp.getgrnam, "nogroup", "nobody")[2]
+	subobj.WHEEL        = findnss(grp.getgrnam, "wheel", "root")[2]
+	subobj.USERS        = findnss(grp.getgrnam, "users", "guest", "other")[2]
+	subobj.DNSDOMAIN    = subobj.REALM.lower()
+	subobj.DNSNAME      = "%s.%s" % (subobj.HOSTNAME.lower(), subobj.DNSDOMAIN)
+	subobj.BASEDN       = "DC=" + ",DC=".join(subobj.REALM.split("."))
+	rdn_list = subobj.DNSDOMAIN.split(".")
+	subobj.DOMAINDN     = "DC=" + ",DC=".join(rdn_list)
 	subobj.DOMAINDN_LDB = "users.ldb"
 	subobj.ROOTDN       = subobj.DOMAINDN
 
@@ -323,7 +317,7 @@
 					"rdn_name",
 					"show_deleted",
 					"partition"]
-	subobj.MODULES_LIST = ","join(modules_list)
+	subobj.MODULES_LIST = ",".join(modules_list)
 
 	return subobj
 
@@ -460,10 +454,7 @@
 def upgrade(subobj, samba3, message, paths, session_info, credentials):
 	ret = 0
 	lp = loadparm_init()
-	samdb = ldb_init()
-	samdb.session_info = session_info
-	samdb.credentials = credentials
-	samdb.connect(paths.samdb)
+	samdb = Ldb(paths.samdb, session_info=session_info, credentials=credentials)
 
 	message("Writing configuration\n")
 	newconf = upgrade_smbconf(samba3.configuration,True)
@@ -472,19 +463,15 @@
 	message("Importing account policies\n")
 	ldif = upgrade_sam_policy(samba3,subobj.BASEDN)
 	samdb.modify(ldif)
-	regdb = ldb_init()
-	regdb.connect(paths.hklm)
+	regdb = Ldb(paths.hklm)
 
-	ok = regdb.modify("
+	regdb.modify("
 dn: value=RefusePasswordChange,key=Parameters,key=Netlogon,key=Services,key=CurrentControlSet,key=System,HIVE=NONE
 replace: type
 type: 4
 replace: data
 data: %d
 " % samba3.policy.refuse_machine_password_change)
-    if not ok:
-		message("registry load failed: " + regdb.errstring() + "\n")
-		assert(ok)
 
 	message("Importing users\n")
     for account in samba3.samaccounts:
@@ -514,8 +501,7 @@
 	message("Importing registry data\n")
     for hive in ["hkcr","hkcu","hklm","hkpd","hku","hkpt"]:
 		message("... " + hive + "\n")
-		regdb = ldb_init()
-		regdb.connect(paths[hive])
+		regdb = Ldb(paths[hive])
 		ldif = upgrade_registry(samba3.registry, hive, regdb)
 		for (var j in ldif) {
 			var msg = "... ... " + j
@@ -528,8 +514,7 @@
 			message(msg + "\n")
 
 	message("Importing WINS data\n")
-	winsdb = ldb_init()
-	winsdb.connect(paths.winsdb)
+	winsdb = Ldb(paths.winsdb)
 	ldb_erase(winsdb)
 
 	ldif = upgrade_wins(samba3)
@@ -558,7 +543,7 @@
 @LIST: samldb,operational,objectguid,rdn_name,samba3sam
 """)
 
-		ok = samdb.add("""
+		samdb.add("""
 dn: @MAP=samba3sam
 @MAP_URL: %s""", ldapurl))
 
@@ -566,10 +551,8 @@
 
 def upgrade_verify(subobj, samba3,paths,message):
 	message("Verifying account policies\n")
-	samldb = ldb_init()
-	ne = 0
 
-	ok = samldb.connect(paths.samdb)
+	samldb = Ldb(paths.samdb)
 
     for account in samba3.samaccounts:
 		msg = samldb.search("(&(sAMAccountName=" + account.nt_username + ")(objectclass=user))")

=== modified file 'source/scripting/swig/config.mk'
--- a/source/scripting/swig/config.mk	2007-04-24 15:41:33 +0000
+++ b/source/scripting/swig/config.mk	2007-04-27 21:34:20 +0000
@@ -1,6 +1,6 @@
 #######################
 # Start LIBRARY swig_dcerpc
-[SWIG::swig_dcerpc]
+[PYTHON::swig_dcerpc]
 SWIG_FILE = dcerpc.i
 PUBLIC_DEPENDENCIES = LIBCLI_SMB NDR_MISC LIBSAMBA-UTIL LIBSAMBA-CONFIG dcerpc_samr RPC_NDR_LSA DYNCONFIG
 # End LIBRARY swig_dcerpc
@@ -12,7 +12,7 @@
 
 .SUFFIXES: _wrap.c .i
 
-.i_wrap.c:
+.i._wrap.c:
 	swig -I$(srcdir)/scripting/swig -python $<
 
 SWIG_INCLUDES = librpc/gen_ndr/samr.i librpc/gen_ndr/lsa.i librpc/gen_ndr/spoolss.i

=== modified file 'source/setup/provision'
--- a/source/setup/provision	2007-04-26 10:50:08 +0000
+++ b/source/setup/provision	2007-04-27 21:34:20 +0000
@@ -100,9 +100,9 @@
 #}
 
 if opts.aci is not None:
-	print "set ACI: %s\n" % subobj["ACI"])
+	print "set ACI: %s\n" % subobj["ACI"]
 
-print "set DOMAIN SID: %s\n" % subobj["DOMAINSID"])
+print "set DOMAIN SID: %s\n" % subobj["DOMAINSID"]
 
 if opts.ldap_backend:
 	if not opts.ldap_module:



More information about the samba-cvs mailing list