udev: define a generic helper to print messages about unknown users and groups
We cannot just use %m, because strerror returns a confusing error message for ESRCH or ENOEXEC. udev code was doing a good job, but the error handling was very verbose. Let's encapsulate the customized error messages in a helper. No functional change, except that the error messages have a slightly different form now. The old messages were a bit better, but we don't have as much flexibility in the new scheme. "Failed to resolve user 'foo': Unknown user" should be good enough.
This commit is contained in:
@@ -10,7 +10,8 @@
|
||||
|
||||
#include "basic-forward.h"
|
||||
|
||||
/* Users managed by systemd-homed. See https://systemd.io/UIDS-GIDS for details how this range fits into the rest of the world */
|
||||
/* 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)
|
||||
|
||||
@@ -18,6 +19,12 @@
|
||||
#define MAP_UID_MIN ((uid_t) 60514)
|
||||
#define MAP_UID_MAX ((uid_t) 60577)
|
||||
|
||||
/* A helper to print an error message when user or group resolution fails.
|
||||
* Note that we can't use ({ … }) to define a temporary variable, so errnum is
|
||||
* evaluated multiple times. */
|
||||
#define STRERROR_USER(errnum) ((errnum) == -ESRCH ? "Unknown user" : (errnum) == -ENOEXEC ? "Not a system user" : STRERROR(errnum))
|
||||
#define STRERROR_GROUP(errnum) ((errnum) == -ESRCH ? "Unknown group" : (errnum) == -ENOEXEC ? "Not a system group" : STRERROR(errnum))
|
||||
|
||||
bool uid_is_valid(uid_t uid) _const_;
|
||||
|
||||
static inline bool gid_is_valid(gid_t gid) {
|
||||
|
||||
+14
-22
@@ -512,12 +512,10 @@ static int rule_resolve_user(UdevRuleLine *rule_line, const char *name, uid_t *r
|
||||
r = userdb_by_name(name, &USERDB_MATCH_ROOT_AND_SYSTEM,
|
||||
USERDB_SUPPRESS_SHADOW | USERDB_PARSE_NUMERIC | USERDB_SYNTHESIZE_NUMERIC,
|
||||
&ur);
|
||||
if (r == -ESRCH)
|
||||
return log_line_error_errno(rule_line, r, "Unknown user '%s', ignoring.", name);
|
||||
if (r == -ENOEXEC)
|
||||
return log_line_error_errno(rule_line, r, "User '%s' is not a system user, ignoring.", name);
|
||||
if (r < 0)
|
||||
return log_line_error_errno(rule_line, r, "Failed to resolve user '%s', ignoring: %m", name);
|
||||
return log_line_error_errno(rule_line, r,
|
||||
"Failed to resolve user '%s', ignoring: %s",
|
||||
name, STRERROR_USER(r));
|
||||
|
||||
_cleanup_free_ char *n = strdup(name);
|
||||
if (!n)
|
||||
@@ -549,12 +547,10 @@ static int rule_resolve_group(UdevRuleLine *rule_line, const char *name, gid_t *
|
||||
r = groupdb_by_name(name, &USERDB_MATCH_ROOT_AND_SYSTEM,
|
||||
USERDB_SUPPRESS_SHADOW | USERDB_PARSE_NUMERIC | USERDB_SYNTHESIZE_NUMERIC,
|
||||
&gr);
|
||||
if (r == -ESRCH)
|
||||
return log_line_error_errno(rule_line, r, "Unknown group '%s', ignoring.", name);
|
||||
if (r == -ENOEXEC)
|
||||
return log_line_error_errno(rule_line, r, "Group '%s' is not a system group, ignoring.", name);
|
||||
if (r < 0)
|
||||
return log_line_error_errno(rule_line, r, "Failed to resolve group '%s', ignoring: %m", name);
|
||||
return log_line_error_errno(rule_line, r,
|
||||
"Failed to resolve group '%s', ignoring: %s",
|
||||
name, STRERROR_GROUP(r));
|
||||
|
||||
_cleanup_free_ char *n = strdup(name);
|
||||
if (!n)
|
||||
@@ -2681,12 +2677,10 @@ static int udev_rule_apply_token_to_event(
|
||||
r = userdb_by_name(owner, &USERDB_MATCH_ROOT_AND_SYSTEM,
|
||||
USERDB_SUPPRESS_SHADOW | USERDB_PARSE_NUMERIC | USERDB_SYNTHESIZE_NUMERIC,
|
||||
&ur);
|
||||
if (r == -ESRCH)
|
||||
log_event_error_errno(event, token, r, "Unknown user \"%s\", ignoring.", owner);
|
||||
else if (r == -ENOEXEC)
|
||||
log_event_error(event, token, "User \"%s\" is not a system user, ignoring.", owner);
|
||||
else if (r < 0)
|
||||
log_event_error_errno(event, token, r, "Failed to resolve user \"%s\", ignoring: %m", owner);
|
||||
if (r < 0)
|
||||
log_event_error_errno(event, token, r,
|
||||
"Failed to resolve user \"%s\", ignoring: %s",
|
||||
owner, STRERROR_USER(r));
|
||||
else {
|
||||
event->uid = ur->uid;
|
||||
log_event_debug(event, token, "Set owner: %s("UID_FMT")", owner, event->uid);
|
||||
@@ -2709,12 +2703,10 @@ static int udev_rule_apply_token_to_event(
|
||||
r = groupdb_by_name(group, &USERDB_MATCH_ROOT_AND_SYSTEM,
|
||||
USERDB_SUPPRESS_SHADOW | USERDB_PARSE_NUMERIC | USERDB_SYNTHESIZE_NUMERIC,
|
||||
&gr);
|
||||
if (r == -ESRCH)
|
||||
log_event_error_errno(event, token, r, "Unknown group \"%s\", ignoring.", group);
|
||||
else if (r == -ENOEXEC)
|
||||
log_event_error(event, token, "Group \"%s\" is not a system group, ignoring.", group);
|
||||
else if (r < 0)
|
||||
log_event_error_errno(event, token, r, "Failed to resolve group \"%s\", ignoring: %m", group);
|
||||
if (r < 0)
|
||||
log_event_error_errno(event, token, r,
|
||||
"Failed to resolve group \"%s\", ignoring: %s",
|
||||
group, STRERROR_GROUP(r));
|
||||
else {
|
||||
event->gid = gr->gid;
|
||||
log_event_debug(event, token, "Set group: %s("GID_FMT")", group, event->gid);
|
||||
|
||||
Reference in New Issue
Block a user