X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-host;h=8c04ba222d4f0653d5a893a2f382718d984d50c8;hb=914750f1d2d72894f27a313bcc0afab99b918d02;hp=2e72b7b41d41bf01291e0d606f392a7ed09a514e;hpb=a025eff465feb1c992bc8e3d0084a3631a81ecd9;p=mirror%2Fuserdir-ldap.git diff --git a/ud-host b/ud-host index 2e72b7b..8c04ba2 100755 --- a/ud-host +++ b/ud-host @@ -1,5 +1,25 @@ #!/usr/bin/env python # -*- mode: python -*- + +# Copyright (c) 2000-2001 Jason Gunthorpe +# Copyright (c) 2001 Ryan Murray +# Copyright (c) 2003 James Troup +# Copyright (c) 2004 Joey Schulze +# +# 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + # 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 @@ -90,6 +110,19 @@ def ShowAttrs(Attrs): print "'%s'" % (re.sub('[\n\r]','?',x)), print; +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 = '' + print "%-12s %-10s %-38s %-25s %s" % (\ + Attrs[1]['host'][0], \ + Attrs[1]['architecture'][0], \ + Attrs[1]['distribution'][0], \ + Attrs[1]['access'][0], \ + status) + # Change a single attribute def ChangeAttr(Attrs,Attr): if (Attr == "sponsor" or Attr == "hostname" or Attr == "sshRSAHostKey"): @@ -162,7 +195,7 @@ def MultiChangeAttr(Attrs,Attr): User = pwd.getpwuid(os.getuid())[0]; BindUser = User; # Process options -(options, arguments) = getopt.getopt(sys.argv[1:], "nh:a:r") +(options, arguments) = getopt.getopt(sys.argv[1:], "nh:a:rl") for (switch, val) in options: if (switch == '-h'): Host = val; @@ -172,26 +205,33 @@ for (switch, val) in options: RootMode = 1; elif (switch == '-n'): BindUser = ""; + elif (switch == '-l'): + BindUser = ""; + ListMode = 1 if (BindUser != ""): - print "Accessing LDAP entry", -if (BindUser != User): - if (BindUser != ""): - print "as '" + BindUser + "'"; -else: - print; -if (BindUser != ""): - Password = getpass(BindUser + "'s password: "); - -# Connect to the ldap server -l = ldap.open(LDAPServer); -UserDn = "uid=" + BindUser + "," + BaseDn; -if (BindUser != ""): - l.simple_bind_s(UserDn,Password); + l = passwdAccessLDAP(LDAPServer, BaseDn, BindUser) else: - l.simple_bind_s("",""); + 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=*") + hosts = [] + for hAttrs in Attrs: + hosts.append(hAttrs[1]['host'][0]) + hosts.sort() + + print "%-12s %-10s %-38s %-25s %s" % ("Host name","Arch","Distribution","Access","Status") + print "-"*115 + for host in hosts: + for hAttrs in Attrs: + if host == hAttrs[1]['host'][0]: + Overview(hAttrs) + sys.exit(0) + HostDn = "host=" + Host + "," + HBaseDn; # Query the server for all of the attributes @@ -247,7 +287,7 @@ while(1): if NewHost == "": continue; Dn = "host=" + NewHost + "," + HBaseDn; - l.add_s(Dn,[("host",NewHost), + l.add_s(Dn,[("host", NewHost), ("hostname", NewHostName), ("objectClass", ("top", "debianServer"))]);