SD_BUS_CREDS_GET_PID(3)

NAME
sd_bus_creds_get_pid, sd_bus_creds_get_pid_starttime, sd_bus_creds_get_tid, sd_bus_creds_get_uid, sd_bus_creds_get_gid, sd_bus_creds_get_comm, sd_bus_creds_get_tid_comm, sd_bus_creds_get_exe, sd_bus_creds_get_cmdline, sd_bus_creds_get_cgroup, sd_bus_creds_get_unit, sd_bus_creds_get_user_unit, sd_bus_creds_get_slice, sd_bus_creds_get_session, sd_bus_creds_get_owner_uid, sd_bus_creds_has_effective_cap, sd_bus_creds_has_permitted_cap, sd_bus_creds_has_inheritable_cap, sd_bus_creds_has_bounding_cap, sd_bus_creds_get_selinux_context, sd_bus_creds_get_audit_session_id, sd_bus_creds_get_audit_login_uid, sd_bus_creds_get_unique_name, sd_bus_creds_get_well_known_names - Retrieve fields from a credentials object

SYNOPSIS

#include <systemd/sd-bus.h>

int sd_bus_creds_get_pid(sd_bus_creds *c, pid_t *pid);

int sd_bus_creds_get_pid_starttime(sd_bus_creds *c, uint64_t *usec);

int sd_bus_creds_get_tid(sd_bus_creds *c, pid_t *tid);

int sd_bus_creds_get_pid(sd_bus_creds *c, uid_t *uid);

int sd_bus_creds_get_gid(sd_bus_creds *c, gid_t *gid);

int sd_bus_creds_get_comm(sd_bus_creds *c, const char **comm);

int sd_bus_creds_get_tid_comm(sd_bus_creds *c, const char **comm);

int sd_bus_creds_get_exe(sd_bus_creds *c, const char **exe);

int sd_bus_creds_get_cmdline(sd_bus_creds *c, char ***cmdline);

int sd_bus_creds_get_cgroup(sd_bus_creds *c, const char **cgroup);

int sd_bus_creds_get_unit(sd_bus_creds *c, const char **unit);

int sd_bus_creds_get_user_unit(sd_bus_creds *c, const char **unit);

int sd_bus_creds_get_slice(sd_bus_creds *c, const char **slice);

int sd_bus_creds_get_session(sd_bus_creds *c, const char **slice);

int sd_bus_creds_get_owner_uid(sd_bus_creds *c, uid_t *uid);

int sd_bus_creds_has_effective_cap(sd_bus_creds *c, int capability);

int sd_bus_creds_has_permitted_cap(sd_bus_creds *c, int capability);

int sd_bus_creds_has_inheritable_cap(sd_bus_creds *c, int capability);

int sd_bus_creds_has_bounding_cap(sd_bus_creds *c, int capability);

int sd_bus_creds_get_selinux_context(sd_bus_creds *c, const char **context);

int sd_bus_creds_get_audit_session_id(sd_bus_creds *c, uint32_t *sessionid);

int sd_bus_creds_get_audit_login_uid(sd_bus_creds *c, uid_t *loginuid);

int sd_bus_creds_get_unique_name(sd_bus_creds *c, const char **name);

int sd_bus_creds_get_well_known_names(sd_bus_creds *c, char ***name);

DESCRIPTION

These functions return information from an sd_bus_creds object. It may be created with sd_bus_creds_new_from_pid(3), in which case it will describe the specified process, or it may be created by sd_bus_get_peer_creds(3), in which case it will describe the process at the other endpoint of a connection.

sd_bus_creds_get_pid will retrieve the PID (process identifier).

sd_bus_creds_get_pid_starttime will retrieve the time since the start of the epoch in microseconds since the process was started.

sd_bus_creds_get_tid will retrieve the TID (thread identifier).

sd_bus_creds_get_uid will retrieve the numeric UID (user identifier).

sd_bus_creds_get_gid will retrieve the numeric GID (group identifier).

