X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Fsd-login.c;h=c795765620321147baf857672815f3b52531d4b4;hb=847657c7690598f1c77d0ba9e86ef58916bc58a7;hp=c9a2e8a07fbb883e007f553d77779f92d726e880;hpb=80514f9c9bb86dbba761e4b026e5d62156ea112c;p=elogind.git diff --git a/src/login/sd-login.c b/src/login/sd-login.c index c9a2e8a07..c79576562 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; @@ -555,13 +583,13 @@ _public_ int sd_get_uids(uid_t **users) { for (;;) { struct dirent *de; - union dirent_storage buf; int k; uid_t uid; - k = readdir_r(d, &buf.de, &de); - if (k != 0) - return -k; + errno = 0; + de = readdir(d); + if (!de && errno != 0) + return -errno; if (!de) break;