Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 300199 Details for
Bug 376021
[patch] net-print/cups should provide systemd support
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Updated patch (from upstream bug)
cups-systemd-socket.patch (text/plain), 12.38 KB, created by
Michał Górny
on 2012-01-28 20:34:00 UTC
(
hide
)
Description:
Updated patch (from upstream bug)
Filename:
MIME Type:
Creator:
Michał Górny
Created:
2012-01-28 20:34:00 UTC
Size:
12.38 KB
patch
obsolete
>diff -up cups-1.5.0/config.h.in.systemd-socket cups-1.5.0/config.h.in >--- cups-1.5.0/config.h.in.systemd-socket 2011-10-18 15:32:40.741672460 +0100 >+++ cups-1.5.0/config.h.in 2011-10-18 15:32:40.843670530 +0100 >@@ -503,6 +503,13 @@ > > > /* >+ * Do we have systemd support? >+ */ >+ >+#undef HAVE_SYSTEMD >+ >+ >+/* > * Various scripting languages... > */ > >diff -up cups-1.5.0/config-scripts/cups-systemd.m4.systemd-socket cups-1.5.0/config-scripts/cups-systemd.m4 >--- cups-1.5.0/config-scripts/cups-systemd.m4.systemd-socket 2011-10-18 15:32:40.844670511 +0100 >+++ cups-1.5.0/config-scripts/cups-systemd.m4 2011-10-18 15:33:16.861989058 +0100 >@@ -0,0 +1,36 @@ >+dnl >+dnl "$Id$" >+dnl >+dnl systemd stuff for CUPS. >+ >+dnl Find whether systemd is available >+ >+SDLIBS="" >+AC_ARG_WITH([systemdsystemunitdir], >+ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]), >+ [], [with_systemdsystemunitdir=$($PKGCONFIG --variable=systemdsystemunitdir systemd)]) >+if test "x$with_systemdsystemunitdir" != xno; then >+ AC_MSG_CHECKING(for libsystemd-daemon) >+ if $PKGCONFIG --exists libsystemd-daemon; then >+ AC_MSG_RESULT(yes) >+ SDCFLAGS=`$PKGCONFIG --cflags libsystemd-daemon` >+ SDLIBS=`$PKGCONFIG --libs libsystemd-daemon` >+ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) >+ AC_DEFINE(HAVE_SYSTEMD) >+ else >+ AC_MSG_RESULT(no) >+ fi >+fi >+ >+if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then >+ SYSTEMD_UNITS="cups.service cups.socket cups.path" >+else >+ SYSTEMD_UNITS="" >+fi >+ >+AC_SUBST(SYSTEMD_UNITS) >+AC_SUBST(SDLIBS) >+ >+dnl >+dnl "$Id$" >+dnl >diff -up cups-1.5.0/configure.in.systemd-socket cups-1.5.0/configure.in >--- cups-1.5.0/configure.in.systemd-socket 2010-11-20 01:03:46.000000000 +0000 >+++ cups-1.5.0/configure.in 2011-10-18 15:32:40.844670511 +0100 >@@ -37,6 +37,7 @@ sinclude(config-scripts/cups-pam.m4) > sinclude(config-scripts/cups-largefile.m4) > sinclude(config-scripts/cups-dnssd.m4) > sinclude(config-scripts/cups-launchd.m4) >+sinclude(config-scripts/cups-systemd.m4) > sinclude(config-scripts/cups-defaults.m4) > sinclude(config-scripts/cups-pdf.m4) > sinclude(config-scripts/cups-scripting.m4) >@@ -71,6 +72,9 @@ AC_OUTPUT(Makedefs > conf/snmp.conf > cups-config > data/testprint >+ data/cups.service >+ data/cups.socket >+ data/cups.path > desktop/cups.desktop > doc/help/ref-cupsd-conf.html > doc/help/standard.html >diff -up cups-1.5.0/cups/usersys.c.systemd-socket cups-1.5.0/cups/usersys.c >--- cups-1.5.0/cups/usersys.c.systemd-socket 2011-10-18 15:32:40.645674277 +0100 >+++ cups-1.5.0/cups/usersys.c 2011-10-18 15:32:40.845670492 +0100 >@@ -770,7 +770,7 @@ cups_read_client_conf( > struct stat sockinfo; /* Domain socket information */ > > if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) && >- (sockinfo.st_mode & S_IRWXO) == S_IRWXO) >+ (sockinfo.st_mode & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH)) > cups_server = CUPS_DEFAULT_DOMAINSOCKET; > else > #endif /* CUPS_DEFAULT_DOMAINSOCKET */ >diff -up cups-1.5.0/data/cups.path.in.systemd-socket cups-1.5.0/data/cups.path.in >--- cups-1.5.0/data/cups.path.in.systemd-socket 2011-10-18 15:32:40.846670473 +0100 >+++ cups-1.5.0/data/cups.path.in 2011-10-18 15:32:40.846670473 +0100 >@@ -0,0 +1,8 @@ >+[Unit] >+Description=CUPS Printer Service Spool >+ >+[Path] >+PathExistsGlob=@CUPS_REQUESTS@/d* >+ >+[Install] >+WantedBy=multi-user.target >diff -up cups-1.5.0/data/cups.service.in.systemd-socket cups-1.5.0/data/cups.service.in >--- cups-1.5.0/data/cups.service.in.systemd-socket 2011-10-18 15:32:40.846670473 +0100 >+++ cups-1.5.0/data/cups.service.in 2011-10-18 15:32:40.846670473 +0100 >@@ -0,0 +1,9 @@ >+[Unit] >+Description=CUPS Printing Service >+ >+[Service] >+ExecStart=@sbindir@/cupsd -f >+ >+[Install] >+Also=cups.socket cups.path >+WantedBy=printer.target >diff -up cups-1.5.0/data/cups.socket.in.systemd-socket cups-1.5.0/data/cups.socket.in >--- cups-1.5.0/data/cups.socket.in.systemd-socket 2011-10-18 15:32:40.847670454 +0100 >+++ cups-1.5.0/data/cups.socket.in 2011-10-18 15:32:40.847670454 +0100 >@@ -0,0 +1,10 @@ >+[Unit] >+Description=CUPS Printing Service Sockets >+ >+[Socket] >+ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@ >+ListenStream=631 >+BindIPv6Only=ipv6-only >+ >+[Install] >+WantedBy=sockets.target >diff -up cups-1.5.0/data/Makefile.systemd-socket cups-1.5.0/data/Makefile >--- cups-1.5.0/data/Makefile.systemd-socket 2011-05-12 06:21:56.000000000 +0100 >+++ cups-1.5.0/data/Makefile 2011-10-18 15:32:40.847670454 +0100 >@@ -112,6 +112,12 @@ install-data: > $(INSTALL_DATA) $$file $(DATADIR)/ppdc; \ > done > $(INSTALL_DIR) -m 755 $(DATADIR)/profiles >+ if test "x$(SYSTEMD_UNITS)" != "x" ; then \ >+ $(INSTALL_DIR) -m 755 $(SYSTEMDUNITDIR); \ >+ for file in $(SYSTEMD_UNITS); do \ >+ $(INSTALL_DATA) $$file $(SYSTEMDUNITDIR); \ >+ done; \ >+ fi > > > # >@@ -159,6 +165,9 @@ uninstall: > -$(RMDIR) $(DATADIR)/charsets > -$(RMDIR) $(DATADIR)/banners > -$(RMDIR) $(DATADIR) >+ for file in $(SYSTEMD_UNITS); do \ >+ $(RM) $(SYSTEMDUNITDIR)/$$file; \ >+ done > > > # >diff -up cups-1.5.0/Makedefs.in.systemd-socket cups-1.5.0/Makedefs.in >--- cups-1.5.0/Makedefs.in.systemd-socket 2011-10-18 15:32:40.719672876 +0100 >+++ cups-1.5.0/Makedefs.in 2011-10-18 15:32:40.848670435 +0100 >@@ -143,6 +143,7 @@ CXXFLAGS = @CPPFLAGS@ @CXXFLAGS@ > CXXLIBS = @CXXLIBS@ > DBUS_NOTIFIER = @DBUS_NOTIFIER@ > DBUS_NOTIFIERLIBS = @DBUS_NOTIFIERLIBS@ >+SYSTEMD_UNITS = @SYSTEMD_UNITS@ > DNSSD_BACKEND = @DNSSD_BACKEND@ > DSOFLAGS = -L../cups @DSOFLAGS@ > DSOLIBS = @DSOLIBS@ $(COMMONLIBS) >@@ -151,6 +152,7 @@ FONTS = @FONTS@ > IMGLIBS = @IMGLIBS@ > IMGFILTERS = @IMGFILTERS@ > LAUNCHDLIBS = @LAUNCHDLIBS@ >+SDLIBS = @SDLIBS@ > LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \ > -L../scheduler @LDARCHFLAGS@ \ > @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) >@@ -267,6 +269,7 @@ PAMFILE = @PAMFILE@ > > DEFAULT_LAUNCHD_CONF = @DEFAULT_LAUNCHD_CONF@ > DBUSDIR = @DBUSDIR@ >+SYSTEMDUNITDIR = $(BUILDROOT)@systemdsystemunitdir@ > > > # >diff -up cups-1.5.0/scheduler/client.h.systemd-socket cups-1.5.0/scheduler/client.h >--- cups-1.5.0/scheduler/client.h.systemd-socket 2011-03-25 21:25:38.000000000 +0000 >+++ cups-1.5.0/scheduler/client.h 2011-10-18 15:32:40.848670435 +0100 >@@ -75,6 +75,9 @@ typedef struct > int fd; /* File descriptor for this server */ > http_addr_t address; /* Bind address of socket */ > http_encryption_t encryption; /* To encrypt or not to encrypt... */ >+#ifdef HAVE_SYSTEMD >+ int is_systemd; /* Is this a systemd socket? */ >+#endif /* HAVE_SYSTEMD */ > } cupsd_listener_t; > > >diff -up cups-1.5.0/scheduler/listen.c.systemd-socket cups-1.5.0/scheduler/listen.c >--- cups-1.5.0/scheduler/listen.c.systemd-socket 2011-04-16 00:38:13.000000000 +0100 >+++ cups-1.5.0/scheduler/listen.c 2011-10-18 15:32:40.849670416 +0100 >@@ -401,7 +401,11 @@ cupsdStopListening(void) > lis; > lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) > { >- if (lis->fd != -1) >+ if (lis->fd != -1 >+#ifdef HAVE_SYSTEMD >+ && !lis->is_systemd >+#endif /* HAVE_SYSTEMD */ >+ ) > { > #ifdef WIN32 > closesocket(lis->fd); >diff -up cups-1.5.0/scheduler/main.c.systemd-socket cups-1.5.0/scheduler/main.c >--- cups-1.5.0/scheduler/main.c.systemd-socket 2011-10-18 15:32:40.802671306 +0100 >+++ cups-1.5.0/scheduler/main.c 2011-10-18 15:32:40.851670379 +0100 >@@ -26,6 +26,8 @@ > * launchd_checkin() - Check-in with launchd and collect the listening > * fds. > * launchd_checkout() - Update the launchd KeepAlive file as needed. >+ * systemd_checkin() - Check-in with systemd and collect the >+ * listening fds. > * parent_handler() - Catch USR1/CHLD signals... > * process_children() - Process all dead children... > * select_timeout() - Calculate the select timeout value. >@@ -62,6 +64,10 @@ > # endif /* !LAUNCH_JOBKEY_SERVICEIPC */ > #endif /* HAVE_LAUNCH_H */ > >+#ifdef HAVE_SYSTEMD >+#include <systemd/sd-daemon.h> >+#endif /* HAVE_SYSTEMD */ >+ > #if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) > # include <malloc.h> > #endif /* HAVE_MALLOC_H && HAVE_MALLINFO */ >@@ -78,6 +84,9 @@ > static void launchd_checkin(void); > static void launchd_checkout(void); > #endif /* HAVE_LAUNCHD */ >+#ifdef HAVE_SYSTEMD >+static void systemd_checkin(void); >+#endif /* HAVE_SYSTEMD */ > static void parent_handler(int sig); > static void process_children(void); > static void sigchld_handler(int sig); >@@ -537,6 +546,13 @@ main(int argc, /* I - Number of comm > } > #endif /* HAVE_LAUNCHD */ > >+#ifdef HAVE_SYSTEMD >+ /* >+ * If we were started by systemd get the listen sockets file descriptors... >+ */ >+ systemd_checkin(); >+#endif /* HAVE_SYSTEMD */ >+ > /* > * Startup the server... > */ >@@ -759,6 +775,15 @@ main(int argc, /* I - Number of comm > } > #endif /* HAVE_LAUNCHD */ > >+#ifdef HAVE_SYSTEMD >+ /* >+ * If we were started by systemd get the listen sockets file >+ * descriptors... >+ */ >+ >+ systemd_checkin(); >+#endif /* HAVE_SYSTEMD */ >+ > /* > * Startup the server... > */ >@@ -1584,6 +1609,100 @@ launchd_checkout(void) > } > #endif /* HAVE_LAUNCHD */ > >+#ifdef HAVE_SYSTEMD >+static void >+systemd_checkin(void) >+{ >+ int n, fd; >+ >+ n = sd_listen_fds(0); >+ if (n < 0) >+ { >+ cupsdLogMessage(CUPSD_LOG_ERROR, >+ "systemd_checkin: Failed to acquire sockets from systemd - %s", >+ strerror(-n)); >+ exit(EXIT_FAILURE); >+ return; >+ } >+ >+ if (n == 0) >+ return; >+ >+ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd ++) >+ { >+ http_addr_t addr; >+ socklen_t addrlen = sizeof (addr); >+ int r; >+ cupsd_listener_t *lis; >+ char s[256]; >+ >+ r = sd_is_socket(fd, AF_UNSPEC, SOCK_STREAM, 1); >+ if (r < 0) { >+ cupsdLogMessage(CUPSD_LOG_ERROR, >+ "systemd_checkin: Unable to verify socket type - %s", >+ strerror(-r)); >+ continue; >+ } >+ >+ if (!r) { >+ cupsdLogMessage(CUPSD_LOG_ERROR, >+ "systemd_checkin: Socket not of the right type"); >+ continue; >+ } >+ >+ if (getsockname(fd, (struct sockaddr*) &addr, &addrlen)) >+ { >+ cupsdLogMessage(CUPSD_LOG_ERROR, >+ "systemd_checkin: Unable to get local address - %s", >+ strerror(errno)); >+ continue; >+ } >+ >+ /* >+ * Try to match the systemd socket address to one of the listeners... >+ */ >+ >+ for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners); >+ lis; >+ lis = (cupsd_listener_t *)cupsArrayNext(Listeners)) >+ if (httpAddrEqual(&lis->address, &addr)) >+ break; >+ >+ if (lis) >+ { >+ cupsdLogMessage(CUPSD_LOG_DEBUG, >+ "systemd_checkin: Matched existing listener %s with fd %d...", >+ httpAddrString(&(lis->address), s, sizeof(s)), fd); >+ } >+ else >+ { >+ cupsdLogMessage(CUPSD_LOG_DEBUG, >+ "systemd_checkin: Adding new listener %s with fd %d...", >+ httpAddrString(&addr, s, sizeof(s)), fd); >+ >+ if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL) >+ { >+ cupsdLogMessage(CUPSD_LOG_ERROR, >+ "systemd_checkin: Unable to allocate listener - " >+ "%s.", strerror(errno)); >+ exit(EXIT_FAILURE); >+ } >+ >+ cupsArrayAdd(Listeners, lis); >+ >+ memcpy(&lis->address, &addr, sizeof(lis->address)); >+ } >+ >+ lis->fd = fd; >+ lis->is_systemd = 1; >+ >+# ifdef HAVE_SSL >+ if (_httpAddrPort(&(lis->address)) == 443) >+ lis->encryption = HTTP_ENCRYPT_ALWAYS; >+# endif /* HAVE_SSL */ >+ } >+} >+#endif /* HAVE_SYSTEMD */ > > /* > * 'parent_handler()' - Catch USR1/CHLD signals... >diff -up cups-1.5.0/scheduler/Makefile.systemd-socket cups-1.5.0/scheduler/Makefile >--- cups-1.5.0/scheduler/Makefile.systemd-socket 2011-10-18 15:32:40.817671022 +0100 >+++ cups-1.5.0/scheduler/Makefile 2011-10-18 15:32:40.852670360 +0100 >@@ -382,7 +382,7 @@ cupsd: $(CUPSDOBJS) $(LIBCUPSMIME) ../cu > $(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \ > $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ > $(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBS) \ >- $(LIBGSSAPI) $(LIBWRAP) >+ $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS) > > cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC) > echo Linking $@... >@@ -390,7 +390,7 @@ cupsd-static: $(CUPSDOBJS) libcupsmime.a > $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \ > ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \ > $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBGSSAPI) \ >- $(LIBWRAP) >+ $(LIBWRAP) $(SDLIBS) > > > #
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 376021
:
280643
|
280645
|
280647
| 300199