]> git.proxmox.com Git - systemd.git/blame - src/systemd/sd-login.h
Imported Upstream version 217
[systemd.git] / src / systemd / sd-login.h
CommitLineData
663996b3
MS
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
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
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
19 Lesser General Public License for more details.
20
21 You should have received a copy of the GNU Lesser General Public License
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
25#include <sys/types.h>
26#include <inttypes.h>
27
60f067b4 28#include "_sd-common.h"
663996b3
MS
29
30/*
31 * A few points:
32 *
33 * Instead of returning an empty string array or empty uid array, we
34 * may return NULL.
35 *
36 * Free the data the library returns with libc free(). String arrays
60f067b4 37 * are NULL terminated, and you need to free the array itself, in
663996b3
MS
38 * addition to the strings contained.
39 *
60f067b4
JS
40 * We return error codes as negative errno, kernel-style. On success, we
41 * return 0 or positive.
663996b3 42 *
60f067b4
JS
43 * These functions access data in /proc, /sys/fs/cgroup, and /run. All
44 * of these are virtual file systems; therefore, accesses are
663996b3
MS
45 * relatively cheap.
46 *
47 * See sd-login(3) for more information.
48 */
49
60f067b4
JS
50_SD_BEGIN_DECLARATIONS;
51
663996b3
MS
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. */
56int sd_pid_get_session(pid_t pid, char **session);
57
58/* Get UID of the owner of the session of the PID (or in case the
60f067b4 59 * process is a 'shared' user process, the UID of that user is
663996b3 60 * returned). This will not return the UID of the process, but rather
60f067b4 61 * the UID of the owner of the cgroup that the process is in. This will
663996b3
MS
62 * return an error for system processes. */
63int sd_pid_get_owner_uid(pid_t pid, uid_t *uid);
64
65/* Get systemd unit (i.e. service) name from PID, for system
66 * services. This will return an error for non-service processes. */
67int sd_pid_get_unit(pid_t pid, char **unit);
68
69/* Get systemd unit (i.e. service) name from PID, for user
70 * services. This will return an error for non-user-service
71 * processes. */
72int sd_pid_get_user_unit(pid_t pid, char **unit);
73
60f067b4 74/* Get machine name from PID, for processes assigned to a VM or
14228c0d 75 * container. This will return an error for non-machine processes. */
60f067b4 76int sd_pid_get_machine_name(pid_t pid, char **machine);
663996b3 77
14228c0d 78/* Get slice name from PID. */
60f067b4
JS
79int sd_pid_get_slice(pid_t pid, char **slice);
80
81/* Similar to sd_pid_get_session(), but retrieves data about peer of
82 * connected AF_UNIX socket */
83int sd_peer_get_session(int fd, char **session);
84
85/* Similar to sd_pid_get_owner_uid(), but retrieves data about peer of
86 * connected AF_UNIX socket */
87int sd_peer_get_owner_uid(int fd, uid_t *uid);
88
89/* Similar to sd_pid_get_unit(), but retrieves data about peer of
90 * connected AF_UNIX socket */
91int sd_peer_get_unit(int fd, char **unit);
92
93/* Similar to sd_pid_get_user_unit(), but retrieves data about peer of
94 * connected AF_UNIX socket */
95int sd_peer_get_user_unit(int fd, char **unit);
96
97/* Similar to sd_pid_get_machine_name(), but retrieves data about peer
98 * of connected AF_UNIX socket */
99int sd_peer_get_machine_name(int fd, char **machine);
14228c0d 100
60f067b4
JS
101/* Similar to sd_pid_get_slice(), but retrieves data about peer of
102 * connected AF_UNIX socket */
103int sd_peer_get_slice(int fd, char **slice);
663996b3 104
60f067b4
JS
105/* Get state from UID. Possible states: offline, lingering, online, active, closing */
106int sd_uid_get_state(uid_t uid, char **state);
107
108/* Return primary session of user, if there is any */
109int sd_uid_get_display(uid_t uid, char **session);
110
111/* Return 1 if UID has session on seat. If require_active is true, this will
663996b3
MS
112 * look for active sessions only. */
113int sd_uid_is_on_seat(uid_t uid, int require_active, const char *seat);
114
60f067b4
JS
115/* Return sessions of user. If require_active is true, this will look for
116 * active sessions only. Returns the number of sessions.
117 * If sessions is NULL, this will just return the number of sessions. */
663996b3
MS
118int sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions);
119
60f067b4
JS
120/* Return seats of user is on. If require_active is true, this will look for
121 * active seats only. Returns the number of seats.
122 * If seats is NULL, this will just return the number of seats.*/
663996b3
MS
123int sd_uid_get_seats(uid_t uid, int require_active, char ***seats);
124
60f067b4 125/* Return 1 if the session is active. */
663996b3
MS
126int sd_session_is_active(const char *session);
127
60f067b4
JS
128/* Return 1 if the session is remote. */
129int sd_session_is_remote(const char *session);
663996b3 130
60f067b4
JS
131/* Get state from session. Possible states: online, active, closing.
132 * This function is a more generic version of sd_session_is_active(). */
133int sd_session_get_state(const char *session, char **state);
134
135/* Determine user ID of session */
663996b3
MS
136int sd_session_get_uid(const char *session, uid_t *uid);
137
138/* Determine seat of session */
139int sd_session_get_seat(const char *session, char **seat);
140
141/* Determine the (PAM) service name this session was registered by. */
142int sd_session_get_service(const char *session, char **service);
143
60f067b4 144/* Determine the type of this session, i.e. one of "tty", "x11", "wayland", "mir" or "unspecified". */
663996b3
MS
145int sd_session_get_type(const char *session, char **type);
146
147/* Determine the class of this session, i.e. one of "user", "greeter" or "lock-screen". */
148int sd_session_get_class(const char *session, char **clazz);
149
5eef597e
MP
150/* Determine the desktop brand of this session, i.e. something like "GNOME", "KDE" or "systemd-console". */
151int sd_session_get_desktop(const char *session, char **desktop);
152
663996b3
MS
153/* Determine the X11 display of this session. */
154int sd_session_get_display(const char *session, char **display);
155
60f067b4
JS
156/* Determine the remote host of this session. */
157int sd_session_get_remote_host(const char *session, char **remote_host);
158
159/* Determine the remote user of this session (if provided by PAM). */
160int sd_session_get_remote_user(const char *session, char **remote_user);
161
663996b3
MS
162/* Determine the TTY of this session. */
163int sd_session_get_tty(const char *session, char **display);
164
14228c0d
MB
165/* Determine the VT number of this session. */
166int sd_session_get_vt(const char *session, unsigned *vtnr);
167
663996b3
MS
168/* Return active session and user of seat */
169int sd_seat_get_active(const char *seat, char **session, uid_t *uid);
170
60f067b4
JS
171/* Return sessions and users on seat. Returns number of sessions.
172 * If sessions is NULL, this returns only the number of sessions. */
663996b3
MS
173int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **uid, unsigned *n_uids);
174
175/* Return whether the seat is multi-session capable */
176int sd_seat_can_multi_session(const char *seat);
177
178/* Return whether the seat is TTY capable, i.e. suitable for showing console UIs */
179int sd_seat_can_tty(const char *seat);
180
181/* Return whether the seat is graphics capable, i.e. suitable for showing graphical UIs */
182int sd_seat_can_graphical(const char *seat);
183
60f067b4
JS
184/* Return the class of machine */
185int sd_machine_get_class(const char *machine, char **clazz);
186
5eef597e
MP
187/* Return the list if host-side network interface indices of a machine */
188int sd_machine_get_ifindices(const char *machine, int **ifindices);
189
663996b3 190/* Get all seats, store in *seats. Returns the number of seats. If
60f067b4 191 * seats is NULL, this only returns the number of seats. */
663996b3
MS
192int sd_get_seats(char ***seats);
193
194/* Get all sessions, store in *sessions. Returns the number of
60f067b4 195 * sessions. If sessions is NULL, this only returns the number of sessions. */
663996b3
MS
196int sd_get_sessions(char ***sessions);
197
198/* Get all logged in users, store in *users. Returns the number of
60f067b4 199 * users. If users is NULL, this only returns the number of users. */
663996b3
MS
200int sd_get_uids(uid_t **users);
201
202/* Get all running virtual machines/containers */
203int sd_get_machine_names(char ***machines);
204
205/* Monitor object */
206typedef struct sd_login_monitor sd_login_monitor;
207
208/* Create a new monitor. Category must be NULL, "seat", "session",
60f067b4 209 * "uid", or "machine" to get monitor events for the specific category
663996b3
MS
210 * (or all). */
211int sd_login_monitor_new(const char *category, sd_login_monitor** ret);
212
213/* Destroys the passed monitor. Returns NULL. */
214sd_login_monitor* sd_login_monitor_unref(sd_login_monitor *m);
215
216/* Flushes the monitor */
217int sd_login_monitor_flush(sd_login_monitor *m);
218
219/* Get FD from monitor */
220int sd_login_monitor_get_fd(sd_login_monitor *m);
221
222/* Get poll() mask to monitor */
223int sd_login_monitor_get_events(sd_login_monitor *m);
224
225/* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */
226int sd_login_monitor_get_timeout(sd_login_monitor *m, uint64_t *timeout_usec);
227
60f067b4 228_SD_END_DECLARATIONS;
663996b3
MS
229
230#endif