# 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,"uidnumber>="+str(HighestUID),["uidnumber"]);
+ Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,
+ "uidnumber>="+str(HighestUID),["uidnumber"]);
HighestUID = 0;
for I in Attrs:
ID = int(GetAttr(I,"uidnumber","0"));
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: ");
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":
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 == "":
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),
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);