]> arthur.barton.de Git - netatalk.git/blobdiff - etc/papd/main.c
Big configure.in cleanup
[netatalk.git] / etc / papd / main.c
index 3c60406dc20c871aef22f7093e213b8c24f62436..d0c46451b7adf56d88e6269ae6014b0f78c92566 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: main.c,v 1.20 2007-04-27 11:30:16 didg Exp $
+ * $Id: main.c,v 1.31 2009-10-29 13:38:15 didg Exp $
  *
  * Copyright (c) 1990,1995 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
 #include <sys/param.h>
 #include <sys/time.h>
 #include <sys/uio.h>
-#if defined( sun ) && defined( __svr4__ )
-#include </usr/ucbinclude/sys/file.h>
-#else /* sun && __svr4__ */
 #include <sys/file.h>
-#endif /* sun && __svr4__ */
 #include <sys/socket.h>
 #include <atalk/logger.h>
 
@@ -76,7 +72,6 @@ char *strchr (), *strrchr ();
 #include "uam_auth.h"
 #include "print_cups.h"
 
-#define _PATH_PAPDPPDFILE      ".ppd"
 
 #define PIPED_STATUS   "status: print spooler processing job"
 
@@ -109,11 +104,8 @@ static void papd_exit(const int i)
   exit(i);
 }
 
-#if !defined( ibm032 ) && !defined( _IBMR2 )
-    void
-#endif /* ! ibm032 && ! _IBMR2 */
-die( n )
-    int                        n;
+static void
+die(int n)
 {
     struct printer     *pr;
     struct at_addr     addr;
@@ -141,15 +133,13 @@ die( n )
     papd_exit( n );
 }
 
