PERFORCE change 166740 for review
Edward Tomasz Napierala
trasz at FreeBSD.org
Wed Jul 29 17:55:19 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166740
Change 166740 by trasz at 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);
More information about the p4-projects
mailing list