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