=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/doas/env.c,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** src/usr.bin/doas/env.c 2016/06/16 17:40:30 1.1 --- src/usr.bin/doas/env.c 2016/06/19 19:29:43 1.2 *************** *** 1,4 **** ! /* $OpenBSD: env.c,v 1.1 2016/06/16 17:40:30 tedu Exp $ */ /* * Copyright (c) 2016 Ted Unangst * --- 1,4 ---- ! /* $OpenBSD: env.c,v 1.2 2016/06/19 19:29:43 martijn Exp $ */ /* * Copyright (c) 2016 Ted Unangst * *************** *** 16,21 **** --- 16,22 ---- */ #include + #include #include #include *************** *** 26,38 **** #include "doas.h" int envcmp(struct envnode *a, struct envnode *b) { return strcmp(a->key, b->key); } ! RB_GENERATE(envtree, envnode, node, envcmp) struct env * createenv(char **envp) { --- 27,54 ---- #include "doas.h" + struct envnode { + RB_ENTRY(envnode) node; + const char *key; + const char *value; + }; + + struct env { + RB_HEAD(envtree, envnode) root; + u_int count; + }; + int envcmp(struct envnode *a, struct envnode *b) { return strcmp(a->key, b->key); } ! RB_GENERATE_STATIC(envtree, envnode, node, envcmp) + struct env *createenv(char **); + struct env *filterenv(struct env *, struct rule *); + char **flattenenv(struct env *); + struct env * createenv(char **envp) { *************** *** 150,153 **** --- 166,180 ---- copyenv(orig, copy, safeset); return copy; + } + + char ** + prepenv(struct rule *rule) + { + extern char **environ; + struct env *env; + + env = createenv(environ); + env = filterenv(env, rule); + return flattenenv(env); }