123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- http://bugs.gentoo.org/360987
- http://projects.archlinux.org/svntogit/packages.git/plain/trunk/xdm-consolekit.patch?h=packages/xorg-xdm
- http://lists.x.org/archives/xorg-devel/2011-February/019615.html
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=615020
- --- a/configure.ac
- +++ b/configure.ac
- @@ -362,6 +362,20 @@
- 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 -DUSE_CONSOLEKIT"
- + XDM_LIBS="$XDM_LIBS $CK_CONNECTOR_LIBS"
- + fi
- +fi
- +dnl AM_CONDITIONAL(USE_CONSOLEKIT, test$USE_CONSOLEKIT = xyes)
- +
- #
- # XDM
- #
- --- a/xdm/session.c
- +++ b/xdm/session.c
- @@ -66,6 +66,11 @@
- #endif
- #endif /* USE_PAM */
- +#ifdef USE_CONSOLEKIT
- +#include <ck-connector.h>
- +#include <dbus/dbus.h>
- +#endif
- +
- #ifdef __SCO__
- #include <prot.h>
- #endif
- @@ -472,6 +477,97 @@
- }
- }
- +#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)
- {
- @@ -486,6 +580,8 @@
- }
- #endif
- + closeCKSession();
- +
- /* make sure the server gets reset after the session is over */
- if (d->serverPid >= 2 && d->resetSignal)
- kill (d->serverPid, d->resetSignal);
- @@ -568,6 +664,10 @@
- #ifdef USE_PAM
- if (pamh) pam_open_session(pamh, 0);
- #endif
- +
- + if (!openCKSession(verify, d))
- + return 0;
- +
- switch (pid = fork ()) {
- case 0:
- CleanUpChild ();
- --- a/include/dm.h
- +++ b/include/dm.h
- @@ -325,6 +325,9 @@
- extern char *prngdSocket;
- extern int prngdPort;
- # endif
- +#ifdef USE_CONSOLEKIT
- +extern int use_consolekit;
- +#endif
- extern char *greeterLib;
- extern char *willing;
- --- a/xdm/resource.c
- +++ b/xdm/resource.c
- @@ -68,6 +68,9 @@
- char *prngdSocket;
- int prngdPort;
- #endif
- +#ifdef USE_CONSOLEKIT
- +int use_consolekit;
- +#endif
- char *greeterLib;
- char *willing;
- @@ -258,6 +261,10 @@
- "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])
- @@ -440,7 +447,11 @@
- {"-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;
- --- a/man/xdm.man
- +++ b/man/xdm.man
- @@ -51,6 +51,8 @@
- ] [
- .B \-session
- .I session_program
- +] [
- +.B \-noconsolekit
- ]
- .SH DESCRIPTION
- .I Xdm
- @@ -218,6 +220,10 @@
- .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
|