/[svn.andrew.net.au]/scripts/printfax.pl
ViewVC logotype

Annotation of /scripts/printfax.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Sun Jun 25 17:33:52 2006 UTC (15 years, 5 months ago) by apollock
File MIME type: text/plain
File size: 20442 byte(s)
Initial experiment with svn
1 apollock 1 #!/usr/bin/perl
2     #
3     # printfax.pl 1.5.0, last changed 2000/03/22
4     #
5     ###################################################################
6     #
7     # Copyright (C) 2000 Horst F <horstf@gmx.de>
8     #
9     # This program is free software; you can redistribute it and/or
10     # modify it under the terms of the GNU General Public License as
11     # published by the Free Software Foundation; either version 2 of
12     # the License, or (at your option) any later version.
13     #
14     # This program is distributed in the hope that it will be useful,
15     # but WITHOUT ANY WARRANTY; without even the implied warranty of
16     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17     # General Public License for more details.
18     #
19     # You should have received a copy of the GNU General Public License
20     # along with this program; if not, write to the Free Software
21     # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22     #
23     ###################################################################
24     #
25     # based on the script by
26     # Heiko Schlittermann <heiko@lotte.sax.de>
27     # added some modifications by
28     # Don Hayward <don@marinelab.sarasota.fl.us>
29     # Simon Hyde <shyde@poboxes.com>
30     # Helmut Lichtenberg <heli@tzv.fal.de>
31     # Ondrejicka Stefan <ondrej@idata.sk>
32     # Bryan Halvorson <bryan@pkgplus.com>
33     #
34     # NOTE: I'm neither a perl nor network expert (as well
35     # English isn't my natural language too)
36     #
37     #####
38     # This script is intended to be used in conjunction with
39     # ``Winsock Respond Daemon'' written by "Horst F" <horstf@gmx.de>
40     #
41     # You can download the current version from
42     # http://www.boerde.de/~horstf/
43     #
44     # called from smb.conf:
45     # print command = ( /usr/bin/printfax.pl %I %s %U %m; rm %s ) &
46     #
47     # History (changes since 1996/10/28/):
48     # [1996/10/28]
49     # - one script for all perl versions since 5.0 (or earlier?)
50     # (joining the scripts for 5.002 and for earlier versions)
51     # - replace of 'localhost' with call of hostname(), hope
52     # this fixes the problem with SunOS
53     # [1996/10/29 1.3.2]
54     # - the use of hostname() doesn't solve the problem with SunOS,
55     # the problem was gethostbyname, but now it works
56     # - start version numbering, now it's 1.3.2
57     # [1997/09/22 1.3.3]
58     # - minor bug fix:
59     # use "require/import" instead of "use Sys::Hostname" because
60     # "use" includes a file at compile time and so it includes
61     # Sys::Hostname every time, not only for perl version < 5.002
62     # [1997/10/29 1.3.4]
63     # - reading faxnumbers from file in user's home dir or everywhere
64     # - added debug output
65     # [1998/01/26 1.3.5]
66     # - report errors with winpopup
67     # - additional faxspool arguments in configuration section
68     # - optional faxnumber preprocessing
69     # [1999/02/19 1.4.0]
70     # - allows '*' in faxnumber now
71     # - missing smbclient don't breaks the use of multiple faxnumbers
72     # - added support for Hylafax (untested)
73     # [1999/07/01 1.4.1]
74     # - avoid winpopup timeout (seen with WinNT)
75     # [1999/12/05 1.4.2]
76     # - bug fix: use '-d' switch for hylafax when no faxreceiver given
77     # [2000/03/22 1.5.0]
78     # - added support for Windows NT Terminal Server
79     # - added workaround for the double connection problem
80     # - added additional logging features
81     ####
82    
83     require 5.0; # Don't know if required include files exist
84     # in earlier versions
85     use strict;
86     no strict "refs";
87     use Socket;
88    
89     # this is only required for perl versions below 5.002
90     if ( $] < 5.002 ) {
91     require Sys::Hostname;
92     import Sys::Hostname;
93     }
94    
95     my($last, $tmp);
96    
97     ###
98     ### CONFIGURATION Section
99     ###
100    
101     my($port, $usedelay, $defaultdelay, $acct, $faxspool, $smbclient,
102     $logsmbhostname, $usesmbuser, $msg_to, $msg_ignored,
103     $msg_spooled, $msg_failed, $debug, $allowfile, $filechar,
104     $version, $nosendondebug, @faxspool_args, $msg_norespond,
105     $msg_strangeerr, $intl_with, $unillegal, $unillegalnumbers,
106     $termserver_ip, $ts_user, %respond_port, $minfaxsize,
107     $cmdlinefmt);
108    
109     ### printfax.pl version string
110     $version = 'printfax.pl 1.5.0';
111    
112     ### The default port we'll connect to RESPOND
113     $port = 5555;
114    
115     ### Use delay
116     $usedelay = 1;
117    
118     ### Default delay for delayed faxes
119     $defaultdelay = '18:00';
120    
121     ### The log file we'll write the accounting information to
122     ### (It has to be writeable by the user samba is running as for faxes)
123     $acct = '/var/spool/fax/outgoing/printfax.log';
124    
125     ### Format of commandline
126     $cmdlinefmt='mgetty';
127     # $cmdlinefmt='hylafax';
128    
129     ### The faxspoolprogram
130     ### for mgetty+sendfax:
131     $faxspool = '/usr/bin/faxspool';
132     ### for hylafax:
133     # $faxspool = '/usr/bin/sendfax';
134    
135     ### Additional faxspool args (e.g. header, coverpage)
136     ### empty:
137     @faxspool_args = qw();
138     ### for mgetty+sendfax with a special header:
139     # @faxspool_args = qw( -h /usr/local/etc/mgetty+sendfax/faxheader.smb );
140     ### for hylafax with send email when job is done or requeued and use
141     ### a4 sized paper:
142     # @faxspool_args = qw(-D -R -s a4);
143    
144     ### The smbclient program, sender is the faxsystem.
145     ### Set to "" if you don't want to use smbclient
146     $smbclient = '/usr/bin/smbclient -U FAX';
147     #$smbclient = '';
148    
149     ### The secure path for binaries searched
150     ### (faxspool makes usage of the PATH environment!)
151     $ENV{PATH} = '/usr/local/bin:/usr/bin:/bin' .
152     ':/usr/local/sbin:/usr/sbin:/sbin' .
153     ':/usr/X11R6/bin';
154    
155     ### Use smb hostname for logging, set to 0 for inet hostname
156     ### (ip address will be logged in both cases)
157     $logsmbhostname = 1;
158    
159     ### use smbuser for returning mail, ignore what the user types in
160     ### (smbuser will be allways used for logging)
161     $usesmbuser = 0;
162    
163     ### Preprocess faxnumbers, disable it if you use faxspool aliases
164     # this replaces a leading '+', "" for no replace
165     $intl_with = "";
166     # delete all non numbers
167     $unillegal = 0;
168     # delete all non numbers, if faxnum contains only numbers and these characters
169     # "" for no delete
170     $unillegalnumbers = "()/-";
171    
172     ### messages for smbclient
173     ### English:
174     $msg_to = "to";
175     $msg_ignored = "ignored";
176     $msg_spooled = "spooled";
177     $msg_failed = "failed";
178     $msg_norespond = "You doesn't have started RESPOND\nLaunch RESPOND and try again\n";
179     $msg_strangeerr = "Some serverside error\nTry again or contact administrator\n";
180     ### German:
181     # $msg_to = "an";
182     # $msg_ignored = "ignoriert";
183     # $msg_spooled = "gespoolt";
184     # $msg_failed = "fehlgeschlagen";
185     # $msg_norespond = "Respond laeuft nicht.\nBitte Respond starten und nochmal versuchen.\n";
186     # $msg_strangeerr = "Fehler im Faxserver.\nBitte den Administrator benachrichtigen.\n";
187    
188     ### allow file for faxnumbers
189     $allowfile = 1;
190     $filechar = '@';
191    
192     ### set $debug to 1 for debug messages and $nosendondebug to 1 if
193     ### you don't want to spool files on debug
194     ### debug messages go to syslog (or stderr, if called from commandline)
195     $debug = 0;
196     $nosendondebug = 1;
197    
198     ### NT Terminal server and Win2000 sends out bogus print requests with
199     ### short files. Treat requests with files less than this size as bogus.
200     $minfaxsize = "100";
201    
202     ### extra config info for NT Terminal server.
203     ### If you don't have an NT terminal server you can safely ignore this
204     ### section. Currently only one terminal server is supported.
205    
206     # IP address of the terminal server, leave empty if you have none
207     # $termserver_ip = "192.168.101.171";
208     $termserver_ip = "";
209    
210     # Array of user-port assignments
211     # If a request comes from the terminal server from one of the
212     # users in the array the assigned port will be used instead of the
213     # default port to connect to Respond
214     %respond_port = (
215     # Samples
216     # "me", "5556",
217     # "myself", "5557",
218     # "and_I", "5558"
219     );
220    
221     ###
222     ### NOTHING else to configure
223     ###
224    
225     ### Message buffer for smbclient (to avoid timeout)
226     my($messagebuffer);
227     $messagebuffer = '';
228    
229     ### Append a message to message buffer
230     sub smbmessage {
231     $messagebuffer .= "@_";
232     }
233    
234     ### Send message buffer to windows client
235     my($smbhost);
236     sub sendmessage {
237     if ($messagebuffer && $smbclient && (!$debug || ($debug && ! -t STDERR))) {
238     open(SF,"|$smbclient -M $smbhost") || ($smbclient = "");
239     $last = select(SF); $| = 1; select($last);
240     printf SF "$messagebuffer";
241     close(SF);
242     }
243     }
244    
245     ### Error functions
246    
247     sub norespond {
248     if ($smbclient) {
249     &smbmessage("$msg_norespond");
250     &sendmessage();
251     }
252     die "@_";
253     }
254    
255     sub strangeerr {
256     if ($smbclient) {
257     &smbmessage("$msg_strangeerr");
258     &sendmessage();
259     }
260     die "@_";
261     }
262    
263     sub silenterr {
264     die "@_";
265     }
266    
267     ### If called non interactivly ... use the logger to report errors
268     ### in syslog
269    
270     -t STDERR
271     || open(STDERR, "|logger -itprintfax")
272     || die "$0\[$$]: Can't open logger: $!\n";
273    
274    
275     ### Make STDERR unbuffered
276     $last = select(STDERR); $| = 1;
277     select($last);
278    
279     if ($debug) {
280     print STDERR "$version started with: ", join(" ",@ARGV), "\n";
281     }
282    
283     ### COMMAND line processing
284     my($remote_ip, $faxfile, $smbuser, $faxfname);
285    
286     # 1.: The ip address (smb.conf: %I)
287     $remote_ip = $ARGV[0];
288     # 2.: The name of the faxfile with path (%s)
289     $faxfile = $ARGV[1];
290     # 3.: The samba session setup user (%U)
291     # used for accounting and if RESPOND doesn't return the user name
292     $smbuser = $ARGV[2];
293     # 4.: The NetBIOS hostname (%m)
294     $smbhost = $ARGV[3];
295    
296     # Strip any domain from smbhost if required
297     # (sometimes %m gets the full qualified internet name)
298     $smbhost =~ s/^([^.]+).*$/$1/;
299    
300     # Strip path from filename
301     ($faxfname = $faxfile) =~ s|.*/||;
302    
303     ### Check on the file that samba handed us
304     if (!(-f $faxfile)) {
305     &strangeerr( "$0\[$$]: Fax file given on the command line doesn't exist.\n");
306     }
307     if (-z $faxfile) {
308     &silenterr( "$0\[$$]: Fax file given on the command line is zero length.\n");
309     }
310     if ((-s $faxfile) < $minfaxsize) {
311     &silenterr( "$0\[$$]: Fax file size is less than $minfaxsize.\n");
312     }
313    
314     ### See if we're talking to a user on a terminal server
315     if ($remote_ip eq $termserver_ip) {
316     # get the user name
317     $ts_user = $smbuser;
318     $ts_user =~ tr/A-Z/a-z/;
319    
320     # if the terminal server user has a different port number
321     # assigned to the respond program, reset $port to match it.
322     if ($respond_port{$ts_user}) {
323     $port = $respond_port{$ts_user};
324     }
325     if ($debug) {
326     print STDERR "User $ts_user is on a Terminal Server. Using port $port for respond.\n";
327     }
328     }
329    
330    
331     ### Check config
332     if (($cmdlinefmt ne 'hylafax') && ($cmdlinefmt ne 'mgetty')) {
333     &strangeerr( "$0\[$$]: Illegal value for cmdlinefmt: $cmdlinefmt\n");
334     }
335    
336     ### Establish the socket connection
337     my($ip_remote, $remote, $proto);
338     $proto = getprotobyname('tcp');
339    
340     # Since version 5.002 perl uses new ipc method
341     if ( $] < 5.002 ) {
342     # This is for perl versions below 5.002
343    
344     my($ip_local, $local);
345     $ip_local = (gethostbyname(hostname()))[4];
346     $local = &Socket::sockaddr_in(AF_INET, 0, unpack('C4', $ip_local));
347    
348     # This does not work on some systems (gethostbyname doesn't work properly):
349     # $ip_remote = (gethostbyname($remote_ip))[4] ||
350     # &strangeerr("$0\[$$]: No such host: $remote_ip\n");
351     # $remote = &Socket::sockaddr_in(AF_INET, $port, unpack('C4', $ip_remote));
352    
353     # so we use this:
354     $remote = &Socket::sockaddr_in(AF_INET, $port, split(/\./, $remote_ip));
355    
356     if ($debug) {
357     print STDERR "trying to connect to $remote_ip as ",
358     join ('.', unpack('C4', $ip_local)), "\n";
359     }
360    
361     socket(S, AF_INET, SOCK_STREAM, $proto)
362     || &strangeerr("$0\[$$]: Can't get socket: $!\n");
363    
364     bind(S, $local) || &strangeerr("$0\[$$]: Can't bind socket: $!\n");
365    
366     } else {
367     # This must be used since perl version 5.002
368    
369     # This seams to work:
370     $ip_remote = inet_aton($remote_ip) || &strangeerr("$0\[$$]: No host: $remote_ip\n");
371     $remote = sockaddr_in($port, $ip_remote);
372    
373     # if not, try this:
374     # $remote = sockaddr_in($port, pack('C4', split(/\./, $remote_ip)));
375    
376     if ($debug) {
377     print STDERR "trying to connect to $remote_ip\n";
378     }
379    
380     socket(S, PF_INET, SOCK_STREAM, $proto)
381     || &strangeerr("$0\[$$]: Can't get socket: $!\n");
382    
383     }
384     connect(S, $remote) || &norespond("$0\[$$]: Can't connect to $remote_ip: $!\n");
385    
386    
387     if ($debug) {
388     print STDERR "connected\n";
389     }
390    
391     ### Get the needed information
392     my($faxnum, $user, $faxreceiver, $fullname, $delayed);
393    
394     # Read FaxNr, User, Receivers name and Users fullname
395     # as well as strip trailing \n or \r
396     ($faxnum = <S>) =~ tr/\r\n//d;
397     ($user = <S>) =~ tr/\r\n//d;
398     ($faxreceiver = <S>) =~ tr/\r\n//d;
399     ($fullname = <S>) =~ tr/\r\n//d;
400     ($delayed = <S>) =~ tr/\r\n//d;
401    
402     if ($debug) {
403     print STDERR "got faxnumber: $faxnum\n";
404     print STDERR "got receiver : $faxreceiver\n";
405     print STDERR "got sender : $user\n";
406     print STDERR "got fullname : $fullname\n";
407     print STDERR "got delay : $delayed\n";
408     }
409    
410     # use default delay if respond's delay checkbox checked
411     if ( $delayed eq 'delayed' ) { $delayed = $defaultdelay; }
412    
413     # Close the query connection
414     close(S);
415    
416     # use samba user if no user is given
417     $user = $smbuser unless $user;
418    
419     # allways use smbuser (look in the configuration section)
420     $user = $smbuser if $usesmbuser;
421    
422     # user needs to lowercased too
423     $user =~ tr/A-Z/a-z/;
424    
425     my(@faxnums, $gcos);
426    
427     # split space or comma delimited faxnums (for more then one receiver)
428     @faxnums = split(/[ ,]+/, $faxnum);
429    
430    
431     # Retrieve additional information about the user (here: the users
432     # fullname) and the date
433    
434     # Extract fullname from /etc/passwd
435     # only if we didn't get it from respond
436     $fullname =~ s/^ *(.*) *$/\1/;
437     if ( ! $fullname ) {
438     $gcos = (getpwnam($user))[6];
439     $fullname = (split(/,/, $gcos))[0];
440     }
441     $fullname = $user unless $fullname;
442    
443     ### OK, do accounting
444    
445     # What says the clock?
446     my($s, $m, $h, $dy, $mo, $yr);
447     ($s, $m, $h, $dy, $mo, $yr) = (localtime(time))[0..5];
448     $mo++; # month is 0 based.
449    
450     my($host, $faxdest);
451    
452     # Log smb or inet hostname (look in the configuration section)
453     if ( $logsmbhostname ) {
454    
455     # Use the NetBIOS name for accounting:
456     $host = "$smbhost($remote_ip)";
457    
458     # Uppercase looks more NetBIOS like :-)
459     # uncomment if you don't want this
460     $host =~ tr/a-z/A-Z/;
461    
462     } else {
463    
464     # Use the internet name for accounting:
465     $host = (gethostbyaddr(pack('C4', split(/\./, $remote_ip)),AF_INET))[0];
466    
467     # Strip domains from name
468     $host =~ s/^([^.]+).*$/$1/;
469     $host = ($host) ? "$host($remote_ip)" : $remote_ip;
470    
471     }
472    
473     # Open the accounting file
474     open(ACCT, ">>$acct") || &strangeerr("$0\[$$]: Can't open `$acct': $!\n");
475    
476     # Make it unbuffered
477     $last = select(ACCT); $| = 1;
478     select($last);
479    
480    
481     # If no faxnum is given it's assumed that cancelling the fax is ok.
482     scalar(@faxnums) || do {
483     printf ACCT "[%02d/%02d/%02d] %02d:%02d:%02d Fax from $host by $smbuser",
484     $mo, $dy, $yr, $h, $m, $s;
485     if ( $faxreceiver ) {
486     print ACCT " to $faxreceiver";
487     $faxdest = " " . $msg_to . " $faxreceiver";
488     }
489     print ACCT " cancelled\n";
490     if ($smbclient) {
491     &smbmessage("Fax $faxfname$faxdest $msg_ignored\n");
492     &sendmessage();
493     }
494     close(ACCT);
495     if ($debug) {
496     print STDERR "No faxnumbers given. Fax cancelled. Aborting\n";
497     }
498     exit 0;
499     };
500    
501     ### Spool it
502    
503     my(@fixargs, @faxargs, $fnum, $retval);
504    
505     # Arguments for faxspool call
506     # --- Change this for other fax programs
507     if ($cmdlinefmt eq 'hylafax') {
508     @fixargs = ("-f",$user,"-r", $fullname);
509     } elsif ($cmdlinefmt eq 'mgetty') {
510     @fixargs = ("-q","-f","$user","-F","$fullname");
511     }
512     @fixargs = (@fixargs,@faxspool_args) if @faxspool_args;
513    
514     # set delay if required
515     if ( ($delayed ne '') && $usedelay ) {
516     # Additional argument for faxspool call
517     # --- Change this for other fax programs
518     if ($cmdlinefmt eq 'hylafax') {
519     push(@fixargs,"-a",$delayed);
520     } elsif ($cmdlinefmt eq 'mgetty') {
521     @fixargs = (@fixargs,"-t","$delayed");
522     }
523     }
524    
525     # do the "faxnumbers in a file" handling
526    
527     my(@newfaxnums, @numfiles1, @numfiles2, @files, $file, $fnum2);
528    
529     if ($allowfile) {
530    
531     # seperate between faxnumbers and filenames
532     foreach $fnum (@faxnums) {
533     if (substr($fnum,0,1) eq $filechar ) {
534     push(@numfiles1, $fnum);
535     } else {
536     push(@newfaxnums, $fnum);
537     }
538     }
539     @faxnums = @newfaxnums;
540    
541     # now process the file(s), a file can contain other filenames
542     while (scalar(@numfiles1)) {
543     foreach $fnum (@numfiles1) {
544     $file = substr($fnum, 1);
545    
546     # Don't read a file twice (avoid endless loop)!
547     next if scalar(grep($_ eq $file, @files));
548     push(@files, $file);
549    
550     # Get user's home dir, if path is not absolute
551     if (substr($file,0,1) ne '/') {
552     $file = (getpwnam($smbuser))[7] . "/$file";
553     }
554    
555     # Read a file
556    
557     if ($debug) {
558     print STDERR "read file $file - ";
559     }
560    
561     if (open(NUMBERS,"<$file")) {
562     while (<NUMBERS>) {
563    
564     # remove \r and \n
565     tr/\r\n//d;
566    
567     # remove trailing blanks
568     s/^ *(.*) *$/$1/;
569    
570     # ignore comments
571     next if /^#/;
572    
573     # separate between faxnumbers and filenames
574     foreach $fnum2 (split(/[ ,]+/)) {
575     if (substr($fnum2,0,1) eq $filechar) {
576     push(@numfiles2, $fnum2);
577     } else {
578     push(@faxnums, $fnum2);
579     }
580     }
581     }
582     close(NUMBERS);
583    
584     if ($debug) {
585     print STDERR "ok\n",
586     }
587    
588     } elsif ($debug) {
589     print STDERR "failed\n";
590     }
591     }
592    
593     # recurse files
594     @numfiles1 = @numfiles2;
595     @numfiles2 = ();
596    
597     }
598     }
599    
600     # preprocess faxnumbers
601     if ( $intl_with || $unillegal || $unillegalnumbers) {
602     for($tmp=0; $tmp<scalar(@faxnums); $tmp++) {
603     $faxnums[$tmp] =~ s/^\+/$intl_with/ if $intl_with;
604     if ( $unillegalnumbers ) {
605     $_ = $faxnums[$tmp];
606     # remove separator chars
607     eval "tr[$unillegalnumbers][]d;";
608     $faxnums[$tmp] = $_ if tr/*0-9// == length;
609     } else {
610     # remove all except digits and *
611     $faxnums[$tmp] =~ tr/*0-9//cd if $unillegal;
612     }
613     }
614     }
615     # delete duplicate faxnumbers
616     @newfaxnums = sort(@faxnums);
617     @faxnums = ();
618     $fnum2 = "";
619     while ($fnum = shift(@newfaxnums)) {
620     push(@faxnums, $fnum) if ($fnum ne $fnum2);
621     $fnum2 = $fnum;
622     }
623    
624    
625     # Spool it once for every number in $faxnum
626     foreach $fnum (@faxnums) {
627     printf ACCT "[%02d/%02d/%02d] %02d:%02d:%02d Fax from $host by $smbuser ",
628     $mo, $dy, $yr, $h, $m, $s;
629    
630     # Build faxspool arguments from above arguments, number and file
631     # --- Change this for other fax programs
632     if( $cmdlinefmt eq 'hylafax' ) {
633     if ( $faxreceiver ) {
634     # Add receivers name to faxspool arguments
635     @faxargs = (@fixargs,"-d",$faxreceiver . '@'. $fnum,$faxfile);
636     } else {
637     @faxargs = (@fixargs,"-d",$fnum,$faxfile);
638     }
639     } elsif ( $cmdlinefmt eq 'mgetty' ) {
640     @faxargs = (@fixargs,$fnum,$faxfile);
641     if ( $faxreceiver ) {
642     # Add receivers name to faxspool arguments
643     @faxargs = ("-D","$faxreceiver",@faxargs);
644     }
645     } else {
646     @faxargs = (@fixargs,$fnum,$faxfile);
647     }
648    
649     if ( $faxreceiver ) {
650     print ACCT "to $faxreceiver ($fnum)";
651     $faxdest = "$faxreceiver ($fnum)";
652     } else {
653     print ACCT "to $fnum";
654     $faxdest = "$fnum";
655     }
656    
657     # Call the fax spooler
658     if ($debug) {
659     print STDERR "simulate " if ($nosendondebug);
660     print STDERR "call: $faxspool ", join(" ", @faxargs), "\n";
661     }
662     if (!$debug || ($debug && !$nosendondebug)) {
663     system($faxspool, @faxargs);
664     }
665    
666    
667     # Report the state to the logfile
668     $retval = $?;
669     if ($debug && !$nosendondebug) {
670     print STDERR "spooling ";
671     print STDERR ($retval == 0) ? "succeeded\n" : "failed\n";
672     }
673     print ACCT (($retval == 0) ? " spooled\n" : " failed\n");
674     if ($smbclient) {
675     &smbmessage("Fax $faxfname $msg_to $faxdest " );
676     &smbmessage(($retval == 0) ? $msg_spooled : $msg_failed );
677     &smbmessage("\n");
678     }
679     }
680    
681     ### Done
682     if ($smbclient) {
683     &sendmessage();
684     }
685     close(ACCT);
686     exit 0;

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.22