diff options
author | Colin Watson <cjwatson@ubuntu.com> | 2014-02-09 16:09:57 +0000 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2014-02-09 23:43:40 +0000 |
commit | 05609b1cb381eafb999214bf4a95138e63abdbf2 (patch) | |
tree | f6adc60829e0310ab4fcafca21d7f1b9d62c88c0 /monitor.c | |
parent | 84589dc348c43ec22b50ede0c2946cf6afd0980d (diff) |
Add support for registering ConsoleKit sessions on login
Bug: https://bugzilla.mindrot.org/show_bug.cgi?id=1450
Last-Updated: 2013-09-14
Patch-Name: consolekit.patch
Diffstat (limited to 'monitor.c')
-rw-r--r-- | monitor.c | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -98,6 +98,9 @@ | |||
98 | #include "jpake.h" | 98 | #include "jpake.h" |
99 | #include "roaming.h" | 99 | #include "roaming.h" |
100 | #include "authfd.h" | 100 | #include "authfd.h" |
101 | #ifdef USE_CONSOLEKIT | ||
102 | #include "consolekit.h" | ||
103 | #endif | ||
101 | 104 | ||
102 | #ifdef GSSAPI | 105 | #ifdef GSSAPI |
103 | static Gssctxt *gsscontext = NULL; | 106 | static Gssctxt *gsscontext = NULL; |
@@ -193,6 +196,10 @@ int mm_answer_audit_command(int, Buffer *); | |||
193 | 196 | ||
194 | static int monitor_read_log(struct monitor *); | 197 | static int monitor_read_log(struct monitor *); |
195 | 198 | ||
199 | #ifdef USE_CONSOLEKIT | ||
200 | int mm_answer_consolekit_register(int, Buffer *); | ||
201 | #endif | ||
202 | |||
196 | static Authctxt *authctxt; | 203 | static Authctxt *authctxt; |
197 | static BIGNUM *ssh1_challenge = NULL; /* used for ssh1 rsa auth */ | 204 | static BIGNUM *ssh1_challenge = NULL; /* used for ssh1 rsa auth */ |
198 | 205 | ||
@@ -285,6 +292,9 @@ struct mon_table mon_dispatch_postauth20[] = { | |||
285 | {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event}, | 292 | {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event}, |
286 | {MONITOR_REQ_AUDIT_COMMAND, MON_PERMIT, mm_answer_audit_command}, | 293 | {MONITOR_REQ_AUDIT_COMMAND, MON_PERMIT, mm_answer_audit_command}, |
287 | #endif | 294 | #endif |
295 | #ifdef USE_CONSOLEKIT | ||
296 | {MONITOR_REQ_CONSOLEKIT_REGISTER, 0, mm_answer_consolekit_register}, | ||
297 | #endif | ||
288 | {0, 0, NULL} | 298 | {0, 0, NULL} |
289 | }; | 299 | }; |
290 | 300 | ||
@@ -327,6 +337,9 @@ struct mon_table mon_dispatch_postauth15[] = { | |||
327 | {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event}, | 337 | {MONITOR_REQ_AUDIT_EVENT, MON_PERMIT, mm_answer_audit_event}, |
328 | {MONITOR_REQ_AUDIT_COMMAND, MON_PERMIT|MON_ONCE, mm_answer_audit_command}, | 338 | {MONITOR_REQ_AUDIT_COMMAND, MON_PERMIT|MON_ONCE, mm_answer_audit_command}, |
329 | #endif | 339 | #endif |
340 | #ifdef USE_CONSOLEKIT | ||
341 | {MONITOR_REQ_CONSOLEKIT_REGISTER, 0, mm_answer_consolekit_register}, | ||
342 | #endif | ||
330 | {0, 0, NULL} | 343 | {0, 0, NULL} |
331 | }; | 344 | }; |
332 | 345 | ||
@@ -514,6 +527,9 @@ monitor_child_postauth(struct monitor *pmonitor) | |||
514 | monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1); | 527 | monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1); |
515 | monitor_permit(mon_dispatch, MONITOR_REQ_PTYCLEANUP, 1); | 528 | monitor_permit(mon_dispatch, MONITOR_REQ_PTYCLEANUP, 1); |
516 | } | 529 | } |
530 | #ifdef USE_CONSOLEKIT | ||
531 | monitor_permit(mon_dispatch, MONITOR_REQ_CONSOLEKIT_REGISTER, 1); | ||
532 | #endif | ||
517 | 533 | ||
518 | for (;;) | 534 | for (;;) |
519 | monitor_read(pmonitor, mon_dispatch, NULL); | 535 | monitor_read(pmonitor, mon_dispatch, NULL); |
@@ -2492,3 +2508,30 @@ mm_answer_jpake_check_confirm(int sock, Buffer *m) | |||
2492 | } | 2508 | } |
2493 | 2509 | ||
2494 | #endif /* JPAKE */ | 2510 | #endif /* JPAKE */ |
2511 | |||
2512 | #ifdef USE_CONSOLEKIT | ||
2513 | int | ||
2514 | mm_answer_consolekit_register(int sock, Buffer *m) | ||
2515 | { | ||
2516 | Session *s; | ||
2517 | char *tty, *display; | ||
2518 | char *cookie = NULL; | ||
2519 | |||
2520 | debug3("%s entering", __func__); | ||
2521 | |||
2522 | tty = buffer_get_string(m, NULL); | ||
2523 | display = buffer_get_string(m, NULL); | ||
2524 | s = session_by_tty(tty); | ||
2525 | if (s != NULL) | ||
2526 | cookie = consolekit_register(s, display); | ||
2527 | buffer_clear(m); | ||
2528 | buffer_put_cstring(m, cookie != NULL ? cookie : ""); | ||
2529 | mm_request_send(sock, MONITOR_ANS_CONSOLEKIT_REGISTER, m); | ||
2530 | |||
2531 | free(cookie); | ||
2532 | free(display); | ||
2533 | free(tty); | ||
2534 | |||
2535 | return (0); | ||
2536 | } | ||
2537 | #endif /* USE_CONSOLEKIT */ | ||