2 configure.ac | 14 ++++++++
4 resource.c | 13 +++++++
5 session.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 5 files changed, 135 insertions(+), 1 deletion(-)
9 Index: xdm-1.1.10/configure.ac
10 ===================================================================
11 diff -urNp -x '*.orig' xdm-1.1.12.org/configure.ac xdm-1.1.12/configure.ac
12 --- xdm-1.1.12.org/configure.ac 2019-03-02 22:06:13.000000000 +0000
13 +++ xdm-1.1.12/configure.ac 2022-04-06 18:25:09.812244306 +0000
14 @@ -429,6 +429,20 @@ AM_CONDITIONAL(HAS_XDM_AUTH, test x$xdma
19 +AC_ARG_WITH(consolekit, AC_HELP_STRING([--with-consolekit], [Use ConsoleKit]),
20 + [USE_CONSOLEKIT=$withval], [USE_CONSOLEKIT=yes])
21 +if test x"$USE_CONSOLEKIT" != xno; then
22 + PKG_CHECK_MODULES(CK_CONNECTOR, ck-connector,
23 + [USE_CONSOLEKIT=yes], [USE_CONSOLEKIT=no])
24 + if test x"$USE_CONSOLEKIT" = xyes; then
25 + AC_DEFINE([USE_CONSOLEKIT], 1, [Define to 1 to use ConsoleKit])
26 + XDM_CFLAGS="$XDM_CFLAGS $CK_CONNECTOR_CFLAGS"
27 + XDM_LIBS="$XDM_LIBS $CK_CONNECTOR_LIBS"
30 +dnl AM_CONDITIONAL(USE_CONSOLEKIT, test$USE_CONSOLEKIT = xyes)
35 diff -urNp -x '*.orig' xdm-1.1.12.org/include/dm.h xdm-1.1.12/include/dm.h
36 --- xdm-1.1.12.org/include/dm.h 2019-03-02 22:06:13.000000000 +0000
37 +++ xdm-1.1.12/include/dm.h 2022-04-06 18:25:09.813244308 +0000
38 @@ -327,6 +327,9 @@ extern char *randomFile;
39 extern char *prngdSocket;
42 +#ifdef USE_CONSOLEKIT
43 +extern int use_consolekit;
46 extern char *greeterLib;
48 diff -urNp -x '*.orig' xdm-1.1.12.org/man/xdm.man xdm-1.1.12/man/xdm.man
49 --- xdm-1.1.12.org/man/xdm.man 2019-03-02 22:06:13.000000000 +0000
50 +++ xdm-1.1.12/man/xdm.man 2022-04-06 18:25:09.813244308 +0000
51 @@ -48,6 +48,8 @@ xdm \- X Display Manager with support fo
60 @@ -215,6 +217,10 @@ indicates the program to run as the sess
61 .IP "\fB\-xrm\fP \fIresource_specification\fP"
62 Allows an arbitrary resource to be specified, as in most
63 X Toolkit applications.
64 +.IP "\fB\-noconsolekit\fP"
65 +Specifies ``false'' as the value for the \fBDisplayManager.consoleKit\fP
67 +This suppresses the session management using ConsoleKit.
69 At many stages the actions of
71 diff -urNp -x '*.orig' xdm-1.1.12.org/xdm/resource.c xdm-1.1.12/xdm/resource.c
72 --- xdm-1.1.12.org/xdm/resource.c 2019-03-02 22:06:13.000000000 +0000
73 +++ xdm-1.1.12/xdm/resource.c 2022-04-06 18:25:09.813244308 +0000
74 @@ -65,6 +65,9 @@ char *randomDevice;
78 +#ifdef USE_CONSOLEKIT
84 @@ -192,6 +195,10 @@ struct dmResources {
86 { "willing", "Willing", DM_STRING, &willing,
88 +#ifdef USE_CONSOLEKIT
89 +{ "consoleKit", "ConsoleKit", DM_BOOL, (char **) &use_consolekit,
94 #define NUM_DM_RESOURCES (sizeof DmResources / sizeof DmResources[0])
95 @@ -377,7 +384,11 @@ XrmOptionDescRec optionTable [] = {
96 {"-debug", "*debugLevel", XrmoptionSepArg, (caddr_t) NULL },
97 {"-xrm", NULL, XrmoptionResArg, (caddr_t) NULL },
98 {"-daemon", ".daemonMode", XrmoptionNoArg, "true" },
99 -{"-nodaemon", ".daemonMode", XrmoptionNoArg, "false" }
100 +{"-nodaemon", ".daemonMode", XrmoptionNoArg, "false" },
101 +#ifdef USE_CONSOLEKIT
102 +{"-consolekit", ".consoleKit", XrmoptionNoArg, "true" },
103 +{"-noconsolekit", ".consoleKit", XrmoptionNoArg, "false" }
107 static int originalArgc;
108 diff -urNp -x '*.orig' xdm-1.1.12.org/xdm/session.c xdm-1.1.12/xdm/session.c
109 --- xdm-1.1.12.org/xdm/session.c 2019-03-02 22:06:13.000000000 +0000
110 +++ xdm-1.1.12/xdm/session.c 2022-04-06 18:25:09.812244306 +0000
111 @@ -73,6 +73,11 @@ extern int key_setnet(struct key_netstar
115 +#ifdef USE_CONSOLEKIT
116 +#include <ck-connector.h>
117 +#include <dbus/dbus.h>
121 #include <selinux/selinux.h>
122 #include <selinux/get_context_list.h>
123 @@ -523,6 +528,97 @@ UnsecureDisplay (struct display *d, Disp
127 +#ifdef USE_CONSOLEKIT
129 +static CkConnector *connector;
131 +static int openCKSession(struct verify_info *verify, struct display *d)
135 + char *remote_host_name = "";
136 + dbus_bool_t is_local;
137 + char *display_name = "";
138 + char *display_device = "";
141 + if (!use_consolekit)
144 + is_local = d->displayType.location == Local;
145 + if (d->peerlen > 0 && d->peer)
146 + remote_host_name = d->peer;
148 + display_name = d->name;
149 + /* how can we get the corresponding tty at best...? */
150 + if (d->windowPath) {
151 + display_device = strchr(d->windowPath, ':');
152 + if (display_device && display_device[1])
155 + display_device = d->windowPath;
156 + snprintf(devtmp, sizeof(devtmp), "/dev/tty%s", display_device);
157 + display_device = devtmp;
160 + connector = ck_connector_new();
162 + LogOutOfMem("ck_connector");
166 + dbus_error_init(&error);
167 + ret = ck_connector_open_session_with_parameters(
169 + "unix-user", &verify->uid,
170 + "x11-display", &display_name,
171 + "x11-display-device", &display_device,
172 + "remote-host-name", &remote_host_name,
173 + "is-local", &is_local,
176 + if (dbus_error_is_set(&error)) {
177 + LogError("Dbus error: %s\n", error.message);
178 + dbus_error_free(&error);
180 + LogError("ConsoleKit error\n");
182 + LogError("console-kit-daemon not running?\n");
183 + ck_connector_unref(connector);
188 + verify->userEnviron = setEnv(verify->userEnviron,
189 + "XDG_SESSION_COOKIE", ck_connector_get_cookie(connector));
193 +static void closeCKSession(void)
200 + dbus_error_init(&error);
201 + if (!ck_connector_close_session(connector, &error)) {
202 + if (dbus_error_is_set(&error)) {
203 + LogError("Dbus error: %s\n", error.message);
204 + dbus_error_free(&error);
206 + LogError("ConsoleKit close error\n");
208 + LogError("console-kit-daemon not running?\n");
210 + ck_connector_unref(connector);
214 +#define openCKSession(v,d) 1
215 +#define closeCKSession()
219 SessionExit (struct display *d, int status, int removeAuth)
221 @@ -537,6 +633,8 @@ SessionExit (struct display *d, int stat
227 /* make sure the server gets reset after the session is over */
228 if (d->serverPid >= 2 && d->resetSignal)
229 kill (d->serverPid, d->resetSignal);
230 @@ -614,6 +712,10 @@ StartClient (
232 if (pamh) pam_open_session(pamh, 0);
235 + if (!openCKSession(verify, d))
238 switch (pid = fork ()) {