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