* Remove use of deprecated functions from the string module
[mirror/userdir-ldap.git] / ud-host
diff --git a/ud-host b/ud-host
index 956c046..e186e9a 100755 (executable)
--- a/ud-host
+++ b/ud-host
@@ -32,7 +32,7 @@
 #    -l    list all hosts and their status
 #    -f    list all SSH fingerprints
 
-import string, time, os, pwd, sys, getopt, ldap, crypt, whrandom, readline, copy;
+import time, os, pwd, sys, getopt, ldap, crypt, readline, copy;
 from tempfile import mktemp
 from os import O_CREAT, O_EXCL, O_WRONLY
 from userdir_ldap import *;
@@ -50,8 +50,10 @@ AttrInfo = {"description": ["Machine Descr.", 1],
             "machine": ["Machine Hardware", 10],
             "memory": ["Memory", 11],
             "disk": ["Disk", 12],
+            "physicalHost": ["Physical Host", 13],
             "sshRSAHostKey": ["SSH Host Keys", 14],
-            "bandwidth": ["Bandwidth", 15]};
+            "bandwidth": ["Bandwidth", 15],
+            "purpose": ["Purposes", 16],};
 
 AttrPrompt = {"description": ["Purpose of the machine"],
               "hostname": ["The hostnames for the box (ipv4/ipv6)"],
@@ -65,8 +67,10 @@ AttrPrompt = {"description": ["Purpose of the machine"],
               "machine": ["Hardware description"],
               "memory": ["Installed RAM"],
               "disk": ["Disk Space, RAID levels, etc"],
+              "physicalHost": ["The box hosting this virtual server"],
              "sshRSAHostKey": ["A copy of /etc/ssh/ssh_*host_key.pub"],
-              "bandwidth": ["Available outbound"]};
+              "bandwidth": ["Available outbound"],
+              "purpose": ["The purposes of this host"],};
 
 # Create a map of IDs to desc,value,attr
 OrderedIndex = {};
@@ -116,20 +120,19 @@ def ShowAttrs(Attrs):
 
 def Overview(Attrs):
    """Display a one-line overview for a given host"""
-   if 'status' in Attrs[1].keys():
-      status = Attrs[1]['status'][0]
-   else:
-      status = ''
+   for i in ['host','architecture','distribution','access','status']:
+      if i not in Attrs[1].keys():
+         Attrs[1][i] = ['']
    print "%-12s  %-10s  %-38s  %-25s %s" % (\
       Attrs[1]['host'][0], \
       Attrs[1]['architecture'][0], \
       Attrs[1]['distribution'][0], \
       Attrs[1]['access'][0], \
-      status)
+      Attrs[1]['status'][0])
 
 # Change a single attribute
 def ChangeAttr(Attrs,Attr):
-   if (Attr == "sponsor" or Attr == "hostname" or Attr == "sshRSAHostKey"):
+   if (Attr in ["sponsor", "sshRSAHostKey", "purpose"]):
       return MultiChangeAttr(Attrs,Attr);
 
    print "Old value: '%s'" % (GetAttr(Attrs,Attr,""));
@@ -167,7 +170,7 @@ def MultiChangeAttr(Attrs,Attr):
    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;
 
@@ -213,8 +216,14 @@ User = pwd.getpwuid(os.getuid())[0];
 BindUser = User;
 ListMode = 0
 FingerPrints = 0
+Host = None
 # Process options
-(options, arguments) = getopt.getopt(sys.argv[1:], "nh:a:rlf")
+try:
+   (options, arguments) = getopt.getopt(sys.argv[1:], "nh:a:rlf")
+except getopt.GetoptError, data:
+   print data
+   sys.exit(1)
+
 for (switch, val) in options:
    if (switch == '-h'):
       Host = val;
@@ -237,10 +246,8 @@ else:
    l = ldap.open(LDAPServer);
    l.simple_bind_s("","")
 
-HBaseDn = "ou=hosts,dc=debian,dc=org";
-
 if ListMode == 1:
-   Attrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=*")
+   Attrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=*")
    hosts = []
    for hAttrs in Attrs:
       hosts.append(hAttrs[1]['host'][0])
@@ -254,7 +261,10 @@ if ListMode == 1:
             Overview(hAttrs)
    sys.exit(0)
 elif FingerPrints == 1:
-   Attrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=*")
+   if Host is not None:
+      Attrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=" + Host)
+   else:
+      Attrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=*")
    hosts = []
    for hAttrs in Attrs:
       hosts.append(hAttrs[1]['host'][0])
@@ -277,10 +287,10 @@ elif FingerPrints == 1:
    os.unlink(tmpfile)
    sys.exit(0)
 
-HostDn = "host=" + Host + "," + HBaseDn;
+HostDn = "host=" + Host + "," + HostBaseDn;
 
 # Query the server for all of the attributes
-Attrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=" + Host);
+Attrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=" + Host);
 if len(Attrs) == 0:
    print "Host",Host,"was not found.";
    sys.exit(0);
@@ -309,13 +319,13 @@ while(1):
       NewHost = raw_input("Host? ");
       if NewHost == "":
          continue;
-      NAttrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=" + NewHost);
+      NAttrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=" + NewHost);
       if len(NAttrs) == 0:
          print "Host",NewHost,"was not found.";
          continue;
       Attrs = NAttrs;
       Host = NewHost;
-      HostDn = "host=" + Host + "," + HBaseDn;
+      HostDn = "host=" + Host + "," + HostBaseDn;
       OrderedIndex = copy.deepcopy(OrigOrderedIndex);
       continue;
 
@@ -324,26 +334,26 @@ while(1):
       NewHost = raw_input("Host? ");
       if NewHost == "":
          continue;
-      NAttrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=" + NewHost);
+      NAttrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=" + NewHost);
       if len(NAttrs) != 0:
          print "Host",NewHost,"already exists.";
          continue;
       NewHostName = raw_input("Hostname? ");
       if NewHost == "":
          continue;
-      Dn = "host=" + NewHost + "," + HBaseDn;
+      Dn = "host=" + NewHost + "," + HostBaseDn;
       l.add_s(Dn,[("host", NewHost),
                   ("hostname", NewHostName),
                   ("objectClass", ("top", "debianServer"))]);
 
       # Switch
-      NAttrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=" + NewHost);
+      NAttrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=" + NewHost);
       if len(NAttrs) == 0:
          print "Host",NewHost,"was not found.";
          continue;
       Attrs = NAttrs;
       Host = NewHost;
-      HostDn = "host=" + Host + "," + HBaseDn;
+      HostDn = "host=" + Host + "," + HostBaseDn;
       OrderedIndex = copy.deepcopy(OrigOrderedIndex);
       continue;