chiark / gitweb /
af087884b654fdb02cb7209ebdd1ac69b7fd5dfa
[elogind.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   SPDX-License-Identifier: LGPL-2.1+
7
8   Copyright 2014 Zbigniew JÄ™drzejewski-Szmek
9 -->
10
11 <refentry id="sd_bus_creds_get_pid" xmlns:xi="http://www.w3.org/2001/XInclude">
12
13   <refentryinfo>
14     <title>sd_bus_creds_get_pid</title>
15     <productname>systemd</productname>
16
17     <authorgroup>
18       <author>
19         <contrib>A monkey with a typewriter</contrib>
20         <firstname>Zbigniew</firstname>
21         <surname>JÄ™drzejewski-Szmek</surname>
22         <email>zbyszek@in.waw.pl</email>
23       </author>
24     </authorgroup>
25   </refentryinfo>
26
27   <refmeta>
28     <refentrytitle>sd_bus_creds_get_pid</refentrytitle>
29     <manvolnum>3</manvolnum>
30   </refmeta>
31
32   <refnamediv>
33     <refname>sd_bus_creds_get_pid</refname>
34     <refname>sd_bus_creds_get_ppid</refname>
35     <refname>sd_bus_creds_get_tid</refname>
36     <refname>sd_bus_creds_get_uid</refname>
37     <refname>sd_bus_creds_get_euid</refname>
38     <refname>sd_bus_creds_get_suid</refname>
39     <refname>sd_bus_creds_get_fsuid</refname>
40     <refname>sd_bus_creds_get_gid</refname>
41     <refname>sd_bus_creds_get_egid</refname>
42     <refname>sd_bus_creds_get_sgid</refname>
43     <refname>sd_bus_creds_get_fsgid</refname>
44     <refname>sd_bus_creds_get_supplementary_gids</refname>
45     <refname>sd_bus_creds_get_comm</refname>
46     <refname>sd_bus_creds_get_tid_comm</refname>
47     <refname>sd_bus_creds_get_exe</refname>
48     <refname>sd_bus_creds_get_cmdline</refname>
49     <refname>sd_bus_creds_get_cgroup</refname>
50     <refname>sd_bus_creds_get_unit</refname>
51     <refname>sd_bus_creds_get_slice</refname>
52     <refname>sd_bus_creds_get_user_unit</refname>
53     <refname>sd_bus_creds_get_user_slice</refname>
54     <refname>sd_bus_creds_get_session</refname>
55     <refname>sd_bus_creds_get_owner_uid</refname>
56     <refname>sd_bus_creds_has_effective_cap</refname>
57     <refname>sd_bus_creds_has_permitted_cap</refname>
58     <refname>sd_bus_creds_has_inheritable_cap</refname>
59     <refname>sd_bus_creds_has_bounding_cap</refname>
60     <refname>sd_bus_creds_get_selinux_context</refname>
61     <refname>sd_bus_creds_get_audit_session_id</refname>
62     <refname>sd_bus_creds_get_audit_login_uid</refname>
63     <refname>sd_bus_creds_get_tty</refname>
64     <refname>sd_bus_creds_get_unique_name</refname>
65     <refname>sd_bus_creds_get_well_known_names</refname>
66     <refname>sd_bus_creds_get_description</refname>
67
68     <refpurpose>Retrieve fields from a credentials object</refpurpose>
69   </refnamediv>
70
71   <refsynopsisdiv>
72     <funcsynopsis>
73       <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
74
75       <funcprototype>
76         <funcdef>int <function>sd_bus_creds_get_pid</function></funcdef>
77         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
78         <paramdef>pid_t *<parameter>pid</parameter></paramdef>
79       </funcprototype>
80
81       <funcprototype>
82         <funcdef>int <function>sd_bus_creds_get_ppid</function></funcdef>
83         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
84         <paramdef>pid_t *<parameter>ppid</parameter></paramdef>
85       </funcprototype>
86
87       <funcprototype>
88         <funcdef>int <function>sd_bus_creds_get_tid</function></funcdef>
89         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
90         <paramdef>pid_t *<parameter>tid</parameter></paramdef>
91       </funcprototype>
92
93       <funcprototype>
94         <funcdef>int <function>sd_bus_creds_get_uid</function></funcdef>
95         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
96         <paramdef>uid_t *<parameter>uid</parameter></paramdef>
97       </funcprototype>
98
99       <funcprototype>
100         <funcdef>int <function>sd_bus_creds_get_euid</function></funcdef>
101         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
102         <paramdef>uid_t *<parameter>uid</parameter></paramdef>
103       </funcprototype>
104
105       <funcprototype>
106         <funcdef>int <function>sd_bus_creds_get_suid</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_fsuid</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_gid</function></funcdef>
119         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
120         <paramdef>gid_t *<parameter>gid</parameter></paramdef>
121       </funcprototype>
122
123       <funcprototype>
124         <funcdef>int <function>sd_bus_creds_get_egid</function></funcdef>
125         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
126         <paramdef>gid_t *<parameter>gid</parameter></paramdef>
127       </funcprototype>
128
129       <funcprototype>
130         <funcdef>int <function>sd_bus_creds_get_sgid</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_fsgid</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_supplementary_gids</function></funcdef>
143         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
144         <paramdef>const gid_t **<parameter>gids</parameter></paramdef>
145       </funcprototype>
146
147       <funcprototype>
148         <funcdef>int <function>sd_bus_creds_get_comm</function></funcdef>
149         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
150         <paramdef>const char **<parameter>comm</parameter></paramdef>
151       </funcprototype>
152
153       <funcprototype>
154         <funcdef>int <function>sd_bus_creds_get_tid_comm</function></funcdef>
155         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
156         <paramdef>const char **<parameter>comm</parameter></paramdef>
157       </funcprototype>
158
159       <funcprototype>
160         <funcdef>int <function>sd_bus_creds_get_exe</function></funcdef>
161         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
162         <paramdef>const char **<parameter>exe</parameter></paramdef>
163       </funcprototype>
164
165       <funcprototype>
166         <funcdef>int <function>sd_bus_creds_get_cmdline</function></funcdef>
167         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
168         <paramdef>char ***<parameter>cmdline</parameter></paramdef>
169       </funcprototype>
170
171       <funcprototype>
172         <funcdef>int <function>sd_bus_creds_get_cgroup</function></funcdef>
173         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
174         <paramdef>const char **<parameter>cgroup</parameter></paramdef>
175       </funcprototype>
176
177       <funcprototype>
178         <funcdef>int <function>sd_bus_creds_get_unit</function></funcdef>
179         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
180         <paramdef>const char **<parameter>unit</parameter></paramdef>
181       </funcprototype>
182
183       <funcprototype>
184         <funcdef>int <function>sd_bus_creds_get_slice</function></funcdef>
185         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
186         <paramdef>const char **<parameter>slice</parameter></paramdef>
187       </funcprototype>
188
189       <funcprototype>
190         <funcdef>int <function>sd_bus_creds_get_user_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_slice</function></funcdef>
197         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
198         <paramdef>const char **<parameter>slice</parameter></paramdef>
199       </funcprototype>
200
201       <funcprototype>
202         <funcdef>int <function>sd_bus_creds_get_session</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_owner_uid</function></funcdef>
209         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
210         <paramdef>uid_t *<parameter>uid</parameter></paramdef>
211       </funcprototype>
212
213       <funcprototype>
214         <funcdef>int <function>sd_bus_creds_has_effective_cap</function></funcdef>
215         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
216         <paramdef>int <parameter>capability</parameter></paramdef>
217       </funcprototype>
218
219       <funcprototype>
220         <funcdef>int <function>sd_bus_creds_has_permitted_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_inheritable_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_bounding_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_get_selinux_context</function></funcdef>
239         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
240         <paramdef>const char **<parameter>context</parameter></paramdef>
241       </funcprototype>
242
243       <funcprototype>
244         <funcdef>int <function>sd_bus_creds_get_audit_session_id</function></funcdef>
245         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
246         <paramdef>uint32_t *<parameter>sessionid</parameter></paramdef>
247       </funcprototype>
248
249       <funcprototype>
250         <funcdef>int <function>sd_bus_creds_get_audit_login_uid</function></funcdef>
251         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
252         <paramdef>uid_t *<parameter>loginuid</parameter></paramdef>
253       </funcprototype>
254
255       <funcprototype>
256         <funcdef>int <function>sd_bus_creds_get_tty</function></funcdef>
257         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
258         <paramdef>const char **<parameter>tty</parameter></paramdef>
259       </funcprototype>
260
261       <funcprototype>
262         <funcdef>int <function>sd_bus_creds_get_unique_name</function></funcdef>
263         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
264         <paramdef>const char **<parameter>name</parameter></paramdef>
265       </funcprototype>
266
267       <funcprototype>
268         <funcdef>int <function>sd_bus_creds_get_well_known_names</function></funcdef>
269         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
270         <paramdef>char ***<parameter>name</parameter></paramdef>
271       </funcprototype>
272
273       <funcprototype>
274         <funcdef>int <function>sd_bus_creds_get_description</function></funcdef>
275         <paramdef>sd_bus_creds *<parameter>c</parameter></paramdef>
276         <paramdef>const char **<parameter>name</parameter></paramdef>
277       </funcprototype>
278
279     </funcsynopsis>
280   </refsynopsisdiv>
281
282   <refsect1>
283     <title>Description</title>
284
285     <para>These functions return credential information from an
286     <parameter>sd_bus_creds</parameter> object. Credential objects may
287     be created with
288     <citerefentry><refentrytitle>sd_bus_creds_new_from_pid</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
289     in which case they describe the credentials of the process
290     identified by the specified PID, with
291     <citerefentry><refentrytitle>sd_bus_get_name_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
292     in which case they describe the credentials of a bus peer
293     identified by the specified bus name, with
294     <citerefentry><refentrytitle>sd_bus_get_owner_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
295     in which case they describe the credentials of the creator of a
296     bus, or with
297     <citerefentry><refentrytitle>sd_bus_message_get_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
298     in which case they describe the credentials of the sender of the
299     message.</para>
300
301     <para>Not all credential fields are part of every
302     <literal>sd_bus_creds</literal> object. Use
303     <citerefentry><refentrytitle>sd_bus_creds_get_mask</refentrytitle><manvolnum>3</manvolnum></citerefentry>
304     to determine the mask of fields available.</para>
305
306     <para><function>sd_bus_creds_get_pid()</function> will retrieve
307     the PID (process identifier). Similarly,
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). Similarly,
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). Similarly,
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 the <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 control group path. See <ulink
357     url="https://www.kernel.org/doc/Documentation/cgroup-v1/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 a 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 a 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 a part of. See
377     <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>. Similarly,
378     <function>sd_bus_creds_get_user_slice()</function> retrieves the
379     systemd slice of the process, in the user instance of systemd.
380     </para>
381
382     <para><function>sd_bus_creds_get_session()</function> will
383     retrieve the identifier of the login session that the process is
384     a part of. Please note the login session may be limited to a stub
385     process or two.  User processes may instead be started from their
386     elogind user manager, e.g. GUI applications started using DBus
387     activation, as well as service processes which are shared between
388     multiple logins of the same user. For processes that are not part
389     of a session, returns -ENXIO.</para>
390
391     <para><function>sd_bus_creds_get_owner_uid()</function> will
392     retrieve the numeric UID (user identifier) of the user who owns
393     the user unit or login session that the process is a part of. See
394     <citerefentry><refentrytitle>systemd-logind.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
395     For processes that are not part of a user unit or session, returns
396     -ENXIO.
397     </para>
398
399     <para><function>sd_bus_creds_has_effective_cap()</function> will check whether the capability specified by
400     <parameter>capability</parameter> was set in the effective capabilities mask. A positive return value means that it
401     was set, zero means that it was not set, and a negative return value indicates an error. See <citerefentry
402     project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry> and the
403     <varname>AmbientCapabilities=</varname> and <varname>CapabilityBoundingSet=</varname> settings in
404     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
405     </para>
406
407     <para><function>sd_bus_creds_has_permitted_cap()</function> is
408     similar to <function>sd_bus_creds_has_effective_cap()</function>,
409     but will check the permitted capabilities mask.</para>
410
411     <para><function>sd_bus_creds_has_inheritable_cap()</function> is
412     similar to <function>sd_bus_creds_has_effective_cap()</function>,
413     but will check the inheritable capabilities mask.</para>
414
415     <para><function>sd_bus_creds_has_bounding_cap()</function> is
416     similar to <function>sd_bus_creds_has_effective_cap()</function>,
417     but will check the bounding capabilities mask.</para>
418
419     <para><function>sd_bus_creds_get_selinux_context()</function> will
420     retrieve the SELinux security context (label) of the process.</para>
421
422     <para><function>sd_bus_creds_get_audit_session_id()</function>
423     will retrieve the audit session identifier of the process. Returns
424     -ENXIO for processes that are not part of an audit session.</para>
425
426     <para><function>sd_bus_creds_get_audit_login_uid()</function> will
427     retrieve the audit user login identifier (the identifier of the
428     user who is "responsible" for the session). Returns -ENXIO for
429     processes that are not part of an audit session.</para>
430
431     <para><function>sd_bus_creds_get_tty()</function> will retrieve
432     the controlling TTY, without the prefixing "/dev/". Returns -ENXIO
433     for processes that have no controlling TTY.</para>
434
435     <para><function>sd_bus_creds_get_unique_name()</function> will
436     retrieve the D-Bus unique name. See <ulink
437     url="http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
438     D-Bus specification</ulink>.</para>
439
440     <para><function>sd_bus_creds_get_well_known_names()</function> will
441     retrieve the set of D-Bus well-known names. See <ulink
442     url="http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus">The
443     D-Bus specification</ulink>.</para>
444
445     <para><function>sd_bus_creds_get_description()</function> will
446     retrieve a descriptive name of the bus connection of the
447     peer. This name is useful to discern multiple bus connections by
448     the same peer, and may be altered by the peer with the
449     <citerefentry><refentrytitle>sd_bus_set_description</refentrytitle><manvolnum>3</manvolnum></citerefentry>
450     call.</para>
451
452     <para>All functions that take a <parameter>const
453     char**</parameter> parameter will store the answer there as an
454     address of a NUL-terminated string. It will be valid as long as
455     <parameter>c</parameter> remains valid, and should not be freed or
456     modified by the caller.</para>
457
458     <para>All functions that take a <parameter>char***</parameter>
459     parameter will store the answer there as an address of an array
460     of strings. Each individual string is NUL-terminated, and the
461     array is NULL-terminated as a whole. It will be valid as long as
462     <parameter>c</parameter> remains valid, and should not be freed or
463     modified by the caller.</para>
464   </refsect1>
465
466   <refsect1>
467     <title>Return Value</title>
468
469     <para>On success, these calls return 0 or a positive integer. On
470     failure, these calls return a negative errno-style error code.
471     </para>
472   </refsect1>
473
474   <refsect1>
475     <title>Errors</title>
476
477     <para>Returned errors may indicate the following problems:</para>
478
479     <variablelist>
480       <varlistentry>
481         <term><constant>-ENODATA</constant></term>
482
483         <listitem><para>The given field is not available in the
484         credentials object <parameter>c</parameter>.</para>
485         </listitem>
486       </varlistentry>
487
488       <varlistentry>
489         <term><constant>-ENXIO</constant></term>
490
491         <listitem><para>The given field is not specified for the described
492         process or peer. This will be returned by
493         <function>sd_bus_creds_get_unit()</function>,
494         <function>sd_bus_creds_get_slice()</function>,
495         <function>sd_bus_creds_get_user_unit()</function>,
496         <function>sd_bus_creds_get_user_slice()</function>, and
497         <function>sd_bus_creds_get_session()</function> if the process is
498         not part of a systemd system unit, systemd user unit, systemd
499         slice, or logind session. It will be returned by
500         <function>sd_bus_creds_get_owner_uid()</function> if the process is
501         not part of a elogind user unit or logind session. It will also be
502         returned by <function>sd_bus_creds_get_exe()</function> and
503         <function>sd_bus_creds_get_cmdline()</function> for kernel
504         threads (since these are not started from an executable binary,
505         nor have a command line), and by
506         <function>sd_bus_creds_get_audit_session_id()</function> and
507         <function>sd_bus_creds_get_audit_login_uid()</function> when
508         the process is not part of an audit session, and
509         <function>sd_bus_creds_get_tty()</function> if the process has
510         no controlling TTY.
511         </para>
512         </listitem>
513       </varlistentry>
514
515       <varlistentry>
516         <term><constant>-EINVAL</constant></term>
517
518         <listitem><para>Specified pointer parameter is <constant>NULL</constant>.
519         </para></listitem>
520       </varlistentry>
521
522       <varlistentry>
523         <term><constant>-ENOMEM</constant></term>
524
525         <listitem><para>Memory allocation failed.</para></listitem>
526       </varlistentry>
527     </variablelist>
528   </refsect1>
529
530   <xi:include href="libelogind-pkgconfig.xml" />
531
532   <refsect1>
533     <title>See Also</title>
534
535     <para>
536       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
537       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
538       <citerefentry><refentrytitle>sd_bus_creds_new_from_pid</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
539       <citerefentry project='man-pages'><refentrytitle>fork</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
540       <citerefentry project='man-pages'><refentrytitle>execve</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
541       <citerefentry project='man-pages'><refentrytitle>credentials</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
542       <citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
543       <citerefentry project='man-pages'><refentrytitle>proc</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
544       <citerefentry><refentrytitle>systemd.journal-fields</refentrytitle><manvolnum>7</manvolnum></citerefentry>
545     </para>
546   </refsect1>
547
548 </refentry>