From 1c97e2ebf4981ada50ce8fd167d6521ba4663c7c Mon Sep 17 00:00:00 2001 From: Alan Jenkins Date: Sun, 17 Sep 2017 14:11:20 +0100 Subject: [PATCH] man: de-emphasize *_get_session() Explanation: "Please note the login session may be limited to a stub process or two. User processes may instead be started from their systemd user manager, e.g. GUI applications started using DBus activation, as well as service processes which are shared between multiple logins of the same user." The most glaring example being when you run commands from gnome-terminal, or as you see nowadays, "gnome-terminal-server". *_get_session() is still currently used (directly or indirectly) by Xorg, Weston etc. running within the session scope. That setup is perfectly functional, although code will be more generally useful if it is able to run outside the session scope.[1] [1] https://wiki.archlinux.org/index.php/Systemd/User#Xorg_as_a_systemd_user_service Re-order the man pages a bit at the same time. This is to avoid having the first and titular entry introduce the session concept, and then immediately try and persuade you not to use it :). --- man/rules/meson.build | 4 +- man/sd_bus_creds_get_pid.xml | 21 ++-- ...t_session.xml => sd_pid_get_owner_uid.xml} | 114 +++++++++--------- 3 files changed, 73 insertions(+), 66 deletions(-) rename man/{sd_pid_get_session.xml => sd_pid_get_owner_uid.xml} (85%) diff --git a/man/rules/meson.build b/man/rules/meson.build index ae0556058e6..f74dbf9c774 100644 --- a/man/rules/meson.build +++ b/man/rules/meson.build @@ -441,7 +441,7 @@ manpages = [ '3', ['sd_notifyf', 'sd_pid_notify', 'sd_pid_notify_with_fds', 'sd_pid_notifyf'], ''], - ['sd_pid_get_session', + ['sd_pid_get_owner_uid', '3', ['sd_peer_get_cgroup', 'sd_peer_get_machine_name', @@ -453,7 +453,7 @@ manpages = [ 'sd_peer_get_user_unit', 'sd_pid_get_cgroup', 'sd_pid_get_machine_name', - 'sd_pid_get_owner_uid', + 'sd_pid_get_session', 'sd_pid_get_slice', 'sd_pid_get_unit', 'sd_pid_get_user_slice', diff --git a/man/sd_bus_creds_get_pid.xml b/man/sd_bus_creds_get_pid.xml index 6ea95e0665f..56e62863f26 100644 --- a/man/sd_bus_creds_get_pid.xml +++ b/man/sd_bus_creds_get_pid.xml @@ -394,16 +394,19 @@ sd_bus_creds_get_session() will retrieve the identifier of the login session that the process is - a part of. See - systemd-logind.service8. For - processes that are not part of a session, returns -ENXIO. - + a part of. Please note the login session may be limited to a stub + process or two. User processes may instead be started from their + systemd user manager, e.g. GUI applications started using DBus + activation, as well as service processes which are shared between + multiple logins of the same user. For processes that are not part + of a session, returns -ENXIO. sd_bus_creds_get_owner_uid() will retrieve the numeric UID (user identifier) of the user who owns - the login session that the process is a part of. See + the user unit or login session that the process is a part of. See systemd-logind.service8. - For processes that are not part of a session, returns -ENXIO. + For processes that are not part of a user unit or session, returns + -ENXIO. sd_bus_creds_has_effective_cap() will check whether the capability specified by @@ -506,8 +509,10 @@ sd_bus_creds_get_user_slice(), and sd_bus_creds_get_session() if the process is not part of a systemd system unit, systemd user unit, systemd - slice, or logind session. It will also be returned by - sd_bus_creds_get_exe() and + slice, or logind session. It will be returned by + sd_bus_creds_get_owner_uid() if the process is + not part of a systemd user unit or logind session. It will also be + returned by sd_bus_creds_get_exe() and sd_bus_creds_get_cmdline() for kernel threads (since these are not started from an executable binary, nor have a command line), and by diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_owner_uid.xml similarity index 85% rename from man/sd_pid_get_session.xml rename to man/sd_pid_get_owner_uid.xml index 14ebd53e36a..5a2a07d0964 100644 --- a/man/sd_pid_get_session.xml +++ b/man/sd_pid_get_owner_uid.xml @@ -21,10 +21,10 @@ along with systemd; If not, see . --> - + - sd_pid_get_session + sd_pid_get_owner_uid systemd @@ -38,30 +38,30 @@ - sd_pid_get_session + sd_pid_get_owner_uid 3 - sd_pid_get_session - sd_pid_get_unit - sd_pid_get_user_unit sd_pid_get_owner_uid + sd_pid_get_session + sd_pid_get_user_unit + sd_pid_get_unit sd_pid_get_machine_name sd_pid_get_slice sd_pid_get_user_slice sd_pid_get_cgroup - sd_peer_get_session - sd_peer_get_unit - sd_peer_get_user_unit sd_peer_get_owner_uid + sd_peer_get_session + sd_peer_get_user_unit + sd_peer_get_unit sd_peer_get_machine_name sd_peer_get_slice sd_peer_get_user_slice sd_peer_get_cgroup - Determine session, unit, owner of a session, - container/VM or slice of a specific PID or socket - peer + Determine the owner uid of the user unit or session, + or the session, user unit, system unit, container/VM or slice that + a specific PID or socket peer belongs to. @@ -69,15 +69,15 @@ #include <systemd/sd-login.h> - int sd_pid_get_session + int sd_pid_get_owner_uid pid_t pid - char **session + uid_t *uid - int sd_pid_get_unit + int sd_pid_get_session pid_t pid - char **unit + char **session @@ -87,9 +87,9 @@ - int sd_pid_get_owner_uid + int sd_pid_get_unit pid_t pid - uid_t *uid + char **unit @@ -117,15 +117,15 @@ - int sd_peer_get_session + int sd_peer_get_owner_uid int fd - char **session + uid_t *uid - int sd_peer_get_unit + int sd_peer_get_session int fd - char **unit + char **session @@ -135,9 +135,9 @@ - int sd_peer_get_owner_uid + int sd_peer_get_unit int fd - uid_t *uid + char **unit @@ -169,16 +169,34 @@ Description + sd_pid_get_owner_uid() may be used to + determine the Unix UID (user identifier) which owns the login + session or systemd user unit of a process identified by the + specified PID. For processes which are not part of a login session + and not managed by a user manager, this function will fail with + -ENODATA. + sd_pid_get_session() may be used to determine the login session identifier of a process identified by the specified process identifier. The session identifier is a - short string, suitable for usage in file system paths. Note that - not all processes are part of a login session (e.g. system service - processes, user processes that are shared between multiple - sessions of the same user, or kernel threads). For processes not - being part of a login session, this function will fail with - -ENODATA. The returned string needs to be freed with the libc - -ENODATA. + The returned string needs to be freed with the libc free3 + call after use. + + sd_pid_get_user_unit() may be used to + determine the systemd user unit (i.e. user service or scope unit) + identifier of a process identified by the specified PID. The + unit name is a short string, suitable for usage in file system + paths. For processes which are not managed by a user manager, this + function will fail with -ENODATA. The + returned string needs to be freed with the libc free3 call after use. @@ -186,37 +204,21 @@ determine the systemd system unit (i.e. system service or scope unit) identifier of a process identified by the specified PID. The unit name is a short string, suitable for usage in file system - paths. Note that not all processes are part of a system - unit/service (e.g. user processes, or kernel threads). For - processes not being part of a systemd system unit, this function - will fail with -ENODATA. (More specifically, this call will not - work for kernel threads.) The returned string needs to be freed - with the libc -ENODATA. + (More specifically, this call will not work for kernel threads.) + The returned string needs to be freed with the libc free3 call after use. - sd_pid_get_user_unit() may be used to - determine the systemd user unit (i.e. user service or scope unit) - identifier of a process identified by the specified PID. This is - similar to sd_pid_get_unit(), but applies to - user units instead of system units. - - sd_pid_get_owner_uid() may be used to - determine the Unix UID (user identifier) of the owner of the - session of a process identified the specified PID. Note that this - function will succeed for user processes which are shared between - multiple login sessions of the same user, whereas - sd_pid_get_session() will fail. For processes - not being part of a login session and not being a shared process - of a user, this function will fail with -ENODATA. - sd_pid_get_machine_name() may be used to determine the name of the VM or container is a member of. The machine name is a short string, suitable for usage in file system paths. The returned string needs to be freed with the libc free3 - call after use. For processes not part of a VM or containers, this + call after use. For processes not part of a VM or container, this function fails with -ENODATA. sd_pid_get_slice() may be used to @@ -246,10 +248,10 @@ functions is passed as 0, the operation is executed for the calling process. - The sd_peer_get_session(), - sd_peer_get_unit(), + The sd_peer_get_owner_uid(), + sd_peer_get_session(), sd_peer_get_user_unit(), - sd_peer_get_owner_uid(), + sd_peer_get_unit(), sd_peer_get_machine_name(), sd_peer_get_slice(), sd_peer_get_user_slice() and