X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=ud-fingerserv;h=1a944e76bdd76723216948a54ee186ac23cd9f65;hb=c3bdc0a516ee5036c5d9ff45847e89e972dfb32f;hp=7f33835395f0188a5c390116f5d55a579bfb1bd2;hpb=17c6cdd5a42e568584e72c886c3d79b64bca1e9e;p=mirror%2Fuserdir-ldap.git diff --git a/ud-fingerserv b/ud-fingerserv index 7f33835..1a944e7 100755 --- a/ud-fingerserv +++ b/ud-fingerserv @@ -1,7 +1,8 @@ #!/usr/bin/perl -# $Id: ud-fingerserv,v 1.13 1999/11/29 02:44:53 tausq Exp $ +# $Id: ud-fingerserv,v 1.19 2004/11/18 19:10:57 joey Exp $ # (c) 1999 Randolph Chung. Licensed under the GPL. +# (c) 2004 Martin Schulze. Licensed under the GPL. use lib '/var/www/userdir-ldap/'; #use lib '/home/randolph/projects/userdir-ldap/web'; @@ -28,10 +29,12 @@ my %attrs = ( 'keyfingerprint' => 'Fingerprint', 'key' => 'Key block', 'ircnick' => 'IRC nickname', - 'labeledurl' => 'URL' + 'icquin' => 'ICQ UIN', + 'jabberjid' => 'Jabber ID', + 'labeleduri' => 'URL' ); -my @summarykeys = ('cn', 'mn', 'sn', 'email', 'labeledurl', 'ircnick', 'keyfingerprint', 'key'); +my @summarykeys = ('cn', 'mn', 'sn', 'email', 'labeleduri', 'ircnick', 'icquin', 'jabberjid', 'keyfingerprint', 'key'); $SIG{__DIE__} = \&DieHandler; $SIG{INT} = \&DieHandler; @@ -66,7 +69,7 @@ if (!$use_inetd) { my $hostinfo = gethostbyaddr($client->peeraddr, AF_INET); &log(sprintf("[Connect from %s]", $hostinfo || $client->peerhost)); my $query = &readdata($client); - &ProcessQuery($client, $query); + &ProcessQuery($client, $query) if (defined($query)); $client->close; exit; } continue { @@ -75,10 +78,14 @@ if (!$use_inetd) { } else { # inetd &log("inetd mode"); my $sockaddr = getpeername(STDIN); - my ($port, $addr) = unpack_sockaddr_in(getpeername(STDIN)); - &log(sprintf("[Connect from %s (%s)]", gethostbyaddr($addr, AF_INET), inet_ntoa($addr))); + if ($sockaddr) { + my ($port, $addr) = unpack_sockaddr_in(getpeername(STDIN)); + &log(sprintf("[Connect from %s (%s)]", gethostbyaddr($addr, AF_INET), inet_ntoa($addr))); + } else { + &log("[Connect via terminal]"); + } my $query = &readdata(\*STDIN); - &ProcessQuery(\*STDOUT, $query); + &ProcessQuery(\*STDOUT, $query) if (defined($query)); exit; } @@ -122,19 +129,21 @@ sub ProcessQuery { foreach $dn (sort {$entries->{$a}->{sn}->[0] <=> $entries->{$b}->{sn}->[0]} keys(%$entries)) { $data = $entries->{$dn}; - $data->{key} = []; - foreach (@{$data->{keyfingerprint}}) { - push (@{$data->{key}}, "\n".&Util::FetchKey($_)); - } - $data->{email}->[0] = sprintf("%s %s %s <%s>", $data->{cn}->[0], $data->{mn}->[0], $data->{sn}->[0], $data->{uid}->[0]."\@$config{emailappend}"); $data->{email}->[0] =~ s/\s+/ /g; + my @keyfingerprint = (); + for (my $i=0; $i <= $#{$data->{'keyfingerprint'}}; $i++) { + push (@keyfingerprint, $data->{keyfingerprint}->[$i]); + $data->{keyfingerprint}->[$i] = &Util::FormatFingerPrint($data->{keyfingerprint}->[$i]); + $data->{keyfingerprint}->[$i] =~ s, , ,; + } print $client "$dn\n"; if (!$fields) { + push (@{$data->{key}}, sprintf ("finger %s/key\@db.debian.org", $uid)); foreach $key (@summarykeys) { foreach (@{$data->{$key}}) { print $client "$attrs{$key}: "; @@ -144,6 +153,11 @@ sub ProcessQuery { } else { # print "$fields\n"; foreach $key (split(/,/, $fields)) { + if ($key eq 'key') { + foreach (@keyfingerprint) { + push (@{$data->{key}}, "\n".&Util::FetchKey($_), 0); + } + } foreach (@{$data->{$key}}) { print $client "$attrs{$key}: "; print $client "$_\n"; @@ -175,6 +189,7 @@ sub readdata { my $in = undef; my $out = undef; my $bytesread = 0; + my $ret; my $flags= fcntl($fh, F_GETFL, 0) or die "Can't get flags for socket: $!\n"; @@ -182,7 +197,9 @@ sub readdata { or die "Can't make socket nonblocking: $!\n"; while (($bytesread < 1024) && ($out !~ /\n/)) { - $bytesread += sysread($fh, $in, 1024); + $ret = sysread($fh, $in, 1024); + return undef if (!defined($ret) || ($ret == 0)); + $bytesread += $ret; $out .= $in; }