]> git.ipfire.org Git - thirdparty/systemd.git/blob - man/sd_bus_creds_new_from_pid.xml
test-hostname-util: add assert_se's to make coverity happy
[thirdparty/systemd.git] / man / sd_bus_creds_new_from_pid.xml
1 <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4
5 <!--
6 SPDX-License-Identifier: LGPL-2.1+
7
8 This file is part of systemd.
9
10 Copyright 2014 Zbigniew Jędrzejewski-Szmek
11
12 systemd is free software; you can redistribute it and/or modify it
13 under the terms of the GNU Lesser General Public License as published by
14 the Free Software Foundation; either version 2.1 of the License, or
15 (at your option) any later version.
16
17 systemd is distributed in the hope that it will be useful, but
18 WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 Lesser General Public License for more details.
21
22 You should have received a copy of the GNU Lesser General Public License
23 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 -->
25
26 <refentry id="sd_bus_creds_new_from_pid">
27
28 <refentryinfo>
29 <title>sd_bus_creds_new_from_pid</title>
30 <productname>systemd</productname>
31
32 <authorgroup>
33 <author>
34 <contrib>A monkey with a typewriter</contrib>
35 <firstname>Zbigniew</firstname>
36 <surname>Jędrzejewski-Szmek</surname>
37 <email>zbyszek@in.waw.pl</email>
38 </author>
39 </authorgroup>
40 </refentryinfo>
41
42 <refmeta>
43 <refentrytitle>sd_bus_creds_new_from_pid</refentrytitle>
44 <manvolnum>3</manvolnum>
45 </refmeta>
46
47 <refnamediv>
48 <refname>sd_bus_creds_new_from_pid</refname>
49 <refname>sd_bus_creds_get_mask</refname>
50 <refname>sd_bus_creds_get_augmented_mask</refname>
51 <refname>sd_bus_creds_ref</refname>
52 <refname>sd_bus_creds_unref</refname>
53 <refname>sd_bus_creds_unrefp</refname>
54
55 <refpurpose>Retrieve credentials object for the specified PID</refpurpose>
56 </refnamediv>
57
58 <refsynopsisdiv>
59 <funcsynopsis>
60 <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
61
62 <funcprototype>
63 <funcdef>int <function>sd_bus_creds_new_from_pid</function></funcdef>
64 <paramdef>pid_t <parameter>pid</parameter></paramdef>
65 <paramdef>uint64_t <parameter>creds_mask</parameter></paramdef>
66 <paramdef>sd_bus_creds **<parameter>ret</parameter></paramdef>
67 </funcprototype>
68
69 <funcprototype>
70 <funcdef>uint64_t <function>sd_bus_creds_get_mask</function></funcdef>
71 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
72 </funcprototype>
73
74 <funcprototype>
75 <funcdef>uint64_t <function>sd_bus_creds_get_augmented_mask</function></funcdef>
76 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
77 </funcprototype>
78
79 <funcprototype>
80 <funcdef>sd_bus_creds *<function>sd_bus_creds_ref</function></funcdef>
81 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
82 </funcprototype>
83
84 <funcprototype>
85 <funcdef>sd_bus_creds *<function>sd_bus_creds_unref</function></funcdef>
86 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
87 </funcprototype>
88
89 <funcprototype>
90 <funcdef>void <function>sd_bus_creds_unrefp</function></funcdef>
91 <paramdef>sd_bus_creds **<parameter>c</parameter></paramdef>
92 </funcprototype>
93 </funcsynopsis>
94
95 <para>
96 <constant>SD_BUS_CREDS_PID</constant>,
97 <constant>SD_BUS_CREDS_PPID</constant>,
98 <constant>SD_BUS_CREDS_TID</constant>,
99 <constant>SD_BUS_CREDS_UID</constant>,
100 <constant>SD_BUS_CREDS_EUID</constant>,
101 <constant>SD_BUS_CREDS_SUID</constant>,
102 <constant>SD_BUS_CREDS_FSUID</constant>,
103 <constant>SD_BUS_CREDS_GID</constant>,
104 <constant>SD_BUS_CREDS_EGID</constant>,
105 <constant>SD_BUS_CREDS_SGID</constant>,
106 <constant>SD_BUS_CREDS_FSGID</constant>,
107 <constant>SD_BUS_CREDS_SUPPLEMENTARY_GIDS</constant>,
108 <constant>SD_BUS_CREDS_COMM</constant>,
109 <constant>SD_BUS_CREDS_TID_COMM</constant>,
110 <constant>SD_BUS_CREDS_EXE</constant>,
111 <constant>SD_BUS_CREDS_CMDLINE</constant>,
112 <constant>SD_BUS_CREDS_CGROUP</constant>,
113 <constant>SD_BUS_CREDS_UNIT</constant>,
114 <constant>SD_BUS_CREDS_SLICE</constant>,
115 <constant>SD_BUS_CREDS_USER_UNIT</constant>,
116 <constant>SD_BUS_CREDS_USER_SLICE</constant>,
117 <constant>SD_BUS_CREDS_SESSION</constant>,
118 <constant>SD_BUS_CREDS_OWNER_UID</constant>,
119 <constant>SD_BUS_CREDS_EFFECTIVE_CAPS</constant>,
120 <constant>SD_BUS_CREDS_PERMITTED_CAPS</constant>,
121 <constant>SD_BUS_CREDS_INHERITABLE_CAPS</constant>,
122 <constant>SD_BUS_CREDS_BOUNDING_CAPS</constant>,
123 <constant>SD_BUS_CREDS_SELINUX_CONTEXT</constant>,
124 <constant>SD_BUS_CREDS_AUDIT_SESSION_ID</constant>,
125 <constant>SD_BUS_CREDS_AUDIT_LOGIN_UID</constant>,
126 <constant>SD_BUS_CREDS_TTY</constant>,
127 <constant>SD_BUS_CREDS_UNIQUE_NAME</constant>,
128 <constant>SD_BUS_CREDS_WELL_KNOWN_NAMES</constant>,
129 <constant>SD_BUS_CREDS_DESCRIPTION</constant>,
130 <constant>SD_BUS_CREDS_AUGMENT</constant>,
131 <constant>_SD_BUS_CREDS_ALL</constant>
132 </para>
133 </refsynopsisdiv>
134
135 <refsect1>
136 <title>Description</title>
137
138 <para><function>sd_bus_creds_new_from_pid()</function> creates a
139 new credentials object and fills it with information about the
140 process <parameter>pid</parameter>. The pointer to this object
141 will be stored in the <parameter>ret</parameter> pointer. Note that
142 credential objects may also be created and retrieved via
143 <citerefentry><refentrytitle>sd_bus_get_name_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
144 <citerefentry><refentrytitle>sd_bus_get_owner_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
145 and
146 <citerefentry><refentrytitle>sd_bus_message_get_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
147
148 <para>The information that will be stored is determined by
149 <parameter>creds_mask</parameter>. It may contain a subset of ORed
150 constants <constant>SD_BUS_CREDS_PID</constant>,
151 <constant>SD_BUS_CREDS_PPID</constant>,
152 <constant>SD_BUS_CREDS_TID</constant>,
153 <constant>SD_BUS_CREDS_UID</constant>,
154 <constant>SD_BUS_CREDS_EUID</constant>,
155 <constant>SD_BUS_CREDS_SUID</constant>,
156 <constant>SD_BUS_CREDS_FSUID</constant>,
157 <constant>SD_BUS_CREDS_GID</constant>,
158 <constant>SD_BUS_CREDS_EGID</constant>,
159 <constant>SD_BUS_CREDS_SGID</constant>,
160 <constant>SD_BUS_CREDS_FSGID</constant>,
161 <constant>SD_BUS_CREDS_SUPPLEMENTARY_GIDS</constant>,
162 <constant>SD_BUS_CREDS_COMM</constant>,
163 <constant>SD_BUS_CREDS_TID_COMM</constant>,
164 <constant>SD_BUS_CREDS_EXE</constant>,
165 <constant>SD_BUS_CREDS_CMDLINE</constant>,
166 <constant>SD_BUS_CREDS_CGROUP</constant>,
167 <constant>SD_BUS_CREDS_UNIT</constant>,
168 <constant>SD_BUS_CREDS_SLICE</constant>,
169 <constant>SD_BUS_CREDS_USER_UNIT</constant>,
170 <constant>SD_BUS_CREDS_USER_SLICE</constant>,
171 <constant>SD_BUS_CREDS_SESSION</constant>,
172 <constant>SD_BUS_CREDS_OWNER_UID</constant>,
173 <constant>SD_BUS_CREDS_EFFECTIVE_CAPS</constant>,
174 <constant>SD_BUS_CREDS_PERMITTED_CAPS</constant>,
175 <constant>SD_BUS_CREDS_INHERITABLE_CAPS</constant>,
176 <constant>SD_BUS_CREDS_BOUNDING_CAPS</constant>,
177 <constant>SD_BUS_CREDS_SELINUX_CONTEXT</constant>,
178 <constant>SD_BUS_CREDS_AUDIT_SESSION_ID</constant>,
179 <constant>SD_BUS_CREDS_AUDIT_LOGIN_UID</constant>,
180 <constant>SD_BUS_CREDS_TTY</constant>,
181 <constant>SD_BUS_CREDS_UNIQUE_NAME</constant>,
182 <constant>SD_BUS_CREDS_WELL_KNOWN_NAMES</constant>, and
183 <constant>SD_BUS_CREDS_DESCRIPTION</constant>. Use the special
184 value <constant>_SD_BUS_CREDS_ALL</constant> to request all
185 supported fields. The <constant>SD_BUS_CREDS_AUGMENT</constant>
186 constant may not be ORed into the mask for invocations of
187 <function>sd_bus_creds_new_from_pid()</function>.</para>
188
189 <para>Fields can be retrieved from the credentials object using
190 <citerefentry><refentrytitle>sd_bus_creds_get_pid</refentrytitle><manvolnum>3</manvolnum></citerefentry>
191 and other functions which correspond directly to the constants
192 listed above.</para>
193
194 <para>A mask of fields which were actually successfully retrieved
195 can be retrieved with
196 <function>sd_bus_creds_get_mask()</function>. If the credentials
197 object was created with
198 <function>sd_bus_creds_new_from_pid()</function>, this will be a
199 subset of fields requested in <parameter>creds_mask</parameter>.
200 </para>
201
202 <para>Similar to <function>sd_bus_creds_get_mask()</function>, the
203 function <function>sd_bus_creds_get_augmented_mask()</function>
204 returns a bitmask of field constants. The mask indicates which
205 credential fields have been retrieved in a non-atomic fashion. For
206 credential objects created via
207 <function>sd_bus_creds_new_from_pid()</function>, this mask will be
208 identical to the mask returned by
209 <function>sd_bus_creds_get_mask()</function>. However, for
210 credential objects retrieved via
211 <function>sd_bus_get_name_creds()</function>, this mask will be set
212 for the credential fields that could not be determined atomically
213 at peer connection time, and which were later added by reading
214 augmenting credential data from
215 <filename>/proc</filename>. Similarly, for credential objects
216 retrieved via <function>sd_bus_get_owner_creds()</function>, the
217 mask is set for the fields that could not be determined atomically
218 at bus creation time, but have been augmented. Similarly, for
219 credential objects retrieved via
220 <function>sd_bus_message_get_creds()</function>, the mask is set
221 for the fields that could not be determined atomically at message
222 sending time, but have been augmented. The mask returned by
223 <function>sd_bus_creds_get_augmented_mask()</function> is always a
224 subset of (or identical to) the mask returned by
225 <function>sd_bus_creds_get_mask()</function> for the same
226 object. The latter call hence returns all credential fields
227 available in the credential object, the former then marks the
228 subset of those that have been augmented. Note that augmented
229 fields are unsuitable for authorization decisions, as they may be
230 retrieved at different times, thus being subject to races. Hence,
231 augmented fields should be used exclusively for informational
232 purposes.
233 </para>
234
235 <para><function>sd_bus_creds_ref()</function> creates a new
236 reference to the credentials object <parameter>c</parameter>. This
237 object will not be destroyed until
238 <function>sd_bus_creds_unref()</function> has been called as many
239 times plus once more. Once the reference count has dropped to zero,
240 <parameter>c</parameter> cannot be used anymore, so further
241 calls to <function>sd_bus_creds_ref(c)</function> or
242 <function>sd_bus_creds_unref(c)</function> are illegal.</para>
243
244 <para><function>sd_bus_creds_unref()</function> destroys a reference
245 to <parameter>c</parameter>.</para>
246
247 <para><function>sd_bus_creds_unrefp()</function> is similar to
248 <function>sd_bus_creds_unref()</function> but takes a pointer to a
249 pointer to an <type>sd_bus_creds</type> object. This call is useful in
250 conjunction with GCC's and LLVM's <ulink
251 url="https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html">Clean-up
252 Variable Attribute</ulink>. Note that this function is defined as
253 inline function.</para>
254
255 <para><function>sd_bus_creds_ref()</function>,
256 <function>sd_bus_creds_unref()</function> and
257 <function>sd_bus_creds_unrefp()</function> execute no operation if
258 the passed in bus credentials object is
259 <constant>NULL</constant>.</para>
260
261 </refsect1>
262
263 <refsect1>
264 <title>Return Value</title>
265
266 <para>On success, <function>sd_bus_creds_new_from_pid()</function>
267 returns 0 or a positive integer. On failure, it returns a negative
268 errno-style error code.</para>
269
270 <para><function>sd_bus_creds_get_mask()</function> returns the
271 mask of successfully acquired fields.</para>
272
273 <para><function>sd_bus_creds_get_augmented_mask()</function>
274 returns the mask of fields that have been augmented from data in
275 <filename>/proc</filename>, and are thus not suitable for
276 authorization decisions.</para>
277
278 <para><function>sd_bus_creds_ref()</function> always returns the
279 argument.</para>
280
281 <para><function>sd_bus_creds_unref()</function> always returns
282 <constant>NULL</constant>.</para>
283 </refsect1>
284
285 <refsect1>
286 <title>Reference ownership</title>
287
288 <para>Function <function>sd_bus_creds_new_from_pid()</function>
289 creates a new object and the caller owns the sole reference. When
290 not needed anymore, this reference should be destroyed with
291 <citerefentry><refentrytitle>sd_bus_creds_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
292 </para>
293 </refsect1>
294
295 <refsect1>
296 <title>Errors</title>
297
298 <para>Returned errors may indicate the following problems:</para>
299
300 <variablelist>
301
302 <varlistentry>
303 <term><constant>-ESRCH</constant></term>
304
305 <listitem><para>Specified <parameter>pid</parameter> could not
306 be found.</para></listitem>
307 </varlistentry>
308
309 <varlistentry>
310 <term><constant>-EINVAL</constant></term>
311
312 <listitem><para>Specified parameter is invalid
313 (<constant>NULL</constant> in case of output
314 parameters).</para></listitem>
315 </varlistentry>
316
317 <varlistentry>
318 <term><constant>-ENOMEM</constant></term>
319
320 <listitem><para>Memory allocation failed.</para></listitem>
321 </varlistentry>
322
323 <varlistentry>
324 <term><constant>-EOPNOTSUPP</constant></term>
325
326 <listitem><para>One of the requested fields is unknown to the local system.</para></listitem>
327 </varlistentry>
328 </variablelist>
329 </refsect1>
330
331 <refsect1>
332 <title>Notes</title>
333
334 <para><function>sd_bus_creds_new_from_pid()</function> and the
335 other calls described here are available as a shared library,
336 which can be compiled and linked to with the
337 <constant>libsystemd</constant> <citerefentry
338 project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
339 file.</para>
340 </refsect1>
341
342 <refsect1>
343 <title>See Also</title>
344
345 <para>
346 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
347 <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
348 <citerefentry><refentrytitle>sd_bus_creds_get_pid</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
349 <citerefentry><refentrytitle>sd_bus_get_name_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
350 <citerefentry><refentrytitle>sd_bus_get_owner_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
351 <citerefentry><refentrytitle>sd_bus_message_get_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
352 </para>
353 </refsect1>
354
355 </refentry>