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