mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
sd-login: various modernizations (#37728)
This commit is contained in:
@@ -915,7 +915,6 @@ int cg_pid_get_path_shifted(pid_t pid, const char *root, char **ret_cgroup) {
|
||||
|
||||
int cg_path_decode_unit(const char *cgroup, char **ret_unit) {
|
||||
assert(cgroup);
|
||||
assert(ret_unit);
|
||||
|
||||
size_t n = strcspn(cgroup, "/");
|
||||
if (n < 3)
|
||||
@@ -927,7 +926,10 @@ int cg_path_decode_unit(const char *cgroup, char **ret_unit) {
|
||||
if (!unit_name_is_valid(c, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE))
|
||||
return -ENXIO;
|
||||
|
||||
return strdup_to(ret_unit, c);
|
||||
if (ret_unit)
|
||||
return strdup_to(ret_unit, c);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool valid_slice_name(const char *p, size_t n) {
|
||||
@@ -976,7 +978,6 @@ int cg_path_get_unit(const char *path, char **ret) {
|
||||
int r;
|
||||
|
||||
assert(path);
|
||||
assert(ret);
|
||||
|
||||
e = skip_slices(path);
|
||||
|
||||
@@ -988,7 +989,8 @@ int cg_path_get_unit(const char *path, char **ret) {
|
||||
if (endswith(unit, ".slice"))
|
||||
return -ENXIO;
|
||||
|
||||
*ret = TAKE_PTR(unit);
|
||||
if (ret)
|
||||
*ret = TAKE_PTR(unit);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1157,7 +1159,6 @@ int cg_path_get_user_unit(const char *path, char **ret) {
|
||||
const char *t;
|
||||
|
||||
assert(path);
|
||||
assert(ret);
|
||||
|
||||
t = skip_user_prefix(path);
|
||||
if (!t)
|
||||
@@ -1172,8 +1173,6 @@ int cg_pid_get_user_unit(pid_t pid, char **ret_unit) {
|
||||
_cleanup_free_ char *cgroup = NULL;
|
||||
int r;
|
||||
|
||||
assert(ret_unit);
|
||||
|
||||
r = cg_pid_get_path_shifted(pid, NULL, &cgroup);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1198,8 +1197,6 @@ int cg_pid_get_machine_name(pid_t pid, char **ret_machine) {
|
||||
_cleanup_free_ char *cgroup = NULL;
|
||||
int r;
|
||||
|
||||
assert(ret_machine);
|
||||
|
||||
r = cg_pid_get_path_shifted(pid, NULL, &cgroup);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1332,7 +1329,6 @@ int cg_path_get_slice(const char *p, char **ret_slice) {
|
||||
const char *e = NULL;
|
||||
|
||||
assert(p);
|
||||
assert(ret_slice);
|
||||
|
||||
/* Finds the right-most slice unit from the beginning, but stops before we come to
|
||||
* the first non-slice unit. */
|
||||
@@ -1353,15 +1349,16 @@ int cg_path_get_slice(const char *p, char **ret_slice) {
|
||||
if (e)
|
||||
return cg_path_decode_unit(e, ret_slice);
|
||||
|
||||
return strdup_to(ret_slice, SPECIAL_ROOT_SLICE);
|
||||
if (ret_slice)
|
||||
return strdup_to(ret_slice, SPECIAL_ROOT_SLICE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cg_pid_get_slice(pid_t pid, char **ret_slice) {
|
||||
_cleanup_free_ char *cgroup = NULL;
|
||||
int r;
|
||||
|
||||
assert(ret_slice);
|
||||
|
||||
r = cg_pid_get_path_shifted(pid, NULL, &cgroup);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -1372,7 +1369,6 @@ int cg_pid_get_slice(pid_t pid, char **ret_slice) {
|
||||
int cg_path_get_user_slice(const char *p, char **ret_slice) {
|
||||
const char *t;
|
||||
assert(p);
|
||||
assert(ret_slice);
|
||||
|
||||
t = skip_user_prefix(p);
|
||||
if (!t)
|
||||
@@ -1387,8 +1383,6 @@ int cg_pid_get_user_slice(pid_t pid, char **ret_slice) {
|
||||
_cleanup_free_ char *cgroup = NULL;
|
||||
int r;
|
||||
|
||||
assert(ret_slice);
|
||||
|
||||
r = cg_pid_get_path_shifted(pid, NULL, &cgroup);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -535,7 +535,7 @@ int mkfifoat_atomic(int atfd, const char *path, mode_t mode) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_files_in_directory(const char *path, char ***list) {
|
||||
int get_files_in_directory(const char *path, char ***ret_list) {
|
||||
_cleanup_strv_free_ char **l = NULL;
|
||||
_cleanup_closedir_ DIR *d = NULL;
|
||||
size_t n = 0;
|
||||
@@ -554,7 +554,7 @@ int get_files_in_directory(const char *path, char ***list) {
|
||||
if (!dirent_is_file(de))
|
||||
continue;
|
||||
|
||||
if (list) {
|
||||
if (ret_list) {
|
||||
/* one extra slot is needed for the terminating NULL */
|
||||
if (!GREEDY_REALLOC(l, n + 2))
|
||||
return -ENOMEM;
|
||||
@@ -568,8 +568,8 @@ int get_files_in_directory(const char *path, char ***list) {
|
||||
n++;
|
||||
}
|
||||
|
||||
if (list)
|
||||
*list = TAKE_PTR(l);
|
||||
if (ret_list)
|
||||
*ret_list = TAKE_PTR(l);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -45,90 +45,90 @@ _SD_BEGIN_DECLARATIONS;
|
||||
* not attached to a session, but only attached to a user. This will
|
||||
* return an error for system processes and 'shared' processes of a
|
||||
* user. */
|
||||
int sd_pid_get_session(pid_t pid, char **session);
|
||||
int sd_pid_get_session(pid_t pid, char **ret_session);
|
||||
|
||||
/* Get UID of the owner of the session of the PID (or in case the
|
||||
* process is a 'shared' user process, the UID of that user is
|
||||
* returned). This will not return the UID of the process, but rather
|
||||
* the UID of the owner of the cgroup that the process is in. This will
|
||||
* return an error for system processes. */
|
||||
int sd_pid_get_owner_uid(pid_t pid, uid_t *uid);
|
||||
int sd_pid_get_owner_uid(pid_t pid, uid_t *ret_uid);
|
||||
|
||||
/* Get systemd non-slice unit (i.e. service) name from PID, for system
|
||||
* services. This will return an error for non-service processes. */
|
||||
int sd_pid_get_unit(pid_t pid, char **unit);
|
||||
int sd_pid_get_unit(pid_t pid, char **ret_unit);
|
||||
|
||||
/* Get systemd non-slice unit (i.e. service) name from PID, for user
|
||||
* services. This will return an error for non-user-service
|
||||
* processes. */
|
||||
int sd_pid_get_user_unit(pid_t pid, char **unit);
|
||||
int sd_pid_get_user_unit(pid_t pid, char **ret_unit);
|
||||
|
||||
/* Get slice name from PID. */
|
||||
int sd_pid_get_slice(pid_t pid, char **slice);
|
||||
int sd_pid_get_slice(pid_t pid, char **ret_slice);
|
||||
|
||||
/* Get user slice name from PID. */
|
||||
int sd_pid_get_user_slice(pid_t pid, char **slice);
|
||||
int sd_pid_get_user_slice(pid_t pid, char **ret_slice);
|
||||
|
||||
/* Get machine name from PID, for processes assigned to a VM or
|
||||
* container. This will return an error for non-machine processes. */
|
||||
int sd_pid_get_machine_name(pid_t pid, char **machine);
|
||||
int sd_pid_get_machine_name(pid_t pid, char **ret_machine);
|
||||
|
||||
/* Get the control group from a PID, relative to the root of the
|
||||
* hierarchy. */
|
||||
int sd_pid_get_cgroup(pid_t pid, char **cgroup);
|
||||
int sd_pid_get_cgroup(pid_t pid, char **ret_cgroup);
|
||||
|
||||
/* Equivalent to the corresponding sd_pid_get* functions, but take a
|
||||
* PIDFD instead of a PID, to ensure there can be no possible PID
|
||||
* recycle issues before/after the calls. */
|
||||
int sd_pidfd_get_session(int pidfd, char **session);
|
||||
int sd_pidfd_get_owner_uid(int pidfd, uid_t *uid);
|
||||
int sd_pidfd_get_unit(int pidfd, char **unit);
|
||||
int sd_pidfd_get_user_unit(int pidfd, char **unit);
|
||||
int sd_pidfd_get_slice(int pidfd, char **slice);
|
||||
int sd_pidfd_get_user_slice(int pidfd, char **slice);
|
||||
int sd_pidfd_get_machine_name(int pidfd, char **machine);
|
||||
int sd_pidfd_get_cgroup(int pidfd, char **cgroup);
|
||||
int sd_pidfd_get_session(int pidfd, char **ret_session);
|
||||
int sd_pidfd_get_owner_uid(int pidfd, uid_t *ret_uid);
|
||||
int sd_pidfd_get_unit(int pidfd, char **ret_unit);
|
||||
int sd_pidfd_get_user_unit(int pidfd, char **ret_unit);
|
||||
int sd_pidfd_get_slice(int pidfd, char **ret_slice);
|
||||
int sd_pidfd_get_user_slice(int pidfd, char **ret_slice);
|
||||
int sd_pidfd_get_machine_name(int pidfd, char **ret_machine);
|
||||
int sd_pidfd_get_cgroup(int pidfd, char **ret_cgroup);
|
||||
|
||||
/* Similar to sd_pid_get_session(), but retrieves data about the peer
|
||||
* of a connected AF_UNIX socket */
|
||||
int sd_peer_get_session(int fd, char **session);
|
||||
int sd_peer_get_session(int fd, char **ret_session);
|
||||
|
||||
/* Similar to sd_pid_get_owner_uid(), but retrieves data about the peer of
|
||||
* a connected AF_UNIX socket */
|
||||
int sd_peer_get_owner_uid(int fd, uid_t *uid);
|
||||
int sd_peer_get_owner_uid(int fd, uid_t *ret_uid);
|
||||
|
||||
/* Similar to sd_pid_get_unit(), but retrieves data about the peer of
|
||||
* a connected AF_UNIX socket */
|
||||
int sd_peer_get_unit(int fd, char **unit);
|
||||
int sd_peer_get_unit(int fd, char **ret_unit);
|
||||
|
||||
/* Similar to sd_pid_get_user_unit(), but retrieves data about the peer of
|
||||
* a connected AF_UNIX socket */
|
||||
int sd_peer_get_user_unit(int fd, char **unit);
|
||||
int sd_peer_get_user_unit(int fd, char **ret_unit);
|
||||
|
||||
/* Similar to sd_pid_get_slice(), but retrieves data about the peer of
|
||||
* a connected AF_UNIX socket */
|
||||
int sd_peer_get_slice(int fd, char **slice);
|
||||
int sd_peer_get_slice(int fd, char **ret_slice);
|
||||
|
||||
/* Similar to sd_pid_get_user_slice(), but retrieves data about the peer of
|
||||
* a connected AF_UNIX socket */
|
||||
int sd_peer_get_user_slice(int fd, char **slice);
|
||||
int sd_peer_get_user_slice(int fd, char **ret_slice);
|
||||
|
||||
/* Similar to sd_pid_get_machine_name(), but retrieves data about the
|
||||
* peer of a connected AF_UNIX socket */
|
||||
int sd_peer_get_machine_name(int fd, char **machine);
|
||||
int sd_peer_get_machine_name(int fd, char **ret_machine);
|
||||
|
||||
/* Similar to sd_pid_get_cgroup(), but retrieves data about the peer
|
||||
* of a connected AF_UNIX socket. */
|
||||
int sd_peer_get_cgroup(int fd, char **cgroup);
|
||||
int sd_peer_get_cgroup(int fd, char **ret_cgroup);
|
||||
|
||||
/* Get state from UID. Possible states: offline, lingering, online, active, closing */
|
||||
int sd_uid_get_state(uid_t uid, char **state);
|
||||
int sd_uid_get_state(uid_t uid, char **ret_state);
|
||||
|
||||
/* Return primary session of user, if there is any */
|
||||
int sd_uid_get_display(uid_t uid, char **session);
|
||||
int sd_uid_get_display(uid_t uid, char **ret_display);
|
||||
|
||||
/* Determine the login time of user */
|
||||
int sd_uid_get_login_time(uid_t uid, uint64_t *usec);
|
||||
int sd_uid_get_login_time(uid_t uid, uint64_t *ret_usec);
|
||||
|
||||
/* Return 1 if UID has session on seat. If require_active is true, this will
|
||||
* look for active sessions only. */
|
||||
@@ -137,12 +137,12 @@ int sd_uid_is_on_seat(uid_t uid, int require_active, const char *seat);
|
||||
/* Return sessions of user. If require_active is true, this will look for
|
||||
* active sessions only. Returns the number of sessions.
|
||||
* If sessions is NULL, this will just return the number of sessions. */
|
||||
int sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions);
|
||||
int sd_uid_get_sessions(uid_t uid, int require_active, char ***ret_sessions);
|
||||
|
||||
/* Return seats of user is on. If require_active is true, this will look for
|
||||
* active seats only. Returns the number of seats.
|
||||
* If seats is NULL, this will just return the number of seats. */
|
||||
int sd_uid_get_seats(uid_t uid, int require_active, char ***seats);
|
||||
int sd_uid_get_seats(uid_t uid, int require_active, char ***ret_seats);
|
||||
|
||||
/* Return 1 if the session is active. */
|
||||
int sd_session_is_active(const char *session);
|
||||
@@ -152,49 +152,49 @@ int sd_session_is_remote(const char *session);
|
||||
|
||||
/* Get state from session. Possible states: online, active, closing.
|
||||
* This function is a more generic version of sd_session_is_active(). */
|
||||
int sd_session_get_state(const char *session, char **state);
|
||||
int sd_session_get_state(const char *session, char **ret_state);
|
||||
|
||||
/* Determine user ID of session */
|
||||
int sd_session_get_uid(const char *session, uid_t *uid);
|
||||
int sd_session_get_uid(const char *session, uid_t *ret_uid);
|
||||
|
||||
/* Determine username of session */
|
||||
int sd_session_get_username(const char *session, char **username);
|
||||
int sd_session_get_username(const char *session, char **ret_username);
|
||||
|
||||
/* Determine seat of session */
|
||||
int sd_session_get_seat(const char *session, char **seat);
|
||||
int sd_session_get_seat(const char *session, char **ret_seat);
|
||||
|
||||
/* Determine the start time of session */
|
||||
int sd_session_get_start_time(const char *session, uint64_t *usec);
|
||||
int sd_session_get_start_time(const char *session, uint64_t *ret_usec);
|
||||
|
||||
/* Determine the (PAM) service name this session was registered by. */
|
||||
int sd_session_get_service(const char *session, char **service);
|
||||
int sd_session_get_service(const char *session, char **ret_service);
|
||||
|
||||
/* Determine the type of this session, i.e. one of "tty", "x11", "wayland", "mir", "web", or "unspecified". */
|
||||
int sd_session_get_type(const char *session, char **type);
|
||||
int sd_session_get_type(const char *session, char **ret_type);
|
||||
|
||||
/* Determine the class of this session, i.e. one of "user", "greeter" or "lock-screen". */
|
||||
int sd_session_get_class(const char *session, char **clazz);
|
||||
int sd_session_get_class(const char *session, char **ret_clazz);
|
||||
|
||||
/* Determine the desktop brand of this session, i.e. something like "GNOME", "KDE" or "systemd-console". */
|
||||
int sd_session_get_desktop(const char *session, char **desktop);
|
||||
int sd_session_get_desktop(const char *session, char **ret_desktop);
|
||||
|
||||
/* Determine the X11 display of this session. */
|
||||
int sd_session_get_display(const char *session, char **display);
|
||||
int sd_session_get_display(const char *session, char **ret_display);
|
||||
|
||||
/* Determine the leader process of this session. */
|
||||
int sd_session_get_leader(const char *session, pid_t *leader);
|
||||
int sd_session_get_leader(const char *session, pid_t *ret_leader);
|
||||
|
||||
/* Determine the remote host of this session. */
|
||||
int sd_session_get_remote_host(const char *session, char **remote_host);
|
||||
int sd_session_get_remote_host(const char *session, char **ret_remote_host);
|
||||
|
||||
/* Determine the remote user of this session (if provided by PAM). */
|
||||
int sd_session_get_remote_user(const char *session, char **remote_user);
|
||||
int sd_session_get_remote_user(const char *session, char **tre_remote_user);
|
||||
|
||||
/* Determine the TTY of this session. */
|
||||
int sd_session_get_tty(const char *session, char **display);
|
||||
int sd_session_get_tty(const char *session, char **ret_tty);
|
||||
|
||||
/* Determine the VT number of this session. */
|
||||
int sd_session_get_vt(const char *session, unsigned *vtnr);
|
||||
int sd_session_get_vt(const char *session, unsigned *ret_vtnr);
|
||||
|
||||
/* Return active session and user of seat */
|
||||
int sd_seat_get_active(const char *seat, char **ret_session, uid_t *ret_uid);
|
||||
@@ -217,25 +217,25 @@ int sd_seat_can_tty(const char *seat);
|
||||
int sd_seat_can_graphical(const char *seat);
|
||||
|
||||
/* Return the class of machine */
|
||||
int sd_machine_get_class(const char *machine, char **clazz);
|
||||
int sd_machine_get_class(const char *machine, char **ret_clazz);
|
||||
|
||||
/* Return the list if host-side network interface indices of a machine */
|
||||
int sd_machine_get_ifindices(const char *machine, int **ret_ifindices);
|
||||
|
||||
/* Get all seats, store in *seats. Returns the number of seats. If
|
||||
* seats is NULL, this only returns the number of seats. */
|
||||
int sd_get_seats(char ***seats);
|
||||
int sd_get_seats(char ***ret_seats);
|
||||
|
||||
/* Get all sessions, store in *sessions. Returns the number of
|
||||
* sessions. If sessions is NULL, this only returns the number of sessions. */
|
||||
int sd_get_sessions(char ***sessions);
|
||||
int sd_get_sessions(char ***ret_sessions);
|
||||
|
||||
/* Get all logged in users, store in *users. Returns the number of
|
||||
* users. If users is NULL, this only returns the number of users. */
|
||||
int sd_get_uids(uid_t **users);
|
||||
int sd_get_uids(uid_t **ret_users);
|
||||
|
||||
/* Get all running virtual machines/containers */
|
||||
int sd_get_machine_names(char ***machines);
|
||||
int sd_get_machine_names(char ***ret_machines);
|
||||
|
||||
/* Monitor object */
|
||||
typedef struct sd_login_monitor sd_login_monitor;
|
||||
@@ -243,7 +243,7 @@ typedef struct sd_login_monitor sd_login_monitor;
|
||||
/* Create a new monitor. Category must be NULL, "seat", "session",
|
||||
* "uid", or "machine" to get monitor events for the specific category
|
||||
* (or all). */
|
||||
int sd_login_monitor_new(const char *category, sd_login_monitor** ret);
|
||||
int sd_login_monitor_new(const char *category, sd_login_monitor **ret);
|
||||
|
||||
/* Destroys the passed monitor. Returns NULL. */
|
||||
sd_login_monitor* sd_login_monitor_unref(sd_login_monitor *m);
|
||||
@@ -258,7 +258,7 @@ int sd_login_monitor_get_fd(sd_login_monitor *m);
|
||||
int sd_login_monitor_get_events(sd_login_monitor *m);
|
||||
|
||||
/* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */
|
||||
int sd_login_monitor_get_timeout(sd_login_monitor *m, uint64_t *timeout_usec);
|
||||
int sd_login_monitor_get_timeout(sd_login_monitor *m, uint64_t *ret_timeout_usec);
|
||||
|
||||
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_login_monitor, sd_login_monitor_unref);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user