/src/systemd/src/basic/user-util.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
2 | | #pragma once |
3 | | |
4 | | #include <grp.h> |
5 | | #if ENABLE_GSHADOW |
6 | | # include <gshadow.h> |
7 | | #endif |
8 | | #include <pwd.h> |
9 | | #include <shadow.h> |
10 | | |
11 | | #include "forward.h" |
12 | | |
13 | | /* Users managed by systemd-homed. See https://systemd.io/UIDS-GIDS for details how this range fits into the rest of the world */ |
14 | | #define HOME_UID_MIN ((uid_t) 60001) |
15 | | #define HOME_UID_MAX ((uid_t) 60513) |
16 | | |
17 | | /* Users mapped from host into a container */ |
18 | | #define MAP_UID_MIN ((uid_t) 60514) |
19 | | #define MAP_UID_MAX ((uid_t) 60577) |
20 | | |
21 | | bool uid_is_valid(uid_t uid) _const_; |
22 | | |
23 | 313k | static inline bool gid_is_valid(gid_t gid) { |
24 | 313k | return uid_is_valid((uid_t) gid); |
25 | 313k | } Unexecuted instantiation: udev-dump.c:gid_is_valid Unexecuted instantiation: udev-event.c:gid_is_valid Unexecuted instantiation: udev-node.c:gid_is_valid udev-rules.c:gid_is_valid Line | Count | Source | 23 | 8.04k | static inline bool gid_is_valid(gid_t gid) { | 24 | 8.04k | return uid_is_valid((uid_t) gid); | 25 | 8.04k | } |
Unexecuted instantiation: nspawn-settings.c:gid_is_valid journald-context.c:gid_is_valid Line | Count | Source | 23 | 2.67k | static inline bool gid_is_valid(gid_t gid) { | 24 | 2.67k | return uid_is_valid((uid_t) gid); | 25 | 2.67k | } |
Unexecuted instantiation: journald-manager.c:gid_is_valid Unexecuted instantiation: tuntap.c:gid_is_valid Unexecuted instantiation: networkd-routing-policy-rule.c:gid_is_valid Unexecuted instantiation: xdg-autostart-service.c:gid_is_valid Unexecuted instantiation: systemctl-logind.c:gid_is_valid Unexecuted instantiation: acl-util.c:gid_is_valid Unexecuted instantiation: base-filesystem.c:gid_is_valid Unexecuted instantiation: cgroup-setup.c:gid_is_valid Unexecuted instantiation: chown-recursive.c:gid_is_valid Unexecuted instantiation: clean-ipc.c:gid_is_valid Unexecuted instantiation: condition.c:gid_is_valid Unexecuted instantiation: copy.c:gid_is_valid Unexecuted instantiation: creds-util.c:gid_is_valid Unexecuted instantiation: dev-setup.c:gid_is_valid Unexecuted instantiation: dissect-image.c:gid_is_valid Unexecuted instantiation: format-table.c:gid_is_valid group-record.c:gid_is_valid Line | Count | Source | 23 | 9.89k | static inline bool gid_is_valid(gid_t gid) { | 24 | 9.89k | return uid_is_valid((uid_t) gid); | 25 | 9.89k | } |
Unexecuted instantiation: journal-util.c:gid_is_valid Unexecuted instantiation: logs-show.c:gid_is_valid Unexecuted instantiation: mount-util.c:gid_is_valid Unexecuted instantiation: osc-context.c:gid_is_valid Unexecuted instantiation: shift-uid.c:gid_is_valid Unexecuted instantiation: specifier.c:gid_is_valid Unexecuted instantiation: user-record-nss.c:gid_is_valid Unexecuted instantiation: user-record-show.c:gid_is_valid user-record.c:gid_is_valid Line | Count | Source | 23 | 5.51k | static inline bool gid_is_valid(gid_t gid) { | 24 | 5.51k | return uid_is_valid((uid_t) gid); | 25 | 5.51k | } |
userdb-dropin.c:gid_is_valid Line | Count | Source | 23 | 3.72k | static inline bool gid_is_valid(gid_t gid) { | 24 | 3.72k | return uid_is_valid((uid_t) gid); | 25 | 3.72k | } |
Line | Count | Source | 23 | 8.25k | static inline bool gid_is_valid(gid_t gid) { | 24 | 8.25k | return uid_is_valid((uid_t) gid); | 25 | 8.25k | } |
Unexecuted instantiation: wall.c:gid_is_valid Unexecuted instantiation: audit-util.c:gid_is_valid Unexecuted instantiation: capability-util.c:gid_is_valid Unexecuted instantiation: capsule-util.c:gid_is_valid Unexecuted instantiation: cgroup-util.c:gid_is_valid Unexecuted instantiation: chase.c:gid_is_valid Unexecuted instantiation: hostname-util.c:gid_is_valid Unexecuted instantiation: mkdir.c:gid_is_valid Unexecuted instantiation: namespace-util.c:gid_is_valid Unexecuted instantiation: process-util.c:gid_is_valid Unexecuted instantiation: uid-classification.c:gid_is_valid Unexecuted instantiation: uid-range.c:gid_is_valid Line | Count | Source | 23 | 3.72k | static inline bool gid_is_valid(gid_t gid) { | 24 | 3.72k | return uid_is_valid((uid_t) gid); | 25 | 3.72k | } |
Unexecuted instantiation: journal-file.c:gid_is_valid Unexecuted instantiation: sd-id128.c:gid_is_valid Unexecuted instantiation: bus-control.c:gid_is_valid Unexecuted instantiation: bus-creds.c:gid_is_valid bus-socket.c:gid_is_valid Line | Count | Source | 23 | 750 | static inline bool gid_is_valid(gid_t gid) { | 24 | 750 | return uid_is_valid((uid_t) gid); | 25 | 750 | } |
Unexecuted instantiation: sd-bus.c:gid_is_valid Unexecuted instantiation: device-private.c:gid_is_valid Unexecuted instantiation: sd-login.c:gid_is_valid Unexecuted instantiation: json-util.c:gid_is_valid Unexecuted instantiation: sd-json.c:gid_is_valid Unexecuted instantiation: sd-varlink.c:gid_is_valid Unexecuted instantiation: sd-path.c:gid_is_valid Unexecuted instantiation: dbus-execute.c:gid_is_valid Unexecuted instantiation: dbus-manager.c:gid_is_valid Unexecuted instantiation: dbus-util.c:gid_is_valid Unexecuted instantiation: dynamic-user.c:gid_is_valid Unexecuted instantiation: exec-credential.c:gid_is_valid Unexecuted instantiation: load-fragment.c:gid_is_valid Unexecuted instantiation: manager-serialize.c:gid_is_valid Unexecuted instantiation: manager.c:gid_is_valid Unexecuted instantiation: namespace.c:gid_is_valid Unexecuted instantiation: scope.c:gid_is_valid Unexecuted instantiation: socket.c:gid_is_valid Unexecuted instantiation: timer.c:gid_is_valid unit-serialize.c:gid_is_valid Line | Count | Source | 23 | 269k | static inline bool gid_is_valid(gid_t gid) { | 24 | 269k | return uid_is_valid((uid_t) gid); | 25 | 269k | } |
Line | Count | Source | 23 | 2.04k | static inline bool gid_is_valid(gid_t gid) { | 24 | 2.04k | return uid_is_valid((uid_t) gid); | 25 | 2.04k | } |
Unexecuted instantiation: varlink-dynamic-user.c:gid_is_valid |
26 | | |
27 | | int parse_uid(const char *s, uid_t* ret_uid); |
28 | | int parse_uid_range(const char *s, uid_t *ret_lower, uid_t *ret_upper); |
29 | | |
30 | 19.6k | static inline int parse_gid(const char *s, gid_t *ret_gid) { |
31 | 19.6k | return parse_uid(s, (uid_t*) ret_gid); |
32 | 19.6k | } Unexecuted instantiation: udev-dump.c:parse_gid Unexecuted instantiation: udev-event.c:parse_gid Unexecuted instantiation: udev-node.c:parse_gid Unexecuted instantiation: udev-rules.c:parse_gid Unexecuted instantiation: nspawn-settings.c:parse_gid Unexecuted instantiation: journald-context.c:parse_gid Unexecuted instantiation: journald-manager.c:parse_gid Unexecuted instantiation: tuntap.c:parse_gid Unexecuted instantiation: networkd-routing-policy-rule.c:parse_gid Unexecuted instantiation: xdg-autostart-service.c:parse_gid Unexecuted instantiation: systemctl-logind.c:parse_gid Unexecuted instantiation: acl-util.c:parse_gid Unexecuted instantiation: base-filesystem.c:parse_gid Unexecuted instantiation: cgroup-setup.c:parse_gid Unexecuted instantiation: chown-recursive.c:parse_gid Unexecuted instantiation: clean-ipc.c:parse_gid Unexecuted instantiation: condition.c:parse_gid Unexecuted instantiation: copy.c:parse_gid Unexecuted instantiation: creds-util.c:parse_gid Unexecuted instantiation: dev-setup.c:parse_gid Unexecuted instantiation: dissect-image.c:parse_gid Unexecuted instantiation: format-table.c:parse_gid Unexecuted instantiation: group-record.c:parse_gid Unexecuted instantiation: journal-util.c:parse_gid Unexecuted instantiation: logs-show.c:parse_gid Unexecuted instantiation: mount-util.c:parse_gid Unexecuted instantiation: osc-context.c:parse_gid Unexecuted instantiation: shift-uid.c:parse_gid Unexecuted instantiation: specifier.c:parse_gid Unexecuted instantiation: user-record-nss.c:parse_gid Unexecuted instantiation: user-record-show.c:parse_gid Unexecuted instantiation: user-record.c:parse_gid Unexecuted instantiation: userdb-dropin.c:parse_gid Line | Count | Source | 30 | 17.4k | static inline int parse_gid(const char *s, gid_t *ret_gid) { | 31 | 17.4k | return parse_uid(s, (uid_t*) ret_gid); | 32 | 17.4k | } |
Unexecuted instantiation: wall.c:parse_gid Unexecuted instantiation: audit-util.c:parse_gid Unexecuted instantiation: capability-util.c:parse_gid Unexecuted instantiation: capsule-util.c:parse_gid Unexecuted instantiation: cgroup-util.c:parse_gid Unexecuted instantiation: chase.c:parse_gid Unexecuted instantiation: hostname-util.c:parse_gid Unexecuted instantiation: mkdir.c:parse_gid Unexecuted instantiation: namespace-util.c:parse_gid Unexecuted instantiation: process-util.c:parse_gid Unexecuted instantiation: uid-classification.c:parse_gid Unexecuted instantiation: uid-range.c:parse_gid Unexecuted instantiation: user-util.c:parse_gid Unexecuted instantiation: journal-file.c:parse_gid Unexecuted instantiation: sd-id128.c:parse_gid Unexecuted instantiation: bus-control.c:parse_gid Unexecuted instantiation: bus-creds.c:parse_gid Unexecuted instantiation: bus-socket.c:parse_gid Unexecuted instantiation: sd-bus.c:parse_gid Unexecuted instantiation: device-private.c:parse_gid Unexecuted instantiation: sd-login.c:parse_gid Unexecuted instantiation: json-util.c:parse_gid Unexecuted instantiation: sd-json.c:parse_gid Unexecuted instantiation: sd-varlink.c:parse_gid Unexecuted instantiation: sd-path.c:parse_gid Unexecuted instantiation: dbus-execute.c:parse_gid Unexecuted instantiation: dbus-manager.c:parse_gid Unexecuted instantiation: dbus-util.c:parse_gid Unexecuted instantiation: dynamic-user.c:parse_gid Unexecuted instantiation: exec-credential.c:parse_gid Unexecuted instantiation: load-fragment.c:parse_gid Unexecuted instantiation: manager-serialize.c:parse_gid Unexecuted instantiation: manager.c:parse_gid Unexecuted instantiation: namespace.c:parse_gid Unexecuted instantiation: scope.c:parse_gid Unexecuted instantiation: socket.c:parse_gid Unexecuted instantiation: timer.c:parse_gid unit-serialize.c:parse_gid Line | Count | Source | 30 | 2.12k | static inline int parse_gid(const char *s, gid_t *ret_gid) { | 31 | 2.12k | return parse_uid(s, (uid_t*) ret_gid); | 32 | 2.12k | } |
Unexecuted instantiation: unit.c:parse_gid Unexecuted instantiation: varlink-dynamic-user.c:parse_gid |
33 | | |
34 | | char* getlogname_malloc(void); |
35 | | char* getusername_malloc(void); |
36 | | |
37 | | const char* default_root_shell_at(int rfd); |
38 | | const char* default_root_shell(const char *root); |
39 | | |
40 | | bool is_nologin_shell(const char *shell) _pure_; |
41 | | bool shell_is_placeholder(const char *shell) _pure_; |
42 | | |
43 | | typedef enum UserCredsFlags { |
44 | | USER_CREDS_PREFER_NSS = 1 << 0, /* if set, only synthesize user records if database lacks them. Normally we bypass the userdb entirely for the records we can synthesize */ |
45 | | USER_CREDS_ALLOW_MISSING = 1 << 1, /* if a numeric UID string is resolved, be OK if there's no record for it */ |
46 | | USER_CREDS_CLEAN = 1 << 2, /* try to clean up shell and home fields with invalid data */ |
47 | | USER_CREDS_SUPPRESS_PLACEHOLDER = 1 << 3, /* suppress home and/or shell fields if value is placeholder (root/empty/nologin) */ |
48 | | } UserCredsFlags; |
49 | | |
50 | | int get_user_creds(const char **username, uid_t *ret_uid, gid_t *ret_gid, const char **ret_home, const char **ret_shell, UserCredsFlags flags); |
51 | | int get_group_creds(const char **groupname, gid_t *ret_gid, UserCredsFlags flags); |
52 | | |
53 | | char* uid_to_name(uid_t uid); |
54 | | char* gid_to_name(gid_t gid); |
55 | | |
56 | | int in_gid(gid_t gid); |
57 | | int in_group(const char *name); |
58 | | |
59 | | int merge_gid_lists(const gid_t *list1, size_t size1, const gid_t *list2, size_t size2, gid_t **result); |
60 | | int getgroups_alloc(gid_t **ret); |
61 | | |
62 | | int get_home_dir(char **ret); |
63 | | int get_shell(char **ret); |
64 | | |
65 | | int fully_set_uid_gid(uid_t uid, gid_t gid, const gid_t supplementary_gids[], size_t n_supplementary_gids); |
66 | 0 | static inline int reset_uid_gid(void) { |
67 | 0 | return fully_set_uid_gid(0, 0, NULL, 0); |
68 | 0 | } Unexecuted instantiation: udev-dump.c:reset_uid_gid Unexecuted instantiation: udev-event.c:reset_uid_gid Unexecuted instantiation: udev-node.c:reset_uid_gid Unexecuted instantiation: udev-rules.c:reset_uid_gid Unexecuted instantiation: nspawn-settings.c:reset_uid_gid Unexecuted instantiation: journald-context.c:reset_uid_gid Unexecuted instantiation: journald-manager.c:reset_uid_gid Unexecuted instantiation: tuntap.c:reset_uid_gid Unexecuted instantiation: networkd-routing-policy-rule.c:reset_uid_gid Unexecuted instantiation: xdg-autostart-service.c:reset_uid_gid Unexecuted instantiation: systemctl-logind.c:reset_uid_gid Unexecuted instantiation: acl-util.c:reset_uid_gid Unexecuted instantiation: base-filesystem.c:reset_uid_gid Unexecuted instantiation: cgroup-setup.c:reset_uid_gid Unexecuted instantiation: chown-recursive.c:reset_uid_gid Unexecuted instantiation: clean-ipc.c:reset_uid_gid Unexecuted instantiation: condition.c:reset_uid_gid Unexecuted instantiation: copy.c:reset_uid_gid Unexecuted instantiation: creds-util.c:reset_uid_gid Unexecuted instantiation: dev-setup.c:reset_uid_gid Unexecuted instantiation: dissect-image.c:reset_uid_gid Unexecuted instantiation: format-table.c:reset_uid_gid Unexecuted instantiation: group-record.c:reset_uid_gid Unexecuted instantiation: journal-util.c:reset_uid_gid Unexecuted instantiation: logs-show.c:reset_uid_gid Unexecuted instantiation: mount-util.c:reset_uid_gid Unexecuted instantiation: osc-context.c:reset_uid_gid Unexecuted instantiation: shift-uid.c:reset_uid_gid Unexecuted instantiation: specifier.c:reset_uid_gid Unexecuted instantiation: user-record-nss.c:reset_uid_gid Unexecuted instantiation: user-record-show.c:reset_uid_gid Unexecuted instantiation: user-record.c:reset_uid_gid Unexecuted instantiation: userdb-dropin.c:reset_uid_gid Unexecuted instantiation: userdb.c:reset_uid_gid Unexecuted instantiation: wall.c:reset_uid_gid Unexecuted instantiation: audit-util.c:reset_uid_gid Unexecuted instantiation: capability-util.c:reset_uid_gid Unexecuted instantiation: capsule-util.c:reset_uid_gid Unexecuted instantiation: cgroup-util.c:reset_uid_gid Unexecuted instantiation: chase.c:reset_uid_gid Unexecuted instantiation: hostname-util.c:reset_uid_gid Unexecuted instantiation: mkdir.c:reset_uid_gid Unexecuted instantiation: namespace-util.c:reset_uid_gid Unexecuted instantiation: process-util.c:reset_uid_gid Unexecuted instantiation: uid-classification.c:reset_uid_gid Unexecuted instantiation: uid-range.c:reset_uid_gid Unexecuted instantiation: user-util.c:reset_uid_gid Unexecuted instantiation: journal-file.c:reset_uid_gid Unexecuted instantiation: sd-id128.c:reset_uid_gid Unexecuted instantiation: bus-control.c:reset_uid_gid Unexecuted instantiation: bus-creds.c:reset_uid_gid Unexecuted instantiation: bus-socket.c:reset_uid_gid Unexecuted instantiation: sd-bus.c:reset_uid_gid Unexecuted instantiation: device-private.c:reset_uid_gid Unexecuted instantiation: sd-login.c:reset_uid_gid Unexecuted instantiation: json-util.c:reset_uid_gid Unexecuted instantiation: sd-json.c:reset_uid_gid Unexecuted instantiation: sd-varlink.c:reset_uid_gid Unexecuted instantiation: sd-path.c:reset_uid_gid Unexecuted instantiation: dbus-execute.c:reset_uid_gid Unexecuted instantiation: dbus-manager.c:reset_uid_gid Unexecuted instantiation: dbus-util.c:reset_uid_gid Unexecuted instantiation: dynamic-user.c:reset_uid_gid Unexecuted instantiation: exec-credential.c:reset_uid_gid Unexecuted instantiation: load-fragment.c:reset_uid_gid Unexecuted instantiation: manager-serialize.c:reset_uid_gid Unexecuted instantiation: manager.c:reset_uid_gid Unexecuted instantiation: namespace.c:reset_uid_gid Unexecuted instantiation: scope.c:reset_uid_gid Unexecuted instantiation: socket.c:reset_uid_gid Unexecuted instantiation: timer.c:reset_uid_gid Unexecuted instantiation: unit-serialize.c:reset_uid_gid Unexecuted instantiation: unit.c:reset_uid_gid Unexecuted instantiation: varlink-dynamic-user.c:reset_uid_gid |
69 | | |
70 | | int take_etc_passwd_lock(const char *root); |
71 | | |
72 | 185k | #define UID_INVALID ((uid_t) -1) |
73 | 121k | #define GID_INVALID ((gid_t) -1) |
74 | | |
75 | 46.3k | #define UID_NOBODY ((uid_t) 65534U) |
76 | 7.41k | #define GID_NOBODY ((gid_t) 65534U) |
77 | | |
78 | | /* If REMOUNT_IDMAPPING_HOST_ROOT is set for remount_idmap() we'll include a mapping here that maps the host |
79 | | * root user accessing the idmapped mount to the this user ID on the backing fs. This is the last valid UID in |
80 | | * the *signed* 32-bit range. You might wonder why precisely use this specific UID for this purpose? Well, we |
81 | | * definitely cannot use the first 0…65536 UIDs for that, since in most cases that's precisely the file range |
82 | | * we intend to map to some high UID range, and since UID mappings have to be bijective we thus cannot use |
83 | | * them at all. Furthermore the UID range beyond INT32_MAX (i.e. the range above the signed 32-bit range) is |
84 | | * icky, since many APIs cannot use it (example: setfsuid() returns the old UID as signed integer). Following |
85 | | * our usual logic of assigning a 16-bit UID range to each container, so that the upper 16-bit of a 32-bit UID |
86 | | * value indicate kind of a "container ID" and the lower 16-bit map directly to the intended user you can read |
87 | | * this specific UID as the "nobody" user of the container with ID 0x7FFF, which is kinda nice. */ |
88 | | #define UID_MAPPED_ROOT ((uid_t) (INT32_MAX-1)) |
89 | | #define GID_MAPPED_ROOT ((gid_t) (INT32_MAX-1)) |
90 | | |
91 | | #define ETC_PASSWD_LOCK_FILENAME ".pwd.lock" |
92 | | #define ETC_PASSWD_LOCK_PATH "/etc/" ETC_PASSWD_LOCK_FILENAME |
93 | | |
94 | | /* The following macros add 1 when converting things, since UID 0 is a valid UID, while the pointer |
95 | | * NULL is special */ |
96 | 2.74k | #define PTR_TO_UID(p) ((uid_t) (((uintptr_t) (p))-1)) |
97 | 10.4k | #define UID_TO_PTR(u) ((void*) (((uintptr_t) (u))+1)) |
98 | | |
99 | 3.73k | #define PTR_TO_GID(p) ((gid_t) (((uintptr_t) (p))-1)) |
100 | 12.3k | #define GID_TO_PTR(u) ((void*) (((uintptr_t) (u))+1)) |
101 | | |
102 | | typedef enum ValidUserFlags { |
103 | | VALID_USER_RELAX = 1 << 0, |
104 | | VALID_USER_WARN = 1 << 1, |
105 | | VALID_USER_ALLOW_NUMERIC = 1 << 2, |
106 | | } ValidUserFlags; |
107 | | |
108 | | bool valid_user_group_name(const char *u, ValidUserFlags flags); |
109 | | bool valid_gecos(const char *d); |
110 | | char* mangle_gecos(const char *d); |
111 | | bool valid_home(const char *p); |
112 | | bool valid_shell(const char *p); |
113 | | |
114 | | int maybe_setgroups(size_t size, const gid_t *list); |
115 | | |
116 | | bool synthesize_nobody(void); |
117 | | |
118 | | int fgetpwent_sane(FILE *stream, struct passwd **pw); |
119 | | int fgetspent_sane(FILE *stream, struct spwd **sp); |
120 | | int fgetgrent_sane(FILE *stream, struct group **gr); |
121 | | int putpwent_sane(const struct passwd *pw, FILE *stream); |
122 | | int putspent_sane(const struct spwd *sp, FILE *stream); |
123 | | int putgrent_sane(const struct group *gr, FILE *stream); |
124 | | #if ENABLE_GSHADOW |
125 | | int fgetsgent_sane(FILE *stream, struct sgrp **sg); |
126 | | int putsgent_sane(const struct sgrp *sg, FILE *stream); |
127 | | #endif |
128 | | |
129 | | int is_this_me(const char *username); |
130 | | |
131 | | const char* get_home_root(void); |
132 | | |
133 | 0 | static inline bool hashed_password_is_locked_or_invalid(const char *password) { |
134 | 0 | return password && password[0] != '$'; |
135 | 0 | } Unexecuted instantiation: udev-dump.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: udev-event.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: udev-node.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: udev-rules.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: nspawn-settings.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: journald-context.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: journald-manager.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: tuntap.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: networkd-routing-policy-rule.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: xdg-autostart-service.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: systemctl-logind.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: acl-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: base-filesystem.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: cgroup-setup.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: chown-recursive.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: clean-ipc.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: condition.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: copy.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: creds-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: dev-setup.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: dissect-image.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: format-table.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: group-record.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: journal-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: logs-show.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: mount-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: osc-context.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: shift-uid.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: specifier.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: user-record-nss.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: user-record-show.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: user-record.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: userdb-dropin.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: userdb.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: wall.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: audit-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: capability-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: capsule-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: cgroup-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: chase.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: hostname-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: mkdir.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: namespace-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: process-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: uid-classification.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: uid-range.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: user-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: journal-file.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: sd-id128.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: bus-control.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: bus-creds.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: bus-socket.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: sd-bus.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: device-private.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: sd-login.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: json-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: sd-json.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: sd-varlink.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: sd-path.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: dbus-execute.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: dbus-manager.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: dbus-util.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: dynamic-user.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: exec-credential.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: load-fragment.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: manager-serialize.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: manager.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: namespace.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: scope.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: socket.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: timer.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: unit-serialize.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: unit.c:hashed_password_is_locked_or_invalid Unexecuted instantiation: varlink-dynamic-user.c:hashed_password_is_locked_or_invalid |
136 | | |
137 | | /* A locked *and* invalid password for "struct spwd"'s .sp_pwdp and "struct passwd"'s .pw_passwd field */ |
138 | | #define PASSWORD_LOCKED_AND_INVALID "!*" |
139 | | |
140 | | /* A password indicating "look in shadow file, please!" for "struct passwd"'s .pw_passwd */ |
141 | | #define PASSWORD_SEE_SHADOW "x" |
142 | | |
143 | | /* A password indicating "hey, no password required for login" */ |
144 | | #define PASSWORD_NONE "" |
145 | | |
146 | | /* Used by sysusers to indicate that the password should be filled in by firstboot. |
147 | | * Also see https://github.com/systemd/systemd/pull/24680#pullrequestreview-1439464325. |
148 | | */ |
149 | | #define PASSWORD_UNPROVISIONED "!unprovisioned" |
150 | | |
151 | | int getpwuid_malloc(uid_t uid, struct passwd **ret); |
152 | | int getpwnam_malloc(const char *name, struct passwd **ret); |
153 | | |
154 | | int getgrnam_malloc(const char *name, struct group **ret); |
155 | | int getgrgid_malloc(gid_t gid, struct group **ret); |