X-Git-Url: https://git.adam-barratt.org.uk/?p=mirror%2Fuserdir-ldap.git;a=blobdiff_plain;f=ud-host;h=438e272162511b397a0225163b82b4223baa4752;hp=3490e6d5369ad1a3af57e33b326f68da1047fcf8;hb=HEAD;hpb=25237fb08bb0b71e7d9d158068daf35438ade274 diff --git a/ud-host b/ud-host index 3490e6d..438e272 100755 --- a/ud-host +++ b/ud-host @@ -5,6 +5,7 @@ # Copyright (c) 2001 Ryan Murray # Copyright (c) 2003 James Troup # Copyright (c) 2004-2005 Joey Schulze +# Copyright (c) 2008,2009 Peter Palfrader # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -32,7 +33,7 @@ # -l list all hosts and their status # -f list all SSH fingerprints -import string, time, os, pwd, sys, getopt, ldap, crypt, 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 *; @@ -53,7 +54,14 @@ AttrInfo = {"description": ["Machine Descr.", 1], "physicalHost": ["Physical Host", 13], "sshRSAHostKey": ["SSH Host Keys", 14], "bandwidth": ["Bandwidth", 15], - "purpose": ["Purposes", 16],}; + "purpose": ["Purposes", 16], + "allowedGroups": ["Groups", 17], + "exportOptions": ["Export-Opts", 18], + "ipHostNumber": ["IP Address", 19], + "mXRecord": ["MXRecord", 20], + "dnsTTL": ["dnsTTL", 21], + "sshdistAuthKeysHost": ["extra authkeys ip", 22], + } AttrPrompt = {"description": ["Purpose of the machine"], "hostname": ["The hostnames for the box (ipv4/ipv6)"], @@ -68,9 +76,16 @@ AttrPrompt = {"description": ["Purpose of the machine"], "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"], + "sshRSAHostKey": ["A copy of /etc/ssh/ssh_*host_key.pub"], "bandwidth": ["Available outbound"], - "purpose": ["The purposes of this host"],}; + "purpose": ["The purposes of this host"], + "allowedGroups": ["allowed Groups on this host"], + "exportOptions": ["additional export options"], + "ipHostNumber": ["IP Addresses(es) of the machine"], + "mXRecord": ["Mail Exchanger for this machine"], + "dnsTTL": ["dns TTL value"], + "sshdistAuthKeysHost": ["additional hosts for sshdist's authkeys file"], + }; # Create a map of IDs to desc,value,attr OrderedIndex = {}; @@ -132,7 +147,7 @@ def Overview(Attrs): # Change a single attribute def ChangeAttr(Attrs,Attr): - if (Attr in ["sponsor", "sshRSAHostKey", "purpose"]): + if (Attr in ["sponsor", "sshRSAHostKey", "purpose", "allowedGroups", "exportOptions", "ipHostNumber", "mXRecord", "sshdistAuthKeysHost"]): return MultiChangeAttr(Attrs,Attr); print "Old value: '%s'" % (GetAttr(Attrs,Attr,"")); @@ -170,7 +185,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; @@ -241,15 +256,13 @@ for (switch, val) in options: FingerPrints = 1 if (BindUser != ""): - l = passwdAccessLDAP(LDAPServer, BaseDn, BindUser) + l = passwdAccessLDAP(BaseDn, BindUser) else: - l = ldap.open(LDAPServer); + l = connectLDAP() l.simple_bind_s("","") -HBaseDn = HostBaseDn - 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]) @@ -264,9 +277,9 @@ if ListMode == 1: sys.exit(0) elif FingerPrints == 1: if Host is not None: - Attrs = l.search_s(HBaseDn,ldap.SCOPE_ONELEVEL,"host=" + Host) + Attrs = l.search_s(HostBaseDn,ldap.SCOPE_ONELEVEL,"host=" + Host) else: - 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]) @@ -289,10 +302,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); @@ -321,13 +334,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; @@ -336,26 +349,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;