From 74f437b7d20be44bacbbbc792da69ff9c82dfe8f Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Tue, 18 Jun 2024 10:43:30 +0200 Subject: [PATCH] scheduler: Fix cupsd activated on-demand via socket If only the expected cups.sock is set as listener in cupsd.conf, the array Listeners was NULL. To prevent copying the code, do the array allocation earlier and have only one check for Listeners, in service_checkin() which is run every time cupsd starts. Fixes #985 --- scheduler/conf.c | 49 ++++++++++++------------------------------------ scheduler/main.c | 2 +- 2 files changed, 13 insertions(+), 38 deletions(-) diff --git a/scheduler/conf.c b/scheduler/conf.c index 88593db3e6..afa087d5ef 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -551,6 +551,18 @@ cupsdReadConfiguration(void) cupsdDeleteAllListeners(); + /* + * Allocate array Listeners + */ + + Listeners = cupsArrayNew(NULL, NULL); + + if (!Listeners) + { + fprintf(stderr, "Unable to allocate memory for array Listeners."); + return (0); + } + old_remote_port = RemotePort; RemotePort = 0; @@ -1043,32 +1055,6 @@ cupsdReadConfiguration(void) } } - /* - * Check that we have at least one listen/port line; if not, report this - * as an error and exit! - */ - -#ifdef HAVE_ONDEMAND - if (cupsArrayCount(Listeners) == 0 && !OnDemand) -#else - if (cupsArrayCount(Listeners) == 0) -#endif // HAVE_ONDEMAND - { - /* - * No listeners! - */ - - cupsdLogMessage(CUPSD_LOG_EMERG, - "No valid Listen or Port lines were found in the " - "configuration file."); - - /* - * Commit suicide... - */ - - cupsdEndProcess(getpid(), 0); - } - /* * Set the default locale using the language and charset... */ @@ -3224,17 +3210,6 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */ * Allocate another listener... */ - if (!Listeners) - Listeners = cupsArrayNew(NULL, NULL); - - if (!Listeners) - { - cupsdLogMessage(CUPSD_LOG_ERROR, - "Unable to allocate %s at line %d - %s.", - line, linenum, strerror(errno)); - break; - } - if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL) { cupsdLogMessage(CUPSD_LOG_ERROR, diff --git a/scheduler/main.c b/scheduler/main.c index 1c37c840e9..5a63829d2b 100644 --- a/scheduler/main.c +++ b/scheduler/main.c @@ -1977,7 +1977,7 @@ service_checkin(void) * No listeners! */ - cupsdLogMessage(CUPSD_LOG_EMERG, "service_checkin: No listener sockets present."); + cupsdLogMessage(CUPSD_LOG_EMERG, "No listener sockets present."); /* * Commit suicide... -- 2.47.2