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