Group add
authorjgg <>
Sun, 29 Oct 2000 02:16:26 +0000 (02:16 +0000)
committerjgg <>
Sun, 29 Oct 2000 02:16:26 +0000 (02:16 +0000)
debian/rules
ud-groupadd [new file with mode: 0755]

index d70d523..0068ce3 100755 (executable)
@@ -38,7 +38,7 @@ binary-indep: build
        echo "userdir_gpg" >> $(i)/$(pysite)/userdir_ldap.pth
        install -m 644 userdir_ldap.py userdir_gpg.py \
                $(i)/$(pysite)/userdir_ldap/
-       install -m 755 {ud-forwardlist,ud-gpgimport,ud-info,ud-ldapshow,ud-userimport,ud-mailgate,ud-generate,ud-passchk,ud-useradd,ud-replicate,ud-xearth,ud-fingerserv,ud-echelon} $(i)/usr/bin/
+       install -m 755 {ud-forwardlist,ud-gpgimport,ud-info,ud-ldapshow,ud-userimport,ud-mailgate,ud-generate,ud-passchk,ud-useradd,ud-replicate,ud-xearth,ud-fingerserv,ud-echelon,ud-groupadd} $(i)/usr/bin/
        install -m 644 web/*.tab $(i)/var/www/userdir-ldap/
        install -m 644 web/*.html $(i)/var/www/userdir-ldap/
        install -m 644 web/*.cfg $(i)/var/www/userdir-ldap/
diff --git a/ud-groupadd b/ud-groupadd
new file mode 100755 (executable)
index 0000000..e242567
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+# -*- mode: python -*-
+
+import string, re, time, ldap, getopt, sys, os, pwd;
+from userdir_ldap import *;
+from userdir_gpg import *;
+
+# This tries to search for a free UID. There are two possible ways to do
+# this, one is to fetch all the entires and pick the highest, the other
+# is to randomly guess uids until one is free. This uses the former.
+# Regrettably ldap doesn't have an integer attribute comparision function
+# so we can only cut the search down slightly 
+def GetFreeID(l):
+   HighestUID = 1000;
+   Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,  
+                      "gidnumber>="+str(HighestUID),["gidnumber"]);
+   HighestUID = 0;
+   for I in Attrs:
+      ID = int(GetAttr(I,"gidnumber","0"));
+      if ID > HighestUID and ID < 60000: 
+         HighestUID = ID;
+   return HighestUID + 1;
+
+# Main starts here
+AdminUser = pwd.getpwuid(os.getuid())[0];
+
+# Process options
+ForceMail = 0;
+OldGPGKeyRings = GPGKeyRings;
+userdir_gpg.GPGKeyRings = [];
+(options, arguments) = getopt.getopt(sys.argv[1:], "u:")
+for (switch, val) in options:
+   if (switch == '-u'):
+      AdminUser = val;
+
+print "Accessing LDAP directory as '" + AdminUser + "'";
+Password = getpass(AdminUser + "'s password: ");
+
+# Connect to the ldap server
+l = ldap.open(LDAPServer);
+UserDn = "uid=" + AdminUser + "," + BaseDn;
+l.simple_bind_s(UserDn,Password);
+
+while 1:    
+   Group = raw_input("Group name?");
+   if Group == "":
+      sys.exit(1);
+
+   Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"gid=" + Group);
+   if len(Attrs) == 0:
+      break;
+   print "Group already exists";
+  
+Id = GetFreeID(l);  
+print "Create group %s ID = %d"%(Group,Id);
+       
+# Submit the add request   
+Dn = "gid=" + Group + "," + BaseDn;
+print "Updating LDAP directory..",
+sys.stdout.flush();
+l.add_s(Dn,[("gid",Group),
+            ("gidnumber",str(Id)),
+            ("objectclass","top"),
+            ("objectclass","posixGroup")]);
+
+