6 use Data::Dump qw(dump);
11 my $socket = IO::Socket::INET->new(
13 LocalAddr => 'localhost',
19 open(my $log, '>>', '/var/log/cups/find_owner_log');
20 $SIG{__WARN__} = sub {
22 print $log time(), " ", @_;
25 warn "$0 waiting for client connection on port ", $socket->sockaddr, ":", $socket->sockport, "\n";
28 our $client_socket = $socket->accept();
29 my $line = <$client_socket>;
33 #my ($file, $local_user, $remote_user) = @ARGV;
34 my ($file, $local_user, $remote_user) = split(/\s/,$line,3);
36 my $job_id = $1 if ( $file =~ m/job_(\d+)/ );
38 die "can't find job_id in [$file]" unless $job_id;
40 my $c_file = sprintf "/var/spool/cups/c%05d", $job_id;
43 my $wait = 5; # max s wait for file to appear
45 $0 = "find-owner #$job_id wait $wait s for $c_file";
52 my $blob = read_file $c_file;
54 my (undef,$ip) = split(/job-originating-host-name\x00/, $blob, 2);
55 my $len = ord(substr($ip,0,1));
56 $ip = substr($ip,1,$len);
58 my $database = 'pGinaDB';
59 my $hostname = '10.60.4.9';
62 my $password = 'secret';
64 my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
65 my $dbh = DBI->connect($dsn, $user, $password);
67 my $sth = $dbh->prepare(qq{
68 select * from pGinaSession where ipaddress = ? and logoutstamp is null order by loginstamp desc
69 }) or die "prepare statement failed: $dbh->errstr()";
70 $sth->execute($ip) or die "execution failed: $dbh->errstr()";
71 if ( $sth->rows < 1 ) {
72 die "can't find IP for job $job_id";
73 } elsif ( $sth->rows > 1 ) {
74 warn "ERROR: found $sth->rows() rows for $job_id, usng first one\n";
76 my $row = $sth->fetchrow_hashref();
77 warn "## row = ",dump($row);
81 my $username = $row->{username} || die "no username in row = ",dump($row);
82 $username =~ s/\@ffzg.hr$//; # strip domain, same as pGina
84 my $spool = '/var/spool/cups-pdf/';
85 mkdir "$spool/$username" if ( ! -e "$spool/$username" );
86 my $filename_only = $file;
87 $filename_only =~ s/^.*\///; # basename
89 my $to = "$spool/$username/$filename_only";
92 $0 = "find-owner #$job_id $username $filename_only"