# -r Enable 'root' functions, do this if your uid has access to
# restricted variables.
-import string, time, os, pwd, sys, getopt, ldap, crypt, readline, copy;
+import time, os, pwd, sys, getopt, ldap, crypt, readline, copy;
from userdir_ldap import *;
RootMode = 0;
"mailWhitelist": ["Mail Whitelist",24],
"comment": ["Comment",116],
"userPassword": ["Crypted Password",117],
- "dnsZoneEntry": ["d.net Entry",118]};
+ "dnsZoneEntry": ["d.net Entry",118],
+ "VoIP": ["VoIP Address",119]};
AttrPrompt = {"cn": ["Common name or first name"],
"mn": ["Middle name (or initial if it ends in a dot)"],
"dnsZoneEntry": ["DNS Zone fragment associated this this user"],
"labeledURI": ["Web home page"],
"jabberJID": ["Jabber ID"],
- "icqUin": ["ICQ UIN Number"]};
+ "icqUin": ["ICQ UIN Number"],
+ "VoIP": ["VoIP Address"]};
# Create a map of IDs to desc,value,attr
OrderedIndex = {};
Attrs[1][Attr].sort();
print "Old values: ",Attrs[1][Attr];
- Mode = string.upper(raw_input("[D]elete or [A]dd? "));
+ Mode = raw_input("[D]elete or [A]dd? ").upper()
if (Mode != 'D' and Mode != 'A'):
return;
print " a) Arbitary Change";
print " R) Randomize Password";
print " p) Change Password";
+ print " L) Lock account";
print " u) Switch Users";
print " x) Exit";
print "Setting password..";
Pass = "{crypt}" + Pass;
- l.modify_s(UserDn,[(ldap.MOD_REPLACE,"userPassword",Pass)]);
+ shadowLast = str(int(time.time()/24/60/60));
+ l.modify_s(UserDn,[(ldap.MOD_REPLACE,"userPassword",Pass),
+ (ldap.MOD_REPLACE,"shadowLastChange",shadowLast)]);
Attrs[0][1]["userPassword"] = [Pass];
+ Attrs[0][1]["shadowLastChange"] = [shadowLast];
continue;
# Randomize password
print "Setting password..";
Pass = "{crypt}" + Pass;
- l.modify_s(UserDn,[(ldap.MOD_REPLACE,"userPassword",Pass)]);
+ shadowLast = str(int(time.time()/24/60/60));
+ l.modify_s(UserDn,[(ldap.MOD_REPLACE,"userPassword",Pass),
+ (ldap.MOD_REPLACE,"shadowLastChange",shadowLast)]);
Attrs[0][1]["userPassword"] = [Pass];
+ Attrs[0][1]["shadowLastChange"] = [shadowLast];
+ continue;
+
+ # Lock account
+ if Response == 'L' and RootMode == 1:
+ Resp = raw_input("Really lock account? [no/yes]");
+ if Resp != "yes":
+ continue;
+
+ print "Setting password..";
+ shadowLast = str(int(time.time()/24/60/60));
+ l.modify_s(UserDn,[
+ (ldap.MOD_REPLACE,"userPassword","{crypt}*LK*"),
+ (ldap.MOD_REPLACE,"mailDisableMessage","account locked"),
+ (ldap.MOD_REPLACE,"shadowLastChange",shadowLast)]);
+ Attrs[0][1]["userPassword"] = ["{crypt}*LK*"];
+ Attrs[0][1]["mailDisableMessage"] = ["account locked"];
+ Attrs[0][1]["shadowLastChange"] = [shadowLast];
continue;
# Handle changing an arbitary value