|
From: <do...@us...> - 2008-01-24 13:21:13
|
Update of /cvsroot/aolserver/aolserver/nscgi In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv6747 Modified Files: nscgi.c Log Message: Added Tcl command "ns_register_cgi" which effectively does the same as "ns_param map" at startup, as it takes the same argument, the map string. Also, REQUEST_URI is now properly set in the env. for CGI executables. Index: nscgi.c =================================================================== RCS file: /cvsroot/aolserver/aolserver/nscgi/nscgi.c,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** nscgi.c 24 Jan 2008 03:49:37 -0000 1.32 --- nscgi.c 24 Jan 2008 13:21:12 -0000 1.33 *************** *** 110,113 **** --- 110,119 ---- } Map; + /* + * Local functions defined in this file + */ + + static Tcl_ObjCmdProc CgiTclRegisterCgiObjCmd; + static int AddCmds(Tcl_Interp *interp, void *arg); static Ns_OpProc CgiRequest; static int CgiRegister(Mod *modPtr, char *map); *************** *** 224,227 **** --- 230,240 ---- Ns_MutexSetName2(&modPtr->lock, "nscgi", server); } + + /* + * N.B. What happens next when this module gets loaded more than once? + */ + + Ns_TclInitInterps(server, AddCmds, modPtr); + return NS_OK; } *************** *** 231,234 **** --- 244,300 ---- *---------------------------------------------------------------------- * + * AddCmds -- + * + * Add Tcl commands for nscgi + * + * Results: + * NS_OK + * + * Side effects: + * Adds Tcl commands + * + *---------------------------------------------------------------------- + */ + + static int + AddCmds(Tcl_Interp *interp, void *arg) + { + Tcl_CreateObjCommand(interp, "ns_register_cgi", CgiTclRegisterCgiObjCmd, arg, NULL); + return NS_OK; + } + + /* + *---------------------------------------------------------------------- + * + * CgiTclRegisterCgiObjCmd -- + * + * Implements ns_register_cgi as obj command. + * + * Results: + * Tcl result. + * + * Side effects: + * See docs. + * + *---------------------------------------------------------------------- + */ + + int + CgiTclRegisterCgiObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) + { + Mod *modPtr = (Mod *) arg; + + if (objc != 2) { + Tcl_WrongNumArgs(interp, 1, objv, "map"); + return TCL_ERROR; + } + CgiRegister(modPtr, Tcl_GetString(objv[1])); + return TCL_OK; + } + + + /* + *---------------------------------------------------------------------- + * * CgiRequest - * *************** *** 683,686 **** --- 749,759 ---- */ + Ns_DStringAppend(dsPtr, conn->request->url); + if (conn->request->query != NULL) { + Ns_DStringVarAppend(dsPtr, "?", conn->request->query, NULL); + } + SetUpdate(cgiPtr->env, "REQUEST_URI", dsPtr->string); + Ns_DStringTrunc(dsPtr, 0); + SetUpdate(cgiPtr->env, "SCRIPT_NAME", cgiPtr->name); SetUpdate(cgiPtr->env, "SCRIPT_FILENAME", cgiPtr->path); |