| /* |
| * CDDL HEADER START |
| * |
| * The contents of this file are subject to the terms of the |
| * Common Development and Distribution License (the "License"). |
| * You may not use this file except in compliance with the License. |
| * |
| * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
| * or http://www.opensolaris.org/os/licensing. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * |
| * When distributing Covered Code, include this CDDL HEADER in each |
| * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| * If applicable, add the following below this CDDL HEADER, with the |
| * fields enclosed by brackets "[]" replaced with your own identifying |
| * information: Portions Copyright [yyyy] [name of copyright owner] |
| * |
| * CDDL HEADER END |
| */ |
| /* |
| * Copyright 2006 Sun Microsystems, Inc. All rights reserved. |
| * Use is subject to license terms. |
| */ |
| |
| /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ |
| /* All Rights Reserved */ |
| |
| #ifndef _LP_LP_H |
| #define _LP_LP_H |
| |
| #pragma ident "%Z%%M% %I% %E% SMI" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <errno.h> |
| #include <fcntl.h> |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <stdio.h> |
| #include <dirent.h> |
| |
| /** |
| ** Types: |
| **/ |
| |
| typedef struct SCALED { |
| float val; /* value of number, scaled according to "sc" */ |
| char sc; /* 'i' inches, 'c' centimeters, ' ' lines/cols */ |
| } SCALED; |
| |
| typedef struct FALERT { |
| char * shcmd; /* shell command used to perform the alert */ |
| int Q; /* # requests queued to activate alert */ |
| int W; /* alert is sent every "W" minutes */ |
| } FALERT; |
| |
| |
| #define LP_USE_PAPI_ATTR 1 /* use PAPI attributes for printing */ |
| /* TODO: is this best place for this ? */ |
| |
| /** |
| ** Places: |
| **/ |
| |
| /* |
| * These functions no longer exist. The defines take care |
| * of recompiling code that expects these and the null functions |
| * in getpaths.c take care of relinking objects that expect these. |
| */ |
| #define getpaths() |
| #define getadminpaths(x) |
| |
| #define LPDIR "/usr/lib/lp" |
| #define ETCDIR "/etc/lp" |
| #define SPOOLDIR "/var/spool/lp" |
| #define LOGDIR "/var/lp/logs" |
| |
| #define TERMINFO "/usr/share/lib/terminfo" |
| |
| #define LPUSER "lp" |
| #define ROOTUSER "root" |
| |
| #define BANG_S "!" |
| #define BANG_C '!' |
| |
| #define LOCAL_LPUSER BANG_S LPUSER |
| #define LOCAL_ROOTUSER BANG_S ROOTUSER |
| #define ALL_BANG_ALL NAME_ALL BANG_S NAME_ALL |
| |
| /* #define ADMINSDIR "admins" */ |
| /* # define CLASSESDIR "classes" */ |
| /* # define FORMSDIR "forms" */ |
| /* # define INTERFACESDIR "interfaces" */ |
| /* # define PRINTERSDIR "printers" */ |
| /* # define PRINTWHEELSDIR "pwheels" */ |
| /* #define BINDIR "bin" */ |
| /* #define LOGSDIR "logs" */ |
| /* #define MODELSDIR "model" */ |
| /* #define NETWORKDIR "network" */ |
| #define FIFOSDIR "fifos" |
| /* # define PRIVFIFODIR "private" */ |
| /* # define PUBFIFODIR "public" */ |
| /* #define REQUESTSDIR "requests" */ |
| /* #define SYSTEMDIR "system" */ |
| /* #define TEMPDIR "temp" */ |
| /* #define TMPDIR "tmp" */ |
| |
| /* #define SCHEDLOCK "SCHEDLOCK" */ |
| /* #define FIFO "FIFO" */ |
| |
| #define FILTERTABLE "filter.table" |
| #define FILTERTABLE_I "filter.table.i" |
| |
| /* #define DESCRIBEFILE "describe" */ |
| /* #define ALIGNFILE "align_ptrn" */ |
| #define COMMENTFILE "comment" |
| #define ALLOWFILE "allow" |
| #define DENYFILE "deny" |
| #define ALERTSHFILE "alert.sh" |
| #define ALERTVARSFILE "alert.vars" |
| #define ALERTPROTOFILE "alert.proto" |
| #define CONFIGFILE "configuration" |
| #define FACCESSPREFIX "forms." |
| #define PACCESSPREFIX "paper." |
| #define UACCESSPREFIX "users." |
| #define FALLOWFILE FACCESSPREFIX ALLOWFILE |
| #define FDENYFILE FACCESSPREFIX DENYFILE |
| #define UALLOWFILE UACCESSPREFIX ALLOWFILE |
| #define UDENYFILE UACCESSPREFIX DENYFILE |
| /* #define DEFAULTFILE "default" */ |
| #define STATUSFILE "status" |
| /* #define USERSFILE "users" */ |
| /* #define NAMEFILE "name" */ |
| /* #define XFERFILE "transfer" */ |
| /* #define EXECFILE "execute" */ |
| #define PSTATUSFILE "pstatus" |
| #define CSTATUSFILE "cstatus" |
| /* #define REQLOGFILE "requests" */ |
| |
| #define STANDARD "standard" |
| /* #define SLOWFILTER "slow.filter" */ |
| #define FAULTMESSAGEFILE "faultMessage" |
| #define FORMMESSAGEFILE "formMessage" |
| |
| #define LPNET "/usr/lib/lp/lpNet" |
| |
| #ifdef LP_USE_PAPI_ATTR |
| #define STANDARD_FOOMATIC "standard_foomatic" |
| /* |
| * The default model interface script to use if a printer is configured |
| * with a PPD (PostScript Printer Definition) file. |
| */ |
| #define LP_PAPIATTRNAME "attributes" |
| /* |
| * Job attributes filename extension, |
| * eg. /var/spool/lp/temp/123-attributes |
| */ |
| #endif |
| |
| /** |
| ** Names and phrases: |
| **/ |
| |
| /* |
| * If you change these from macros to defined (char *) strings, |
| * be aware that in several places the lengths of the strings |
| * are computed using "sizeof()", not "strlen()"! |
| */ |
| #define NAME_ALL "all" |
| #define NAME_ANY "any" |
| #define NAME_NONE "none" |
| #define NAME_TERMINFO "terminfo" |
| #define NAME_SIMPLE "simple" |
| #define NAME_HOLD "hold" |
| #define NAME_RESUME "resume" |
| #define NAME_IMMEDIATE "immediate" |
| #define NAME_CONTINUE "continue" |
| #define NAME_BEGINNING "beginning" |
| #define NAME_WAIT "wait" |
| #define NAME_MAIL "mail" |
| #define NAME_WRITE "write" |
| #define NAME_QUIET "quiet" |
| #define NAME_LIST "list" |
| #define NAME_ON "on" |
| #define NAME_OFF "off" |
| #define NAME_OPTIONAL "optional" |
| #define NAME_ALWAYS "Always" |
| #define NAME_UNKNOWN "unknown" |
| #define NAME_REJECTING "rejecting" |
| #define NAME_ACCEPTING "accepting" |
| #define NAME_DISABLED "disabled" |
| #define NAME_ENABLED "enabled" |
| #define NAME_DIRECT "direct" |
| #define NAME_PICA "pica" |
| #define NAME_ELITE "elite" |
| #define NAME_COMPRESSED "compressed" |
| #define NAME_ALLOW "allow" |
| #define NAME_DENY "deny" |
| #define NAME_ONCE "once" |
| #define NAME_DEFAULT "default" |
| #define NAME_KEEP "keep" |
| |
| /** |
| ** Common messages: |
| **/ |
| |
| #define CUZ_NEW_PRINTER "new printer" |
| #define CUZ_NEW_DEST "new destination" |
| #define CUZ_STOPPED "stopped with printer fault" |
| #define CUZ_FAULT "printer fault" |
| #define CUZ_LOGIN_PRINTER "disabled by Spooler: login terminal" |
| #define CUZ_MOUNTING "mounting a form" |
| #define CUZ_NOFORK "can't fork" |
| #define CUZ_NOREMOTE "remote system no longer defined" |
| #define CUZ_PRINTING_OK "ready and printing" |
| |
| #define TIMEOUT_FAULT \ |
| "Timed-out trying to open the printer port.\n" |
| |
| #define OPEN_FAULT \ |
| "Failed to open the printer port.\n" |
| |
| #define PUSH_FAULT \ |
| "Failed to push module(s) onto the printer port stream.\n" |
| |
| /* |
| * When the Spooler detected the hangup, this message is used. |
| */ |
| #define HANGUP_FAULT \ |
| "The connection to the printer dropped; perhaps the printer went off-line!\n" |
| |
| /* |
| * When lp.cat detected the hangup, this message is used. |
| */ |
| #define HANGUP_FAULT_LPCAT \ |
| "The connection to the printer dropped; perhaps the printer went off-line.\n" |
| |
| #define INTERRUPT_FAULT \ |
| "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" |
| |
| #define PIPE_FAULT \ |
| "The output ``port'', a FIFO, was closed before all output was written.\n" |
| |
| #define EXIT_FAULT \ |
| "The interface program returned with a reserved exit code.\n" |
| |
| /** |
| ** Lp-errno #defines, etc. |
| **/ |
| |
| #define LP_EBADSDN 1 |
| #define LP_EBADINT 2 |
| #define LP_EBADNAME 3 |
| #define LP_EBADARG 4 |
| #define LP_ETRAILIN 5 |
| #define LP_ENOCMT 6 |
| #define LP_EBADCTYPE 7 |
| #define LP_ENOALP 8 |
| #define LP_ENULLPTR 9 |
| #define LP_EBADHDR 10 |
| #define LP_ETEMPLATE 11 |
| #define LP_EKEYWORD 12 |
| #define LP_EPATTERN 13 |
| #define LP_ERESULT 14 |
| #define LP_EREGEX 15 /* and see extern int regerrno, regexpr(3G) */ |
| #define LP_ENOMEM 99 |
| |
| extern int lp_errno; |
| |
| /** |
| ** Misc. Macros |
| **/ |
| |
| #define LP_WS " " /* Whitespace (also list separator) */ |
| #define LP_SEP "," /* List separator */ |
| #define LP_QUOTES "'\"" |
| |
| #define MAIL "mail" |
| #define WRITE "write" |
| |
| #define STATUS_BREAK "==========" |
| |
| #define STREQU(A,B) ( (!(A) || !(B)) ? 0: (strcmp((A), (B)) == 0) ) |
| #define STRNEQU(A,B,N) ( (!(A) || !(B)) ? 0: (strncmp((A), (B), (N)) == 0) ) |
| #define CS_STREQU(A,B) (cs_strcmp((A), (B)) == 0) |
| #define CS_STRNEQU(A,B,N) (cs_strncmp((A), (B), (N)) == 0) |
| #define STRSIZE(X) (sizeof(X) - 1) |
| |
| /* |
| * Almost STREQU but compares null pointers as equal, too. |
| */ |
| #define SAME(A,B) ((A) == (B) || (A) && (B) && STREQU((A), (B))) |
| |
| #define PRINTF (void)printf |
| #define SPRINTF (void)sprintf |
| #define FPRINTF (void)fprintf |
| |
| #define NB(X) (X? X : "") |
| |
| #define PERROR strerror(errno) |
| |
| /* |
| * Largest number we'll ever expect to get from doing %ld in printf, |
| * as a string and number. ULONG_MAX from limits.h gives us the number, |
| * but I can't figure out how to get that into a string. |
| */ |
| #define BIGGEST_NUMBER ULONG_MAX |
| #define BIGGEST_NUMBER_S "4294967295" |
| |
| /* |
| * Largest request ID (numerical part), as string and number. |
| * See comment above. |
| */ |
| #define BIGGEST_REQID 999999 |
| #define BIGGEST_REQID_S "999999" |
| |
| /* |
| * Maximum number of files queued per request, as string and number. |
| * See earlier comment above. |
| */ |
| #define MOST_FILES 999999 |
| #define MOST_FILES_S "999999" |
| |
| /** |
| ** Alert macros: |
| **/ |
| |
| /* |
| * Type of alert to be S_QUIET'd |
| */ |
| #define QA_FORM 1 |
| #define QA_PRINTER 2 |
| #define QA_PRINTWHEEL 3 |
| |
| /** |
| ** File modes: |
| ** (The "NO" prefix is relative to ``others''.) |
| **/ |
| |
| #define MODE_READ (mode_t)0664 |
| #define MODE_NOREAD (mode_t)0660 |
| #define MODE_EXEC (mode_t)0775 |
| #define MODE_NOEXEC (mode_t)0770 |
| #define MODE_DIR (mode_t)0775 |
| #define MODE_NODIR (mode_t)0770 |
| |
| extern int printlist_qsep; |
| |
| extern char Lp_Spooldir[], |
| Lp_Admins[], |
| Lp_Bin[], |
| Lp_FIFO[], |
| Lp_Logs[], |
| Lp_ReqLog[], |
| Lp_Model[], |
| Lp_Private_FIFOs[], |
| Lp_Public_FIFOs[], |
| Lp_Requests[], |
| Lp_Secure[], |
| Lp_Schedlock[], |
| Lp_Slow_Filter[], |
| Lp_System[], |
| Lp_Temp[], |
| Lp_Tmp[], |
| Lp_NetTmp[], |
| Lp_NetData[], |
| Lp_Users[], |
| Lp_A[], |
| Lp_A_Classes[], |
| Lp_A_Forms[], |
| Lp_A_Interfaces[], |
| Lp_A_Logs[], |
| Lp_A_Printers[], |
| Lp_A_PrintWheels[], |
| Lp_A_Filters[], |
| Lp_A_Systems[], |
| Lp_Default[], |
| Lp_A_Faults[]; |
| |
| extern int Lp_NTBase; |
| |
| /* |
| * File access: |
| */ |
| |
| extern int open_locked(char *, char *, mode_t); |
| extern char *fdgets(char *, int, int); |
| extern int fdprintf(int, char *, ...); |
| extern int fdputs(char *, int); |
| extern int fdputc(char, int); |
| |
| extern int is_printer_uri(char *); |
| |
| FILE *open_lpfile ( char * , char * , mode_t ); |
| int close_lpfile ( FILE * ); |
| int chown_lppath ( char * path ); |
| int mkdir_lpdir ( char * path , int mode ); |
| int rmfile ( char * path ); |
| int dumpstring ( char * path , char * str ); |
| |
| char * loadstring ( char * path ); |
| char * loadline ( char * path ); |
| char * sop_up_rest (int, char * endsop ); |
| |
| /* |
| * List manipulation routines: |
| */ |
| |
| #define emptylist(LP) (!(LP) || !(LP)[0]) |
| |
| int addlist ( char *** , char * ); |
| int addstring ( char ** , char * ); |
| int appendlist ( char *** , char * ); |
| int dellist ( char *** , char * ); |
| int joinlist ( char *** , char ** ); |
| int lenlist ( char ** ); |
| int printlist ( FILE * , char ** ); |
| int fdprintlist(int , char ** ); |
| int searchlist ( char *, char ** ); |
| int searchlist_with_terminfo ( char * , char ** ); |
| |
| char ** duplist ( char ** ); |
| char ** getlist ( char * , char * , char * ); |
| char ** dashos ( char * ); |
| char ** wherelist ( char * , char ** ); |
| |
| char * sprintlist ( char ** ); |
| char * search_cslist ( char * , char ** ); |
| |
| void freelist ( char ** ); |
| void printlist_setup ( char * , char * , char * , char * ); |
| void printlist_unsetup ( void ); |
| |
| /* |
| * Scaled decimal number routines: |
| */ |
| |
| #define getsdn(S) _getsdn(S, (char **)0, 0) |
| #define getcpi(S) _getsdn(S, (char **)0, 1) |
| |
| #define N_COMPRESSED 9999 |
| |
| void printsdn ( FILE * , SCALED ); |
| void fdprintsdn ( int , SCALED ); |
| void printsdn_setup ( char * , char * , char * ); |
| void printsdn_unsetup ( void ); |
| |
| SCALED _getsdn ( char * , char ** , int ); |
| |
| /* |
| * File name routines: |
| */ |
| |
| char * makepath ( char * , ... ); |
| char * getspooldir ( void ); |
| char * getrequestfile ( char * ); |
| char * getprinterfile ( char * , char * ); |
| char * getsystemfile ( char * , char * ); |
| char * getclassfile ( char * ); |
| char * getfilterfile ( char * ); |
| char * getformfile ( char * , char * ); |
| |
| /* |
| * Additional string manipulation routines: |
| */ |
| |
| int cs_strcmp ( char * , char * ); |
| int cs_strncmp ( char * , char * , int ); |
| |
| /* |
| * Syntax checking routines: |
| */ |
| |
| int syn_name ( char * ); |
| int syn_text ( char * ); |
| int syn_comment ( char * ); |
| int syn_machine_name ( char * ); |
| int syn_option ( char * ); |
| |
| /* |
| * Alert management routines: |
| */ |
| |
| int putalert ( char * , char * , FALERT * ); |
| int delalert ( char * , char * ); |
| |
| FALERT * getalert ( char * , char * ); |
| |
| void printalert ( FILE * , FALERT * , int ); |
| |
| /* |
| * Terminfo Database Inquiry Tool |
| */ |
| |
| int tidbit ( char * , char * , ... ); |
| void untidbit ( char * ); |
| |
| /* |
| * Auto-restarting and other system calls: |
| * The two versions are here to reduce the chance of colliding |
| * with similar names in standard libraries (e.g. dial(3C) uses |
| * Read/Write). |
| */ |
| |
| #define Access _Access |
| #define Chdir _Chdir |
| #define Chmod _Chmod |
| #define Chown _Chown |
| #define Close _Close |
| #define Creat _Creat |
| #define Fcntl _Fcntl |
| #define Fstat _Fstat |
| #define Link _Link |
| #define Lstat _Lstat |
| #define Mknod _Mknod |
| #define Open _Open |
| #define Read _Read |
| #define Readlink _Readlink |
| #define Rename _Rename |
| #define Stat _Stat |
| #define Symlink _Symlink |
| #define Unlink _Unlink |
| #define Wait _Wait |
| #define Write _Write |
| |
| #define Malloc(size) _Malloc(size, __FILE__, __LINE__) |
| #define Realloc(ptr,size) _Realloc(ptr, size, __FILE__, __LINE__) |
| #define Calloc(nelem,elsize) _Calloc(nelem, elsize, __FILE__, __LINE__) |
| #define Strdup(s) _Strdup(s, __FILE__, __LINE__) |
| #define Free(ptr) _Free(ptr, __FILE__, __LINE__) |
| |
| int _Access ( char * , int ); |
| int _Chdir ( char * ); |
| int _Chmod ( char * , int ); |
| int _Chown ( char * , int , int ); |
| int _Close ( int ); |
| int _Creat ( char * , int ); |
| int _Fcntl ( int , int , ... ); |
| int _Fstat ( int , struct stat * ); |
| int _Link ( char * , char * ); |
| int _Lstat ( char * , struct stat * ); |
| int _Mknod ( char * , int , int ); |
| int _Mkpipe ( char * , int , int ); |
| int _Open ( char * , int , ... /* mode_t */ ); |
| int _Read ( int , char * , unsigned int ); |
| int _Readlink ( char * , char * , unsigned int ); |
| int _Rename ( char * , char * ); |
| int _Symlink ( char * , char * ); |
| int _Stat ( char * , struct stat * ); |
| int _Unlink ( char * ); |
| int _Wait ( int * ); |
| int _Write ( int , char * , unsigned int ); |
| |
| void * _Malloc ( size_t , const char * , int ); |
| void * _Realloc ( void * , size_t , const char * , int ); |
| void * _Calloc ( size_t , size_t , const char * , int ); |
| char * _Strdup ( const char * , const char * , int ); |
| void _Free ( void * , const char * , int ); |
| |
| /* |
| * Misc. routines: |
| */ |
| |
| int isterminfo ( char * ); |
| int isprinter ( char * ); |
| int isrequest ( char * ); |
| int isnumber ( char * ); |
| |
| char * getname ( void ); |
| char * makestr ( char * , ... ); |
| char * strip ( char * ); |
| |
| void sendmail ( char * , char * ); |
| |
| void (*lp_alloc_fail_handler)( void ); |
| |
| /* |
| * Originally part of liblpfs.a and fs.h, now no longer needed |
| * since the code doesn't have to work on pre-SVR4.0. |
| */ |
| #define Opendir opendir |
| #define Telldir telldir |
| #define Seekdir seekdir |
| #define Rewinddir(dirp) Seekdir(dirp, 0L) |
| #define Closedir closedir |
| #define Readdir readdir |
| #define Mkdir mkdir |
| #define Rmdir rmdir |
| |
| #define next_dir(base, ptr) next_x(base, ptr, S_IFDIR) |
| #define next_file(base, ptr) next_x(base, ptr, S_IFREG) |
| |
| extern int chownmod(char *path, uid_t owner, gid_t group, mode_t mode); |
| |
| |
| char * next_x ( char * , long * , unsigned int ); |
| |
| /* |
| * Stuff needed for Trusted Extensions |
| */ |
| |
| extern char *get_labeled_zonename(char *); |
| extern int get_peer_label(int fd, char **slabel); |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _LP_LP_H */ |