[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha2-787-g1a8f5ab

Jelmer Vernooij jelmer at samba.org
Wed Feb 13 01:20:39 GMT 2008


The branch, v4-0-test has been updated
       via  1a8f5ab78ae24607ff66b06e82aef9316f0ae54b (commit)
       via  8b33860954ca03be1ea45fd8d40963dbbd5b162f (commit)
       via  f70aef8e51e1a2f186fe71edaa4c81a39b837573 (commit)
       via  bd0ef811c4e6419ba05076fbc151827cea5d1ca1 (commit)
      from  38855a9f145b54d05f4a508562fc1a6595e0d895 (commit)

http://gitweb.samba.org/?samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit 1a8f5ab78ae24607ff66b06e82aef9316f0ae54b
Merge: 8b33860954ca03be1ea45fd8d40963dbbd5b162f 38855a9f145b54d05f4a508562fc1a6595e0d895
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Wed Feb 13 02:20:02 2008 +0100

    Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into v4-0-trivial

commit 8b33860954ca03be1ea45fd8d40963dbbd5b162f
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Wed Feb 13 02:18:45 2008 +0100

    Initial work on a test for samba.tests.samdb

commit f70aef8e51e1a2f186fe71edaa4c81a39b837573
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Wed Feb 13 01:22:09 2008 +0100

    Add python version of newuser.py.

commit bd0ef811c4e6419ba05076fbc151827cea5d1ca1
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Wed Feb 13 01:21:06 2008 +0100

    Fix invalid symbol.

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

Summary of changes:
 source/samba4-skip                           |    1 +
 source/scripting/python/samba/provision.py   |    3 +-
 source/scripting/python/samba/samdb.py       |    8 ++-
 source/scripting/python/samba/tests/samdb.py |   55 +++++++++++++++++++++++
 source/selftest/samba4_tests.sh              |    1 +
 source/setup/newuser.py                      |   61 ++++++++++++++++++++++++++
 6 files changed, 125 insertions(+), 4 deletions(-)
 create mode 100644 source/scripting/python/samba/tests/samdb.py
 create mode 100755 source/setup/newuser.py


Changeset truncated at 500 lines:

diff --git a/source/samba4-skip b/source/samba4-skip
index b53f444..ea69e29 100644
--- a/source/samba4-skip
+++ b/source/samba4-skip
@@ -50,4 +50,5 @@ RPC-FRSAPI							# Not provided by Samba 4
 WINBIND							# FIXME: This should not be skipped
 NSS-TEST						# Fails
 samba4.samba3sam.python		# Conversion from EJS not yet finished
+samba4.samdb.python			# Not finished yet
 RAW-OFFLINE 			# Samba 4 doesn't have much offline support yet
diff --git a/source/scripting/python/samba/provision.py b/source/scripting/python/samba/provision.py
index 4f52d36..97021fc 100644
--- a/source/scripting/python/samba/provision.py
+++ b/source/scripting/python/samba/provision.py
@@ -332,7 +332,6 @@ def setup_samdb_partitions(samdb_path, setup_path, message, lp, session_info,
     schemadn_ldb = "schema.ldb"
     if ldap_backend is not None:
         schema_ldb = ldap_backend
-    
     	schemadn_ldb = ldap_backend
     	
     if ldap_backend_type == "fedora-ds":
@@ -536,6 +535,8 @@ def setup_samdb(path, setup_path, session_info, credentials, lp,
     :note: This will wipe the main SAM database file!
     """
 
+    assert serverrole in ("domain controller", "member server")
+
     # Also wipes the database
     setup_samdb_partitions(path, setup_path, schemadn=schemadn, configdn=configdn, 
                            domaindn=domaindn, message=message, lp=lp,
diff --git a/source/scripting/python/samba/samdb.py b/source/scripting/python/samba/samdb.py
index c11fabf..3c6bb23 100644
--- a/source/scripting/python/samba/samdb.py
+++ b/source/scripting/python/samba/samdb.py
@@ -100,12 +100,14 @@ userAccountControl: %u
         self.transaction_start()
 
         # find the DNs for the domain and the domain users group
-        res = self.search("", SCOPE_BASE, "defaultNamingContext=*", 
-                         ["defaultNamingContext"])
+        res = self.search("", scope=ldb.SCOPE_BASE, 
+                          expression="(defaultNamingContext=*)", 
+                          attrs=["defaultNamingContext"])
         assert(len(res) == 1 and res[0].defaultNamingContext is not None)
         domain_dn = res[0]["defaultNamingContext"][0]
         assert(domain_dn is not None)
-        dom_users = self.searchone(basedn=domain_dn, attribute="dn", expression="name=Domain Users")
+        dom_users = self.searchone(basedn=domain_dn, attribute="dn", 
+                                   expression="name=Domain Users")
         assert(dom_users is not None)
 
         user_dn = "CN=%s,CN=Users,%s" % (username, domain_dn)
diff --git a/source/scripting/python/samba/tests/samdb.py b/source/scripting/python/samba/tests/samdb.py
new file mode 100644
index 0000000..40e56be
--- /dev/null
+++ b/source/scripting/python/samba/tests/samdb.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+
+# Unix SMB/CIFS implementation. Tests for SamDB
+# Copyright (C) Jelmer Vernooij <jelmer at samba.org> 2008
+#   
+# 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/>.
+#
+from auth import system_session
+from credentials import Credentials
+import os
+from samba.provision import setup_samdb
+from samba.samdb import SamDB
+from samba.tests import get_loadparm, TestCaseInTempDir
+import security
+from unittest import TestCase
+import uuid
+
+class SamDBTestCase(TestCaseInTempDir):
+    def setUp(self):
+        super(SamDBTestCase, self).setUp()
+        invocationid = uuid.random()
+        domaindn = "DC=COM,DC=EXAMPLE"
+        self.domaindn = domaindn
+        configdn = "CN=Configuration," + domaindn
+        schemadn = "CN=Schema," + configdn
+        domainguid = uuid.random()
+        policyguid = uuid.random()
+        setup_path = lambda x: os.path.join("setup", x)
+        creds = Credentials()
+        domainsid = security.random_sid()
+        hostguid = uuid.random()
+        path = os.path.join(self.tempdir, "samdb.ldb")
+        self.samdb = setup_samdb(path, setup_path, system_session(), creds, 
+                                 get_loadparm(), schemadn, configdn, 
+                                 self.domaindn, "example.com", "EXAMPLE.COM", 
+                                 "FOO", lambda x: None, "foo", domaindn, 
+                                 False, domainsid, "# no aci", domainguid, 
+                                 policyguid, "EXAMPLE", True, "secret", 
+                                 "secret", "secret", hostguid, invocationid, 
+                                 "secret", "domain controller")
+
+    def test_add_foreign(self):
+        self.samdb.add_foreign(self.domaindn, "S-1-5-7", "Somedescription")
+
diff --git a/source/selftest/samba4_tests.sh b/source/selftest/samba4_tests.sh
index c90373e..2595d51 100755
--- a/source/selftest/samba4_tests.sh
+++ b/source/selftest/samba4_tests.sh
@@ -320,6 +320,7 @@ then
 	plantest "provision.python" none $SUBUNITRUN samba.tests.provision
 	plantest "samba3.python" none $SUBUNITRUN samba.tests.samba3
 	plantest "samr.python" dc $SUBUNITRUN samba.tests.dcerpc.sam
+	plantest "samdb.python" dc $SUBUNITRUN samba.tests.samdb
 	plantest "events.python" none PYTHONPATH="$PYTHONPATH:lib/events" $SUBUNITRUN tests
 	plantest "samba3sam.python" none PYTHONPATH="$PYTHONPATH:dsdb/samdb/ldb_modules/tests" $SUBUNITRUN samba3sam
 	plantest "rpcecho.python" dc $SUBUNITRUN samba.tests.dcerpc.rpcecho
diff --git a/source/setup/newuser.py b/source/setup/newuser.py
new file mode 100755
index 0000000..03ae4e5
--- /dev/null
+++ b/source/setup/newuser.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+#
+#	add a new user to a Samba4 server
+#	Copyright Andrew Tridgell 2005
+#	Copyright Jelmer Vernooij 2008
+#	Released under the GNU GPL v2 or later
+#
+
+import samba.getopt as options
+import optparse
+import pwd
+import sys
+
+from auth import system_session
+from samba.samdb import SamDB
+
+parser = optparse.OptionParser("newuser [options] <username> [<password>]")
+sambaopts = options.SambaOptions(parser)
+parser.add_option_group(sambaopts)
+parser.add_option_group(options.VersionOptions(parser))
+credopts = options.CredentialsOptions(parser)
+parser.add_option_group(credopts)
+parser.add_option("--quiet", help="Be quiet", action="store_true")
+parser.add_option("--unixname", help="Unix Username", type=str)
+
+opts, args = parser.parse_args()
+
+#
+#  print a message if quiet is not set
+#
+def message(text):
+	if not opts.quiet:
+		print text
+
+if len(args) == 0:
+	parser.print_usage()
+	sys.exit(1)
+
+username = args[0]
+if len(args) > 1:
+	password = args[1]
+else:
+	random_init(local)
+	options.password = randpass(12)
+	print "chose random password %s\n" % password
+
+if opts.unixname is None:
+	opts.unixname = username
+
+try:
+	pwd.getpwnam(opts.unixname)
+except KeyError:
+	print "ERROR: Unix user '%s' does not exist" % opts.unixname
+	sys.exit(1)
+
+creds = credopts.get_credentials()
+
+lp = sambaopts.get_loadparm()
+samdb = SamDB(url=lp.get("sam database"), session_info=system_session(), 
+              credentials=creds, lp=lp)
+samdb.newuser(username, opts.unixname, password)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list