summaryrefslogtreecommitdiff
path: root/testing/gdm
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2011-10-20 23:14:58 +0000
committerroot <root@rshg054.dnsready.net>2011-10-20 23:14:58 +0000
commit1b21445a8e9097b0bb0542ed847fbb1eb832848f (patch)
treede9d1c80c9330efe48f043d8c6cc059ad5640151 /testing/gdm
parent1a136cf48dd7f710f38ff998182508f5a0d41c35 (diff)
Thu Oct 20 23:14:58 UTC 2011
Diffstat (limited to 'testing/gdm')
-rw-r--r--testing/gdm/PKGBUILD66
-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.install31
-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..03c4713e4
--- /dev/null
+++ b/testing/gdm/PKGBUILD
@@ -0,0 +1,66 @@
+# $Id: PKGBUILD 140814 2011-10-19 17:08:25Z heftig $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=gdm
+pkgver=3.2.1.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')
+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=('85a1383f93870fb5d47a938cc2e04b6f0d74cb611a2b5d94d9651b78a5ccffbd'
+ '2014ae3a6077546f7c07e80a6acc8a1c80c6765ad319ec389f52500c5a4fb363'
+ '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
+ 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 GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="${pkgdir}" install
+ install -m755 -d "${pkgdir}/usr/share/gconf/schemas"
+ gconf-merge-schema "${pkgdir}/usr/share/gconf/schemas/${pkgname}.schemas" --domain gdm ${pkgdir}/etc/gconf/schemas/*.schemas
+
+ 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" "${pkgdir}/etc/gconf"
+}
diff --git a/testing/gdm/fix_external_program_directories.patch b/testing/gdm/fix_external_program_directories.patch
new file mode 100644
index 000000000..997ea5405
--- /dev/null
+++ b/testing/gdm/fix_external_program_directories.patch
@@ -0,0 +1,34 @@
+diff -Nur gdm-3.2.0.orig/daemon/gdm-server.c gdm-3.2.0/daemon/gdm-server.c
+--- gdm-3.2.0.orig/daemon/gdm-server.c 2011-10-02 01:13:37.772372528 +0000
++++ gdm-3.2.0/daemon/gdm-server.c 2011-10-02 01:14:58.036444496 +0000
+@@ -131,7 +131,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.2.0.orig/data/gdm-shell.session.in gdm-3.2.0/data/gdm-shell.session.in
+--- gdm-3.2.0.orig/data/gdm-shell.session.in 2011-10-02 01:17:01.394246573 +0000
++++ gdm-3.2.0/data/gdm-shell.session.in 2011-10-02 01:16:22.210552560 +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.2.0.orig/gui/simple-chooser/gdm-chooser-session.c gdm-3.2.0/gui/simple-chooser/gdm-chooser-session.c
+--- gdm-3.2.0.orig/gui/simple-chooser/gdm-chooser-session.c 2011-10-02 01:13:37.775705892 +0000
++++ gdm-3.2.0/gui/simple-chooser/gdm-chooser-session.c 2011-10-02 01:14:58.036444496 +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..fda42d319
--- /dev/null
+++ b/testing/gdm/gdm.install
@@ -0,0 +1,31 @@
+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
+
+ gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
+ gconfpkg --install ${pkgname}
+ glib-compile-schemas usr/share/glib-2.0/schemas
+ dconf update
+}
+
+pre_remove() {
+ 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