From: Mike Yuan Date: Mon, 18 Nov 2024 18:24:57 +0000 (+0100) Subject: basic/user-util: introduce shell_is_placeholder() helper X-Git-Tag: v257-rc3~71^2~3 X-Git-Url: http://git-history.diyao.me/?a=commitdiff_plain;h=579ce77ead476e3d5b9a774ab00ec3ec53933ab2;p=systemd%2F.git basic/user-util: introduce shell_is_placeholder() helper --- diff --git a/src/basic/user-util.c b/src/basic/user-util.c index 9dcf16d7a4..632f1b6281 100644 --- a/src/basic/user-util.c +++ b/src/basic/user-util.c @@ -322,10 +322,9 @@ int get_user_creds( if (ret_shell) *ret_shell = (FLAGS_SET(flags, USER_CREDS_CLEAN) && - (isempty(p->pw_shell) || + (shell_is_placeholder(p->pw_shell) || !path_is_valid(p->pw_shell) || - !path_is_absolute(p->pw_shell) || - is_nologin_shell(p->pw_shell))) ? NULL : p->pw_shell; + !path_is_absolute(p->pw_shell))) ? NULL : p->pw_shell; if (patch_username) *username = p->pw_name; diff --git a/src/basic/user-util.h b/src/basic/user-util.h index 777451b8c8..4858a9cb58 100644 --- a/src/basic/user-util.h +++ b/src/basic/user-util.h @@ -12,6 +12,8 @@ #include #include +#include "string-util.h" + /* Users managed by systemd-homed. See https://systemd.io/UIDS-GIDS for details how this range fits into the rest of the world */ #define HOME_UID_MIN ((uid_t) 60001) #define HOME_UID_MAX ((uid_t) 60513) @@ -36,6 +38,15 @@ static inline int parse_gid(const char *s, gid_t *ret_gid) { char* getlogname_malloc(void); char* getusername_malloc(void); +const char* default_root_shell_at(int rfd); +const char* default_root_shell(const char *root); + +bool is_nologin_shell(const char *shell); + +static inline bool shell_is_placeholder(const char *shell) { + return isempty(shell) || is_nologin_shell(shell); +} + typedef enum UserCredsFlags { 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 */ USER_CREDS_ALLOW_MISSING = 1 << 1, /* if a numeric UID string is resolved, be OK if there's no record for it */ @@ -125,10 +136,6 @@ int fgetsgent_sane(FILE *stream, struct sgrp **sg); int putsgent_sane(const struct sgrp *sg, FILE *stream); #endif -bool is_nologin_shell(const char *shell); -const char* default_root_shell_at(int rfd); -const char* default_root_shell(const char *root); - int is_this_me(const char *username); const char* get_home_root(void);