|
Zbigniew Jędrzejewski-Szmek |
111b3c |
From e3ba241cd4003ee6eb6704e8c53240687534d6ce Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
Date: Tue, 3 Mar 2020 10:18:32 +0100
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
Subject: [PATCH] sysusers: many different errnos to express one condition
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
See https://bugzilla.redhat.com/show_bug.cgi?id=1807768. It turns
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
out that sysusers cannot query if the group exists:
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
Failed to check if group dnsmasq already exists: No such process
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
...
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
Failed to check if group systemd-timesync already exists: No such process
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
When the same command is executed later, the issue does not occur. Not sure why
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
the behaviour in the initial transaction is different. But let's accept all
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
errors that the man pages list.
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
---
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
src/sysusers/sysusers.c | 10 ++++++++--
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
index 2771fd959f..1b1f19e817 100644
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
--- a/src/sysusers/sysusers.c
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+++ b/src/sysusers/sysusers.c
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
@@ -94,6 +94,12 @@ STATIC_DESTRUCTOR_REGISTER(database_groups, set_free_freep);
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
STATIC_DESTRUCTOR_REGISTER(uid_range, freep);
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+static int errno_is_not_exists(int code) {
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+ /* See getpwnam(3) and getgrnam(3): those codes and others can be returned if the user or group are
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+ * not found. */
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+ return IN_SET(code, 0, ENOENT, ESRCH, EBADF, EPERM);
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
static int load_user_database(void) {
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
_cleanup_fclose_ FILE *f = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
const char *passwd_path;
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
@@ -971,7 +977,7 @@ static int add_user(Item *i) {
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
}
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
- if (!IN_SET(errno, 0, ENOENT))
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+ if (!errno_is_not_exists(errno))
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
return log_error_errno(errno, "Failed to check if user %s already exists: %m", i->name);
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
}
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
@@ -1108,7 +1114,7 @@ static int get_gid_by_name(const char *name, gid_t *gid) {
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
*gid = g->gr_gid;
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
}
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
- if (!IN_SET(errno, 0, ENOENT))
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
+ if (!errno_is_not_exists(errno))
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
return log_error_errno(errno, "Failed to check if group %s already exists: %m", name);
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
}
|
|
Zbigniew Jędrzejewski-Szmek |
111b3c |
|