DSA key support
[mirror/userdir-ldap.git] / ud-info
diff --git a/ud-info b/ud-info
index 4b0c103..3d31555 100755 (executable)
--- a/ud-info
+++ b/ud-info
 #          database
 #    -r    Enable 'root' functions, do this if your uid has access to
 #          restricted variables.
-#
-# http://www.geocode.com/eagle.html-ssi
 
-import string, time, posix, pwd, sys, getopt, ldap, crypt, whrandom, readline, copy;
+import string, time, os, pwd, sys, getopt, ldap, crypt, whrandom, readline, copy;
 from userdir_ldap import *;
 
 RootMode = 0;
@@ -44,9 +42,11 @@ AttrInfo = {"cn": ["First Name", 101],
            "labeledurl": ["Home Page",11],
            "latitude": ["Latitude",12],
            "longitude": ["Longitude",13],
-           "comment": ["Comment",114],
-           "userpassword": ["Crypted Password",115],
-            "dnszoneentry": ["d.net Entry",116]};
+           "icquin": ["ICQ UIN",14],
+           "privatesub": ["Debian-Private",15],
+           "comment": ["Comment",116],
+           "userpassword": ["Crypted Password",117],
+            "dnszoneentry": ["d.net Entry",118]};
 
 AttrPrompt = {"cn": ["Common name or first name"],
               "mn": ["Middle name (or initial if it ends in a dot)"],
@@ -65,11 +65,13 @@ AttrPrompt = {"cn": ["Common name or first name"],
               "comment": ["Admin Comment about the account"],
               "supplementarygid": ["Groups the user is in"],
              "allowedhosts": ["Grant access to certain hosts"],
+              "privatesub": ["Debian-Private mailing list subscription"],
               "member": ["LDAP Group Member for slapd ACLs"],
              "latitude": ["XEarth latitude in ISO 6709 format - see /usr/share/zoneinfo/zone.tab or etak.com"],
              "longitude": ["XEarth latitude in ISO 6709 format - see /usr/share/zoneinfo/zone.tab or etak.com"],
              "dnszoneentry": ["DNS Zone fragment associated this this user"],
-              "labeledurl": ["Web home page"]};
+              "labeledurl": ["Web home page"],
+              "icquin": ["ICQ UIN Number"]};
 
 # Create a map of IDs to desc,value,attr
 OrderedIndex = {};
@@ -137,6 +139,20 @@ def PrintSshRSAKeys(Attrs):
 
       print FormatSSHAuth(x);
       
+# Print the SSH RSA Authentication keys for a user
+def PrintSshDSAKeys(Attrs):
+   if Attrs[1].has_key("sshdsaauthkey") == 0:
+      return;
+   First = 0;
+   for x in Attrs[1]["sshdsaauthkey"]:
+      if First == 0:
+         print "%-24s:" % ("SSH DSA Auth Keys"),
+         First = 1;
+      else:
+         print "%-24s:" % (""),
+
+      print FormatSSH2Auth(x);
+      
 # Display all of the attributes in a numbered list
 def ShowAttrs(Attrs):
    print;
@@ -145,6 +161,7 @@ def ShowAttrs(Attrs):
    PrintShadow(Attrs);
    PrintKeys(Attrs);
    PrintSshRSAKeys(Attrs);
+   PrintSshDSAKeys(Attrs);
 
    for at in Attrs[1].keys():
       if AttrInfo.has_key(at):
@@ -237,7 +254,7 @@ def MultiChangeAttr(Attrs,Attr):
    print;
 
 # Main program starts here
-User = pwd.getpwuid(posix.getuid())[0];
+User = pwd.getpwuid(os.getuid())[0];
 BindUser = User;
 # Process options
 (options, arguments) = getopt.getopt(sys.argv[1:], "nu:c:a:r")
@@ -298,6 +315,7 @@ while(1):
 
    if RootMode == 1:
       print "   a) Arbitary Change";
+      print "   R) Randomize Password";
    print "   p) Change Password";
    print "   u) Switch Users";
    print "   x) Exit";
@@ -336,21 +354,38 @@ while(1):
          raw_input("Press a key");
          continue;
 
-      # Hash it telling glibc to use the MD5 algorithm - if you dont have
-      # glibc then just change Salt = "$1$" to Salt = "";
-      SaltVals = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/.";
-      Salt  = "$1$";
-      for x in range(0,10):
-         Salt = Salt + SaltVals[whrandom.randint(0,len(SaltVals)-1)];
-      Pass = crypt.crypt(Pass1,Salt);
-      if len(Pass) < 14:
-         print "Caution! MD5 Password hashing failed, not changing password!";
+      try:
+         Pass = HashPass(Pass1);
+      except:
+         print "%s: %s\n" %(sys.exc_type,sys.exc_value);
          raw_input("Press a key");
          continue;
 
       print "Setting password..";
       Pass = "{crypt}" + Pass;
       l.modify_s(UserDn,[(ldap.MOD_REPLACE,"userpassword",Pass)]);
+      Attrs[0][1]["userpassword"] = [Pass];
+      continue;
+
+   # Randomize password
+   if Response == 'R' and RootMode == 1:
+      Resp = raw_input("Randomize Users Password? [no/yes]");
+      if Resp != "yes":
+         continue;
+        
+      # Generate a random password
+      try:
+         Password = GenPass();
+         Pass = HashPass(Password);
+      except:
+         print "%s: %s\n" %(sys.exc_type,sys.exc_value);
+         raw_input("Press a key");
+         continue;
+        
+      print "Setting password..";
+      Pass = "{crypt}" + Pass;
+      l.modify_s(UserDn,[(ldap.MOD_REPLACE,"userpassword",Pass)]);
+      Attrs[0][1]["userpassword"] = [Pass];
       continue;
 
    # Handle changing an arbitary value