/********************** printParameters.c ********************************* CGI script printing its GET/POST parameters. Can work with FastCGI. (http://meganesia.int.gu.edu.au/~phmartin/int3004/cgi/printParameters.c) Webserver log files on Hal are in /usr/ns-home/httpd-hal/logs/ **************************************************************************/ #include "handyFcts.h" /* --------------------- Handle traces -------------------------- */ #define TRACE_FILE "/var/tmp/myTraces" extern FILE *FpTrace; /* ----- Handle signals (for safety and debugging reasons) ------ */ static BOOL AllTheWorkIsDone=NO; #include void cleanExit(int sig) { if (!AllTheWorkIsDone) pr("Internal error\n\n\n"); if (FpTrace) fclose(FpTrace); _exit(sig); } /* --------------------- Handle FastCGI ------------------------- */ int FCGI_Accept () /* function to remove if FastCGI is installed */ { static int nbCalls=1; nbCalls--; return nbCalls; } /* --------------------- Handle parameters ---------------------- */ extern char **TheEnvp; HTAssocList *Parameters=NULL; /* GET/POST parameters to this CGI script */ static void printParameters(); int main (int argc, char *argv[], char *envp[]) /* argv is empty since this is a CGI script */ { char *strErr, buffForTests[250]; int err=0; errno=0; TheEnvp=envp; /*signal on 2,3,4,10,11,15 (cf. /usr/include/signal.h)*/ signal(SIGINT,cleanExit); signal(SIGQUIT,cleanExit); signal(SIGILL,cleanExit); signal(SIGBUS,cleanExit); signal(SIGSEGV,cleanExit); signal(SIGTERM,cleanExit); while (FCGI_Accept() >=0) { pr("CONTENT-TYPE: text/html\n\n"); /* the double \n is important */ pr("\nResult of CGI script in C\n"); pr("\n\n"); fflush(stdout); /* otherwise next error messages may be printed first */ Parameters= HTAssocList_new(); if ((strErr= initListParamWithCGIparam(initP Parameters))) //if (error) { if (!strncmp(strErr,"This script ",11)) { pr("Enter command(s):\n"); fgets(buffForTests,245,stdin); FpTrace=stderr; } else { pr(strErr); continue; } } else { unlink(TRACE_FILE); chmod(TRACE_FILE, S_IRWXU | S_IRWXG | S_IRWXO); if (!(FpTrace=freopen(TRACE_FILE,"w",stderr))) { pr("Cannot redirect stderr into " TRACE_FILE "\n"); continue; } printParameters(); } pr("\n\n\n"); HTAssocList_delete(Parameters); if (FpTrace) fclose(FpTrace); } AllTheWorkIsDone=YES; /* just to escape a bug about memory deallocation in the local Web server */ return err; } void printParameters() { HTAssocList *paramList = Parameters; HTAssoc *param; pr("\n
\n"); while ((param= HTAssocList_nextObject(paramList))) { pr("
%s:\n",param->name); pr("
%s\n",param->value); } pr("
\n"); }