_cleanup_(sd_json_variant_unrefp) sd_json_variant *query = NULL;
int r;
+ if (FLAGS_SET(flags, USERDB_PARSE_NUMERIC)) {
+ uid_t uid;
+
+ if (parse_uid(name, &uid) >= 0)
+ return userdb_by_uid(uid, flags, ret);
+ }
+
if (!valid_user_group_name(name, VALID_USER_RELAX))
return -EINVAL;
_cleanup_(sd_json_variant_unrefp) sd_json_variant *query = NULL;
int r;
+ if (FLAGS_SET(flags, USERDB_PARSE_NUMERIC)) {
+ gid_t gid;
+
+ if (parse_gid(name, &gid) >= 0)
+ return groupdb_by_gid(gid, flags, ret);
+ }
+
if (!valid_user_group_name(name, VALID_USER_RELAX))
return -EINVAL;
/* Combinations */
USERDB_NSS_ONLY = USERDB_EXCLUDE_VARLINK|USERDB_EXCLUDE_DROPIN|USERDB_DONT_SYNTHESIZE_INTRINSIC|USERDB_DONT_SYNTHESIZE_FOREIGN,
USERDB_DROPIN_ONLY = USERDB_EXCLUDE_NSS|USERDB_EXCLUDE_VARLINK|USERDB_DONT_SYNTHESIZE_INTRINSIC|USERDB_DONT_SYNTHESIZE_FOREIGN,
+
+ USERDB_PARSE_NUMERIC = 1 << 8, /* if a numeric UID is specified as name, parse it and look up by UID/GID */
} UserDBFlags;
/* Well-known errors we'll return here:
if (argc > 1 && !arg_fuzzy)
STRV_FOREACH(i, argv + 1) {
_cleanup_(user_record_unrefp) UserRecord *ur = NULL;
- uid_t uid;
- if (parse_uid(*i, &uid) >= 0)
- r = userdb_by_uid(uid, arg_userdb_flags, &ur);
- else
- r = userdb_by_name(*i, arg_userdb_flags, &ur);
+ r = userdb_by_name(*i, arg_userdb_flags|USERDB_PARSE_NUMERIC, &ur);
if (r < 0) {
if (r == -ESRCH)
log_error_errno(r, "User %s does not exist.", *i);
if (argc > 1 && !arg_fuzzy)
STRV_FOREACH(i, argv + 1) {
_cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
- gid_t gid;
- if (parse_gid(*i, &gid) >= 0)
- r = groupdb_by_gid(gid, arg_userdb_flags, &gr);
- else
- r = groupdb_by_name(*i, arg_userdb_flags, &gr);
+ r = groupdb_by_name(*i, arg_userdb_flags|USERDB_PARSE_NUMERIC, &gr);
if (r < 0) {
if (r == -ESRCH)
log_error_errno(r, "Group %s does not exist.", *i);