From 301aad188299b268452af6b67261336c88f44ab1 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Wed, 31 Oct 2012 10:35:38 +0000 Subject: * Merge from Ubuntu: - Add support for registering ConsoleKit sessions on login. (This is currently enabled only when building for Ubuntu.) --- monitor.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'monitor.c') diff --git a/monitor.c b/monitor.c index 0f4055e54..a5d1c5ba1 100644 --- a/monitor.c +++ b/monitor.c @@ -97,6 +97,9 @@ #include "ssh2.h" #include "jpake.h" #include "roaming.h" +#ifdef USE_CONSOLEKIT +#include "consolekit.h" +#endif #ifdef GSSAPI static Gssctxt *gsscontext = NULL; @@ -192,6 +195,10 @@ int mm_answer_audit_command(int, Buffer *); static int monitor_read_log(struct monitor *); +#ifdef USE_CONSOLEKIT +int mm_answer_consolekit_register(int, Buffer *); +#endif + static Authctxt *authctxt; static BIGNUM *ssh1_challenge = NULL; /* used for ssh1 rsa auth */ @@ -282,6 +289,9 @@ struct mon_table mon_dispatch_postauth20[] = { #ifdef SSH_AUDIT_EVENTS {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event}, {MONITOR_REQ_AUDIT_COMMAND, MON_PERMIT, mm_answer_audit_command}, +#endif +#ifdef USE_CONSOLEKIT + {MONITOR_REQ_CONSOLEKIT_REGISTER, 0, mm_answer_consolekit_register}, #endif {0, 0, NULL} }; @@ -324,6 +334,9 @@ struct mon_table mon_dispatch_postauth15[] = { #ifdef SSH_AUDIT_EVENTS {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event}, {MONITOR_REQ_AUDIT_COMMAND, MON_PERMIT|MON_ONCE, mm_answer_audit_command}, +#endif +#ifdef USE_CONSOLEKIT + {MONITOR_REQ_CONSOLEKIT_REGISTER, 0, mm_answer_consolekit_register}, #endif {0, 0, NULL} }; @@ -495,6 +508,9 @@ monitor_child_postauth(struct monitor *pmonitor) monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1); monitor_permit(mon_dispatch, MONITOR_REQ_PTYCLEANUP, 1); } +#ifdef USE_CONSOLEKIT + monitor_permit(mon_dispatch, MONITOR_REQ_CONSOLEKIT_REGISTER, 1); +#endif for (;;) monitor_read(pmonitor, mon_dispatch, NULL); @@ -2196,6 +2212,34 @@ mm_answer_gss_sign(int socket, Buffer *m) buffer_put_int(m, major); buffer_put_string(m, hash.value, hash.length); +#ifdef USE_CONSOLEKIT +int +mm_answer_consolekit_register(int sock, Buffer *m) +{ + Session *s; + char *tty, *display; + char *cookie = NULL; + + debug3("%s entering", __func__); + + tty = buffer_get_string(m, NULL); + display = buffer_get_string(m, NULL); + s = session_by_tty(tty); + if (s != NULL) + cookie = consolekit_register(s, display); + buffer_clear(m); + buffer_put_cstring(m, cookie != NULL ? cookie : ""); + mm_request_send(sock, MONITOR_ANS_CONSOLEKIT_REGISTER, m); + + if (cookie != NULL) + xfree(cookie); + xfree(display); + xfree(tty); + + return (0); +} +#endif /* USE_CONSOLEKIT */ + mm_request_send(socket, MONITOR_ANS_GSSSIGN, m); gss_release_buffer(&minor, &hash); -- cgit v1.2.3