[Da-tools-commits] r349 .: Once again add usergroups, this time without changing the default for the GID

Marc 'HE' Brockschmidt he at debian.org
Tue Dec 25 09:27:55 UTC 2007


------------------------------------------------------------
revno: 349
committer: Marc 'HE' Brockschmidt <he at debian.org>
branch nick: userdir-ldap-common
timestamp: Tue 2007-12-25 10:27:55 +0100
message:
  Once again add usergroups, this time without changing the default for the GID
modified:
  ud-useradd
-------------- next part --------------
=== modified file 'ud-useradd'
--- a/ud-useradd	2007-12-25 09:25:26 +0000
+++ b/ud-useradd	2007-12-25 09:27:55 +0000
@@ -33,21 +33,31 @@
 #      search through all UIDs.
 def GetFreeID(l, RoleAccount):
    Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,
-                      "uidNumber=*",["uidNumber"]);
+                      "uidNumber=*",["uidNumber", "gidNumber"]);
    HighestRoleUID = 0;
    HighestUID = 0;
+   gids = [];
    for I in Attrs:
       ID = int(GetAttr(I,"uidNumber","0"));
+      gids.append(int(GetAttr(I, "gidNumber","0")))
       if ID < 1000 and ID > HighestRoleUID:
          HighestRoleUID = ID;
       if ID > HighestUID:
          HighestUID = ID;
 
+   resUID = 0;
    #try to get a UID below 1000 for role accounts:
    if RoleAccount and HighestRoleUID < 999:
-      return HighestRoleUID + 1;
+      resUID = HighestRoleUID + 1;
    else:
-      return HighestUID + 1;
+      resUID = HighestUID + 1;
+
+   #try to get a fitting GID:
+   resGID = resUID;
+   while resGID in gids:
+      resGID = resGID + 1
+
+   return (resUID, resGID)
 
 # Main starts here
 AdminUser = pwd.getpwuid(os.getuid())[0];
@@ -106,7 +116,7 @@
 account = Addr[1];
 
 privsub = email;
-gidNumber = str(DefaultGID);
+gidNumber = 0;
 uidNumber = 0;
 
 # Decide if we should use IDEA encryption
@@ -174,14 +184,25 @@
 if Res != "":
    privsub = Res;
 
+(uidNumber, generatedGID) = GetFreeID(l, RoleAccount)
+UserGroup = 0
+
+# UID
+if not Update:
+   Res = raw_input("User ID Number [%s]? " % (uidNumber));
+   if Res != "":
+      uidNumber = Res;
+
 # GID
-Res = raw_input("Group ID Number [" + gidNumber + "]? ");
+if not gidNumber:
+   gidNumber = DefaultGID
+
+Res = raw_input("Group ID Number (default group is %s, new usergroup %s) [%s]" % (DefaultGID, generatedGID, gidNumber));
 if Res != "":
-   gidNumber = Group2GID(l, Res);
+   gidNumber = Res;
 
-# UID
-if uidNumber == 0:
-   uidNumber = GetFreeID(l, RoleAccount);
+if gidNumber == generatedGID:
+   UserGroup = 1
 
 # Generate a random password
 if (not RoleAccount) and (Update == 0 or ForceMail == 1):
@@ -276,6 +297,12 @@
       Details.append(("mn",mn));
    if privsub != " ":
       Details.append(("privateSub",privsub))
+
+   #Add user group if needed, then the actual user:
+   if UserGroup == 1:
+      Dn = "gid=" + account + "," + BaseDn;
+      l.add_s(Dn,[("gid",account), ("gidNumber",str(gidNumber)), ("objectClass",("top", "debianGroup"))]);
+
    l.add_s(Dn,Details);
 else:
    # Modification



More information about the Da-tools-commits mailing list