From fd09381d0ce0f62aaa65d961047dfd1a9a522643 Mon Sep 17 00:00:00 2001 From: mike Date: Fri, 2 Jul 2004 22:15:51 +0000 Subject: [PATCH] Fix some policy issues when the policy from the printers.conf file doesn't exist. git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/branches/branch-1.2@4257 7a7537e8-13f0-0310-91df-b6672ffda945 --- scheduler/client.c | 128 ++++--------------------------------------- scheduler/client.h | 6 +- scheduler/policy.c | 8 ++- scheduler/printers.c | 7 ++- scheduler/server.c | 12 ++-- 5 files changed, 32 insertions(+), 129 deletions(-) diff --git a/scheduler/client.c b/scheduler/client.c index 270110ae8..d06690eb5 100644 --- a/scheduler/client.c +++ b/scheduler/client.c @@ -1,5 +1,5 @@ /* - * "$Id: client.c,v 1.91.2.88 2004/07/02 21:36:57 mike Exp $" + * "$Id: client.c,v 1.91.2.89 2004/07/02 22:15:51 mike Exp $" * * Client routines for the Common UNIX Printing System (CUPS) scheduler. * @@ -2190,129 +2190,23 @@ SendHeader(client_t *con, /* I - Client to send to */ void UpdateCGI(void) { - int bytes; /* Number of bytes read */ - char *lineptr, /* Pointer to end of line in buffer */ - *message; /* Pointer to message text */ - int loglevel; /* Log level for message */ - static int bufused = 0; /* Number of bytes used in buffer */ - static char buffer[1024]; /* Status buffer */ + char *ptr, /* Pointer to end of line in buffer */ + message[1024]; /* Pointer to message text */ + int loglevel; /* Log level for message */ - if ((bytes = read(CGIPipes[0], buffer + bufused, - sizeof(buffer) - bufused - 1)) > 0) - { - bufused += bytes; - buffer[bufused] = '\0'; - lineptr = strchr(buffer, '\n'); - } - else if (bytes < 0 && errno == EINTR) - return; - else - { - lineptr = buffer + bufused; - lineptr[1] = 0; - } - - if (bytes == 0 && bufused == 0) - lineptr = NULL; - - while (lineptr != NULL) - { - /* - * Terminate each line and process it... - */ - - *lineptr++ = '\0'; - - /* - * Figure out the logging level... - */ - - if (strncmp(buffer, "EMERG:", 6) == 0) - { - loglevel = L_EMERG; - message = buffer + 6; - } - else if (strncmp(buffer, "ALERT:", 6) == 0) - { - loglevel = L_ALERT; - message = buffer + 6; - } - else if (strncmp(buffer, "CRIT:", 5) == 0) - { - loglevel = L_CRIT; - message = buffer + 5; - } - else if (strncmp(buffer, "ERROR:", 6) == 0) - { - loglevel = L_ERROR; - message = buffer + 6; - } - else if (strncmp(buffer, "WARNING:", 8) == 0) - { - loglevel = L_WARN; - message = buffer + 8; - } - else if (strncmp(buffer, "NOTICE:", 6) == 0) - { - loglevel = L_NOTICE; - message = buffer + 6; - } - else if (strncmp(buffer, "INFO:", 5) == 0) - { - loglevel = L_INFO; - message = buffer + 5; - } - else if (strncmp(buffer, "DEBUG:", 6) == 0) - { - loglevel = L_DEBUG; - message = buffer + 6; - } - else if (strncmp(buffer, "DEBUG2:", 7) == 0) - { - loglevel = L_DEBUG2; - message = buffer + 7; - } - else if (strncmp(buffer, "PAGE:", 5) == 0) - { - loglevel = L_PAGE; - message = buffer + 5; - } - else - { - loglevel = L_DEBUG; - message = buffer; - } + while ((ptr = cupsdStatBufUpdate(CGIStatusBuffer, &loglevel, + message, sizeof(message))) != NULL) + if (!strchr(CGIStatusBuffer->buffer, '\n')) + break; - /* - * Skip leading whitespace in the message... - */ - - while (isspace(*message)) - message ++; - - LogMessage(loglevel, "[CGI] %s", message); - - /* - * Copy over the buffer data we've used up... - */ - - strcpy(buffer, lineptr); - bufused -= lineptr - buffer; - - if (bufused < 0) - bufused = 0; - - lineptr = strchr(buffer, '\n'); - } - - if (bytes <= 0) + if (ptr == NULL) { /* * Fatal error on pipe - should never happen! */ - LogMessage(L_ERROR, "UpdateCGI: error reading from CGI error pipe - %s", + LogMessage(L_CRIT, "UpdateCGI: error reading from CGI error pipe - %s", strerror(errno)); } } @@ -3432,5 +3326,5 @@ CDSAWriteFunc(SSLConnectionRef connection, /* I - SSL/TLS connection */ /* - * End of "$Id: client.c,v 1.91.2.88 2004/07/02 21:36:57 mike Exp $". + * End of "$Id: client.c,v 1.91.2.89 2004/07/02 22:15:51 mike Exp $". */ diff --git a/scheduler/client.h b/scheduler/client.h index 20a31aa99..cf1636376 100644 --- a/scheduler/client.h +++ b/scheduler/client.h @@ -1,5 +1,5 @@ /* - * "$Id: client.h,v 1.17.2.15 2004/07/02 04:51:45 mike Exp $" + * "$Id: client.h,v 1.17.2.16 2004/07/02 22:15:51 mike Exp $" * * Client definitions for the Common UNIX Printing System (CUPS) scheduler. * @@ -86,6 +86,8 @@ VAR char *ServerHeader VALUE(NULL); /* Server header in requests */ VAR int CGIPipes[2] VALUE2(-1,-1); /* Pipes for CGI error/debug output */ +VAR cupsd_statbuf_t *CGIStatusBuffer VALUE(NULL); + /* Status buffer for pipes */ /* @@ -115,5 +117,5 @@ extern int WriteClient(client_t *con); /* - * End of "$Id: client.h,v 1.17.2.15 2004/07/02 04:51:45 mike Exp $". + * End of "$Id: client.h,v 1.17.2.16 2004/07/02 22:15:51 mike Exp $". */ diff --git a/scheduler/policy.c b/scheduler/policy.c index 902cc8a47..c509bbb1f 100644 --- a/scheduler/policy.c +++ b/scheduler/policy.c @@ -1,5 +1,5 @@ /* - * "$Id: policy.c,v 1.1.2.8 2004/06/30 21:18:31 mike Exp $" + * "$Id: policy.c,v 1.1.2.9 2004/07/02 22:15:51 mike Exp $" * * Policy routines for the Common UNIX Printing System (CUPS). * @@ -189,7 +189,11 @@ CheckPolicy(policy_t *p, /* I - Policy */ */ if (!p || !con) + { + LogMessage(L_CRIT, "CheckPolicy: p=%p, con=%p!", p, con); + return (0); + } /* * Collect info from the request... @@ -533,5 +537,5 @@ check_op(policyop_t *po, /* I - Policy operation */ /* - * End of "$Id: policy.c,v 1.1.2.8 2004/06/30 21:18:31 mike Exp $". + * End of "$Id: policy.c,v 1.1.2.9 2004/07/02 22:15:51 mike Exp $". */ diff --git a/scheduler/printers.c b/scheduler/printers.c index 0da1f9ae1..19bec4514 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c @@ -1,5 +1,5 @@ /* - * "$Id: printers.c,v 1.93.2.66 2004/07/02 20:19:17 mike Exp $" + * "$Id: printers.c,v 1.93.2.67 2004/07/02 22:15:51 mike Exp $" * * Printer routines for the Common UNIX Printing System (CUPS). * @@ -518,7 +518,8 @@ CreateCommonData(void) */ for (p = Printers; p; p = p->next) - p->op_policy_ptr = FindPolicy(p->op_policy); + if ((p->op_policy_ptr = FindPolicy(p->op_policy)) == NULL) + p->op_policy_ptr = DefaultPolicyPtr; } @@ -2486,5 +2487,5 @@ write_irix_state(printer_t *p) /* I - Printer to update */ /* - * End of "$Id: printers.c,v 1.93.2.66 2004/07/02 20:19:17 mike Exp $". + * End of "$Id: printers.c,v 1.93.2.67 2004/07/02 22:15:51 mike Exp $". */ diff --git a/scheduler/server.c b/scheduler/server.c index 1bde01633..cc2541200 100644 --- a/scheduler/server.c +++ b/scheduler/server.c @@ -1,5 +1,5 @@ /* - * "$Id: server.c,v 1.2.2.15 2004/07/02 20:49:23 mike Exp $" + * "$Id: server.c,v 1.2.2.16 2004/07/02 22:15:51 mike Exp $" * * Server start/stop routines for the Common UNIX Printing System (CUPS). * @@ -95,6 +95,8 @@ StartServer(void) pipe(CGIPipes); + CGIStatusBuffer = cupsdStatBufNew(CGIPipes[0], "[CGI]"); + LogMessage(L_DEBUG2, "StartServer: Adding fd %d to InputSet...", CGIPipes[0]); FD_SET(CGIPipes[0], InputSet); @@ -149,14 +151,14 @@ StopServer(void) if (CGIPipes[0] >= 0) { - close(CGIPipes[0]); - close(CGIPipes[1]); - LogMessage(L_DEBUG2, "StopServer: Removing fd %d from InputSet...", CGIPipes[0]); FD_CLR(CGIPipes[0], InputSet); + cupsdStatBufDelete(CGIStatusBuffer); + close(CGIPipes[1]); + CGIPipes[0] = -1; CGIPipes[1] = -1; } @@ -189,5 +191,5 @@ StopServer(void) /* - * End of "$Id: server.c,v 1.2.2.15 2004/07/02 20:49:23 mike Exp $". + * End of "$Id: server.c,v 1.2.2.16 2004/07/02 22:15:51 mike Exp $". */ -- 2.39.5