]> git.ipfire.org Git - thirdparty/systemd.git/blob - man/sd_bus_creds_get_pid.xml
Merge pull request #502 from keszybz/login-small-cleanup
[thirdparty/systemd.git] / man / sd_bus_creds_get_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 This file is part of systemd.
7
8 Copyright 2014 Zbigniew Jędrzejewski-Szmek
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22 -->
23
24 <refentry id="sd_bus_creds_get_pid">
25
26 <refentryinfo>
27 <title>sd_bus_creds_get_pid</title>
28 <productname>systemd</productname>
29
30 <authorgroup>
31 <author>
32 <contrib>A monkey with a typewriter</contrib>
33 <firstname>Zbigniew</firstname>
34 <surname>Jędrzejewski-Szmek</surname>
35 <email>zbyszek@in.waw.pl</email>
36 </author>
37 </authorgroup>
38 </refentryinfo>
39
40 <refmeta>
41 <refentrytitle>sd_bus_creds_get_pid</refentrytitle>
42 <manvolnum>3</manvolnum>
43 </refmeta>
44
45 <refnamediv>
46 <refname>sd_bus_creds_get_pid</refname>
47 <refname>sd_bus_creds_get_ppid</refname>
48 <refname>sd_bus_creds_get_tid</refname>
49 <refname>sd_bus_creds_get_uid</refname>
50 <refname>sd_bus_creds_get_euid</refname>
51 <refname>sd_bus_creds_get_suid</refname>
52 <refname>sd_bus_creds_get_fsuid</refname>
53 <refname>sd_bus_creds_get_gid</refname>
54 <refname>sd_bus_creds_get_egid</refname>
55 <refname>sd_bus_creds_get_sgid</refname>
56 <refname>sd_bus_creds_get_fsgid</refname>
57 <refname>sd_bus_creds_get_supplementary_gids</refname>
58 <refname>sd_bus_creds_get_comm</refname>
59 <refname>sd_bus_creds_get_tid_comm</refname>
60 <refname>sd_bus_creds_get_exe</refname>
61 <refname>sd_bus_creds_get_cmdline</refname>
62 <refname>sd_bus_creds_get_cgroup</refname>
63 <refname>sd_bus_creds_get_unit</refname>
64 <refname>sd_bus_creds_get_user_unit</refname>
65 <refname>sd_bus_creds_get_slice</refname>
66 <refname>sd_bus_creds_get_session</refname>
67 <refname>sd_bus_creds_get_owner_uid</refname>
68 <refname>sd_bus_creds_has_effective_cap</refname>
69 <refname>sd_bus_creds_has_permitted_cap</refname>
70 <refname>sd_bus_creds_has_inheritable_cap</refname>
71 <refname>sd_bus_creds_has_bounding_cap</refname>
72 <refname>sd_bus_creds_get_selinux_context</refname>
73 <refname>sd_bus_creds_get_audit_session_id</refname>
74 <refname>sd_bus_creds_get_audit_login_uid</refname>
75 <refname>sd_bus_creds_get_tty</refname>
76 <refname>sd_bus_creds_get_unique_name</refname>
77 <refname>sd_bus_creds_get_well_known_names</refname>
78 <refname>sd_bus_creds_get_description</refname>
79
80 <refpurpose>Retrieve fields from a credentials object</refpurpose>
81 </refnamediv>
82
83 <refsynopsisdiv>
84 <funcsynopsis>
85 <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
86
87 <funcprototype>
88 <funcdef>int <function>sd_bus_creds_get_pid</function></funcdef>
89 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
90 <paramdef>pid_t *<parameter>pid</parameter></paramdef>
91 </funcprototype>
92
93 <funcprototype>
94 <funcdef>int <function>sd_bus_creds_get_ppid</function></funcdef>
95 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
96 <paramdef>pid_t *<parameter>ppid</parameter></paramdef>
97 </funcprototype>
98
99 <funcprototype>
100 <funcdef>int <function>sd_bus_creds_get_tid</function></funcdef>
101 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
102 <paramdef>pid_t *<parameter>tid</parameter></paramdef>
103 </funcprototype>
104
105 <funcprototype>
106 <funcdef>int <function>sd_bus_creds_get_uid</function></funcdef>
107 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
108 <paramdef>uid_t *<parameter>uid</parameter></paramdef>
109 </funcprototype>
110
111 <funcprototype>
112 <funcdef>int <function>sd_bus_creds_get_euid</function></funcdef>
113 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
114 <paramdef>uid_t *<parameter>uid</parameter></paramdef>
115 </funcprototype>
116
117 <funcprototype>
118 <funcdef>int <function>sd_bus_creds_get_suid</function></funcdef>
119 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
120 <paramdef>uid_t *<parameter>uid</parameter></paramdef>
121 </funcprototype>
122
123 <funcprototype>
124 <funcdef>int <function>sd_bus_creds_get_fsuid</function></funcdef>
125 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
126 <paramdef>uid_t *<parameter>uid</parameter></paramdef>
127 </funcprototype>
128
129 <funcprototype>
130 <funcdef>int <function>sd_bus_creds_get_gid</function></funcdef>
131 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
132 <paramdef>gid_t *<parameter>gid</parameter></paramdef>
133 </funcprototype>
134
135 <funcprototype>
136 <funcdef>int <function>sd_bus_creds_get_egid</function></funcdef>
137 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
138 <paramdef>gid_t *<parameter>gid</parameter></paramdef>
139 </funcprototype>
140
141 <funcprototype>
142 <funcdef>int <function>sd_bus_creds_get_sgid</function></funcdef>
143 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
144 <paramdef>gid_t *<parameter>gid</parameter></paramdef>
145 </funcprototype>
146
147 <funcprototype>
148 <funcdef>int <function>sd_bus_creds_get_fsgid</function></funcdef>
149 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
150 <paramdef>gid_t *<parameter>gid</parameter></paramdef>
151 </funcprototype>
152
153 <funcprototype>
154 <funcdef>int <function>sd_bus_creds_get_supplementary_gids</function></funcdef>
155 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
156 <paramdef>const gid_t **<parameter>gids</parameter></paramdef>
157 </funcprototype>
158
159 <funcprototype>
160 <funcdef>int <function>sd_bus_creds_get_comm</function></funcdef>
161 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
162 <paramdef>const char **<parameter>comm</parameter></paramdef>
163 </funcprototype>
164
165 <funcprototype>
166 <funcdef>int <function>sd_bus_creds_get_tid_comm</function></funcdef>
167 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
168 <paramdef>const char **<parameter>comm</parameter></paramdef>
169 </funcprototype>
170
171 <funcprototype>
172 <funcdef>int <function>sd_bus_creds_get_exe</function></funcdef>
173 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
174 <paramdef>const char **<parameter>exe</parameter></paramdef>
175 </funcprototype>
176
177 <funcprototype>
178 <funcdef>int <function>sd_bus_creds_get_cmdline</function></funcdef>
179 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
180 <paramdef>char ***<parameter>cmdline</parameter></paramdef>
181 </funcprototype>
182
183 <funcprototype>
184 <funcdef>int <function>sd_bus_creds_get_cgroup</function></funcdef>
185 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
186 <paramdef>const char **<parameter>cgroup</parameter></paramdef>
187 </funcprototype>
188
189 <funcprototype>
190 <funcdef>int <function>sd_bus_creds_get_unit</function></funcdef>
191 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
192 <paramdef>const char **<parameter>unit</parameter></paramdef>
193 </funcprototype>
194
195 <funcprototype>
196 <funcdef>int <function>sd_bus_creds_get_user_unit</function></funcdef>
197 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
198 <paramdef>const char **<parameter>unit</parameter></paramdef>
199 </funcprototype>
200
201 <funcprototype>
202 <funcdef>int <function>sd_bus_creds_get_slice</function></funcdef>
203 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
204 <paramdef>const char **<parameter>slice</parameter></paramdef>
205 </funcprototype>
206
207 <funcprototype>
208 <funcdef>int <function>sd_bus_creds_get_session</function></funcdef>
209 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
210 <paramdef>const char **<parameter>slice</parameter></paramdef>
211 </funcprototype>
212
213 <funcprototype>
214 <funcdef>int <function>sd_bus_creds_get_owner_uid</function></funcdef>
215 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
216 <paramdef>uid_t *<parameter>uid</parameter></paramdef>
217 </funcprototype>
218
219 <funcprototype>
220 <funcdef>int <function>sd_bus_creds_has_effective_cap</function></funcdef>
221 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
222 <paramdef>int <parameter>capability</parameter></paramdef>
223 </funcprototype>
224
225 <funcprototype>
226 <funcdef>int <function>sd_bus_creds_has_permitted_cap</function></funcdef>
227 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
228 <paramdef>int <parameter>capability</parameter></paramdef>
229 </funcprototype>
230
231 <funcprototype>
232 <funcdef>int <function>sd_bus_creds_has_inheritable_cap</function></funcdef>
233 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
234 <paramdef>int <parameter>capability</parameter></paramdef>
235 </funcprototype>
236
237 <funcprototype>
238 <funcdef>int <function>sd_bus_creds_has_bounding_cap</function></funcdef>
239 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
240 <paramdef>int <parameter>capability</parameter></paramdef>
241 </funcprototype>
242
243 <funcprototype>
244 <funcdef>int <function>sd_bus_creds_get_selinux_context</function></funcdef>
245 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
246 <paramdef>const char **<parameter>context</parameter></paramdef>
247 </funcprototype>
248
249 <funcprototype>
250 <funcdef>int <function>sd_bus_creds_get_audit_session_id</function></funcdef>
251 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
252 <paramdef>uint32_t *<parameter>sessionid</parameter></paramdef>
253 </funcprototype>
254
255 <funcprototype>
256 <funcdef>int <function>sd_bus_creds_get_audit_login_uid</function></funcdef>
257 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
258 <paramdef>uid_t *<parameter>loginuid</parameter></paramdef>
259 </funcprototype>
260
261 <funcprototype>
262 <funcdef>int <function>sd_bus_creds_get_tty</function></funcdef>
263 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
264 <paramdef>const char **<parameter>tty</parameter></paramdef>
265 </funcprototype>
266
267 <funcprototype>
268 <funcdef>int <function>sd_bus_creds_get_unique_name</function></funcdef>
269 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
270 <paramdef>const char **<parameter>name</parameter></paramdef>
271 </funcprototype>
272
273 <funcprototype>
274 <funcdef>int <function>sd_bus_creds_get_well_known_names</function></funcdef>
275 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
276 <paramdef>char ***<parameter>name</parameter></paramdef>
277 </funcprototype>
278
279 <funcprototype>
280 <funcdef>int <function>sd_bus_creds_get_description</function></funcdef>
281 <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
282 <paramdef>const char **<parameter>name</parameter></paramdef>
283 </funcprototype>
284
285 </funcsynopsis>
286 </refsynopsisdiv>
287
288 <refsect1>
289 <title>Description</title>
290
291 <para>These functions return information from an
292 <parameter>sd_bus_creds</parameter> credential object. Credential
293 objects may be created with
294 <citerefentry><refentrytitle>sd_bus_creds_new_from_pid</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
295 in which case they describe the credentials of the process
296 identified by the specified PID, with
297 <citerefentry><refentrytitle>sd_bus_get_name_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
298 in which case they describe the credentials of a bus peer
299 identified by the specified bus name, with
300 <citerefentry><refentrytitle>sd_bus_get_owner_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
301 in which case they describe the credentials of the creator of a
302 bus, or with
303 <citerefentry><refentrytitle>sd_bus_message_get_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
304 in which case they describe the credentials of the sender of the message.</para>
305
306 <para><function>sd_bus_creds_get_pid()</function> will retrieve
307 the PID (process identifier). Similar,
308 <function>sd_bus_creds_get_ppid()</function> will retrieve the
309 parent PID. Note that PID 1 has no parent process, in which case
310 -ENXIO is returned.</para>
311
312 <para><function>sd_bus_creds_get_tid()</function> will retrieve the
313 TID (thread identifier).</para>
314
315 <para><function>sd_bus_creds_get_uid()</function> will retrieve
316 the numeric UID (user identifier). Similar,
317 <function>sd_bus_creds_get_euid()</function> returns the effective
318 UID, <function>sd_bus_creds_get_suid()</function> the saved UID
319 and <function>sd_bus_creds_get_fsuid()</function> the file system
320 UID.</para>
321
322 <para><function>sd_bus_creds_get_gid()</function> will retrieve the
323 numeric GID (group identifier). Similar,
324 <function>sd_bus_creds_get_egid()</function> returns the effective
325 GID, <function>sd_bus_creds_get_sgid()</function> the saved GID
326 and <function>sd_bus_creds_get_fsgid()</function> the file system
327 GID.</para>
328
329 <para><function>sd_bus_creds_get_supplementary_gids()</function>
330 will retrieve the supplementary GIDs list.</para>
331
332 <para><function>sd_bus_creds_get_comm()</function> will retrieve the
333 comm field (truncated name of the executable, as stored in
334 <filename>/proc/<replaceable>pid</replaceable>/comm</filename>).
335 </para>
336
337 <para><function>sd_bus_creds_get_tid_comm()</function> will retrieve
338 the comm field of the thread (as stored in
339 <filename>/proc/<replaceable>pid</replaceable>/task/<replaceable>tid</replaceable>/comm</filename>).
340 </para>
341
342 <para><function>sd_bus_creds_get_exe()</function> will retrieve
343 the path to the program executable (as stored in the
344 <filename>/proc/<replaceable>pid</replaceable>/exe</filename>
345 link, but with <literal> (deleted)</literal> suffix removed). Note
346 that kernel threads do not have an executable path, in which case
347 -ENXIO is returned.</para>
348
349 <para><function>sd_bus_creds_get_cmdline()</function> will
350 retrieve an array of command line arguments (as stored in
351 <filename>/proc/<replaceable>pid</replaceable>/cmdline</filename>). Note
352 that kernel threads do not have a command line, in which case
353 -ENXIO is returned.</para>
354
355 <para><function>sd_bus_creds_get_cgroup()</function> will retrieve
356 the cgroup path. See <ulink
357 url="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups.txt</ulink>.
358 </para>
359
360 <para><function>sd_bus_creds_get_unit()</function> will retrieve
361 the systemd unit name (in the system instance of systemd) that the
362 process is part of. See
363 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. For
364 processes that are not part of a unit returns -ENXIO.
365 </para>
366
367 <para><function>sd_bus_creds_get_user_unit()</function> will
368 retrieve the systemd unit name (in the user instance of systemd)
369 that the process is part of. See
370 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. For
371 processes that are not part of a user unit returns -ENXIO.
372 </para>
373
374 <para><function>sd_bus_creds_get_slice()</function> will retrieve
375 the systemd slice (a unit in the system instance of systemd) that
376 the process is part of. See
377 <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
378 </para>
379
380 <para><function>sd_bus_creds_get_session()</function> will
381 retrieve the logind session that the process is part of. See
382 <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>. For
383 processes that are not part of a session returns -ENXIO.
384 </para>
385
386 <para><function>sd_bus_creds_get_owner_uid()</function> will
387 retrieve the numeric UID (user identifier) of the user who owns
388 the session that the process is part of. See
389 <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
390 For processes that are not part of a session returns -ENXIO.
391 </para>
392
393 <para><function>sd_bus_creds_has_effective_cap()</function> will
394 check whether the capability specified by
395 <parameter>capability</parameter> was set in the effective
396 capabilities mask. A positive return value means that is was
397 set, zero means that it was not set, and a negative return
398 value signifies an error. See
399 <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
400 and <varname>Capabilities=</varname> and
401 <varname>CapabilityBoundingSet=</varname> settings in
402 <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
403 </para>
404
405 <para><function>sd_bus_creds_has_permitted_cap()</function> is
406 similar to <function>sd_bus_creds_has_effective_cap()</function>,
407 but will check the permitted capabilities mask.</para>
408
409 <para><function>sd_bus_creds_has_inheritable_cap()</function> is
410 similar to <function>sd_bus_creds_has_effective_cap()</function>,
411 but will check the inheritable capabilities mask.</para>
412
413 <para><function>sd_bus_creds_has_bounding_cap()</function> is
414 similar to <function>sd_bus_creds_has_effective_cap()</function>,
415 but will check the bounding capabilities mask.</para>
416
417 <para><function>sd_bus_creds_get_selinux_context()</function> will
418 retrieve the SELinux security context (label) of the process.</para>
419
420 <para><function>sd_bus_creds_get_audit_session_id()</function>
421 will retrieve the audit session identifier of the process. Returns
422 -ENXIO for processes that are not part of an audit session.</para>
423
424 <para><function>sd_bus_creds_get_audit_login_uid()</function> will
425 retrieve the audit user login identifier (the identifier of the
426 user who is "responsible" for the session). Returns -ENXIO for
427 processes that are not part of an audit session.</para>
428
429 <para><function>sd_bus_creds_get_tty()</function> will retrieve
430 the controlling TTY. Returns -ENXIO for processes that have no
431 controlling TTY.</para>
432
433 <para><function>sd_bus_creds_get_unique_name()</function> will
434 retrieve the D-Bus unique name. See <ulink
435 url="http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
436 D-Bus specification</ulink>.</para>
437
438 <para><function>sd_bus_creds_get_well_known_names()</function> will
439 retrieve the set of D-Bus well-known names. See <ulink
440 url="http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
441 D-Bus specification</ulink>.</para>
442
443 <para><function>sd_bus_creds_get_description()</function> will
444 retrieve a descriptive name of the bus connection of the
445 peer. This name is useful to discern multiple bus connections by
446 the same peer, and may be altered by the peer with the
447 <citerefentry><refentrytitle>sd_bus_set_description</refentrytitle><manvolnum>3</manvolnum></citerefentry>
448 call.</para>
449
450 <para>All functions that take a <parameter>const
451 char**</parameter> parameter will store the answer there as an
452 address of a NUL-terminated string. It will be valid as long as
453 <parameter>c</parameter> remains valid, and should not be freed or
454 modified by the caller.</para>
455
456 <para>All functions that take a <parameter>char***</parameter>
457 parameter will store the answer there as an address of a an array
458 of strings. Each individual string is NUL-terminated, and the
459 array is NULL-terminated as a whole. It will be valid as long as
460 <parameter>c</parameter> remains valid, and should not be freed or
461 modified by the caller.</para>
462 </refsect1>
463
464 <refsect1>
465 <title>Return Value</title>
466
467 <para>On success, these calls return 0 or a positive integer. On
468 failure, these calls return a negative errno-style error code.
469 </para>
470 </refsect1>
471
472 <refsect1>
473 <title>Errors</title>
474
475 <para>Returned errors may indicate the following problems:</para>
476
477 <variablelist>
478 <varlistentry>
479 <term><constant>-ENODATA</constant></term>
480
481 <listitem><para>Given field is not available in the
482 credentials object <parameter>c</parameter>.</para>
483 </listitem>
484 </varlistentry>
485
486 <varlistentry>
487 <term><constant>-ENXIO</constant></term>
488
489 <listitem><para>Given field is not specified for the described
490 process or peer. This will be returned by
491 <function>sd_bus_get_unit()</function>,
492 <function>sd_bus_get_user_unit()</function>,
493 <function>sd_bus_get_slice()</function>,
494 <function>sd_bus_get_session()</function>, and
495 <function>sd_bus_get_owner_uid()</function> if the process is
496 not part of a systemd system unit, systemd user unit, systemd
497 slice, or logind session. It will also be returned by
498 <function>sd_bus_creds_get_exe()</function> and
499 <function>sd_bus_creds_get_cmdline()</function> for kernel
500 threads (since these aren't started from an executable binary
501 or have a command line),
502 <function>sd_bus_creds_get_audit_session_id()</function> and
503 <function>sd_bus_creds_get_audit_login_uid()</function> when
504 the process is not part of an audit session, and
505 <function>sd_bus_creds_get_tty()</function> if the process has
506 no controlling TTY.
507 </para>
508 </listitem>
509 </varlistentry>
510
511 <varlistentry>
512 <term><constant>-EINVAL</constant></term>
513
514 <listitem><para>Specified pointer parameter is <constant>NULL</constant>.
515 </para></listitem>
516 </varlistentry>
517
518 <varlistentry>
519 <term><constant>-ENOMEM</constant></term>
520
521 <listitem><para>Memory allocation failed.</para></listitem>
522 </varlistentry>
523 </variablelist>
524 </refsect1>
525
526 <refsect1>
527 <title>Notes</title>
528
529 <para><function>sd_bus_open_user()</function> and other functions
530 described here are available as a shared library, which can be
531 compiled and linked to with the
532 <constant>libsystemd</constant> <citerefentry project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
533 file.</para>
534 </refsect1>
535
536 <refsect1>
537 <title>See Also</title>
538
539 <para>
540 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
541 <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
542 <citerefentry><refentrytitle>fork</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
543 <citerefentry><refentrytitle>execve</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
544 <citerefentry project='man-pages'><refentrytitle>credentials</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
545 <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
546 <citerefentry project='man-pages'><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
547 <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
548 </para>
549 </refsect1>
550
551 </refentry>