summaryrefslogtreecommitdiff
path: root/testing/gdm
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-04-03 00:01:35 +0000
committerroot <root@rshg054.dnsready.net>2012-04-03 00:01:35 +0000
commitc7cb603f86b4d4fb6567e3faa15b916a306f7004 (patch)
treebfdbca0002d6aeecc13f29a1c14d3991e6e93d4c /testing/gdm
parent321f44e3a5da426309c4b6664af035c97f907565 (diff)
Tue Apr 3 00:01:35 UTC 2012
Diffstat (limited to 'testing/gdm')
-rw-r--r--testing/gdm/PKGBUILD67
-rw-r--r--testing/gdm/fix_external_program_directories.patch34
-rwxr-xr-xtesting/gdm/gdm36
-rw-r--r--testing/gdm/gdm-autologin.pam18
-rw-r--r--testing/gdm/gdm-fingerprint.pam18
-rw-r--r--testing/gdm/gdm-password.pam20
-rw-r--r--testing/gdm/gdm-smartcard.pam18
-rw-r--r--testing/gdm/gdm-vt-allocation-hack.patch118
-rw-r--r--testing/gdm/gdm-welcome.pam12
-rw-r--r--testing/gdm/gdm.install30
-rw-r--r--testing/gdm/gdm.pam10
11 files changed, 381 insertions, 0 deletions
diff --git a/testing/gdm/PKGBUILD b/testing/gdm/PKGBUILD
new file mode 100644
index 000000000..5fab71d9c
--- /dev/null
+++ b/testing/gdm/PKGBUILD
@@ -0,0 +1,67 @@
+# $Id: PKGBUILD 155078 2012-04-01 11:32:19Z heftig $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=gdm
+pkgver=3.4.0.1
+pkgrel=1
+pkgdesc="Gnome Display Manager (a reimplementation of xdm)"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://www.gnome.org"
+backup=('etc/pam.d/gdm-autologin' 'etc/pam.d/gdm-fingerprint' 'etc/pam.d/gdm' 'etc/pam.d/gdm-password'
+ 'etc/pam.d/gdm-smartcard' 'etc/pam.d/gdm-welcome' 'etc/gdm/custom.conf')
+groups=('gnome-extra')
+options=('!libtool')
+depends=('libcanberra' 'libxklavier' 'gnome-session' 'gnome-settings-daemon' 'metacity' 'upower' 'accountsservice' 'consolekit' 'xorg-xrdb' 'nss')
+makedepends=('intltool' 'gnome-doc-utils' 'xorg-server' 'gobject-introspection')
+optdepends=('gnome-shell: new login interface'
+ 'fprintd: fingerprint authentication')
+install=gdm.install
+source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver:0:3}/$pkgname-$pkgver.tar.xz
+ fix_external_program_directories.patch
+ gdm-vt-allocation-hack.patch
+ gdm
+ gdm-autologin.pam gdm-fingerprint.pam gdm.pam gdm-password.pam gdm-smartcard.pam gdm-welcome.pam)
+sha256sums=('08686e32f35f65fc5578b48db802fc5e5ca4ca3c3adbbe0d2488ddc1c6f279cd'
+ 'f68600ccf80f475deb417d58ab3306c4a1ba4622688e2901996c8549c85a9ee6'
+ '3c8b588d4af08d94dc93bcd5e4c2a983c3f4fbbbe40833bceac2a1df4f1e8215'
+ '272c08d8e8b50bf424d0705ac864d4c18c47ec4f6893b1af732c2efbc86c9550'
+ 'b30dfa217718b43ff3aa4e8af08985963175b79ff30698ec54e8396d2905922d'
+ '5bc3ff3ea7b31219dfcb7d9fc0eb2819eca1c5573a0f426d288a17560a69633e'
+ 'f1dfa4d88288d4b0a631a68a51b46c2da537bee8fe5a99f9f288c8ff75a50b19'
+ '92aded0804bad8a609fd150448ad4a2edb8166c17cb4e2b581559e80603bbb6c'
+ 'df74b0dcfb17ea43cc1e268a27cd256c552672457db1af40b285452d16b3e2fd'
+ '39bf3824cc505043dc3136356da16dab9df9f369f1077435a324be2ac16cf834')
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+ patch -Np1 -i "$srcdir/fix_external_program_directories.patch"
+ patch -Np1 -i "$srcdir/gdm-vt-allocation-hack.patch"
+
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --libexecdir=/usr/lib/gdm \
+ --localstatedir=/var \
+ --with-at-spi-registryd-directory=/usr/lib/at-spi2-core \
+ --disable-scrollkeeper \
+ --disable-static \
+ --without-tcp-wrappers \
+ --disable-schemas-compile \
+ --with-systemd=no
+ sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/ func_append compile_command " -Wl,-O1,--as-needed"\n func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool
+ make
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
+
+ for i in gdm-autologin.pam gdm-fingerprint.pam gdm.pam gdm-password.pam gdm-smartcard.pam gdm-welcome.pam;do
+ install -m644 "$srcdir/$i" "$pkgdir/etc/pam.d/${i%.pam}"
+ done
+
+ install -Dm755 "${srcdir}/gdm" "${pkgdir}/etc/rc.d/gdm"
+
+ chmod 1770 "$pkgdir/var/log/gdm"
+ chmod 700 "$pkgdir/var/lib/gdm/.config/dconf"
+ rm -rf "$pkgdir/var/run" "$pkgdir/var/gdm"
+}
diff --git a/testing/gdm/fix_external_program_directories.patch b/testing/gdm/fix_external_program_directories.patch
new file mode 100644
index 000000000..b3a0f0cf6
--- /dev/null
+++ b/testing/gdm/fix_external_program_directories.patch
@@ -0,0 +1,34 @@
+diff -Nur gdm-3.3.92.orig/daemon/gdm-server.c gdm-3.3.92/daemon/gdm-server.c
+--- gdm-3.3.92.orig/daemon/gdm-server.c 2012-03-19 22:30:05.311490006 +0000
++++ gdm-3.3.92/daemon/gdm-server.c 2012-03-19 22:30:17.004732251 +0000
+@@ -139,7 +139,7 @@
+ g_return_val_if_fail (GDM_IS_SERVER (server), NULL);
+
+ error = NULL;
+- command = g_strdup_printf (LIBEXECDIR "/ck-get-x11-display-device --display %s",
++ command = g_strdup_printf ("/usr/lib/ConsoleKit/ck-get-x11-display-device --display %s",
+ server->priv->display_name);
+
+ g_debug ("GdmServer: Running helper %s", command);
+diff -Nur gdm-3.3.92.orig/data/gdm-shell.session.in gdm-3.3.92/data/gdm-shell.session.in
+--- gdm-3.3.92.orig/data/gdm-shell.session.in 2012-03-19 22:30:05.311490006 +0000
++++ gdm-3.3.92/data/gdm-shell.session.in 2012-03-19 22:30:17.004732251 +0000
+@@ -1,5 +1,5 @@
+ [GNOME Session]
+ Name=Display Manager
+ RequiredComponents=gnome-shell;gnome-settings-daemon;
+-IsRunnableHelper=bash -c 'gnome-shell --help | grep -q gdm-mode && @libexecdir@/gnome-session-check-accelerated'
++IsRunnableHelper=bash -c 'gnome-shell --help | grep -q gdm-mode && /usr/lib/gnome-session/gnome-session-check-accelerated'
+ FallbackSession=gdm-fallback
+diff -Nur gdm-3.3.92.orig/gui/simple-chooser/gdm-chooser-session.c gdm-3.3.92/gui/simple-chooser/gdm-chooser-session.c
+--- gdm-3.3.92.orig/gui/simple-chooser/gdm-chooser-session.c 2012-03-19 22:30:05.304823391 +0000
++++ gdm-3.3.92/gui/simple-chooser/gdm-chooser-session.c 2012-03-19 22:30:17.004732251 +0000
+@@ -131,7 +131,7 @@
+ ret = FALSE;
+
+ error = NULL;
+- g_spawn_command_line_async (LIBEXECDIR "/gnome-settings-daemon", &error);
++ g_spawn_command_line_async ("/usr/lib/gnome-settings-daemon/gnome-settings-daemon", &error);
+ if (error != NULL) {
+ g_warning ("Error starting settings daemon: %s", error->message);
+ g_error_free (error);
diff --git a/testing/gdm/gdm b/testing/gdm/gdm
new file mode 100755
index 000000000..c3e635a6d
--- /dev/null
+++ b/testing/gdm/gdm
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case "$1" in
+ start)
+ stat_busy "Starting GDM"
+ /usr/sbin/gdm &
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+
+ add_daemon gdm
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping GDM"
+ [ -f /var/run/gdm.pid ] && kill `cat /var/run/gdm.pid` &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon gdm
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 2
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/testing/gdm/gdm-autologin.pam b/testing/gdm/gdm-autologin.pam
new file mode 100644
index 000000000..c77c78917
--- /dev/null
+++ b/testing/gdm/gdm-autologin.pam
@@ -0,0 +1,18 @@
+#%PAM-1.0
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth requisite pam_permit.so
+
+auth sufficient pam_succeed_if.so uid >= 1000 quiet
+auth required pam_deny.so
+
+account required pam_unix.so
+
+password required pam_deny.so
+
+session required pam_loginuid.so
+-session optional pam_systemd.so
+session optional pam_keyinit.so revoke
+session required pam_limits.so
+session required pam_unix.so
diff --git a/testing/gdm/gdm-fingerprint.pam b/testing/gdm/gdm-fingerprint.pam
new file mode 100644
index 000000000..5b74bf6d6
--- /dev/null
+++ b/testing/gdm/gdm-fingerprint.pam
@@ -0,0 +1,18 @@
+#%PAM-1.0
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth requisite pam_fprintd.so
+
+auth sufficient pam_succeed_if.so uid >= 1000 quiet
+auth required pam_deny.so
+
+account required pam_unix.so
+
+password required pam_deny.so
+
+session required pam_loginuid.so
+-session optional pam_systemd.so
+session optional pam_keyinit.so revoke
+session required pam_limits.so
+session required pam_unix.so
diff --git a/testing/gdm/gdm-password.pam b/testing/gdm/gdm-password.pam
new file mode 100644
index 000000000..aa4d4dd47
--- /dev/null
+++ b/testing/gdm/gdm-password.pam
@@ -0,0 +1,20 @@
+#%PAM-1.0
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth requisite pam_unix.so nullok
+auth optional pam_gnome_keyring.so
+
+auth sufficient pam_succeed_if.so uid >= 1000 quiet
+auth required pam_deny.so
+
+account required pam_unix.so
+
+password required pam_unix.so
+
+session required pam_loginuid.so
+-session optional pam_systemd.so
+session optional pam_keyinit.so force revoke
+session required pam_limits.so
+session required pam_unix.so
+session optional pam_gnome_keyring.so auto_start
diff --git a/testing/gdm/gdm-smartcard.pam b/testing/gdm/gdm-smartcard.pam
new file mode 100644
index 000000000..baacb8bed
--- /dev/null
+++ b/testing/gdm/gdm-smartcard.pam
@@ -0,0 +1,18 @@
+#%PAM-1.0
+auth requisite pam_nologin.so
+auth required pam_env.so
+
+auth requisite pam_pkcs11.so wait_for_card card_only
+
+auth sufficient pam_succeed_if.so uid >= 1000 quiet
+auth required pam_deny.so
+
+account required pam_unix.so
+
+password required pam_pkcs11.so
+
+session required pam_loginuid.so
+-session optional pam_systemd.so
+session optional pam_keyinit.so revoke
+session required pam_limits.so
+session required pam_unix.so
diff --git a/testing/gdm/gdm-vt-allocation-hack.patch b/testing/gdm/gdm-vt-allocation-hack.patch
new file mode 100644
index 000000000..56fa5a151
--- /dev/null
+++ b/testing/gdm/gdm-vt-allocation-hack.patch
@@ -0,0 +1,118 @@
+diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
+index 39def47..03488fd 100644
+--- a/daemon/gdm-server.c
++++ b/daemon/gdm-server.c
+@@ -33,6 +33,8 @@
+ #include <grp.h>
+ #include <signal.h>
+ #include <sys/resource.h>
++#include <sys/ioctl.h>
++#include <sys/vt.h>
+
+ #include <glib.h>
+ #include <glib/gi18n.h>
+@@ -150,6 +152,92 @@ _gdm_server_query_ck_for_display_device (GdmServer *server)
+ return out;
+ }
+
++#ifndef O_NOCTTY
++# define O_NOCTTY 0
++#endif
++
++static int
++open_vt (int vtno)
++{
++ char *vtname;
++ int fd;
++
++ vtname = g_strdup_printf ("/dev/tty%d", vtno);
++
++ do {
++ errno = 0;
++ fd = open (vtname, O_RDWR | O_NOCTTY, 0);
++ } while (errno == EINTR);
++
++ g_free (vtname);
++ return fd;
++}
++
++static gint
++find_first_probably_free_vt (void)
++{
++ int fd, fdv;
++ int vtno;
++ unsigned short vtmask;
++ struct vt_stat vtstat;
++ guint v_state;
++
++ fdv = -1;
++
++ do {
++ errno = 0;
++ fd = open ("/dev/console", O_WRONLY | O_NOCTTY, 0);
++ } while (errno == EINTR);
++
++ if (fd >= 0) {
++ if (ioctl (fd, VT_GETSTATE, &vtstat) >= 0) {
++ v_state = vtstat.v_state;
++ } else {
++ close (fd);
++ v_state = 0;
++ fd = -1;
++ }
++ } else {
++ v_state = 0;
++ }
++
++ if (fd < 0) {
++ do {
++ errno = 0;
++ fd = open ("/dev/console", O_RDONLY | O_NOCTTY, 0);
++ } while (errno == EINTR);
++
++ if (fd >= 0) {
++ if (ioctl (fd, VT_GETSTATE, &vtstat) >= 0)
++ v_state = vtstat.v_state;
++ }
++ }
++
++ for (vtno = 7, vtmask = 1 << vtno; vtmask; vtno++, vtmask <<= 1) {
++ /* Is this console in use? */
++ if (v_state & vtmask)
++ continue;
++
++ /* No, try to open it */
++ fdv = open_vt (vtno);
++ if (fdv >= 0)
++ break;
++
++ /* If we're here, kernel indicated that the console was free,
++ * but we failed to open it. Just go on to higher VTs. */
++ }
++
++ if (fdv >= 0)
++ close (fdv);
++ else
++ vtno = -1;
++
++ if (fd >= 0)
++ close (fd);
++
++ return vtno;
++}
++
+ char *
+ gdm_server_get_display_device (GdmServer *server)
+ {
+@@ -310,6 +398,11 @@ gdm_server_resolve_command_line (GdmServer *server,
+
+ if (vtarg != NULL && ! gotvtarg) {
+ argv[len++] = g_strdup (vtarg);
++ } else if (!query_in_arglist && !gotvtarg) {
++ gint vtnum = find_first_probably_free_vt ();
++
++ if (vtnum > 0)
++ argv [len++] = g_strdup_printf ("vt%d", vtnum);
+ }
+
+ argv[len++] = NULL;
diff --git a/testing/gdm/gdm-welcome.pam b/testing/gdm/gdm-welcome.pam
new file mode 100644
index 000000000..cc3811c19
--- /dev/null
+++ b/testing/gdm/gdm-welcome.pam
@@ -0,0 +1,12 @@
+#%PAM-1.0
+auth required pam_env.so
+auth required pam_permit.so
+
+account required pam_nologin.so
+account required pam_unix.so
+
+password required pam_deny.so
+
+session required pam_loginuid.so
+-session optional pam_systemd.so
+session optional pam_keyinit.so force revoke
diff --git a/testing/gdm/gdm.install b/testing/gdm/gdm.install
new file mode 100644
index 000000000..c48faf4ae
--- /dev/null
+++ b/testing/gdm/gdm.install
@@ -0,0 +1,30 @@
+pkgname=gdm
+
+post_install() {
+ getent group gdm >/dev/null 2>&1 || groupadd -g 120 gdm
+ getent passwd gdm > /dev/null 2>&1 || usr/sbin/useradd -c 'Gnome Display Manager' -u 120 -g gdm -d /var/lib/gdm -s /sbin/nologin gdm
+ passwd -l gdm > /dev/null
+ chown -R gdm:gdm /var/lib/gdm > /dev/null
+
+ glib-compile-schemas /usr/share/glib-2.0/schemas
+ gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor
+ dconf update
+}
+
+pre_upgrade() {
+ if [ -f /usr/share/gconf/schemas/${pkgname}.schemas ]; then
+ gconfpkg --uninstall ${pkgname}
+ fi
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ glib-compile-schemas /usr/share/glib-2.0/schemas
+ dconf update
+ gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor
+ getent passwd gdm >/dev/null 2>&1 && userdel gdm
+ getent group gdm >/dev/null 2>&1 && groupdel gdm
+}
diff --git a/testing/gdm/gdm.pam b/testing/gdm/gdm.pam
new file mode 100644
index 000000000..655299cb7
--- /dev/null
+++ b/testing/gdm/gdm.pam
@@ -0,0 +1,10 @@
+#%PAM-1.0
+auth requisite pam_nologin.so
+auth required pam_env.so
+auth required pam_unix.so
+auth optional pam_gnome_keyring.so
+account required pam_unix.so
+session required pam_limits.so
+session required pam_unix.so
+session optional pam_gnome_keyring.so auto_start
+password required pam_unix.so