1 /* 2 * Configuration file definitions for the CUPS scheduler. 3 * 4 * Copyright © 2020-2024 by OpenPrinting. 5 * Copyright © 2007-2018 by Apple Inc. 6 * Copyright © 1997-2007 by Easy Software Products, all rights reserved. 7 * 8 * Licensed under Apache License v2.0. See the file "LICENSE" for more 9 * information. 10 */ 11 12 13 /* 14 * Log levels... 15 */ 16 17 typedef enum 18 { 19 CUPSD_LOG_PPD = -5, /* Used internally for PPD keywords */ 20 CUPSD_LOG_ATTR, /* Used internally for attributes */ 21 CUPSD_LOG_STATE, /* Used internally for printer-state-reasons */ 22 CUPSD_LOG_JOBSTATE, /* Used internally for job-state-reasons */ 23 CUPSD_LOG_PAGE, /* Used internally for page logging */ 24 CUPSD_LOG_NONE, 25 CUPSD_LOG_EMERG, /* Emergency issues */ 26 CUPSD_LOG_ALERT, /* Something bad happened that needs attention */ 27 CUPSD_LOG_CRIT, /* Critical error but server continues */ 28 CUPSD_LOG_ERROR, /* Error condition */ 29 CUPSD_LOG_WARN, /* Warning */ 30 CUPSD_LOG_NOTICE, /* Normal condition that needs logging */ 31 CUPSD_LOG_INFO, /* General information */ 32 CUPSD_LOG_DEBUG, /* General debugging */ 33 CUPSD_LOG_DEBUG2 /* Detailed debugging */ 34 } cupsd_loglevel_t; 35 36 typedef enum 37 { 38 CUPSD_ACCESSLOG_NONE, /* Log no requests */ 39 CUPSD_ACCESSLOG_CONFIG, /* Log config requests */ 40 CUPSD_ACCESSLOG_ACTIONS, /* Log config, print, and job management requests */ 41 CUPSD_ACCESSLOG_ALL /* Log everything */ 42 } cupsd_accesslog_t; 43 44 typedef enum 45 { 46 CUPSD_TIME_STANDARD, /* "Standard" Apache/CLF format */ 47 CUPSD_TIME_USECS /* Standard format with microseconds */ 48 } cupsd_time_t; 49 50 typedef enum 51 { 52 CUPSD_SANDBOXING_OFF, /* No sandboxing */ 53 CUPSD_SANDBOXING_RELAXED, /* Relaxed sandboxing */ 54 CUPSD_SANDBOXING_STRICT /* Strict sandboxing */ 55 } cupsd_sandboxing_t; 56 57 58 /* 59 * FatalErrors flags... 60 */ 61 62 #define CUPSD_FATAL_NONE 0 /* No errors are fatal */ 63 #define CUPSD_FATAL_BROWSE 1 /* Browse bind errors are fatal */ 64 #define CUPSD_FATAL_CONFIG 2 /* Config file syntax errors are fatal */ 65 #define CUPSD_FATAL_LISTEN 4 /* Listen/Port bind errors are fatal */ 66 #define CUPSD_FATAL_LOG 8 /* Log file errors are fatal */ 67 #define CUPSD_FATAL_PERMISSIONS 16 /* File permission errors are fatal */ 68 #define CUPSD_FATAL_ALL ~0 /* All errors are fatal */ 69 70 71 /* 72 * Printcap formats... 73 */ 74 75 #define PRINTCAP_BSD 0 /* Berkeley LPD format */ 76 #define PRINTCAP_SOLARIS 1 /* Solaris lpsched format */ 77 #define PRINTCAP_PLIST 2 /* macOS plist format */ 78 79 80 /* 81 * ServerAlias data... 82 */ 83 84 typedef struct 85 { 86 size_t namelen; /* Length of alias name */ 87 char name[1]; /* Alias name */ 88 } cupsd_alias_t; 89 90 91 /* 92 * Globals... 93 */ 94 95 VAR char *ConfigurationFile VALUE(NULL), 96 /* cupsd.conf file to use */ 97 *CupsFilesFile VALUE(NULL), 98 /* cups-files.conf file to use */ 99 *ServerName VALUE(NULL), 100 /* FQDN for server */ 101 *ServerAdmin VALUE(NULL), 102 /* Administrator's email */ 103 *ServerRoot VALUE(NULL), 104 /* Root directory for scheduler */ 105 *ServerBin VALUE(NULL), 106 /* Root directory for binaries */ 107 *StateDir VALUE(NULL), 108 /* Root directory for state data */ 109 *RequestRoot VALUE(NULL), 110 /* Directory for request files */ 111 *DocumentRoot VALUE(NULL); 112 /* Root directory for documents */ 113 VAR cups_array_t *ServerAlias VALUE(NULL); 114 /* Alias names for server */ 115 VAR int ServerNameIsIP VALUE(0); 116 /* Is the ServerName an IP address? */ 117 VAR int NumSystemGroups VALUE(0); 118 /* Number of system group names */ 119 VAR char *SystemGroups[MAX_SYSTEM_GROUPS] 120 VALUE({0}); 121 /* System group names */ 122 VAR gid_t SystemGroupIDs[MAX_SYSTEM_GROUPS] 123 VALUE({0}); 124 /* System group IDs */ 125 VAR char *AccessLog VALUE(NULL), 126 /* Access log filename */ 127 *ErrorLog VALUE(NULL), 128 /* Error log filename */ 129 *PageLog VALUE(NULL), 130 /* Page log filename */ 131 *CacheDir VALUE(NULL), 132 /* Cache file directory */ 133 *DataDir VALUE(NULL), 134 /* Data file directory */ 135 *DefaultLanguage VALUE(NULL), 136 /* Default language encoding */ 137 *DefaultLocale VALUE(NULL), 138 /* Default locale */ 139 *DefaultPaperSize VALUE(NULL), 140 /* Default paper size */ 141 *ErrorPolicy VALUE(NULL), 142 /* Default printer-error-policy */ 143 *TempDir VALUE(NULL), 144 /* Temporary directory */ 145 *Printcap VALUE(NULL), 146 /* Printcap file */ 147 *RemoteRoot VALUE(NULL), 148 /* Remote root user */ 149 *Classification VALUE(NULL); 150 /* Classification of system */ 151 VAR cups_array_t *ReadyPaperSizes VALUE(NULL); 152 /* List of paper sizes to list as ready */ 153 VAR uid_t User VALUE(1), 154 /* User ID for server */ 155 RunUser VALUE(0); 156 /* User to run as, used for files */ 157 VAR gid_t Group VALUE(0); 158 /* Group ID for server */ 159 VAR cupsd_accesslog_t AccessLogLevel VALUE(CUPSD_ACCESSLOG_ACTIONS); 160 /* Access log level */ 161 VAR int ClassifyOverride VALUE(0), 162 /* Allow overrides? */ 163 LogDebugHistory VALUE(200), 164 /* Amount of automatic debug history */ 165 FatalErrors VALUE(CUPSD_FATAL_CONFIG), 166 /* Which errors are fatal? */ 167 StrictConformance VALUE(FALSE), 168 /* Require strict IPP conformance? */ 169 SyncOnClose VALUE(FALSE); 170 /* Call fsync() when closing files? */ 171 VAR mode_t ConfigFilePerm VALUE(0640U), 172 /* Permissions for config files */ 173 LogFilePerm VALUE(0644U); 174 /* Permissions for log files */ 175 VAR gid_t LogFileGroup VALUE(0); 176 /* Group ID for log files */ 177 VAR cupsd_loglevel_t LogLevel VALUE(CUPSD_LOG_WARN); 178 /* Error log level */ 179 VAR int StripUserDomain VALUE(FALSE); 180 /* Strip domain in local username? */ 181 VAR cupsd_time_t LogTimeFormat VALUE(CUPSD_TIME_STANDARD); 182 /* Log file time format */ 183 VAR cups_file_t *LogStderr VALUE(NULL); 184 /* Stderr file, if any */ 185 VAR cupsd_sandboxing_t Sandboxing VALUE(CUPSD_SANDBOXING_STRICT); 186 /* Sandboxing level */ 187 VAR int UseSandboxing VALUE(1); 188 /* Use sandboxing for child procs? */ 189 VAR int MaxClients VALUE(100), 190 /* Maximum number of clients */ 191 MaxClientsPerHost VALUE(0), 192 /* Maximum number of clients per host */ 193 MaxCopies VALUE(CUPS_DEFAULT_MAX_COPIES), 194 /* Maximum number of copies per job */ 195 MaxLogSize VALUE(1024 * 1024), 196 /* Maximum size of log files */ 197 MaxRequestSize VALUE(0), 198 /* Maximum size of IPP requests */ 199 HostNameLookups VALUE(FALSE), 200 /* Do we do reverse lookups? */ 201 Timeout VALUE(DEFAULT_TIMEOUT), 202 /* Timeout during requests */ 203 KeepAlive VALUE(TRUE), 204 /* Support the Keep-Alive option? */ 205 FileDevice VALUE(FALSE), 206 /* Allow file: devices? */ 207 FilterLimit VALUE(0), 208 /* Max filter cost at any time */ 209 FilterLevel VALUE(0), 210 /* Current filter level */ 211 FilterNice VALUE(0), 212 /* Nice value for filters */ 213 ReloadTimeout VALUE(DEFAULT_KEEPALIVE), 214 /* Timeout before reload from SIGHUP */ 215 RootCertDuration VALUE(300), 216 /* Root certificate update interval */ 217 PrintcapFormat VALUE(PRINTCAP_BSD), 218 /* Format of printcap file? */ 219 DefaultShared VALUE(TRUE), 220 /* Share printers by default? */ 221 MultipleOperationTimeout VALUE(DEFAULT_TIMEOUT), 222 /* multiple-operation-time-out value */ 223 WebInterface VALUE(CUPS_DEFAULT_WEBIF); 224 /* Enable the web interface? */ 225 VAR cups_file_t *AccessFile VALUE(NULL), 226 /* Access log file */ 227 *ErrorFile VALUE(NULL), 228 /* Error log file */ 229 *PageFile VALUE(NULL); 230 /* Page log file */ 231 VAR char *PageLogFormat VALUE(NULL); 232 /* Page log format */ 233 VAR mime_t *MimeDatabase VALUE(NULL); 234 /* MIME type database */ 235 VAR int NumMimeTypes VALUE(0); 236 /* Number of MIME types */ 237 VAR const char **MimeTypes VALUE(NULL); 238 /* Array of MIME types */ 239 240 #ifdef HAVE_TLS 241 VAR int CreateSelfSignedCerts VALUE(TRUE); 242 /* Automatically create self-signed certs? */ 243 VAR char *ServerKeychain VALUE(NULL); 244 /* Keychain holding cert + key */ 245 #endif /* HAVE_TLS */ 246 247 #ifdef HAVE_ONDEMAND 248 VAR int IdleExitTimeout VALUE(60); 249 /* Time after which an idle cupsd will exit */ 250 #endif /* HAVE_ONDEMAND */ 251 252 #ifdef HAVE_AUTHORIZATION_H 253 VAR char *SystemGroupAuthKey VALUE(NULL); 254 /* System group auth key */ 255 #endif /* HAVE_AUTHORIZATION_H */ 256 257 #ifdef HAVE_GSSAPI 258 VAR char *GSSServiceName VALUE(NULL); 259 /* GSS service name */ 260 VAR int HaveServerCreds VALUE(0); 261 /* Do we have server credentials? */ 262 VAR gss_cred_id_t ServerCreds; /* Server's GSS credentials */ 263 #endif /* HAVE_GSSAPI */ 264 265 266 /* 267 * Prototypes... 268 */ 269 270 extern void cupsdAddAlias(cups_array_t *aliases, const char *name); 271 extern int cupsdCheckLogFile(cups_file_t **lf, const char *logname); 272 extern int cupsdCheckPermissions(const char *filename, 273 const char *suffix, mode_t mode, 274 uid_t user, gid_t group, int is_dir, 275 int create_dir); 276 extern int cupsdCheckProgram(const char *filename, cupsd_printer_t *p); 277 extern int cupsdDefaultAuthType(void); 278 extern void cupsdFreeAliases(cups_array_t *aliases); 279 extern char *cupsdGetDateTime(struct timeval *t, cupsd_time_t format); 280 extern int cupsdLogClient(cupsd_client_t *con, int level, const char *message, ...) _CUPS_FORMAT(3, 4); 281 extern void cupsdLogFCMessage(void *context, _cups_fc_result_t result, const char *message); 282 #ifdef HAVE_GSSAPI 283 extern int cupsdLogGSSMessage(int level, OM_uint32 major_status, OM_uint32 minor_status, const char *message, ...) _CUPS_FORMAT(4, 5); 284 #endif /* HAVE_GSSAPI */ 285 extern int cupsdLogJob(cupsd_job_t *job, int level, const char *message, 286 ...) _CUPS_FORMAT(3, 4); 287 extern int cupsdLogMessage(int level, const char *message, ...) _CUPS_FORMAT(2, 3); 288 extern int cupsdLogPage(cupsd_job_t *job, const char *page); 289 extern int cupsdLogRequest(cupsd_client_t *con, http_status_t code); 290 extern int cupsdReadConfiguration(void); 291 extern int cupsdWriteErrorLog(int level, const char *message); 292