1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24*7c478bd9Sstevel@tonic-gate * Use is subject to license terms. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate 27*7c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28*7c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 29*7c478bd9Sstevel@tonic-gate 30*7c478bd9Sstevel@tonic-gate 31*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 32*7c478bd9Sstevel@tonic-gate 33*7c478bd9Sstevel@tonic-gate #if !defined(_LP_LP_H) 34*7c478bd9Sstevel@tonic-gate #define _LP_LP_H 35*7c478bd9Sstevel@tonic-gate 36*7c478bd9Sstevel@tonic-gate #include "errno.h" 37*7c478bd9Sstevel@tonic-gate #include "fcntl.h" 38*7c478bd9Sstevel@tonic-gate #include "sys/types.h" 39*7c478bd9Sstevel@tonic-gate #include "sys/stat.h" 40*7c478bd9Sstevel@tonic-gate #include "stdio.h" 41*7c478bd9Sstevel@tonic-gate #include "dirent.h" 42*7c478bd9Sstevel@tonic-gate 43*7c478bd9Sstevel@tonic-gate /** 44*7c478bd9Sstevel@tonic-gate ** Types: 45*7c478bd9Sstevel@tonic-gate **/ 46*7c478bd9Sstevel@tonic-gate 47*7c478bd9Sstevel@tonic-gate typedef struct SCALED { 48*7c478bd9Sstevel@tonic-gate float val; /* value of number, scaled according to "sc" */ 49*7c478bd9Sstevel@tonic-gate char sc; /* 'i' inches, 'c' centimeters, ' ' lines/cols */ 50*7c478bd9Sstevel@tonic-gate } SCALED; 51*7c478bd9Sstevel@tonic-gate 52*7c478bd9Sstevel@tonic-gate typedef struct FALERT { 53*7c478bd9Sstevel@tonic-gate char * shcmd; /* shell command used to perform the alert */ 54*7c478bd9Sstevel@tonic-gate int Q; /* # requests queued to activate alert */ 55*7c478bd9Sstevel@tonic-gate int W; /* alert is sent every "W" minutes */ 56*7c478bd9Sstevel@tonic-gate } FALERT; 57*7c478bd9Sstevel@tonic-gate 58*7c478bd9Sstevel@tonic-gate 59*7c478bd9Sstevel@tonic-gate #define LP_USE_PAPI_ATTR 1 /* use PAPI attributes for printing */ 60*7c478bd9Sstevel@tonic-gate /* TODO: is this best place for this ? */ 61*7c478bd9Sstevel@tonic-gate 62*7c478bd9Sstevel@tonic-gate /** 63*7c478bd9Sstevel@tonic-gate ** Places: 64*7c478bd9Sstevel@tonic-gate **/ 65*7c478bd9Sstevel@tonic-gate 66*7c478bd9Sstevel@tonic-gate /* 67*7c478bd9Sstevel@tonic-gate * These functions no longer exist. The defines take care 68*7c478bd9Sstevel@tonic-gate * of recompiling code that expects these and the null functions 69*7c478bd9Sstevel@tonic-gate * in getpaths.c take care of relinking objects that expect these. 70*7c478bd9Sstevel@tonic-gate */ 71*7c478bd9Sstevel@tonic-gate #define getpaths() 72*7c478bd9Sstevel@tonic-gate #define getadminpaths(x) 73*7c478bd9Sstevel@tonic-gate 74*7c478bd9Sstevel@tonic-gate #define LPDIR "/usr/lib/lp" 75*7c478bd9Sstevel@tonic-gate #define ETCDIR "/etc/lp" 76*7c478bd9Sstevel@tonic-gate #define SPOOLDIR "/var/spool/lp" 77*7c478bd9Sstevel@tonic-gate #define LOGDIR "/var/lp/logs" 78*7c478bd9Sstevel@tonic-gate 79*7c478bd9Sstevel@tonic-gate #define TERMINFO "/usr/share/lib/terminfo" 80*7c478bd9Sstevel@tonic-gate 81*7c478bd9Sstevel@tonic-gate #define LPUSER "lp" 82*7c478bd9Sstevel@tonic-gate #define ROOTUSER "root" 83*7c478bd9Sstevel@tonic-gate 84*7c478bd9Sstevel@tonic-gate #define BANG_S "!" 85*7c478bd9Sstevel@tonic-gate #define BANG_C '!' 86*7c478bd9Sstevel@tonic-gate 87*7c478bd9Sstevel@tonic-gate #define LOCAL_LPUSER BANG_S LPUSER 88*7c478bd9Sstevel@tonic-gate #define LOCAL_ROOTUSER BANG_S ROOTUSER 89*7c478bd9Sstevel@tonic-gate #define ALL_BANG_ALL NAME_ALL BANG_S NAME_ALL 90*7c478bd9Sstevel@tonic-gate 91*7c478bd9Sstevel@tonic-gate /* #define ADMINSDIR "admins" */ 92*7c478bd9Sstevel@tonic-gate /* # define CLASSESDIR "classes" */ 93*7c478bd9Sstevel@tonic-gate /* # define FORMSDIR "forms" */ 94*7c478bd9Sstevel@tonic-gate /* # define INTERFACESDIR "interfaces" */ 95*7c478bd9Sstevel@tonic-gate /* # define PRINTERSDIR "printers" */ 96*7c478bd9Sstevel@tonic-gate /* # define PRINTWHEELSDIR "pwheels" */ 97*7c478bd9Sstevel@tonic-gate /* #define BINDIR "bin" */ 98*7c478bd9Sstevel@tonic-gate /* #define LOGSDIR "logs" */ 99*7c478bd9Sstevel@tonic-gate /* #define MODELSDIR "model" */ 100*7c478bd9Sstevel@tonic-gate /* #define NETWORKDIR "network" */ 101*7c478bd9Sstevel@tonic-gate #define FIFOSDIR "fifos" 102*7c478bd9Sstevel@tonic-gate /* # define PRIVFIFODIR "private" */ 103*7c478bd9Sstevel@tonic-gate /* # define PUBFIFODIR "public" */ 104*7c478bd9Sstevel@tonic-gate /* #define REQUESTSDIR "requests" */ 105*7c478bd9Sstevel@tonic-gate /* #define SYSTEMDIR "system" */ 106*7c478bd9Sstevel@tonic-gate /* #define TEMPDIR "temp" */ 107*7c478bd9Sstevel@tonic-gate /* #define TMPDIR "tmp" */ 108*7c478bd9Sstevel@tonic-gate 109*7c478bd9Sstevel@tonic-gate /* #define SCHEDLOCK "SCHEDLOCK" */ 110*7c478bd9Sstevel@tonic-gate /* #define FIFO "FIFO" */ 111*7c478bd9Sstevel@tonic-gate 112*7c478bd9Sstevel@tonic-gate #define FILTERTABLE "filter.table" 113*7c478bd9Sstevel@tonic-gate #define FILTERTABLE_I "filter.table.i" 114*7c478bd9Sstevel@tonic-gate 115*7c478bd9Sstevel@tonic-gate /* #define DESCRIBEFILE "describe" */ 116*7c478bd9Sstevel@tonic-gate /* #define ALIGNFILE "align_ptrn" */ 117*7c478bd9Sstevel@tonic-gate #define COMMENTFILE "comment" 118*7c478bd9Sstevel@tonic-gate #define ALLOWFILE "allow" 119*7c478bd9Sstevel@tonic-gate #define DENYFILE "deny" 120*7c478bd9Sstevel@tonic-gate #define ALERTSHFILE "alert.sh" 121*7c478bd9Sstevel@tonic-gate #define ALERTVARSFILE "alert.vars" 122*7c478bd9Sstevel@tonic-gate #define ALERTPROTOFILE "alert.proto" 123*7c478bd9Sstevel@tonic-gate #define CONFIGFILE "configuration" 124*7c478bd9Sstevel@tonic-gate #define FACCESSPREFIX "forms." 125*7c478bd9Sstevel@tonic-gate #define PACCESSPREFIX "paper." 126*7c478bd9Sstevel@tonic-gate #define UACCESSPREFIX "users." 127*7c478bd9Sstevel@tonic-gate #define FALLOWFILE FACCESSPREFIX ALLOWFILE 128*7c478bd9Sstevel@tonic-gate #define FDENYFILE FACCESSPREFIX DENYFILE 129*7c478bd9Sstevel@tonic-gate #define UALLOWFILE UACCESSPREFIX ALLOWFILE 130*7c478bd9Sstevel@tonic-gate #define UDENYFILE UACCESSPREFIX DENYFILE 131*7c478bd9Sstevel@tonic-gate /* #define DEFAULTFILE "default" */ 132*7c478bd9Sstevel@tonic-gate #define STATUSFILE "status" 133*7c478bd9Sstevel@tonic-gate /* #define USERSFILE "users" */ 134*7c478bd9Sstevel@tonic-gate /* #define NAMEFILE "name" */ 135*7c478bd9Sstevel@tonic-gate /* #define XFERFILE "transfer" */ 136*7c478bd9Sstevel@tonic-gate /* #define EXECFILE "execute" */ 137*7c478bd9Sstevel@tonic-gate #define PSTATUSFILE "pstatus" 138*7c478bd9Sstevel@tonic-gate #define CSTATUSFILE "cstatus" 139*7c478bd9Sstevel@tonic-gate /* #define REQLOGFILE "requests" */ 140*7c478bd9Sstevel@tonic-gate 141*7c478bd9Sstevel@tonic-gate #define STANDARD "standard" 142*7c478bd9Sstevel@tonic-gate /* #define SLOWFILTER "slow.filter" */ 143*7c478bd9Sstevel@tonic-gate #define FAULTMESSAGEFILE "faultMessage" 144*7c478bd9Sstevel@tonic-gate #define FORMMESSAGEFILE "formMessage" 145*7c478bd9Sstevel@tonic-gate 146*7c478bd9Sstevel@tonic-gate #define LPNET "/usr/lib/lp/lpNet" 147*7c478bd9Sstevel@tonic-gate 148*7c478bd9Sstevel@tonic-gate #ifdef LP_USE_PAPI_ATTR 149*7c478bd9Sstevel@tonic-gate #define STANDARD_FOOMATIC "standard_foomatic" 150*7c478bd9Sstevel@tonic-gate /* 151*7c478bd9Sstevel@tonic-gate * The default model interface script to use if a printer is configured 152*7c478bd9Sstevel@tonic-gate * with a PPD (PostScript Printer Definition) file. 153*7c478bd9Sstevel@tonic-gate */ 154*7c478bd9Sstevel@tonic-gate #define LP_PAPIATTRNAME "attributes" 155*7c478bd9Sstevel@tonic-gate /* 156*7c478bd9Sstevel@tonic-gate * Job attributes filename extension, 157*7c478bd9Sstevel@tonic-gate * eg. /var/spool/lp/temp/123-attributes 158*7c478bd9Sstevel@tonic-gate */ 159*7c478bd9Sstevel@tonic-gate #endif 160*7c478bd9Sstevel@tonic-gate 161*7c478bd9Sstevel@tonic-gate /** 162*7c478bd9Sstevel@tonic-gate ** Names and phrases: 163*7c478bd9Sstevel@tonic-gate **/ 164*7c478bd9Sstevel@tonic-gate 165*7c478bd9Sstevel@tonic-gate /* 166*7c478bd9Sstevel@tonic-gate * If you change these from macros to defined (char *) strings, 167*7c478bd9Sstevel@tonic-gate * be aware that in several places the lengths of the strings 168*7c478bd9Sstevel@tonic-gate * are computed using "sizeof()", not "strlen()"! 169*7c478bd9Sstevel@tonic-gate */ 170*7c478bd9Sstevel@tonic-gate #define NAME_ALL "all" 171*7c478bd9Sstevel@tonic-gate #define NAME_ANY "any" 172*7c478bd9Sstevel@tonic-gate #define NAME_NONE "none" 173*7c478bd9Sstevel@tonic-gate #define NAME_TERMINFO "terminfo" 174*7c478bd9Sstevel@tonic-gate #define NAME_SIMPLE "simple" 175*7c478bd9Sstevel@tonic-gate #define NAME_HOLD "hold" 176*7c478bd9Sstevel@tonic-gate #define NAME_RESUME "resume" 177*7c478bd9Sstevel@tonic-gate #define NAME_IMMEDIATE "immediate" 178*7c478bd9Sstevel@tonic-gate #define NAME_CONTINUE "continue" 179*7c478bd9Sstevel@tonic-gate #define NAME_BEGINNING "beginning" 180*7c478bd9Sstevel@tonic-gate #define NAME_WAIT "wait" 181*7c478bd9Sstevel@tonic-gate #define NAME_MAIL "mail" 182*7c478bd9Sstevel@tonic-gate #define NAME_WRITE "write" 183*7c478bd9Sstevel@tonic-gate #define NAME_QUIET "quiet" 184*7c478bd9Sstevel@tonic-gate #define NAME_LIST "list" 185*7c478bd9Sstevel@tonic-gate #define NAME_ON "on" 186*7c478bd9Sstevel@tonic-gate #define NAME_OFF "off" 187*7c478bd9Sstevel@tonic-gate #define NAME_OPTIONAL "optional" 188*7c478bd9Sstevel@tonic-gate #define NAME_ALWAYS "Always" 189*7c478bd9Sstevel@tonic-gate #define NAME_UNKNOWN "unknown" 190*7c478bd9Sstevel@tonic-gate #define NAME_REJECTING "rejecting" 191*7c478bd9Sstevel@tonic-gate #define NAME_ACCEPTING "accepting" 192*7c478bd9Sstevel@tonic-gate #define NAME_DISABLED "disabled" 193*7c478bd9Sstevel@tonic-gate #define NAME_ENABLED "enabled" 194*7c478bd9Sstevel@tonic-gate #define NAME_DIRECT "direct" 195*7c478bd9Sstevel@tonic-gate #define NAME_PICA "pica" 196*7c478bd9Sstevel@tonic-gate #define NAME_ELITE "elite" 197*7c478bd9Sstevel@tonic-gate #define NAME_COMPRESSED "compressed" 198*7c478bd9Sstevel@tonic-gate #define NAME_ALLOW "allow" 199*7c478bd9Sstevel@tonic-gate #define NAME_DENY "deny" 200*7c478bd9Sstevel@tonic-gate #define NAME_ONCE "once" 201*7c478bd9Sstevel@tonic-gate #define NAME_DEFAULT "default" 202*7c478bd9Sstevel@tonic-gate #define NAME_KEEP "keep" 203*7c478bd9Sstevel@tonic-gate 204*7c478bd9Sstevel@tonic-gate /** 205*7c478bd9Sstevel@tonic-gate ** Common messages: 206*7c478bd9Sstevel@tonic-gate **/ 207*7c478bd9Sstevel@tonic-gate 208*7c478bd9Sstevel@tonic-gate #define CUZ_NEW_PRINTER "new printer" 209*7c478bd9Sstevel@tonic-gate #define CUZ_NEW_DEST "new destination" 210*7c478bd9Sstevel@tonic-gate #define CUZ_STOPPED "stopped with printer fault" 211*7c478bd9Sstevel@tonic-gate #define CUZ_FAULT "printer fault" 212*7c478bd9Sstevel@tonic-gate #define CUZ_LOGIN_PRINTER "disabled by Spooler: login terminal" 213*7c478bd9Sstevel@tonic-gate #define CUZ_MOUNTING "mounting a form" 214*7c478bd9Sstevel@tonic-gate #define CUZ_NOFORK "can't fork" 215*7c478bd9Sstevel@tonic-gate #define CUZ_NOREMOTE "remote system no longer defined" 216*7c478bd9Sstevel@tonic-gate #define CUZ_PRINTING_OK "ready and printing" 217*7c478bd9Sstevel@tonic-gate 218*7c478bd9Sstevel@tonic-gate #define TIMEOUT_FAULT \ 219*7c478bd9Sstevel@tonic-gate "Timed-out trying to open the printer port.\n" 220*7c478bd9Sstevel@tonic-gate 221*7c478bd9Sstevel@tonic-gate #define OPEN_FAULT \ 222*7c478bd9Sstevel@tonic-gate "Failed to open the printer port.\n" 223*7c478bd9Sstevel@tonic-gate 224*7c478bd9Sstevel@tonic-gate #define PUSH_FAULT \ 225*7c478bd9Sstevel@tonic-gate "Failed to push module(s) onto the printer port stream.\n" 226*7c478bd9Sstevel@tonic-gate 227*7c478bd9Sstevel@tonic-gate /* 228*7c478bd9Sstevel@tonic-gate * When the Spooler detected the hangup, this message is used. 229*7c478bd9Sstevel@tonic-gate */ 230*7c478bd9Sstevel@tonic-gate #define HANGUP_FAULT \ 231*7c478bd9Sstevel@tonic-gate "The connection to the printer dropped; perhaps the printer went off-line!\n" 232*7c478bd9Sstevel@tonic-gate 233*7c478bd9Sstevel@tonic-gate /* 234*7c478bd9Sstevel@tonic-gate * When lp.cat detected the hangup, this message is used. 235*7c478bd9Sstevel@tonic-gate */ 236*7c478bd9Sstevel@tonic-gate #define HANGUP_FAULT_LPCAT \ 237*7c478bd9Sstevel@tonic-gate "The connection to the printer dropped; perhaps the printer went off-line.\n" 238*7c478bd9Sstevel@tonic-gate 239*7c478bd9Sstevel@tonic-gate #define INTERRUPT_FAULT \ 240*7c478bd9Sstevel@tonic-gate "Received an interrupt from the printer. The reason is unknown,\nalthough a common cause is that the printer's buffer capacity\nwas exceeded. Using XON/XOFF flow control, adding carriage-return\ndelays, or lowering the baud rate may fix the problem.\nSee stty(1) and lpadmin(1M) man-pages for help in doing this.\n" 241*7c478bd9Sstevel@tonic-gate 242*7c478bd9Sstevel@tonic-gate #define PIPE_FAULT \ 243*7c478bd9Sstevel@tonic-gate "The output ``port'', a FIFO, was closed before all output was written.\n" 244*7c478bd9Sstevel@tonic-gate 245*7c478bd9Sstevel@tonic-gate #define EXIT_FAULT \ 246*7c478bd9Sstevel@tonic-gate "The interface program returned with a reserved exit code.\n" 247*7c478bd9Sstevel@tonic-gate 248*7c478bd9Sstevel@tonic-gate /** 249*7c478bd9Sstevel@tonic-gate ** Lp-errno #defines, etc. 250*7c478bd9Sstevel@tonic-gate **/ 251*7c478bd9Sstevel@tonic-gate 252*7c478bd9Sstevel@tonic-gate #define LP_EBADSDN 1 253*7c478bd9Sstevel@tonic-gate #define LP_EBADINT 2 254*7c478bd9Sstevel@tonic-gate #define LP_EBADNAME 3 255*7c478bd9Sstevel@tonic-gate #define LP_EBADARG 4 256*7c478bd9Sstevel@tonic-gate #define LP_ETRAILIN 5 257*7c478bd9Sstevel@tonic-gate #define LP_ENOCMT 6 258*7c478bd9Sstevel@tonic-gate #define LP_EBADCTYPE 7 259*7c478bd9Sstevel@tonic-gate #define LP_ENOALP 8 260*7c478bd9Sstevel@tonic-gate #define LP_ENULLPTR 9 261*7c478bd9Sstevel@tonic-gate #define LP_EBADHDR 10 262*7c478bd9Sstevel@tonic-gate #define LP_ETEMPLATE 11 263*7c478bd9Sstevel@tonic-gate #define LP_EKEYWORD 12 264*7c478bd9Sstevel@tonic-gate #define LP_EPATTERN 13 265*7c478bd9Sstevel@tonic-gate #define LP_ERESULT 14 266*7c478bd9Sstevel@tonic-gate #define LP_EREGEX 15 /* and see extern int regerrno, regexpr(3G) */ 267*7c478bd9Sstevel@tonic-gate #define LP_ENOMEM 99 268*7c478bd9Sstevel@tonic-gate 269*7c478bd9Sstevel@tonic-gate extern int lp_errno; 270*7c478bd9Sstevel@tonic-gate 271*7c478bd9Sstevel@tonic-gate /** 272*7c478bd9Sstevel@tonic-gate ** Misc. Macros 273*7c478bd9Sstevel@tonic-gate **/ 274*7c478bd9Sstevel@tonic-gate 275*7c478bd9Sstevel@tonic-gate #define LP_WS " " /* Whitespace (also list separator) */ 276*7c478bd9Sstevel@tonic-gate #define LP_SEP "," /* List separator */ 277*7c478bd9Sstevel@tonic-gate #define LP_QUOTES "'\"" 278*7c478bd9Sstevel@tonic-gate 279*7c478bd9Sstevel@tonic-gate #define MAIL "mail" 280*7c478bd9Sstevel@tonic-gate #define WRITE "write" 281*7c478bd9Sstevel@tonic-gate 282*7c478bd9Sstevel@tonic-gate #define STATUS_BREAK "==========" 283*7c478bd9Sstevel@tonic-gate 284*7c478bd9Sstevel@tonic-gate #define STREQU(A,B) ( (!(A) || !(B)) ? 0: (strcmp((A), (B)) == 0) ) 285*7c478bd9Sstevel@tonic-gate #define STRNEQU(A,B,N) ( (!(A) || !(B)) ? 0: (strncmp((A), (B), (N)) == 0) ) 286*7c478bd9Sstevel@tonic-gate #define CS_STREQU(A,B) (cs_strcmp((A), (B)) == 0) 287*7c478bd9Sstevel@tonic-gate #define CS_STRNEQU(A,B,N) (cs_strncmp((A), (B), (N)) == 0) 288*7c478bd9Sstevel@tonic-gate #define STRSIZE(X) (sizeof(X) - 1) 289*7c478bd9Sstevel@tonic-gate 290*7c478bd9Sstevel@tonic-gate /* 291*7c478bd9Sstevel@tonic-gate * Almost STREQU but compares null pointers as equal, too. 292*7c478bd9Sstevel@tonic-gate */ 293*7c478bd9Sstevel@tonic-gate #define SAME(A,B) ((A) == (B) || (A) && (B) && STREQU((A), (B))) 294*7c478bd9Sstevel@tonic-gate 295*7c478bd9Sstevel@tonic-gate #define PRINTF (void)printf 296*7c478bd9Sstevel@tonic-gate #define SPRINTF (void)sprintf 297*7c478bd9Sstevel@tonic-gate #define FPRINTF (void)fprintf 298*7c478bd9Sstevel@tonic-gate 299*7c478bd9Sstevel@tonic-gate #define NB(X) (X? X : "") 300*7c478bd9Sstevel@tonic-gate 301*7c478bd9Sstevel@tonic-gate extern int errno; 302*7c478bd9Sstevel@tonic-gate extern char * sys_errlist[]; 303*7c478bd9Sstevel@tonic-gate extern int sys_nerr; 304*7c478bd9Sstevel@tonic-gate 305*7c478bd9Sstevel@tonic-gate #define PERROR (errno < sys_nerr? sys_errlist[errno] : "unknown") 306*7c478bd9Sstevel@tonic-gate 307*7c478bd9Sstevel@tonic-gate /* 308*7c478bd9Sstevel@tonic-gate * Largest number we'll ever expect to get from doing %ld in printf, 309*7c478bd9Sstevel@tonic-gate * as a string and number. ULONG_MAX from limits.h gives us the number, 310*7c478bd9Sstevel@tonic-gate * but I can't figure out how to get that into a string. 311*7c478bd9Sstevel@tonic-gate */ 312*7c478bd9Sstevel@tonic-gate #define BIGGEST_NUMBER ULONG_MAX 313*7c478bd9Sstevel@tonic-gate #define BIGGEST_NUMBER_S "4294967295" 314*7c478bd9Sstevel@tonic-gate 315*7c478bd9Sstevel@tonic-gate /* 316*7c478bd9Sstevel@tonic-gate * Largest request ID (numerical part), as string and number. 317*7c478bd9Sstevel@tonic-gate * See comment above. 318*7c478bd9Sstevel@tonic-gate */ 319*7c478bd9Sstevel@tonic-gate #define BIGGEST_REQID 999999 320*7c478bd9Sstevel@tonic-gate #define BIGGEST_REQID_S "999999" 321*7c478bd9Sstevel@tonic-gate 322*7c478bd9Sstevel@tonic-gate /* 323*7c478bd9Sstevel@tonic-gate * Maximum number of files queued per request, as string and number. 324*7c478bd9Sstevel@tonic-gate * See earlier comment above. 325*7c478bd9Sstevel@tonic-gate */ 326*7c478bd9Sstevel@tonic-gate #define MOST_FILES 999999 327*7c478bd9Sstevel@tonic-gate #define MOST_FILES_S "999999" 328*7c478bd9Sstevel@tonic-gate 329*7c478bd9Sstevel@tonic-gate /** 330*7c478bd9Sstevel@tonic-gate ** Alert macros: 331*7c478bd9Sstevel@tonic-gate **/ 332*7c478bd9Sstevel@tonic-gate 333*7c478bd9Sstevel@tonic-gate /* 334*7c478bd9Sstevel@tonic-gate * Type of alert to be S_QUIET'd 335*7c478bd9Sstevel@tonic-gate */ 336*7c478bd9Sstevel@tonic-gate #define QA_FORM 1 337*7c478bd9Sstevel@tonic-gate #define QA_PRINTER 2 338*7c478bd9Sstevel@tonic-gate #define QA_PRINTWHEEL 3 339*7c478bd9Sstevel@tonic-gate 340*7c478bd9Sstevel@tonic-gate /** 341*7c478bd9Sstevel@tonic-gate ** File modes: 342*7c478bd9Sstevel@tonic-gate ** (The "NO" prefix is relative to ``others''.) 343*7c478bd9Sstevel@tonic-gate **/ 344*7c478bd9Sstevel@tonic-gate 345*7c478bd9Sstevel@tonic-gate #define MODE_READ (mode_t)0664 346*7c478bd9Sstevel@tonic-gate #define MODE_NOREAD (mode_t)0660 347*7c478bd9Sstevel@tonic-gate #define MODE_EXEC (mode_t)0775 348*7c478bd9Sstevel@tonic-gate #define MODE_NOEXEC (mode_t)0770 349*7c478bd9Sstevel@tonic-gate #define MODE_DIR (mode_t)0775 350*7c478bd9Sstevel@tonic-gate #define MODE_NODIR (mode_t)0770 351*7c478bd9Sstevel@tonic-gate 352*7c478bd9Sstevel@tonic-gate extern int printlist_qsep; 353*7c478bd9Sstevel@tonic-gate 354*7c478bd9Sstevel@tonic-gate extern char Lp_Spooldir[], 355*7c478bd9Sstevel@tonic-gate Lp_Admins[], 356*7c478bd9Sstevel@tonic-gate Lp_Bin[], 357*7c478bd9Sstevel@tonic-gate Lp_FIFO[], 358*7c478bd9Sstevel@tonic-gate Lp_Logs[], 359*7c478bd9Sstevel@tonic-gate Lp_ReqLog[], 360*7c478bd9Sstevel@tonic-gate Lp_Model[], 361*7c478bd9Sstevel@tonic-gate Lp_Private_FIFOs[], 362*7c478bd9Sstevel@tonic-gate Lp_Public_FIFOs[], 363*7c478bd9Sstevel@tonic-gate Lp_Requests[], 364*7c478bd9Sstevel@tonic-gate Lp_Secure[], 365*7c478bd9Sstevel@tonic-gate Lp_Schedlock[], 366*7c478bd9Sstevel@tonic-gate Lp_Slow_Filter[], 367*7c478bd9Sstevel@tonic-gate Lp_System[], 368*7c478bd9Sstevel@tonic-gate Lp_Temp[], 369*7c478bd9Sstevel@tonic-gate Lp_Tmp[], 370*7c478bd9Sstevel@tonic-gate Lp_NetTmp[], 371*7c478bd9Sstevel@tonic-gate Lp_NetData[], 372*7c478bd9Sstevel@tonic-gate Lp_Users[], 373*7c478bd9Sstevel@tonic-gate Lp_A[], 374*7c478bd9Sstevel@tonic-gate Lp_A_Classes[], 375*7c478bd9Sstevel@tonic-gate Lp_A_Forms[], 376*7c478bd9Sstevel@tonic-gate Lp_A_Interfaces[], 377*7c478bd9Sstevel@tonic-gate Lp_A_Logs[], 378*7c478bd9Sstevel@tonic-gate Lp_A_Printers[], 379*7c478bd9Sstevel@tonic-gate Lp_A_PrintWheels[], 380*7c478bd9Sstevel@tonic-gate Lp_A_Filters[], 381*7c478bd9Sstevel@tonic-gate Lp_A_Systems[], 382*7c478bd9Sstevel@tonic-gate Lp_Default[], 383*7c478bd9Sstevel@tonic-gate Lp_A_Faults[]; 384*7c478bd9Sstevel@tonic-gate 385*7c478bd9Sstevel@tonic-gate extern int Lp_NTBase; 386*7c478bd9Sstevel@tonic-gate 387*7c478bd9Sstevel@tonic-gate /* 388*7c478bd9Sstevel@tonic-gate * File access: 389*7c478bd9Sstevel@tonic-gate */ 390*7c478bd9Sstevel@tonic-gate 391*7c478bd9Sstevel@tonic-gate extern int open_locked(char *, char *, mode_t); 392*7c478bd9Sstevel@tonic-gate extern char *fdgets(char *, int, int); 393*7c478bd9Sstevel@tonic-gate extern int fdprintf(int, char *, ...); 394*7c478bd9Sstevel@tonic-gate extern int fdputs(char *, int); 395*7c478bd9Sstevel@tonic-gate extern int fdputc(char, int); 396*7c478bd9Sstevel@tonic-gate 397*7c478bd9Sstevel@tonic-gate extern int is_printer_uri(char *); 398*7c478bd9Sstevel@tonic-gate 399*7c478bd9Sstevel@tonic-gate FILE *open_lpfile ( char * , char * , mode_t ); 400*7c478bd9Sstevel@tonic-gate int close_lpfile ( FILE * ); 401*7c478bd9Sstevel@tonic-gate int chown_lppath ( char * path ); 402*7c478bd9Sstevel@tonic-gate int mkdir_lpdir ( char * path , int mode ); 403*7c478bd9Sstevel@tonic-gate int rmfile ( char * path ); 404*7c478bd9Sstevel@tonic-gate int dumpstring ( char * path , char * str ); 405*7c478bd9Sstevel@tonic-gate 406*7c478bd9Sstevel@tonic-gate char * loadstring ( char * path ); 407*7c478bd9Sstevel@tonic-gate char * loadline ( char * path ); 408*7c478bd9Sstevel@tonic-gate char * sop_up_rest (int, char * endsop ); 409*7c478bd9Sstevel@tonic-gate 410*7c478bd9Sstevel@tonic-gate /* 411*7c478bd9Sstevel@tonic-gate * List manipulation routines: 412*7c478bd9Sstevel@tonic-gate */ 413*7c478bd9Sstevel@tonic-gate 414*7c478bd9Sstevel@tonic-gate #define emptylist(LP) (!(LP) || !(LP)[0]) 415*7c478bd9Sstevel@tonic-gate 416*7c478bd9Sstevel@tonic-gate int addlist ( char *** , char * ); 417*7c478bd9Sstevel@tonic-gate int addstring ( char ** , char * ); 418*7c478bd9Sstevel@tonic-gate int appendlist ( char *** , char * ); 419*7c478bd9Sstevel@tonic-gate int dellist ( char *** , char * ); 420*7c478bd9Sstevel@tonic-gate int joinlist ( char *** , char ** ); 421*7c478bd9Sstevel@tonic-gate int lenlist ( char ** ); 422*7c478bd9Sstevel@tonic-gate int printlist ( FILE * , char ** ); 423*7c478bd9Sstevel@tonic-gate int fdprintlist(int , char ** ); 424*7c478bd9Sstevel@tonic-gate int searchlist ( char *, char ** ); 425*7c478bd9Sstevel@tonic-gate int searchlist_with_terminfo ( char * , char ** ); 426*7c478bd9Sstevel@tonic-gate 427*7c478bd9Sstevel@tonic-gate char ** duplist ( char ** ); 428*7c478bd9Sstevel@tonic-gate char ** getlist ( char * , char * , char * ); 429*7c478bd9Sstevel@tonic-gate char ** dashos ( char * ); 430*7c478bd9Sstevel@tonic-gate char ** wherelist ( char * , char ** ); 431*7c478bd9Sstevel@tonic-gate 432*7c478bd9Sstevel@tonic-gate char * sprintlist ( char ** ); 433*7c478bd9Sstevel@tonic-gate char * search_cslist ( char * , char ** ); 434*7c478bd9Sstevel@tonic-gate 435*7c478bd9Sstevel@tonic-gate void freelist ( char ** ); 436*7c478bd9Sstevel@tonic-gate void printlist_setup ( char * , char * , char * , char * ); 437*7c478bd9Sstevel@tonic-gate void printlist_unsetup ( void ); 438*7c478bd9Sstevel@tonic-gate 439*7c478bd9Sstevel@tonic-gate /* 440*7c478bd9Sstevel@tonic-gate * Scaled decimal number routines: 441*7c478bd9Sstevel@tonic-gate */ 442*7c478bd9Sstevel@tonic-gate 443*7c478bd9Sstevel@tonic-gate #define getsdn(S) _getsdn(S, (char **)0, 0) 444*7c478bd9Sstevel@tonic-gate #define getcpi(S) _getsdn(S, (char **)0, 1) 445*7c478bd9Sstevel@tonic-gate 446*7c478bd9Sstevel@tonic-gate #define N_COMPRESSED 9999 447*7c478bd9Sstevel@tonic-gate 448*7c478bd9Sstevel@tonic-gate void printsdn ( FILE * , SCALED ); 449*7c478bd9Sstevel@tonic-gate void fdprintsdn ( int , SCALED ); 450*7c478bd9Sstevel@tonic-gate void printsdn_setup ( char * , char * , char * ); 451*7c478bd9Sstevel@tonic-gate void printsdn_unsetup ( void ); 452*7c478bd9Sstevel@tonic-gate 453*7c478bd9Sstevel@tonic-gate SCALED _getsdn ( char * , char ** , int ); 454*7c478bd9Sstevel@tonic-gate 455*7c478bd9Sstevel@tonic-gate /* 456*7c478bd9Sstevel@tonic-gate * File name routines: 457*7c478bd9Sstevel@tonic-gate */ 458*7c478bd9Sstevel@tonic-gate 459*7c478bd9Sstevel@tonic-gate char * makepath ( char * , ... ); 460*7c478bd9Sstevel@tonic-gate char * getspooldir ( void ); 461*7c478bd9Sstevel@tonic-gate char * getrequestfile ( char * ); 462*7c478bd9Sstevel@tonic-gate char * getprinterfile ( char * , char * ); 463*7c478bd9Sstevel@tonic-gate char * getsystemfile ( char * , char * ); 464*7c478bd9Sstevel@tonic-gate char * getclassfile ( char * ); 465*7c478bd9Sstevel@tonic-gate char * getfilterfile ( char * ); 466*7c478bd9Sstevel@tonic-gate char * getformfile ( char * , char * ); 467*7c478bd9Sstevel@tonic-gate 468*7c478bd9Sstevel@tonic-gate /* 469*7c478bd9Sstevel@tonic-gate * Additional string manipulation routines: 470*7c478bd9Sstevel@tonic-gate */ 471*7c478bd9Sstevel@tonic-gate 472*7c478bd9Sstevel@tonic-gate int cs_strcmp ( char * , char * ); 473*7c478bd9Sstevel@tonic-gate int cs_strncmp ( char * , char * , int ); 474*7c478bd9Sstevel@tonic-gate 475*7c478bd9Sstevel@tonic-gate /* 476*7c478bd9Sstevel@tonic-gate * Syntax checking routines: 477*7c478bd9Sstevel@tonic-gate */ 478*7c478bd9Sstevel@tonic-gate 479*7c478bd9Sstevel@tonic-gate int syn_name ( char * ); 480*7c478bd9Sstevel@tonic-gate int syn_text ( char * ); 481*7c478bd9Sstevel@tonic-gate int syn_comment ( char * ); 482*7c478bd9Sstevel@tonic-gate int syn_machine_name ( char * ); 483*7c478bd9Sstevel@tonic-gate int syn_option ( char * ); 484*7c478bd9Sstevel@tonic-gate 485*7c478bd9Sstevel@tonic-gate /* 486*7c478bd9Sstevel@tonic-gate * Alert management routines: 487*7c478bd9Sstevel@tonic-gate */ 488*7c478bd9Sstevel@tonic-gate 489*7c478bd9Sstevel@tonic-gate int putalert ( char * , char * , FALERT * ); 490*7c478bd9Sstevel@tonic-gate int delalert ( char * , char * ); 491*7c478bd9Sstevel@tonic-gate 492*7c478bd9Sstevel@tonic-gate FALERT * getalert ( char * , char * ); 493*7c478bd9Sstevel@tonic-gate 494*7c478bd9Sstevel@tonic-gate void printalert ( FILE * , FALERT * , int ); 495*7c478bd9Sstevel@tonic-gate 496*7c478bd9Sstevel@tonic-gate /* 497*7c478bd9Sstevel@tonic-gate * Terminfo Database Inquiry Tool 498*7c478bd9Sstevel@tonic-gate */ 499*7c478bd9Sstevel@tonic-gate 500*7c478bd9Sstevel@tonic-gate int tidbit ( char * , char * , ... ); 501*7c478bd9Sstevel@tonic-gate void untidbit ( char * ); 502*7c478bd9Sstevel@tonic-gate 503*7c478bd9Sstevel@tonic-gate /* 504*7c478bd9Sstevel@tonic-gate * Auto-restarting and other system calls: 505*7c478bd9Sstevel@tonic-gate * The two versions are here to reduce the chance of colliding 506*7c478bd9Sstevel@tonic-gate * with similar names in standard libraries (e.g. dial(3C) uses 507*7c478bd9Sstevel@tonic-gate * Read/Write). 508*7c478bd9Sstevel@tonic-gate */ 509*7c478bd9Sstevel@tonic-gate 510*7c478bd9Sstevel@tonic-gate #define Access _Access 511*7c478bd9Sstevel@tonic-gate #define Chdir _Chdir 512*7c478bd9Sstevel@tonic-gate #define Chmod _Chmod 513*7c478bd9Sstevel@tonic-gate #define Chown _Chown 514*7c478bd9Sstevel@tonic-gate #define Close _Close 515*7c478bd9Sstevel@tonic-gate #define Creat _Creat 516*7c478bd9Sstevel@tonic-gate #define Fcntl _Fcntl 517*7c478bd9Sstevel@tonic-gate #define Fstat _Fstat 518*7c478bd9Sstevel@tonic-gate #define Link _Link 519*7c478bd9Sstevel@tonic-gate #define Lstat _Lstat 520*7c478bd9Sstevel@tonic-gate #define Mknod _Mknod 521*7c478bd9Sstevel@tonic-gate #define Open _Open 522*7c478bd9Sstevel@tonic-gate #define Read _Read 523*7c478bd9Sstevel@tonic-gate #define Readlink _Readlink 524*7c478bd9Sstevel@tonic-gate #define Rename _Rename 525*7c478bd9Sstevel@tonic-gate #define Stat _Stat 526*7c478bd9Sstevel@tonic-gate #define Symlink _Symlink 527*7c478bd9Sstevel@tonic-gate #define Unlink _Unlink 528*7c478bd9Sstevel@tonic-gate #define Wait _Wait 529*7c478bd9Sstevel@tonic-gate #define Write _Write 530*7c478bd9Sstevel@tonic-gate 531*7c478bd9Sstevel@tonic-gate #define Malloc(size) _Malloc(size, __FILE__, __LINE__) 532*7c478bd9Sstevel@tonic-gate #define Realloc(ptr,size) _Realloc(ptr, size, __FILE__, __LINE__) 533*7c478bd9Sstevel@tonic-gate #define Calloc(nelem,elsize) _Calloc(nelem, elsize, __FILE__, __LINE__) 534*7c478bd9Sstevel@tonic-gate #define Strdup(s) _Strdup(s, __FILE__, __LINE__) 535*7c478bd9Sstevel@tonic-gate #define Free(ptr) _Free(ptr, __FILE__, __LINE__) 536*7c478bd9Sstevel@tonic-gate 537*7c478bd9Sstevel@tonic-gate int _Access ( char * , int ); 538*7c478bd9Sstevel@tonic-gate int _Chdir ( char * ); 539*7c478bd9Sstevel@tonic-gate int _Chmod ( char * , int ); 540*7c478bd9Sstevel@tonic-gate int _Chown ( char * , int , int ); 541*7c478bd9Sstevel@tonic-gate int _Close ( int ); 542*7c478bd9Sstevel@tonic-gate int _Creat ( char * , int ); 543*7c478bd9Sstevel@tonic-gate int _Fcntl ( int , int , ... ); 544*7c478bd9Sstevel@tonic-gate int _Fstat ( int , struct stat * ); 545*7c478bd9Sstevel@tonic-gate int _Link ( char * , char * ); 546*7c478bd9Sstevel@tonic-gate int _Lstat ( char * , struct stat * ); 547*7c478bd9Sstevel@tonic-gate int _Mknod ( char * , int , int ); 548*7c478bd9Sstevel@tonic-gate int _Mkpipe ( char * , int , int ); 549*7c478bd9Sstevel@tonic-gate int _Open ( char * , int , ... /* mode_t */ ); 550*7c478bd9Sstevel@tonic-gate int _Read ( int , char * , unsigned int ); 551*7c478bd9Sstevel@tonic-gate int _Readlink ( char * , char * , unsigned int ); 552*7c478bd9Sstevel@tonic-gate int _Rename ( char * , char * ); 553*7c478bd9Sstevel@tonic-gate int _Symlink ( char * , char * ); 554*7c478bd9Sstevel@tonic-gate int _Stat ( char * , struct stat * ); 555*7c478bd9Sstevel@tonic-gate int _Unlink ( char * ); 556*7c478bd9Sstevel@tonic-gate int _Wait ( int * ); 557*7c478bd9Sstevel@tonic-gate int _Write ( int , char * , unsigned int ); 558*7c478bd9Sstevel@tonic-gate 559*7c478bd9Sstevel@tonic-gate void * _Malloc ( size_t , const char * , int ); 560*7c478bd9Sstevel@tonic-gate void * _Realloc ( void * , size_t , const char * , int ); 561*7c478bd9Sstevel@tonic-gate void * _Calloc ( size_t , size_t , const char * , int ); 562*7c478bd9Sstevel@tonic-gate char * _Strdup ( const char * , const char * , int ); 563*7c478bd9Sstevel@tonic-gate void _Free ( void * , const char * , int ); 564*7c478bd9Sstevel@tonic-gate 565*7c478bd9Sstevel@tonic-gate /* 566*7c478bd9Sstevel@tonic-gate * Misc. routines: 567*7c478bd9Sstevel@tonic-gate */ 568*7c478bd9Sstevel@tonic-gate 569*7c478bd9Sstevel@tonic-gate int isterminfo ( char * ); 570*7c478bd9Sstevel@tonic-gate int isprinter ( char * ); 571*7c478bd9Sstevel@tonic-gate int isrequest ( char * ); 572*7c478bd9Sstevel@tonic-gate int isnumber ( char * ); 573*7c478bd9Sstevel@tonic-gate 574*7c478bd9Sstevel@tonic-gate char * getname ( void ); 575*7c478bd9Sstevel@tonic-gate char * makestr ( char * , ... ); 576*7c478bd9Sstevel@tonic-gate char * strip ( char * ); 577*7c478bd9Sstevel@tonic-gate 578*7c478bd9Sstevel@tonic-gate void sendmail ( char * , char * ); 579*7c478bd9Sstevel@tonic-gate 580*7c478bd9Sstevel@tonic-gate void (*lp_alloc_fail_handler)( void ); 581*7c478bd9Sstevel@tonic-gate 582*7c478bd9Sstevel@tonic-gate /* 583*7c478bd9Sstevel@tonic-gate * Originally part of liblpfs.a and fs.h, now no longer needed 584*7c478bd9Sstevel@tonic-gate * since the code doesn't have to work on pre-SVR4.0. 585*7c478bd9Sstevel@tonic-gate */ 586*7c478bd9Sstevel@tonic-gate #define Opendir opendir 587*7c478bd9Sstevel@tonic-gate #define Telldir telldir 588*7c478bd9Sstevel@tonic-gate #define Seekdir seekdir 589*7c478bd9Sstevel@tonic-gate #define Rewinddir(dirp) Seekdir(dirp, 0L) 590*7c478bd9Sstevel@tonic-gate #define Closedir closedir 591*7c478bd9Sstevel@tonic-gate #define Readdir readdir 592*7c478bd9Sstevel@tonic-gate #define Mkdir mkdir 593*7c478bd9Sstevel@tonic-gate #define Rmdir rmdir 594*7c478bd9Sstevel@tonic-gate 595*7c478bd9Sstevel@tonic-gate #define next_dir(base, ptr) next_x(base, ptr, S_IFDIR) 596*7c478bd9Sstevel@tonic-gate #define next_file(base, ptr) next_x(base, ptr, S_IFREG) 597*7c478bd9Sstevel@tonic-gate 598*7c478bd9Sstevel@tonic-gate char * next_x ( char * , long * , unsigned int ); 599*7c478bd9Sstevel@tonic-gate 600*7c478bd9Sstevel@tonic-gate #endif 601