#!/usr/bin/perl # sipgatefax backend for CUPS # written 2008 by Anselm Martin Hoffmeister, Bonn, Germany # Contact via the website anselm.hoffmeister.be use strict; my $sipid; my $sippwd; eval `cat /etc/sipgatefax.conf`; if (!$ARGV[0]){ print "direct sipgatefax:// \"Sipgate Fax driver for CUPS\" \"Sipgate Fax: $sipid\@sipgate.de\"\n"; exit 0; } if (scalar(@ARGV) < 5 || scalar(@ARGV) > 6){ print STDERR "ERROR: This is a cups-backend. Run it as: sipgatefax job-ID User Title NumCopies Options [ File ]\n"; exit 1; } my ($PrintJobID, $UserName, $title, $ignore1, $ignore2, $PrintingFile) = @ARGV; $UserName =~ s/\W//g; $PrintJobID =~ s/\W//g; if (!$PrintingFile) { my $TemporaryFile; $TemporaryFile = "$ENV{TMPDIR}/$PrintJobID-$UserName-cupsjob-$$"; open (TEMPOUT, ">$TemporaryFile") or die "ERROR: Cannot write print job data to $TemporaryFile: $!\n"; while(){ print TEMPOUT "$_"; } close TEMPOUT; $PrintingFile = $TemporaryFile; } my $tempfileforpdf = "$ENV{TMPDIR}/$PrintJobID-$UserName-cupsjob-$$.pdf"; my $faxnum = ""; $faxnum = `/usr/bin/pstotext "$PrintingFile" | LANG=C /bin/sed -nr "s/.*[Ff]ax:\ *((\+?[0-9][0-9\ ]*))([^0-9][^0-9].*|[^0-9]$|$)/\\1/p" | /usr/bin/head -1`; $faxnum =~ s/[^+0-9]//g; system("/usr/bin/logger -p lpr.info -t sipgatefax user $UserName, job $PrintJobID: Found fax number [".$faxnum."]"); $faxnum = `/usr/bin/sudo -u $UserName /usr/local/bin/ask-for-fax-number $faxnum | /usr/bin/head -1`; $faxnum =~ s/[^+0-9]//g; if ( length($faxnum) < 3 ) { # Clicked CANCEL or entered a too short fax number system("/usr/bin/logger -p lpr.info -t sipgatefax user $UserName, job $PrintJobID: Fax aborted from number dialog box"); exit(5); } if ( ! ( $faxnum =~ /^\+?[0-9][0-9]*$/ ) ) { system("/usr/bin/logger -p lpr.info -t sipgatefax user $UserName, job $PrintJobID: Invalid fax number entered"); exit(5); } if ( $faxnum =~ /^\+/ ) { $faxnum = substr($faxnum,1); } else { if ( substr($faxnum,0,1) == "0" ) { $faxnum = substr($faxnum,1); if ( substr($faxnum,0,1) == "0" ) { $faxnum = substr($faxnum,1); } else { $faxnum = "49".$faxnum; } } } if ( system("ps2pdf $PrintingFile $tempfileforpdf") ) { system("/usr/bin/logger -p lpr.warning -t sipgatefax ps2pdf failed for user $UserName, job $PrintJobID"); exit(5); } system("/usr/bin/logger -p lpr.info -t sipgatefax user $UserName, job $PrintJobID: Starting fax job to number [$faxnum]"); system("/usr/local/bin/faxfile '$sipid' '$sippwd' '$faxnum' '$tempfileforpdf'"); unlink($tempfileforpdf); unlink($PrintingFile); exit(0);