X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-host;h=1eb8d7641580cd4e10776daa364da65bd6ade9be;hb=9e1e7b0639b1265bf39acd330122f40123451c56;hp=a2e870808b8c5c25cec9d15f9aa2563eb5534e0e;hpb=a2359d81607b9fdbcf0a91126258077dd189e2c9;p=mirror%2Fuserdir-ldap.git diff --git a/ud-host b/ud-host index a2e8708..1eb8d76 100755 --- a/ud-host +++ b/ud-host @@ -2,11 +2,11 @@ # -*- mode: python -*- # This script is an interactive way to manipulate fields in the LDAP directory. # When run it connects to the directory using the current users ID and fetches -# all the attributes for the first machine. It then formats them nicely and +# all the attributes for the first machine. It then formats them nicely and # allows the user to change them. # # Usage: userinfo -a -u -c -r -# -a Set the authentication user (the user whose password you are +# -a Set the authentication user (the user whose password you are # going to enter) # -h Set the host to display @@ -26,7 +26,8 @@ AttrInfo = {"description": ["Machine Descr.", 1], "machine": ["Machine Hardware", 10], "memory": ["Memory", 11], "disk": ["Disk", 12], - "bandwidth": ["Bandwidth", 13]}; + "sshRSAHostKey": ["SSH Host Keys", 14], + "bandwidth": ["Bandwidth", 15]}; AttrPrompt = {"description": ["Purpose of the machine"], "hostname": ["The hostnames for the box (ipv4/ipv6)"], @@ -36,10 +37,11 @@ AttrPrompt = {"description": ["Purpose of the machine"], "distribution": ["The distribution version"], "access": ["all, developer only, restricted"], "admin": ["Admin email address"], - "architecture": ["Debian Arhitecture string"], + "architecture": ["Debian Architecture string"], "machine": ["Hardware description"], "memory": ["Installed RAM"], "disk": ["Disk Space, RAID levels, etc"], + "sshRSAHostKey": ["A copy of /etc/ssh/ssh_*host_key.pub"], "bandwidth": ["Available outbound"]}; # Create a map of IDs to desc,value,attr @@ -51,14 +53,14 @@ OrigOrderedIndex = copy.deepcopy(OrderedIndex); # Print out the automatic time stamp information def PrintModTime(Attrs): - Stamp = GetAttr(Attrs,"modifytimestamp",""); + Stamp = GetAttr(Attrs,"modifyTimestamp",""); if len(Stamp) >= 13: Time = (int(Stamp[0:4]),int(Stamp[4:6]),int(Stamp[6:8]), int(Stamp[8:10]),int(Stamp[10:12]),int(Stamp[12:14]),0,0,-1); print "%-24s:" % ("Record last modified on"), time.strftime("%a %d/%m/%Y %X UTC",Time), - print "by",ldap.explode_dn(GetAttr(Attrs,"modifiersname"),1)[0]; + print "by",ldap.explode_dn(GetAttr(Attrs,"modifiersName"),1)[0]; - Stamp = GetAttr(Attrs,"createtimestamp",""); + Stamp = GetAttr(Attrs,"createTimestamp",""); if len(Stamp) >= 13: Time = (int(Stamp[0:4]),int(Stamp[4:6]),int(Stamp[6:8]), int(Stamp[8:10]),int(Stamp[10:12]),int(Stamp[12:14]),0,0,-1); @@ -78,7 +80,7 @@ def ShowAttrs(Attrs): print; else: OrderedIndex[AttrInfo[at][1]][1] = Attrs[1][at]; - + Keys = OrderedIndex.keys(); Keys.sort(); for at in Keys: @@ -90,13 +92,13 @@ def ShowAttrs(Attrs): # Change a single attribute def ChangeAttr(Attrs,Attr): - if (Attr == "sponsor" or Attr == "hostname"): + if (Attr == "sponsor" or Attr == "hostname" or Attr == "sshRSAHostKey"): return MultiChangeAttr(Attrs,Attr); print "Old value: '%s'" % (GetAttr(Attrs,Attr,"")); print "Press enter to leave unchanged and a single space to set to empty"; NewValue = raw_input("New? "); - + # Empty string if (NewValue == ""): print "Leaving unchanged."; @@ -137,8 +139,8 @@ def MultiChangeAttr(Attrs,Attr): if (NewValue == ""): print "Leaving unchanged."; return; - - # Delete + + # Delete if (Mode == "D"): print "Deleting.",; try: @@ -188,15 +190,15 @@ if (BindUser != ""): l.simple_bind_s(UserDn,Password); else: l.simple_bind_s("",""); - -HBaseDn = "ou=hosts,dc=debian,dc=org"; + +HBaseDn = "ou=hosts,dc=debian,dc=org"; HostDn = "host=" + Host + "," + HBaseDn; # Query the server for all of the attributes Attrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=" + Host); if len(Attrs) == 0: print "Host",Host,"was not found."; - sys.exit(0); + sys.exit(0); # repeatedly show the account configuration while(1): @@ -207,12 +209,13 @@ while(1): if RootMode == 1: print " a) Arbitary Change"; print " n) New Host"; + print " d) Delete Host"; print " u) Switch Hosts"; print " x) Exit"; - + # Prompt Response = raw_input("Change? "); - if (Response == "x" or Response == "X" or Response == "q" or + if (Response == "x" or Response == "X" or Response == "q" or Response == "quit" or Response == "exit"): break; @@ -240,11 +243,15 @@ while(1): if len(NAttrs) != 0: print "Host",NewHost,"already exists."; continue; + NewHostName = raw_input("Hostname? "); + if NewHost == "": + continue; Dn = "host=" + NewHost + "," + HBaseDn; - l.add_s(Dn,[("host",NewHost), - ("objectclass","top")]); - - # Switch + l.add_s(Dn,[("host", NewHost), + ("hostname", NewHostName), + ("objectClass", ("top", "debianServer"))]); + + # Switch NAttrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=" + NewHost); if len(NAttrs) == 0: print "Host",NewHost,"was not found."; @@ -254,13 +261,21 @@ while(1): HostDn = "host=" + Host + "," + HBaseDn; OrderedIndex = copy.deepcopy(OrigOrderedIndex); continue; - + # Handle changing an arbitary value if (Response == "a"): Attr = raw_input("Attr? "); ChangeAttr(Attrs[0],Attr); continue; + if (Response == 'd'): + Really = raw_input("Really (type yes)? "); + if Really != 'yes': + continue; + print "Deleting",HostDn; + l.delete_s(HostDn); + continue; + # Convert the integer response try: ID = int(Response);