User and group identifiers the rctl(8) utility receives from the kernel

are always in numeric form; don't try to resolve them by names.  This
speeds up rule listing with large rulesets by about 50%.

MFC after:	1 month
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Edward Tomasz Napierala 2015-11-29 11:30:17 +00:00
parent d3214e8d6d
commit 478f7a726b

View File

@ -193,7 +193,7 @@ humanize_ids(char *rule)
struct passwd *pwd;
struct group *grp;
const char *subject, *textid, *rest;
char *humanized;
char *end, *humanized;
subject = strsep(&rule, ":");
textid = strsep(&rule, ":");
@ -206,12 +206,16 @@ humanize_ids(char *rule)
/* Replace numerical user and group ids with names. */
if (strcasecmp(subject, "user") == 0) {
id = parse_user(textid);
id = strtod(textid, &end);
if ((size_t)(end - textid) != strlen(textid))
errx(1, "malformed uid '%s'", textid);
pwd = getpwuid(id);
if (pwd != NULL)
textid = pwd->pw_name;
} else if (strcasecmp(subject, "group") == 0) {
id = parse_group(textid);
id = strtod(textid, &end);
if ((size_t)(end - textid) != strlen(textid))
errx(1, "malformed gid '%s'", textid);
grp = getgrgid(id);
if (grp != NULL)
textid = grp->gr_name;