Coverage Report

Created: 2025-06-24 06:40

/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
}
userdb.c:gid_is_valid
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
user-util.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
}
unit.c:gid_is_valid
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
userdb.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);