s4: Make unixid optional
authorMatthieu Patou <mat@matws.net>
Sun, 22 Nov 2009 16:50:31 +0000 (19:50 +0300)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 20 Jan 2010 18:11:15 +0000 (07:11 +1300)
Make unixid optional, if value not supplied next id from id pool will be used.
  Create a function to get next id in id pool.

source4/scripting/python/samba/idmap.py

index ad209f42deb04829bf41c4caee3a2334c86f4f99..c0b20bd2579e8322c846690d7deb2d16b9f939e9 100644 (file)
@@ -22,6 +22,7 @@
 
 __docformat__ = "restructuredText"
 
+import ldb
 import samba
 
 class IDmapDB(samba.Ldb):
@@ -50,12 +51,35 @@ class IDmapDB(samba.Ldb):
         super(IDmapDB, self).connect(url=self.lp.private_path(url), flags=flags,
                 options=options)
 
-    def setup_name_mapping(self, sid, type, unixid):
+
+    def increment_xid(self):
+        """Increment xidNumber, if not present it create and assign it to the lowerBound
+
+        :return xid can that be used for SID/unixid mapping
+        """
+        res=self.search(expression="dn=CN=CONFIG",base="", scope=ldb.SCOPE_SUBTREE)
+        id=res[0].get("xidNumber")
+        flag=ldb.FLAG_MOD_REPLACE
+        if id == None:
+            id=res[0].get("lowerBound")
+            flag = ldb.FLAG_MOD_ADD
+        newid = int(str(id)) + 1
+        msg = ldb.Message()
+        msg.dn = ldb.Dn(self,"CN=CONFIG")
+        msg["xidNumber"] = ldb.MessageElement(str(newid),flag,"xidNumber")
+        self.modify(msg)
+
+        return id
+
+
+    def setup_name_mapping(self, sid, type, unixid=None):
         """Setup a mapping between a sam name and a unix name.
 
         :param sid: SID of the NT-side of the mapping.
-        :param unixname: Unix name to map to.
+        :param unixname: Unix id to map to, if none supplied the next one will be selected
         """
+        if unixid == None:
+            unixid = self.increment_xid()
         type_string = ""
         if type == self.TYPE_UID:
             type_string = "ID_TYPE_UID"