=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/doas/doas.c,v retrieving revision 1.32 retrieving revision 1.33 diff -c -r1.32 -r1.33 *** src/usr.bin/doas/doas.c 2015/07/29 00:00:31 1.32 --- src/usr.bin/doas/doas.c 2015/07/30 17:04:33 1.33 *************** *** 1,4 **** ! /* $OpenBSD: doas.c,v 1.32 2015/07/29 00:00:31 tedu Exp $ */ /* * Copyright (c) 2015 Ted Unangst * --- 1,4 ---- ! /* $OpenBSD: doas.c,v 1.33 2015/07/30 17:04:33 tedu Exp $ */ /* * Copyright (c) 2015 Ted Unangst * *************** *** 80,98 **** return 0; } ! static gid_t ! strtogid(const char *s) { struct group *gr; const char *errstr; - gid_t gid; ! if ((gr = getgrnam(s)) != NULL) ! return gr->gr_gid; ! gid = strtonum(s, 0, GID_MAX, &errstr); if (errstr) return -1; ! return gid; } static int --- 80,99 ---- return 0; } ! static int ! parsegid(const char *s, gid_t *gid) { struct group *gr; const char *errstr; ! if ((gr = getgrnam(s)) != NULL) { ! *gid = gr->gr_gid; ! return 0; ! } ! *gid = strtonum(s, 0, GID_MAX, &errstr); if (errstr) return -1; ! return 0; } static int *************** *** 102,109 **** int i; if (r->ident[0] == ':') { ! gid_t rgid = strtogid(r->ident + 1); ! if (rgid == -1) return 0; for (i = 0; i < ngroups; i++) { if (rgid == groups[i]) --- 103,110 ---- int i; if (r->ident[0] == ':') { ! gid_t rgid; ! if (parsegid(r->ident + 1, &rgid) == -1) return 0; for (i = 0; i < ngroups; i++) { if (rgid == groups[i])