#!/usr/bin/perl -w

package GetIpUser;

use strict;
use vars qw(%ipmap $lastupdate);
use Sys::Utmp;
#use Data::Dumper;

sub read_utmpx {
	my $utmpx = shift;
	my $utmp = Sys::Utmp->new(Filename => $utmpx);
	my (%utmp, $utent, $host);
	while ($utent =  $utmp->getutent()) {
		$host = $utent->ut_host();
		$utmp{$host} = $utent->ut_user() if (length $host > 0);
	}
	return %utmp;
}

$lastupdate = 0;

sub getipuser {
	my $utmpx = shift;
	my $modtime = (stat($utmpx))[9];
	if ($modtime > $lastupdate) {
		%ipmap = read_utmpx($utmpx);
		$lastupdate = $modtime;
		#print Dumper(\%ipmap),"\n";
	}
	return map {$ipmap{$_}} @_;
}

sub mainloop {
	my $user;
	my $utmpx = $ARGV[0];
	$utmpx = "/var/run/utmp" unless (defined $utmpx);
	$| = 1;
	while (<STDIN>) {
		chomp;
		($user) = getipuser($utmpx, $_);
		if (defined($user) && (length $user > 0)) {
			printf "OK user=%s\n",$user;
		} else {
			print "OK\n";
		}
	}
	exit 0;
}

mainloop() unless (defined($_)&&($_ eq 'nosquid'));
1;
