journald: store _SYSTEMD_UNIT= instead of _SYSTEMD_SERVICE= field, since processes might also be related to mount, swap or socket units, not just services

This commit is contained in:
Lennart Poettering 2012-01-04 15:35:30 +01:00
parent e91af489a2
commit 94fb446e55
8 changed files with 30 additions and 30 deletions

View file

@ -1912,7 +1912,7 @@ MANPAGES_ALIAS += \
man/sd_session_get_uid.3 \
man/sd_session_get_seat.3 \
man/sd_pid_get_owner_uid.3 \
man/sd_pid_get_service.3 \
man/sd_pid_get_unit.3 \
man/sd_uid_is_on_seat.3 \
man/sd_uid_get_sessions.3 \
man/sd_uid_get_seats.3 \
@ -1927,7 +1927,7 @@ man/sd_login_monitor_get_fd.3: man/sd_login_monitor_new.3
man/sd_session_get_uid.3: man/sd_session_is_active.3
man/sd_session_get_seat.3: man/sd_session_is_active.3
man/sd_pid_get_owner_uid.3: man/sd_pid_get_session.3
man/sd_pid_get_service.3: man/sd_pid_get_session.3
man/sd_pid_get_unit.3: man/sd_pid_get_session.3
man/sd_uid_is_on_seat.3: man/sd_uid_get_state.3
man/sd_uid_get_sessions.3: man/sd_uid_get_state.3
man/sd_uid_get_seats.3: man/sd_uid_get_state.3

View file

@ -44,7 +44,7 @@
<refnamediv>
<refname>sd_pid_get_session</refname>
<refname>sd_pid_get_service</refname>
<refname>sd_pid_get_unit</refname>
<refname>sd_pid_get_owner_uid</refname>
<refpurpose>Determine session, service or owner of a session of a specific PID</refpurpose>
</refnamediv>
@ -60,9 +60,9 @@
</funcprototype>
<funcprototype>
<funcdef>int <function>sd_pid_get_service</function></funcdef>
<funcdef>int <function>sd_pid_get_unit</function></funcdef>
<paramdef>pid_t <parameter>pid</parameter></paramdef>
<paramdef>char** <parameter>service</parameter></paramdef>
<paramdef>char** <parameter>unit</parameter></paramdef>
</funcprototype>
<funcprototype>
@ -90,15 +90,16 @@
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use.</para>
<para><function>sd_pid_get_service()</function> may be
used to determine the system service identifier of a
process identified by the specified process
identifier. The service name is a short string,
suitable for usage in file system paths. Note that not
all processes are part of a service (e.g. user
processes, or kernel threads). For processes not being
part of a system service this function will fail. The
returned string needs to be freed with the libc
<para><function>sd_pid_get_unit()</function> may be
used to determine the systemd unit (i.e. system
service) identifier of a process identified by the
specified process identifier. The unit name is a short
string, suitable for usage in file system paths. Note
that not all processes are part of a unit/service
(e.g. user processes, or kernel threads). For
processes not being part of a systemd unit/system
service this function will fail. The returned string
needs to be freed with the libc
<citerefentry><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call after use.</para>
@ -126,7 +127,7 @@
<title>Notes</title>
<para>The <function>sd_pid_get_session()</function>,
<function>sd_pid_get_service()</function>, and
<function>sd_pid_get_pid()</function>, and
<function>sd_pid_get_owner_uid()</function> interfaces
are available as shared library, which can be compiled
and linked to with the

View file

@ -431,7 +431,7 @@ static void dispatch_message_real(Server *s,
*comm = NULL, *cmdline = NULL, *hostname = NULL,
*audit_session = NULL, *audit_loginuid = NULL,
*exe = NULL, *cgroup = NULL, *session = NULL,
*owner_uid = NULL, *service = NULL;
*owner_uid = NULL, *unit = NULL;
char idbuf[33];
sd_id128_t id;
@ -515,12 +515,12 @@ static void dispatch_message_real(Server *s,
IOVEC_SET_STRING(iovec[n++], session);
}
if (sd_pid_get_service(ucred->pid, &t) >= 0) {
service = strappend("_SYSTEMD_SERVICE=", t);
if (sd_pid_get_unit(ucred->pid, &t) >= 0) {
unit = strappend("_SYSTEMD_UNIT=", t);
free(t);
if (service)
IOVEC_SET_STRING(iovec[n++], service);
if (unit)
IOVEC_SET_STRING(iovec[n++], unit);
}
if (sd_pid_get_owner_uid(ucred->uid, &owner) >= 0)
@ -596,7 +596,7 @@ retry:
free(cgroup);
free(session);
free(owner_uid);
free(service);
free(unit);
}
static void dispatch_message(Server *s,

View file

@ -35,7 +35,6 @@
* - OR of matches is borked...
* - extend hash tables table as we go
* - accelerate looking for "all hostnames" and suchlike.
* - hookup with systemctl
* - handle incomplete header
*
* - local deserializer

View file

@ -36,5 +36,5 @@ local:
LIBSYSTEMD_LOGIN_38 {
global:
sd_pid_get_service;
sd_pid_get_unit;
} LIBSYSTEMD_LOGIN_31;

View file

@ -121,11 +121,11 @@ _public_ int sd_pid_get_session(pid_t pid, char **session) {
return 0;
}
_public_ int sd_pid_get_service(pid_t pid, char **service) {
_public_ int sd_pid_get_unit(pid_t pid, char **unit) {
int r;
char *cgroup, *p;
if (!service)
if (!unit)
return -EINVAL;
r = pid_get_cgroup(pid, NULL, &cgroup);
@ -144,7 +144,7 @@ _public_ int sd_pid_get_service(pid_t pid, char **service) {
if (!p)
return -ENOMEM;
*service = p;
*unit = p;
return 0;
}

View file

@ -53,9 +53,9 @@ int sd_pid_get_session(pid_t pid, char **session);
* return an error for system processes. */
int sd_pid_get_owner_uid(pid_t pid, uid_t *uid);
/* Get service name from PID. This will return an error for
* non-service processes. */
int sd_pid_get_service(pid_t, char **service);
/* Get systemd unit (i.e. service) name from PID. This will return an
* error for non-service processes. */
int sd_pid_get_unit(pid_t, char **unit);
/* Get state from uid. Possible states: offline, lingering, online, active */
int sd_uid_get_state(uid_t uid, char**state);

View file

@ -359,7 +359,7 @@ int show_journal_by_service(
if (!prefix)
prefix = "";
if (asprintf(&m, "_SYSTEMD_SERVICE=%s", service) < 0) {
if (asprintf(&m, "_SYSTEMD_UNIT=%s", service) < 0) {
r = -ENOMEM;
goto finish;
}