--- parser3/src/targets/cgi/parser3.C 2002/04/09 08:10:37 1.168 +++ parser3/src/targets/cgi/parser3.C 2002/04/29 05:59:34 1.176 @@ -4,7 +4,7 @@ Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) - $Id: parser3.C,v 1.168 2002/04/09 08:10:37 paf Exp $ + $Id: parser3.C,v 1.176 2002/04/29 05:59:34 paf Exp $ */ #include "pa_config_includes.h" @@ -41,6 +41,7 @@ extern ulong // consts +#ifndef _PROFILE extern const char *main_RCSIds[]; #ifdef USE_SMTP extern const char *smtp_RCSIds[]; @@ -60,9 +61,11 @@ const char **RCSIds[]={ parser3_RCSIds, 0 }; +#endif -const char *PARSER_ROOT_CONFIG_ENV_NAME="HTTP_PARSER_ROOT_CONFIG"; -const char *PARSER_SITE_CONFIG_ENV_NAME="HTTP_PARSER_SITE_CONFIG"; +#define REDIRECT_PREFIX "REDIRECT_" +#define PARSER_ROOT_CONFIG_ENV_NAME "HTTP_PARSER_ROOT_CONFIG" +#define PARSER_SITE_CONFIG_ENV_NAME "HTTP_PARSER_SITE_CONFIG" /// IIS refuses to read bigger chunks const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M @@ -92,8 +95,10 @@ static void log(const char *fmt, va_list // prefix time_t t=time(0); - const char *stamp=ctime(&t); - fprintf(f, "[%.*s] ", strlen(stamp)-1, stamp); + if(const char *stamp=ctime(&t)) { // never saw that + if(size_t len=strlen(stamp)) // saw once stamp being ="" + fprintf(f, "[%.*s] ", len-1, stamp); + } // message char buf[MAX_STRING]; @@ -310,33 +315,41 @@ void real_parser_handler( true /* status_allowed */); // some root-controlled location - const char *root_config_filespec; - if(const char *root_config_by_env=getenv(PARSER_ROOT_CONFIG_ENV_NAME)) - root_config_filespec=root_config_by_env; + const char *root_config_filespec_cstr; + char root_config_filespec_buf[MAX_STRING]; + const char *root_config_by_env=getenv(PARSER_ROOT_CONFIG_ENV_NAME); + if(!root_config_by_env) + root_config_by_env=getenv(REDIRECT_PREFIX PARSER_ROOT_CONFIG_ENV_NAME); + if(root_config_by_env) + root_config_filespec_cstr=root_config_by_env; else { #ifdef ROOT_CONFIG_DIR - root_config_filespec=ROOT_CONFIG_DIR "/" CONFIG_FILE_NAME; + root_config_filespec_cstr=ROOT_CONFIG_DIR "/" CONFIG_FILE_NAME; #else # ifdef WIN32 // c:\windows char windows_dir[MAX_STRING]; GetWindowsDirectory(windows_dir, MAX_STRING); - char buf[MAX_STRING]; - snprintf(buf, MAX_STRING, + + snprintf(root_config_filespec_buf, MAX_STRING, "%s/%s", windows_dir, CONFIG_FILE_NAME); - root_config_filespec=buf; + root_config_filespec_cstr=root_config_filespec_buf; # else #error must be compiled either configure/make or MSVC++ # endif #endif } - const char *site_config_filespec; - if(const char *site_config_by_env=getenv(PARSER_SITE_CONFIG_ENV_NAME)) - site_config_filespec=site_config_by_env; + const char *site_config_filespec_cstr; + char site_config_filespec_buf[MAX_STRING]; + const char *site_config_by_env=getenv(PARSER_SITE_CONFIG_ENV_NAME); + if(!site_config_by_env) + site_config_by_env=getenv(REDIRECT_PREFIX PARSER_SITE_CONFIG_ENV_NAME); + if(site_config_by_env) + site_config_filespec_cstr=site_config_by_env; else { // beside by binary // @todo full path, not ./! @@ -348,17 +361,16 @@ void real_parser_handler( // no path, just filename beside_binary_path[0]='.'; beside_binary_path[1]=0; } - char buf[MAX_STRING]; - snprintf(buf, MAX_STRING, + snprintf(site_config_filespec_buf, MAX_STRING, "%s/%s", beside_binary_path, CONFIG_FILE_NAME); - site_config_filespec=buf; + site_config_filespec_cstr=site_config_filespec_buf; } // process the request request.core( - root_config_filespec, false /*don't fail_on_read_problem*/, - site_config_filespec, false /*don't fail_on_read_problem*/, + root_config_filespec_cstr, false /*fail_on_read_problem*/, + site_config_filespec_cstr, false /*fail_on_read_problem*/, header_only); //