summaryrefslogtreecommitdiff
path: root/src/libsystemd
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-02-24 09:20:52 +0900
committerGitHub <noreply@github.com>2023-02-24 09:20:52 +0900
commit9cddd367077f8841b5f84786d113ebc4556b06d3 (patch)
tree65c4bd8fe4401076686578d7a5c75e38e79480d4 /src/libsystemd
parentc73676dcbbe3032c75d893d43ac309998c5f23e5 (diff)
parentc4ef14dc2a0eaae6b93d41e5c82f50ee86e480a4 (diff)
downloadsystemd-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.sym6
-rw-r--r--src/libsystemd/sd-login/sd-login.c31
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);
}