diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-02-24 09:20:52 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-24 09:20:52 +0900 |
commit | 9cddd367077f8841b5f84786d113ebc4556b06d3 (patch) | |
tree | 65c4bd8fe4401076686578d7a5c75e38e79480d4 /src/libsystemd | |
parent | c73676dcbbe3032c75d893d43ac309998c5f23e5 (diff) | |
parent | c4ef14dc2a0eaae6b93d41e5c82f50ee86e480a4 (diff) | |
download | systemd-9cddd367077f8841b5f84786d113ebc4556b06d3.tar.gz |
Merge pull request #26574 from YHNdnzj/sd-login-new-interface
sd-login: add two interfaces for retriving session info
Diffstat (limited to 'src/libsystemd')
-rw-r--r-- | src/libsystemd/libsystemd.sym | 6 | ||||
-rw-r--r-- | src/libsystemd/sd-login/sd-login.c | 31 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index 802009b710..8b5edabb75 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -812,3 +812,9 @@ global: sd_pidfd_get_user_unit; sd_journal_get_seqnum; } LIBSYSTEMD_252; + +LIBSYSTEMD_254 { +global: + sd_session_get_username; + sd_session_get_start_time; +} LIBSYSTEMD_253; diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c index d483889fd1..12cb4e6792 100644 --- a/src/libsystemd/sd-login/sd-login.c +++ b/src/libsystemd/sd-login/sd-login.c @@ -742,10 +742,41 @@ static int session_get_string(const char *session, const char *field, char **val return 0; } +_public_ int sd_session_get_username(const char *session, char **username) { + return session_get_string(session, "USER", username); +} + _public_ int sd_session_get_seat(const char *session, char **seat) { return session_get_string(session, "SEAT", seat); } +_public_ int sd_session_get_start_time(const char *session, uint64_t *usec) { + _cleanup_free_ char *p = NULL, *s = NULL; + usec_t t; + int r; + + assert_return(usec, -EINVAL); + + r = file_of_session(session, &p); + if (r < 0) + return r; + + r = parse_env_file(NULL, p, "REALTIME", &s); + if (r == -ENOENT) + return -ENXIO; + if (r < 0) + return r; + if (isempty(s)) + return -EIO; + + r = safe_atou64(s, &t); + if (r < 0) + return r; + + *usec = t; + return 0; +} + _public_ int sd_session_get_tty(const char *session, char **tty) { return session_get_string(session, "TTY", tty); } |