sd_bus_creds_get_comm will retrieve the comm field (truncated name of the executable, as stored in /proc/pid/comm).

sd_bus_creds_get_tid_comm will retrieve the comm field of the thread (as stored in /proc/pid/task/tid/comm).

sd_bus_creds_get_exe will retrieve the path to the program (as stored in the /proc/pid/exe link, but with " (deleted)" suffix removed).

sd_bus_creds_get_cmdline will retrieve an array of command-line arguments (as stored in /proc/pid/cmdline).

sd_bus_creds_get_cgroup will retrieve the cgroup path. See cgroups.txt[1].

sd_bus_creds_get_unit will retrieve the systemd unit name (in the system instance of systemd) that the process is part of. See systemd.unit(5).

sd_bus_creds_get_user_unit will retrieve the systemd unit name (in the user instance of systemd) that the process is part of. See systemd.unit(5).

sd_bus_creds_get_slice will retrieve the systemd slice (a unit in the system instance of systemd) that the process is part of. See systemd.slice(5).

sd_bus_creds_get_session will retrieve the logind session that the process is part of. See systemd-logind.service(8).

sd_bus_creds_get_owner_uid will retrieve the numeric UID (user identifier) of the user who owns the slice that the process is part of. See systemd.slice(5).

sd_bus_creds_has_effective_cap will check whether the capability specified by capability was set in the effective capabilities mask. A positive return value means that is was set, zero means that it was not set, and a negative return value signifies an error. See capabilities(7) and Capabilities= and CapabilityBoundingSet= settings in systemd.exec(5).

sd_bus_creds_has_permitted_cap is similar to sd_bus_creds_has_effective_cap, but will check the permitted capabilities mask.

sd_bus_creds_has_inheritable_cap is similar to sd_bus_creds_has_effective_cap, but will check the inheritable capabilities mask.

sd_bus_creds_has_bounding_cap is similar to sd_bus_creds_has_effective_cap, but will check the bounding capabilities mask.

sd_bus_creds_get_selinux_context will retrieve the SELinux security context (label) of the process.

sd_bus_creds_get_audit_session_id will retrieve the audit session identifier of the process.

sd_bus_creds_get_audit_login_uid will retrieve the audit user login identifier (the identifier of the user who is "responsible" for the session).

sd_bus_creds_get_unique_name will retrieve the D-Bus unique name. See The D-Bus specification[2].

sd_bus_creds_get_well_known_names will retrieve the set of D-Bus well-known names. See The D-Bus specification[2].

All functions that take a const char** parameter will store the answer there as an address of a NUL-terminated string. It will be valid as long as c remains valid, and should not be freed or modified by the caller.

All functions that take a char*** parameter will store the answer there as an address of a an array of strings. Each invidividual string is NUL-terminated, and the array is NULL-terminated as a whole. It will be valid as long as c remains valid, and should not be freed or modified by the caller.

RETURN VALUE

On success, these calls return 0 or a positive integer. On failure, these calls return a negative errno-style error code.

ERRORS

Returned errors may indicate the following problems:

-ENODATA
    Given field is not available in c.

-ENOENT
    Given field is not specified for the sender. This will be returned by sd_bus_get_unit, sd_bus_get_user_unit, sd_bus_get_slice, sd_bus_get_session, and sd_bus_get_owner_uid if the sender is not part of a systemd system unit, systemd user unit, systemd slice, logind session, or a systemd user session.

-ENXIO
    An error occured in parsing cgroup paths. libsystemd might be out of sync with the running systemd version.

-EINVAL
    Specified pointer parameter is NULL.

-ENOMEM
    Memory allocation failed.

NOTES

sd_bus_open_user() and other functions described here are available as a shared library, which can be compiled and linked to with the libsystemd pkg-config(1) file.

SEE ALSO

systemd(1), sd-bus(3), credentials(7), fork(2), execve(2), free(3), proc(5), systemd.journald-fields(7)

NOTES

1.  cgroups.txt
    https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt

2.  The D-Bus specification
    http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus