+sub log {
+ my $msg = shift;
+ return if (defined($opts{q}));
+
+ my $time = localtime;
+ print $logfh "$time $msg\n";
+}
+
+sub mydie {
+ my $msg = shift;
+ log($msg);
+ exit 1;
+}
+
+sub readdata {
+ my $fh = shift;
+ my $in = undef;
+ my $out = undef;
+ my $bytesread = 0;
+ my $ret;
+
+ my $flags= fcntl($fh, F_GETFL, 0)
+ or mydie "Can't get flags for socket: $!\n";
+ fcntl($fh, F_SETFL, $flags | O_NONBLOCK)
+ or mydie "Can't make socket nonblocking: $!\n";
+
+ while (($bytesread < 1024) && ($out !~ /\n/)) {
+ $ret = sysread($fh, $in, 1024);
+ return undef if (!defined($ret) || ($ret == 0));
+ $bytesread += $ret;
+ $out .= $in;
+ }
+
+ $out =~ /(.*?)\n/;
+ return $1;
+}
+
+sub sendhelp {
+ my $client = shift;
+
+ print $client "userdir-ldap finger daemon\n";
+ print $client "--------------------------\n";
+ print $client "finger <uid>[/<attributes>]\@db.debian.org\n";
+ print $client " where uid is the user id of the user\n";
+ print $client " the optional attributes parameter specifies what to return\n";
+ print $client " if nothing is specified, all attributes are returned.\n";
+ print $client " The following attributes are currently supported:\n";
+ foreach (@summarykeys) {
+ print $client " $_ : $attrs{$_}\n";
+ }
+ print $client " Multiple attributes can be separated by commas, like this:\n";
+ print $client " finger tux/email,key\@db.debian.org\n";
+}