From: Zeev Suraski Date: Tue, 15 Feb 2000 23:31:10 +0000 (+0000) Subject: @- Improved ISAPI module - it should no longer be necessary to set PHP as X-Git-Tag: BEFORE_SAPI_POST_PATCH_17_FEB_2000~26 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e9dcdb8f97fd167049f8634897876b145660a0aa;p=php @- Improved ISAPI module - it should no longer be necessary to set PHP as @ an ISAPI filter, only as an ISAPI extension, unless you wish to perform @ authentication using PHP. This didn't yet get enough testing, but it @ should work (Zeev) - Fixed auth_user/auth_password memory leak (I didn't have time to test it under Apache, feedback welcome!) --- diff --git a/main/SAPI.c b/main/SAPI.c index 0d5c174116..412f4f3aba 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -178,6 +178,7 @@ SAPI_API void sapi_activate(SLS_D) SG(request_info).post_data = NULL; SG(request_info).current_user = NULL; SG(request_info).current_user_length = 0; + SG(request_info).auth_user = SG(request_info).auth_password = NULL; if (SG(request_info).request_method && !strcmp(SG(request_info).request_method, "HEAD")) { SG(request_info).headers_only = 1; @@ -207,6 +208,12 @@ SAPI_API void sapi_deactivate(SLS_D) if (SG(request_info).post_data) { efree(SG(request_info).post_data); } + if (SG(request_info).auth_user) { + efree(SG(request_info).auth_user); + } + if (SG(request_info).auth_password) { + efree(SG(request_info).auth_password); + } if (SG(request_info).current_user) { efree(SG(request_info).current_user); } diff --git a/sapi/isapi/php4isapi.c b/sapi/isapi/php4isapi.c index 80b50cf1d7..24e8a96b2a 100644 --- a/sapi/isapi/php4isapi.c +++ b/sapi/isapi/php4isapi.c @@ -38,7 +38,7 @@ #define ISAPI_SERVER_VAR_BUF_SIZE 1024 #define ISAPI_POST_DATA_BUF 1024 -int IWasLoaded=0; +static int isapi_globals_id=-1; static char *isapi_server_variables[] = { "ALL_HTTP", @@ -392,8 +392,15 @@ static sapi_module_struct sapi_module = { }; +typedef struct _php_isapi_globals { + char *auth_user; + char *auth_password; +} php_isapi_globals; + + BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pFilterVersion) { + isapi_globals_id = ts_allocate_id(sizeof(php_isapi_globals), NULL, NULL); pFilterVersion->dwFilterVersion = HTTP_FILTER_REVISION; strcpy(pFilterVersion->lpszFilterDesc, sapi_module.name); pFilterVersion->dwFlags= (SF_NOTIFY_AUTHENTICATION | SF_NOTIFY_PREPROC_HEADERS); @@ -403,22 +410,22 @@ BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pFilterVersion) DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, DWORD notificationType, LPVOID pvNotification) { - SLS_FETCH(); + php_isapi_globals *isapi_globals = ts_resource(isapi_globals_id); switch (notificationType) { case SF_NOTIFY_PREPROC_HEADERS: - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; + isapi_globals->auth_user = NULL; + isapi_globals->auth_password = NULL; break; case SF_NOTIFY_AUTHENTICATION: { char *auth_user = ((HTTP_FILTER_AUTHENT *) pvNotification)->pszUser; char *auth_password = ((HTTP_FILTER_AUTHENT *) pvNotification)->pszPassword; if (auth_user && auth_user[0]) { - SG(request_info).auth_user = estrdup(auth_user); + isapi_globals->auth_user = estrdup(auth_user); } if (auth_password && auth_password[0]) { - SG(request_info).auth_password = estrdup(auth_password); + isapi_globals->auth_password = estrdup(auth_password); } auth_user[0] = 0; auth_password[0] = 0; @@ -447,6 +454,12 @@ static void init_request_info(sapi_globals_struct *sapi_globals, LPEXTENSION_CON *path_end = '\\'; } } + if (isapi_globals_id!=-1) { /* we have valid ISAPI Filter information */ + php_isapi_globals *isapi_globals = ts_resource(isapi_globals_id); + + SG(request_info).auth_user = isapi_globals->auth_user; + SG(request_info).auth_password = isapi_globals->auth_password; + } } @@ -564,7 +577,6 @@ __declspec(dllexport) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, L if (sapi_module.startup) { sapi_module.startup(&sapi_module); } - IWasLoaded = 1; break; case DLL_THREAD_ATTACH: break; diff --git a/sapi/servlet/servlet.c b/sapi/servlet/servlet.c index e92bb2e33c..cc2af401a0 100644 --- a/sapi/servlet/servlet.c +++ b/sapi/servlet/servlet.c @@ -387,7 +387,6 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send FREESTRING(SG(request_info).request_uri); FREESTRING(SG(request_info).path_translated); FREESTRING(SG(request_info).content_type); - FREESTRING(SG(request_info).auth_user); FREESTRING(((servlet_request*)SG(server_context))->cookies); efree(SG(server_context)); SG(server_context)=0;