• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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