/* * Configuration file definitions for the CUPS scheduler. * * Copyright © 2021-2022 by OpenPrinting. * Copyright © 2007-2018 by Apple Inc. * Copyright © 1997-2007 by Easy Software Products, all rights reserved. * * Licensed under Apache License v2.0. See the file "LICENSE" for more * information. */ /* * Log levels... */ typedef enum { CUPSD_LOG_PPD = -5, /* Used internally for PPD keywords */ CUPSD_LOG_ATTR, /* Used internally for attributes */ CUPSD_LOG_STATE, /* Used internally for printer-state-reasons */ CUPSD_LOG_JOBSTATE, /* Used internally for job-state-reasons */ CUPSD_LOG_PAGE, /* Used internally for page logging */ CUPSD_LOG_NONE, CUPSD_LOG_EMERG, /* Emergency issues */ CUPSD_LOG_ALERT, /* Something bad happened that needs attention */ CUPSD_LOG_CRIT, /* Critical error but server continues */ CUPSD_LOG_ERROR, /* Error condition */ CUPSD_LOG_WARN, /* Warning */ CUPSD_LOG_NOTICE, /* Normal condition that needs logging */ CUPSD_LOG_INFO, /* General information */ CUPSD_LOG_DEBUG, /* General debugging */ CUPSD_LOG_DEBUG2 /* Detailed debugging */ } cupsd_loglevel_t; typedef enum { CUPSD_ACCESSLOG_NONE, /* Log no requests */ CUPSD_ACCESSLOG_CONFIG, /* Log config requests */ CUPSD_ACCESSLOG_ACTIONS, /* Log config, print, and job management requests */ CUPSD_ACCESSLOG_ALL /* Log everything */ } cupsd_accesslog_t; typedef enum { CUPSD_TIME_STANDARD, /* "Standard" Apache/CLF format */ CUPSD_TIME_USECS /* Standard format with microseconds */ } cupsd_time_t; typedef enum { CUPSD_SANDBOXING_OFF, /* No sandboxing */ CUPSD_SANDBOXING_RELAXED, /* Relaxed sandboxing */ CUPSD_SANDBOXING_STRICT /* Strict sandboxing */ } cupsd_sandboxing_t; /* * FatalErrors flags... */ #define CUPSD_FATAL_NONE 0 /* No errors are fatal */ #define CUPSD_FATAL_BROWSE 1 /* Browse bind errors are fatal */ #define CUPSD_FATAL_CONFIG 2 /* Config file syntax errors are fatal */ #define CUPSD_FATAL_LISTEN 4 /* Listen/Port bind errors are fatal */ #define CUPSD_FATAL_LOG 8 /* Log file errors are fatal */ #define CUPSD_FATAL_PERMISSIONS 16 /* File permission errors are fatal */ #define CUPSD_FATAL_ALL ~0 /* All errors are fatal */ /* * Printcap formats... */ #define PRINTCAP_BSD 0 /* Berkeley LPD format */ #define PRINTCAP_SOLARIS 1 /* Solaris lpsched format */ #define PRINTCAP_PLIST 2 /* macOS plist format */ /* * ServerAlias data... */ typedef struct { size_t namelen; /* Length of alias name */ char name[1]; /* Alias name */ } cupsd_alias_t; /* * Globals... */ VAR char *ConfigurationFile VALUE(NULL), /* cupsd.conf file to use */ *CupsFilesFile VALUE(NULL), /* cups-files.conf file to use */ *ServerName VALUE(NULL), /* FQDN for server */ *ServerAdmin VALUE(NULL), /* Administrator's email */ *ServerRoot VALUE(NULL), /* Root directory for scheduler */ *ServerBin VALUE(NULL), /* Root directory for binaries */ *StateDir VALUE(NULL), /* Root directory for state data */ *RequestRoot VALUE(NULL), /* Directory for request files */ *DocumentRoot VALUE(NULL); /* Root directory for documents */ VAR cups_array_t *ServerAlias VALUE(NULL); /* Alias names for server */ VAR int ServerNameIsIP VALUE(0); /* Is the ServerName an IP address? */ VAR int NumSystemGroups VALUE(0); /* Number of system group names */ VAR char *SystemGroups[MAX_SYSTEM_GROUPS] VALUE({0}); /* System group names */ VAR gid_t SystemGroupIDs[MAX_SYSTEM_GROUPS] VALUE({0}); /* System group IDs */ VAR char *AccessLog VALUE(NULL), /* Access log filename */ *ErrorLog VALUE(NULL), /* Error log filename */ *PageLog VALUE(NULL), /* Page log filename */ *CacheDir VALUE(NULL), /* Cache file directory */ *DataDir VALUE(NULL), /* Data file directory */ *DefaultLanguage VALUE(NULL), /* Default language encoding */ *DefaultLocale VALUE(NULL), /* Default locale */ *DefaultPaperSize VALUE(NULL), /* Default paper size */ *ErrorPolicy VALUE(NULL), /* Default printer-error-policy */ *TempDir VALUE(NULL), /* Temporary directory */ *Printcap VALUE(NULL), /* Printcap file */ *RemoteRoot VALUE(NULL), /* Remote root user */ *Classification VALUE(NULL); /* Classification of system */ VAR cups_array_t *ReadyPaperSizes VALUE(NULL); /* List of paper sizes to list as ready */ VAR uid_t User VALUE(1), /* User ID for server */ RunUser VALUE(0); /* User to run as, used for files */ VAR gid_t Group VALUE(0); /* Group ID for server */ VAR cupsd_accesslog_t AccessLogLevel VALUE(CUPSD_ACCESSLOG_ACTIONS); /* Access log level */ VAR int ClassifyOverride VALUE(0), /* Allow overrides? */ LogDebugHistory VALUE(200), /* Amount of automatic debug history */ FatalErrors VALUE(CUPSD_FATAL_CONFIG), /* Which errors are fatal? */ StrictConformance VALUE(FALSE), /* Require strict IPP conformance? */ SyncOnClose VALUE(FALSE); /* Call fsync() when closing files? */ VAR mode_t ConfigFilePerm VALUE(0640U), /* Permissions for config files */ LogFilePerm VALUE(0644U); /* Permissions for log files */ VAR gid_t LogFileGroup VALUE(0); /* Group ID for log files */ VAR cupsd_loglevel_t LogLevel VALUE(CUPSD_LOG_WARN); /* Error log level */ VAR cupsd_time_t LogTimeFormat VALUE(CUPSD_TIME_STANDARD); /* Log file time format */ VAR cups_file_t *LogStderr VALUE(NULL); /* Stderr file, if any */ VAR cupsd_sandboxing_t Sandboxing VALUE(CUPSD_SANDBOXING_STRICT); /* Sandboxing level */ VAR int UseSandboxing VALUE(1); /* Use sandboxing for child procs? */ VAR int MaxClients VALUE(100), /* Maximum number of clients */ MaxClientsPerHost VALUE(0), /* Maximum number of clients per host */ MaxCopies VALUE(CUPS_DEFAULT_MAX_COPIES), /* Maximum number of copies per job */ MaxLogSize VALUE(1024 * 1024), /* Maximum size of log files */ MaxRequestSize VALUE(0), /* Maximum size of IPP requests */ HostNameLookups VALUE(FALSE), /* Do we do reverse lookups? */ Timeout VALUE(DEFAULT_TIMEOUT), /* Timeout during requests */ KeepAlive VALUE(TRUE), /* Support the Keep-Alive option? */ FileDevice VALUE(FALSE), /* Allow file: devices? */ FilterLimit VALUE(0), /* Max filter cost at any time */ FilterLevel VALUE(0), /* Current filter level */ FilterNice VALUE(0), /* Nice value for filters */ ReloadTimeout VALUE(DEFAULT_KEEPALIVE), /* Timeout before reload from SIGHUP */ RootCertDuration VALUE(300), /* Root certificate update interval */ PrintcapFormat VALUE(PRINTCAP_BSD), /* Format of printcap file? */ DefaultShared VALUE(TRUE), /* Share printers by default? */ MultipleOperationTimeout VALUE(DEFAULT_TIMEOUT), /* multiple-operation-time-out value */ WebInterface VALUE(CUPS_DEFAULT_WEBIF); /* Enable the web interface? */ VAR cups_file_t *AccessFile VALUE(NULL), /* Access log file */ *ErrorFile VALUE(NULL), /* Error log file */ *PageFile VALUE(NULL); /* Page log file */ VAR char *PageLogFormat VALUE(NULL); /* Page log format */ VAR mime_t *MimeDatabase VALUE(NULL); /* MIME type database */ VAR int NumMimeTypes VALUE(0); /* Number of MIME types */ VAR const char **MimeTypes VALUE(NULL); /* Array of MIME types */ #ifdef HAVE_TLS VAR int CreateSelfSignedCerts VALUE(TRUE); /* Automatically create self-signed certs? */ VAR char *ServerKeychain VALUE(NULL); /* Keychain holding cert + key */ #endif /* HAVE_TLS */ #ifdef HAVE_ONDEMAND VAR int IdleExitTimeout VALUE(60); /* Time after which an idle cupsd will exit */ #endif /* HAVE_ONDEMAND */ #ifdef HAVE_AUTHORIZATION_H VAR char *SystemGroupAuthKey VALUE(NULL); /* System group auth key */ #endif /* HAVE_AUTHORIZATION_H */ #ifdef HAVE_GSSAPI VAR char *GSSServiceName VALUE(NULL); /* GSS service name */ VAR int HaveServerCreds VALUE(0); /* Do we have server credentials? */ VAR gss_cred_id_t ServerCreds; /* Server's GSS credentials */ #endif /* HAVE_GSSAPI */ /* * Prototypes... */ extern void cupsdAddAlias(cups_array_t *aliases, const char *name); extern int cupsdCheckLogFile(cups_file_t **lf, const char *logname); extern int cupsdCheckPermissions(const char *filename, const char *suffix, mode_t mode, uid_t user, gid_t group, int is_dir, int create_dir); extern int cupsdCheckProgram(const char *filename, cupsd_printer_t *p); extern int cupsdDefaultAuthType(void); extern void cupsdFreeAliases(cups_array_t *aliases); extern char *cupsdGetDateTime(struct timeval *t, cupsd_time_t format); extern int cupsdLogClient(cupsd_client_t *con, int level, const char *message, ...) _CUPS_FORMAT(3, 4); extern void cupsdLogFCMessage(void *context, _cups_fc_result_t result, const char *message); #ifdef HAVE_GSSAPI extern int cupsdLogGSSMessage(int level, OM_uint32 major_status, OM_uint32 minor_status, const char *message, ...) _CUPS_FORMAT(4, 5); #endif /* HAVE_GSSAPI */ extern int cupsdLogJob(cupsd_job_t *job, int level, const char *message, ...) _CUPS_FORMAT(3, 4); extern int cupsdLogMessage(int level, const char *message, ...) _CUPS_FORMAT(2, 3); extern int cupsdLogPage(cupsd_job_t *job, const char *page); extern int cupsdLogRequest(cupsd_client_t *con, http_status_t code); extern int cupsdReadConfiguration(void); extern int cupsdWriteErrorLog(int level, const char *message);