1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-08-31 09:50:11 +03:00

sysusers: always treat ENOENT as entry-not-found when doing NSS calls

For most NSS calls it is documented that they return NULL + errno=0 when
an entry is not found. However, in reality it appears to be common to
return NULL + errno=ENOENT, instead. Handle that correctly, and don't
consider ENOENT a systematic error.
This commit is contained in:
Lennart Poettering
2014-06-13 19:24:11 +02:00
parent b532bdeae9
commit b0284aba93

View File

@ -481,7 +481,7 @@ static int uid_is_ok(uid_t uid, const char *name) {
p = getpwuid(uid); p = getpwuid(uid);
if (p) if (p)
return 0; return 0;
if (errno != 0) if (!IN_SET(errno, 0, ENOENT))
return -errno; return -errno;
errno = 0; errno = 0;
@ -489,7 +489,7 @@ static int uid_is_ok(uid_t uid, const char *name) {
if (g) { if (g) {
if (!streq(g->gr_name, name)) if (!streq(g->gr_name, name))
return 0; return 0;
} else if (errno != 0) } else if (!IN_SET(errno, 0, ENOENT))
return -errno; return -errno;
} }
@ -595,7 +595,7 @@ static int add_user(Item *i) {
i->description = strdup(p->pw_gecos); i->description = strdup(p->pw_gecos);
return 0; return 0;
} }
if (errno != 0) { if (!IN_SET(errno, 0, ENOENT)) {
log_error("Failed to check if user %s already exists: %m", i->name); log_error("Failed to check if user %s already exists: %m", i->name);
return -errno; return -errno;
} }
@ -607,7 +607,7 @@ static int add_user(Item *i) {
log_error("User %s already exists in shadow database, but not in user database.", i->name); log_error("User %s already exists in shadow database, but not in user database.", i->name);
return -EBADMSG; return -EBADMSG;
} }
if (errno != 0) { if (!IN_SET(errno, 0, ENOENT)) {
log_error("Failed to check if user %s already exists in shadow database: %m", i->name); log_error("Failed to check if user %s already exists in shadow database: %m", i->name);
return -errno; return -errno;
} }
@ -720,14 +720,14 @@ static int gid_is_ok(gid_t gid) {
g = getgrgid(gid); g = getgrgid(gid);
if (g) if (g)
return 0; return 0;
if (errno != 0) if (!IN_SET(errno, 0, ENOENT))
return -errno; return -errno;
errno = 0; errno = 0;
p = getpwuid((uid_t) gid); p = getpwuid((uid_t) gid);
if (p) if (p)
return 0; return 0;
if (errno != 0) if (!IN_SET(errno, 0, ENOENT))
return -errno; return -errno;
} }
@ -761,7 +761,7 @@ static int add_group(Item *i) {
i->gid_set = true; i->gid_set = true;
return 0; return 0;
} }
if (errno != 0) { if (!IN_SET(errno, 0, ENOENT)) {
log_error("Failed to check if group %s already exists: %m", i->name); log_error("Failed to check if group %s already exists: %m", i->name);
return -errno; return -errno;
} }