recvjob() { struct stat stb; char *bp = pbuf; int status; /* * Perform lookup for printer name or abbreviation */ if ((status = pgetent(line, printer)) < 0) fatal("cannot open printer description file"); else if (status == 0) fatal("unknown printer"); if ((LF = pgetstr("lf", &bp)) == NULL) LF = DEFLOGF; if ((SD = pgetstr("sd", &bp)) == NULL) SD = DEFSPOOL; if ((LO = pgetstr("lo", &bp)) == NULL) LO = DEFLOCK; (void) close(2); (void) open(LF, O_WRONLY|O_APPEND); if (chdir(SD) < 0) fatal("cannot chdir to %s", SD); if (stat(LO, &stb) == 0 && (stb.st_mode & 010)) { /* queue is disabled */ putchar('\1'); /* return error code */ exit(1); } if (readjob()) printjob(); }
void lpjobinit( void ) { /* read them damn pcap entries */ if( pgetent( pcapbuffer, defaultjob ) == FAILURE ) { fprintf( stderr, "missing printcap or bad job configuration\n\r" ); exit( 1 ); } numericread(); stringread(); }
recvjob() { struct stat stb; char *bp = pbuf; int status, rcleanup(); /* * Perform lookup for printer name or abbreviation */ if ((status = pgetent(line, printer)) < 0) frecverr("cannot open printer description file"); else if (status == 0) frecverr("unknown printer %s", printer); if ((LF = pgetstr("lf", &bp)) == NULL) LF = DEFLOGF; if ((SD = pgetstr("sd", &bp)) == NULL) SD = DEFSPOOL; if ((LO = pgetstr("lo", &bp)) == NULL) LO = DEFLOCK; (void) close(2); /* set up log file */ if (open(LF, O_WRONLY|O_APPEND, 0664) < 0) { syslog(LOG_ERR, "%s: %m", LF); (void) open("/dev/null", O_WRONLY); } if (chdir(SD) < 0) frecverr("%s: %s: %m", printer, SD); if (stat(LO, &stb) == 0) { if (stb.st_mode & 010) { /* queue is disabled */ putchar('\1'); /* return error code */ exit(1); } } else if (stat(SD, &stb) < 0) frecverr("%s: %s: %m", printer, SD); minfree = read_number("minfree"); ddev = find_dev(stb.st_dev, S_IFBLK); if ((dfd = open(ddev, O_RDONLY)) < 0) syslog(LOG_WARNING, "%s: %s: %m", printer, ddev); signal(SIGTERM, rcleanup); signal(SIGPIPE, rcleanup); if (readjob()) printjob(); }