- F = None;
- Fdb = None;
- try:
- F = open(File + ".tmp","w");
- Fdb = None;
-
- # Fetch all the users
- global PasswdAttrs;
- if PasswdAttrs == None:
- raise "No Users";
-
- # Write out the position for each user
- for x in PasswdAttrs:
- if x[1].has_key("privateSub") == 0:
- continue;
-
- # If the account is locked, do not write it
- if (string.find(GetAttr(x,"userPassword"),"*LK*") != -1):
- continue;
-
- # If the account has no PGP key, do not write it
- if x[1].has_key("keyFingerPrint") == 0:
- continue;
-
- # Must be in the Debian group (yuk, hard coded for now)
- if GetAttr(x,"gidNumber") != "800":
- continue;
-
- try:
- Line = "%s"%(GetAttr(x,"privateSub"));
- Line = Sanitize(Line) + "\n";
- F.write(Line);
- except:
- pass;
-
- # Oops, something unspeakable happened.
- except:
- Die(File,F,Fdb);
- raise;
- Done(File,F,Fdb);
+ F = None
+ try:
+ F = open(File + ".tmp","w")
+
+ # Fetch all the users
+ global PasswdAttrs
+
+ # Write out the position for each user
+ for x in PasswdAttrs:
+ if x[1].has_key("privateSub") == 0:
+ continue
+
+ # If the account has no PGP key, do not write it
+ if x[1].has_key("keyFingerPrint") == 0:
+ continue
+
+ # Must be in the Debian group (yuk, hard coded for now)
+ if GetAttr(x,"gidNumber") != "800":
+ continue
+
+ try:
+ Line = "%s"%(GetAttr(x,"privateSub"))
+ Line = Sanitize(Line) + "\n"
+ F.write(Line)
+ except:
+ pass
+
+ # Oops, something unspeakable happened.
+ except:
+ Die(File,F,None)
+ raise
+ Done(File,F,None)
+
+# Generate a list of locked accounts
+def GenDisabledAccounts(l,File):
+ F = None
+ try:
+ F = open(File + ".tmp","w")
+
+ # Fetch all the users
+ global PasswdAttrs
+ global DisabledUsers
+
+ I = 0
+ for x in PasswdAttrs:
+ if x[1].has_key("uidNumber") == 0:
+ continue
+
+ Pass = GetAttr(x,"userPassword")
+ Line = ""
+ # *LK* is the reference value for a locked account
+ # password starting with ! is also a locked account
+ if Pass.find("*LK*") != -1 or Pass.startswith("!"):
+ # Format is <login>:<reason>
+ Line = "%s:%s" % (GetAttr(x,"uid"), "Account is locked")
+
+ if Line != "":
+ F.write(Sanitize(Line) + "\n")
+
+ DisabledUsers.append(x)
+
+ # Oops, something unspeakable happened.
+ except:
+ Die(File,F,None)
+ raise
+ Done(File,F,None)
+
+# Generate the list of local addresses that refuse all mail
+def GenMailDisable(l,File):
+ F = None
+ try:
+ F = open(File + ".tmp","w")
+
+ # Fetch all the users
+ global PasswdAttrs
+
+ for x in PasswdAttrs:
+ Reason = None
+
+ if x[1].has_key("mailDisableMessage"):
+ Reason = GetAttr(x,"mailDisableMessage")
+ else:
+ continue
+
+ # Must be in the Debian group (yuk, hard coded for now)
+ if GetAttr(x,"gidNumber") != "800":
+ continue
+
+ try:
+ Line = "%s: %s"%(GetAttr(x,"uid"),Reason)
+ Line = Sanitize(Line) + "\n"
+ F.write(Line)
+ except:
+ pass
+
+ # Oops, something unspeakable happened.
+ except:
+ Die(File,F,None)
+ raise
+ Done(File,F,None)
+
+# Generate a list of uids that should have boolean affects applied
+def GenMailBool(l,File,Key):
+ F = None
+ try:
+ F = open(File + ".tmp","w")
+
+ # Fetch all the users
+ global PasswdAttrs
+
+ for x in PasswdAttrs:
+ Reason = None
+
+ if x[1].has_key(Key) == 0:
+ continue
+
+ # Must be in the Debian group (yuk, hard coded for now)
+ if GetAttr(x,"gidNumber") != "800":
+ continue
+
+ if GetAttr(x,Key) != "TRUE":
+ continue
+
+ try:
+ Line = "%s"%(GetAttr(x,"uid"))
+ Line = Sanitize(Line) + "\n"
+ F.write(Line)
+ except:
+ pass
+
+ # Oops, something unspeakable happened.
+ except:
+ Die(File,F,None)
+ raise
+ Done(File,F,None)
+
+# Generate a list of hosts for RBL or whitelist purposes.
+def GenMailList(l,File,Key):
+ F = None
+ try:
+ F = open(File + ".tmp","w")
+
+ # Fetch all the users
+ global PasswdAttrs
+
+ for x in PasswdAttrs:
+ Reason = None
+
+ if x[1].has_key(Key) == 0:
+ continue
+
+ # Must be in the Debian group (yuk, hard coded for now)
+ if GetAttr(x,"gidNumber") != "800":
+ continue
+
+ try:
+ found = 0
+ Line = None
+ for z in x[1][Key]:
+ if Key == "mailWhitelist":
+ if re.match('^[-\w.]+(/[\d]+)?$',z) == None:
+ continue
+ else:
+ if re.match('^[-\w.]+$',z) == None:
+ continue
+ if found == 0:
+ found = 1
+ Line = GetAttr(x,"uid")
+ else:
+ Line += " "
+ Line += ": " + z
+ if Key == "mailRHSBL":
+ Line += "/$sender_address_domain"
+
+ if Line != None:
+ Line = Sanitize(Line) + "\n"
+ F.write(Line)
+ except:
+ pass
+
+ # Oops, something unspeakable happened.
+ except:
+ Die(File,F,None)
+ raise
+ Done(File,F,None)
+
+def isRoleAccount(pwEntry):
+ if not pwEntry.has_key("objectClass"):
+ raise "pwEntry has no objectClass"
+ oc = pwEntry['objectClass']
+ try:
+ i = oc.index('debianRoleAccount')
+ return True
+ except ValueError:
+ return False