/*
- * "$Id: server.c 177 2006-06-21 00:20:03Z jlovell $"
+ * Server start/stop routines for the CUPS scheduler.
*
- * Server start/stop routines for the Common UNIX Printing System (CUPS).
+ * Copyright 2007-2019 by Apple Inc.
+ * Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
- * Copyright 1997-2006 by Easy Software Products, all rights reserved.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Easy Software Products and are protected by Federal
- * copyright law. Distribution and use rights are outlined in the file
- * "LICENSE.txt" which should have been included with this file. If this
- * file is missing or damaged please contact Easy Software Products
- * at:
- *
- * Attn: CUPS Licensing Information
- * Easy Software Products
- * 44141 Airport View Drive, Suite 204
- * Hollywood, Maryland 20636 USA
- *
- * Voice: (301) 373-9600
- * EMail: cups-info@cups.org
- * WWW: http://www.cups.org
- *
- * Contents:
- *
- * cupsdStartServer() - Start the server.
- * cupsdStopServer() - Stop the server.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
/*
* Local globals...
*/
-static int started = 0;
+static int started = 0; /* Did we start the server already? */
/*
void
cupsdStartServer(void)
{
-#ifdef HAVE_LIBSSL
- int i; /* Looping var */
- struct timeval curtime; /* Current time in microseconds */
- unsigned char data[1024]; /* Seed data */
-#endif /* HAVE_LIBSSL */
-
-
-#ifdef HAVE_LIBSSL
/*
- * Initialize the encryption libraries...
+ * Create the default security profile...
*/
- SSL_library_init();
- SSL_load_error_strings();
-
- /*
- * Using the current time is a dubious random seed, but on some systems
- * it is the best we can do (on others, this seed isn't even used...)
- */
+ DefaultProfile = cupsdCreateProfile(0, 1);
- gettimeofday(&curtime, NULL);
- srand(curtime.tv_sec + curtime.tv_usec);
+#ifdef HAVE_SANDBOX_H
+ if (!DefaultProfile && UseSandboxing && Sandboxing != CUPSD_SANDBOXING_OFF)
+ {
+ /*
+ * Failure to create the sandbox profile means something really bad has
+ * happened and we need to shutdown immediately.
+ */
- for (i = 0; i < sizeof(data); i ++)
- data[i] = rand(); /* Yes, this is a poor source of random data... */
+ return;
+ }
+#endif /* HAVE_SANDBOX_H */
- RAND_seed(&data, sizeof(data));
-#elif defined(HAVE_GNUTLS)
/*
- * Initialize the encryption libraries...
+ * Start color management (as needed)...
*/
- gnutls_global_init();
-#endif /* HAVE_LIBSSL */
+ cupsdStartColor();
/*
* Startup all the networking stuff...
cupsdStartListening();
cupsdStartBrowsing();
- cupsdStartPolling();
/*
* Create a pipe for CGI processes...
{
CGIStatusBuffer = cupsdStatBufNew(CGIPipes[0], "[CGI]");
- cupsdLogMessage(CUPSD_LOG_DEBUG2,
- "cupsdStartServer: Adding fd %d to InputSet...",
- CGIPipes[0]);
- FD_SET(CGIPipes[0], InputSet);
+ cupsdAddSelect(CGIPipes[0], (cupsd_selfunc_t)cupsdUpdateCGI, NULL, NULL);
}
/*
* Mark that the server has started and printers and jobs may be changed...
*/
- LastEvent = CUPSD_EVENT_PRINTER_CHANGED | CUPSD_EVENT_JOB_STATE_CHANGED |
- CUPSD_EVENT_SERVER_STARTED;
+ LastEvent = CUPSD_EVENT_PRINTER_CHANGED | CUPSD_EVENT_JOB_STATE_CHANGED |
+ CUPSD_EVENT_SERVER_STARTED;
+ started = 1;
- started = 1;
+ cupsdSetBusyState(0);
}
return;
/*
- * Close all network clients and stop all jobs...
+ * Stop color management (as needed)...
+ */
+
+ cupsdStopColor();
+
+ /*
+ * Close all network clients...
*/
cupsdCloseAllClients();
cupsdStopListening();
- cupsdStopPolling();
cupsdStopBrowsing();
cupsdStopAllNotifiers();
- cupsdSaveRemoteCache();
cupsdDeleteAllCerts();
if (Clients)
if (CGIPipes[0] >= 0)
{
- cupsdLogMessage(CUPSD_LOG_DEBUG2,
- "cupsdStopServer: Removing fd %d from InputSet...",
- CGIPipes[0]);
-
- FD_CLR(CGIPipes[0], InputSet);
+ cupsdRemoveSelect(CGIPipes[0]);
cupsdStatBufDelete(CGIStatusBuffer);
close(CGIPipes[1]);
if (AccessFile != NULL)
{
- cupsFileClose(AccessFile);
+ if (AccessFile != LogStderr)
+ cupsFileClose(AccessFile);
AccessFile = NULL;
}
if (ErrorFile != NULL)
{
- cupsFileClose(ErrorFile);
+ if (ErrorFile != LogStderr)
+ cupsFileClose(ErrorFile);
ErrorFile = NULL;
}
if (PageFile != NULL)
{
- cupsFileClose(PageFile);
+ if (PageFile != LogStderr)
+ cupsFileClose(PageFile);
PageFile = NULL;
}
-#ifdef HAVE_NOTIFY_POST
/*
- * Send one last notification as the server shuts down.
+ * Delete the default security profile...
*/
- cupsdLogMessage(CUPSD_LOG_DEBUG,
- "notify_post(\"com.apple.printerListChange\") last");
- notify_post("com.apple.printerListChange");
-#endif /* HAVE_NOTIFY_POST */
+ cupsdDestroyProfile(DefaultProfile);
+ DefaultProfile = NULL;
- started = 0;
-}
+ /*
+ * Expire subscriptions and clean out old jobs...
+ */
+ cupsdExpireSubscriptions(NULL, NULL);
-/*
- * End of "$Id: server.c 177 2006-06-21 00:20:03Z jlovell $".
- */
+ if (JobHistoryUpdate)
+ cupsdCleanJobs();
+
+ /*
+ * Write out any dirty files...
+ */
+
+ if (DirtyFiles)
+ cupsdCleanDirty();
+
+ started = 0;
+}