www-cgi/: Allow customization of the environment filters.
[userv-utils] / www-cgi / ucgi.c
index c4c072d..a2ebe64 100644 (file)
 
 #include "ucgi.h"
 
+static const char *const default_envok[] = {
+  "AUTH_TYPE",
+  "CONTENT_TYPE",
+  "CONTENT_LENGTH",
+  "DOCUMENT_ROOT",
+  "GATEWAY_INTERFACE",
+  "HTTP_*",
+  "HTTPS",
+  "PATH_INFO",
+  "PATH_TRANSLATED",
+  "QUERY_STRING",
+  "REMOTE_*",
+  "REQUEST_METHOD",
+  "REQUEST_URI",
+  "SCRIPT_*",
+  "SERVER_*",
+  0
+};
+
 struct buildargs {
   const char **v;
   int n, max;
@@ -54,7 +73,8 @@ static void add_userv_var(const char *fulln,
 
 int main(int argc, const char **argv) {
   char *username;
-  const char *slash2, *pathi, *av;
+  const char *slash2, *pathi, *ev, *av;
+  const char *const *envok;
   size_t usernamelen, l;
   struct buildargs args;
   pid_t child, rchild;
@@ -72,6 +92,14 @@ int main(int argc, const char **argv) {
   
   if (argc > MAX_ARGS) error("too many arguments");
 
+  ev= getenv("UCGI_ENV_FILTER");
+  if (ev)
+    envok= load_filters(LOADF_MUST, ev, LF_END);
+  else {
+    envok= load_filters(0, "/etc/userv/ucgi.env-filter", LF_END);
+    if (!envok) envok= default_envok;
+  }
+
   pathi= getenv("PATH_INFO");
   if (!pathi) error("PATH_INFO not found");
   D( if (debugmode) {