]> git.pld-linux.org Git - packages/xorg-app-xdm.git/commitdiff
- use ConsoleKit.
authorkosmo <kosmo@pld-linux.org>
Wed, 22 Dec 2010 18:29:20 +0000 (18:29 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
The pam_ck_connector.so module used by XDM did not register session
in ConsoleKit as XDM does not set PAM evironment variables required
by the module.

Newly introduced xorg-app-xdm-consolekit.patch (taken from OpenSUSE)
adds ConsoleKit support to xdm making pam_ck_connector.so obsolete.

Changed files:
    xdm.pamd -> 1.13
    xorg-app-xdm-consolekit.patch -> 1.1
    xorg-app-xdm.spec -> 1.43

xdm.pamd
xorg-app-xdm-consolekit.patch [new file with mode: 0644]
xorg-app-xdm.spec

index 3cf09efc40c1276544865adf368f6f7c7e057ab9..35969c11570db5f504be9e563dcdf5a6c63935fb 100644 (file)
--- a/xdm.pamd
+++ b/xdm.pamd
@@ -9,4 +9,3 @@ password        include         system-auth
 session                optional        pam_keyinit.so force revoke
 session                include         system-auth
 session                optional        pam_console.so
-session                optional        pam_ck_connector.so
diff --git a/xorg-app-xdm-consolekit.patch b/xorg-app-xdm-consolekit.patch
new file mode 100644 (file)
index 0000000..819f691
--- /dev/null
@@ -0,0 +1,243 @@
+---
+ configure.ac |   14 ++++++++
+ dm.h         |    3 +
+ resource.c   |   13 +++++++
+ session.c    |  100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ xdm.man.cpp  |    6 +++
+ 5 files changed, 135 insertions(+), 1 deletion(-)
+
+Index: xdm-1.1.10/configure.ac
+===================================================================
+--- xdm-1.1.10.orig/configure.ac
++++ xdm-1.1.10/configure.ac
+@@ -434,6 +434,20 @@ fi
+ AM_CONDITIONAL(DYNAMIC_GREETER, test x$DYNAMIC_GREETER = xyes)
++# ConsoleKit support
++AC_ARG_WITH(consolekit, AC_HELP_STRING([--with-consolekit], [Use ConsoleKit]),
++      [USE_CONSOLEKIT=$withval], [USE_CONSOLEKIT=yes])
++if test x"$USE_CONSOLEKIT" != xno; then
++      PKG_CHECK_MODULES(CK_CONNECTOR, ck-connector,
++              [USE_CONSOLEKIT=yes], [USE_CONSOLEKIT=no])
++      if test x"$USE_CONSOLEKIT" = xyes; then
++              AC_DEFINE([USE_CONSOLEKIT], 1, [Define to 1 to use ConsoleKit])
++              XDM_CFLAGS="$XDM_CFLAGS $CK_CONNECTOR_CFLAGS"
++              XDM_LIBS="$XDM_LIBS $CK_CONNECTOR_LIBS"
++      fi
++fi
++dnl AM_CONDITIONAL(USE_CONSOLEKIT, test$USE_CONSOLEKIT = xyes)
++
+ #
+ #  XDM
+ #
+Index: xdm-1.1.10/session.c
+===================================================================
+--- xdm-1.1.10.orig/session.c
++++ xdm-1.1.10/session.c
+@@ -67,6 +67,11 @@ extern int key_setnet(struct key_netstar
+ # endif
+ #endif /* USE_PAM */
++#ifdef USE_CONSOLEKIT
++#include <ck-connector.h>
++#include <dbus/dbus.h>
++#endif
++
+ #ifdef __SCO__
+ # include <prot.h>
+ #endif
+@@ -514,6 +519,97 @@ UnsecureDisplay (struct display *d, Disp
+     }
+ }
++#ifdef USE_CONSOLEKIT
++
++static CkConnector *connector;
++
++static int openCKSession(struct verify_info *verify, struct display *d)
++{
++    int ret;
++    DBusError error;
++    char  *remote_host_name = "";
++    dbus_bool_t is_local;
++    char *display_name = "";
++    char *display_device = "";
++    char devtmp[16];
++
++    if (!use_consolekit)
++      return 1;
++
++    is_local = d->displayType.location == Local;
++    if (d->peerlen > 0 && d->peer)
++      remote_host_name = d->peer;
++    if (d->name)
++      display_name = d->name;
++    /* how can we get the corresponding tty at best...? */
++    if (d->windowPath) {
++      display_device = strchr(d->windowPath, ':');
++      if (display_device && display_device[1])
++          display_device++;
++      else
++          display_device = d->windowPath;
++      snprintf(devtmp, sizeof(devtmp), "/dev/tty%s", display_device);
++      display_device = devtmp;
++    }
++
++    connector = ck_connector_new();
++    if (!connector) {
++      LogOutOfMem("ck_connector");
++      return 0;
++    }
++
++    dbus_error_init(&error);
++    ret = ck_connector_open_session_with_parameters(
++              connector, &error,
++              "unix-user", &verify->uid,
++              "x11-display", &display_name,
++              "x11-display-device", &display_device,
++              "remote-host-name", &remote_host_name,
++              "is-local", &is_local,
++              NULL);
++    if (!ret) {
++      if (dbus_error_is_set(&error)) {
++          LogError("Dbus error: %s\n", error.message);
++          dbus_error_free(&error);
++      } else {
++          LogError("ConsoleKit error\n");
++      }
++      LogError("console-kit-daemon not running?\n");
++      ck_connector_unref(connector);
++      connector = NULL;
++      return 0;
++    }
++
++    verify->userEnviron = setEnv(verify->userEnviron,
++              "XDG_SESSION_COOKIE", ck_connector_get_cookie(connector));
++    return 1;
++}
++
++static void closeCKSession(void)
++{
++    DBusError error;
++
++    if (!connector)
++      return;
++
++    dbus_error_init(&error);
++    if (!ck_connector_close_session(connector, &error)) {
++      if (dbus_error_is_set(&error)) {
++          LogError("Dbus error: %s\n", error.message);
++          dbus_error_free(&error);
++      } else {
++          LogError("ConsoleKit close error\n");
++      }
++      LogError("console-kit-daemon not running?\n");
++    }
++    ck_connector_unref(connector);
++    connector = NULL;
++}
++#else
++#define openCKSession(v,d)    1
++#define closeCKSession()
++#endif
++
+ void
+ SessionExit (struct display *d, int status, int removeAuth)
+ {
+@@ -528,6 +624,8 @@ SessionExit (struct display *d, int stat
+     }
+ #endif
++    closeCKSession();
++
+     /* make sure the server gets reset after the session is over */
+     if (d->serverPid >= 2 && d->resetSignal)
+       kill (d->serverPid, d->resetSignal);
+@@ -610,6 +708,10 @@ StartClient (
+ #ifdef USE_PAM
+     if (pamh) pam_open_session(pamh, 0);
+ #endif
++
++    if (!openCKSession(verify, d))
++      return 0;
++
+     switch (pid = fork ()) {
+     case 0:
+       CleanUpChild ();
+Index: xdm-1.1.10/dm.h
+===================================================================
+--- xdm-1.1.10.orig/dm.h
++++ xdm-1.1.10/dm.h
+@@ -323,6 +323,9 @@ extern char        *randomFile;
+ extern char   *prngdSocket;
+ extern int    prngdPort;
+ # endif
++#ifdef USE_CONSOLEKIT
++extern int    use_consolekit;
++#endif
+ extern char   *greeterLib;
+ extern char   *willing;
+Index: xdm-1.1.10/resource.c
+===================================================================
+--- xdm-1.1.10.orig/resource.c
++++ xdm-1.1.10/resource.c
+@@ -65,6 +65,9 @@ char *randomDevice;
+ char  *prngdSocket;
+ int   prngdPort;
+ #endif
++#ifdef USE_CONSOLEKIT
++int   use_consolekit;
++#endif
+ char  *greeterLib;
+ char  *willing;
+@@ -196,6 +199,10 @@ struct dmResources {
+                               "false"} ,
+ { "willing",  "Willing",      DM_STRING,      &willing,
+                               ""} ,
++#ifdef USE_CONSOLEKIT
++{ "consoleKit",       "ConsoleKit",   DM_BOOL,        (char **) &use_consolekit,
++                              "true"} ,
++#endif
+ };
+ #define NUM_DM_RESOURCES      (sizeof DmResources / sizeof DmResources[0])
+@@ -378,7 +385,11 @@ XrmOptionDescRec optionTable [] = {
+ {"-debug",    "*debugLevel",          XrmoptionSepArg,        (caddr_t) NULL },
+ {"-xrm",      NULL,                   XrmoptionResArg,        (caddr_t) NULL },
+ {"-daemon",   ".daemonMode",          XrmoptionNoArg,         "true"         },
+-{"-nodaemon", ".daemonMode",          XrmoptionNoArg,         "false"        }
++{"-nodaemon", ".daemonMode",          XrmoptionNoArg,         "false"        },
++#ifdef USE_CONSOLEKIT
++{"-consolekit",       ".consoleKit",          XrmoptionNoArg,         "true"  },
++{"-noconsolekit", ".consoleKit",      XrmoptionNoArg,         "false" }
++#endif
+ };
+ static int    originalArgc;
+Index: xdm-1.1.10/xdm.man.cpp
+===================================================================
+--- xdm-1.1.10.orig/xdm.man.cpp
++++ xdm-1.1.10/xdm.man.cpp
+@@ -48,6 +48,8 @@ xdm \- X Display Manager with support fo
+ ] [
+ .B \-session
+ .I session_program
++] [
++.B \-noconsolekit
+ ]
+ .SH DESCRIPTION
+ .I Xdm
+@@ -215,6 +217,10 @@ indicates the program to run as the sess
+ .IP "\fB\-xrm\fP \fIresource_specification\fP"
+ Allows an arbitrary resource to be specified, as in most
+ X Toolkit applications.
++.IP "\fB\-noconsolekit\fP"
++Specifies ``false'' as the value for the \fBDisplayManager.consoleKit\fP
++resource.
++This suppresses the session management using ConsoleKit.
+ .SH RESOURCES
+ At many stages the actions of
+ .I xdm
index dfd4b25ecfe43281417a7eb4234e426aa53bac17..5aaf9e840727da322e5e0dfb7c444ec68ec17032 100644 (file)
@@ -20,8 +20,10 @@ Source4:     xdm.sysconfig
 Patch0:                %{name}-Xsession.patch
 Patch1:                %{name}-pam_tty.patch
 Patch2:                %{name}-config.patch
-Patch3:                %{name}-selinux.patch
+Patch3:                %{name}-consolekit.patch
+Patch4:                %{name}-selinux.patch
 URL:           http://xorg.freedesktop.org/
+BuildRequires: ConsoleKit-devel
 BuildRequires: autoconf >= 2.60
 BuildRequires: automake
 BuildRequires: cpp
@@ -79,6 +81,7 @@ terminali oraz standardem X Consortium XDMCP.
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
 
 %build
 %{__libtoolize}
@@ -93,6 +96,7 @@ terminali oraz standardem X Consortium XDMCP.
        --with-authdir=/var/lib/xdm \
        --with-bw-pixmap=xdm-pld-logo-bw.xpm \
        --with-color-pixmap=xdm-pld-logo.xpm \
+       --with-consolekit \
        --with-default-vt=vt9 \
        --with-pixmapdir=%{_sysconfdir}/X11/xdm/pixmaps \
        --with-selinux \
This page took 0.102464 seconds and 4 git commands to generate.