1*5e7646d2SAndroid Build Coastguard Worker /* 2*5e7646d2SAndroid Build Coastguard Worker * Main header file for the CUPS scheduler. 3*5e7646d2SAndroid Build Coastguard Worker * 4*5e7646d2SAndroid Build Coastguard Worker * Copyright © 2007-2018 by Apple Inc. 5*5e7646d2SAndroid Build Coastguard Worker * Copyright © 1997-2007 by Easy Software Products, all rights reserved. 6*5e7646d2SAndroid Build Coastguard Worker * 7*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more 8*5e7646d2SAndroid Build Coastguard Worker * information. 9*5e7646d2SAndroid Build Coastguard Worker */ 10*5e7646d2SAndroid Build Coastguard Worker 11*5e7646d2SAndroid Build Coastguard Worker 12*5e7646d2SAndroid Build Coastguard Worker /* 13*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers. 14*5e7646d2SAndroid Build Coastguard Worker */ 15*5e7646d2SAndroid Build Coastguard Worker 16*5e7646d2SAndroid Build Coastguard Worker #include <cups/cups-private.h> 17*5e7646d2SAndroid Build Coastguard Worker #include <cups/file-private.h> 18*5e7646d2SAndroid Build Coastguard Worker #include <cups/ppd-private.h> 19*5e7646d2SAndroid Build Coastguard Worker 20*5e7646d2SAndroid Build Coastguard Worker #include <limits.h> 21*5e7646d2SAndroid Build Coastguard Worker #include <time.h> 22*5e7646d2SAndroid Build Coastguard Worker #include <signal.h> 23*5e7646d2SAndroid Build Coastguard Worker #include <fcntl.h> 24*5e7646d2SAndroid Build Coastguard Worker #include <math.h> 25*5e7646d2SAndroid Build Coastguard Worker #include <sys/types.h> 26*5e7646d2SAndroid Build Coastguard Worker #include <sys/time.h> 27*5e7646d2SAndroid Build Coastguard Worker #include <sys/stat.h> 28*5e7646d2SAndroid Build Coastguard Worker #include <sys/wait.h> 29*5e7646d2SAndroid Build Coastguard Worker 30*5e7646d2SAndroid Build Coastguard Worker #ifdef _WIN32 31*5e7646d2SAndroid Build Coastguard Worker # include <direct.h> 32*5e7646d2SAndroid Build Coastguard Worker #else 33*5e7646d2SAndroid Build Coastguard Worker # include <unistd.h> 34*5e7646d2SAndroid Build Coastguard Worker #endif /* _WIN32 */ 35*5e7646d2SAndroid Build Coastguard Worker 36*5e7646d2SAndroid Build Coastguard Worker #include "mime.h" 37*5e7646d2SAndroid Build Coastguard Worker 38*5e7646d2SAndroid Build Coastguard Worker #if defined(HAVE_CDSASSL) 39*5e7646d2SAndroid Build Coastguard Worker # include <CoreFoundation/CoreFoundation.h> 40*5e7646d2SAndroid Build Coastguard Worker #endif /* HAVE_CDSASSL */ 41*5e7646d2SAndroid Build Coastguard Worker 42*5e7646d2SAndroid Build Coastguard Worker 43*5e7646d2SAndroid Build Coastguard Worker /* 44*5e7646d2SAndroid Build Coastguard Worker * Some OS's don't have hstrerror(), most notably Solaris... 45*5e7646d2SAndroid Build Coastguard Worker */ 46*5e7646d2SAndroid Build Coastguard Worker 47*5e7646d2SAndroid Build Coastguard Worker #ifndef HAVE_HSTRERROR 48*5e7646d2SAndroid Build Coastguard Worker # ifdef hstrerror 49*5e7646d2SAndroid Build Coastguard Worker # undef hstrerror 50*5e7646d2SAndroid Build Coastguard Worker # endif /* hstrerror */ 51*5e7646d2SAndroid Build Coastguard Worker # define hstrerror cups_hstrerror 52*5e7646d2SAndroid Build Coastguard Worker 53*5e7646d2SAndroid Build Coastguard Worker extern const char *cups_hstrerror(int); 54*5e7646d2SAndroid Build Coastguard Worker #endif /* !HAVE_HSTRERROR */ 55*5e7646d2SAndroid Build Coastguard Worker 56*5e7646d2SAndroid Build Coastguard Worker 57*5e7646d2SAndroid Build Coastguard Worker /* 58*5e7646d2SAndroid Build Coastguard Worker * Common constants. 59*5e7646d2SAndroid Build Coastguard Worker */ 60*5e7646d2SAndroid Build Coastguard Worker 61*5e7646d2SAndroid Build Coastguard Worker #ifndef FALSE 62*5e7646d2SAndroid Build Coastguard Worker # define FALSE 0 63*5e7646d2SAndroid Build Coastguard Worker # define TRUE (!FALSE) 64*5e7646d2SAndroid Build Coastguard Worker #endif /* !FALSE */ 65*5e7646d2SAndroid Build Coastguard Worker 66*5e7646d2SAndroid Build Coastguard Worker 67*5e7646d2SAndroid Build Coastguard Worker /* 68*5e7646d2SAndroid Build Coastguard Worker * Implementation limits... 69*5e7646d2SAndroid Build Coastguard Worker */ 70*5e7646d2SAndroid Build Coastguard Worker 71*5e7646d2SAndroid Build Coastguard Worker #define MAX_ENV 100 /* Maximum number of environment strings */ 72*5e7646d2SAndroid Build Coastguard Worker #define MAX_USERPASS 33 /* Maximum size of username/password */ 73*5e7646d2SAndroid Build Coastguard Worker #define MAX_FILTERS 20 /* Maximum number of filters */ 74*5e7646d2SAndroid Build Coastguard Worker #define MAX_SYSTEM_GROUPS 32 /* Maximum number of system groups */ 75*5e7646d2SAndroid Build Coastguard Worker 76*5e7646d2SAndroid Build Coastguard Worker 77*5e7646d2SAndroid Build Coastguard Worker /* 78*5e7646d2SAndroid Build Coastguard Worker * Defaults... 79*5e7646d2SAndroid Build Coastguard Worker */ 80*5e7646d2SAndroid Build Coastguard Worker 81*5e7646d2SAndroid Build Coastguard Worker #define DEFAULT_HISTORY INT_MAX /* Preserve job history? */ 82*5e7646d2SAndroid Build Coastguard Worker #define DEFAULT_FILES 86400 /* Preserve job files? */ 83*5e7646d2SAndroid Build Coastguard Worker #define DEFAULT_TIMEOUT 300 /* Timeout during requests/updates */ 84*5e7646d2SAndroid Build Coastguard Worker #define DEFAULT_KEEPALIVE 30 /* Timeout between requests */ 85*5e7646d2SAndroid Build Coastguard Worker 86*5e7646d2SAndroid Build Coastguard Worker 87*5e7646d2SAndroid Build Coastguard Worker /* 88*5e7646d2SAndroid Build Coastguard Worker * Global variable macros... 89*5e7646d2SAndroid Build Coastguard Worker */ 90*5e7646d2SAndroid Build Coastguard Worker 91*5e7646d2SAndroid Build Coastguard Worker #ifdef _MAIN_C_ 92*5e7646d2SAndroid Build Coastguard Worker # define VAR 93*5e7646d2SAndroid Build Coastguard Worker # define VALUE(x) =x 94*5e7646d2SAndroid Build Coastguard Worker # define VALUE2(x,y) ={x,y} 95*5e7646d2SAndroid Build Coastguard Worker #else 96*5e7646d2SAndroid Build Coastguard Worker # define VAR extern 97*5e7646d2SAndroid Build Coastguard Worker # define VALUE(x) 98*5e7646d2SAndroid Build Coastguard Worker # define VALUE2(x,y) 99*5e7646d2SAndroid Build Coastguard Worker #endif /* _MAIN_C */ 100*5e7646d2SAndroid Build Coastguard Worker 101*5e7646d2SAndroid Build Coastguard Worker 102*5e7646d2SAndroid Build Coastguard Worker /* 103*5e7646d2SAndroid Build Coastguard Worker * Other stuff for the scheduler... 104*5e7646d2SAndroid Build Coastguard Worker */ 105*5e7646d2SAndroid Build Coastguard Worker 106*5e7646d2SAndroid Build Coastguard Worker #include "sysman.h" 107*5e7646d2SAndroid Build Coastguard Worker #include "statbuf.h" 108*5e7646d2SAndroid Build Coastguard Worker #include "cert.h" 109*5e7646d2SAndroid Build Coastguard Worker #include "auth.h" 110*5e7646d2SAndroid Build Coastguard Worker #include "client.h" 111*5e7646d2SAndroid Build Coastguard Worker #include "policy.h" 112*5e7646d2SAndroid Build Coastguard Worker #include "printers.h" 113*5e7646d2SAndroid Build Coastguard Worker #include "classes.h" 114*5e7646d2SAndroid Build Coastguard Worker #include "job.h" 115*5e7646d2SAndroid Build Coastguard Worker #include "colorman.h" 116*5e7646d2SAndroid Build Coastguard Worker #include "conf.h" 117*5e7646d2SAndroid Build Coastguard Worker #include "banners.h" 118*5e7646d2SAndroid Build Coastguard Worker #include "dirsvc.h" 119*5e7646d2SAndroid Build Coastguard Worker #include "network.h" 120*5e7646d2SAndroid Build Coastguard Worker #include "subscriptions.h" 121*5e7646d2SAndroid Build Coastguard Worker 122*5e7646d2SAndroid Build Coastguard Worker 123*5e7646d2SAndroid Build Coastguard Worker /* 124*5e7646d2SAndroid Build Coastguard Worker * Reload types... 125*5e7646d2SAndroid Build Coastguard Worker */ 126*5e7646d2SAndroid Build Coastguard Worker 127*5e7646d2SAndroid Build Coastguard Worker #define RELOAD_NONE 0 /* No reload needed */ 128*5e7646d2SAndroid Build Coastguard Worker #define RELOAD_ALL 1 /* Reload everything */ 129*5e7646d2SAndroid Build Coastguard Worker #define RELOAD_CUPSD 2 /* Reload only cupsd.conf */ 130*5e7646d2SAndroid Build Coastguard Worker 131*5e7646d2SAndroid Build Coastguard Worker 132*5e7646d2SAndroid Build Coastguard Worker /* 133*5e7646d2SAndroid Build Coastguard Worker * Select callback function type... 134*5e7646d2SAndroid Build Coastguard Worker */ 135*5e7646d2SAndroid Build Coastguard Worker 136*5e7646d2SAndroid Build Coastguard Worker typedef void (*cupsd_selfunc_t)(void *data); 137*5e7646d2SAndroid Build Coastguard Worker 138*5e7646d2SAndroid Build Coastguard Worker 139*5e7646d2SAndroid Build Coastguard Worker /* 140*5e7646d2SAndroid Build Coastguard Worker * Globals... 141*5e7646d2SAndroid Build Coastguard Worker */ 142*5e7646d2SAndroid Build Coastguard Worker 143*5e7646d2SAndroid Build Coastguard Worker VAR int TestConfigFile VALUE(0); 144*5e7646d2SAndroid Build Coastguard Worker /* Test the cupsd.conf file? */ 145*5e7646d2SAndroid Build Coastguard Worker VAR int MaxFDs VALUE(0); 146*5e7646d2SAndroid Build Coastguard Worker /* Maximum number of files */ 147*5e7646d2SAndroid Build Coastguard Worker 148*5e7646d2SAndroid Build Coastguard Worker VAR time_t ReloadTime VALUE(0); 149*5e7646d2SAndroid Build Coastguard Worker /* Time of reload request... */ 150*5e7646d2SAndroid Build Coastguard Worker VAR int NeedReload VALUE(RELOAD_ALL), 151*5e7646d2SAndroid Build Coastguard Worker /* Need to load configuration? */ 152*5e7646d2SAndroid Build Coastguard Worker DoingShutdown VALUE(0); 153*5e7646d2SAndroid Build Coastguard Worker /* Shutting down the scheduler? */ 154*5e7646d2SAndroid Build Coastguard Worker VAR void *DefaultProfile VALUE(0); 155*5e7646d2SAndroid Build Coastguard Worker /* Default security profile */ 156*5e7646d2SAndroid Build Coastguard Worker 157*5e7646d2SAndroid Build Coastguard Worker #ifdef HAVE_ONDEMAND 158*5e7646d2SAndroid Build Coastguard Worker VAR int OnDemand VALUE(0); 159*5e7646d2SAndroid Build Coastguard Worker /* Launched on demand */ 160*5e7646d2SAndroid Build Coastguard Worker #endif /* HAVE_ONDEMAND */ 161*5e7646d2SAndroid Build Coastguard Worker 162*5e7646d2SAndroid Build Coastguard Worker 163*5e7646d2SAndroid Build Coastguard Worker /* 164*5e7646d2SAndroid Build Coastguard Worker * Prototypes... 165*5e7646d2SAndroid Build Coastguard Worker */ 166*5e7646d2SAndroid Build Coastguard Worker 167*5e7646d2SAndroid Build Coastguard Worker /* env.c */ 168*5e7646d2SAndroid Build Coastguard Worker extern void cupsdInitEnv(void); 169*5e7646d2SAndroid Build Coastguard Worker extern int cupsdLoadEnv(char *envp[], int envmax); 170*5e7646d2SAndroid Build Coastguard Worker extern void cupsdSetEnv(const char *name, const char *value); 171*5e7646d2SAndroid Build Coastguard Worker extern void cupsdSetEnvf(const char *name, const char *value, ...) _CUPS_FORMAT(2, 3); 172*5e7646d2SAndroid Build Coastguard Worker extern void cupsdUpdateEnv(void); 173*5e7646d2SAndroid Build Coastguard Worker 174*5e7646d2SAndroid Build Coastguard Worker /* file.c */ 175*5e7646d2SAndroid Build Coastguard Worker extern void cupsdCleanFiles(const char *path, const char *pattern); 176*5e7646d2SAndroid Build Coastguard Worker extern int cupsdCloseCreatedConfFile(cups_file_t *fp, 177*5e7646d2SAndroid Build Coastguard Worker const char *filename); 178*5e7646d2SAndroid Build Coastguard Worker extern void cupsdClosePipe(int *fds); 179*5e7646d2SAndroid Build Coastguard Worker extern cups_file_t *cupsdCreateConfFile(const char *filename, mode_t mode); 180*5e7646d2SAndroid Build Coastguard Worker extern cups_file_t *cupsdOpenConfFile(const char *filename); 181*5e7646d2SAndroid Build Coastguard Worker extern int cupsdOpenPipe(int *fds); 182*5e7646d2SAndroid Build Coastguard Worker extern int cupsdRemoveFile(const char *filename); 183*5e7646d2SAndroid Build Coastguard Worker extern int cupsdUnlinkOrRemoveFile(const char *filename); 184*5e7646d2SAndroid Build Coastguard Worker 185*5e7646d2SAndroid Build Coastguard Worker /* main.c */ 186*5e7646d2SAndroid Build Coastguard Worker extern int cupsdAddString(cups_array_t **a, const char *s); 187*5e7646d2SAndroid Build Coastguard Worker extern void cupsdCheckProcess(void); 188*5e7646d2SAndroid Build Coastguard Worker extern void cupsdClearString(char **s); 189*5e7646d2SAndroid Build Coastguard Worker extern void cupsdFreeStrings(cups_array_t **a); 190*5e7646d2SAndroid Build Coastguard Worker extern void cupsdHoldSignals(void); 191*5e7646d2SAndroid Build Coastguard Worker extern char *cupsdMakeUUID(const char *name, int number, 192*5e7646d2SAndroid Build Coastguard Worker char *buffer, size_t bufsize); 193*5e7646d2SAndroid Build Coastguard Worker extern void cupsdReleaseSignals(void); 194*5e7646d2SAndroid Build Coastguard Worker extern void cupsdSetString(char **s, const char *v); 195*5e7646d2SAndroid Build Coastguard Worker extern void cupsdSetStringf(char **s, const char *f, ...) 196*5e7646d2SAndroid Build Coastguard Worker __attribute__ ((__format__ (__printf__, 2, 3))); 197*5e7646d2SAndroid Build Coastguard Worker 198*5e7646d2SAndroid Build Coastguard Worker /* process.c */ 199*5e7646d2SAndroid Build Coastguard Worker extern void *cupsdCreateProfile(int job_id, int allow_networking); 200*5e7646d2SAndroid Build Coastguard Worker extern void cupsdDestroyProfile(void *profile); 201*5e7646d2SAndroid Build Coastguard Worker extern int cupsdEndProcess(int pid, int force); 202*5e7646d2SAndroid Build Coastguard Worker extern const char *cupsdFinishProcess(int pid, char *name, size_t namelen, int *job_id); 203*5e7646d2SAndroid Build Coastguard Worker extern int cupsdStartProcess(const char *command, char *argv[], 204*5e7646d2SAndroid Build Coastguard Worker char *envp[], int infd, int outfd, 205*5e7646d2SAndroid Build Coastguard Worker int errfd, int backfd, int sidefd, 206*5e7646d2SAndroid Build Coastguard Worker int root, void *profile, 207*5e7646d2SAndroid Build Coastguard Worker cupsd_job_t *job, int *pid); 208*5e7646d2SAndroid Build Coastguard Worker 209*5e7646d2SAndroid Build Coastguard Worker /* select.c */ 210*5e7646d2SAndroid Build Coastguard Worker extern int cupsdAddSelect(int fd, cupsd_selfunc_t read_cb, 211*5e7646d2SAndroid Build Coastguard Worker cupsd_selfunc_t write_cb, void *data); 212*5e7646d2SAndroid Build Coastguard Worker extern int cupsdDoSelect(long timeout); 213*5e7646d2SAndroid Build Coastguard Worker #ifdef CUPSD_IS_SELECTING 214*5e7646d2SAndroid Build Coastguard Worker extern int cupsdIsSelecting(int fd); 215*5e7646d2SAndroid Build Coastguard Worker #endif /* CUPSD_IS_SELECTING */ 216*5e7646d2SAndroid Build Coastguard Worker extern void cupsdRemoveSelect(int fd); 217*5e7646d2SAndroid Build Coastguard Worker extern void cupsdStartSelect(void); 218*5e7646d2SAndroid Build Coastguard Worker extern void cupsdStopSelect(void); 219*5e7646d2SAndroid Build Coastguard Worker 220*5e7646d2SAndroid Build Coastguard Worker /* server.c */ 221*5e7646d2SAndroid Build Coastguard Worker extern void cupsdStartServer(void); 222*5e7646d2SAndroid Build Coastguard Worker extern void cupsdStopServer(void); 223