Resource/config system used by the gateway.
[egate.git] / www / wcgi.c
index f6ae643..09b1ff9 100644 (file)
  * USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  * $Log: wcgi.c,v $
- * Revision 1.15  1996/01/26 09:02:20  adam
+ * Revision 1.16  1996/02/12 10:10:29  adam
+ * Resource/config system used by the gateway.
+ *
+ * Revision 1.15  1996/01/26  09:02:20  adam
  * Open of client FIFO called with O_NDELAY when reconnecting to shell
  * in order to prevent serious lock if previous shell died without
  * unlinking client FIFO.
 the server, please reload the server's 'front page'."
 
 #include <gw-db.h>
+#include <gw-res.h>
 #include "wproto.h"
 
 static char *prog = "cgi";
@@ -145,7 +149,7 @@ static int spawn (char *sprog, int id)
 
     sprintf (envstr, "GWID=%d", id);
     putenv (envstr);
-    sprintf(path, "%s/%s", CGIDIR, sprog);
+    sprintf(path, "%s/%s", EGWDIR, sprog);
     switch(r = fork())
     {
        case -1: 
@@ -183,27 +187,40 @@ static void print_environ (void)
  */
 int main()
 {
-    char clientp[256], tmp[256], *path_info, *p, *operation, *t;
+    char clientp[256], *path_info, *p, *operation, *t;
     char combuf[COMBUF];
+    const char *fifoDir;
+    GwRes cgiRes;
     int serverf_fd = -1;
     int linein = -1, lineout, data, gw_id;
 
-    chdir ("/usr/local/etc/httpd/cgi-bin");
+    if (chdir (EGWDIR))
+        fatal ("Couldn't change directory to " EGWDIR);
     gw_log_init ("egw");
-    gw_log_file (GW_LOG_ALL, LOGDIR "/egwcgi_log");
+    gw_log_file (GW_LOG_ALL, "egwcgi_log");
+#if 0
     gw_log_level (GW_LOG_ALL);
+#endif
     gw_log_session (getpid());
     gw_log (GW_LOG_STAT, prog, "Europagate www cgi server");
+    cgiRes = gw_res_init ();
+    gw_res_merge (cgiRes, "egw.res");
 
+#if 1
+    gw_log_level (gw_log_mask_str (
+                  gw_res_get (cgiRes, "log.level", "default")));
+#endif
+    fifoDir = gw_res_get (cgiRes, "fifo.dir", "/tmp/egw");
+    
     /* Create fifo directory if it doesn't exist already */
-    sprintf(tmp, "%s/%s", FIFOROOT, FIFODIR);
-    if (access(tmp, R_OK|W_OK) < 0 && mkdir(tmp, 0777) < 0)
+    if (access(fifoDir, R_OK|W_OK) < 0 && mkdir(fifoDir, 0777) < 0)
     {
-       gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, prog, "Failed to create %s", tmp);
+       gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, prog, "Failed to create %s",
+                fifoDir);
        fatal("Internal error in server.");
     }
     /* Delete server FIFO if it does exist */
-    sprintf(serverp, "%s/srv%d", tmp, getpid());
+    sprintf(serverp, "%s/srv%d", fifoDir, getpid());
     if (access(serverp, R_OK|W_OK) == 0)
     {
        if (unlink(serverp) < 0)
@@ -229,7 +246,7 @@ int main()
     }
     /* Create lock file that ensures the server (shell) doesn't */
     /* terminate before we have read the whole response */
-    sprintf (serverf, "%s/srf%d", tmp, getpid ());
+    sprintf (serverf, "%s/srf%d", fifoDir, getpid ());
     gw_log (GW_LOG_DEBUG, prog, "open w %s", serverf);
     serverf_fd = open (serverf, O_WRONLY|O_CREAT|O_TRUNC, 0666);
     if (serverf_fd == -1)
@@ -292,13 +309,13 @@ int main()
            fatal("Internal error in server");
        }
        gw_log (GW_LOG_DEBUG, prog, "Synchronized");
-        sprintf(clientp, "%s/clt%d", tmp, gw_id);
+        sprintf(clientp, "%s/clt%d", fifoDir, gw_id);
         gw_log (GW_LOG_DEBUG, prog, "open w %s", clientp);
         lineout = open (clientp, O_WRONLY);
     }
     else /* A session is continued */
     {
-        sprintf(clientp, "%s/clt%d", tmp, gw_id);
+        sprintf(clientp, "%s/clt%d", fifoDir, gw_id);
         gw_log (GW_LOG_DEBUG, prog, "open w|n %s", clientp);
         /* Open the FIFO in O_NDELAY-mode: This prevents blocking */
         /* even though the shell died without unlinking the FIFO */
@@ -351,7 +368,7 @@ int main()
     strcpy (p, serverf);
     p += strlen (p) + 1;
     strcpy (p, path_info);
-    gw_log (GW_LOG_DEBUG, prog, "P:%s", p);
+    gw_log (GW_LOG_STAT, prog, "P:%s", p);
     p += strlen(p) + 1;
     *(p++) = '\0';               /* no envvars tranferred at present */
     if ((t = getenv("CONTENT_LENGTH")) && (data = atoi(t)) > 0)