Date: Wed, 29 Jul 2009 17:55:17 GMT From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 166740 for review Message-ID: <200907291755.n6THtHGn005756@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166740 Change 166740 by trasz@trasz_victim on 2009/07/29 17:54:17 Make name -> id resolving a little nicer. Affected files ... .. //depot/projects/soc2009/trasz_limits/usr.sbin/hrl/hrl.c#16 edit Differences ... ==== //depot/projects/soc2009/trasz_limits/usr.sbin/hrl/hrl.c#16 (text+ko) ==== @@ -124,30 +124,44 @@ * This routine replaces user/group name with numeric id. */ static char * -resolve_id(char *str) +resolve_ids(char *str) { id_t id; - char *subject, *textid, *resolved; + const char *subject, *textid, *rest; + char *resolved; subject = strsep(&str, ":"); textid = strsep(&str, ":"); if (textid == NULL) errx(1, "error in rule specification: no subject"); - if (str == NULL) - errx(1, "error in rule specification: no subject id"); + if (str != NULL) + rest = str; + else + rest = ""; + + if (strcasecmp(subject, "u") == 0) + subject = "user"; + else if (strcasecmp(subject, "g") == 0) + subject = "group"; + else if (strcasecmp(subject, "p") == 0) + subject = "process"; + else if (strcasecmp(subject, "l") == 0 || strcasecmp(subject, "c") == 0) + subject = "loginclass"; - if (strcasecmp(subject, "user") == 0) { + if (strcasecmp(subject, "user") == 0 && strlen(textid) > 0) { id = parse_user(textid); - asprintf(&resolved, "%s:%d:%s", subject, (int)id, str); - } else if (strcasecmp(subject, "group") == 0) { + asprintf(&resolved, "%s:%d:%s", subject, (int)id, rest); + } else if (strcasecmp(subject, "group") == 0 && strlen(textid) > 0) { id = parse_group(textid); - asprintf(&resolved, "%s:%d:%s", subject, (int)id, str); + asprintf(&resolved, "%s:%d:%s", subject, (int)id, rest); } else - asprintf(&resolved, "%s:%s:%s", subject, textid, str); + asprintf(&resolved, "%s:%s:%s", subject, textid, rest); if (resolved == NULL) err(1, "asprintf"); + fprintf(stderr, "resolved to '%s'\n", resolved); + return (resolved); } @@ -155,13 +169,11 @@ add_rule(char *rule) { int error; - char *resolved; - resolved = resolve_id(rule); - error = hrl_add_rule(resolved, strlen(resolved) + 1, NULL, 0); + error = hrl_add_rule(rule, strlen(rule) + 1, NULL, 0); if (error) err(1, "hrl_add_rule"); - free(resolved); + free(rule); } /* @@ -198,13 +210,11 @@ remove_rule(char *rule) { int error; - char *resolved; - resolved = resolve_id(rule); - error = hrl_remove_rule(resolved, strlen(resolved) + 1, NULL, 0); + error = hrl_remove_rule(rule, strlen(rule) + 1, NULL, 0); if (error) err(1, "hrl_remove_rule"); - free(resolved); + free(rule); } /* @@ -252,10 +262,6 @@ else filterlen = 0; - /* - * XXX: We should resolve user/group names here. - */ - do { outbuflen *= 4; outbuf = realloc(outbuf, outbuflen); @@ -337,6 +343,8 @@ errx(1, "only one flag or argument may be specified " "at the same time"); + rule = resolve_ids(rule); + if (aflag) { add_rule(rule); return (0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907291755.n6THtHGn005756>