From ec1593c484fbadd6cff934c68ebf69e4916c59a4 Mon Sep 17 00:00:00 2001 From: jgg <> Date: Sun, 29 Oct 2000 02:16:26 +0000 Subject: [PATCH] Group add --- debian/rules | 2 +- ud-groupadd | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100755 ud-groupadd diff --git a/debian/rules b/debian/rules index d70d523..0068ce3 100755 --- a/debian/rules +++ b/debian/rules @@ -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 index 0000000..e242567 --- /dev/null +++ b/ud-groupadd @@ -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")]); + + -- 2.20.1