From 5b04fe60004e7c5cd5a43648ede3e6a965e70b8c Mon Sep 17 00:00:00 2001 From: Mantas Mikulėnas Date: Sun, 22 Dec 2013 02:48:46 +0200 Subject: libsystemd-login: add sd_session_get_remote_{host, user} --- src/login/libsystemd-login.sym | 7 +++++++ src/login/sd-login.c | 28 ++++++++++++++++++++++++++++ src/login/test-login.c | 14 +++++++++++++- 3 files changed, 48 insertions(+), 1 deletion(-) (limited to 'src/login') diff --git a/src/login/libsystemd-login.sym b/src/login/libsystemd-login.sym index 54aa91c609..1d3398253c 100644 --- a/src/login/libsystemd-login.sym +++ b/src/login/libsystemd-login.sym @@ -85,3 +85,10 @@ LIBSYSTEMD_LOGIN_207 { global: sd_session_get_vt; } LIBSYSTEMD_LOGIN_205; + +LIBSYSTEMD_LOGIN_209 { +global: + sd_session_is_remote; + sd_session_get_remote_user; + sd_session_get_remote_host; +} LIBSYSTEMD_LOGIN_207; diff --git a/src/login/sd-login.c b/src/login/sd-login.c index 2930b8751f..c795765620 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -254,6 +254,26 @@ _public_ int sd_session_is_active(const char *session) { return r; } +_public_ int sd_session_is_remote(const char *session) { + int r; + _cleanup_free_ char *p = NULL, *s = NULL; + + r = file_of_session(session, &p); + if (r < 0) + return r; + + r = parse_env_file(p, NEWLINE, "REMOTE", &s, NULL); + if (r < 0) + return r; + + if (!s) + return -EIO; + + r = parse_boolean(s); + + return r; +} + _public_ int sd_session_get_state(const char *session, char **state) { _cleanup_free_ char *p = NULL, *s = NULL; int r; @@ -364,6 +384,14 @@ _public_ int sd_session_get_display(const char *session, char **display) { return session_get_string(session, "DISPLAY", display); } +_public_ int sd_session_get_remote_user(const char *session, char **remote_user) { + return session_get_string(session, "REMOTE_USER", remote_user); +} + +_public_ int sd_session_get_remote_host(const char *session, char **remote_host) { + return session_get_string(session, "REMOTE_HOST", remote_host); +} + static int file_of_seat(const char *seat, char **_p) { char *p; int r; diff --git a/src/login/test-login.c b/src/login/test-login.c index 228ddb2933..ce88af80f0 100644 --- a/src/login/test-login.c +++ b/src/login/test-login.c @@ -30,7 +30,7 @@ static void test_login(void) { int r, k; uid_t u, u2; - char *seat, *type, *class, *display; + char *seat, *type, *class, *display, *remote_user, *remote_host; char *session; char *state; char *session2; @@ -71,6 +71,10 @@ static void test_login(void) { assert_se(r >= 0); printf("active = %s\n", yes_no(r)); + r = sd_session_is_remote(session); + assert_se(r >= 0); + printf("remote = %s\n", yes_no(r)); + r = sd_session_get_state(session, &state); assert_se(r >= 0); printf("state = %s\n", state); @@ -92,6 +96,14 @@ static void test_login(void) { printf("display = %s\n", display); free(display); + assert_se(sd_session_get_remote_user(session, &remote_user) >= 0); + printf("remote_user = %s\n", remote_user); + free(remote_user); + + assert_se(sd_session_get_remote_host(session, &remote_host) >= 0); + printf("remote_host = %s\n", remote_host); + free(remote_host); + assert_se(sd_session_get_seat(session, &seat) >= 0); printf("seat = %s\n", seat); -- cgit v1.2.3-54-g00ecf