# Makefile for www gateway utility
# Europagate, 1995
#
-# $Id: Makefile,v 1.28 1996/01/31 16:01:45 adam Exp $
+# $Id: Makefile,v 1.29 1996/02/12 10:10:27 adam Exp $
#
SHELL=/bin/sh
#
ZDEFS=
-ZINC=-I../../yaz/include
+#ZINC=-I../../yaz/include
ZLIB=../../yaz/lib/libyaz.a
-MOSILIB=../../xtimosi/src/libmosi.a -lrfc
+#ZLIB=-lyaz
+MOSILIB=../../xtimosi/src/libmosi.a ../../yaz/lib/librfc.a
LIBIRTCL=../../ir-tcl/libirtcl.a $(ZLIB) $(MOSILIB)
#NETLIB=-lnsl -lsocket
#
OLIB=../lib/util.a ../lib/libres+log.a
-TCLLIB=/usr/local/lib/libtcl7.4.a
-TCLINC=-I/usr/local/include
+TCLLIB=/usr/local/lib/libtcl7.5.a
+TCLINC=-I../../ir-tcl -I/usr/local/include
#
WSCRIPTS=egwscript targets.egw query.egw search.egw showfull.egw z39util.tcl \
mtargets.egw mquery.egw msearch.egw history.egw tform.egw tdefine.egw
HSCRIPTS=egwindex.html
-CONFFILES=ztargets.conf
+CONFFILES=egw.res ztargets.conf
TPROG1=egwcgi
TPROG2=egwsh
TPROG3=wtest
#GIFDIR=/data2/html/egw/gif
INCLUDE=-I../include $(ZINC) $(TCLINC)
-DEFS=$(INCLUDE) $(ZDEFS) -DCGIDIR=\"$(CGIDIR)\" -DEGWDIR=\"$(EGWDIR)\" \
- -DLOGDIR=\"$(LOGDIR)\"
+DEFS=$(INCLUDE) $(ZDEFS) -DEGWDIR=\"$(EGWDIR)\"
all: $(TPROG1) $(TPROG2)
echo "Making directory $(CGIDIR)"; \
mkdir $(CGIDIR); \
fi
- @for x in $(TPROG1) $(TPROG2); do \
+ @if [ ! -d $(EGWDIR) ]; then \
+ echo "Making directory $(EGWDIR)"; \
+ mkdir $(EGWDIR); \
+ fi
+ @for x in $(TPROG1); do \
echo Installing $$x; \
cp $$x $(CGIDIR); \
chmod a+x $(CGIDIR)/$$x; \
done; \
+ for x in $(TPROG2); do \
+ echo Installing $$x; \
+ cp $$x $(EGWDIR); \
+ chmod a+x $(EGWDIR)/$$x; \
+ done; \
for p in egwtcl egwirtcl egwhtml; do \
- rm -f $(CGIDIR)/$$p; \
- ln $(CGIDIR)/$(TPROG2) $(CGIDIR)/$$p; \
+ rm -f $(EGWDIR)/$$p; \
+ ln $(EGWDIR)/$(TPROG2) $(EGWDIR)/$$p; \
done
install.script:
echo "Making directory $(EGWDIR)"; \
mkdir $(EGWDIR); \
fi
- @if [ ! -d $(HTDOCS); then \
+ @if [ ! -d $(HTDOCS) ]; then \
echo "Making directory $(HTDOCS)"; \
mkdir $(HTDOCS); \
fi
--- /dev/null
+# WWW-Z39.50 Gateway configuration file
+#
+# $Id: egw.res,v 1.1 1996/02/12 10:10:28 adam Exp $
+
+# FIFO file directory
+fifo.dir: /tmp/egw
+
+# Idle time in seconds before the shell terminates
+timeout: 30
+
+# Log level
+log.level: default
+
* 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";
sprintf (envstr, "GWID=%d", id);
putenv (envstr);
- sprintf(path, "%s/%s", CGIDIR, sprog);
+ sprintf(path, "%s/%s", EGWDIR, sprog);
switch(r = fork())
{
case -1:
*/
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)
}
/* 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)
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 */
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)
* USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Log: wirtcl.c,v $
- * Revision 1.13 1996/01/24 08:26:54 adam
+ * Revision 1.14 1996/02/12 10:10:31 adam
+ * Resource/config system used by the gateway.
+ *
+ * Revision 1.13 1996/01/24 08:26:54 adam
* All tcl commands prefixed with egw_ (except the html command).
*
* Revision 1.12 1996/01/12 10:05:18 adam
gw_log (GW_LOG_FATAL, mod, "Cannot make Irtcl_Interp");
exit (1);
}
- log_init(LOG_ALL, "irtcl", LOGDIR "/irtcl_log");
+ log_init(LOG_ALL, "irtcl", "irtcl_log");
/* initialize irtcl */
Tcl_CreateCommand (p->interp, "egw_wait", proc_zwait_invoke, p, NULL);
for (i=0; i<MAX_CALLBACK; i++)
* USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Log: wsh.c,v $
- * Revision 1.10 1996/01/12 10:05:22 adam
+ * Revision 1.11 1996/02/12 10:10:32 adam
+ * Resource/config system used by the gateway.
+ *
+ * Revision 1.10 1996/01/12 10:05:22 adam
* If script name ends with ';' HTTP/GET/Expires will be defined.
* The cgi interface only reads final handshake if response from
* server (shell) was zero-terminated [If it isn't it probably died].
#include <ctype.h>
#include <gw-db.h>
+#include <gw-res.h>
#include "whtml.h"
#include "wtcl.h"
#include "wirtcl.h"
-#define TIMEOUT 60
-
static WCLIENT wcl;
static char *mod = "wsh";
int timeout;
W_Interp w_interp;
GW_DB gw_db;
+ GwRes shRes;
- chdir (EGWDIR);
gw_log_init (*argv);
- gw_log_file (GW_LOG_ALL, LOGDIR "/egwsh_log");
+ gw_log_file (GW_LOG_ALL, "egwsh_log");
+#if 0
gw_log_level (GW_LOG_ALL);
+#endif
gw_log (GW_LOG_STAT, mod, "Europagate www shell: %s", *argv);
-
- if (!(wcl = wproto_init()))
+ shRes = gw_res_init ();
+ gw_res_merge (shRes, "egw.res");
+ gw_res_merge (shRes, "shell.res");
+
+#if 1
+ gw_log_level (gw_log_mask_str (
+ gw_res_get (shRes, "log.level", "default")));
+#endif
+ if (!(wcl = wproto_init (gw_res_get (shRes, "fifo.dir", "/tmp/egw"))))
{
gw_log (GW_LOG_FATAL, mod, "init");
exit(1);
exit (1);
}
w_interp_load_state (w_interp, NULL);
- timeout = TIMEOUT;
+ timeout = atoi (gw_res_get (shRes, "timeout", "120"));
+ if (timeout < 1)
+ timeout = 1;
while (1)
{
char *p;
timeout = 10;
continue;
}
- timeout = TIMEOUT;
+ timeout = atoi (gw_res_get (shRes, "timeout", "120"));
+ if (timeout < 1)
+ timeout = 1;
wo_clear (wcl, NULL);
strcpy (parms_buf, wcl->wf_parms);
script = parms = parms_buf;
for (p = parms; *p; p++)
if (*p == '+')
*p = ' ';
- gw_log (GW_LOG_DEBUG, mod, "script: %s", script);
- gw_log (GW_LOG_DEBUG, mod, "parms: %s", parms);
+ gw_log (GW_LOG_STAT, mod, "script: %s", script);
+ gw_log (GW_LOG_STAT, mod, "parms: %s", parms);
if (w_interp_exec (w_interp, script, parms))
{
wo_printf (wcl, "<html><head><title>wsh error</title></head>\n");
* USE OR PERFORMANCE OF THIS SOFTWARE.
*
* $Log: wtest.c,v $
- * Revision 1.2 1996/01/09 10:46:51 adam
+ * Revision 1.3 1996/02/12 10:10:33 adam
+ * Resource/config system used by the gateway.
+ *
+ * Revision 1.2 1996/01/09 10:46:51 adam
* New defines: LOGDIR/EGWDIR/CGIDIR set in Makefile.
*
* Revision 1.1 1995/10/20 11:49:28 adam
int counter = 0;
int i;
- chdir (CGIDIR);
gw_log_init ("egw");
gw_log_level (GW_LOG_ALL);
- gw_log_file (GW_LOG_ALL, LOGDIR "/wtest_log");
+ gw_log_file (GW_LOG_ALL, "wtest_log");
gw_log (GW_LOG_STAT, mod, "Europagate www test");
- if (!(wcl = wproto_init ()))
+ if (!(wcl = wproto_init ("/tmp/egw")))
{
gw_log (GW_LOG_FATAL, mod, "init");
exit (1);