]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-login.h
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / systemd / sd-login.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
74b91131
LP
2#ifndef foosdloginhfoo
3#define foosdloginhfoo
4
5/***
6 This file is part of systemd.
7
8 Copyright 2011 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
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
74b91131
LP
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
5430f7f2 18 Lesser General Public License for more details.
74b91131 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
74b91131
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
667c24a6 24#include <inttypes.h>
71d35b6b 25#include <sys/types.h>
74b91131 26
0095c454 27#include "_sd-common.h"
f9873976 28
034a2a52
LP
29/*
30 * A few points:
31 *
32 * Instead of returning an empty string array or empty uid array, we
33 * may return NULL.
34 *
ee1f44bd 35 * Free the data the library returns with libc free(). String arrays
10b17992 36 * are NULL terminated, and you need to free the array itself, in
ee1f44bd 37 * addition to the strings contained.
034a2a52 38 *
10b17992
JSJ
39 * We return error codes as negative errno, kernel-style. On success, we
40 * return 0 or positive.
034a2a52 41 *
10b17992
JSJ
42 * These functions access data in /proc, /sys/fs/cgroup, and /run. All
43 * of these are virtual file systems; therefore, accesses are
034a2a52 44 * relatively cheap.
cb07866b
LP
45 *
46 * See sd-login(3) for more information.
034a2a52
LP
47 */
48
0095c454
LP
49_SD_BEGIN_DECLARATIONS;
50
034a2a52
LP
51/* Get session from PID. Note that 'shared' processes of a user are
52 * not attached to a session, but only attached to a user. This will
53 * return an error for system processes and 'shared' processes of a
54 * user. */
74b91131
LP
55int sd_pid_get_session(pid_t pid, char **session);
56
034a2a52 57/* Get UID of the owner of the session of the PID (or in case the
10b17992 58 * process is a 'shared' user process, the UID of that user is
034a2a52 59 * returned). This will not return the UID of the process, but rather
10b17992 60 * the UID of the owner of the cgroup that the process is in. This will
034a2a52
LP
61 * return an error for system processes. */
62int sd_pid_get_owner_uid(pid_t pid, uid_t *uid);
63
329ac4bc 64/* Get systemd non-slice unit (i.e. service) name from PID, for system
97e13058 65 * services. This will return an error for non-service processes. */
7027ff61 66int sd_pid_get_unit(pid_t pid, char **unit);
9847946e 67
329ac4bc 68/* Get systemd non-slice unit (i.e. service) name from PID, for user
97e13058
LP
69 * services. This will return an error for non-user-service
70 * processes. */
7027ff61
LP
71int sd_pid_get_user_unit(pid_t pid, char **unit);
72
329ac4bc
LP
73/* Get slice name from PID. */
74int sd_pid_get_slice(pid_t pid, char **slice);
75
76/* Get user slice name from PID. */
77int sd_pid_get_user_slice(pid_t pid, char **slice);
78
10b17992 79/* Get machine name from PID, for processes assigned to a VM or
1021b21b 80 * container. This will return an error for non-machine processes. */
bf34ab14 81int sd_pid_get_machine_name(pid_t pid, char **machine);
97e13058 82
f5aaf575
LP
83/* Get the control group from a PID, relative to the root of the
84 * hierarchy. */
85int sd_pid_get_cgroup(pid_t pid, char **cgroup);
86
a67c56bf
LP
87/* Similar to sd_pid_get_session(), but retrieves data about the peer
88 * of a connected AF_UNIX socket */
bf34ab14
LP
89int sd_peer_get_session(int fd, char **session);
90
a67c56bf
LP
91/* Similar to sd_pid_get_owner_uid(), but retrieves data about the peer of
92 * a connected AF_UNIX socket */
bf34ab14
LP
93int sd_peer_get_owner_uid(int fd, uid_t *uid);
94
a67c56bf
LP
95/* Similar to sd_pid_get_unit(), but retrieves data about the peer of
96 * a connected AF_UNIX socket */
bf34ab14
LP
97int sd_peer_get_unit(int fd, char **unit);
98
a67c56bf
LP
99/* Similar to sd_pid_get_user_unit(), but retrieves data about the peer of
100 * a connected AF_UNIX socket */
bf34ab14
LP
101int sd_peer_get_user_unit(int fd, char **unit);
102
a67c56bf
LP
103/* Similar to sd_pid_get_slice(), but retrieves data about the peer of
104 * a connected AF_UNIX socket */
bf34ab14 105int sd_peer_get_slice(int fd, char **slice);
1021b21b 106
a67c56bf
LP
107/* Similar to sd_pid_get_user_slice(), but retrieves data about the peer of
108 * a connected AF_UNIX socket */
329ac4bc
LP
109int sd_peer_get_user_slice(int fd, char **slice);
110
a67c56bf 111/* Similar to sd_pid_get_machine_name(), but retrieves data about the
ee7dca21 112 * peer of a connected AF_UNIX socket */
329ac4bc
LP
113int sd_peer_get_machine_name(int fd, char **machine);
114
f5aaf575
LP
115/* Similar to sd_pid_get_cgroup(), but retrieves data about the peer
116 * of a connected AF_UNIX socket. */
117int sd_peer_get_cgroup(pid_t pid, char **cgroup);
118
10b17992 119/* Get state from UID. Possible states: offline, lingering, online, active, closing */
a077b666
LP
120int sd_uid_get_state(uid_t uid, char **state);
121
122/* Return primary session of user, if there is any */
123int sd_uid_get_display(uid_t uid, char **session);
74b91131 124
10b17992 125/* Return 1 if UID has session on seat. If require_active is true, this will
034a2a52
LP
126 * look for active sessions only. */
127int sd_uid_is_on_seat(uid_t uid, int require_active, const char *seat);
128
10b17992
JSJ
129/* Return sessions of user. If require_active is true, this will look for
130 * active sessions only. Returns the number of sessions.
131 * If sessions is NULL, this will just return the number of sessions. */
034a2a52 132int sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions);
74b91131 133
10b17992
JSJ
134/* Return seats of user is on. If require_active is true, this will look for
135 * active seats only. Returns the number of seats.
f7340ab2 136 * If seats is NULL, this will just return the number of seats. */
034a2a52 137int sd_uid_get_seats(uid_t uid, int require_active, char ***seats);
74b91131 138
5b04fe60 139/* Return 1 if the session is active. */
74b91131
LP
140int sd_session_is_active(const char *session);
141
5b04fe60
MM
142/* Return 1 if the session is remote. */
143int sd_session_is_remote(const char *session);
144
10b17992
JSJ
145/* Get state from session. Possible states: online, active, closing.
146 * This function is a more generic version of sd_session_is_active(). */
5f34246c 147int sd_session_get_state(const char *session, char **state);
0604381b 148
10b17992 149/* Determine user ID of session */
74b91131
LP
150int sd_session_get_uid(const char *session, uid_t *uid);
151
152/* Determine seat of session */
153int sd_session_get_seat(const char *session, char **seat);
154
eff40633
LP
155/* Determine the (PAM) service name this session was registered by. */
156int sd_session_get_service(const char *session, char **service);
157
9541666b 158/* Determine the type of this session, i.e. one of "tty", "x11", "wayland", "mir" or "unspecified". */
51f58f08
LP
159int sd_session_get_type(const char *session, char **type);
160
161/* Determine the class of this session, i.e. one of "user", "greeter" or "lock-screen". */
e09a9a35 162int sd_session_get_class(const char *session, char **clazz);
51f58f08 163
09077149 164/* Determine the desktop brand of this session, i.e. something like "GNOME", "KDE" or "systemd-console". */
c72d5456
DH
165int sd_session_get_desktop(const char *session, char **desktop);
166
fc8af9ff
LP
167/* Determine the X11 display of this session. */
168int sd_session_get_display(const char *session, char **display);
169
5b04fe60
MM
170/* Determine the remote host of this session. */
171int sd_session_get_remote_host(const char *session, char **remote_host);
172
173/* Determine the remote user of this session (if provided by PAM). */
174int sd_session_get_remote_user(const char *session, char **remote_user);
175
c84f5e4a
LP
176/* Determine the TTY of this session. */
177int sd_session_get_tty(const char *session, char **display);
178
44ded3ab
GC
179/* Determine the VT number of this session. */
180int sd_session_get_vt(const char *session, unsigned *vtnr);
181
74b91131
LP
182/* Return active session and user of seat */
183int sd_seat_get_active(const char *seat, char **session, uid_t *uid);
184
10b17992
JSJ
185/* Return sessions and users on seat. Returns number of sessions.
186 * If sessions is NULL, this returns only the number of sessions. */
034a2a52
LP
187int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **uid, unsigned *n_uids);
188
add30678
LP
189/* Return whether the seat is multi-session capable */
190int sd_seat_can_multi_session(const char *seat);
191
20747498
LP
192/* Return whether the seat is TTY capable, i.e. suitable for showing console UIs */
193int sd_seat_can_tty(const char *seat);
194
195/* Return whether the seat is graphics capable, i.e. suitable for showing graphical UIs */
196int sd_seat_can_graphical(const char *seat);
197
0325941f 198/* Return the class of machine */
e43e3e3e 199int sd_machine_get_class(const char *machine, char **clazz);
0325941f 200
634af566
LP
201/* Return the list if host-side network interface indices of a machine */
202int sd_machine_get_ifindices(const char *machine, int **ifindices);
cabb0bc6 203
d60ef526 204/* Get all seats, store in *seats. Returns the number of seats. If
10b17992 205 * seats is NULL, this only returns the number of seats. */
034a2a52
LP
206int sd_get_seats(char ***seats);
207
e8fbe35d 208/* Get all sessions, store in *sessions. Returns the number of
10b17992 209 * sessions. If sessions is NULL, this only returns the number of sessions. */
034a2a52
LP
210int sd_get_sessions(char ***sessions);
211
d60ef526 212/* Get all logged in users, store in *users. Returns the number of
10b17992 213 * users. If users is NULL, this only returns the number of users. */
034a2a52
LP
214int sd_get_uids(uid_t **users);
215
a20affe2
LP
216/* Get all running virtual machines/containers */
217int sd_get_machine_names(char ***machines);
218
034a2a52
LP
219/* Monitor object */
220typedef struct sd_login_monitor sd_login_monitor;
221
222/* Create a new monitor. Category must be NULL, "seat", "session",
10b17992 223 * "uid", or "machine" to get monitor events for the specific category
e10375f2 224 * (or all). */
034a2a52
LP
225int sd_login_monitor_new(const char *category, sd_login_monitor** ret);
226
227/* Destroys the passed monitor. Returns NULL. */
228sd_login_monitor* sd_login_monitor_unref(sd_login_monitor *m);
229
230/* Flushes the monitor */
231int sd_login_monitor_flush(sd_login_monitor *m);
232
233/* Get FD from monitor */
234int sd_login_monitor_get_fd(sd_login_monitor *m);
235
dace83cb
LP
236/* Get poll() mask to monitor */
237int sd_login_monitor_get_events(sd_login_monitor *m);
238
667c24a6
LP
239/* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */
240int sd_login_monitor_get_timeout(sd_login_monitor *m, uint64_t *timeout_usec);
241
4afd3348
LP
242_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_login_monitor, sd_login_monitor_unref);
243
0095c454 244_SD_END_DECLARATIONS;
f9873976 245
74b91131 246#endif