Bugzilla – Attachment 311084 Details for
Bug 528829
Missing ConsoleKit support in xdm
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
Patch to add ConsoleKit support to xdm
xdm-consolekit.diff (text/plain), 5.43 KB, created by
Takashi Iwai
on 2009-08-06 13:24:21 UTC
(
hide
)
Description:
Patch to add ConsoleKit support to xdm
Filename:
MIME Type:
Creator:
Takashi Iwai
Created:
2009-08-06 13:24:21 UTC
Size:
5.43 KB
patch
obsolete
>--- > configure.ac | 14 ++++++++ > dm.h | 3 + > resource.c | 13 +++++++ > session.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > xdm.man.cpp | 6 +++ > 5 files changed, 135 insertions(+), 1 deletion(-) > >--- 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" >+ XDM_LIBS="$XDM_LIBS $CK_CONNECTOR_LIBS" >+ fi >+fi >+dnl AM_CONDITIONAL(USE_CONSOLEKIT, test$USE_CONSOLEKIT = xyes) >+ > # > # XDM > # >--- a/session.c >+++ b/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,95 @@ > } > } > >+#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"); >+ } >+ 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"); >+ } >+ } >+ 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/dm.h >+++ b/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/resource.c >+++ b/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/xdm.man.cpp >+++ b/xdm.man.cpp >@@ -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
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 528829
: 311084