-#if !defined( ibm032 ) && !defined( _IBMR2 )
-    void
-#endif /* ! ibm032 && ! _IBMR2 */
-reap()
+static void
+reap(int sig _U_)
 {
     int                status;
     int                pid;
 
-    while (( pid = wait3( &status, WNOHANG, 0 )) > 0 ) {
+    while (( pid = wait3( &status, WNOHANG, NULL )) > 0 ) {
        if ( WIFEXITED( status )) {
            if ( WEXITSTATUS( status )) {
                LOG(log_error, logtype_papd, "child %d exited with %d", pid,
@@ -169,11 +159,9 @@ reap()
     return;
 }
 
-char           rbuf[ 255 + 1 + 8 ];
+static char rbuf[ 255 + 1 + 8 ];
 
-int main( ac, av )
-    int                ac;
-    char       **av;
+int main(int ac, char **av)
 {
     extern char         *optarg;
 
@@ -193,7 +181,7 @@ int main( ac, av )
        perror( "gethostname" );
        exit( 1 );
     }
-    if (( p = strchr( hostname, '.' )) != 0 ) {
+    if (( p = strchr( hostname, '.' )) != NULL ) {
        *p = '\0';
     }
     if (( defprinter.p_name = (char *)malloc( strlen( hostname ) + 1 ))
@@ -205,7 +193,6 @@ int main( ac, av )
     defprinter.p_type = "LaserWriter";
     defprinter.p_zone = "*";
     memset(&defprinter.p_addr, 0, sizeof(defprinter.p_addr));
-    defprinter.p_ppdfile = _PATH_PAPDPPDFILE;
 #ifdef __svr4__
     defprinter.p_flags = P_PIPED;
     defprinter.p_printer = "/usr/bin/lp -T PS";
@@ -260,7 +247,7 @@ int main( ac, av )
 
     switch (server_lock("papd", pidfile, debug)) {
     case 0: /* open a couple things again in the child */
-      if ((c = open("/", O_RDONLY)) >= 0) {
+      if (!debug && (c = open("/", O_RDONLY)) >= 0) {
        dup2(c, 1);
        dup2(c, 2);
       }
@@ -287,7 +274,8 @@ int main( ac, av )
     openlog( p, LOG_PID );
 #else /* ultrix */
     set_processname(p);
-    syslog_setup(log_debug, logtype_default, logoption_ndelay|logoption_pid, logfacility_lpr );
+    syslog_setup(log_debug, logtype_default, logoption_ndelay | logoption_pid |
+               debug ? logoption_perror : 0, logfacility_lpr );
 #endif /* ultrix */
 
     LOG(log_info, logtype_papd, "restart (%s)", version );
@@ -303,14 +291,14 @@ int main( ac, av )
        }
 
        if (!(pr->p_flags & P_CUPS)) {
-               if ((size_t)-1 != convert_string_allocate(CH_UNIX, CH_MAC, pr->p_name, strlen(pr->p_name), &atname)) {
+               if ((size_t)-1 != convert_string_allocate(CH_UNIX, CH_MAC, pr->p_name, -1, &atname)) {
                        pr->p_u_name = pr->p_name;
                        pr->p_name = atname;
                }
        }
                        
        if (( pr->p_atp = atp_open( ATADDR_ANYPORT, &pr->p_addr )) == NULL ) {
-           LOG(log_error, logtype_papd, "atp_open: %m" );
+           LOG(log_error, logtype_papd, "atp_open: %s", strerror(errno) );
            papd_exit( 1 );
        }
        if ( nbp_rgstr( atp_sockaddr( pr->p_atp ), pr->p_name, pr->p_type,
@@ -334,16 +322,16 @@ int main( ac, av )
     sv.sa_handler = die;
     sigemptyset( &sv.sa_mask );
     sv.sa_flags = SA_RESTART;
-    if ( sigaction( SIGTERM, &sv, 0 ) < 0 ) {
-       LOG(log_error, logtype_papd, "sigaction: %m" );
+    if ( sigaction( SIGTERM, &sv, NULL ) < 0 ) {
+       LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
        papd_exit( 1 );
     }
 
     sv.sa_handler = reap;
     sigemptyset( &sv.sa_mask );
     sv.sa_flags = SA_RESTART;
-    if ( sigaction( SIGCHLD, &sv, 0 ) < 0 ) {
-       LOG(log_error, logtype_papd, "sigaction: %m" );
+    if ( sigaction( SIGCHLD, &sv, NULL ) < 0 ) {
+       LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
        papd_exit( 1 );
     }
 
@@ -360,11 +348,11 @@ int main( ac, av )
        for ( pr = printers; pr; pr = pr->p_next ) {
            FD_SET( atp_fileno( pr->p_atp ), &fdset );
        }
-       if (( c = select( FD_SETSIZE, &fdset, 0, 0, 0 )) < 0 ) {
+       if (( c = select( FD_SETSIZE, &fdset, NULL, NULL, NULL )) < 0 ) {
            if ( errno == EINTR ) {
                continue;
            }
-           LOG(log_error, logtype_papd, "select: %m" );
+           LOG(log_error, logtype_papd, "select: %s", strerror(errno) );
            papd_exit( 1 );
        }
 
@@ -388,7 +376,7 @@ int main( ac, av )
                atpb.atp_rreqdata = cbuf;
                atpb.atp_rreqdlen = sizeof( cbuf );
                if ( atp_rreq( pr->p_atp, &atpb ) < 0 ) {
-                   LOG(log_error, logtype_papd, "atp_rreq: %m" );
+                   LOG(log_error, logtype_papd, "atp_rreq: %s", strerror(errno) );
                    continue;
                }
 
@@ -416,7 +404,7 @@ int main( ac, av )
                    * 0xffff to indicate we're busy
                    */
 #ifdef DEBUG
-                    LOG(log_debug, logtype_papd, "CUPS: PAP_OPEN");
+                    LOG(log_debug9, logtype_papd, "CUPS: PAP_OPEN");
 #endif
                    if ( (pr->p_flags & P_SPOOLED) && (cups_get_printer_status ( pr ) == 0)) {
                         LOG(log_error, logtype_papd, "CUPS_PAP_OPEN: %s is not accepting jobs",
@@ -426,7 +414,6 @@ int main( ac, av )
                     }
 #endif /* HAVE_CUPS */
 
-
                    /*
                     * If this fails, we've run out of sockets. Rather than
                     * just die(), let's try to continue. Maybe some sockets
@@ -434,7 +421,7 @@ int main( ac, av )
                     */
                    if (( atp = atp_open( ATADDR_ANYPORT, 
                                          &pr->p_addr)) == NULL ) {
-                       LOG(log_error, logtype_papd, "atp_open: %m" );
+                       LOG(log_error, logtype_papd, "atp_open: %s", strerror(errno) );
                        rbuf[ 2 ] = rbuf[ 3 ] = 0xff;  /* printer busy */
                        rbuf[ 4 ] = 0; /* FIXME is it right? */
                        err = 1;
@@ -453,17 +440,21 @@ int main( ac, av )
                     * This may error out if we lose a route, so we won't die().
                     */
                    if ( atp_sresp( pr->p_atp, &atpb ) < 0 ) {
-                       LOG(log_error, logtype_papd, "atp_sresp: %m" );
-                       continue;
+                       LOG(log_error, logtype_papd, "atp_sresp: %s", strerror(errno) );
+                       err = 1;
                    }
 
                    if ( err ) {
+                       if (atp) {
+                          atp_close(atp);
+                        }
                        continue;
                    }
 
                    switch ( c = fork()) {
                    case -1 :
-                       LOG(log_error, logtype_papd, "fork: %m" );
+                       LOG(log_error, logtype_papd, "fork: %s", strerror(errno) );
+                        atp_close(atp);
                        continue;
 
                    case 0 : /* child */
@@ -472,13 +463,13 @@ int main( ac, av )
                        #ifndef HAVE_CUPS
                        if (( printer->p_flags & P_SPOOLED ) &&
                                chdir( printer->p_spool ) < 0 ) {
-                           LOG(log_error, logtype_papd, "chdir %s: %m", printer->p_spool );
+                           LOG(log_error, logtype_papd, "chdir %s: %s", printer->p_spool, strerror(errno) );
                            exit( 1 );
                        }
                        #else
                        if (( printer->p_flags & P_SPOOLED ) &&
                                chdir( SPOOLDIR ) < 0 ) {
-                           LOG(log_error, logtype_papd, "chdir %s: %m", SPOOLDIR );
+                           LOG(log_error, logtype_papd, "chdir %s: %s", SPOOLDIR, strerror(errno) );
                            exit( 1 );
                        }
 
@@ -487,10 +478,15 @@ int main( ac, av )
                        sv.sa_handler = SIG_DFL;
                        sigemptyset( &sv.sa_mask );
                        sv.sa_flags = SA_RESTART;
-                       if ( sigaction( SIGTERM, &sv, 0 ) < 0 ) {
-                           LOG(log_error, logtype_papd, "sigaction: %m" );
+                       if ( sigaction( SIGTERM, &sv, NULL ) < 0 ) {
+                           LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
                            exit( 1 );
                        }
+                       
+                       if ( sigaction( SIGCHLD, &sv, NULL ) < 0 ) {
+                           LOG(log_error, logtype_papd, "sigaction: %s", strerror(errno) );
+                           exit( 1 );
+                        }
 
                        for ( pr = printers; pr; pr = pr->p_next ) {
                            atp_close( pr->p_atp );
@@ -526,7 +522,7 @@ int main( ac, av )
                     * This may error out if we lose a route, so we won't die().
                     */
                    if ( atp_sresp( pr->p_atp, &atpb ) < 0 ) {
-                       LOG(log_error, logtype_papd, "atp_sresp: %m" );
+                       LOG(log_error, logtype_papd, "atp_sresp: %s", strerror(errno) );
                    }
                    break;
 
@@ -551,7 +547,7 @@ int main( ac, av )
                 * This may error out if we lose a route, so we won't die().
                 */
                if ( atp_sresp( pr->p_atp, &atpb ) < 0 ) {
-                   LOG(log_error, logtype_papd, "atp_sresp: %m" );
+                   LOG(log_error, logtype_papd, "atp_sresp: %s", strerror(errno) );
                }
 #endif /* notdef */
            }
@@ -564,9 +560,7 @@ int main( ac, av )
  * We assume buf is big enough for 255 bytes of data and a length byte.
  */
 
-int getstatus( pr, buf )
-    struct printer     *pr;
-    char               *buf;
+int getstatus(struct printer *pr, char *buf)
 {
 
 #ifdef HAVE_CUPS
@@ -609,13 +603,12 @@ int getstatus( pr, buf )
 #endif /* HAVE_CUPS */
 }
 
-char   *pgetstr();
+char   *pgetstr(char *id, char **area);
 char   *getpname(char **area, int bufsize);
 
 #define PF_CONFBUFFER  1024
 
-static void getprinters( cf )
-    char       *cf;
+static void getprinters( char *cf)
 {
     char               buf[ PF_CONFBUFFER ], area[ PF_CONFBUFFER ], *a, *p, *name, *type, *zone;
     struct printer     *pr;
@@ -681,9 +674,7 @@ static void getprinters( cf )
        /*
         * Get PPD file.
         */
-       if (( p = pgetstr( "pd", &a )) == NULL ) {
-           pr->p_ppdfile = defprinter.p_ppdfile;
-       } else {
+       if (( p = pgetstr( "pd", &a ) )) {
            if (( pr->p_ppdfile = (char *)malloc( strlen( p ) + 1 )) == NULL ) {
                perror( "malloc" );
                exit( 1 );
@@ -803,8 +794,7 @@ static void getprinters( cf )
     }
 }
 
-int rprintcap( pr )
-    struct printer     *pr;
+int rprintcap( struct printer *pr)
 {
 
 #ifdef HAVE_CUPS
@@ -822,15 +812,15 @@ int rprintcap( pr )
      * Check for ppd file, moved here because of cups_autoadd we cannot check at the usual location
      */
 
-    if ( pr->p_ppdfile == defprinter.p_ppdfile ) {
+    if ( pr->p_ppdfile == NULL ) {
        if ( (p = (char *) cups_get_printer_ppd ( pr->p_printer )) != NULL ) {
            if (( pr->p_ppdfile = (char *)malloc( strlen( p ) + 1 )) == NULL ) {
-               LOG(log_error, logtype_papd, "malloc: %m" );
+               LOG(log_error, logtype_papd, "malloc: %s", strerror(errno) );
                exit( 1 );
            }
            strcpy( pr->p_ppdfile, p );
            pr->p_flags |= P_CUPS_PPD;
-           /*LOG(log_info, logtype_papd, "PPD File for %s set to %s", pr->p_printer, pr->p_ppdfile );*/
+           LOG(log_info, logtype_papd, "PPD File for %s set to %s", pr->p_printer, pr->p_ppdfile );
        }
     }
 
@@ -860,7 +850,7 @@ int rprintcap( pr )
            pr->p_spool = defprinter.p_spool;
        } else {
            if (( pr->p_spool = (char *)malloc( strlen( p ) + 1 )) == NULL ) {
-               LOG(log_error, logtype_papd, "malloc: %m" );
+               LOG(log_error, logtype_papd, "malloc: %s", strerror(errno) );
                exit( 1 );
            }
            strcpy( pr->p_spool, p );
@@ -884,7 +874,7 @@ int rprintcap( pr )
            } else {
                if (( pr->p_role =
                        (char *)malloc( strlen( p ) + 1 )) == NULL ) {
-                   LOG(log_error, logtype_papd, "malloc: %m" );
+                   LOG(log_error, logtype_papd, "malloc: %s", strerror(errno) );
                    exit( 1 );
                }
                strcpy( pr->p_role, p );
@@ -910,7 +900,7 @@ int rprintcap( pr )
        if (( p = pgetstr( "pc", &a )) != NULL ) {
            if (( pr->p_pagecost_msg =
                    (char *)malloc( strlen( p ) + 1 )) == NULL ) {
-               LOG(log_error, logtype_papd, "malloc: %m" );
+               LOG(log_error, logtype_papd, "malloc: %s", strerror(errno) );
                exit( 1 );
            }
            strcpy( pr->p_pagecost_msg, p );
@@ -935,7 +925,7 @@ int rprintcap( pr )
            pr->p_lock = defprinter.p_lock;
        } else {
            if (( pr->p_lock = (char *)malloc( strlen( p ) + 1 )) == NULL ) {
-               LOG(log_error, logtype_papd, "malloc: %m" );
+               LOG(log_error, logtype_papd, "malloc: %s", strerror(errno) );
                exit( 1 );
            }
            strcpy( pr->p_lock, p );