Accepting request 42968 from home:jsmeix:branches:Printing

Copy from home:jsmeix:branches:Printing/cups via accept of submit request 42968 revision 2.
Request was accepted with message:
Fixed /etc/init.d/cups so that "rccups restart" works again (bnc#622058 caused by fix for bnc#595796)

OBS-URL: https://build.opensuse.org/request/show/42968
OBS-URL: https://build.opensuse.org/package/show/Printing/cups?expand=0&rev=205
This commit is contained in:
Johannes Meixner 2010-07-15 13:27:42 +00:00 committed by Git OBS Bridge
parent 7bb7e7c3ee
commit cd75ecc8d5
4 changed files with 350 additions and 80 deletions

View File

@ -0,0 +1,250 @@
diff -rup cups-1.4.4/cups/http.c cups-1.4.4-str3461-1.4.patch.reverted/cups/http.c
--- cups-1.4.4/cups/http.c 2010-06-16 07:27:41.000000000 +0200
+++ cups-1.4.4-str3461-1.4.patch.reverted/cups/http.c 2010-06-25 11:02:31.000000000 +0200
@@ -83,12 +83,10 @@
* http_debug_hex() - Do a hex dump of a buffer.
* http_field() - Return the field index for a field name.
* http_read_ssl() - Read from a SSL/TLS connection.
- * http_locking_cb() - Lock/unlock a thread's mutex.
* http_send() - Send a request with all fields and the trailing
* blank line.
* http_setup_ssl() - Set up SSL/TLS support on a connection.
* http_shutdown_ssl() - Shut down SSL/TLS on a connection.
- * http_threadid_cb() - Return the current thread ID.
* http_upgrade() - Force upgrade to TLS encryption.
* http_write() - Write a buffer to a HTTP connection.
* http_write_chunk() - Write a chunked buffer.
@@ -146,19 +144,6 @@ static int http_setup_ssl(http_t *http)
static void http_shutdown_ssl(http_t *http);
static int http_upgrade(http_t *http);
static int http_write_ssl(http_t *http, const char *buf, int len);
-
-# ifdef HAVE_GNUTLS
-# ifdef HAVE_PTHREAD_H
-GCRY_THREAD_OPTION_PTHREAD_IMPL;
-# endif /* HAVE_PTHREAD_H */
-
-# elif defined(HAVE_LIBSSL) && defined(HAVE_PTHREAD_H)
-static pthread_mutex_t *http_locks; /* OpenSSL lock mutexes */
-
-static void http_locking_cb(int mode, int type, const char *file,
- int line);
-static unsigned long http_threadid_cb(void);
-# endif /* HAVE_GNUTLS */
#endif /* HAVE_SSL */
@@ -1188,22 +1173,21 @@ httpHead(http_t *http, /* I - Conne
void
httpInitialize(void)
{
- static int initialized = 0; /* Have we been called before? */
-#ifdef WIN32
- WSADATA winsockdata; /* WinSock data */
-#endif /* WIN32 */
#ifdef HAVE_LIBSSL
- int i; /* Looping var */
- unsigned char data[1024]; /* Seed data */
+# ifndef WIN32
+ struct timeval curtime; /* Current time in microseconds */
+# endif /* !WIN32 */
+ int i; /* Looping var */
+ unsigned char data[1024]; /* Seed data */
#endif /* HAVE_LIBSSL */
-
- if (initialized)
- return;
-
#ifdef WIN32
- WSAStartup(MAKEWORD(2,2), &winsockdata);
+ WSADATA winsockdata; /* WinSock data */
+
+ static int initialized = 0; /* Has WinSock been initialized? */
+ if (!initialized)
+ WSAStartup(MAKEWORD(1,1), &winsockdata);
#elif !defined(SO_NOSIGPIPE)
/*
* Ignore SIGPIPE signals...
@@ -1226,56 +1210,29 @@ httpInitialize(void)
#endif /* WIN32 */
#ifdef HAVE_GNUTLS
- /*
- * Make sure we handle threading properly...
- */
-
-# ifdef HAVE_PTHREAD_H
- gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
-# endif /* HAVE_PTHREAD_H */
-
- /*
- * Initialize GNU TLS...
- */
-
gnutls_global_init();
+#endif /* HAVE_GNUTLS */
-#elif defined(HAVE_LIBSSL)
- /*
- * Initialize OpenSSL...
- */
-
+#ifdef HAVE_LIBSSL
SSL_load_error_strings();
SSL_library_init();
/*
- * Set the threading callbacks...
- */
-
-# ifdef HAVE_PTHREAD_H
- http_locks = calloc(CRYPTO_num_locks(), sizeof(pthread_mutex_t));
-
- for (i = 0; i < CRYPTO_num_locks(); i ++)
- pthread_mutex_init(http_locks + i, NULL);
-
- CRYPTO_set_id_callback(http_threadid_cb);
- CRYPTO_set_locking_callback(http_locking_cb);
-# endif /* HAVE_PTHREAD_H */
-
- /*
* 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...)
*/
- CUPS_SRAND(time(NULL));
+# ifdef WIN32
+# else
+ gettimeofday(&curtime, NULL);
+ srand(curtime.tv_sec + curtime.tv_usec);
+# endif /* WIN32 */
for (i = 0; i < sizeof(data); i ++)
- data[i] = CUPS_RAND();
+ data[i] = rand();
RAND_seed(data, sizeof(data));
-#endif /* HAVE_GNUTLS */
-
- initialized = 1;
+#endif /* HAVE_LIBSSL */
}
@@ -2834,25 +2791,6 @@ http_read_ssl(http_t *http, /* I - Conn
#endif /* HAVE_SSL */
-#if defined(HAVE_LIBSSL) && defined(HAVE_PTHREAD_H)
-/*
- * 'http_locking_cb()' - Lock/unlock a thread's mutex.
- */
-
-static void
-http_locking_cb(int mode, /* I - Lock mode */
- int type, /* I - Lock type */
- const char *file, /* I - Source file */
- int line) /* I - Line number */
-{
- if (mode & CRYPTO_LOCK)
- pthread_mutex_lock(http_locks + type);
- else
- pthread_mutex_unlock(http_locks + type);
-}
-#endif /* HAVE_LIBSSL && HAVE_PTHREAD_H */
-
-
/*
* 'http_send()' - Send a request with all fields and the trailing blank line.
*/
@@ -3224,19 +3162,6 @@ http_shutdown_ssl(http_t *http) /* I -
#endif /* HAVE_SSL */
-#if defined(HAVE_LIBSSL) && defined(HAVE_PTHREAD_H)
-/*
- * 'http_threadid_cb()' - Return the current thread ID.
- */
-
-static unsigned long /* O - Thread ID */
-http_threadid_cb(void)
-{
- return ((unsigned long)pthread_self());
-}
-#endif /* HAVE_LIBSSL && HAVE_PTHREAD_H */
-
-
#ifdef HAVE_SSL
/*
* 'http_upgrade()' - Force upgrade to TLS encryption.
diff -rup cups-1.4.4/cups/http-private.h cups-1.4.4-str3461-1.4.patch.reverted/cups/http-private.h
--- cups-1.4.4/cups/http-private.h 2010-04-12 06:03:53.000000000 +0200
+++ cups-1.4.4-str3461-1.4.patch.reverted/cups/http-private.h 2010-06-25 11:03:34.000000000 +0200
@@ -98,7 +98,6 @@ extern BIO_METHOD *_httpBIOMethods(void)
* The GNU TLS library is more of a "bare metal" SSL/TLS library...
*/
# include <gnutls/gnutls.h>
-# include <gcrypt.h>
typedef struct
{
diff -rup cups-1.4.4/scheduler/main.c cups-1.4.4-str3461-1.4.patch.reverted/scheduler/main.c
--- cups-1.4.4/scheduler/main.c 2010-04-23 20:56:34.000000000 +0200
+++ cups-1.4.4-str3461-1.4.patch.reverted/scheduler/main.c 2010-06-25 11:14:07.000000000 +0200
@@ -549,8 +549,6 @@ main(int argc, /* I - Number of comm
* Startup the server...
*/
- httpInitialize();
-
cupsdStartServer();
/*
diff -rup cups-1.4.4/scheduler/server.c cups-1.4.4-str3461-1.4.patch.reverted/scheduler/server.c
--- cups-1.4.4/scheduler/server.c 2010-04-12 06:03:53.000000000 +0200
+++ cups-1.4.4-str3461-1.4.patch.reverted/scheduler/server.c 2010-06-25 11:12:52.000000000 +0200
@@ -44,6 +44,42 @@ static int started = 0;
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...
+ */
+
+ 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...)
+ */
+
+ gettimeofday(&curtime, NULL);
+ srand(curtime.tv_sec + curtime.tv_usec);
+
+ for (i = 0; i < sizeof(data); i ++)
+ data[i] = rand(); /* Yes, this is a poor source of random data... */
+
+ RAND_seed(&data, sizeof(data));
+#elif defined(HAVE_GNUTLS)
+ /*
+ * Initialize the encryption libraries...
+ */
+
+ gnutls_global_init();
+#endif /* HAVE_LIBSSL */
+
+
/*
* Create the default security profile...
*/

View File

@ -1,3 +1,20 @@
-------------------------------------------------------------------
Thu Jul 15 15:03:20 CEST 2010 - jsmeix@suse.de
- Fixed /etc/init.d/cups (cups.init source file) so that stopping
the cupsd waits up to 10 seconds until the cupsd had actually
finished (if not SIGKILL would be sent to it) to make sure
that "rccups restart" and "rccups stop ; rccups start" work
correctly (see Novell/Suse Bugzilla bnc#622058).
-------------------------------------------------------------------
Fri Jun 25 11:28:41 CEST 2010 - jsmeix@suse.de
- cups-1.4.4-str3461-1.4.reverted.patch reverts changes
by CUPS STR #3461 as band-aid workaround for now to avoid
that Mozilla.org applications crash when they try to print
(STR #3461, STR #3605, and Novell/Suse Bugzilla bnc#617026).
-------------------------------------------------------------------
Fri Jun 18 09:11:02 CEST 2010 - jsmeix@suse.de

155
cups.init
View File

@ -1,17 +1,17 @@
#! /bin/sh
#! /bin/bash
#
# Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany.
# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.
# Copyright (C) 1995-2001 SuSE GmbH Nuernberg, Germany.
# Copyright (C) 2002 SuSE Linux AG, Nuernberg, Germany.
# Copyright (C) 2002--2008 Klaus Singvogel, SUSE / Novell Inc.
# Copyright (C) 2010 Johannes Meixner, SUSE LINUX Products GmbH
#
# Author: Kurt Garloff <feedback@suse.de>, 2000
# Klaus Singvogel <feedback@suse.de>, 2002--2008
# Author: Kurt Garloff, 2000
# Klaus Singvogel, 2002--2008
# Johannes Meixner, 2010
#
# /etc/init.d/cupsd
#
# and symbolic its link
#
# /sbin/rccupsd
# /etc/init.d/cups
# and its symbolic link
# /usr/sbin/rccups
#
# System startup script for the CUPS printer daemon
#
@ -25,37 +25,10 @@
# Default-Stop: 0 1 6
# Short-Description: CUPS printer daemon
# Description: Start CUPS to provide spooling and printing files
# functionality for local and remote printers. Even required if
# printers are broadcasted ("Browsing") into (sub)nets.
# functionality for local and remote printers. Also required if
# printers are broadcasted ("Browsing") by remote CUPS servers.
### END INIT INFO
# Source SuSE config, only if exists with size greater zero
test -s /etc/rc.config && \
. /etc/rc.config
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
CUPSD_BIN=/usr/sbin/cupsd
test -s /etc/rc.status && \
. /etc/rc.status
test -s /etc/sysconfig/cups && \
. /etc/sysconfig/cups
test -x $CUPSD_BIN || exit 5
# First reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
@ -71,89 +44,113 @@ rc_reset
# with force-reload (in case signalling is not supported) are
# considered a success.
# change umask to avoid problems in wrong file permission of /etc/printcap
# (SuSE buzilla #16567)
# Source SuSE config, only if exists with size greater zero
test -s /etc/rc.config && . /etc/rc.config
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
if test -s /etc/rc.status
then . /etc/rc.status
else exit 1
fi
# Reset status of this service:
rc_reset
CUPSD_BIN=/usr/sbin/cupsd
test -x $CUPSD_BIN || exit 5
# Get CUPSD_OPTIONS
test -s /etc/sysconfig/cups && . /etc/sysconfig/cups
# Enforce default umask to avoid problems with wrong file permissions
# for example of /etc/printcap (see Novell/Suse Bugzilla bnc#31567).
umask 022
case "$1" in
start)
echo -n "Starting cupsd"
## Start daemon with startproc(8). If this fails
## the echo return value is set appropriate.
## Start daemon with startproc(8).
## If this fails the echo return value is set appropriate.
# NOTE: startproc return 0, even if service is
# already running to match LSB spec.
startproc $CUPSD_BIN $CUPSD_OPTIONS
# Remember status and be verbose
# Remember status and be verbose:
rc_status -v
;;
stop)
echo -n "Shutting down cupsd"
## Stop daemon with killproc(8) and if this fails
## set echo the echo return value.
killproc -TERM $CUPSD_BIN
# Remember status and be verbose
## Stop daemon with killproc(8).
## If this fails the echo return value is set appropriate.
# NOTE: killproc with explicite signal specified
# like "killproc -TERM" sends only SIGTERM and exits
# to match LSB spec. (see Novell/Suse Bugzilla bnc#595796).
# Without explicite signal the default signal SIGTERM is sent
# and afterwards killproc waits by default only up to 5 seconds
# before killproc sends SIGKILL if cupsd has not yet terminated.
# Wait at most 10 seconds until the cupsd does actually no longer run
# so that the cupsd should have sufficient time for its clean up:
killproc -t 10 $CUPSD_BIN
# Remember status and be verbose:
rc_status -v
;;
try-restart)
## Stop the service and if this succeeds (i.e. the
## service was running before), start it again.
## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
$0 status >/dev/null && $0 restart
# Remember status and be quiet
$0 status >/dev/null && $0 restart
# Remember status and be quiet:
rc_status
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
# The above waits at most 10 seconds until the cupsd does actually no longer run
# otherwise "startproc $CUPSD_BIN" would not start a new cupsd
# (see Novell/Suse Bugzilla bnc#622058).
# Start a new cupsd:
$0 start
# Remember status and be quiet
# Remember status and be quiet:
rc_status
;;
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## Signal the daemon to reload its config.
## Most daemons do this on signal 1 (SIGHUP).
## If it does not support it, restart.
if ps -C cupsd -o user | grep -q '^root$'; then
echo -n "Reload service cupsd"
killproc -HUP $CUPSD_BIN
rc_status -v
else
$0 restart
if ps -C cupsd -o user | grep -q '^root$'
then echo -n "Reload service cupsd"
killproc -HUP $CUPSD_BIN
rc_status -v
else $0 restart
fi
;;
reload)
## Like force-reload, but if daemon does not support
## signalling, do nothing (!)
## signalling, do nothing.
# If it supports signalling:
if ps -C cupsd -o user | grep -q '^root$'; then
echo -n "Reload service cupsd"
killproc -HUP $CUPSD_BIN
rc_status -v
else
echo -n '"reload" not possible in RunAsUser mode - use "restart" instead'
rc_status -s
if ps -C cupsd -o user | grep -q '^root$'
then echo -n "Reload service cupsd"
killproc -HUP $CUPSD_BIN
rc_status -v
else echo -n '"reload" not possible (cupsd does not run as user root) use "restart" instead'
rc_status -s
fi
;;
status)
echo -n "Checking for cupsd: "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.
# Status has a slightly different for the status command:
# 0 - service running
# 1 - service dead, but /var/run/ pid file exists
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running
# NOTE: checkproc returns LSB compliant status values.
checkproc $CUPSD_BIN
rc_status -v
@ -161,7 +158,6 @@ case "$1" in
probe)
## Optional: Probe for the necessity of a reload,
## give out the argument which is required for a reload.
rc_failed 3
;;
*)
@ -170,3 +166,4 @@ case "$1" in
;;
esac
rc_exit

