-/* $OpenBSD: doas.c,v 1.30 2015/07/28 19:49:04 zhuk Exp $ */
+/* $OpenBSD: doas.c,v 1.32 2015/07/29 00:00:31 tedu Exp $ */
/*
* Copyright (c) 2015 Ted Unangst <tedu@openbsd.org>
*
#include <sys/stat.h>
#include <limits.h>
-#include <login_cap.h>
-#include <bsd_auth.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
#include <errno.h>
+#include "openbsd.h"
+
#include "doas.h"
static void __dead
{
size_t cnt = 0;
- while (*arr) {
- cnt++;
- arr++;
+ if (arr) {
+ while (*arr) {
+ cnt++;
+ arr++;
+ }
}
return cnt;
}
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
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])
yyfp = fopen(filename, "r");
if (!yyfp) {
- if (checkperms)
- fprintf(stderr, "doas is not enabled.\n");
- else
- warn("could not open config file");
+ warn("could not open config file");
exit(1);
}
}
/*
- * Copy to envp environment variables from oldenvp which names are
- * in safeset.
+ * Copy the environment variables in safeset from oldenvp to envp.
*/
static int
-copyenvhelper(const char **oldenvp, const char **safeset, int nsafe,
+copyenvhelper(const char **oldenvp, const char **safeset, size_t nsafe,
char **envp, int ei)
{
- int i;
+ size_t i;
for (i = 0; i < nsafe; i++) {
const char **oe = oldenvp;
char **envp;
const char **extra;
int ei;
- int nsafe, nbad;
- int nextras = 0;
+ size_t nsafe, nbad;
+ size_t nextras = 0;
/* if there was no envvar whitelist, pass all except badset ones */
nbad = arraylen(badset);