X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=www%2Fwcgi.c;h=06b8ace4389a83abe437724cd6641e642bbb4542;hb=c6ea088406ba64e6ed5ea833e1c2ae516552e18e;hp=3a4dec68187cefcb85a0dce088c66a8f1fbf21af;hpb=6315a552d51ac08b60d25d8500da5574a83ba530;p=egate.git diff --git a/www/wcgi.c b/www/wcgi.c index 3a4dec6..06b8ace 100644 --- a/www/wcgi.c +++ b/www/wcgi.c @@ -41,7 +41,16 @@ * USE OR PERFORMANCE OF THIS SOFTWARE. * * $Log: wcgi.c,v $ - * Revision 1.7 1995/11/08 12:42:18 adam + * Revision 1.9 1995/12/20 16:31:33 adam + * Bug fix: shell might terminate even though new request was initiated + * by the cgi interface program. + * Work on more simple user interface and Europagate buttons. + * + * Revision 1.8 1995/11/08 16:14:35 adam + * Many improvements and bug fixes. + * First version that ran on dtbsun. + * + * Revision 1.7 1995/11/08 12:42:18 adam * Added descriptive text field in target info. * Added authentication field in target info. * @@ -119,6 +128,7 @@ static int spawn (char *sprog, int id) case 0: close (0); close (1); + close (2); gw_log (GW_LOG_DEBUG, prog, "execl %s", path); execl (path, sprog, 0); gw_log (GW_LOG_FATAL|GW_LOG_ERRNO, prog, "execl %s", path); @@ -140,6 +150,7 @@ int main() char combuf[COMBUF]; int linein = -1, lineout, data, gw_id; + chdir ("/usr/local/etc/httpd/cgi-bin"); gw_log_init ("egw"); gw_log_file (GW_LOG_ALL, "/usr/local/etc/httpd/logs/egwcgi_log"); gw_log_level (GW_LOG_ALL); @@ -178,7 +189,7 @@ int main() path_info++; if (*path_info) *(path_info++) = '\0'; - if (!(gw_db = gw_db_open ("user.db", 1))) + if (!(gw_db = gw_db_open ("www.db", 1, 1))) { gw_log (GW_LOG_FATAL, prog, "gw_db_open"); exit (1); @@ -260,10 +271,22 @@ int main() *(p++) = '\0'; /* no envvars tranferred at present */ if ((t = getenv("CONTENT_LENGTH")) && (data = atoi(t)) > 0) { - if (read(0, p, data) < data) - { - gw_log (GW_LOG_FATAL, prog, "Failed to read input"); - fatal("Internal error in server"); + int j, i = 0; + while (i < data) + { + j = read(0, p + i, data - i); + if (j == -1) + { + gw_log (GW_LOG_ERRNO|GW_LOG_FATAL, prog, + "Failed to read input"); + fatal("Internal error in server"); + } + else if (j == 0) + { + gw_log (GW_LOG_ERRNO, prog, "Failed to read input"); + fatal("Internal error in server"); + } + i += j; } } p += data; @@ -283,7 +306,7 @@ int main() } gw_log (GW_LOG_DEBUG, prog, "Reading response"); -#if 0 +#if 1 while ((data = read(linein, combuf, COMBUF)) > 0) { gw_log (GW_LOG_DEBUG, prog, "Got %d bytes", data);