cvs: php4 /sapi/caudium caudium.c

From: Date: Fri, 09 Feb 2001 05:32:42 +0000
Subject: cvs: php4 /sapi/caudium caudium.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-3960@lists.php.net to get a copy of this message
neotron Thu Feb 8 21:32:42 2001 EDT Modified files: /php4/sapi/caudium caudium.c Log: Fixed PHP authentication and some other minor things. Index: php4/sapi/caudium/caudium.c diff -u php4/sapi/caudium/caudium.c:1.8 php4/sapi/caudium/caudium.c:1.9 --- php4/sapi/caudium/caudium.c:1.8 Tue Jan 2 14:49:28 2001 +++ php4/sapi/caudium/caudium.c Thu Feb 8 21:32:42 2001 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: caudium.c,v 1.8 2001/01/02 22:49:28 zeev Exp $ */ +/* $Id: caudium.c,v 1.9 2001/02/09 05:32:42 neotron Exp $ */ #include "php.h" #ifdef HAVE_CAUDIUM @@ -121,26 +121,15 @@ */ #define REQUEST_DATA ((struct mapping *)(THIS->request_data)) - -#if 0 && defined(_REENTRANT) && !defined(CAUDIUM_USE_ZTS) -/* Lock used to serialize the PHP execution. If CAUDIUM_USE_ZTS is defined, we - * are using the PHP thread safe mechanism instead. - */ -static PIKE_MUTEX_T caudium_php_execution_lock; -# define PHP_INIT_LOCK() mt_init(&caudium_php_execution_lock) -# define PHP_LOCK(X) THREADS_ALLOW();mt_lock(&caudium_php_execution_lock);THREADS_DISALLOW() -# define PHP_UNLOCK(X) mt_unlock(&caudium_php_execution_lock); -# define PHP_DESTROY() mt_destroy(&caudium_php_execution_lock) -#else /* !_REENTRANT */ -# define PHP_INIT_LOCK() -# define PHP_LOCK(X) -# define PHP_UNLOCK(X) -# define PHP_DESTROY() -#endif /* _REENTRANT */ - extern int fd_from_object(struct object *o); static unsigned char caudium_php_initialized; +#ifndef mt_lock_interpreter +#define mt_lock_interpreter() mt_lock(&interpreter_lock); +#define mt_unlock_interpreter() mt_unlock(&interpreter_lock); +#endif + + /* This allows calling of pike functions from the PHP callbacks, * which requires the Pike interpreter to be locked. */ @@ -150,25 +139,17 @@ if(!state->swapped) {\ COMMAND;\ } else {\ - mt_lock(&interpreter_lock);\ + mt_lock_interpreter();\ SWAP_IN_THREAD(state);\ COMMAND;\ SWAP_OUT_THREAD(state);\ - mt_unlock(&interpreter_lock);\ + mt_unlock_interpreter();\ }\ }\ } while(0) -struct program *php_program; -/* To avoid executing a PHP script from a PHP callback, which would - * create a deadlock, a global thread id is used. If the thread calling the - * php-script is the same as the current thread, it fails. - */ -//static int current_thread = -1; - - /* Low level header lookup. Basically looks for the named header in the mapping * headers in the supplied options mapping. */ @@ -458,7 +439,7 @@ { /* char buf[512]; */ php_info_print_table_start(); - php_info_print_table_row(2, "SAPI module version", "$Id: caudium.c,v 1.8 2001/01/02 22:49:28 zeev Exp $"); + php_info_print_table_row(2, "SAPI module version", "$Id: caudium.c,v 1.9 2001/02/09 05:32:42 neotron Exp $"); /* php_info_print_table_row(2, "Build date", Ns_InfoBuildDate()); php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile()); php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog()); @@ -571,27 +552,25 @@ static void php_caudium_module_main(php_caudium_request *ureq) { - int res, len; - char *dir; + int res; + int cnt = 0; zend_file_handle file_handle; struct thread_state *state; extern struct program *thread_id_prog; - // struct php_caudium_request *ureq; SLS_FETCH(); CLS_FETCH(); PLS_FETCH(); ELS_FETCH(); GET_THIS(); - // ureq = (struct php_caudium_request *)ud; THIS->filename = ureq->filename; THIS->done_cb = ureq->done_cb; THIS->my_fd_obj = ureq->my_fd_obj; THIS->my_fd = ureq->my_fd; THIS->request_data = ureq->request_data; free(ureq); - // current_thread = th_self(); + #ifndef TEST_NO_THREADS - mt_lock(&interpreter_lock); + mt_lock_interpreter(); init_interpreter(); #if PIKE_MAJOR_VERSION == 7 && PIKE_MINOR_VERSION < 1 Pike_stack_top=((char *)&state)+ (thread_stack_size-16384) * STACK_DIRECTION; @@ -636,25 +615,22 @@ SG(request_info).headers_only = 0; } - /* FIXME: Check for auth stuff needs to be fixed... */ - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; - - /* Swap out this thread and release the interpreter lock to allow + /* Let PHP4 handle the deconding of the AUTH */ + php_handle_auth_data(lookup_string_header("HTTP_AUTHORIZATION", NULL), SLS_C); + /* Swap out this thread and release the interpreter lock to allow * Pike threads to run. We wait since the above would otherwise require * a lot of unlock/lock. */ #ifndef TEST_NO_THREADS SWAP_OUT_CURRENT_THREAD(); - mt_unlock(&interpreter_lock); + mt_unlock_interpreter(); #endif - /* Change virtual work directory */ - #ifdef VIRTUAL_DIR /* Change virtual directory, if the feature is enabled, which is - * almost a requirement for PHP in Roxen. Might want to fail if it - * isn't. Not a problem though, since it's on by default when using ZTS. + * (almost) a requirement for PHP in Caudium. Might want to fail if it + * isn't. Not a problem though, since it's on by default when using ZTS + * which we require. */ V_CHDIR_FILE(THIS->filename->str); #endif @@ -667,6 +643,7 @@ if(res == FAILURE) { THREAD_SAFE_RUN({ + apply_svalue(&THIS->done_cb, 0); pop_stack(); free_struct(SLS_C); @@ -684,7 +661,7 @@ }, "positive run response"); } #ifndef TEST_NO_THREADS - mt_lock(&interpreter_lock); + mt_lock_interpreter(); SWAP_IN_CURRENT_THREAD(); #if PIKE_MAJOR_VERSION == 7 && PIKE_MINOR_VERSION < 1 OBJ2THREAD(thread_id)->status=THREAD_EXITED; @@ -701,7 +678,7 @@ #endif cleanup_interpret(); num_threads--; - mt_unlock(&interpreter_lock); + mt_unlock_interpreter(); #endif } @@ -723,9 +700,6 @@ if(THIS == NULL) Pike_error("Out of memory."); - // if(current_thread == th_self()) - // Pike_error("PHP4.Interpreter->run: Tried to run a PHP-script from a PHP " - // "callback!"); get_all_args("PHP4.Interpreter->run", args, "%S%m%O%*", &script, &request_data, &my_fd_obj, &done_callback); if(done_callback->type != PIKE_T_FUNCTION) @@ -784,12 +758,11 @@ sapi_startup(&caudium_sapi_module); sapi_module.startup(&caudium_sapi_module); zend_startup_module(&php_caudium_module); - PHP_INIT_LOCK(); } start_new_program(); /* Text */ pike_add_function("run", f_php_caudium_request_handler, "function(string,mapping,object,function:void)", 0); - add_program_constant("Interpreter", (php_program = end_program()), 0); + end_class("Interpreter", 0); } /* @@ -801,8 +774,6 @@ { caudium_php_initialized = 0; sapi_module.shutdown(&caudium_sapi_module); - if(php_program) free_program(php_program); tsrm_shutdown(); - PHP_DESTROY(); } #endif

« previous php.cvs (#3960) next »