diff --git a/Makefile-man.am b/Makefile-man.am
index 35174cca5fb..75cccc0d651 100644
--- a/Makefile-man.am
+++ b/Makefile-man.am
@@ -21,6 +21,7 @@ MANPAGES += \
man/sd-journal.3 \
man/sd_booted.3 \
man/sd_bus_creds_get_pid.3 \
+ man/sd_bus_creds_new_from_pid.3 \
man/sd_bus_message_get_cookie.3 \
man/sd_bus_new.3 \
man/sd_bus_open_user.3 \
@@ -145,6 +146,7 @@ MANPAGES_ALIAS += \
man/sd_bus_creds_get_comm.3 \
man/sd_bus_creds_get_exe.3 \
man/sd_bus_creds_get_gid.3 \
+ man/sd_bus_creds_get_mask.3 \
man/sd_bus_creds_get_owner_uid.3 \
man/sd_bus_creds_get_pid_starttime.3 \
man/sd_bus_creds_get_selinux_context.3 \
@@ -161,6 +163,8 @@ MANPAGES_ALIAS += \
man/sd_bus_creds_has_effective_cap.3 \
man/sd_bus_creds_has_inheritable_cap.3 \
man/sd_bus_creds_has_permitted_cap.3 \
+ man/sd_bus_creds_ref.3 \
+ man/sd_bus_creds_unref.3 \
man/sd_bus_default_system.3 \
man/sd_bus_default_user.3 \
man/sd_bus_message_get_reply_cookie.3 \
@@ -279,6 +283,7 @@ man/sd_bus_creds_get_cmdline.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_get_comm.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_get_exe.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_get_gid.3: man/sd_bus_creds_get_pid.3
+man/sd_bus_creds_get_mask.3: man/sd_bus_creds_new_from_pid.3
man/sd_bus_creds_get_owner_uid.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_get_pid_starttime.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_get_selinux_context.3: man/sd_bus_creds_get_pid.3
@@ -295,6 +300,8 @@ man/sd_bus_creds_has_bounding_cap.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_has_effective_cap.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_has_inheritable_cap.3: man/sd_bus_creds_get_pid.3
man/sd_bus_creds_has_permitted_cap.3: man/sd_bus_creds_get_pid.3
+man/sd_bus_creds_ref.3: man/sd_bus_creds_new_from_pid.3
+man/sd_bus_creds_unref.3: man/sd_bus_creds_new_from_pid.3
man/sd_bus_default_system.3: man/sd_bus_open_user.3
man/sd_bus_default_user.3: man/sd_bus_open_user.3
man/sd_bus_message_get_reply_cookie.3: man/sd_bus_message_get_cookie.3
@@ -483,6 +490,9 @@ man/sd_bus_creds_get_exe.html: man/sd_bus_creds_get_pid.html
man/sd_bus_creds_get_gid.html: man/sd_bus_creds_get_pid.html
$(html-alias)
+man/sd_bus_creds_get_mask.html: man/sd_bus_creds_new_from_pid.html
+ $(html-alias)
+
man/sd_bus_creds_get_owner_uid.html: man/sd_bus_creds_get_pid.html
$(html-alias)
@@ -531,6 +541,12 @@ man/sd_bus_creds_has_inheritable_cap.html: man/sd_bus_creds_get_pid.html
man/sd_bus_creds_has_permitted_cap.html: man/sd_bus_creds_get_pid.html
$(html-alias)
+man/sd_bus_creds_ref.html: man/sd_bus_creds_new_from_pid.html
+ $(html-alias)
+
+man/sd_bus_creds_unref.html: man/sd_bus_creds_new_from_pid.html
+ $(html-alias)
+
man/sd_bus_default_system.html: man/sd_bus_open_user.html
$(html-alias)
@@ -1266,6 +1282,7 @@ EXTRA_DIST += \
man/sd-readahead.xml \
man/sd_booted.xml \
man/sd_bus_creds_get_pid.xml \
+ man/sd_bus_creds_new_from_pid.xml \
man/sd_bus_message_get_cookie.xml \
man/sd_bus_new.xml \
man/sd_bus_open_user.xml \
diff --git a/man/sd_bus_creds_get_pid.xml b/man/sd_bus_creds_get_pid.xml
index 9de5001d491..d0598271f4a 100644
--- a/man/sd_bus_creds_get_pid.xml
+++ b/man/sd_bus_creds_get_pid.xml
@@ -402,6 +402,14 @@ along with systemd; If not, see .
+
+ -ENXIO
+
+ An error occured in parsing cgroup paths.
+ libsystemd-bus might be out of sync with
+ the running systemd version.
+
+
-EINVAL
diff --git a/man/sd_bus_creds_new_from_pid.xml b/man/sd_bus_creds_new_from_pid.xml
new file mode 100644
index 00000000000..302004d5a5c
--- /dev/null
+++ b/man/sd_bus_creds_new_from_pid.xml
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+ sd_bus_creds_new_from_pid
+ systemd
+
+
+
+ A monkey with a typewriter
+ Zbigniew
+ Jędrzejewski-Szmek
+ zbyszek@in.waw.pl
+
+
+
+
+
+ sd_bus_creds_new_from_pid
+ 3
+
+
+
+ sd_bus_creds_new_from_pid
+ sd_bus_creds_get_mask
+ sd_bus_creds_ref
+ sd_bus_creds_unref
+
+ Retrieve credentials object for the specified PID
+
+
+
+
+ #include <systemd/sd-bus.h>
+
+
+ int sd_bus_creds_new_from_pid
+ pid_t pid
+ uint64_t creds_mask
+ sd_bus_creds** ret
+
+
+
+ uint64_t sd_bus_creds_get_mask
+ const sd_bus_creds* c
+
+
+
+ sd_bus_creds* sd_bus_creds_ref
+ sd_bus_creds* c
+
+
+
+ sd_bus_creds* sd_bus_creds_unref
+ sd_bus_creds* c
+
+
+
+
+ SD_BUS_CREDS_PID,
+ SD_BUS_CREDS_PID_STARTTIME,
+ SD_BUS_CREDS_TID,
+ SD_BUS_CREDS_UID,
+ SD_BUS_CREDS_GID,
+ SD_BUS_CREDS_COMM,
+ SD_BUS_CREDS_TID_COMM,
+ SD_BUS_CREDS_EXE,
+ SD_BUS_CREDS_CMDLINE,
+ SD_BUS_CREDS_CGROUP,
+ SD_BUS_CREDS_UNIT,
+ SD_BUS_CREDS_USER_UNIT,
+ SD_BUS_CREDS_SLICE,
+ SD_BUS_CREDS_SESSION,
+ SD_BUS_CREDS_OWNER_UID,
+ SD_BUS_CREDS_EFFECTIVE_CAPS,
+ SD_BUS_CREDS_PERMITTED_CAPS,
+ SD_BUS_CREDS_INHERITABLE_CAPS,
+ SD_BUS_CREDS_BOUNDING_CAPS,
+ SD_BUS_CREDS_SELINUX_CONTEXT,
+ SD_BUS_CREDS_AUDIT_SESSION_ID,
+ SD_BUS_CREDS_AUDIT_LOGIN_UID,
+ SD_BUS_CREDS_UNIQUE_NAME,
+ SD_BUS_CREDS_WELL_KNOWN_NAMES,
+ _SD_BUS_CREDS_ALL
+
+
+
+
+ Description
+
+ sd_bus_creds_new_from_pid() creates a new
+ credentials object and fills it with information about the process
+ pid. This pointer to this object will
+ be stored in ret pointer.
+
+ The information that will be stored is determined by
+ creds_mask. It may contain a subset of ORed
+ constants SD_BUS_CREDS_PID,
+ SD_BUS_CREDS_PID_STARTTIME,
+ SD_BUS_CREDS_TID,
+ SD_BUS_CREDS_UID,
+ SD_BUS_CREDS_GID,
+ SD_BUS_CREDS_COMM,
+ SD_BUS_CREDS_TID_COMM,
+ SD_BUS_CREDS_EXE,
+ SD_BUS_CREDS_CMDLINE,
+ SD_BUS_CREDS_CGROUP,
+ SD_BUS_CREDS_UNIT,
+ SD_BUS_CREDS_USER_UNIT,
+ SD_BUS_CREDS_SLICE,
+ SD_BUS_CREDS_SESSION,
+ SD_BUS_CREDS_OWNER_UID,
+ SD_BUS_CREDS_EFFECTIVE_CAPS,
+ SD_BUS_CREDS_PERMITTED_CAPS,
+ SD_BUS_CREDS_INHERITABLE_CAPS,
+ SD_BUS_CREDS_BOUNDING_CAPS,
+ SD_BUS_CREDS_SELINUX_CONTEXT,
+ SD_BUS_CREDS_AUDIT_SESSION_ID,
+ SD_BUS_CREDS_AUDIT_LOGIN_UID,
+ SD_BUS_CREDS_UNIQUE_NAME,
+ SD_BUS_CREDS_WELL_KNOWN_NAMES,
+ or _SD_BUS_CREDS_ALL to indicate
+ all known fields.
+
+ Fields can be retrieved from the credentials object using
+ sd_bus_creds_get_pid3
+ and other functions which correspond directly to the constants
+ listed above.
+
+ A mask of fields which were actually sucessfully set
+ (acquired from /proc, etc.) can be retrieved
+ with sd_bus_creds_get_mask(). If the
+ credentials object was created with
+ sd_bus_creds_new_from_pid(), this will be a
+ subset of fields requested in creds_mask.
+
+
+ sd_bus_creds_ref creates a new
+ reference to the credentials object c. This
+ object will not be destroyed until
+ sd_bus_creds_unref has been called as many
+ times plus once more. Once the reference count has dropped to zero,
+ c cannot be used anymore, so futher
+ calls to sd_bus_creds_ref(c) or
+ sd_bus_creds_unref(c) are illegal.
+
+ sd_bus_creds_unref destroys a reference
+ to c.
+
+
+
+ Return Value
+
+ On success, sd_bus_creds_new_from_pid()
+ returns 0 or a positive integer. On failure, it returns a negative
+ errno-style error code.
+
+ sd_bus_creds_get_mask() returns the
+ mask of successfully acquired fields.
+
+ sd_bus_creds_ref always returns the
+ argument.
+
+ sd_bus_creds_unref always returns
+ NULL.
+
+
+
+ Reference ownership
+
+ Function sd_bus_creds_new_from_pid()
+ creates a new object and the caller owns the sole reference. When
+ not needed anymore, this reference should be destroyed with
+ sd_bus_creds_unref3.
+
+
+
+
+ Errors
+
+ Returned errors may indicate the following problems:
+
+
+
+
+ -ESRCH
+
+ Specified pid could not
+ be found.
+
+
+
+ -EINVAL
+
+ Specified parameter is invalid
+ (NULL in case of output
+ parameters).
+
+
+
+ -ENOMEM
+
+ Memory allocation failed.
+
+
+
+
+
+ Notes
+
+ sd_bus_creds_new_from_pid() is
+ available as a shared library, which can be compiled and linked to
+ with the
+ libsystemd-bus pkg-config1
+ file.
+
+
+
+ See Also
+
+
+ systemd1,
+ sd-bus3,
+ sd_bus_creds_ref3,
+ sd_bus_creds_unref3,
+ sd_bus_creds_get_pid3,
+ sd_bus_creds_get_pid_starttime3,
+ sd_bus_creds_get_tid3,
+ sd_bus_creds_get_uid3,
+ sd_bus_creds_get_gid3,
+ sd_bus_creds_get_comm3,
+ sd_bus_creds_get_tid_comm3,
+ sd_bus_creds_get_exe3,
+ sd_bus_creds_get_cmdline3,
+ sd_bus_creds_get_cgroup3,
+ sd_bus_creds_get_unit3,
+ sd_bus_creds_get_user_unit3,
+ sd_bus_creds_get_slice3,
+ sd_bus_creds_get_session3,
+ sd_bus_creds_get_owner_uid3,
+ sd_bus_creds_has_effective_cap3,
+ sd_bus_creds_has_permitted_cap3,
+ sd_bus_creds_has_inheritable_cap3,
+ sd_bus_creds_has_bounding_cap3,
+ sd_bus_creds_get_selinux_context3,
+ sd_bus_creds_get_audit_session_id3,
+ sd_bus_creds_get_audit_login_uid3,
+ sd_bus_creds_get_unique_name3,
+ sd_bus_creds_get_well_known_names3
+
+
+
+
diff --git a/man/sd_bus_new.xml b/man/sd_bus_new.xml
index 1931424b86c..ad1e7008090 100644
--- a/man/sd_bus_new.xml
+++ b/man/sd_bus_new.xml
@@ -87,7 +87,7 @@ along with systemd; If not, see .
further calls to sd_bus_ref() or
sd_bus_unref() are illegal.
- sd_bus_unref() destroyes a reference to
+ sd_bus_unref() destroys a reference to
bus.
diff --git a/src/libsystemd-bus/bus-creds.c b/src/libsystemd-bus/bus-creds.c
index 5575f73d863..52e55fc5e13 100644
--- a/src/libsystemd-bus/bus-creds.c
+++ b/src/libsystemd-bus/bus-creds.c
@@ -105,7 +105,7 @@ _public_ sd_bus_creds *sd_bus_creds_unref(sd_bus_creds *c) {
return NULL;
}
-_public_ uint64_t sd_bus_creds_get_mask(sd_bus_creds *c) {
+_public_ uint64_t sd_bus_creds_get_mask(const sd_bus_creds *c) {
assert_return(c, 0);
return c->mask;
diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h
index 1134b584377..a6c29d4586b 100644
--- a/src/systemd/sd-bus.h
+++ b/src/systemd/sd-bus.h
@@ -279,7 +279,7 @@ int sd_bus_query_sender_creds(sd_bus_message *call, uint64_t mask, sd_bus_creds
int sd_bus_creds_new_from_pid(pid_t pid, uint64_t creds_mask, sd_bus_creds **ret);
sd_bus_creds *sd_bus_creds_ref(sd_bus_creds *c);
sd_bus_creds *sd_bus_creds_unref(sd_bus_creds *c);
-uint64_t sd_bus_creds_get_mask(sd_bus_creds *c);
+uint64_t sd_bus_creds_get_mask(const sd_bus_creds *c);
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);