#!/usr/bin/perl # $Id: machines.cgi,v 1.7 2000/08/19 02:53:56 tausq Exp $ # (c) 1999 Randolph Chung. Licensed under the GPL. use lib '.'; use strict vars; #use Apache::Registry; use CGI; use Util; use Net::LDAP qw(:all); my (%attrs, @attrorder, %summaryattrs, @summaryorder); # This defines the description of the fields, and which fields are retrieved %attrs = ('hostname' => 'Host name', 'admin' => 'Admin contact', 'architecture' => 'Architecture', 'distribution' => 'Distribution', 'access' => 'Access', 'sponsor' => 'Sponsor', 'sponsor-admin' => 'Sponsor admin', 'location' => 'Location', 'machine' => 'Processor', 'memory' => 'Memory', 'disk' => 'Disk space', 'bandwidth' => 'Bandwidth', 'status' => 'Status', 'notes' => 'Notes', 'createtimestamp' => 'Entry created', 'modifytimestamp' => 'Entry modified' ); # This defines what fields are displayed, and in what order @attrorder = ('hostname', 'admin', 'architecture', 'distribution', 'access', 'sponsor', 'sponsor-admin', 'location', 'machine', 'memory', 'disk', 'bandwidth', 'status', 'notes', 'createtimestamp', 'modifytimestamp'); # ditto for summary %summaryattrs = ('hostname' => 'Host name', 'host' => 'just for a link', 'architecture' => 'Architecture', 'distribution' => 'Distribution', 'status' => 'Status', 'access' => 'Access'); @summaryorder = ('hostname', 'architecture', 'distribution', 'status', 'access'); # Global settings... my %config = &Util::ReadConfigFile; my ($ldap, $mesg, $dn, $entries, $data, %output, $key, $hostlist, $hostdetails, $selected, %summary); sub DieHandler { $ldap->unbind if (defined($ldap)); } $SIG{__DIE__} = \&DieHandler; my $query = new CGI; my $host = lc($query->param('host')); &Util::HTMLSendHeader; $ldap = Net::LDAP->new($config{ldaphost}) || &Util::HTMLError($!); $mesg; $ldap->bind; $mesg = $ldap->search(base => $config{hostbasedn}, filter => 'host=*'); $mesg->code && &Util::HTMLError($mesg->error); $entries = $mesg->as_struct; foreach $dn (sort {$entries->{$a}->{host}->[0] cmp $entries->{$b}->{host}->[0]} keys(%$entries)) { $data = $entries->{$dn}; my $thishost = $data->{host}->[0]; $selected = ""; if (lc($thishost) eq $host) { $output{havehostdata} = 1; foreach $key (keys(%attrs)) { $output{$key} = $data->{$key}->[0]; } $output{hostname} = undef; foreach my $hostname (@{$data->{hostname}}) { $output{hostname} .= sprintf("%s%s", ($output{hostname} ? ', ' : ''), $hostname); } # Modified/created time. TODO: maybe add is the name of the creator/modifier $output{modifytimestamp} = &Util::FormatTimestamp($output{modifytimestamp}); $output{createtimestamp} = &Util::FormatTimestamp($output{createtimestamp}); # Format email addresses $output{admin} = sprintf("%s", $output{admin}, $output{admin}); $output{'sponsor-admin'} = sprintf("%s", $output{'sponsor-admin'}, $output{'sponsor-admin'}); # URL my ($sponsor, $url) = undef; $output{sponsor} = undef; foreach $sponsor (@{$data->{sponsor}}) { $sponsor =~ m#((http|ftp)://\S+)#i; $url = $1; $sponsor =~ s/$url//; $output{sponsor} .= "
" if ($output{sponsor}); if ($url) { $output{sponsor} .= sprintf("%s", $url, $sponsor); } else { $output{sponsor} .= $sponsor; } } $selected = " selected "; } $hostlist .= "