From owner-p4-projects@FreeBSD.ORG Wed Jul 29 17:55:18 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7A22A1065673; Wed, 29 Jul 2009 17:55:18 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 37E61106566B for ; Wed, 29 Jul 2009 17:55:18 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0B17F8FC13 for ; Wed, 29 Jul 2009 17:55:18 +0000 (UTC) (envelope-from trasz@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6THtHc3005758 for ; Wed, 29 Jul 2009 17:55:17 GMT (envelope-from trasz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6THtHGn005756 for perforce@freebsd.org; Wed, 29 Jul 2009 17:55:17 GMT (envelope-from trasz@freebsd.org) Date: Wed, 29 Jul 2009 17:55:17 GMT Message-Id: <200907291755.n6THtHGn005756@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to trasz@freebsd.org using -f From: Edward Tomasz Napierala To: Perforce Change Reviews Cc: Subject: PERFORCE change 166740 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 17:55:19 -0000 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);