]> git.armaanb.net Git - opendoas.git/commitdiff
make gid parsing look like uid parsing. from Martijn van Duren
authorTed Unangst <tedu@openbsd.org>
Thu, 30 Jul 2015 17:04:33 +0000 (17:04 +0000)
committerTed Unangst <tedu@openbsd.org>
Thu, 30 Jul 2015 17:04:33 +0000 (17:04 +0000)
ack deraadt

doas.c

diff --git a/doas.c b/doas.c
index 5fd53c063fdb002db96b6857c481706c62d9daf0..7a525e6e9b55432d673c719d7bc145a243813d5d 100644 (file)
--- a/doas.c
+++ b/doas.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: doas.c,v 1.31 2015/07/28 21:36:03 deraadt Exp $ */
+/* $OpenBSD: doas.c,v 1.32 2015/07/29 00:00:31 tedu Exp $ */
 /*
  * Copyright (c) 2015 Ted Unangst <tedu@openbsd.org>
  *
@@ -80,19 +80,20 @@ uidcheck(const char *s, uid_t desired)
        return 0;
 }
 
-static gid_t
-strtogid(const char *s)
+static int
+parsegid(const char *s, gid_t *gid)
 {
        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 ((gr = getgrnam(s)) != NULL) {
+               *gid = gr->gr_gid;
+               return 0;
+       }
+       *gid = strtonum(s, 0, GID_MAX, &errstr);
        if (errstr)
                return -1;
-       return gid;
+       return 0;
 }
 
 static int
@@ -102,8 +103,8 @@ match(uid_t uid, gid_t *groups, int ngroups, uid_t target, const char *cmd,
        int i;
 
        if (r->ident[0] == ':') {
-               gid_t rgid = strtogid(r->ident + 1);
-               if (rgid == -1)
+               gid_t rgid;
+               if (parsegid(r->ident + 1, &rgid) == -1)
                        return 0;
                for (i = 0; i < ngroups; i++) {
                        if (rgid == groups[i])