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
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]