Magellan Linux

Annotation of /trunk/cups/patches/cups-1.7.1-systemd-socket.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2408 - (hide annotations) (download)
Fri Feb 14 10:34:36 2014 UTC (10 years, 3 months ago) by niro
File size: 12758 byte(s)
-systemd patch for 1.7
1 niro 2408 diff -up cups-1.7rc1/config.h.in.systemd-socket cups-1.7rc1/config.h.in
2     --- cups-1.7rc1/config.h.in.systemd-socket 2013-05-29 13:51:34.000000000 +0200
3     +++ cups-1.7rc1/config.h.in 2013-07-12 11:16:53.257546263 +0200
4     @@ -451,6 +451,13 @@
5    
6    
7     /*
8     + * Do we have systemd support?
9     + */
10     +
11     +#undef HAVE_SYSTEMD
12     +
13     +
14     +/*
15     * Various scripting languages...
16     */
17    
18     diff -up cups-1.7rc1/config-scripts/cups-systemd.m4.systemd-socket cups-1.7rc1/config-scripts/cups-systemd.m4
19     --- cups-1.7rc1/config-scripts/cups-systemd.m4.systemd-socket 2013-07-12 11:16:53.257546263 +0200
20     +++ cups-1.7rc1/config-scripts/cups-systemd.m4 2013-07-12 11:16:53.257546263 +0200
21     @@ -0,0 +1,36 @@
22     +dnl
23     +dnl "$Id$"
24     +dnl
25     +dnl systemd stuff for CUPS.
26     +
27     +dnl Find whether systemd is available
28     +
29     +SDLIBS=""
30     +AC_ARG_WITH([systemdsystemunitdir],
31     + AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
32     + [], [with_systemdsystemunitdir=$($PKGCONFIG --variable=systemdsystemunitdir systemd)])
33     +if test "x$with_systemdsystemunitdir" != xno; then
34     + AC_MSG_CHECKING(for libsystemd-daemon)
35     + if $PKGCONFIG --exists libsystemd-daemon; then
36     + AC_MSG_RESULT(yes)
37     + SDCFLAGS=`$PKGCONFIG --cflags libsystemd-daemon`
38     + SDLIBS=`$PKGCONFIG --libs libsystemd-daemon`
39     + AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
40     + AC_DEFINE(HAVE_SYSTEMD)
41     + else
42     + AC_MSG_RESULT(no)
43     + fi
44     +fi
45     +
46     +if test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ; then
47     + SYSTEMD_UNITS="cups.service cups.socket cups.path"
48     +else
49     + SYSTEMD_UNITS=""
50     +fi
51     +
52     +AC_SUBST(SYSTEMD_UNITS)
53     +AC_SUBST(SDLIBS)
54     +
55     +dnl
56     +dnl "$Id$"
57     +dnl
58     diff -up cups-1.7rc1/configure.in.systemd-socket cups-1.7rc1/configure.in
59     --- cups-1.7rc1/configure.in.systemd-socket 2013-07-08 23:15:13.000000000 +0200
60     +++ cups-1.7rc1/configure.in 2013-07-12 11:16:53.257546263 +0200
61     @@ -33,6 +33,7 @@ sinclude(config-scripts/cups-pam.m4)
62     sinclude(config-scripts/cups-largefile.m4)
63     sinclude(config-scripts/cups-dnssd.m4)
64     sinclude(config-scripts/cups-launchd.m4)
65     +sinclude(config-scripts/cups-systemd.m4)
66     sinclude(config-scripts/cups-defaults.m4)
67     sinclude(config-scripts/cups-scripting.m4)
68    
69     @@ -67,6 +68,9 @@ AC_OUTPUT(Makedefs
70     conf/snmp.conf
71     cups-config
72     data/testprint
73     + data/cups.service
74     + data/cups.socket
75     + data/cups.path
76     desktop/cups.desktop
77     doc/help/ref-cups-files-conf.html
78     doc/help/ref-cupsd-conf.html
79     diff -up cups-1.7rc1/cups/usersys.c.systemd-socket cups-1.7rc1/cups/usersys.c
80     --- cups-1.7rc1/cups/usersys.c.systemd-socket 2013-07-10 16:08:39.000000000 +0200
81     +++ cups-1.7rc1/cups/usersys.c 2013-07-12 11:16:53.258546249 +0200
82     @@ -1046,7 +1046,7 @@ cups_read_client_conf(
83     struct stat sockinfo; /* Domain socket information */
84    
85     if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) &&
86     - (sockinfo.st_mode & S_IRWXO) == S_IRWXO)
87     + (sockinfo.st_mode & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH))
88     cups_server = CUPS_DEFAULT_DOMAINSOCKET;
89     else
90     #endif /* CUPS_DEFAULT_DOMAINSOCKET */
91     diff -up cups-1.7rc1/data/cups.path.in.systemd-socket cups-1.7rc1/data/cups.path.in
92     --- cups-1.7rc1/data/cups.path.in.systemd-socket 2013-07-12 11:16:53.258546249 +0200
93     +++ cups-1.7rc1/data/cups.path.in 2013-07-12 11:16:53.258546249 +0200
94     @@ -0,0 +1,8 @@
95     +[Unit]
96     +Description=CUPS Printer Service Spool
97     +
98     +[Path]
99     +PathExistsGlob=@CUPS_REQUESTS@/d*
100     +
101     +[Install]
102     +WantedBy=multi-user.target
103     diff -up cups-1.7rc1/data/cups.service.in.systemd-socket cups-1.7rc1/data/cups.service.in
104     --- cups-1.7rc1/data/cups.service.in.systemd-socket 2013-07-12 11:16:53.258546249 +0200
105     +++ cups-1.7rc1/data/cups.service.in 2013-07-12 11:16:53.258546249 +0200
106     @@ -0,0 +1,10 @@
107     +[Unit]
108     +Description=CUPS Printing Service
109     +
110     +[Service]
111     +ExecStart=@sbindir@/cupsd -f
112     +PrivateTmp=true
113     +
114     +[Install]
115     +Also=cups.socket cups.path
116     +WantedBy=printer.target
117     diff -up cups-1.7rc1/data/cups.socket.in.systemd-socket cups-1.7rc1/data/cups.socket.in
118     --- cups-1.7rc1/data/cups.socket.in.systemd-socket 2013-07-12 11:16:53.259546235 +0200
119     +++ cups-1.7rc1/data/cups.socket.in 2013-07-12 11:16:53.259546235 +0200
120     @@ -0,0 +1,9 @@
121     +[Unit]
122     +Description=CUPS Printing Service Sockets
123     +
124     +[Socket]
125     +ListenStream=@CUPS_DEFAULT_DOMAINSOCKET@
126     +ListenStream=@DEFAULT_IPP_PORT@
127     +
128     +[Install]
129     +WantedBy=sockets.target
130     diff -up cups-1.7rc1/data/Makefile.systemd-socket cups-1.7rc1/data/Makefile
131     --- cups-1.7rc1/data/Makefile.systemd-socket 2013-05-29 13:51:34.000000000 +0200
132     +++ cups-1.7rc1/data/Makefile 2013-07-12 11:16:53.259546235 +0200
133     @@ -100,6 +100,12 @@ install-data:
134     $(INSTALL_DATA) $$file $(DATADIR)/ppdc; \
135     done
136     $(INSTALL_DIR) -m 755 $(DATADIR)/profiles
137     + if test "x$(SYSTEMD_UNITS)" != "x" ; then \
138     + $(INSTALL_DIR) -m 755 $(SYSTEMDUNITDIR); \
139     + for file in $(SYSTEMD_UNITS); do \
140     + $(INSTALL_DATA) $$file $(SYSTEMDUNITDIR); \
141     + done; \
142     + fi
143    
144    
145     #
146     @@ -143,6 +149,9 @@ uninstall:
147     -$(RMDIR) $(DATADIR)/data
148     -$(RMDIR) $(DATADIR)/banners
149     -$(RMDIR) $(DATADIR)
150     + for file in $(SYSTEMD_UNITS); do \
151     + $(RM) $(SYSTEMDUNITDIR)/$$file; \
152     + done
153    
154    
155     #
156     diff -up cups-1.7rc1/Makedefs.in.systemd-socket cups-1.7rc1/Makedefs.in
157     --- cups-1.7rc1/Makedefs.in.systemd-socket 2013-07-12 11:16:53.246546416 +0200
158     +++ cups-1.7rc1/Makedefs.in 2013-07-12 11:17:49.327768742 +0200
159     @@ -134,6 +134,7 @@ CXXFLAGS = @CPPFLAGS@ @CXXFLAGS@
160     CXXLIBS = @CXXLIBS@
161     DBUS_NOTIFIER = @DBUS_NOTIFIER@
162     DBUS_NOTIFIERLIBS = @DBUS_NOTIFIERLIBS@
163     +SYSTEMD_UNITS = @SYSTEMD_UNITS@
164     DNSSD_BACKEND = @DNSSD_BACKEND@
165     DSOFLAGS = -L../cups @DSOFLAGS@
166     DSOLIBS = @DSOLIBS@ $(COMMONLIBS)
167     @@ -141,6 +142,7 @@ DNSSDLIBS = @DNSSDLIBS@
168     IPPFIND_BIN = @IPPFIND_BIN@
169     IPPFIND_MAN = @IPPFIND_MAN@
170     LAUNCHDLIBS = @LAUNCHDLIBS@
171     +SDLIBS = @SDLIBS@
172     LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \
173     -L../scheduler @LDARCHFLAGS@ \
174     @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM)
175     @@ -231,6 +233,7 @@ PAMFILE = @PAMFILE@
176    
177     DEFAULT_LAUNCHD_CONF = @DEFAULT_LAUNCHD_CONF@
178     DBUSDIR = @DBUSDIR@
179     +SYSTEMDUNITDIR = $(BUILDROOT)@systemdsystemunitdir@
180    
181    
182     #
183     diff -up cups-1.7rc1/scheduler/client.h.systemd-socket cups-1.7rc1/scheduler/client.h
184     --- cups-1.7rc1/scheduler/client.h.systemd-socket 2013-05-29 13:51:34.000000000 +0200
185     +++ cups-1.7rc1/scheduler/client.h 2013-07-12 11:16:53.260546222 +0200
186     @@ -77,6 +77,9 @@ typedef struct
187     int fd; /* File descriptor for this server */
188     http_addr_t address; /* Bind address of socket */
189     http_encryption_t encryption; /* To encrypt or not to encrypt... */
190     +#ifdef HAVE_SYSTEMD
191     + int is_systemd; /* Is this a systemd socket? */
192     +#endif /* HAVE_SYSTEMD */
193     } cupsd_listener_t;
194    
195    
196     diff -up cups-1.7rc1/scheduler/listen.c.systemd-socket cups-1.7rc1/scheduler/listen.c
197     --- cups-1.7rc1/scheduler/listen.c.systemd-socket 2013-05-29 13:51:34.000000000 +0200
198     +++ cups-1.7rc1/scheduler/listen.c 2013-07-12 11:16:53.260546222 +0200
199     @@ -401,7 +401,11 @@ cupsdStopListening(void)
200     lis;
201     lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
202     {
203     - if (lis->fd != -1)
204     + if (lis->fd != -1
205     +#ifdef HAVE_SYSTEMD
206     + && !lis->is_systemd
207     +#endif /* HAVE_SYSTEMD */
208     + )
209     {
210     #ifdef WIN32
211     closesocket(lis->fd);
212     diff -up cups-1.7rc1/scheduler/main.c.systemd-socket cups-1.7rc1/scheduler/main.c
213     --- cups-1.7rc1/scheduler/main.c.systemd-socket 2013-07-12 11:16:53.212546887 +0200
214     +++ cups-1.7rc1/scheduler/main.c 2013-07-12 11:16:53.261546208 +0200
215     @@ -26,6 +26,8 @@
216     * launchd_checkin() - Check-in with launchd and collect the listening
217     * fds.
218     * launchd_checkout() - Update the launchd KeepAlive file as needed.
219     + * systemd_checkin() - Check-in with systemd and collect the
220     + * listening fds.
221     * parent_handler() - Catch USR1/CHLD signals...
222     * process_children() - Process all dead children...
223     * select_timeout() - Calculate the select timeout value.
224     @@ -62,6 +64,10 @@
225     # endif /* !LAUNCH_JOBKEY_SERVICEIPC */
226     #endif /* HAVE_LAUNCH_H */
227    
228     +#ifdef HAVE_SYSTEMD
229     +#include <systemd/sd-daemon.h>
230     +#endif /* HAVE_SYSTEMD */
231     +
232     #if defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
233     # include <malloc.h>
234     #endif /* HAVE_MALLOC_H && HAVE_MALLINFO */
235     @@ -83,6 +89,9 @@
236     static void launchd_checkin(void);
237     static void launchd_checkout(void);
238     #endif /* HAVE_LAUNCHD */
239     +#ifdef HAVE_SYSTEMD
240     +static void systemd_checkin(void);
241     +#endif /* HAVE_SYSTEMD */
242     static void parent_handler(int sig);
243     static void process_children(void);
244     static void sigchld_handler(int sig);
245     @@ -574,6 +583,13 @@ main(int argc, /* I - Number of comm
246     }
247     #endif /* HAVE_LAUNCHD */
248    
249     +#ifdef HAVE_SYSTEMD
250     + /*
251     + * If we were started by systemd get the listen sockets file descriptors...
252     + */
253     + systemd_checkin();
254     +#endif /* HAVE_SYSTEMD */
255     +
256     /*
257     * Startup the server...
258     */
259     @@ -762,6 +778,15 @@ main(int argc, /* I - Number of comm
260     }
261     #endif /* HAVE_LAUNCHD */
262    
263     +#ifdef HAVE_SYSTEMD
264     + /*
265     + * If we were started by systemd get the listen sockets file
266     + * descriptors...
267     + */
268     +
269     + systemd_checkin();
270     +#endif /* HAVE_SYSTEMD */
271     +
272     /*
273     * Startup the server...
274     */
275     @@ -1511,6 +1536,102 @@ launchd_checkout(void)
276     }
277     #endif /* HAVE_LAUNCHD */
278    
279     +#ifdef HAVE_SYSTEMD
280     +static void
281     +systemd_checkin(void)
282     +{
283     + int n, fd;
284     +
285     + n = sd_listen_fds(0);
286     + if (n < 0)
287     + {
288     + cupsdLogMessage(CUPSD_LOG_ERROR,
289     + "systemd_checkin: Failed to acquire sockets from systemd - %s",
290     + strerror(-n));
291     + exit(EXIT_FAILURE);
292     + return;
293     + }
294     +
295     + if (n == 0)
296     + return;
297     +
298     + for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd ++)
299     + {
300     + http_addr_t addr;
301     + socklen_t addrlen = sizeof (addr);
302     + int r;
303     + cupsd_listener_t *lis;
304     + char s[256];
305     +
306     + r = sd_is_socket(fd, AF_UNSPEC, SOCK_STREAM, 1);
307     + if (r < 0)
308     + {
309     + cupsdLogMessage(CUPSD_LOG_ERROR,
310     + "systemd_checkin: Unable to verify socket type - %s",
311     + strerror(-r));
312     + continue;
313     + }
314     +
315     + if (!r)
316     + {
317     + cupsdLogMessage(CUPSD_LOG_ERROR,
318     + "systemd_checkin: Socket not of the right type");
319     + continue;
320     + }
321     +
322     + if (getsockname(fd, (struct sockaddr*) &addr, &addrlen))
323     + {
324     + cupsdLogMessage(CUPSD_LOG_ERROR,
325     + "systemd_checkin: Unable to get local address - %s",
326     + strerror(errno));
327     + continue;
328     + }
329     +
330     + /*
331     + * Try to match the systemd socket address to one of the listeners...
332     + */
333     +
334     + for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
335     + lis;
336     + lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
337     + if (httpAddrEqual(&lis->address, &addr))
338     + break;
339     +
340     + if (lis)
341     + {
342     + cupsdLogMessage(CUPSD_LOG_DEBUG,
343     + "systemd_checkin: Matched existing listener %s with fd %d...",
344     + httpAddrString(&(lis->address), s, sizeof(s)), fd);
345     + }
346     + else
347     + {
348     + cupsdLogMessage(CUPSD_LOG_DEBUG,
349     + "systemd_checkin: Adding new listener %s with fd %d...",
350     + httpAddrString(&addr, s, sizeof(s)), fd);
351     +
352     + if ((lis = calloc(1, sizeof(cupsd_listener_t))) == NULL)
353     + {
354     + cupsdLogMessage(CUPSD_LOG_ERROR,
355     + "systemd_checkin: Unable to allocate listener - "
356     + "%s.", strerror(errno));
357     + exit(EXIT_FAILURE);
358     + }
359     +
360     + cupsArrayAdd(Listeners, lis);
361     +
362     + memcpy(&lis->address, &addr, sizeof(lis->address));
363     + }
364     +
365     + lis->fd = fd;
366     + lis->is_systemd = 1;
367     +
368     +# ifdef HAVE_SSL
369     + if (_httpAddrPort(&(lis->address)) == 443)
370     + lis->encryption = HTTP_ENCRYPT_ALWAYS;
371     +# endif /* HAVE_SSL */
372     + }
373     +}
374     +#endif /* HAVE_SYSTEMD */
375    
376     /*
377     * 'parent_handler()' - Catch USR1/CHLD signals...
378     diff -up cups-1.7rc1/scheduler/Makefile.systemd-socket cups-1.7rc1/scheduler/Makefile
379     --- cups-1.7rc1/scheduler/Makefile.systemd-socket 2013-05-29 13:51:34.000000000 +0200
380     +++ cups-1.7rc1/scheduler/Makefile 2013-07-12 11:16:53.261546208 +0200
381     @@ -381,7 +381,7 @@ cupsd: $(CUPSDOBJS) $(LIBCUPSMIME) ../cu
382     $(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \
383     $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
384     $(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBS) \
385     - $(LIBGSSAPI) $(LIBWRAP)
386     + $(LIBGSSAPI) $(LIBWRAP) $(SDLIBS)
387    
388     cupsd-static: $(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC)
389     echo Linking $@...
390     @@ -389,7 +389,7 @@ cupsd-static: $(CUPSDOBJS) libcupsmime.a
391     $(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
392     ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \
393     $(LIBMALLOC) $(SERVERLIBS) $(DNSSDLIBS) $(LIBGSSAPI) \
394     - $(LIBWRAP)
395     + $(LIBWRAP) $(SDLIBS)
396    
397     tls.o: tls-darwin.c tls-gnutls.c tls-openssl.c
398