#!/usr/bin/suidperl
#
# Copy file from standard input to printer device
# printer device file is specified on the command line
# it must match /dev/lp*, where * is a sequence of letters, digits, ., or -
# it must be a character device file
# it must be owned by group 'lp'

use Fcntl 'O_WRONLY';

my $printer = shift;
exit 1 unless defined $printer;
exit 2 unless $printer =~ m{^/dev/lp[a-zA-Z.0-9-]*\z};
exit 3 unless -c $printer;
my $group =  getgrgid((stat _)[5]);
exit 4 unless $group eq 'lp';
untaint($printer);
sysopen PRINTER, $printer, O_WRONLY or exit 5;

my($br, $buf);
while ($br = read STDIN, $buf, 8192) {
  print PRINTER $buf;
}
exit 6 unless defined $br;
close PRINTER or exit 7;
exit 0;


sub untaint {
  $_[0] =~ /(.*)/;
  $_[0] = $1;
}
