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]

Reply via email to