X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-useradd;h=74008e5bbffd561937acb88d2deda9ccaaf03287;hb=65b2c0e97ea1a08f194f9b56aa0c80e2f86ae460;hp=4d929e391477fdfbf18e09cf03c5e5b5d2b138d3;hpb=170763ef20b68dbc1b1d3324e1113b18a774ce86;p=mirror%2Fuserdir-ldap.git diff --git a/ud-useradd b/ud-useradd index 4d929e3..74008e5 100755 --- a/ud-useradd +++ b/ud-useradd @@ -7,12 +7,12 @@ 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 formar. +# 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 = 1400; - Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,\ + Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL, "uidnumber>="+str(HighestUID),["uidnumber"]); HighestUID = 0; for I in Attrs: @@ -22,12 +22,20 @@ def GetFreeID(l): return HighestUID + 1; # Main starts here +AdminUser = pwd.getpwuid(os.getuid())[0]; # Process options -(options, arguments) = getopt.getopt(sys.argv[1:], "u:") +ForceMail = 0; +OldGPGKeyRings = GPGKeyRings; +userdir_gpg.GPGKeyRings = []; +(options, arguments) = getopt.getopt(sys.argv[1:], "u:ma") for (switch, val) in options: if (switch == '-u'): - AdminUser = val + AdminUser = val; + elif (switch == '-m'): + ForceMail = 1; + elif (switch == '-a'): + userdir_gpg.GPGKeyRings = OldGPGKeyRings; print "Accessing LDAP directory as '" + AdminUser + "'"; Password = getpass(AdminUser + "'s password: "); @@ -89,6 +97,7 @@ while 1: 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]? "); if Res == "yes": @@ -134,14 +143,13 @@ if uidnumber == 0: uidnumber = GetFreeID(l); # Generate a random password -if Update == 0: +if Update == 0 or ForceMail == 1: Password = raw_input("User's Password (Enter for random)? "); if Password == "": print "Randomizing and encrypting password" Password = GenPass(); Pass = HashPass(Password); - print "PASS: ", Password; # Use GPG to encrypt it, pass the fingerprint to ID it CryptedPass = GPGEncrypt("Your new password is '" + Password + "'\n",\ @@ -183,7 +191,7 @@ Subst["__LOGIN__"] = account; Subst["__PRIVATE__"] = privsub; Subst["__EMAIL__"] = email; Subst["__PASSWORD__"] = CryptedPass; -Subst["__LISTPASS__"] = string.strip(open(pwd.getpwuid(os.getuid())[5]+"/.debian-lists_passwd","r").read()); +#Subst["__LISTPASS__"] = string.strip(open(pwd.getpwuid(os.getuid())[5]+"/.debian-lists_passwd","r").read()); # Generate the LDAP request Rec = [(ldap.MOD_REPLACE,"uid",account), @@ -226,17 +234,21 @@ l.modify_s(Dn,Rec); print; # Abort email sends for an update operation -if Update == 1: +if Update == 1 and ForceMail == 0: print "Account is not new, Not sending mails" sys.exit(0); # Do the subscription/welcome message -if privsub != " ": - print TemplateSubst(Subst,open("templates/list-subscribe","r").read()); - +#if privsub != " ": +# Sub = TemplateSubst(Subst,open(TemplatesDir+"/list-subscribe","r").read()); +# Child = os.popen("/usr/sbin/sendmail -t","w"); +# Child.write(Sub); +# if Child.close() != None: +# raise Error, "Sendmail gave a non-zero return code"; + # Send the Welcome message print "Sending Welcome Email" -Reply = TemplateSubst(Subst,open("templates/welcome-message-"+gidnumber,"r").read()); +Reply = TemplateSubst(Subst,open(TemplatesDir+"/welcome-message-"+gidnumber,"r").read()); Child = os.popen("/usr/sbin/sendmail -t","w"); #Child = os.popen("cat","w"); Child.write(Reply);