View File

@ -30,7 +30,7 @@ License: GPLv2+ ; LGPLv2.1+
Group: Hardware/Printing
Summary: The Common UNIX Printing System
Version: 1.4.4
Release: 1
Release: 2
# Require the exact matching version-release of the cups-libs sub-package because
# non-matching CUPS libraries may let CUPS software crash (e.g. segfault)
# because all CUPS software is built from the one same CUPS source tar ball
@ -92,6 +92,9 @@ Patch103: cups-1.4-do_not_strip_recommended_from_PPDs.patch
# Patch104 adds the 'allowallforanybody' policy to cupsd.conf
# see https://fate.novell.com/303515
Patch104: cups-1.4-additional_policies.patch
# Patch105 reverts changes by CUPS STR #3461 as band-aid workaround
# to avoid https://bugzilla.novell.com/show_bug.cgi?id=617026 for now:
Patch105: cups-1.4.4-str3461-1.4.reverted.patch
# Install into this non-root directory (required when norootforbuild is used):
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -210,6 +213,9 @@ http://www.cups.org
%patch103
# Patch104 adds the 'allowallforanybody' policy to cupsd.conf:
%patch104
# Patch105 reverts changes by CUPS STR #3461 as band-aid workaround
# to avoid https://bugzilla.novell.com/show_bug.cgi?id=617026 for now:
%patch105 -p1
%build
# Disable SILENT run of make so that make runs verbose as usual: