Gentoo Archives: gentoo-commits

From: Alexandre Rostovtsev <tetromino@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gnome:master commit in: gnome-base/gdm/files/3.4.1/, gnome-base/gdm/, gnome-base/gdm/files/
Date: Thu, 27 Sep 2012 07:53:50
Message-Id: 1348732321.7cfe0a72d50b95281121707d00818866ac015f16.tetromino@gentoo
1 commit: 7cfe0a72d50b95281121707d00818866ac015f16
2 Author: Alexandre Rostovtsev <tetromino <AT> gentoo <DOT> org>
3 AuthorDate: Thu Sep 27 07:40:20 2012 +0000
4 Commit: Alexandre Rostovtsev <tetromino <AT> gentoo <DOT> org>
5 CommitDate: Thu Sep 27 07:52:01 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gnome.git;a=commit;h=7cfe0a72
7
8 gnome-base/gdm: 3.5.92.1 → 3.6.0 with daemonization
9
10 Rewrite daemonization patch so it really works (and use libdaemon to get
11 it right). Ensure that "/etc/init.d/xdm stop" works by starting a new
12 process group if gdm is in daemon mode, and killing it in the signal
13 handler callback. Rewrite pam.d files to hopefully address some of the
14 problems that systemd users have been having (see bug #435042). And ship
15 the pam.d files and other auxilliary stuff in a separate tarball (which
16 will be shared with 3.4.x) to keep FILESDIR a bit cleaner.
17
18 ---
19 gnome-base/gdm/files/3.4.1/gdm | 12 -
20 gnome-base/gdm/files/3.4.1/gdm-autologin | 11 -
21 gnome-base/gdm/files/3.4.1/gdm-fingerprint | 15 -
22 gnome-base/gdm/files/3.4.1/gdm-password | 12 -
23 gnome-base/gdm/files/3.4.1/gdm-smartcard | 16 -
24 gnome-base/gdm/files/3.4.1/gdm-welcome | 11 -
25 gnome-base/gdm/files/3.4.1/gdm.service | 11 -
26 gnome-base/gdm/files/49-keychain-r1 | 9 -
27 gnome-base/gdm/files/50-ssh-agent-r1 | 10 -
28 gnome-base/gdm/files/gdm-3.4.1-plymouth.patch | 338 --------------------
29 .../gdm/files/gdm-3.4.1-save-root-window.patch | 141 --------
30 .../files/gdm-3.6.0-fix-daemonize-regression.patch | 192 +++++++++++
31 .../gdm/files/gdm-3.6.0-selinux-automagic.patch | 31 ++
32 .../gdm/{gdm-3.5.92.1.ebuild => gdm-3.6.0.ebuild} | 64 ++--
33 gnome-base/gdm/gdm-9999.ebuild | 64 ++--
34 15 files changed, 289 insertions(+), 648 deletions(-)
35
36 diff --git a/gnome-base/gdm/files/3.4.1/gdm b/gnome-base/gdm/files/3.4.1/gdm
37 deleted file mode 100644
38 index bdce065..0000000
39 --- a/gnome-base/gdm/files/3.4.1/gdm
40 +++ /dev/null
41 @@ -1,12 +0,0 @@
42 -#%PAM-1.0
43 -auth optional pam_env.so
44 -auth include system-login
45 -auth required pam_nologin.so
46 -
47 -account include system-login
48 -
49 -password include system-login
50 -
51 -session include system-auth
52 -#Systemd=-session optional pam_systemd.so
53 -#Keyring=session optional pam_gnome_keyring.so auto_start
54
55 diff --git a/gnome-base/gdm/files/3.4.1/gdm-autologin b/gnome-base/gdm/files/3.4.1/gdm-autologin
56 deleted file mode 100644
57 index 26e3193..0000000
58 --- a/gnome-base/gdm/files/3.4.1/gdm-autologin
59 +++ /dev/null
60 @@ -1,11 +0,0 @@
61 -#%PAM-1.0
62 -auth optional pam_env.so
63 -auth required pam_nologin.so
64 -auth required pam_permit.so
65 -account include system-login
66 -password include system-login
67 -session include system-auth
68 -#Systemd=-session optional pam_systemd.so
69 -# For the keyring to unlock with autologin, you need to set an empty
70 -# password on the keyring.
71 -#Keyring=session optional pam_gnome_keyring.so auto_start
72
73 diff --git a/gnome-base/gdm/files/3.4.1/gdm-fingerprint b/gnome-base/gdm/files/3.4.1/gdm-fingerprint
74 deleted file mode 100644
75 index 635fdd9..0000000
76 --- a/gnome-base/gdm/files/3.4.1/gdm-fingerprint
77 +++ /dev/null
78 @@ -1,15 +0,0 @@
79 -#%PAM-1.0
80 -# Note: no pam_gnome_keyring.so support since the login password is not used
81 -auth optional pam_env.so
82 -auth required pam_tally2.so onerr=succeed
83 -auth required pam_shells.so
84 -auth required pam_nologin.so
85 -auth required pam_fprintd.so
86 -auth optional pam_permit.so
87 -
88 -account include system-login
89 -
90 -password required pam_deny.so
91 -
92 -session include system-auth
93 -#Systemd=-session optional pam_systemd.so
94
95 diff --git a/gnome-base/gdm/files/3.4.1/gdm-password b/gnome-base/gdm/files/3.4.1/gdm-password
96 deleted file mode 100644
97 index bdce065..0000000
98 --- a/gnome-base/gdm/files/3.4.1/gdm-password
99 +++ /dev/null
100 @@ -1,12 +0,0 @@
101 -#%PAM-1.0
102 -auth optional pam_env.so
103 -auth include system-login
104 -auth required pam_nologin.so
105 -
106 -account include system-login
107 -
108 -password include system-login
109 -
110 -session include system-auth
111 -#Systemd=-session optional pam_systemd.so
112 -#Keyring=session optional pam_gnome_keyring.so auto_start
113
114 diff --git a/gnome-base/gdm/files/3.4.1/gdm-smartcard b/gnome-base/gdm/files/3.4.1/gdm-smartcard
115 deleted file mode 100644
116 index 64e960e..0000000
117 --- a/gnome-base/gdm/files/3.4.1/gdm-smartcard
118 +++ /dev/null
119 @@ -1,16 +0,0 @@
120 -#%PAM-1.0
121 -auth optional pam_env.so
122 -auth required pam_tally2.so onerr=succeed
123 -auth required pam_shells.so
124 -auth required pam_nologin.so
125 -auth [success=done ignore=ignore default=die] pam_pkcs11.so wait_for_card card_only
126 -auth optional pam_permit.so
127 -
128 -account include system-login
129 -
130 -password optional pam_pkcs11.so
131 -password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
132 -password optional pam_permit.so
133 -
134 -session include system-auth
135 -#Systemd=-session optional pam_systemd.so
136
137 diff --git a/gnome-base/gdm/files/3.4.1/gdm-welcome b/gnome-base/gdm/files/3.4.1/gdm-welcome
138 deleted file mode 100644
139 index a409a63..0000000
140 --- a/gnome-base/gdm/files/3.4.1/gdm-welcome
141 +++ /dev/null
142 @@ -1,11 +0,0 @@
143 -#%PAM-1.0
144 -auth required pam_env.so
145 -# Allows greeter to list ldap users; bug #430740
146 -#LDAP=-auth sufficient pam_ldap.so try_first_pass ignore_authinfo_unavail
147 -auth required pam_permit.so
148 -account required pam_nologin.so
149 -account include system-services
150 -password include system-services
151 -session required pam_loginuid.so
152 -session optional pam_keyinit.so force revoke
153 -session include system-services
154
155 diff --git a/gnome-base/gdm/files/3.4.1/gdm.service b/gnome-base/gdm/files/3.4.1/gdm.service
156 deleted file mode 100644
157 index 63bb08e..0000000
158 --- a/gnome-base/gdm/files/3.4.1/gdm.service
159 +++ /dev/null
160 @@ -1,11 +0,0 @@
161 -[Unit]
162 -Description=GNOME Display Manager
163 -After=systemd-user-sessions.service
164 -
165 -[Service]
166 -ExecStart=/usr/bin/gdm --nodaemon
167 -Type=dbus
168 -BusName=org.gnome.DisplayManager
169 -
170 -[Install]
171 -WantedBy=graphical.target
172
173 diff --git a/gnome-base/gdm/files/49-keychain-r1 b/gnome-base/gdm/files/49-keychain-r1
174 deleted file mode 100644
175 index 51a1ca8..0000000
176 --- a/gnome-base/gdm/files/49-keychain-r1
177 +++ /dev/null
178 @@ -1,9 +0,0 @@
179 -#!/bin/bash
180 -
181 -# source keychain variables
182 -
183 -keychain="`which keychain 2>/dev/null`"
184 -if [ -n "$keychain" ] && [ -x "$keychain" ] && [ -f "$HOME/.bash_profile" ]
185 -then
186 - . "${HOME}/.bash_profile"
187 -fi
188
189 diff --git a/gnome-base/gdm/files/50-ssh-agent-r1 b/gnome-base/gdm/files/50-ssh-agent-r1
190 deleted file mode 100644
191 index 4d94fb0..0000000
192 --- a/gnome-base/gdm/files/50-ssh-agent-r1
193 +++ /dev/null
194 @@ -1,10 +0,0 @@
195 -#!/bin/sh
196 -
197 -# add ssh-agent if found
198 -
199 -sshagent="`which ssh-agent 2>/dev/null`"
200 -if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then
201 - command="$sshagent -- $command"
202 -elif [ -z "$sshagent" ] ; then
203 - echo "$0: ssh-agent not found!"
204 -fi
205
206 diff --git a/gnome-base/gdm/files/gdm-3.4.1-plymouth.patch b/gnome-base/gdm/files/gdm-3.4.1-plymouth.patch
207 deleted file mode 100644
208 index edd6220..0000000
209 --- a/gnome-base/gdm/files/gdm-3.4.1-plymouth.patch
210 +++ /dev/null
211 @@ -1,338 +0,0 @@
212 -From c56fbb65277e8a17db5e0939f0b02e41c4ec784c Mon Sep 17 00:00:00 2001
213 -From: Ray Strode <rstrode@××××××.com>
214 -Date: Fri, 27 Nov 2009 18:52:54 -0500
215 -Subject: [PATCH] daemon: enable smooth transition between plymouth and X
216 -
217 -This commit adds optional support for interacting with plymouth
218 -from gdm. This feature can be enabled by passing --with-plymouth
219 -to configure.
220 -
221 -Hopefully, this will enable the various distributions that use
222 -plymouth to drop a patch.
223 -
224 -https://bugzilla.gnome.org/show_bug.cgi?id=572173
225 ----
226 - configure.ac | 32 +++++++++++++
227 - daemon/gdm-server.c | 60 +++++++++++++++++++++++++
228 - daemon/gdm-server.h | 3 +
229 - daemon/gdm-simple-slave.c | 106 ++++++++++++++++++++++++++++++++++++++++++++-
230 - 4 files changed, 200 insertions(+), 1 deletions(-)
231 -
232 -diff --git a/configure.ac b/configure.ac
233 -index 35e6e04..81ea23e 100644
234 ---- a/configure.ac
235 -+++ b/configure.ac
236 -@@ -264,6 +264,10 @@ AC_ARG_WITH(systemd,
237 - AS_HELP_STRING([--with-systemd],
238 - [Add systemd support @<:@default=auto@:>@]),
239 - [with_systemd=$withval], [with_systemd=auto])
240 -+AC_ARG_WITH(plymouth,
241 -+ AS_HELP_STRING([--with-plymouth],
242 -+ [Add plymouth support @<:@default=auto@:>@]),
243 -+ [with_plymouth=$withval], [with_plymouth=auto])
244 -
245 - AC_ARG_WITH(at-spi-registryd-directory,
246 - AS_HELP_STRING([--with-at-spi-registryd-directory],
247 -@@ -952,6 +956,33 @@ AC_SUBST(SYSTEMD_X_SERVER)
248 - AC_DEFINE_UNQUOTED(SYSTEMD_X_SERVER,"$SYSTEMD_X_SERVER",[Path to systemd X server wrapper])
249 -
250 - dnl ---------------------------------------------------------------------------
251 -+dnl - Check for plymouth support
252 -+dnl ---------------------------------------------------------------------------
253 -+PKG_CHECK_MODULES(PLYMOUTH,
254 -+ [ply-boot-client],
255 -+ [have_plymouth=yes], [have_plymouth=no])
256 -+
257 -+if test "x$with_plymouth" = "xauto" ; then
258 -+ if test x$have_plymouth = xno ; then
259 -+ use_plymouth=no
260 -+ else
261 -+ use_plymouth=yes
262 -+ fi
263 -+else
264 -+ use_plymouth="$with_plymouth"
265 -+fi
266 -+
267 -+if test "x$use_plymouth" != "xno" ; then
268 -+ if test "x$have_plymouth" = "xno"; then
269 -+ AC_MSG_ERROR([Plymouth support explicitly required, but plymouth not found])
270 -+ fi
271 -+
272 -+ AC_DEFINE(WITH_PLYMOUTH, 1, [Define to enable plymouth support])
273 -+fi
274 -+AC_SUBST(PLYMOUTH_CFLAGS)
275 -+AC_SUBST(PLYMOUTH_LIBS)
276 -+
277 -+dnl ---------------------------------------------------------------------------
278 - dnl - Check for D-Bus
279 - dnl ---------------------------------------------------------------------------
280 -
281 -@@ -1537,6 +1568,7 @@ echo \
282 - SELinux support: ${with_selinux}
283 - ConsoleKit support: ${use_console_kit}
284 - systemd support: ${use_systemd}
285 -+ plymouth support: ${use_plymouth}
286 - UPower support: ${have_upower}
287 - Build with RBAC: ${msg_rbac_shutdown}
288 - "
289 -diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
290 -index d0d8ff9..6f2a939 100644
291 ---- a/daemon/gdm-server.c
292 -+++ b/daemon/gdm-server.c
293 -@@ -32,6 +32,7 @@
294 - #include <pwd.h>
295 - #include <grp.h>
296 - #include <signal.h>
297 -+#include <sys/ioctl.h>
298 - #include <sys/resource.h>
299 -
300 - #ifdef HAVE_SYS_PRCTL_H
301 -@@ -42,6 +43,10 @@
302 - #include <systemd/sd-daemon.h>
303 - #endif
304 -
305 -+#ifdef WITH_PLYMOUTH
306 -+#include <linux/vt.h>
307 -+#endif
308 -+
309 - #include <glib.h>
310 - #include <glib/gi18n.h>
311 - #include <glib/gstdio.h>
312 -@@ -751,6 +756,61 @@ gdm_server_spawn (GdmServer *server,
313 - return ret;
314 - }
315 -
316 -+#ifdef WITH_PLYMOUTH
317 -+static int
318 -+get_active_vt (void)
319 -+{
320 -+ int console_fd;
321 -+ struct vt_stat console_state = { 0 };
322 -+
323 -+ console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY);
324 -+
325 -+ if (console_fd < 0) {
326 -+ goto out;
327 -+ }
328 -+
329 -+ if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) {
330 -+ goto out;
331 -+ }
332 -+
333 -+out:
334 -+ if (console_fd >= 0) {
335 -+ close (console_fd);
336 -+ }
337 -+
338 -+ return console_state.v_active;
339 -+}
340 -+
341 -+static char *
342 -+get_active_vt_as_string (void)
343 -+{
344 -+ int vt;
345 -+
346 -+ vt = get_active_vt ();
347 -+
348 -+ if (vt <= 0) {
349 -+ return NULL;
350 -+ }
351 -+
352 -+ return g_strdup_printf ("vt%d", vt);
353 -+}
354 -+
355 -+gboolean
356 -+gdm_server_start_on_active_vt (GdmServer *server)
357 -+{
358 -+ gboolean res;
359 -+ char *vt;
360 -+
361 -+ g_free (server->priv->command);
362 -+ server->priv->command = g_strdup (X_SERVER " -background none -logverbose 7");
363 -+ vt = get_active_vt_as_string ();
364 -+ res = gdm_server_spawn (server, vt);
365 -+ g_free (vt);
366 -+
367 -+ return res;
368 -+}
369 -+#endif
370 -+
371 - /**
372 - * gdm_server_start:
373 - * @disp: Pointer to a GdmDisplay structure
374 -diff --git a/daemon/gdm-server.h b/daemon/gdm-server.h
375 -index b53d68e..827f7fa 100644
376 ---- a/daemon/gdm-server.h
377 -+++ b/daemon/gdm-server.h
378 -@@ -57,6 +57,9 @@ GdmServer * gdm_server_new (const char *display_id,
379 - const char *seat_id,
380 - const char *auth_file);
381 - gboolean gdm_server_start (GdmServer *server);
382 -+#ifdef HAVE_PLYMOUTH
383 -+gboolean gdm_server_start_on_active_vt (GdmServer *server);
384 -+#endif
385 - gboolean gdm_server_stop (GdmServer *server);
386 - char * gdm_server_get_display_device (GdmServer *server);
387 -
388 -diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
389 -index fc8649c..7c709a6 100644
390 ---- a/daemon/gdm-simple-slave.c
391 -+++ b/daemon/gdm-simple-slave.c
392 -@@ -93,6 +93,9 @@ struct GdmSimpleSlavePrivate
393 - #ifdef HAVE_LOGINDEVPERM
394 - gboolean use_logindevperm;
395 - #endif
396 -+#ifdef WITH_PLYMOUTH
397 -+ guint plymouth_is_running : 1;
398 -+#endif
399 - };
400 -
401 - enum {
402 -@@ -1204,6 +1207,74 @@ on_start_session_later (GdmGreeterServer *session,
403 - slave->priv->start_session_when_ready = FALSE;
404 - }
405 -
406 -+#ifdef WITH_PLYMOUTH
407 -+static gboolean
408 -+plymouth_is_running (void)
409 -+{
410 -+ int status;
411 -+ gboolean res;
412 -+ GError *error;
413 -+
414 -+ error = NULL;
415 -+ res = g_spawn_command_line_sync ("/bin/plymouth --ping",
416 -+ NULL, NULL, &status, &error);
417 -+ if (! res) {
418 -+ g_debug ("Could not ping plymouth: %s", error->message);
419 -+ g_error_free (error);
420 -+ return FALSE;
421 -+ }
422 -+
423 -+ return WIFEXITED (status) && WEXITSTATUS (status) == 0;
424 -+}
425 -+
426 -+static void
427 -+plymouth_prepare_for_transition (GdmSimpleSlave *slave)
428 -+{
429 -+ gboolean res;
430 -+ GError *error;
431 -+
432 -+ error = NULL;
433 -+ res = g_spawn_command_line_sync ("/bin/plymouth deactivate",
434 -+ NULL, NULL, NULL, &error);
435 -+ if (! res) {
436 -+ g_warning ("Could not deactivate plymouth: %s", error->message);
437 -+ g_error_free (error);
438 -+ }
439 -+}
440 -+
441 -+static void
442 -+plymouth_quit_with_transition (GdmSimpleSlave *slave)
443 -+{
444 -+ gboolean res;
445 -+ GError *error;
446 -+
447 -+ error = NULL;
448 -+ res = g_spawn_command_line_sync ("/bin/plymouth quit --retain-splash",
449 -+ NULL, NULL, NULL, &error);
450 -+ if (! res) {
451 -+ g_warning ("Could not quit plymouth: %s", error->message);
452 -+ g_error_free (error);
453 -+ }
454 -+ slave->priv->plymouth_is_running = FALSE;
455 -+}
456 -+
457 -+static void
458 -+plymouth_quit_without_transition (GdmSimpleSlave *slave)
459 -+{
460 -+ gboolean res;
461 -+ GError *error;
462 -+
463 -+ error = NULL;
464 -+ res = g_spawn_command_line_sync ("/bin/plymouth quit",
465 -+ NULL, NULL, NULL, &error);
466 -+ if (! res) {
467 -+ g_warning ("Could not quit plymouth: %s", error->message);
468 -+ g_error_free (error);
469 -+ }
470 -+ slave->priv->plymouth_is_running = FALSE;
471 -+}
472 -+#endif
473 -+
474 - static void
475 - setup_server (GdmSimpleSlave *slave)
476 - {
477 -@@ -1223,6 +1294,12 @@ setup_server (GdmSimpleSlave *slave)
478 - */
479 - gdm_slave_save_root_windows (GDM_SLAVE (slave));
480 -
481 -+#ifdef WITH_PLYMOUTH
482 -+ /* Plymouth is waiting for the go-ahead to exit */
483 -+ if (slave->priv->plymouth_is_running) {
484 -+ plymouth_quit_with_transition (slave);
485 -+ }
486 -+#endif
487 - }
488 -
489 - static void
490 -@@ -1426,6 +1503,12 @@ on_server_exited (GdmServer *server,
491 - g_debug ("GdmSimpleSlave: server exited with code %d\n", exit_code);
492 -
493 - gdm_slave_stopped (GDM_SLAVE (slave));
494 -+
495 -+#ifdef WITH_PLYMOUTH
496 -+ if (slave->priv->plymouth_is_running) {
497 -+ plymouth_quit_without_transition (slave);
498 -+ }
499 -+#endif
500 - }
501 -
502 - static void
503 -@@ -1438,6 +1521,12 @@ on_server_died (GdmServer *server,
504 - g_strsignal (signal_number));
505 -
506 - gdm_slave_stopped (GDM_SLAVE (slave));
507 -+
508 -+#ifdef WITH_PLYMOUTH
509 -+ if (slave->priv->plymouth_is_running) {
510 -+ plymouth_quit_without_transition (slave);
511 -+ }
512 -+#endif
513 - }
514 -
515 - static gboolean
516 -@@ -1484,7 +1573,17 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
517 - G_CALLBACK (on_server_ready),
518 - slave);
519 -
520 -- res = gdm_server_start (slave->priv->server);
521 -+#ifdef WITH_PLYMOUTH
522 -+ slave->priv->plymouth_is_running = plymouth_is_running ();
523 -+
524 -+ if (slave->priv->plymouth_is_running) {
525 -+ plymouth_prepare_for_transition (slave);
526 -+ res = gdm_server_start_on_active_vt (slave->priv->server);
527 -+ } else
528 -+#endif
529 -+ {
530 -+ res = gdm_server_start (slave->priv->server);
531 -+ }
532 - if (! res) {
533 - g_warning (_("Could not start the X "
534 - "server (your graphical environment) "
535 -@@ -1494,6 +1593,11 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
536 - "In the meantime this display will be "
537 - "disabled. Please restart GDM when "
538 - "the problem is corrected."));
539 -+#ifdef WITH_PLYMOUTH
540 -+ if (slave->priv->plymouth_is_running) {
541 -+ plymouth_quit_without_transition (slave);
542 -+ }
543 -+#endif
544 - exit (1);
545 - }
546 -
547 ---
548 -1.7.8.6
549 -
550
551 diff --git a/gnome-base/gdm/files/gdm-3.4.1-save-root-window.patch b/gnome-base/gdm/files/gdm-3.4.1-save-root-window.patch
552 deleted file mode 100644
553 index 2d9c314..0000000
554 --- a/gnome-base/gdm/files/gdm-3.4.1-save-root-window.patch
555 +++ /dev/null
556 @@ -1,141 +0,0 @@
557 -From c93d98b646a9a4fce3052260a1f08808d62d7155 Mon Sep 17 00:00:00 2001
558 -From: Ray Strode <rstrode@××××××.com>
559 -Date: Fri, 27 Nov 2009 18:27:53 -0500
560 -Subject: [PATCH] daemon: save root window to pixmap at _XROOTPMAP_ID
561 -
562 -This combined with starting the X server with
563 --background none will give distros using plymouth
564 -(or potentially other boot splashes) a a nice fade
565 -transition when g-s-d starts.
566 -
567 -https://bugzilla.gnome.org/show_bug.cgi?id=572173
568 ----
569 - daemon/gdm-simple-slave.c | 8 +++++
570 - daemon/gdm-slave.c | 72 +++++++++++++++++++++++++++++++++++++++++++++
571 - daemon/gdm-slave.h | 1 +
572 - 3 files changed, 81 insertions(+), 0 deletions(-)
573 -
574 -diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
575 -index 9d1347a..fc8649c 100644
576 ---- a/daemon/gdm-simple-slave.c
577 -+++ b/daemon/gdm-simple-slave.c
578 -@@ -1215,6 +1215,14 @@ setup_server (GdmSimpleSlave *slave)
579 -
580 - /* Set the initial keyboard layout to something reasonable */
581 - gdm_slave_set_initial_keyboard_layout (GDM_SLAVE (slave));
582 -+ /* The root window has a background that may be useful
583 -+ * to cross fade or transition from when setting the
584 -+ * login screen background. We read it here, and stuff
585 -+ * it into the standard _XROOTPMAP_ID root window property,
586 -+ * so gnome-settings-daemon can get at it.
587 -+ */
588 -+ gdm_slave_save_root_windows (GDM_SLAVE (slave));
589 -+
590 - }
591 -
592 - static void
593 -diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
594 -index a5ce62f..53633c0 100644
595 ---- a/daemon/gdm-slave.c
596 -+++ b/daemon/gdm-slave.c
597 -@@ -43,6 +43,7 @@
598 - #include <dbus/dbus-glib-lowlevel.h>
599 -
600 - #include <X11/Xlib.h> /* for Display */
601 -+#include <X11/Xatom.h> /* for XA_PIXMAP */
602 - #include <X11/cursorfont.h> /* for watch cursor */
603 - #include <X11/extensions/Xrandr.h>
604 - #include <X11/Xatom.h>
605 -@@ -364,6 +365,77 @@ gdm_slave_run_script (GdmSlave *slave,
606 - return ret;
607 - }
608 -
609 -+static void
610 -+gdm_slave_save_root_window_of_screen (GdmSlave *slave,
611 -+ Atom id_atom,
612 -+ int screen_number)
613 -+{
614 -+ Window root_window;
615 -+ GC gc;
616 -+ XGCValues values;
617 -+ Pixmap pixmap;
618 -+ int width, height, depth;
619 -+
620 -+ root_window = RootWindow (slave->priv->server_display,
621 -+ screen_number);
622 -+
623 -+ width = DisplayWidth (slave->priv->server_display, screen_number);
624 -+ height = DisplayHeight (slave->priv->server_display, screen_number);
625 -+ depth = DefaultDepth (slave->priv->server_display, screen_number);
626 -+ pixmap = XCreatePixmap (slave->priv->server_display,
627 -+ root_window,
628 -+ width, height, depth);
629 -+
630 -+ values.function = GXcopy;
631 -+ values.plane_mask = AllPlanes;
632 -+ values.fill_style = FillSolid;
633 -+ values.subwindow_mode = IncludeInferiors;
634 -+
635 -+ gc = XCreateGC (slave->priv->server_display,
636 -+ root_window,
637 -+ GCFunction | GCPlaneMask | GCFillStyle | GCSubwindowMode,
638 -+ &values);
639 -+
640 -+ if (XCopyArea (slave->priv->server_display,
641 -+ root_window, pixmap, gc, 0, 0,
642 -+ width, height, 0, 0)) {
643 -+
644 -+ long pixmap_as_long;
645 -+
646 -+ pixmap_as_long = (long) pixmap;
647 -+
648 -+ XChangeProperty (slave->priv->server_display,
649 -+ root_window, id_atom, XA_PIXMAP,
650 -+ 32, PropModeReplace, (guchar *) &pixmap_as_long,
651 -+ 1);
652 -+
653 -+ }
654 -+
655 -+ XFreeGC (slave->priv->server_display, gc);
656 -+}
657 -+
658 -+void
659 -+gdm_slave_save_root_windows (GdmSlave *slave)
660 -+{
661 -+ int i, number_of_screens;
662 -+ Atom atom;
663 -+
664 -+ number_of_screens = ScreenCount (slave->priv->server_display);
665 -+
666 -+ atom = XInternAtom (slave->priv->server_display,
667 -+ "_XROOTPMAP_ID", False);
668 -+
669 -+ if (atom == 0) {
670 -+ return;
671 -+ }
672 -+
673 -+ for (i = 0; i < number_of_screens; i++) {
674 -+ gdm_slave_save_root_window_of_screen (slave, atom, i);
675 -+ }
676 -+
677 -+ XSync (slave->priv->server_display, False);
678 -+}
679 -+
680 - void
681 - gdm_slave_set_initial_keyboard_layout (GdmSlave *slave)
682 - {
683 -diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h
684 -index 7af20ed..aaaa8f2 100644
685 ---- a/daemon/gdm-slave.h
686 -+++ b/daemon/gdm-slave.h
687 -@@ -78,6 +78,7 @@ void gdm_slave_set_initial_keyboard_layout (GdmSlave *slave);
688 - void gdm_slave_set_initial_cursor_position (GdmSlave *slave);
689 -
690 - void gdm_slave_set_busy_cursor (GdmSlave *slave);
691 -+void gdm_slave_save_root_windows (GdmSlave *slave);
692 - gboolean gdm_slave_run_script (GdmSlave *slave,
693 - const char *dir,
694 - const char *username);
695 ---
696 -1.7.8.6
697 -
698
699 diff --git a/gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch b/gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch
700 new file mode 100644
701 index 0000000..27f2079
702 --- /dev/null
703 +++ b/gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch
704 @@ -0,0 +1,192 @@
705 +From 722d31dc8823090b651b103f0194b6380f2d458e Mon Sep 17 00:00:00 2001
706 +From: Alexandre Rostovtsev <tetromino@g.o>
707 +Date: Tue, 25 Sep 2012 22:30:29 -0400
708 +Subject: [PATCH] daemonize so that the boot process can continue
709 +
710 +Gentoo bug: #236701
711 +
712 +Based on original patch by Dan Nicholson <dbn.lists@×××××.com> and
713 +Gilles Dartiguelongue <eva@g.o>.
714 +
715 +Fork gdm-binary, except when -nodaemon is used
716 +
717 +Makes the gdm main binary fork and daemonize unless the -nodaemon or
718 +--nodaemon options are used. Provides compatibility with xdm. Fixes
719 +bug #550170.
720 +
721 +In daemonized mode, start a new process group, and kill it in our signal
722 +handlers, so that killing gdm kills its spawned processes, and so that
723 +"/etc/init.d/xdm stop" actually works.
724 +---
725 + configure.ac | 4 ++++
726 + daemon/Makefile.am | 1 +
727 + daemon/main.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
728 + 3 files changed, 65 insertions(+)
729 +
730 +diff --git a/configure.ac b/configure.ac
731 +index 61a43d6..a851ba5 100644
732 +--- a/configure.ac
733 ++++ b/configure.ac
734 +@@ -99,6 +99,10 @@ PKG_CHECK_MODULES(DAEMON,
735 + AC_SUBST(DAEMON_CFLAGS)
736 + AC_SUBST(DAEMON_LIBS)
737 +
738 ++PKG_CHECK_MODULES(LIBDAEMON, libdaemon)
739 ++AC_SUBST(LIBDAEMON_CFLAGS)
740 ++AC_SUBST(LIBDAEMON_LIBS)
741 ++
742 + GLIB_GSETTINGS
743 +
744 + PKG_CHECK_MODULES(NSS,
745 +diff --git a/daemon/Makefile.am b/daemon/Makefile.am
746 +index bb84765..cf89b47 100644
747 +--- a/daemon/Makefile.am
748 ++++ b/daemon/Makefile.am
749 +@@ -380,6 +380,7 @@ gdm_binary_LDADD = \
750 + $(top_builddir)/common/libgdmcommon.la \
751 + $(XLIB_LIBS) \
752 + $(DAEMON_LIBS) \
753 ++ $(LIBDAEMON_LIBS) \
754 + $(XDMCP_LIBS) \
755 + $(LIBWRAP_LIBS) \
756 + $(SYSTEMD_LIBS) \
757 +diff --git a/daemon/main.c b/daemon/main.c
758 +index 3b8572c..c2fe4fe 100644
759 +--- a/daemon/main.c
760 ++++ b/daemon/main.c
761 +@@ -34,6 +34,8 @@
762 + #include <locale.h>
763 + #include <signal.h>
764 +
765 ++#include <libdaemon/dfork.h>
766 ++
767 + #include <glib.h>
768 + #include <glib/gi18n.h>
769 + #include <glib/gstdio.h>
770 +@@ -336,16 +338,26 @@ signal_cb (int signo,
771 + gpointer data)
772 + {
773 + int ret;
774 ++ static gboolean ignore_signals = FALSE;
775 +
776 + g_debug ("Got callback for signal %d", signo);
777 +
778 + ret = TRUE;
779 +
780 ++ /* don't commit suicide before killing everyone in our process group */
781 ++ if (ignore_signals)
782 ++ return ret;
783 ++
784 + switch (signo) {
785 + case SIGFPE:
786 + case SIGPIPE:
787 + /* let the fatal signals interrupt us */
788 + g_debug ("Caught signal %d, shutting down abnormally.", signo);
789 ++ /* if we daemonized, kill all the processes we spawned */
790 ++ ignore_signals = TRUE;
791 ++ kill (-getpid (), signo);
792 ++ ignore_signals = FALSE;
793 ++
794 + ret = FALSE;
795 +
796 + break;
797 +@@ -354,6 +366,11 @@ signal_cb (int signo,
798 + case SIGTERM:
799 + /* let the fatal signals interrupt us */
800 + g_debug ("Caught signal %d, shutting down normally.", signo);
801 ++ /* if we daemonized, kill all the processes we spawned */
802 ++ ignore_signals = TRUE;
803 ++ kill (-getpid (), signo);
804 ++ ignore_signals = FALSE;
805 ++
806 + ret = FALSE;
807 +
808 + break;
809 +@@ -418,13 +435,16 @@ main (int argc,
810 + GOptionContext *context;
811 + GError *error;
812 + int ret;
813 ++ int i;
814 + gboolean res;
815 + GdmSignalHandler *signal_handler;
816 + static gboolean do_timed_exit = FALSE;
817 + static gboolean print_version = FALSE;
818 + static gboolean fatal_warnings = FALSE;
819 ++ static gboolean no_daemon = FALSE;
820 + static GOptionEntry entries [] = {
821 + { "fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &fatal_warnings, N_("Make all warnings fatal"), NULL },
822 ++ { "nodaemon", 0, 0, G_OPTION_ARG_NONE, &no_daemon, N_("Do not fork into the background"), NULL },
823 + { "timed-exit", 0, 0, G_OPTION_ARG_NONE, &do_timed_exit, N_("Exit after a time (for debugging)"), NULL },
824 + { "version", 0, 0, G_OPTION_ARG_NONE, &print_version, N_("Print GDM version"), NULL },
825 +
826 +@@ -439,6 +459,14 @@ main (int argc,
827 +
828 + g_type_init ();
829 +
830 ++ /* preprocess the arguments to support the xdm style
831 ++ * -nodaemon option
832 ++ */
833 ++ for (i = 0; i < argc; i++) {
834 ++ if (strcmp (argv[i], "-nodaemon") == 0)
835 ++ argv[i] = "--nodaemon";
836 ++ }
837 ++
838 + context = g_option_context_new (_("GNOME Display Manager"));
839 + g_option_context_add_main_entries (context, entries, NULL);
840 + g_option_context_set_ignore_unknown_options (context, TRUE);
841 +@@ -465,6 +493,33 @@ main (int argc,
842 + g_log_set_always_fatal (fatal_mask);
843 + }
844 +
845 ++ if (!no_daemon) {
846 ++ pid_t pid;
847 ++ if (daemon_retval_init () < 0) {
848 ++ g_warning ("Failed to create pipe");
849 ++ exit (-1);
850 ++ }
851 ++ if ((pid = daemon_fork ()) < 0) {
852 ++ /* Fork failed */
853 ++ daemon_retval_done ();
854 ++ exit (1);
855 ++ } else if (pid) {
856 ++ /* Parent process: wait 20s for daemon_retval_send() in the daemon process */
857 ++ if ((ret = daemon_retval_wait (20)) < 0) {
858 ++ g_warning ("Timed out waiting for daemon process: %s", strerror(errno));
859 ++ exit (255);
860 ++ } else if (ret > 0) {
861 ++ g_warning ("Daemon process returned error code %d", ret);
862 ++ exit (ret);
863 ++ }
864 ++ exit (0);
865 ++ }
866 ++ /* Daemon process */
867 ++ daemon_close_all (-1);
868 ++ /* Start a new process group so that killing the daemon will kill the processes that it spawned */
869 ++ setsid ();
870 ++ }
871 ++
872 + gdm_log_init ();
873 +
874 + settings = gdm_settings_new ();
875 +@@ -519,6 +574,9 @@ main (int argc,
876 + g_timeout_add_seconds (30, (GSourceFunc) timed_exit_cb, main_loop);
877 + }
878 +
879 ++ if (!no_daemon)
880 ++ daemon_retval_send (0);
881 ++
882 + g_main_loop_run (main_loop);
883 +
884 + g_debug ("GDM finished, cleaning up...");
885 +@@ -535,6 +593,8 @@ main (int argc,
886 + ret = 0;
887 +
888 + out:
889 ++ if (!no_daemon)
890 ++ daemon_retval_send (ret);
891 +
892 + return ret;
893 + }
894 +--
895 +1.7.12
896 +
897
898 diff --git a/gnome-base/gdm/files/gdm-3.6.0-selinux-automagic.patch b/gnome-base/gdm/files/gdm-3.6.0-selinux-automagic.patch
899 new file mode 100644
900 index 0000000..035d0fa
901 --- /dev/null
902 +++ b/gnome-base/gdm/files/gdm-3.6.0-selinux-automagic.patch
903 @@ -0,0 +1,31 @@
904 +From 8f9bf7b053fc7a6c2e5b33fc43c168ba7250cb98 Mon Sep 17 00:00:00 2001
905 +From: Alexandre Rostovtsev <tetromino@g.o>
906 +Date: Tue, 25 Sep 2012 17:38:37 -0400
907 +Subject: [PATCH] configure: Make selinux check non-automagic
908 +
909 +---
910 + configure.ac | 6 +++++-
911 + 1 file changed, 5 insertions(+), 1 deletion(-)
912 +
913 +diff --git a/configure.ac b/configure.ac
914 +index 80a1fd4..61a43d6 100644
915 +--- a/configure.ac
916 ++++ b/configure.ac
917 +@@ -142,9 +142,13 @@ AC_SUBST(UPOWER)
918 + AC_SUBST(UPOWER_CFLAGS)
919 + AC_SUBST(UPOWER_LIBS)
920 +
921 ++AC_ARG_WITH(selinux,
922 ++ AS_HELP_STRING([--with-selinux],
923 ++ [Add SELinux support]))
924 ++
925 + PKG_CHECK_MODULES(LIBSELINUX, libselinux, have_selinux=yes, have_selinux=no)
926 +
927 +-if test "x$have_selinux" = "xyes" ; then
928 ++if test "x$have_selinux" = "xyes" && test "x$with_selinux" != "xno" ; then
929 + AC_DEFINE(HAVE_SELINUX, 1, [Define if have selinux])
930 + fi
931 + AC_SUBST(LIBSELINUX_CFLAGS)
932 +--
933 +1.7.12
934 +
935
936 diff --git a/gnome-base/gdm/gdm-3.5.92.1.ebuild b/gnome-base/gdm/gdm-3.6.0.ebuild
937 similarity index 84%
938 rename from gnome-base/gdm/gdm-3.5.92.1.ebuild
939 rename to gnome-base/gdm/gdm-3.6.0.ebuild
940 index 1aa6515..8beba36 100644
941 --- a/gnome-base/gdm/gdm-3.5.92.1.ebuild
942 +++ b/gnome-base/gdm/gdm-3.6.0.ebuild
943 @@ -10,12 +10,16 @@ if [[ ${PV} = 9999 ]]; then
944 inherit gnome2-live
945 fi
946
947 +G_PV="2012.09.25"
948 +G_P="gdm-gentoo-${G_PV}"
949 DESCRIPTION="GNOME Display Manager"
950 HOMEPAGE="https://live.gnome.org/GDM"
951 +SRC_URI="${SRC_URI}
952 + http://dev.gentoo.org/~tetromino/distfiles/${PN}/${G_P}.tar.xz"
953
954 LICENSE="GPL-2"
955 SLOT="0"
956 -IUSE="accessibility audit +consolekit +fallback fprint +gnome-shell gnome-keyring +introspection ipv6 ldap plymouth smartcard systemd tcpd test xinerama"
957 +IUSE="accessibility audit +consolekit +fallback fprint +gnome-shell +introspection ipv6 ldap plymouth selinux smartcard systemd tcpd test xinerama"
958 if [[ ${PV} = 9999 ]]; then
959 KEYWORDS=""
960 else
961 @@ -26,6 +30,7 @@ fi
962 # nspr used by smartcard extension
963 # dconf, dbus and g-s-d are needed at install time for dconf update
964 # selinux support is now automagic. Not sure if that really matters.
965 +# libdaemon needed for our fix-daemonize-regression.patch
966 COMMON_DEPEND="
967 >=dev-libs/glib-2.33.2:2
968 >=x11-libs/gtk+-2.91.1:3
969 @@ -56,21 +61,25 @@ COMMON_DEPEND="
970 x11-apps/sessreg
971
972 virtual/pam
973 - consolekit? ( sys-auth/consolekit )
974 + sys-auth/pambase[consolekit?,systemd?]
975 +
976 + dev-libs/libdaemon
977
978 accessibility? ( x11-libs/libXevie )
979 audit? ( sys-process/audit )
980 - gnome-keyring? ( >=gnome-base/gnome-keyring-2.22[pam] )
981 + consolekit? ( sys-auth/consolekit[pam] )
982 introspection? ( >=dev-libs/gobject-introspection-0.9.12 )
983 plymouth? ( sys-boot/plymouth )
984 - systemd? ( >=sys-apps/systemd-39 )
985 + selinux? ( sys-libs/libselinux )
986 + systemd? ( >=sys-apps/systemd-39[pam] )
987 tcpd? ( >=sys-apps/tcp-wrappers-7.6 )
988 xinerama? ( x11-libs/libXinerama )"
989 # XXX: These deps are from session and desktop files in data/ directory
990 # at-spi:1 is needed for at-spi-registryd (spawned by simple-chooser)
991 # fprintd is used via dbus by gdm-fingerprint-extension
992 +# gnome-session-3.6 needed to avoid freezing with orca
993 RDEPEND="${COMMON_DEPEND}
994 - >=gnome-base/gnome-session-2.91.92
995 + >=gnome-base/gnome-session-3.6
996 x11-apps/xhost
997 x11-themes/gnome-icon-theme-symbolic
998
999 @@ -109,8 +118,6 @@ fi
1000 pkg_setup() {
1001 DOCS="AUTHORS ChangeLog NEWS README TODO"
1002
1003 - # SELinux support is automagic for some reason
1004 - #
1005 # PAM is the only auth scheme supported
1006 # even though configure lists shadow and crypt
1007 # they don't have any corresponding code.
1008 @@ -130,6 +137,7 @@ pkg_setup() {
1009 $(use_enable ipv6)
1010 $(use_with consolekit console-kit)
1011 $(use_with plymouth)
1012 + $(use_with selinux)
1013 $(use_with systemd)
1014 $(use_with tcpd tcp-wrappers)
1015 $(use_with xinerama)"
1016 @@ -156,12 +164,18 @@ src_prepare() {
1017 # XXX: We can now pass a hard-coded initial value; temporary fix
1018 #epatch "${FILESDIR}/${PN}-2.32.0-fix-vt-problems.patch"
1019
1020 + # daemonize so that the boot process can continue, bug #236701
1021 + epatch "${FILESDIR}/${PN}-3.6.0-fix-daemonize-regression.patch"
1022 +
1023 # make custom session work, bug #216984
1024 epatch "${FILESDIR}/${PN}-3.2.1.1-custom-session.patch"
1025
1026 # ssh-agent handling must be done at xinitrc.d, bug #220603
1027 epatch "${FILESDIR}/${PN}-2.32.0-xinitrc-ssh-agent.patch"
1028
1029 + # automagic selinux :/
1030 + epatch "${FILESDIR}/${PN}-3.6.0-selinux-automagic.patch"
1031 +
1032 # don't load accessibility support at runtime when USE=-accessibility
1033 use accessibility || epatch "${FILESDIR}/${PN}-3.3.92.1-disable-accessibility.patch"
1034
1035 @@ -183,36 +197,21 @@ src_prepare() {
1036 src_install() {
1037 gnome2_src_install
1038
1039 - # Install the systemd unit file
1040 - systemd_dounit "${FILESDIR}/3.4.1/gdm.service"
1041 -
1042 - # Install a shell script that runs gdm-binary in the background
1043 - cp "${FILESDIR}/gdm.sh" "${ED}/usr/sbin/gdm"
1044 - chmod 755 "${ED}/usr/sbin/gdm"
1045 # our x11's scripts point to /usr/bin/gdm
1046 - ln -sfn /usr/sbin/gdm "${ED}/usr/bin/gdm"
1047 + dosym /usr/sbin/gdm-binary /usr/bin/gdm
1048
1049 # log, etc.
1050 keepdir /var/log/gdm
1051
1052 - # add xinitrc.d scripts
1053 - exeinto /etc/X11/xinit/xinitrc.d
1054 - newexe "${FILESDIR}/49-keychain-r1" 49-keychain
1055 - newexe "${FILESDIR}/50-ssh-agent-r1" 50-ssh-agent
1056 -
1057 # install XDG_DATA_DIRS gdm changes
1058 echo 'XDG_DATA_DIRS="/usr/share/gdm"' > 99xdg-gdm
1059 doenvd 99xdg-gdm
1060
1061 - # install PAM files
1062 - mkdir "${T}/pam.d" || die "mkdir failed"
1063 - cp "${FILESDIR}/3.4.1"/gdm{,-autologin,-password,-fingerprint,-smartcard} \
1064 - "${T}/pam.d" || die "cp failed"
1065 - cp "${FILESDIR}/3.4.1/gdm-welcome" "${T}/pam.d/gdm-launch-environment" || die "cp failed"
1066 - use gnome-keyring && sed -i "s:#Keyring=::g" "${T}/pam.d"/*
1067 - use ldap && sed -i "s:#LDAP=::g" "${T}/pam.d"/*
1068 - use systemd && sed -i "s:#Systemd=::g" "${T}/pam.d"/*
1069 - dopamd "${T}/pam.d"/*
1070 + cd "${WORKDIR}/${G_P}"
1071 + local LDAP
1072 + use ldap && LDAP=yes
1073 + emake GDM_WELCOME="gdm-launch-environment" LDAP=${LDAP} EPREFIX="${EPREFIX}" \
1074 + SYSTEMD_UNITDIR="$(systemd_get_unitdir)" DESTDIR="${D}" install
1075 }
1076
1077 pkg_postinst() {
1078 @@ -236,9 +235,12 @@ pkg_postinst() {
1079 elog "the pam_env man page for more information."
1080 elog
1081
1082 - if use gnome-keyring; then
1083 - elog "For autologin to unlock your keyring, you need to set an empty"
1084 - elog "password on your keyring. Use app-crypt/seahorse for that."
1085 + if has_version sys-auth/pambase[gnome-keyring]; then
1086 + elog "For passwordless login to unlock your keyring, you need to set an"
1087 + elog "empty password on your keyring. Use app-crypt/seahorse for that."
1088 + else
1089 + elog "To unlock your keyring on login, install sys-auth/pambase"
1090 + elog "with USE=gnome-keyring"
1091 fi
1092
1093 if [[ -f "/etc/X11/gdm/gdm.conf" ]]; then
1094
1095 diff --git a/gnome-base/gdm/gdm-9999.ebuild b/gnome-base/gdm/gdm-9999.ebuild
1096 index 1aa6515..8beba36 100644
1097 --- a/gnome-base/gdm/gdm-9999.ebuild
1098 +++ b/gnome-base/gdm/gdm-9999.ebuild
1099 @@ -10,12 +10,16 @@ if [[ ${PV} = 9999 ]]; then
1100 inherit gnome2-live
1101 fi
1102
1103 +G_PV="2012.09.25"
1104 +G_P="gdm-gentoo-${G_PV}"
1105 DESCRIPTION="GNOME Display Manager"
1106 HOMEPAGE="https://live.gnome.org/GDM"
1107 +SRC_URI="${SRC_URI}
1108 + http://dev.gentoo.org/~tetromino/distfiles/${PN}/${G_P}.tar.xz"
1109
1110 LICENSE="GPL-2"
1111 SLOT="0"
1112 -IUSE="accessibility audit +consolekit +fallback fprint +gnome-shell gnome-keyring +introspection ipv6 ldap plymouth smartcard systemd tcpd test xinerama"
1113 +IUSE="accessibility audit +consolekit +fallback fprint +gnome-shell +introspection ipv6 ldap plymouth selinux smartcard systemd tcpd test xinerama"
1114 if [[ ${PV} = 9999 ]]; then
1115 KEYWORDS=""
1116 else
1117 @@ -26,6 +30,7 @@ fi
1118 # nspr used by smartcard extension
1119 # dconf, dbus and g-s-d are needed at install time for dconf update
1120 # selinux support is now automagic. Not sure if that really matters.
1121 +# libdaemon needed for our fix-daemonize-regression.patch
1122 COMMON_DEPEND="
1123 >=dev-libs/glib-2.33.2:2
1124 >=x11-libs/gtk+-2.91.1:3
1125 @@ -56,21 +61,25 @@ COMMON_DEPEND="
1126 x11-apps/sessreg
1127
1128 virtual/pam
1129 - consolekit? ( sys-auth/consolekit )
1130 + sys-auth/pambase[consolekit?,systemd?]
1131 +
1132 + dev-libs/libdaemon
1133
1134 accessibility? ( x11-libs/libXevie )
1135 audit? ( sys-process/audit )
1136 - gnome-keyring? ( >=gnome-base/gnome-keyring-2.22[pam] )
1137 + consolekit? ( sys-auth/consolekit[pam] )
1138 introspection? ( >=dev-libs/gobject-introspection-0.9.12 )
1139 plymouth? ( sys-boot/plymouth )
1140 - systemd? ( >=sys-apps/systemd-39 )
1141 + selinux? ( sys-libs/libselinux )
1142 + systemd? ( >=sys-apps/systemd-39[pam] )
1143 tcpd? ( >=sys-apps/tcp-wrappers-7.6 )
1144 xinerama? ( x11-libs/libXinerama )"
1145 # XXX: These deps are from session and desktop files in data/ directory
1146 # at-spi:1 is needed for at-spi-registryd (spawned by simple-chooser)
1147 # fprintd is used via dbus by gdm-fingerprint-extension
1148 +# gnome-session-3.6 needed to avoid freezing with orca
1149 RDEPEND="${COMMON_DEPEND}
1150 - >=gnome-base/gnome-session-2.91.92
1151 + >=gnome-base/gnome-session-3.6
1152 x11-apps/xhost
1153 x11-themes/gnome-icon-theme-symbolic
1154
1155 @@ -109,8 +118,6 @@ fi
1156 pkg_setup() {
1157 DOCS="AUTHORS ChangeLog NEWS README TODO"
1158
1159 - # SELinux support is automagic for some reason
1160 - #
1161 # PAM is the only auth scheme supported
1162 # even though configure lists shadow and crypt
1163 # they don't have any corresponding code.
1164 @@ -130,6 +137,7 @@ pkg_setup() {
1165 $(use_enable ipv6)
1166 $(use_with consolekit console-kit)
1167 $(use_with plymouth)
1168 + $(use_with selinux)
1169 $(use_with systemd)
1170 $(use_with tcpd tcp-wrappers)
1171 $(use_with xinerama)"
1172 @@ -156,12 +164,18 @@ src_prepare() {
1173 # XXX: We can now pass a hard-coded initial value; temporary fix
1174 #epatch "${FILESDIR}/${PN}-2.32.0-fix-vt-problems.patch"
1175
1176 + # daemonize so that the boot process can continue, bug #236701
1177 + epatch "${FILESDIR}/${PN}-3.6.0-fix-daemonize-regression.patch"
1178 +
1179 # make custom session work, bug #216984
1180 epatch "${FILESDIR}/${PN}-3.2.1.1-custom-session.patch"
1181
1182 # ssh-agent handling must be done at xinitrc.d, bug #220603
1183 epatch "${FILESDIR}/${PN}-2.32.0-xinitrc-ssh-agent.patch"
1184
1185 + # automagic selinux :/
1186 + epatch "${FILESDIR}/${PN}-3.6.0-selinux-automagic.patch"
1187 +
1188 # don't load accessibility support at runtime when USE=-accessibility
1189 use accessibility || epatch "${FILESDIR}/${PN}-3.3.92.1-disable-accessibility.patch"
1190
1191 @@ -183,36 +197,21 @@ src_prepare() {
1192 src_install() {
1193 gnome2_src_install
1194
1195 - # Install the systemd unit file
1196 - systemd_dounit "${FILESDIR}/3.4.1/gdm.service"
1197 -
1198 - # Install a shell script that runs gdm-binary in the background
1199 - cp "${FILESDIR}/gdm.sh" "${ED}/usr/sbin/gdm"
1200 - chmod 755 "${ED}/usr/sbin/gdm"
1201 # our x11's scripts point to /usr/bin/gdm
1202 - ln -sfn /usr/sbin/gdm "${ED}/usr/bin/gdm"
1203 + dosym /usr/sbin/gdm-binary /usr/bin/gdm
1204
1205 # log, etc.
1206 keepdir /var/log/gdm
1207
1208 - # add xinitrc.d scripts
1209 - exeinto /etc/X11/xinit/xinitrc.d
1210 - newexe "${FILESDIR}/49-keychain-r1" 49-keychain
1211 - newexe "${FILESDIR}/50-ssh-agent-r1" 50-ssh-agent
1212 -
1213 # install XDG_DATA_DIRS gdm changes
1214 echo 'XDG_DATA_DIRS="/usr/share/gdm"' > 99xdg-gdm
1215 doenvd 99xdg-gdm
1216
1217 - # install PAM files
1218 - mkdir "${T}/pam.d" || die "mkdir failed"
1219 - cp "${FILESDIR}/3.4.1"/gdm{,-autologin,-password,-fingerprint,-smartcard} \
1220 - "${T}/pam.d" || die "cp failed"
1221 - cp "${FILESDIR}/3.4.1/gdm-welcome" "${T}/pam.d/gdm-launch-environment" || die "cp failed"
1222 - use gnome-keyring && sed -i "s:#Keyring=::g" "${T}/pam.d"/*
1223 - use ldap && sed -i "s:#LDAP=::g" "${T}/pam.d"/*
1224 - use systemd && sed -i "s:#Systemd=::g" "${T}/pam.d"/*
1225 - dopamd "${T}/pam.d"/*
1226 + cd "${WORKDIR}/${G_P}"
1227 + local LDAP
1228 + use ldap && LDAP=yes
1229 + emake GDM_WELCOME="gdm-launch-environment" LDAP=${LDAP} EPREFIX="${EPREFIX}" \
1230 + SYSTEMD_UNITDIR="$(systemd_get_unitdir)" DESTDIR="${D}" install
1231 }
1232
1233 pkg_postinst() {
1234 @@ -236,9 +235,12 @@ pkg_postinst() {
1235 elog "the pam_env man page for more information."
1236 elog
1237
1238 - if use gnome-keyring; then
1239 - elog "For autologin to unlock your keyring, you need to set an empty"
1240 - elog "password on your keyring. Use app-crypt/seahorse for that."
1241 + if has_version sys-auth/pambase[gnome-keyring]; then
1242 + elog "For passwordless login to unlock your keyring, you need to set an"
1243 + elog "empty password on your keyring. Use app-crypt/seahorse for that."
1244 + else
1245 + elog "To unlock your keyring on login, install sys-auth/pambase"
1246 + elog "with USE=gnome-keyring"
1247 fi
1248
1249 if [[ -f "/etc/X11/gdm/gdm.conf" ]]; then