#include <stdio.h>
#include <string.h>
#include <ctype.h>
+#include <getopt.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "ucgi.h"
-static const char *const envok[]= {
+static const char *const default_envok[]= {
"AUTH_TYPE",
"CONTENT_LENGTH",
"CONTENT_TYPE",
unsetenv(fulln);
}
-int main(int argc, const char **argv) {
+int main(int argc, char **argv) {
char *scriptpath, *newvar;
const char *nextslash, *lastslash, *pathi, *ev, *ev2, *scriptdir, *av;
+ const char *const *envok;
const char **arguments;
size_t scriptdirlen, scriptpathlen, l;
struct stat stab;
- int r, nargs;
+ int i, r, nargs;
+ const char *filters= 0;
ev= getenv("USERV_U_DEBUG");
if (ev && *ev) debugmode= 1;
D( if (debugmode) printf(";;; UCGITARGET\n"); )
if (argc > MAX_ARGS) error("too many arguments");
- if (!*++argv) error("no script directory argument");
+ for (;;) {
+ i= getopt(argc, argv, "+e:"); if (i < 0) break;
+ switch (i) {
+ case 'e': filters= optarg; break;
+ default: error("bad command line"); break;
+ }
+ }
+ argc -= optind; argv += optind;
+
+ if (!*argv) error("no script directory argument");
ev= getenv("HOME"); if (!ev) error("no HOME env. var");
l= strlen(*argv)+strlen(ev);
newvar= xmalloc(l+2);
scriptdir= newvar;
scriptdirlen= strlen(scriptdir);
+ if (filters)
+ envok= load_filters(LOADF_MUST, filters, LF_END);
+ else {
+ envok= load_filters(0,
+ ".userv/ucgitarget.env-filter",
+ "/etc/userv/ucgitarget.env-filter",
+ LF_END);
+ if (!envok) envok= default_envok;
+ }
+
filter_environment(0, "USERV_U_E_", envok, setenvar, 0);
scriptpath= 0;