X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-useradd;h=415b58026d0f31fbd845d6f9fa837a0a68fabf4f;hb=81248cee1a829786b261289d37117ce55f708766;hp=c51c944313cc7d0a1afefd294d6f04609eccbafa;hpb=b8a7b4595ce7bcfb0dc9d05306880fab1b36ab06;p=mirror%2Fuserdir-ldap.git diff --git a/ud-useradd b/ud-useradd index c51c944..415b580 100755 --- a/ud-useradd +++ b/ud-useradd @@ -1,6 +1,24 @@ #!/usr/bin/env python # -*- mode: python -*- +# Copyright (c) 1999-2000 Jason Gunthorpe +# Copyright (c) 2001-2003 James Troup +# Copyright (c) 2004 Joey Schulze +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + import string, re, time, ldap, getopt, sys, os, pwd; from userdir_ldap import *; from userdir_gpg import *; @@ -40,24 +58,34 @@ for (switch, val) in options: userdir_gpg.GPGKeyRings = OldGPGKeyRings; print "Accessing LDAP directory as '" + AdminUser + "'"; -Password = getpass(AdminUser + "'s password: "); +while (1): + Password = getpass(AdminUser + "'s password: "); + + if len(Password) == 0: + sys.exit(0) + + l = ldap.open(LDAPServer); + UserDn = "uid=" + AdminUser + "," + BaseDn; -# Connect to the ldap server -l = ldap.open(LDAPServer); -UserDn = "uid=" + AdminUser + "," + BaseDn; -l.simple_bind_s(UserDn,Password); + # Connect to the ldap server + try: + l.simple_bind_s(UserDn,Password); + except ldap.INVALID_CREDENTIALS: + continue + break # Locate the key of the user we are adding -GPGBasicOptions[0] = "--batch" # Permit loading of the config file +SetKeyrings(["/org/keyring.debian.org/keyrings/debian-keyring.gpg"]) while (1): Foo = raw_input("Who are you going to add (for a GPG search)? "); if Foo == "": - continue; + sys.exit(0); Keys = GPGKeySearch(Foo); if len(Keys) == 0: - print "Sorry, that search did not turn up any keys"; + print "Sorry, that search did not turn up any keys." + print "Has it been added to the Debian keyring already?" continue; if len(Keys) > 1: print "Sorry, more than one key was found, please specify the key to use by\nfingerprint:"; @@ -91,22 +119,24 @@ while len(Keys[0][1]) < 40: if Res == "": break; +Update = 0 Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"keyFingerPrint=" + Keys[0][1]); if len(Attrs) != 0: print "*** This key already belongs to",GetAttr(Attrs[0],"uid"); account = GetAttr(Attrs[0],"uid"); + Update = 1 # Try to get a uniq account name -Update=0 while 1: - Res = raw_input("Login account [" + account + "]? "); - if Res != "": - account = Res; + if Update == 0: + Res = raw_input("Login account [" + account + "]? "); + if Res != "": + account = Res; Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"uid=" + account); if len(Attrs) == 0: privsub = "%s@debian.org"%(account); break; - Res = raw_input("That account already exists, update [no]? "); + Res = raw_input("That account already exists, update [No/yes]? "); if Res == "yes": # Update mode, fetch the default values from the directory Update = 1; @@ -120,6 +150,8 @@ while 1: if privsub == None or privsub == "": privsub = " "; break; + else: + sys.exit(1) # Prompt for the first/last name and email address Res = raw_input("First name [" + cn + "]? "); @@ -143,7 +175,7 @@ if Res != "": # GID Res = raw_input("Group ID Number [" + gidNumber + "]? "); if Res != "": - gidNumber = Res; + gidNumber = Group2GID(Res); # UID if uidNumber == 0: @@ -185,7 +217,7 @@ print " Private Subscription:",privsub; print " GECOS Field: \"%s,,,,\"" % (FullName); print " Login Shell: /bin/bash"; print " Key Fingerprint:",Keys[0][1]; -Res = raw_input("Continue [no]? "); +Res = raw_input("Continue [No/yes]? "); if Res != "yes": sys.exit(1); @@ -221,10 +253,11 @@ if Update == 0: ("shadowMin","0"), ("shadowMax","99999"), ("shadowWarning","7"), - ("privateSub",privsub), ("userPassword","{crypt}"+Pass)]; if mn: Details.append(("mn",mn)); + if privsub != " ": + Details.append(("privateSub",privsub)) l.add_s(Dn,Details); else: # Modification