diff options
Diffstat (limited to 'sapi')
73 files changed, 0 insertions, 8530 deletions
diff --git a/sapi/Makefile.in b/sapi/Makefile.in deleted file mode 100644 index 089a1e4a65..0000000000 --- a/sapi/Makefile.in +++ /dev/null @@ -1,4 +0,0 @@ - -SUBDIRS = $(PHP_SAPI) - -include $(top_srcdir)/build/rules.mk diff --git a/sapi/README b/sapi/README deleted file mode 100644 index 5ab9381733..0000000000 --- a/sapi/README +++ /dev/null @@ -1,20 +0,0 @@ -Each SAPI backend has to contain: - -config.m4: just like for extensions, this file contains -autoconf/automake directives that end up in the configure script. The -only difference is that the sapi config.m4 files are read in diversion -(output block) 2 instead of 3. The sapi config.m4 files should set -two variables: PHP_SAPI (which sapi backend to choose) and INSTALL_IT -(the actions performed when "make install" is executed). If they are -not specified, they will default to "cgi" and "do nothing," -respectively. Additionally, the following m4 macros can be used to -influence what is created during "make": - -PHP_BUILD_SHARED -- build shared target libs/libphp4.so -PHP_BUILD_STATIC -- build static target libs/libphp4.a -PHP_BUILD_PROGRAM -- build executable php - -(paths relative to top build dir) - -Makefile.am: just what you think. Make sure your target is called -"libphpsapi_NNN.la", where NNN is the value of PHP_SAPI. diff --git a/sapi/aolserver/Makefile.in b/sapi/aolserver/Makefile.in deleted file mode 100644 index 96a33af6bd..0000000000 --- a/sapi/aolserver/Makefile.in +++ /dev/null @@ -1,5 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = aolserver.c - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/aolserver/README b/sapi/aolserver/README deleted file mode 100644 index 45fb89d320..0000000000 --- a/sapi/aolserver/README +++ /dev/null @@ -1,63 +0,0 @@ -AOLserver README ($Id$) - -To compile PHP 4.0 as a module for AOLserver, you need: - -- AOLserver 3.0 source distribution -- installed AOLserver 3.0 - -1.) Configuring AOLserver - -Read doc/install.txt in the source distribution - -It usually boils down to changing the INST path in include/Makefile.global -and running make all install. - -2.) Configuring PHP - -$ ./configure \ - --with-aolserver=/path/to/installed/aolserver \ - --with-aolserver-src=/path/to/source/distribution \ - <other options> - -NOTE: While AOLserver 3.0 did not install its include directory, later - releases will do so. This effectively means that you do not need - to retain the source directory of AOLserver, if there is an - include directory in the installation directory. - -3.) Compiling and Installing PHP - -$ make install - -4.) Changing nsd.tcl - -a) New section - -Add a new section to pass options to PHP (required): - -ns_section "ns/server/${servername}/module/php" - -You can use the following commands in this section: - -The 'map' command will cause AOLserver to pass all requests to *.php to -the PHP module (can be specified multiple times). Example: - -ns_param map *.php - -The 'php_value "name val"' command assigns the configuration option name -the value val (can be used multiple times). Example: - -ns_param php_value "session.auto_start 1" - -b) Enabling PHP - -Then enable the PHP module: - -ns_section "ns/server/${servername}/modules" -... -ns_param php ${bindir}/libphp4.so - - -============================================================================= -This has been tested with AOLserver release 3.0. - -AOLserver support has been written by Sascha Schumann <sascha@schumann.cx>. diff --git a/sapi/aolserver/aolserver.c b/sapi/aolserver/aolserver.c deleted file mode 100644 index 6effcda8e9..0000000000 --- a/sapi/aolserver/aolserver.c +++ /dev/null @@ -1,630 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann <sascha@schumann.cx> | - +----------------------------------------------------------------------+ - */ - -/* - * TODO: - * - write documentation - * - CGI/1.1 conformance - */ - -/* $Id$ */ - -/* conflict between PHP and AOLserver headers */ -#define Debug php_Debug -#include "php.h" -#undef Debug - -#ifdef HAVE_AOLSERVER - -#ifndef ZTS -#error AOLserver module is only useable in thread-safe mode -#endif - -#include "ext/standard/info.h" -#define SECTION(name) PUTS("<H2>" name "</H2>\n") - -#define NS_BUF_SIZE 511 - -#include "php_ini.h" -#include "php_globals.h" -#include "SAPI.h" -#include "php_main.h" - -#include "ns.h" - -#include "php_version.h" - -/* This symbol is used by AOLserver to tell the API version we expect */ - -int Ns_ModuleVersion = 1; - -#define NSLS_D ns_globals_struct *ns_context -#define NSLS_DC , NSLS_D -#define NSLS_C ns_context -#define NSLS_CC , NSLS_C -#define NSG(v) (ns_context->v) -#define NSLS_FETCH() ns_globals_struct *ns_context = ts_resource(ns_globals_id) - -/* php_ns_context is per-server (thus only once at all) */ - -typedef struct { - sapi_module_struct *sapi_module; - char *ns_server; - char *ns_module; -} php_ns_context; - -/* ns_globals_struct is per-thread */ - -typedef struct { - Ns_Conn *conn; - size_t data_avail; -} ns_globals_struct; - -/* TSRM id */ - -static int ns_globals_id; - -/* global context */ - -static php_ns_context *global_context; - -static void php_ns_config(php_ns_context *ctx, char global); - -/* - * php_ns_sapi_ub_write() writes data to the client connection. - */ - -static int -php_ns_sapi_ub_write(const char *str, uint str_length) -{ - int sent_bytes; - NSLS_FETCH(); - - sent_bytes = Ns_ConnWrite(NSG(conn), (void *) str, str_length); - - return sent_bytes; -} - -/* - * php_ns_sapi_header_handler() sets a HTTP reply header to be - * sent to the client. - */ - -static int -php_ns_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC) -{ - char *header_name, *header_content; - char *p; - NSLS_FETCH(); - - header_name = sapi_header->header; - header_content = p = strchr(header_name, ':'); - - if (p) { - *p = '\0'; - do { - header_content++; - } while (*header_content == ' '); - - if (!strcasecmp(header_name, "Content-type")) { - Ns_ConnSetTypeHeader(NSG(conn), header_content); - } else { - Ns_ConnSetHeaders(NSG(conn), header_name, header_content); - } - - *p = ':'; - } - - sapi_free_header(sapi_header); - - return 0; -} - -/* - * php_ns_sapi_send_headers() flushes the headers to the client. - * Called before real content is sent by PHP. - */ - -static int -php_ns_sapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ - NSLS_FETCH(); - - if(SG(sapi_headers).send_default_content_type) { - Ns_ConnSetRequiredHeaders(NSG(conn), "text/html", 0); - } - - Ns_ConnFlushHeaders(NSG(conn), SG(sapi_headers).http_response_code); - - return SAPI_HEADER_SENT_SUCCESSFULLY; -} - -/* - * php_ns_sapi_read_post() reads a specified number of bytes from - * the client. Used for POST/PUT requests. - */ - -static int -php_ns_sapi_read_post(char *buf, uint count_bytes SLS_DC) -{ - uint max_read; - uint total_read = 0; - NSLS_FETCH(); - - max_read = MIN(NSG(data_avail), count_bytes); - - total_read = Ns_ConnRead(NSG(conn), buf, max_read); - - if(total_read == NS_ERROR) { - total_read = -1; - } else { - NSG(data_avail) -= total_read; - } - - return total_read; -} - -/* - * php_ns_sapi_read_cookies() returns the Cookie header from - * the HTTP request header - */ - -static char * -php_ns_sapi_read_cookies(SLS_D) -{ - int i; - char *http_cookie = NULL; - NSLS_FETCH(); - - i = Ns_SetIFind(NSG(conn->headers), "cookie"); - if(i != -1) { - http_cookie = Ns_SetValue(NSG(conn->headers), i); - } - - return http_cookie; -} - -static void php_info_aolserver(ZEND_MODULE_INFO_FUNC_ARGS) -{ - char buf[512]; - int uptime = Ns_InfoUptime(); - int i; - NSLS_FETCH(); - - php_info_print_table_start(); - php_info_print_table_row(2, "SAPI module version", "$Id$"); - 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()); - php_info_print_table_row(2, "Installation path", Ns_InfoHomePath()); - php_info_print_table_row(2, "Hostname of server", Ns_InfoHostname()); - php_info_print_table_row(2, "Source code label", Ns_InfoLabel()); - php_info_print_table_row(2, "Server platform", Ns_InfoPlatform()); - snprintf(buf, 511, "%s/%s", Ns_InfoServerName(), Ns_InfoServerVersion()); - php_info_print_table_row(2, "Server version", buf); - snprintf(buf, 511, "%d day(s), %02d:%02d:%02d", - uptime / 86400, - (uptime / 3600) % 24, - (uptime / 60) % 60, - uptime % 60); - php_info_print_table_row(2, "Server uptime", buf); - php_info_print_table_end(); - - SECTION("HTTP Headers Information"); - php_info_print_table_start(); - php_info_print_table_colspan_header(2, "HTTP Request Headers"); - php_info_print_table_row(2, "HTTP Request", NSG(conn)->request->line); - for (i = 0; i < Ns_SetSize(NSG(conn)->headers); i++) { - php_info_print_table_row(2, Ns_SetKey(NSG(conn)->headers, i), Ns_SetValue(NSG(conn)->headers, i)); - } - - php_info_print_table_colspan_header(2, "HTTP Response Headers"); - for (i = 0; i < Ns_SetSize(NSG(conn)->outputheaders); i++) { - php_info_print_table_row(2, Ns_SetKey(NSG(conn)->outputheaders, i), Ns_SetValue(NSG(conn)->outputheaders, i)); - } - php_info_print_table_end(); -} - -PHP_FUNCTION(getallheaders); - -static function_entry aolserver_functions[] = { - PHP_FE(getallheaders, NULL) - {0} -}; - -static zend_module_entry php_aolserver_module = { - "AOLserver", - aolserver_functions, - NULL, - NULL, - NULL, - NULL, - php_info_aolserver, - STANDARD_MODULE_PROPERTIES -}; - -PHP_FUNCTION(getallheaders) -{ - int i; - NSLS_FETCH(); - - if (array_init(return_value) == FAILURE) { - RETURN_FALSE; - } - - for (i = 0; i < Ns_SetSize(NSG(conn->headers)); i++) { - char *key = Ns_SetKey(NSG(conn->headers), i); - char *value = Ns_SetValue(NSG(conn->headers), i); - - add_assoc_string(return_value, key, value, 1); - } -} - -static int -php_ns_startup(sapi_module_struct *sapi_module) -{ - if(php_module_startup(sapi_module) == FAILURE - || zend_startup_module(&php_aolserver_module) == FAILURE) { - return FAILURE; - } else { - return SUCCESS; - } -} - - -/* this structure is static (as in "it does not change") */ - -static sapi_module_struct sapi_module = { - "AOLserver", - - php_ns_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - NULL, /* activate */ - NULL, /* deactivate */ - - php_ns_sapi_ub_write, /* unbuffered write */ - NULL, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, /* error handler */ - - php_ns_sapi_header_handler, /* header handler */ - php_ns_sapi_send_headers, /* send headers handler */ - NULL, /* send header handler */ - - php_ns_sapi_read_post, /* read POST data */ - php_ns_sapi_read_cookies, /* read Cookies */ - - NULL, /* register server variables */ - NULL, /* Log message */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - -/* - * php_ns_hash_environment() populates the php script environment - * with a number of variables. HTTP_* variables are created for - * the HTTP header data, so that a script can access these. - */ - -#define ADD_STRING(name) \ - MAKE_STD_ZVAL(pval); \ - pval->type = IS_STRING; \ - pval->value.str.len = strlen(buf); \ - pval->value.str.val = estrndup(buf, pval->value.str.len); \ - zend_hash_update(&EG(symbol_table), name, sizeof(name), \ - &pval, sizeof(zval *), NULL) - -static void -php_ns_hash_environment(NSLS_D CLS_DC ELS_DC PLS_DC SLS_DC) -{ - int i; - char buf[NS_BUF_SIZE + 1]; - zval *pval; - char *tmp; - - for(i = 0; i < Ns_SetSize(NSG(conn->headers)); i++) { - char *key = Ns_SetKey(NSG(conn->headers), i); - char *value = Ns_SetValue(NSG(conn->headers), i); - char *p; - char c; - int buf_len; - - buf_len = snprintf(buf, NS_BUF_SIZE, "HTTP_%s", key); - for(p = buf; (c = *p); p++) { - c = toupper(c); - if(c < 'A' || c > 'Z') { - c = '_'; - } - *p = c; - } - - MAKE_STD_ZVAL(pval); - pval->type = IS_STRING; - pval->value.str.len = strlen(value); - pval->value.str.val = estrndup(value, pval->value.str.len); - - zend_hash_update(&EG(symbol_table), buf, buf_len + 1, &pval, sizeof(zval *), NULL); - } - - snprintf(buf, NS_BUF_SIZE, "%s/%s", Ns_InfoServerName(), Ns_InfoServerVersion()); - ADD_STRING("SERVER_SOFTWARE"); - snprintf(buf, NS_BUF_SIZE, "HTTP/%1.1f", NSG(conn)->request->version); - ADD_STRING("SERVER_PROTOCOL"); - - strncpy(buf, NSG(conn)->request->method, NS_BUF_SIZE); - ADD_STRING("REQUEST_METHOD"); - - if(NSG(conn)->request->query) { - strncpy(buf, NSG(conn)->request->query, NS_BUF_SIZE); - } else { - buf[0] = '\0'; - } - ADD_STRING("QUERY_STRING"); - - strncpy(buf, Ns_InfoBuildDate(), NS_BUF_SIZE); - ADD_STRING("SERVER_BUILDDATE"); - - strncpy(buf, Ns_ConnPeer(NSG(conn)), NS_BUF_SIZE); - ADD_STRING("REMOTE_ADDR"); - - snprintf(buf, NS_BUF_SIZE, "%d", Ns_ConnPeerPort(NSG(conn))); - ADD_STRING("REMOTE_PORT"); - - snprintf(buf, NS_BUF_SIZE, "%d", Ns_ConnPort(NSG(conn))); - ADD_STRING("SERVER_PORT"); - - tmp = Ns_ConnHost(NSG(conn)); - if (tmp) { - strncpy(buf, tmp, NS_BUF_SIZE); - ADD_STRING("SERVER_NAME"); - } - - strncpy(buf, SG(request_info).path_translated, NS_BUF_SIZE); - ADD_STRING("PATH_TRANSLATED"); - - strncpy(buf, "CGI/1.1", NS_BUF_SIZE); - ADD_STRING("GATEWAY_INTERFACE"); - - MAKE_STD_ZVAL(pval); - pval->type = IS_LONG; - pval->value.lval = Ns_InfoBootTime(); - zend_hash_update(&EG(symbol_table), "SERVER_BOOTTIME", sizeof("SERVER_BOOTTIME"), &pval, sizeof(zval *), NULL); -} - -/* - * php_ns_module_main() is called by the per-request handler and - * "executes" the script - */ - -static int -php_ns_module_main(NSLS_D SLS_DC) -{ - zend_file_handle file_handle; - CLS_FETCH(); - ELS_FETCH(); - PLS_FETCH(); - - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.filename = SG(request_info).path_translated; - file_handle.free_filename = 0; - - php_ns_config(global_context, 0); - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC) == FAILURE) { - return NS_ERROR; - } - - php_ns_hash_environment(NSLS_C CLS_CC ELS_CC PLS_CC SLS_CC); - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - php_request_shutdown(NULL); - - return NS_OK; -} - -/* - * php_ns_request_ctor() initializes the per-request data structure - * and fills it with data provided by the web server - */ - -static void -php_ns_request_ctor(NSLS_D SLS_DC) -{ - char *server; - Ns_DString ds; - char *root; - int index; - char *tmp; - - server = Ns_ConnServer(NSG(conn)); - - SG(request_info).query_string = NSG(conn->request->query); - - Ns_DStringInit(&ds); - Ns_UrlToFile(&ds, server, NSG(conn->request->url)); - - /* path_translated is the absolute path to the file */ - SG(request_info).path_translated = strdup(Ns_DStringValue(&ds)); - Ns_DStringFree(&ds); - root = Ns_PageRoot(server); - SG(request_info).request_uri = SG(request_info).path_translated + strlen(root); - SG(request_info).request_method = NSG(conn)->request->method; - SG(request_info).content_length = Ns_ConnContentLength(NSG(conn)); - index = Ns_SetIFind(NSG(conn)->headers, "content-type"); - SG(request_info).content_type = index == -1 ? NULL : - Ns_SetValue(NSG(conn)->headers, index); - - tmp = Ns_ConnAuthUser(NSG(conn)); - if(tmp) { - tmp = estrdup(tmp); - } - SG(request_info).auth_user = tmp; - - tmp = Ns_ConnAuthPasswd(NSG(conn)); - if(tmp) { - tmp = estrdup(tmp); - } - SG(request_info).auth_password = tmp; - - NSG(data_avail) = SG(request_info).content_length; -} - -/* - * php_ns_request_dtor() destroys all data associated with - * the per-request structure - */ - -static void -php_ns_request_dtor(NSLS_D SLS_DC) -{ - free(SG(request_info).path_translated); -} - -/* - * The php_ns_request_handler() is called per request and handles - * everything for one request. - */ - -static int -php_ns_request_handler(void *context, Ns_Conn *conn) -{ - int status = NS_OK; - SLS_FETCH(); - NSLS_FETCH(); - - NSG(conn) = conn; - - SG(server_context) = global_context; - - php_ns_request_ctor(NSLS_C SLS_CC); - - status = php_ns_module_main(NSLS_C SLS_CC); - - php_ns_request_dtor(NSLS_C SLS_CC); - - return status; -} - -/* - * php_ns_config() fetches the configuration data. - * - * It understands the "map" and "php_value" command. - */ - -static void -php_ns_config(php_ns_context *ctx, char global) -{ - int i; - char *path; - Ns_Set *set; - - path = Ns_ConfigGetPath(ctx->ns_server, ctx->ns_module, NULL); - set = Ns_ConfigGetSection(path); - - for (i = 0; set && i < Ns_SetSize(set); i++) { - char *key = Ns_SetKey(set, i); - char *value = Ns_SetValue(set, i); - - if (global && !strcasecmp(key, "map")) { - Ns_Log(Notice, "Registering PHP for \"%s\"", value); - Ns_RegisterRequest(ctx->ns_server, "GET", value, php_ns_request_handler, NULL, ctx, 0); - Ns_RegisterRequest(ctx->ns_server, "POST", value, php_ns_request_handler, NULL, ctx, 0); - Ns_RegisterRequest(ctx->ns_server, "HEAD", value, php_ns_request_handler, NULL, ctx, 0); - } else if (!global && !strcasecmp(key, "php_value")) { - char *val; - - val = strchr(value, ' '); - if (val) { - char *new_key; - - new_key = estrndup(value, val - value); - - do { - val++; - } while(*val == ' '); - - Ns_Log(Debug, "PHP configuration option '%s=%s'", new_key, val); - php_alter_ini_entry(new_key, strlen(new_key) + 1, val, - strlen(val) + 1, PHP_INI_SYSTEM, PHP_INI_STAGE_RUNTIME); - - efree(new_key); - } - } - - } -} - -/* - * php_ns_server_shutdown() performs the last steps before the - * server exists. Shutdowns basic services and frees memory - */ - -static void -php_ns_server_shutdown(void *context) -{ - php_ns_context *ctx = (php_ns_context *) context; - - ctx->sapi_module->shutdown(ctx->sapi_module); - sapi_shutdown(); - tsrm_shutdown(); - - free(ctx->ns_module); - free(ctx->ns_server); - free(ctx); -} - -/* - * Ns_ModuleInit() is called by AOLserver once at startup - * - * This functions allocates basic structures and initializes - * basic services. - */ - -int Ns_ModuleInit(char *server, char *module) -{ - php_ns_context *ctx; - - tsrm_startup(1, 1, 0); - sapi_startup(&sapi_module); - sapi_module.startup(&sapi_module); - - /* TSRM is used to allocate a per-thread structure */ - ns_globals_id = ts_allocate_id(sizeof(ns_globals_struct), NULL, NULL); - - /* the context contains data valid for all threads */ - ctx = malloc(sizeof *ctx); - ctx->sapi_module = &sapi_module; - ctx->ns_server = strdup(server); - ctx->ns_module = strdup(module); - - /* read the configuration */ - php_ns_config(ctx, 1); - - global_context = ctx; - - /* register shutdown handler */ - Ns_RegisterServerShutdown(server, php_ns_server_shutdown, ctx); - - return NS_OK; -} - -#endif diff --git a/sapi/aolserver/config.m4 b/sapi/aolserver/config.m4 deleted file mode 100644 index 50a0c5b880..0000000000 --- a/sapi/aolserver/config.m4 +++ /dev/null @@ -1,38 +0,0 @@ -dnl ## $Id$ -*- sh -*- - -AC_ARG_WITH(aolserver-src, -[ --with-aolserver-src=DIR Specify path to the source distribution of - AOLserver],[ - PHP_AOLSERVER_SRC=$withval -]) - -AC_MSG_CHECKING(for AOLserver support) -AC_ARG_WITH(aolserver, -[ --with-aolserver=DIR Specify path to the installed AOLserver],[ - PHP_AOLSERVER=$withval -],[ - PHP_AOLSERVER=no -]) -AC_MSG_RESULT($PHP_AOLSERVER) - -if test "$PHP_AOLSERVER" != "no"; then - if test -d "$PHP_AOLSERVER/include"; then - PHP_AOLSERVER_SRC="$PHP_AOLSERVER" - fi - if test -z "$PHP_AOLSERVER_SRC" || test ! -d $PHP_AOLSERVER_SRC/include; then - AC_MSG_ERROR(Please specify the path to the source distribution of AOLserver using --with-aolserver-src=DIR) - fi - if test ! -d $PHP_AOLSERVER/bin ; then - AC_MSG_ERROR(Please specify the path to the root of AOLserver using --with-aolserver=DIR) - fi - PHP_BUILD_THREAD_SAFE - AC_ADD_INCLUDE($PHP_AOLSERVER_SRC/include) - AC_DEFINE(HAVE_AOLSERVER,1,[Whether you have AOLserver]) - PHP_SAPI=aolserver - PHP_BUILD_SHARED - INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $PHP_AOLSERVER/bin/" -fi - -dnl ## Local Variables: -dnl ## tab-width: 4 -dnl ## End: diff --git a/sapi/aolserver/php.sym b/sapi/aolserver/php.sym deleted file mode 100644 index b401ffd2b3..0000000000 --- a/sapi/aolserver/php.sym +++ /dev/null @@ -1,2 +0,0 @@ -Ns_ModuleVersion -Ns_ModuleInit diff --git a/sapi/apache/Makefile.in b/sapi/apache/Makefile.in deleted file mode 100644 index 477b3a4762..0000000000 --- a/sapi/apache/Makefile.in +++ /dev/null @@ -1,7 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = sapi_apache.c mod_php4.c php_apache.c - -EXTRA_INCLUDES = $(APACHE_INCLUDE) - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/apache/apMakefile.libdir b/sapi/apache/apMakefile.libdir deleted file mode 100644 index 7b5254013a..0000000000 --- a/sapi/apache/apMakefile.libdir +++ /dev/null @@ -1,4 +0,0 @@ -This is a place-holder which indicates to Configure that it shouldn't -provide the default targets when building the Makefile in this directory. -Instead it'll just prepend all the important variable definitions, and -copy the Makefile.tmpl onto the end. diff --git a/sapi/apache/apMakefile.tmpl b/sapi/apache/apMakefile.tmpl deleted file mode 100644 index c485d1785f..0000000000 --- a/sapi/apache/apMakefile.tmpl +++ /dev/null @@ -1,77 +0,0 @@ -## -## Apache 1.3 Makefile template for PHP 4.0 Module -## [src/modules/php4/Makefile.tmpl] -## - -# the parametrized target -LIB=libphp4.$(LIBEXT) - -# objects for building the static library -OBJS=mod_php4.o -OBJS_LIB=libmodphp4.a - -# objects for building the shared object library -SHLIB_OBJS=mod_php4.so-o -SHLIB_OBJS_LIB=libmodphp4.a - -# the general targets -all: lib -lib: $(LIB) - -# build the static library by merging the object files -libphp4.a: $(OBJS) $(OBJS_LIB) - cp $(OBJS_LIB) $@ - ar r $@ $(OBJS) - $(RANLIB) $@ - -# ugly hack to support older Apache-1.3 betas that don't set $LIBEXT -libphp4.: $(OBJS) $(OBJS_LIB) - cp $(OBJS_LIB) $@ - ar r $@ $(OBJS) - $(RANLIB) $@ - cp libphp4. libphp4.a - -# build the shared object library by linking the object files -libphp4.so: $(SHLIB_OBJS) $(SHLIB_OBJS_LIB) - rm -f $@ - $(LD_SHLIB) $(LDFLAGS_SHLIB) -o $@ $(SHLIB_OBJS) $(SHLIB_OBJS_LIB) $(LIBS) - -# 1. extension .o for shared objects cannot be used here because -# first these files aren't still shared objects and second we -# have to use a different name to trigger the different -# implicit Make rule -# 2. extension -so.o (as used elsewhere) cannot be used because -# the suffix feature of Make really wants just .x, so we use -# extension .so-o -.SUFFIXES: .o .so-o -.c.o: - $(CC) -c $(INCLUDES) $(CFLAGS) $(SPACER) $< -.c.so-o: - $(CC) -c $(INCLUDES) $(CFLAGS) $(CFLAGS_SHLIB) $(SPACER) $< && mv $*.o $*.so-o - -# cleanup -clean: - -rm -f $(OBJS) $(SHLIB_OBJS) $(LIB) - -# We really don't expect end users to use this rule. It works only with -# gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after -# using it. -depend: - cp Makefile.tmpl Makefile.tmpl.bak \ - && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \ - && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \ - && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' Makefile.new \ - > Makefile.tmpl \ - && rm Makefile.new - -#Dependencies - -$(OBJS): Makefile - -# DO NOT REMOVE -mod_php4.o: mod_php4.c $(INCDIR)/httpd.h $(INCDIR)/conf.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h \ - $(INCDIR)/http_config.h \ - $(INCDIR)/http_core.h $(INCDIR)/http_main.h \ - $(INCDIR)/http_protocol.h $(INCDIR)/http_request.h \ - $(INCDIR)/http_log.h $(INCDIR)/util_script.h mod_php4.h diff --git a/sapi/apache/config.m4 b/sapi/apache/config.m4 deleted file mode 100644 index 8b838f46b4..0000000000 --- a/sapi/apache/config.m4 +++ /dev/null @@ -1,228 +0,0 @@ -dnl ## -*- sh -*- - -AC_DEFUN(PHP_APACHE_CHECK_RDYNAMIC,[ - if test -n "$GCC"; then - dnl we should use a PHP-specific macro here - TSRM_CHECK_GCC_ARG(-rdynamic, gcc_rdynamic=yes) - if test "$gcc_rdynamic" = "yes"; then - PHP_LDFLAGS="$PHP_LDFLAGS -rdynamic" - fi - fi -]) - -AC_MSG_CHECKING(for Apache module support via DSO through APXS) -AC_ARG_WITH(apxs, -[ --with-apxs[=FILE] Build shared Apache module. FILE is the optional - pathname to the Apache apxs tool; defaults to "apxs".],[ - if test "$withval" = "yes"; then - APXS=apxs - else - AC_EXPAND_PATH($withval, APXS) - fi - - if ! $APXS -q CFLAGS >/dev/null 2>&1; then - AC_MSG_RESULT() - $APXS - AC_MSG_ERROR([Sorry, I cannot run apxs. Either you need to install Perl or you need to pass the absolute path of apxs by using --with-apxs=/absolute/path/to/apxs]) - fi - - APXS_LDFLAGS="@SYBASE_LFLAGS@ @SYBASE_LIBS@ @SYBASE_CT_LFLAGS@ @SYBASE_CT_LIBS@" - APXS_INCLUDEDIR=`$APXS -q INCLUDEDIR` - APXS_CFLAGS=`$APXS -q CFLAGS` - AC_ADD_INCLUDE($APXS_INCLUDEDIR) - if `echo $APXS_CFLAGS|grep USE_HSREGEX>/dev/null`; then - APACHE_HAS_REGEX=yes - fi - if `echo $APXS_CFLAGS|grep EAPI>/dev/null`; then - CPPFLAGS="$CPPFLAGS -DEAPI=1" - fi - PHP_SAPI=apache - APACHE_INSTALL="$APXS -i -a -n php4 $SAPI_SHARED" - PHP_BUILD_SHARED - if test -z "`$APXS -q LD_SHLIB`" || test "`$APXS -q LIBEXECDIR`" = "modules"; then - PHP_APXS_BROKEN=yes - fi - STRONGHOLD= - AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ]) - AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ]) - AC_MSG_RESULT(yes) -],[ - AC_MSG_RESULT(no) -]) - -APACHE_INSTALL_FILES="\$(srcdir)/sapi/apache/mod_php4.* sapi/apache/libphp4.module" - -if test "$PHP_SAPI" != "apache"; then -AC_MSG_CHECKING(for Apache module support) -AC_ARG_WITH(apache, -[ --with-apache[=DIR] Build Apache module. DIR is the top-level Apache - build directory, defaults to /usr/local/etc/httpd.],[ - if test "$withval" = "yes"; then - # Apache's default directory - withval=/usr/local/apache - fi - if test "$withval" != "no"; then - APACHE_MODULE=yes - AC_EXPAND_PATH($withval, withval) - # For Apache 1.2.x - if test -f $withval/src/httpd.h; then - APACHE_INCLUDE=-I$withval/src - APACHE_TARGET=$withval/src - PHP_SAPI=apache - APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_INSTALL_FILES $APACHE_TARGET" - PHP_LIBS="-L. -lphp3" - AC_MSG_RESULT(yes - Apache 1.2.x) - STRONGHOLD= - if test -f $withval/src/ap_config.h; then - AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ]) - fi - # For Apache 2.0.x - elif test -f $withval/src/include/httpd.h && - test -f $withval/src/lib/apr/include/apr_general.h ; then - APACHE_HAS_REGEX=1 - APACHE_INCLUDE="-I$withval/src/include -I$withval/src/os/unix -I$withval/src/lib/apr/include" - APACHE_TARGET=$withval/src/modules/php4 - if test ! -d $APACHE_TARGET; then - mkdir $APACHE_TARGET - fi - PHP_SAPI=apache - APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp4.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache/apMakefile.libdir $APACHE_TARGET/Makefile.libdir" - PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4" - AC_MSG_RESULT(yes - Apache 2.0.X) - STRONGHOLD= - if test -f $withval/src/include/ap_config.h; then - AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ]) - fi - if test -f $withval/src/include/ap_compat.h; then - AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ]) - if test ! -f $withval/src/include/ap_config_auto.h; then - AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again) - fi - else - if test -f $withval/src/include/compat.h; then - AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ]) - fi - fi - # For Apache 1.3.x - elif test -f $withval/src/main/httpd.h; then - APACHE_HAS_REGEX=1 - APACHE_INCLUDE="-I$withval/src/main -I$withval/src/os/unix -I$withval/src/ap" - APACHE_TARGET=$withval/src/modules/php4 - if test ! -d $APACHE_TARGET; then - mkdir $APACHE_TARGET - fi - PHP_SAPI=apache - APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp4.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache/apMakefile.libdir $APACHE_TARGET/Makefile.libdir" - PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4" - AC_MSG_RESULT(yes - Apache 1.3.x) - STRONGHOLD= - if test -f $withval/src/include/ap_config.h; then - AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ]) - fi - if test -f $withval/src/include/ap_compat.h; then - AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ]) - if test ! -f $withval/src/include/ap_config_auto.h; then - AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again) - fi - else - if test -f $withval/src/include/compat.h; then - AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ]) - fi - fi - # Also for Apache 1.3.x - elif test -f $withval/src/include/httpd.h; then - APACHE_HAS_REGEX=1 - APACHE_INCLUDE="-I$withval/src/include -I$withval/src/os/unix" - APACHE_TARGET=$withval/src/modules/php4 - if test ! -d $APACHE_TARGET; then - mkdir $APACHE_TARGET - fi - PHP_SAPI=apache - PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4" - APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp4.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/sapi/apache/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/sapi/apache/apMakefile.libdir $APACHE_TARGET/Makefile.libdir" - AC_MSG_RESULT(yes - Apache 1.3.x) - STRONGHOLD= - if test -f $withval/src/include/ap_config.h; then - AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ]) - fi - if test -f $withval/src/include/ap_compat.h; then - AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ]) - if test ! -f $withval/src/include/ap_config_auto.h; then - AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again) - fi - else - if test -f $withval/src/include/compat.h; then - AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ]) - fi - fi - # For StrongHold 2.2 - elif test -f $withval/apache/httpd.h; then - APACHE_INCLUDE=-"I$withval/apache -I$withval/ssl/include" - APACHE_TARGET=$withval/apache - PHP_SAPI=apache - PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4" - APACHE_INSTALL="mkdir -p $APACHE_TARGET; cp $SAPI_STATIC $APACHE_TARGET/libmodphp4.a; cp $APACHE_INSTALL_FILES $APACHE_TARGET" - STRONGHOLD=-DSTRONGHOLD=1 - AC_MSG_RESULT(yes - StrongHold) - if test -f $withval/apache/ap_config.h; then - AC_DEFINE(HAVE_AP_CONFIG_H,1,[ ]) - fi - if test -f $withval/src/ap_compat.h; then - AC_DEFINE(HAVE_AP_COMPAT_H,1,[ ]) - if test ! -f $withval/src/include/ap_config_auto.h; then - AC_MSG_ERROR(Please run Apache\'s configure or src/Configure program once and try again) - fi - else - if test -f $withval/src/compat.h; then - AC_DEFINE(HAVE_OLD_COMPAT_H,1,[ ]) - fi - fi - else - AC_MSG_RESULT(no) - AC_MSG_ERROR(Invalid Apache directory - unable to find httpd.h under $withval) - fi - else - AC_MSG_RESULT(no) - fi -],[ - AC_MSG_RESULT(no) -]) - -INCLUDES="$INCLUDES $APACHE_INCLUDE" -fi - -if test "x$APXS" != "x" -a "`uname -sv`" = "AIX 4" -a "$GCC" != "yes"; then - APXS_EXP="-bE:sapi/apache/mod_php4.exp" -fi - -PHP_SUBST(APXS_EXP) -PHP_SUBST(APACHE_INCLUDE) -PHP_SUBST(APACHE_TARGET) -PHP_SUBST(APXS) -PHP_SUBST(APXS_LDFLAGS) -PHP_SUBST(APACHE_INSTALL) -PHP_SUBST(STRONGHOLD) - -AC_MSG_CHECKING(for mod_charset compatibility option) -AC_ARG_WITH(mod_charset, -[ --with-mod_charset Enable transfer tables for mod_charset (Rus Apache).], -[ - AC_MSG_RESULT(yes) - AC_DEFINE(USE_TRANSFER_TABLES,1,[ ]) -],[ - AC_MSG_RESULT(no) -]) - -if test -n "$APACHE_MODULE"; then - PHP_APACHE_CHECK_RDYNAMIC - PHP_OUTPUT(sapi/apache/libphp4.module) - PHP_BUILD_STATIC -fi - -if test -n "$APACHE_INSTALL"; then - INSTALL_IT=$APACHE_INSTALL -fi - -dnl ## Local Variables: -dnl ## tab-width: 4 -dnl ## End: diff --git a/sapi/apache/libphp4.module.in b/sapi/apache/libphp4.module.in deleted file mode 100644 index 0cefcf1fae..0000000000 --- a/sapi/apache/libphp4.module.in +++ /dev/null @@ -1,7 +0,0 @@ -Name: php4_module -ConfigStart - RULE_WANTHSREGEX=no - LIBS="@NATIVE_RPATHS@ @PHP_LDFLAGS@ @PHP_LIBS@ @EXTRA_LIBS@ $LIBS" - RULE_HIDE=yes - CFLAGS="$CFLAGS -I@abs_srcdir@ -I@abs_srcdir@/Zend -I@abs_builddir@/Zend -I@abs_builddir@" -ConfigEnd diff --git a/sapi/apache/mod_php4.c b/sapi/apache/mod_php4.c deleted file mode 100644 index ab21ee77f8..0000000000 --- a/sapi/apache/mod_php4.c +++ /dev/null @@ -1,802 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf <rasmus@php.net> | - | (with helpful hints from Dean Gaudet <dgaudet@arctic.org> | - | PHP 4.0 patches by Zeev Suraski <zeev@zend.com> | - +----------------------------------------------------------------------+ - */ -/* $Id$ */ - -#define NO_REGEX_EXTRA_H -#ifdef WIN32 -#include <winsock2.h> -#include <stddef.h> -#endif - -#include "zend.h" -#include "php.h" -#include "php_variables.h" -#include "SAPI.h" - -#include "httpd.h" -#include "http_config.h" -#if MODULE_MAGIC_NUMBER > 19980712 -# include "ap_compat.h" -#else -# if MODULE_MAGIC_NUMBER > 19980324 -# include "compat.h" -# endif -#endif -#include "http_core.h" -#include "http_main.h" -#include "http_protocol.h" -#include "http_request.h" -#include "http_log.h" - -#include "php_ini.h" -#include "php_globals.h" -#include "SAPI.h" -#include "php_main.h" - -#include "zend_compile.h" -#include "zend_execute.h" -#include "zend_highlight.h" -#include "zend_indent.h" - -#include "ext/standard/php_standard.h" - -#include "util_script.h" - -#include "mod_php4.h" -#if HAVE_MOD_DAV -# include "mod_dav.h" -#endif - -int apache_php_module_main(request_rec *r, int fd, int display_source_mode CLS_DC ELS_DC PLS_DC SLS_DC); -void php_save_umask(void); -void php_restore_umask(void); -int sapi_apache_read_post(char *buffer, uint count_bytes SLS_DC); -char *sapi_apache_read_cookies(SLS_D); -int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC); -int sapi_apache_send_headers(sapi_headers_struct *sapi_headers SLS_DC); -int send_php(request_rec *r, int display_source_mode, char *filename); -int send_parsed_php(request_rec * r); -int send_parsed_php_source(request_rec * r); -int php_xbithack_handler(request_rec * r); -void php_init_handler(server_rec *s, pool *p); - -#if MODULE_MAGIC_NUMBER > 19961007 -#define CONST_PREFIX const -#else -#define CONST_PREFIX -#endif -CONST_PREFIX char *php_apache_value_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode); -CONST_PREFIX char *php_apache_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2); -CONST_PREFIX char *php_apache_admin_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2); -CONST_PREFIX char *php_apache_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2); -CONST_PREFIX char *php_apache_flag_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode); -CONST_PREFIX char *php_apache_admin_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2); - -/* ### these should be defined in mod_php4.h or somewhere else */ -#define USE_PATH 1 -#define IGNORE_URL 2 - -module MODULE_VAR_EXPORT php4_module; - -int saved_umask; -static unsigned char apache_php_initialized; - -typedef struct _php_per_dir_entry { - char *key; - char *value; - uint key_length; - uint value_length; - int type; -} php_per_dir_entry; - -/* handled apropriately in apache_php_module_main */ -/* popenf isn't working on Windows, use open instead -#if WIN32|WINNT -# ifdef popenf -# undef popenf -# endif -# define popenf(p,n,f,m) open((n),(f),(m)) -# ifdef pclosef -# undef pclosef -# endif -# define pclosef(p,f) close(f) -#endif -*/ - -php_apache_info_struct php_apache_info; /* active config */ - -/* some systems are missing these from their header files */ - -void php_save_umask(void) -{ - saved_umask = umask(077); - umask(saved_umask); -} - - -static int sapi_apache_ub_write(const char *str, uint str_length) -{ - int ret; - SLS_FETCH(); - PLS_FETCH(); - - if (SG(server_context)) { - ret = rwrite(str, str_length, (request_rec *) SG(server_context)); - } else { - ret = fwrite(str, 1, str_length, stderr); - } - if(ret != str_length) { - PG(connection_status) = PHP_CONNECTION_ABORTED; - if (!PG(ignore_user_abort)) { - zend_bailout(); - } - } - return ret; -} - - - -static void sapi_apache_flush(void *server_context) -{ - if (server_context) { -#if MODULE_MAGIC_NUMBER > 19970110 - rflush((request_rec *) server_context); -#else - bflush((request_rec *) server_context->connection->client); -#endif - } -} - - -int sapi_apache_read_post(char *buffer, uint count_bytes SLS_DC) -{ - uint total_read_bytes=0, read_bytes; - request_rec *r = (request_rec *) SG(server_context); - void (*handler)(int); - - handler = signal(SIGPIPE, SIG_IGN); - while (total_read_bytes<count_bytes) { - hard_timeout("Read POST information", r); /* start timeout timer */ - read_bytes = get_client_block(r, buffer+total_read_bytes, count_bytes-total_read_bytes); - reset_timeout(r); - if (read_bytes<=0) { - break; - } - total_read_bytes += read_bytes; - } - signal(SIGPIPE, handler); - return total_read_bytes; -} - - -char *sapi_apache_read_cookies(SLS_D) -{ - return (char *) table_get(((request_rec *) SG(server_context))->subprocess_env, "HTTP_COOKIE"); -} - - -int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC) -{ - char *header_name, *header_content, *p; - request_rec *r = (request_rec *) SG(server_context); - - header_name = sapi_header->header; - - header_content = p = strchr(header_name, ':'); - if (!p) { - return 0; - } - - *p = 0; - do { - header_content++; - } while (*header_content==' '); - - if (!strcasecmp(header_name, "Content-Type")) { - r->content_type = pstrdup(r->pool, header_content); - } else if (!strcasecmp(header_name, "Set-Cookie")) { - table_add(r->headers_out, header_name, header_content); - } else { - table_set(r->headers_out, header_name, header_content); - } - - *p = ':'; /* a well behaved header handler shouldn't change its original arguments */ - - efree(sapi_header->header); - - return 0; /* don't use the default SAPI mechanism, Apache duplicates this functionality */ -} - - -int sapi_apache_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ - if(SG(server_context) == NULL) { /* server_context is not here anymore */ - return SAPI_HEADER_SEND_FAILED; - } - - ((request_rec *) SG(server_context))->status = SG(sapi_headers).http_response_code; - send_http_header((request_rec *) SG(server_context)); - return SAPI_HEADER_SENT_SUCCESSFULLY; -} - - -static void sapi_apache_register_server_variables(zval *track_vars_array ELS_DC SLS_DC PLS_DC) -{ - register int i; - array_header *arr = table_elts(((request_rec *) SG(server_context))->subprocess_env); - table_entry *elts = (table_entry *) arr->elts; - char *script_filename=NULL; - - for (i = 0; i < arr->nelts; i++) { - char *val; - - if (elts[i].val) { - val = elts[i].val; - if (!strcmp(elts[i].key, "SCRIPT_FILENAME")) { - script_filename = val; - } - } else { - val = empty_string; - } - php_register_variable(elts[i].key, val, NULL ELS_CC PLS_CC); - } - - /* insert special variables */ - if (script_filename) { - php_register_variable("PATH_TRANSLATED", script_filename, track_vars_array ELS_CC PLS_CC); - } - php_register_variable("PHP_SELF", ((request_rec *) SG(server_context))->uri, track_vars_array ELS_CC PLS_CC); -} - -static int php_apache_startup(sapi_module_struct *sapi_module) -{ - if(php_module_startup(sapi_module) == FAILURE - || zend_startup_module(&apache_module_entry) == FAILURE) { - return FAILURE; - } else { - return SUCCESS; - } -} - - -static void php_apache_log_message(char *message) -{ - SLS_FETCH(); - - if (SG(server_context)) { -#if MODULE_MAGIC_NUMBER >= 19970831 - aplog_error(NULL, 0, APLOG_ERR | APLOG_NOERRNO, ((request_rec *) SG(server_context))->server, "%s", message); -#else - log_error(message, ((requset_rec *) SG(server_context))->server); -#endif - } else { - fprintf(stderr, message); - fprintf(stderr, "\n"); - } -} - - -static void php_apache_request_shutdown(void *dummy) -{ - SLS_FETCH(); - - SG(server_context) = NULL; /* The server context (request) is invalid by the time run_cleanups() is called */ - php_request_shutdown(dummy); -} - - -static int php_apache_sapi_activate(SLS_D) -{ - /* - * For the Apache module version, this bit of code registers a cleanup - * function that gets triggered when our request pool is destroyed. - * We need this because at any point in our code we can be interrupted - * and that may happen before we have had time to free our memory. - * The php_request_shutdown function needs to free all outstanding allocated - * memory. - */ - block_alarms(); - register_cleanup(((request_rec *) SG(server_context))->pool, NULL, php_apache_request_shutdown, php_request_shutdown_for_exec); - unblock_alarms(); - return SUCCESS; -} - - -static struct stat *php_apache_get_stat(SLS_D) -{ - return &((request_rec *) SG(server_context))->finfo; -} - - -static char *php_apache_getenv(char *name, int name_len SLS_DC) -{ - return (char *) table_get(((request_rec *) SG(server_context))->subprocess_env, name); -} - - -static sapi_module_struct sapi_module = { - "Apache", /* name */ - - php_apache_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - php_apache_sapi_activate, /* activate */ - NULL, /* deactivate */ - - sapi_apache_ub_write, /* unbuffered write */ - sapi_apache_flush, /* flush */ - php_apache_get_stat, /* get uid */ - php_apache_getenv, /* getenv */ - - php_error, /* error handler */ - - sapi_apache_header_handler, /* header handler */ - sapi_apache_send_headers, /* send headers handler */ - NULL, /* send header handler */ - - sapi_apache_read_post, /* read POST data */ - sapi_apache_read_cookies, /* read Cookies */ - - sapi_apache_register_server_variables, /* register server variables */ - php_apache_log_message, /* Log message */ - -#ifdef PHP_WIN32 - NULL, - NULL, -#else - block_alarms, /* Block interruptions */ - unblock_alarms, /* Unblock interruptions */ -#endif - - STANDARD_SAPI_MODULE_PROPERTIES -}; - - -void php_restore_umask(void) -{ - umask(saved_umask); -} - - -static void init_request_info(SLS_D) -{ - request_rec *r = ((request_rec *) SG(server_context)); - char *content_length = (char *) table_get(r->subprocess_env, "CONTENT_LENGTH"); - const char *authorization=NULL; - char *tmp; - - SG(request_info).query_string = r->args; - SG(request_info).path_translated = r->filename; - SG(request_info).request_uri = r->uri; - SG(request_info).request_method = (char *)r->method; - SG(request_info).content_type = (char *) table_get(r->subprocess_env, "CONTENT_TYPE"); - SG(request_info).content_length = (content_length ? atoi(content_length) : 0); - - if (r->headers_in) { - authorization = table_get(r->headers_in, "Authorization"); - } - if (authorization -/* && !auth_type(r) */ - && !strcmp(getword(r->pool, &authorization, ' '), "Basic")) { - tmp = uudecode(r->pool, authorization); - SG(request_info).auth_user = getword_nulls_nc(r->pool, &tmp, ':'); - if (SG(request_info).auth_user) { - SG(request_info).auth_user = estrdup(SG(request_info).auth_user); - } - SG(request_info).auth_password = tmp; - if (SG(request_info).auth_password) { - SG(request_info).auth_password = estrdup(SG(request_info).auth_password); - } - } else { - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; - } -} - - -static int php_apache_alter_ini_entries(php_per_dir_entry *per_dir_entry) -{ - php_alter_ini_entry(per_dir_entry->key, per_dir_entry->key_length+1, per_dir_entry->value, per_dir_entry->value_length+1, per_dir_entry->type, PHP_INI_STAGE_ACTIVATE); - return 0; -} - -static char *php_apache_get_default_mimetype(request_rec *r SLS_DC) -{ - - char *mimetype; - if (SG(default_mimetype) || SG(default_charset)) { - /* Assume output will be of the default MIME type. Individual - scripts may change this later. */ - char *tmpmimetype; - tmpmimetype = sapi_get_default_content_type(SLS_C); - mimetype = pstrdup(r->pool, tmpmimetype); - efree(tmpmimetype); - } else { - mimetype = SAPI_DEFAULT_MIMETYPE "; charset=" SAPI_DEFAULT_CHARSET; - } - return mimetype; -} - -int send_php(request_rec *r, int display_source_mode, char *filename) -{ - int fd, retval; - HashTable *per_dir_conf; - SLS_FETCH(); - ELS_FETCH(); - CLS_FETCH(); - PLS_FETCH(); - - if (setjmp(EG(bailout))!=0) { - return OK; - } - per_dir_conf = (HashTable *) get_module_config(r->per_dir_config, &php4_module); - zend_hash_apply((HashTable *) per_dir_conf, (int (*)(void *)) php_apache_alter_ini_entries); - - /* We don't accept OPTIONS requests, but take everything else */ - if (r->method_number == M_OPTIONS) { - r->allowed |= (1 << METHODS) - 1; - return DECLINED; - } - - /* Make sure file exists */ - if (filename == NULL && r->finfo.st_mode == 0) { - return DECLINED; - } - - /* If PHP parser engine has been turned off with an "engine off" - * directive, then decline to handle this request - */ - if (!php_apache_info.engine) { - r->content_type = php_apache_get_default_mimetype(r SLS_CC); - r->allowed |= (1 << METHODS) - 1; - return DECLINED; - } - if (filename == NULL) { - filename = r->filename; - } - /* Open the file */ - if ((fd = popenf(r->pool, filename, O_RDONLY, 0)) == -1) { - log_reason("file permissions deny server access", filename, r); - return FORBIDDEN; - } - - /* Apache 1.2 has a more complex mechanism for reading POST data */ -#if MODULE_MAGIC_NUMBER > 19961007 - if ((retval = setup_client_block(r, REQUEST_CHUNKED_ERROR))) - return retval; -#endif - - if (php_apache_info.last_modified) { -#if MODULE_MAGIC_NUMBER < 19970912 - if ((retval = set_last_modified(r, r->finfo.st_mtime))) { - return retval; - } -#else - update_mtime (r, r->finfo.st_mtime); - set_last_modified(r); - set_etag(r); -#endif - } - /* Assume output will be of the default MIME type. Individual - scripts may change this later in the request. */ - r->content_type = php_apache_get_default_mimetype(r SLS_CC); - - /* Init timeout */ - hard_timeout("send", r); - - SG(server_context) = r; - - php_save_umask(); - V_CHDIR_FILE(filename); - add_common_vars(r); - add_cgi_vars(r); - - init_request_info(SLS_C); - apache_php_module_main(r, fd, display_source_mode CLS_CC ELS_CC PLS_CC SLS_CC); - - /* Done, restore umask, turn off timeout, close file and return */ - php_restore_umask(); - kill_timeout(r); - pclosef(r->pool, fd); - return OK; -} - - -int send_parsed_php(request_rec * r) -{ - return send_php(r, 0, NULL); -} - - -int send_parsed_php_source(request_rec * r) -{ - return send_php(r, 1, NULL); -} - - -static void destroy_per_dir_entry(php_per_dir_entry *per_dir_entry) -{ - free(per_dir_entry->key); - free(per_dir_entry->value); -} - -static void copy_per_dir_entry(php_per_dir_entry *per_dir_entry) -{ - php_per_dir_entry tmp = *per_dir_entry; - - per_dir_entry->key = (char *) malloc(tmp.key_length+1); - memcpy(per_dir_entry->key, tmp.key, tmp.key_length); - per_dir_entry->key[per_dir_entry->key_length] = 0; - - per_dir_entry->value = (char *) malloc(tmp.value_length+1); - memcpy(per_dir_entry->value, tmp.value, tmp.value_length); - per_dir_entry->value[per_dir_entry->value_length] = 0; -} - - -static void php_destroy_per_dir_info(HashTable *per_dir_info) -{ - zend_hash_destroy(per_dir_info); - free(per_dir_info); -} - -static void *php_create_dir(pool *p, char *dummy) -{ - HashTable *per_dir_info; - - per_dir_info = (HashTable *) malloc(sizeof(HashTable)); - zend_hash_init(per_dir_info, 5, NULL, (void (*)(void *)) destroy_per_dir_entry, 1); - register_cleanup(p, (void *) per_dir_info, (void (*)(void *)) php_destroy_per_dir_info, (void (*)(void *)) zend_hash_destroy); - - return per_dir_info; -} - - -static void *php_merge_dir(pool *p, void *basev, void *addv) -{ - php_per_dir_entry tmp; - - zend_hash_merge((HashTable *) addv, (HashTable *) basev, (void (*)(void *)) copy_per_dir_entry, &tmp, sizeof(php_per_dir_entry), 0); - return addv; -} - - -CONST_PREFIX char *php_apache_value_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode) -{ - php_per_dir_entry per_dir_entry; - - if (!apache_php_initialized) { - apache_php_initialized = 1; -#ifdef ZTS - tsrm_startup(1, 1, 0); -#endif - sapi_startup(&sapi_module); - php_apache_startup(&sapi_module); - } - per_dir_entry.type = mode; - - if (strcasecmp(arg2, "none") == 0) { - arg2 = ""; - } - - per_dir_entry.key_length = strlen(arg1); - per_dir_entry.value_length = strlen(arg2); - - per_dir_entry.key = (char *) malloc(per_dir_entry.key_length+1); - memcpy(per_dir_entry.key, arg1, per_dir_entry.key_length); - per_dir_entry.key[per_dir_entry.key_length] = 0; - - per_dir_entry.value = (char *) malloc(per_dir_entry.value_length+1); - memcpy(per_dir_entry.value, arg2, per_dir_entry.value_length); - per_dir_entry.value[per_dir_entry.value_length] = 0; - - zend_hash_update((HashTable *) conf, per_dir_entry.key, per_dir_entry.key_length, &per_dir_entry, sizeof(php_per_dir_entry), NULL); - return NULL; -} - - -CONST_PREFIX char *php_apache_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2) -{ - return php_apache_value_handler_ex(cmd, conf, arg1, arg2, PHP_INI_PERDIR); -} - - -CONST_PREFIX char *php_apache_admin_value_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2) -{ - return php_apache_value_handler_ex(cmd, conf, arg1, arg2, PHP_INI_SYSTEM); -} - - -CONST_PREFIX char *php_apache_flag_handler_ex(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2, int mode) -{ - char bool_val[2]; - - if (!strcasecmp(arg2, "On")) { - bool_val[0] = '1'; - } else { - bool_val[0] = '0'; - } - bool_val[1] = 0; - - return php_apache_value_handler_ex(cmd, conf, arg1, bool_val, mode); -} - - -CONST_PREFIX char *php_apache_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2) -{ - return php_apache_flag_handler_ex(cmd, conf, arg1, arg2, PHP_INI_PERDIR); -} - - -CONST_PREFIX char *php_apache_admin_flag_handler(cmd_parms *cmd, HashTable *conf, char *arg1, char *arg2) -{ - return php_apache_flag_handler_ex(cmd, conf, arg1, arg2, PHP_INI_SYSTEM); -} - - - - -int php_xbithack_handler(request_rec * r) -{ - php_apache_info_struct *conf; - - conf = (php_apache_info_struct *) get_module_config(r->per_dir_config, &php4_module); - if (!(r->finfo.st_mode & S_IXUSR)) { - r->allowed |= (1 << METHODS) - 1; - return DECLINED; - } - if (conf->xbithack == 0) { - r->allowed |= (1 << METHODS) - 1; - return DECLINED; - } - return send_parsed_php(r); -} - -static void apache_php_module_shutdown_wrapper(void) -{ - apache_php_initialized = 0; - sapi_module.shutdown(&sapi_module); -#ifdef ZTS - tsrm_shutdown(); -#endif -} - - -void php_init_handler(server_rec *s, pool *p) -{ - register_cleanup(p, NULL, (void (*)(void *))apache_php_module_shutdown_wrapper, (void (*)(void *))php_module_shutdown_for_exec); - if (!apache_php_initialized) { - apache_php_initialized = 1; -#ifdef ZTS - tsrm_startup(1, 1, 0); -#endif - sapi_startup(&sapi_module); - php_apache_startup(&sapi_module); - } -#if MODULE_MAGIC_NUMBER >= 19980527 - { - PLS_FETCH(); - if (PG(expose_php)) { - ap_add_version_component("PHP/" PHP_VERSION); - } - } -#endif -} - - -#if HAVE_MOD_DAV - -extern int phpdav_mkcol_test_handler(request_rec *r); -extern int phpdav_mkcol_create_handler(request_rec *r); - -/* conf is being read twice (both here and in send_php()) */ -int send_parsed_php_dav_script(request_rec *r) -{ - php_apache_info_struct *conf; - - conf = (php_apache_info_struct *) get_module_config(r->per_dir_config, - &php4_module); - return send_php(r, 0, 0, conf->dav_script); -} - -static int php_type_checker(request_rec *r) -{ - php_apache_info_struct *conf; - - conf = (php_apache_info_struct *)get_module_config(r->per_dir_config, - &php4_module); - - /* If DAV support is enabled, use mod_dav's type checker. */ - if (conf->dav_script) { - dav_api_set_request_handler(r, send_parsed_php_dav_script); - dav_api_set_mkcol_handlers(r, phpdav_mkcol_test_handler, - phpdav_mkcol_create_handler); - /* leave the rest of the request to mod_dav */ - return dav_api_type_checker(r); - } - - return DECLINED; -} - -#else /* HAVE_MOD_DAV */ - -# define php_type_checker NULL - -#endif /* HAVE_MOD_DAV */ - - -handler_rec php_handlers[] = -{ - {"application/x-httpd-php", send_parsed_php}, - {"application/x-httpd-php-source", send_parsed_php_source}, - {"text/html", php_xbithack_handler}, - {NULL} -}; - - -command_rec php_commands[] = -{ - {"php_value", php_apache_value_handler, NULL, OR_OPTIONS, TAKE2, "PHP Value Modifier"}, - {"php_flag", php_apache_flag_handler, NULL, OR_OPTIONS, TAKE2, "PHP Flag Modifier"}, - {"php_admin_value", php_apache_admin_value_handler, NULL, ACCESS_CONF|RSRC_CONF, TAKE2, "PHP Value Modifier (Admin)"}, - {"php_admin_flag", php_apache_admin_flag_handler, NULL, ACCESS_CONF|RSRC_CONF, TAKE2, "PHP Flag Modifier (Admin)"}, - {NULL} -}; - - - -module MODULE_VAR_EXPORT php4_module = -{ - STANDARD_MODULE_STUFF, - php_init_handler, /* initializer */ - php_create_dir, /* per-directory config creator */ - php_merge_dir, /* dir merger */ - NULL, /* per-server config creator */ - NULL, /* merge server config */ - php_commands, /* command table */ - php_handlers, /* handlers */ - NULL, /* filename translation */ - NULL, /* check_user_id */ - NULL, /* check auth */ - NULL, /* check access */ - php_type_checker, /* type_checker */ - NULL, /* fixups */ - NULL /* logger */ -#if MODULE_MAGIC_NUMBER >= 19970103 - ,NULL /* header parser */ -#endif -#if MODULE_MAGIC_NUMBER >= 19970719 - ,NULL /* child_init */ -#endif -#if MODULE_MAGIC_NUMBER >= 19970728 - ,NULL /* child_exit */ -#endif -#if MODULE_MAGIC_NUMBER >= 19970902 - ,NULL /* post read-request */ -#endif -}; - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/sapi/apache/mod_php4.exp b/sapi/apache/mod_php4.exp deleted file mode 100644 index 2dca1256c2..0000000000 --- a/sapi/apache/mod_php4.exp +++ /dev/null @@ -1 +0,0 @@ -php4_module diff --git a/sapi/apache/mod_php4.h b/sapi/apache/mod_php4.h deleted file mode 100644 index 73a087b4ab..0000000000 --- a/sapi/apache/mod_php4.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf <rasmus@php.net> | - +----------------------------------------------------------------------+ - */ -/* $Id$ */ - -#ifndef _MOD_PHP4_H -#define _MOD_PHP4_H - -#if !defined(WIN32) && !defined(WINNT) -#ifndef MODULE_VAR_EXPORT -#define MODULE_VAR_EXPORT -#endif -#endif - -typedef struct { - long engine; - long last_modified; - char *dav_script; - long xbithack; -} php_apache_info_struct; - -extern zend_module_entry apache_module_entry; -extern php_apache_info_struct php_apache_info; - -#ifdef WIN32 -#define S_IXUSR _S_IEXEC -#endif - -#endif /* _MOD_PHP4_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/sapi/apache/php.sym b/sapi/apache/php.sym deleted file mode 100644 index 2dca1256c2..0000000000 --- a/sapi/apache/php.sym +++ /dev/null @@ -1 +0,0 @@ -php4_module diff --git a/sapi/apache/php4apache.dsp b/sapi/apache/php4apache.dsp deleted file mode 100644 index 4b924457af..0000000000 --- a/sapi/apache/php4apache.dsp +++ /dev/null @@ -1,150 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php4apache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php4apache - Win32 Release_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php4apache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php4apache.mak" CFG="php4apache - Win32 Release_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php4apache - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php4apache - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php4apache - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php4apache - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP4_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "\apache\src\include" /D ZEND_DEBUG=0 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP4_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ZendTS.lib TSRM.lib php4ts.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x60000000" /dll /machine:I386 /libpath:"\apache\src\corer" /libpath:"..\..\Release_TS" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\Zend\Release_TS"
-
-!ELSEIF "$(CFG)" == "php4apache - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "e:\apache\modules"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP4_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "\apache\src\include" /D "_DEBUG" /D "_Debug_TS" /D ZEND_DEBUG=1 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP4_EXPORTS" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts_debug.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x60000000" /dll /incremental:yes /debug /machine:I386 /pdbtype:sept /libpath:"\apache\src\cored" /libpath:"..\..\Debug_TS" /libpath:"..\..\TSRM\Debug_TS" /libpath:"..\..\Zend\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php4apache - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS_inline"
-# PROP BASE Intermediate_Dir "Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "APACHEPHP4_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /I "\apache\src\include" /D ZEND_DEBUG=0 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "ZEND_WIN32_FORCE_INLINE" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "APACHEPHP4_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ZendTS.lib TSRM.lib php4ts.lib ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /libpath:"\apache\src\corer" /libpath:"..\..\Release_TS_inline" /libpath:"..\..\TSRM\Release_TS_inline" /libpath:"..\..\Zend\Release_TS_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php4apache - Win32 Release_TS"
-# Name "php4apache - Win32 Debug_TS"
-# Name "php4apache - Win32 Release_TS_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\mod_php4.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_apache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sapi_apache.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\mod_php4.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\php_apache_http.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/apache/php_apache.c b/sapi/apache/php_apache.c deleted file mode 100644 index 0250a38397..0000000000 --- a/sapi/apache/php_apache.c +++ /dev/null @@ -1,467 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> | - | Stig Sæther Bakken <ssb@guardian.no> | - | David Sklar <sklar@student.net> | - +----------------------------------------------------------------------+ - */ -/* $Id$ */ - -#define NO_REGEX_EXTRA_H - -#ifdef WIN32 -#include <winsock2.h> -#include <stddef.h> -#endif - -#include "php.h" -#include "ext/standard/head.h" -#include "php_globals.h" -#include "php_ini.h" -#include "SAPI.h" -#include "mod_php4.h" -#include "ext/standard/info.h" - -#include <stdlib.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <string.h> -#include <errno.h> -#include <ctype.h> - -#include "php_apache_http.h" -#include "http_request.h" - -#ifdef PHP_WIN32 -#include "zend.h" -#include "ap_compat.h" -#else -#include "build-defs.h" -#endif - -#define SECTION(name) PUTS("<H2>" name "</H2>\n") - -extern module *top_module; - -PHP_FUNCTION(virtual); -PHP_FUNCTION(getallheaders); -PHP_FUNCTION(apachelog); -PHP_FUNCTION(apache_note); -PHP_FUNCTION(apache_lookup_uri); - -PHP_MINFO_FUNCTION(apache); - -function_entry apache_functions[] = { - PHP_FE(virtual, NULL) - PHP_FE(getallheaders, NULL) - PHP_FE(apache_note, NULL) - PHP_FE(apache_lookup_uri, NULL) - {NULL, NULL, NULL} -}; - - -static PHP_INI_MH(OnChangeApacheInt) -{ - long *p; - char *base = (char *) &php_apache_info; - - p = (long *) (base+(size_t) mh_arg1); - - if (new_value) { - *p = atoi(new_value); - return SUCCESS; - } else { - return FAILURE; - } -} - - -static PHP_INI_MH(OnChangeApacheString) -{ - char **p; - char *base = (char *) &php_apache_info; - - p = (char **) (base+(size_t) mh_arg1); - - if (new_value) { - *p = new_value; - return SUCCESS; - } else { - return FAILURE; - } -} - -PHP_INI_BEGIN() - PHP_INI_ENTRY1("xbithack", "0", PHP_INI_ALL, OnChangeApacheInt, (void *) XtOffsetOf(php_apache_info_struct, xbithack)) - PHP_INI_ENTRY1("engine", "1", PHP_INI_ALL, OnChangeApacheInt, (void *) XtOffsetOf(php_apache_info_struct, engine)) - PHP_INI_ENTRY1("last_modified", "0", PHP_INI_ALL, OnChangeApacheInt, (void *) XtOffsetOf(php_apache_info_struct, last_modified)) - PHP_INI_ENTRY1("dav_script", NULL, PHP_INI_ALL, OnChangeApacheString, (void *) XtOffsetOf(php_apache_info_struct, dav_script)) -PHP_INI_END() - - -static PHP_MINIT_FUNCTION(apache) -{ - REGISTER_INI_ENTRIES(); - return SUCCESS; -} - - -static PHP_MSHUTDOWN_FUNCTION(apache) -{ - UNREGISTER_INI_ENTRIES(); - return SUCCESS; -} - - -zend_module_entry apache_module_entry = { - "apache", apache_functions, PHP_MINIT(apache), PHP_MSHUTDOWN(apache), NULL, NULL, PHP_MINFO(apache), STANDARD_MODULE_PROPERTIES -}; - -/* {{{ proto string apache_note(string note_name [, string note_value]) - Get and set Apache request notes */ -PHP_FUNCTION(apache_note) -{ - pval **arg_name,**arg_val; - char *note_val; - int arg_count = ARG_COUNT(ht); - SLS_FETCH(); - - if (arg_count<1 || arg_count>2 || - zend_get_parameters_ex(arg_count,&arg_name,&arg_val) ==FAILURE ) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(arg_name); - note_val = (char *) table_get(((request_rec *)SG(server_context))->notes,(*arg_name)->value.str.val); - - if (arg_count == 2) { - convert_to_string_ex(arg_val); - table_set(((request_rec *)SG(server_context))->notes,(*arg_name)->value.str.val,(*arg_val)->value.str.val); - } - - if (note_val) { - RETURN_STRING(note_val,1); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -PHP_MINFO_FUNCTION(apache) -{ - module *modp = NULL; - char output_buf[128]; -#if !defined(WIN32) && !defined(WINNT) - char name[64]; - char modulenames[1024]; - char *p; -#endif - server_rec *serv; - extern char server_root[MAX_STRING_LEN]; - extern uid_t user_id; - extern char *user_name; - extern gid_t group_id; - extern int max_requests_per_child; - SLS_FETCH(); - - serv = ((request_rec *) SG(server_context))->server; - -#if WIN32|WINNT - PUTS("Apache for Windows 95/NT<br>"); - php_info_print_table_start(); -#else - php_info_print_table_start(); - php_info_print_table_row(2, "APACHE_INCLUDE", PHP_APACHE_INCLUDE); - php_info_print_table_row(2, "APACHE_TARGET", PHP_APACHE_TARGET); -#endif - - php_info_print_table_row(2, "Apache Version", SERVER_VERSION); - -#ifdef APACHE_RELEASE - sprintf(output_buf, "%d", APACHE_RELEASE); - php_info_print_table_row(2, "Apache Release", output_buf); -#endif - sprintf(output_buf, "%d", MODULE_MAGIC_NUMBER); - php_info_print_table_row(2, "Apache API Version", output_buf); - sprintf(output_buf, "%s:%u", serv->server_hostname,serv->port); - php_info_print_table_row(2, "Hostname:Port", output_buf); -#if !defined(WIN32) && !defined(WINNT) - sprintf(output_buf, "%s(%d)/%d", user_name,(int)user_id,(int)group_id); - php_info_print_table_row(2, "User/Group", output_buf); - sprintf(output_buf, "Per Child: %d<br>Keep Alive: %s<br>Max Per Connection: %d",max_requests_per_child,serv->keep_alive ? "on":"off", serv->keep_alive_max); - php_info_print_table_row(2, "Max Requests", output_buf); -#endif - sprintf(output_buf, "Connection: %d<br>Keep-Alive: %d",serv->timeout,serv->keep_alive_timeout); - php_info_print_table_row(2, "Timeouts", output_buf); -#if !defined(WIN32) && !defined(WINNT) - php_info_print_table_row(2, "Server Root", server_root); - - strcpy(modulenames, ""); - for(modp = top_module; modp; modp = modp->next) { - strlcpy(name, modp->name, sizeof(name)); - if ((p = strrchr(name, '.'))) { - *p='\0'; /* Cut off ugly .c extensions on module names */ - } - strcat(modulenames, name); - if (modp->next) { - strcat(modulenames, ", "); - } - } - php_info_print_table_row(2, "Loaded Modules", modulenames); -#endif - - php_info_print_table_end(); - - - { - register int i; - array_header *arr; - table_entry *elts; - request_rec *r; - SLS_FETCH(); - - r = ((request_rec *) SG(server_context)); - arr = table_elts(r->subprocess_env); - elts = (table_entry *)arr->elts; - - SECTION("Apache Environment"); - php_info_print_table_start(); - php_info_print_table_header(2, "Variable", "Value"); - for (i=0; i < arr->nelts; i++) { - php_info_print_table_row(2, elts[i].key, elts[i].val); - } - php_info_print_table_end(); - } - - { - array_header *env_arr; - table_entry *env; - int i; - request_rec *r; - SLS_FETCH(); - - r = ((request_rec *) SG(server_context)); - SECTION("HTTP Headers Information"); - php_info_print_table_start(); - php_info_print_table_colspan_header(2, "HTTP Request Headers"); - php_info_print_table_row(2, "HTTP Request", r->the_request); - env_arr = table_elts(r->headers_in); - env = (table_entry *)env_arr->elts; - for (i = 0; i < env_arr->nelts; ++i) { - if (env[i].key) { - php_info_print_table_row(2, env[i].key, env[i].val); - } - } - php_info_print_table_colspan_header(2, "HTTP Response Headers"); - env_arr = table_elts(r->headers_out); - env = (table_entry *)env_arr->elts; - for(i = 0; i < env_arr->nelts; ++i) { - if (env[i].key) { - php_info_print_table_row(2, env[i].key, env[i].val); - } - } - php_info_print_table_end(); - } - -} - -/* This function is equivalent to <!--#include virtual...--> - * in mod_include. It does an Apache sub-request. It is useful - * for including CGI scripts or .shtml files, or anything else - * that you'd parse through Apache (for .phtml files, you'd probably - * want to use <?Include>. This only works when PHP is compiled - * as an Apache module, since it uses the Apache API for doing - * sub requests. - */ -/* {{{ proto int virtual(string filename) - Perform an Apache sub-request */ -PHP_FUNCTION(virtual) -{ - pval **filename; - request_rec *rr = NULL; - SLS_FETCH(); - - if (ARG_COUNT(ht) != 1 || zend_get_parameters_ex(1,&filename) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_string_ex(filename); - - if (!(rr = sub_req_lookup_uri ((*filename)->value.str.val,((request_rec *) SG(server_context))))) { - php_error(E_WARNING, "Unable to include '%s' - URI lookup failed", (*filename)->value.str.val); - if (rr) destroy_sub_req (rr); - RETURN_FALSE; - } - - if (rr->status != 200) { - php_error(E_WARNING, "Unable to include '%s' - error finding URI", (*filename)->value.str.val); - if (rr) destroy_sub_req (rr); - RETURN_FALSE; - } - - /* Cannot include another PHP file because of global conflicts */ - if (rr->content_type && - !strcmp(rr->content_type, PHP_MIME_TYPE)) { - php_error(E_WARNING, "Cannot include a PHP file " - "(use <code><?include \"%s\"></code> instead)", (*filename)->value.str.val); - if (rr) destroy_sub_req (rr); - RETURN_FALSE; - } - - php_end_ob_buffering(1); - php_header(); - - if (run_sub_req(rr)) { - php_error(E_WARNING, "Unable to include '%s' - request execution failed", (*filename)->value.str.val); - if (rr) destroy_sub_req (rr); - RETURN_FALSE; - } else { - if (rr) destroy_sub_req (rr); - RETURN_TRUE; - } -} -/* }}} */ - -/* {{{ proto array getallheaders(void) - Fetch all HTTP request headers */ -PHP_FUNCTION(getallheaders) -{ - array_header *env_arr; - table_entry *tenv; - int i; - SLS_FETCH(); - PLS_FETCH(); - - if (array_init(return_value) == FAILURE) { - RETURN_FALSE; - } - env_arr = table_elts(((request_rec *) SG(server_context))->headers_in); - tenv = (table_entry *)env_arr->elts; - for (i = 0; i < env_arr->nelts; ++i) { - if (!tenv[i].key || - (PG(safe_mode) && - !strncasecmp(tenv[i].key, "authorization", 13))) { - continue; - } - if (add_assoc_string(return_value, tenv[i].key,(tenv[i].val==NULL) ? "" : tenv[i].val, 1)==FAILURE) { - RETURN_FALSE; - } - } -} -/* }}} */ - -/* {{{ proto class apache_lookup_uri(string URI) - Perform a partial request of the given URI to obtain information about it */ -PHP_FUNCTION(apache_lookup_uri) -{ - pval **filename; - request_rec *rr=NULL; - SLS_FETCH(); - - if (ARG_COUNT(ht) != 1 || zend_get_parameters_ex(1,&filename) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_string_ex(filename); - - if(!(rr = sub_req_lookup_uri((*filename)->value.str.val,((request_rec *) SG(server_context))))) { - php_error(E_WARNING, "URI lookup failed",(*filename)->value.str.val); - RETURN_FALSE; - } - object_init(return_value); - add_property_long(return_value,"status",rr->status); - if (rr->the_request) { - add_property_string(return_value,"the_request",rr->the_request,1); - } - if (rr->status_line) { - add_property_string(return_value,"status_line",(char *)rr->status_line,1); - } - if (rr->method) { - add_property_string(return_value,"method",(char *)rr->method,1); - } - if (rr->content_type) { - add_property_string(return_value,"content_type",(char *)rr->content_type,1); - } - if (rr->handler) { - add_property_string(return_value,"handler",(char *)rr->handler,1); - } - if (rr->uri) { - add_property_string(return_value,"uri",rr->uri,1); - } - if (rr->filename) { - add_property_string(return_value,"filename",rr->filename,1); - } - if (rr->path_info) { - add_property_string(return_value,"path_info",rr->path_info,1); - } - if (rr->args) { - add_property_string(return_value,"args",rr->args,1); - } - if (rr->boundary) { - add_property_string(return_value,"boundary",rr->boundary,1); - } - add_property_long(return_value,"no_cache",rr->no_cache); - add_property_long(return_value,"no_local_copy",rr->no_local_copy); - add_property_long(return_value,"allowed",rr->allowed); - add_property_long(return_value,"sent_bodyct",rr->sent_bodyct); - add_property_long(return_value,"bytes_sent",rr->bytes_sent); - add_property_long(return_value,"byterange",rr->byterange); - add_property_long(return_value,"clength",rr->clength); - -#if MODULE_MAGIC_NUMBER >= 19980324 - if (rr->unparsed_uri) { - add_property_string(return_value,"unparsed_uri",rr->unparsed_uri,1); - } - if(rr->mtime) { - add_property_long(return_value,"mtime",rr->mtime); - } -#endif - if(rr->request_time) { - add_property_long(return_value,"request_time",rr->request_time); - } - - destroy_sub_req(rr); -} -/* }}} */ - - -#if 0 -This function is most likely a bad idea. Just playing with it for now. - -PHP_FUNCTION(apache_exec_uri) -{ - pval **filename; - request_rec *rr=NULL; - SLS_FETCH(); - - if (ARG_COUNT(ht) != 1 || zend_get_parameters_ex(1,&filename) == FAILURE) { - WRONG_PARAM_COUNT; - } - convert_to_string_ex(filename); - - if(!(rr = ap_sub_req_lookup_uri((*filename)->value.str.val,((request_rec *) SG(server_context))))) { - php_error(E_WARNING, "URI lookup failed",(*filename)->value.str.val); - RETURN_FALSE; - } - RETVAL_LONG(ap_run_sub_req(rr)); - ap_destroy_sub_req(rr); -} -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/sapi/apache/php_apache_http.h b/sapi/apache/php_apache_http.h deleted file mode 100644 index a878b8fa3e..0000000000 --- a/sapi/apache/php_apache_http.h +++ /dev/null @@ -1,24 +0,0 @@ -# if HAVE_AP_CONFIG_H -#include "ap_config_auto.h" -#ifdef RHAPSODY -#undef HAVE_SNPRINTF -#endif -#include "ap_config.h" -#ifdef RHAPSODY -#undef HAVE_SNPRINTF -#define HAVE_SNPRINTF 1 -#endif -# endif -# if HAVE_OLD_COMPAT_H -#include "compat.h" -# endif -# if HAVE_AP_COMPAT_H -#include "ap_compat.h" -# endif -#include "httpd.h" -#include "http_main.h" -#include "http_core.h" -#include "http_request.h" -#include "http_protocol.h" -#include "http_config.h" -#include "http_log.h" diff --git a/sapi/apache/sapi_apache.c b/sapi/apache/sapi_apache.c deleted file mode 100644 index 6db64b5fa4..0000000000 --- a/sapi/apache/sapi_apache.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf <rasmus@php.net> | - | (with helpful hints from Dean Gaudet <dgaudet@arctic.org> | - | PHP 4.0 patches by: | - | Zeev Suraski <zeev@zend.com> | - | Stig Bakken <ssb@fast.no> | - +----------------------------------------------------------------------+ - */ -/* $Id$ */ - -#define NO_REGEX_EXTRA_H -#ifdef WIN32 -#include <winsock2.h> -#include <stddef.h> -#endif - -#include "php.h" - -#include "httpd.h" -#include "http_config.h" -#if MODULE_MAGIC_NUMBER > 19980712 -# include "ap_compat.h" -#else -# if MODULE_MAGIC_NUMBER > 19980324 -# include "compat.h" -# endif -#endif -#include "http_core.h" -#include "http_main.h" -#include "http_protocol.h" -#include "http_request.h" -#include "http_log.h" - -#include "zend.h" -#include "php_ini.h" -#include "php_globals.h" -#include "SAPI.h" -#include "php_main.h" -#include "zend_compile.h" -#include "zend_execute.h" -#include "zend_highlight.h" -#include "zend_indent.h" -#include "ext/standard/php_standard.h" -#include "util_script.h" -#include "php_version.h" -/*#include "mod_php4.h"*/ - - -int apache_php_module_main(request_rec *r, int fd, int display_source_mode CLS_DC ELS_DC PLS_DC SLS_DC) -{ - zend_file_handle file_handle; - - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC) == FAILURE) { - return FAILURE; - } -#ifdef PHP_WIN32 - /* sending a file handle to another dll is not working - // so let zend open it. - */ - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.handle.fd = 0; -#else - file_handle.type = ZEND_HANDLE_FD; - file_handle.handle.fd = fd; -#endif - file_handle.filename = SG(request_info).path_translated; - file_handle.free_filename = 0; - - if (display_source_mode) { - zend_syntax_highlighter_ini syntax_highlighter_ini; - - if (open_file_for_scanning(&file_handle CLS_CC)==SUCCESS) { - php_get_highlight_struct(&syntax_highlighter_ini); - zend_highlight(&syntax_highlighter_ini); - return OK; - } else { - return NOT_FOUND; - } - } else { - (void) php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - } - - php_header(); /* Make sure headers have been sent */ - php_end_ob_buffering(1); - return (OK); -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/sapi/cgi/Makefile.in b/sapi/cgi/Makefile.in deleted file mode 100644 index 3b66c7d418..0000000000 --- a/sapi/cgi/Makefile.in +++ /dev/null @@ -1,5 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = cgi_main.c getopt.c - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c deleted file mode 100644 index 72d9008f13..0000000000 --- a/sapi/cgi/cgi_main.c +++ /dev/null @@ -1,697 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> | - | Stig Bakken <ssb@fast.no> | - | Zeev Suraski <zeev@zend.com> | - +----------------------------------------------------------------------+ -*/ - - -#include "php.h" -#include "php_globals.h" -#include "php_variables.h" - -#include "SAPI.h" - -#include <stdio.h> -#include "php.h" -#ifdef PHP_WIN32 -#include "win32/time.h" -#include "win32/signal.h" -#include <process.h> -#else -#include "build-defs.h" -#endif -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#if HAVE_SIGNAL_H -#include <signal.h> -#endif -#if HAVE_SETLOCALE -#include <locale.h> -#endif -#include "zend.h" -#include "zend_extensions.h" -#include "php_ini.h" -#include "php_globals.h" -#include "php_main.h" -#include "fopen-wrappers.h" -#include "ext/standard/php_standard.h" -#ifdef PHP_WIN32 -#include <io.h> -#include <fcntl.h> -#include "win32/syslog.h" -#include "win32/php_registry.h" -#else -#include <syslog.h> -#endif - -#if HAVE_SIGNAL_H -#include <signal.h> -#endif - -#include "zend_compile.h" -#include "zend_execute.h" -#include "zend_highlight.h" -#include "zend_indent.h" - - -#include "php_getopt.h" - -PHPAPI extern char *php_ini_path; - -#define PHP_MODE_STANDARD 1 -#define PHP_MODE_HIGHLIGHT 2 -#define PHP_MODE_INDENT 3 - -extern char *ap_php_optarg; -extern int ap_php_optind; - - -static int sapi_cgibin_ub_write(const char *str, uint str_length) -{ - size_t ret; - - ret = fwrite(str, 1, str_length, stdout); - if (ret != str_length) { - PLS_FETCH(); - - PG(connection_status) = PHP_CONNECTION_ABORTED; - if (!PG(ignore_user_abort)) { - zend_bailout(); - } - } - - return ret; -} - - -static void sapi_cgibin_flush(void *server_context) -{ - if (fflush(stdout)==EOF) { - PLS_FETCH(); - - PG(connection_status) = PHP_CONNECTION_ABORTED; - if (!PG(ignore_user_abort)) { - zend_bailout(); - } - } -} - - -static void sapi_cgi_send_header(sapi_header_struct *sapi_header, void *server_context) -{ - if (sapi_header) { - PHPWRITE_H(sapi_header->header, sapi_header->header_len); - } - PHPWRITE_H("\r\n", 2); -} - - -static int sapi_cgi_read_post(char *buffer, uint count_bytes SLS_DC) -{ - uint read_bytes=0, tmp_read_bytes; - - count_bytes = MIN(count_bytes, SG(request_info).content_length-SG(read_post_bytes)); - while (read_bytes < count_bytes) { - tmp_read_bytes = read(0, buffer+read_bytes, count_bytes-read_bytes); - if (tmp_read_bytes<=0) { - break; - } - read_bytes += tmp_read_bytes; - } - return read_bytes; -} - - -static char *sapi_cgi_read_cookies(SLS_D) -{ - return getenv("HTTP_COOKIE"); -} - - -static void sapi_cgi_register_variables(zval *track_vars_array ELS_DC SLS_DC PLS_DC) -{ - char *pi; - - /* Build the special-case PHP_SELF variable for the CGI version */ -#if FORCE_CGI_REDIRECT - php_register_variable("PHP_SELF", (SG(request_info).request_uri ? SG(request_info).request_uri:""), track_vars_array ELS_CC PLS_CC); -#else - { - char *sn; - char *val; - int l=0; - - sn = getenv("SCRIPT_NAME"); - pi = SG(request_info).request_uri; - if (sn) - l += strlen(sn); - if (pi) - l += strlen(pi); - if (pi && sn && !strcmp(pi, sn)) { - l -= strlen(pi); - pi = NULL; - } - val = emalloc(l + 1); - sprintf(val, "%s%s", (sn ? sn : ""), (pi ? pi : "")); /* SAFE */ - php_register_variable("PHP_SELF", val, track_vars_array ELS_CC PLS_CC); - efree(val); - } -#endif -} - - -static void sapi_cgi_log_message(char *message) -{ - if (php_header()) { - fprintf(stderr, message); - fprintf(stderr, "\n"); - } -} - -static int sapi_cgi_deactivate(SLS_D) -{ - fflush(stdout); - if(SG(request_info).argv0) { - free(SG(request_info).argv0); - SG(request_info).argv0 = NULL; - } - return SUCCESS; -} - - - -static sapi_module_struct sapi_module = { - "CGI", /* name */ - - php_module_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - NULL, /* activate */ - sapi_cgi_deactivate, /* deactivate */ - - sapi_cgibin_ub_write, /* unbuffered write */ - sapi_cgibin_flush, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, /* error handler */ - - NULL, /* header handler */ - NULL, /* send headers handler */ - sapi_cgi_send_header, /* send header handler */ - - sapi_cgi_read_post, /* read POST data */ - sapi_cgi_read_cookies, /* read Cookies */ - - sapi_cgi_register_variables, /* register server variables */ - sapi_cgi_log_message, /* Log message */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - - -static void php_cgi_usage(char *argv0) -{ - char *prog; - - prog = strrchr(argv0, '/'); - if (prog) { - prog++; - } else { - prog = "php"; - } - - php_printf("Usage: %s [-q] [-h]" - " [-s]" - " [-v] [-i] [-f <file>] | " - "{<file> [args...]}\n" - " -q Quiet-mode. Suppress HTTP Header output.\n" - " -s Display colour syntax highlighted source.\n" - " -f<file> Parse <file>. Implies `-q'\n" - " -v Version number\n" - " -c<path> Look for php.ini file in this directory\n" -#if SUPPORT_INTERACTIVE - " -a Run interactively\n" -#endif - " -d foo[=bar] Define INI entry foo with value 'bar'\n" - " -e Generate extended information for debugger/profiler\n" - " -z<file> Load Zend extension <file>.\n" - " -i PHP information\n" - " -h This help\n", prog); -} - - -static void init_request_info(SLS_D) -{ - char *content_length = getenv("CONTENT_LENGTH"); - char *script_filename; - - - script_filename = getenv("SCRIPT_FILENAME"); - /* Hack for annoying servers that do not set SCRIPT_FILENAME for us */ - if (!script_filename) { - script_filename = SG(request_info).argv0; - } -#ifdef PHP_WIN32 - /* FIXME WHEN APACHE NT IS FIXED */ - /* a hack for apache nt because it does not appear to set argv[1] and sets - script filename to php.exe thus makes us parse php.exe instead of file.php - requires we get the info from path translated. This can be removed at - such a time taht apache nt is fixed */ - if (script_filename) { - script_filename = getenv("PATH_TRANSLATED"); - } -#endif - - /* doc_root configuration variable is currently ignored, - as it is with every other access method currently also. */ - - /* We always need to emalloc() filename, since it gets placed into - the include file hash table, and gets freed with that table. - Notice that this means that we don't need to efree() it in - php_destroy_request_info()! */ -#if DISCARD_PATH - if (script_filename) { - SLS_FETCH(); - - SG(request_info).path_translated = estrdup(script_filename); - } else { - SLS_FETCH(); - - SG(request_info).path_translated = NULL; - } -#endif - - SG(request_info).request_method = getenv("REQUEST_METHOD"); - SG(request_info).query_string = getenv("QUERY_STRING"); - SG(request_info).request_uri = getenv("PATH_INFO"); - SG(request_info).path_translated = NULL; /* we have to update it later, when we have that information */ - SG(request_info).content_type = getenv("CONTENT_TYPE"); - SG(request_info).content_length = (content_length?atoi(content_length):0); - - /* CGI does not support HTTP authentication */ - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; - - -} - - -static void define_command_line_ini_entry(char *arg) -{ - char *name, *value; - - name = arg; - value = strchr(arg, '='); - if (value) { - *value = 0; - value++; - } else { - value = "1"; - } - php_alter_ini_entry(name, strlen(name), value, strlen(value), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); -} - - -void php_register_command_line_global_vars(char **arg) -{ - char *var, *val; - ELS_FETCH(); - PLS_FETCH(); - - var = *arg; - val = strchr(var, '='); - if (!val) { - printf("No value specified for variable '%s'\n", var); - } else { - *val++ = '\0'; - php_register_variable(var, val, NULL ELS_CC PLS_CC); - } - efree(*arg); -} - - - - -int main(int argc, char *argv[]) -{ - int cgi = 0, c, i, len; - zend_file_handle file_handle; - char *s; -/* temporary locals */ - int cgi_started=0; - int behavior=PHP_MODE_STANDARD; - int no_headers=0; - int free_path_translated=0; - int orig_optind=ap_php_optind; - char *orig_optarg=ap_php_optarg; - char *argv0=NULL; - zend_llist global_vars; -#if SUPPORT_INTERACTIVE - int interactive=0; -#endif -/* end of temporary locals */ -#ifdef ZTS - zend_compiler_globals *compiler_globals; - zend_executor_globals *executor_globals; - php_core_globals *core_globals; - sapi_globals_struct *sapi_globals; -#endif - - -#if HAVE_SIGNAL_H -#if defined(SIGPIPE) && defined(SIG_IGN) - signal(SIGPIPE,SIG_IGN); /* ignore SIGPIPE in standalone mode so that sockets created via - fsockopen() don't kill PHP if the remote site closes it. - in apache|apxs mode apache does that for us! - thies@digicol.de 20000419 */ -#endif -#endif - -#ifndef ZTS - if (setjmp(EG(bailout))!=0) { - return -1; - } -#endif - -#ifdef ZTS - tsrm_startup(1,1,0); -#endif - - sapi_startup(&sapi_module); - -#ifdef PHP_WIN32 - _fmode = _O_BINARY; /*sets default for file streams to binary */ - setmode(_fileno(stdin), O_BINARY); /* make the stdio mode be binary */ - setmode(_fileno(stdout), O_BINARY); /* make the stdio mode be binary */ - setmode(_fileno(stderr), O_BINARY); /* make the stdio mode be binary */ -#endif - - - /* Make sure we detect we are a cgi - a bit redundancy here, - but the default case is that we have to check only the first one. */ - if (getenv("SERVER_SOFTWARE") - || getenv("SERVER_NAME") - || getenv("GATEWAY_INTERFACE") - || getenv("REQUEST_METHOD")) { - cgi = 1; - if (argc > 1) { - argv0 = strdup(argv[1]); - } else { - argv0 = NULL; - } -#if FORCE_CGI_REDIRECT - if (!getenv("REDIRECT_STATUS")) { - PUTS("<b>Security Alert!</b> PHP CGI cannot be accessed directly.\n\ -\n\ -<P>This PHP CGI binary was compiled with force-cgi-redirect enabled. This\n\ -means that a page will only be served up if the REDIRECT_STATUS CGI variable is\n\ -set. This variable is set, for example, by Apache's Action directive redirect.\n\ -<P>You may disable this restriction by recompiling the PHP binary with the\n\ ---disable-force-cgi-redirect switch. If you do this and you have your PHP CGI\n\ -binary accessible somewhere in your web tree, people will be able to circumvent\n\ -.htaccess security by loading files through the PHP parser. A good way around\n\ -this is to define doc_root in your php.ini file to something other than your\n\ -top-level DOCUMENT_ROOT. This way you can separate the part of your web space\n\n\ -which uses PHP from the normal part using .htaccess security. If you do not have\n\ -any .htaccess restrictions anywhere on your site you can leave doc_root undefined.\n\ -\n"); - - /* remove that detailed explanation some time */ - - return FAILURE; - } -#endif /* FORCE_CGI_REDIRECT */ - } - - if (php_module_startup(&sapi_module)==FAILURE) { - return FAILURE; - } -#ifdef ZTS - compiler_globals = ts_resource(compiler_globals_id); - executor_globals = ts_resource(executor_globals_id); - core_globals = ts_resource(core_globals_id); - sapi_globals = ts_resource(sapi_globals_id); - if (setjmp(EG(bailout))!=0) { - return -1; - } -#endif - - if (!cgi) { - while ((c=ap_php_getopt(argc, argv, "c:d:z:g:qvisnaeh?vf:"))!=-1) { - switch (c) { - case 'c': - php_ini_path = strdup(ap_php_optarg); /* intentional leak */ - break; - case '?': - no_headers = 1; - php_output_startup(); - SG(headers_sent) = 1; - php_cgi_usage(argv[0]); - php_end_ob_buffering(1); - exit(1); - break; - } - } - ap_php_optind = orig_optind; - ap_php_optarg = orig_optarg; - } - - init_request_info(SLS_C); - SG(server_context) = (void *) 1; /* avoid server_context==NULL checks */ - CG(extended_info) = 0; - - SG(request_info).argv0 = argv0; - - zend_llist_init(&global_vars, sizeof(char *), NULL, 0); - - if (!cgi) { /* never execute the arguments if you are a CGI */ - SG(request_info).argv0 = NULL; - while ((c = ap_php_getopt(argc, argv, "c:d:z:g:qvisnaeh?vf:")) != -1) { - switch (c) { - case 'f': - if (!cgi_started){ - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC)==FAILURE) { - php_module_shutdown(); - return FAILURE; - } - } - if (no_headers) { - SG(headers_sent) = 1; - } - cgi_started=1; - SG(request_info).path_translated = estrdup(ap_php_optarg); - free_path_translated=1; - /* break missing intentionally */ - case 'q': - no_headers = 1; - break; - case 'v': - no_headers = 1; - if (!cgi_started) { - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC)==FAILURE) { - php_module_shutdown(); - return FAILURE; - } - } - if (no_headers) { - SG(headers_sent) = 1; - } - php_printf("%s\n", PHP_VERSION); - php_end_ob_buffering(1); - exit(1); - break; - case 'i': - if (!cgi_started) { - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC)==FAILURE) { - php_module_shutdown(); - return FAILURE; - } - } - if (no_headers) { - SG(headers_sent) = 1; - } - cgi_started=1; - php_print_info(0xFFFFFFFF); - exit(1); - break; - case 's': - behavior=PHP_MODE_HIGHLIGHT; - break; - case 'n': - behavior=PHP_MODE_INDENT; - break; - case 'a': -#if SUPPORT_INTERACTIVE - printf("Interactive mode enabled\n\n"); - interactive=1; -#else - printf("Interactive mode not supported!\n\n"); -#endif - break; - case 'e': - CG(extended_info) = 1; - break; - case 'h': - case '?': - no_headers = 1; - php_output_startup(); - SG(headers_sent) = 1; - php_cgi_usage(argv[0]); - php_end_ob_buffering(1); - exit(1); - break; - case 'd': - define_command_line_ini_entry(ap_php_optarg); - break; - case 'g': { - char *arg = estrdup(ap_php_optarg); - - zend_llist_add_element(&global_vars, &arg); - } - break; - case 'z': - zend_load_extension(ap_php_optarg); - break; - default: - break; - } - } - } /* not cgi */ - -#if SUPPORT_INTERACTIVE - EG(interactive) = interactive; -#endif - - if (!cgi_started) { - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC)==FAILURE) { - php_module_shutdown(); - return FAILURE; - } - } - if (no_headers) { - SG(headers_sent) = 1; - } - file_handle.filename = "-"; - file_handle.type = ZEND_HANDLE_FP; - file_handle.handle.fp = stdin; - - /* This actually destructs the elements of the list - ugly hack */ - zend_llist_apply(&global_vars, php_register_command_line_global_vars); - zend_llist_destroy(&global_vars); - - if (!cgi) { - if (!SG(request_info).query_string) { - for (i = ap_php_optind, len = 0; i < argc; i++) - len += strlen(argv[i]) + 1; - - s = malloc(len + 1); /* leak - but only for command line version, so ok */ - *s = '\0'; /* we are pretending it came from the environment */ - for (i = ap_php_optind, len = 0; i < argc; i++) { - strcat(s, argv[i]); - if (i < (argc - 1)) - strcat(s, "+"); - } - SG(request_info).query_string = s; - } - if (!SG(request_info).path_translated && argc > ap_php_optind) - SG(request_info).path_translated = argv[ap_php_optind]; - } - /* If for some reason the CGI interface is not setting the - PATH_TRANSLATED correctly, SG(request_info).path_translated is NULL. - We still call php_fopen_primary_script, because if you set doc_root - or user_dir configuration directives, PATH_INFO is used to construct - the filename as a side effect of php_fopen_primary_script. - */ - if(cgi) { - SG(request_info).path_translated = getenv("PATH_TRANSLATED"); - } - if (cgi || SG(request_info).path_translated) { - file_handle.handle.fp = php_fopen_primary_script(); - file_handle.filename = SG(request_info).path_translated; - } - - if (cgi && !file_handle.handle.fp) { - PUTS("No input file specified.\n"); -#if 0 /* this is here for debuging under windows */ - if (argc) { - i = 0; - php_printf("\nargc %d\n",argc); - while (i <= argc) { - php_printf("%s\n",argv[i]); - i++; - } - } -#endif - php_request_shutdown((void *) 0); - php_module_shutdown(); - return FAILURE; - } else if (file_handle.handle.fp && file_handle.handle.fp!=stdin) { - /* #!php support */ - c = fgetc(file_handle.handle.fp); - if (c == '#') { - while (c != 10 && c != 13) { - c = fgetc(file_handle.handle.fp); /* skip to end of line */ - } - CG(zend_lineno)++; - } else { - rewind(file_handle.handle.fp); - } - } - - file_handle.free_filename = 0; - switch (behavior) { - case PHP_MODE_STANDARD: - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - break; - case PHP_MODE_HIGHLIGHT: { - zend_syntax_highlighter_ini syntax_highlighter_ini; - - if (open_file_for_scanning(&file_handle CLS_CC)==SUCCESS) { - php_get_highlight_struct(&syntax_highlighter_ini); - zend_highlight(&syntax_highlighter_ini); - fclose(file_handle.handle.fp); - } - return 0; - } - break; - case PHP_MODE_INDENT: - open_file_for_scanning(&file_handle CLS_CC); - zend_indent(); - fclose(file_handle.handle.fp); - return 0; - break; - } - - php_header(); /* Make sure headers have been sent */ - if (free_path_translated) - efree(SG(request_info).path_translated); - php_request_shutdown((void *) 0); - php_module_shutdown(); -#ifdef ZTS - tsrm_shutdown(); -#endif - return SUCCESS; -} - diff --git a/sapi/cgi/config.m4 b/sapi/cgi/config.m4 deleted file mode 100644 index c0e7fab3cb..0000000000 --- a/sapi/cgi/config.m4 +++ /dev/null @@ -1,70 +0,0 @@ - -if test "$PHP_SAPI" = "cgi"; then - - PHP_ARG_ENABLE(force-cgi-redirect,whether to force Apache CGI redirect, -[ --enable-force-cgi-redirect - Enable the security check for internal server - redirects. You should use this if you are - running the CGI version with Apache. ]) - - if test "$PHP_FORCE_CGI_REDIRECT" = "yes"; then - AC_DEFINE(FORCE_CGI_REDIRECT, 1, [ ]) - REDIRECT=1 - else - AC_DEFINE(FORCE_CGI_REDIRECT, 0, [ ]) - REDIRECT=0 - fi - - PHP_ARG_ENABLE(discard-path,whether to discard path_info + path_translated, -[ --enable-discard-path If this is enabled, the PHP CGI binary - can safely be placed outside of the - web tree and people will not be able - to circumvent .htaccess security. ]) - - if test "$PHP_DISCARD_PATH" = "yes"; then - AC_DEFINE(DISCARD_PATH, 1, [ ]) - DISCARD_PATH=1 - else - AC_DEFINE(DISCARD_PATH, 0, [ ]) - DISCARD_PATH=0 - fi - -fi - -if test "$PHP_SAPI" = "cgi" ; then - INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_PROGRAM \$(bindir)/$SAPI_CGI" -fi - -AC_MSG_CHECKING(for fhttpd module support) -AC_ARG_WITH(fhttpd, -[ --with-fhttpd[=DIR] Build fhttpd module. DIR is the fhttpd sources - directory, defaults to /usr/local/src/fhttpd.], -[ - if test "$withval" = "yes"; then - # fhttpd source directory - withval=/usr/local/src/fhttpd - fi - if test "$withval" != "no"; then -# For fhttpd 0.3.x - if test -f $withval/servproc.h; then - FHTTPD_INCLUDE=-I$withval/ - FHTTPD_LIB=$withval/servproc.o - FHTTPD_TARGET=$withval/ - PHP_BUILD_STATIC - PHP_SAPI=cgi - AC_DEFINE(FHTTPD,1,[ ]) - AC_MSG_RESULT(yes - fhttpd 0.3.x) - else - AC_MSG_RESULT(no) - AC_MSG_ERROR(Invalid fhttpd directory - unable to find servproc.h under $withval) - fi - else - AC_MSG_RESULT(no) - fi -],[ - AC_MSG_RESULT(no) -]) -INCLUDES="$INCLUDES $FHTTPD_INCLUDE" -dnl## AC_SUBST(FHTTPD_INCLUDE) -AC_SUBST(FHTTPD_LIB) -AC_SUBST(FHTTPD_TARGET) diff --git a/sapi/cgi/getopt.c b/sapi/cgi/getopt.c deleted file mode 100644 index 4d9187ba8e..0000000000 --- a/sapi/cgi/getopt.c +++ /dev/null @@ -1,166 +0,0 @@ -/* Borrowed from Apache NT Port */ - -#include <stdio.h> -#include <string.h> -#include <assert.h> -#include <stdlib.h> -#include "php_getopt.h" -#define OPTERRCOLON (1) -#define OPTERRNF (2) -#define OPTERRARG (3) - - -char *ap_php_optarg; -int ap_php_optind = 1; -static int ap_php_opterr = 1; -static int ap_php_optopt; - -static int -ap_php_optiserr(int argc, char * const *argv, int oint, const char *optstr, - int optchr, int err) -{ - if (ap_php_opterr) - { - fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1); - switch(err) - { - case OPTERRCOLON: - fprintf(stderr, ": in flags\n"); - break; - case OPTERRNF: - fprintf(stderr, "option not found %c\n", argv[oint][optchr]); - break; - case OPTERRARG: - fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]); - break; - default: - fprintf(stderr, "unknown\n"); - break; - } - } - ap_php_optopt = argv[oint][optchr]; - return('?'); -} - -int ap_php_getopt(int argc, char* const *argv, const char *optstr) -{ - static int optchr = 0; - static int dash = 0; /* have already seen the - */ - - char *cp; - - if (ap_php_optind >= argc) - return(EOF); - if (!dash && (argv[ap_php_optind][0] != '-')) - return(EOF); - if (!dash && (argv[ap_php_optind][0] == '-') && !argv[ap_php_optind][1]) - { - /* - * use to specify stdin. Need to let pgm process this and - * the following args - */ - return(EOF); - } - if ((argv[ap_php_optind][0] == '-') && (argv[ap_php_optind][1] == '-')) - { - /* -- indicates end of args */ - ap_php_optind++; - return(EOF); - } - if (!dash) - { - assert((argv[ap_php_optind][0] == '-') && argv[ap_php_optind][1]); - dash = 1; - optchr = 1; - } - - /* Check if the guy tries to do a -: kind of flag */ - assert(dash); - if (argv[ap_php_optind][optchr] == ':') - { - dash = 0; - ap_php_optind++; - return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr, OPTERRCOLON)); - } - if (!(cp = strchr(optstr, argv[ap_php_optind][optchr]))) - { - int errind = ap_php_optind; - int errchr = optchr; - - if (!argv[ap_php_optind][optchr+1]) - { - dash = 0; - ap_php_optind++; - } - else - optchr++; - return(ap_php_optiserr(argc, argv, errind, optstr, errchr, OPTERRNF)); - } - if (cp[1] == ':') - { - dash = 0; - ap_php_optind++; - if (ap_php_optind == argc) - return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr, OPTERRARG)); - ap_php_optarg = argv[ap_php_optind++]; - return(*cp); - } - else - { - if (!argv[ap_php_optind][optchr+1]) - { - dash = 0; - ap_php_optind++; - } - else - optchr++; - return(*cp); - } - assert(0); - return(0); -} - -#ifdef TESTGETOPT -int - main (int argc, char **argv) - { - int c; - extern char *ap_php_optarg; - extern int ap_php_optind; - int aflg = 0; - int bflg = 0; - int errflg = 0; - char *ofile = NULL; - - while ((c = ap_php_getopt(argc, argv, "abo:")) != EOF) - switch (c) { - case 'a': - if (bflg) - errflg++; - else - aflg++; - break; - case 'b': - if (aflg) - errflg++; - else - bflg++; - break; - case 'o': - ofile = ap_php_optarg; - (void)printf("ofile = %s\n", ofile); - break; - case '?': - errflg++; - } - if (errflg) { - (void)fprintf(stderr, - "usage: cmd [-a|-b] [-o <filename>] files...\n"); - exit (2); - } - for ( ; ap_php_optind < argc; ap_php_optind++) - (void)printf("%s\n", argv[ap_php_optind]); - return 0; - } - -#endif /* TESTGETOPT */ diff --git a/sapi/cgi/php.sym b/sapi/cgi/php.sym deleted file mode 100644 index e69de29bb2..0000000000 --- a/sapi/cgi/php.sym +++ /dev/null diff --git a/sapi/cgi/php_getopt.h b/sapi/cgi/php_getopt.h deleted file mode 100644 index 3b1356d6cd..0000000000 --- a/sapi/cgi/php_getopt.h +++ /dev/null @@ -1,9 +0,0 @@ -/* Borrowed from Apache NT Port */ -#include "php.h" - -extern char *ap_php_optarg; -extern int ap_php_optind; -extern int ap_php_opterr; -extern int ap_php_optopt; - -int ap_php_getopt(int argc, char* const *argv, const char *optstr); diff --git a/sapi/fhttpd/fhttpd.c b/sapi/fhttpd/fhttpd.c deleted file mode 100644 index 858c0da39e..0000000000 --- a/sapi/fhttpd/fhttpd.c +++ /dev/null @@ -1,185 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Alex Belits <abelits@phobos.illtel.denver.co.us> | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ -#include "php.h" - -#include <stdlib.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <string.h> -#include <errno.h> -#include <ctype.h> - -#if FHTTPD -#include <servproc.h> -#include <signal.h> - -struct http_server *server = NULL; -struct request *req = NULL; -struct httpresponse *response = NULL; -int headermade = 0; -int global_alarmflag = 0; -int idle_timeout = IDLE_TIMEOUT; -int exit_status = 0; -char **currentheader = NULL; -char *headerfirstline = NULL; -int headerlines = 0; -static int headerlinesallocated = 0; - -void alarmhandler(SIGACTARGS) -{ - global_alarmflag = 1; -} - -void setalarm(int t) -{ - struct sigaction tmpsigaction; - global_alarmflag = 0; - if (t){ - bzero((char *) &tmpsigaction, sizeof(struct sigaction)); - tmpsigaction.sa_handler = alarmhandler; - sigaddset(&tmpsigaction.sa_mask, SIGALRM); - tmpsigaction.sa_flags = 0; - sigaction(SIGALRM, &tmpsigaction, NULL); - alarm(t); - } -} - -int checkinput(int h) -{ - fd_set readfd; - FD_ZERO(&readfd); - FD_SET(h, &readfd); - return select(h + 1, &readfd, NULL, NULL, NULL) > 0; -} - - -PHPAPI void php_fhttpd_free_header(void) -{ - int i; - - if (headerfirstline) { - free(headerfirstline); - headerfirstline = NULL; - } - if (currentheader) { - for (i = 0; i < headerlines; i++) { - free(currentheader[i]); - } - free(currentheader); - currentheader = NULL; - } - headerlines = 0; - headerlinesallocated = 0; - headermade = 0; -} - - -PHPAPI void php_fhttpd_puts_header(char *s) -{ - char *p0, *p1, *p2, *p3, **p; - int l; - - if (!s || !*s || *s == '\r' || *s == '\n') - return; - l = strlen(s); - p2 = strchr(s, '\r'); - p3 = strchr(s, '\n'); - p0 = strchr(s, ':'); - p1 = strchr(s, ' '); - if (p0 && (!p1 || p1 > p0)) { - if (!headerlinesallocated) { - currentheader = (char **) malloc(10 * sizeof(char *)); - if (currentheader) - headerlinesallocated = 10; - } else { - if (headerlinesallocated <= headerlines) { - p = (char **) realloc(currentheader, (headerlinesallocated + 10) * sizeof(char *)); - if (p) { - currentheader = p; - headerlinesallocated += 10; - } - } - } - - if (headerlinesallocated > headerlines) { - currentheader[headerlines] = malloc(l + 3); - if (currentheader[headerlines]) { - strcpy(currentheader[headerlines], s); - if (!p3) { - if (p2) { - (currentheader[headerlines] + (p2 - s))[1] = '\n'; - (currentheader[headerlines] + (p2 - s))[2] = 0; - } else { - currentheader[headerlines][l] = '\r'; - currentheader[headerlines][l + 1] = '\n'; - currentheader[headerlines][l + 2] = 0; - } - } - headerlines++; - headermade = 1; - } - } - } else { - if (headerfirstline) - free(headerfirstline); - headerfirstline = malloc(l + 3); - if (headerfirstline) { - strcpy(headerfirstline, s); - if (!p3) { - if (p2) { - (headerfirstline + (p2 - s))[1] = '\n'; - (headerfirstline + (p2 - s))[2] = 0; - } else { - headerfirstline[l] = '\r'; - headerfirstline[l + 1] = '\n'; - headerfirstline[l + 2] = 0; - } - } - } - headermade = 1; - } -} - -void fhttpd_flush(void) -{ -} - -PHPAPI void php_fhttpd_puts(char *s) -{ - putlinetoresponse(response, s); -} - -PHPAPI void php_fhttpd_putc(char c) -{ - writetoresponse(response, &c, 1); -} - -PHPAPI int php_fhttpd_write(char *a, int n) -{ - return writetoresponse(response, a, n); -} -#endif -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/sapi/isapi/Makefile.in b/sapi/isapi/Makefile.in deleted file mode 100644 index 34d4bdc15c..0000000000 --- a/sapi/isapi/Makefile.in +++ /dev/null @@ -1,5 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = php4isapi.c - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/isapi/PWS-php4.reg b/sapi/isapi/PWS-php4.reg deleted file mode 100644 index 47804a946a..0000000000 --- a/sapi/isapi/PWS-php4.reg +++ /dev/null @@ -1,5 +0,0 @@ -REGEDIT4 - -[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map] -".php"="[PUT PATH HERE]\\php4isapi.dll" - diff --git a/sapi/isapi/config.m4 b/sapi/isapi/config.m4 deleted file mode 100644 index 116881d003..0000000000 --- a/sapi/isapi/config.m4 +++ /dev/null @@ -1,26 +0,0 @@ -dnl ## $Id$ -*- sh -*- - -RESULT=no -AC_MSG_CHECKING(for Zeus ISAPI support) -AC_ARG_WITH(zeus, -[ --with-zeus=DIR Build PHP as an ISAPI module for use with Zeus.], -[ - if test "$withval" = "yes"; then - ZEUSPATH=/usr/local/zeus # the default - else - ZEUSPATH=$withval - fi - test -f "$ZEUSPATH/web/include/httpext.h" || AC_MSG_ERROR(Unable to find httpext.h in $ZEUSPATH/web/include) - PHP_BUILD_THREAD_SAFE - AC_DEFINE(WITH_ZEUS,1,[ ]) - AC_ADD_INCLUDE($ZEUSPATH/web/include) - PHP_SAPI=isapi - PHP_BUILD_SHARED - INSTALL_IT="\$(SHELL) \$(srcdir)/install-sh -m 0755 $SAPI_SHARED $ZEUSPATH/web/bin/" - RESULT=yes -]) -AC_MSG_RESULT($RESULT) - -dnl ## Local Variables: -dnl ## tab-width: 4 -dnl ## End: diff --git a/sapi/isapi/php.sym b/sapi/isapi/php.sym deleted file mode 100644 index 34b50b851c..0000000000 --- a/sapi/isapi/php.sym +++ /dev/null @@ -1,5 +0,0 @@ -GetFilterVersion -HttpFilterProc -GetExtensionVersion -HttpExtensionProc -ZSLMain diff --git a/sapi/isapi/php4isapi.c b/sapi/isapi/php4isapi.c deleted file mode 100644 index 9cd4084caa..0000000000 --- a/sapi/isapi/php4isapi.c +++ /dev/null @@ -1,649 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Zeev Suraski <zeev@zend.com> | - | Zeus Support: Ben Mansell <ben@zeus.com> | - +----------------------------------------------------------------------+ - */ - -#ifdef PHP_WIN32 -# include <windows.h> -# include <process.h> -# define SEPARATOR '\\' -#else -# define __try -# define __except(val) -# define __declspec(foo) -# define SEPARATOR '/' -#endif - -#include <httpext.h> -#include <httpfilt.h> -#include <httpext.h> -#include "php.h" -#include "php_main.h" -#include "SAPI.h" -#include "php_globals.h" -#include "ext/standard/info.h" -#include "php_variables.h" -#include "php_ini.h" - -#ifdef WITH_ZEUS -# include "httpext.h" -# include <errno.h> -# define GetLastError() errno -#endif - -#define MAX_STATUS_LENGTH sizeof("xxxx LONGEST STATUS DESCRIPTION") -#define ISAPI_SERVER_VAR_BUF_SIZE 1024 -#define ISAPI_POST_DATA_BUF 1024 - -static zend_bool bFilterLoaded=0; -static zend_bool bTerminateThreadsOnError=0; - -static char *isapi_server_variables[] = { - "ALL_HTTP", - "APPL_MD_PATH", - "APPL_PHYSICAL_PATH", - "AUTH_PASSWORD", - "AUTH_TYPE", - "AUTH_USER", - "CERT_COOKIE", - "CERT_FLAGS", - "CERT_ISSUER", - "CERT_KEYSIZE", - "CERT_SECRETKEYSIZE", - "CERT_SERIALNUMBER", - "CERT_SERVER_ISSUER", - "CERT_SERVER_SUBJECT", - "CERT_SUBJECT", - "CONTENT_LENGTH", - "CONTENT_TYPE", - "LOGON_USER", - "HTTP_COOKIE", - "HTTPS", - "HTTPS_KEYSIZE", - "HTTPS_SECRETKEYSIZE", - "HTTPS_SERVER_ISSUER", - "HTTPS_SERVER_SUBJECT", - "INSTANCE_ID", - "INSTANCE_META_PATH", - "PATH_INFO", - "PATH_TRANSLATED", - "QUERY_STRING", - "REMOTE_ADDR", - "REMOTE_HOST", - "REMOTE_USER", - "REQUEST_METHOD", - "SCRIPT_NAME", - "SERVER_NAME", - "SERVER_PORT", - "SERVER_PORT_SECURE", - "SERVER_PROTOCOL", - "SERVER_SOFTWARE", - "URL", - NULL -}; - - -static void php_info_isapi(ZEND_MODULE_INFO_FUNC_ARGS) -{ - char **p = isapi_server_variables; - char variable_buf[ISAPI_SERVER_VAR_BUF_SIZE]; - DWORD variable_len; - LPEXTENSION_CONTROL_BLOCK lpECB; - SLS_FETCH(); - - lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context); - - php_info_print_table_start(); - php_info_print_table_header(2, "Server Variable", "Value"); - while (*p) { - variable_len = ISAPI_SERVER_VAR_BUF_SIZE; - if (lpECB->GetServerVariable(lpECB->ConnID, *p, variable_buf, &variable_len) - && variable_buf[0]) { - php_info_print_table_row(2, *p, variable_buf); - } else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { - char *tmp_variable_buf; - - tmp_variable_buf = (char *) emalloc(variable_len); - if (lpECB->GetServerVariable(lpECB->ConnID, *p, tmp_variable_buf, &variable_len) - && variable_buf[0]) { - php_info_print_table_row(2, *p, tmp_variable_buf); - } - efree(tmp_variable_buf); - } - p++; - } - php_info_print_table_end(); -} - - -static zend_module_entry php_isapi_module = { - "ISAPI", - NULL, - NULL, - NULL, - NULL, - NULL, - php_info_isapi, - STANDARD_MODULE_PROPERTIES -}; - - -static int sapi_isapi_ub_write(const char *str, uint str_length) -{ - DWORD num_bytes = str_length; - LPEXTENSION_CONTROL_BLOCK ecb; - SLS_FETCH(); - - ecb = (LPEXTENSION_CONTROL_BLOCK) SG(server_context); - if (ecb->WriteClient(ecb->ConnID, (char *) str, &num_bytes, HSE_IO_SYNC ) == FALSE) { - zend_bailout(); - } - return num_bytes; -} - - -static int sapi_isapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC) -{ - return SAPI_HEADER_ADD; -} - - - -static void accumulate_header_length(sapi_header_struct *sapi_header, uint *total_length) -{ - *total_length += sapi_header->header_len+2; -} - - -static void concat_header(sapi_header_struct *sapi_header, char **combined_headers_ptr) -{ - memcpy(*combined_headers_ptr, sapi_header->header, sapi_header->header_len); - *combined_headers_ptr += sapi_header->header_len; - **combined_headers_ptr = '\r'; - (*combined_headers_ptr)++; - **combined_headers_ptr = '\n'; - (*combined_headers_ptr)++; -} - - -static int sapi_isapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ - uint total_length = 2; /* account for the trailing \r\n */ - char *combined_headers, *combined_headers_ptr; - LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context); - HSE_SEND_HEADER_EX_INFO header_info; - char status_buf[MAX_STATUS_LENGTH]; - sapi_header_struct default_content_type; - PLS_FETCH(); - - /* Obtain headers length */ - if (SG(sapi_headers).send_default_content_type) { - sapi_get_default_content_type_header(&default_content_type SLS_CC); - accumulate_header_length(&default_content_type, (void *) &total_length); - } - zend_llist_apply_with_argument(&SG(sapi_headers).headers, (void (*)(void *, void *)) accumulate_header_length, (void *) &total_length); - - /* Generate headers */ - combined_headers = (char *) emalloc(total_length+1); - combined_headers_ptr = combined_headers; - if (SG(sapi_headers).send_default_content_type) { - concat_header(&default_content_type, (void *) &combined_headers_ptr); - sapi_free_header(&default_content_type); /* we no longer need it */ - } - zend_llist_apply_with_argument(&SG(sapi_headers).headers, (void (*)(void *, void *)) concat_header, (void *) &combined_headers_ptr); - *combined_headers_ptr++ = '\r'; - *combined_headers_ptr++ = '\n'; - *combined_headers_ptr = 0; - - switch (SG(sapi_headers).http_response_code) { - case 200: - header_info.pszStatus = "200 OK"; - break; - case 302: - header_info.pszStatus = "302 Moved Temporarily"; - break; - case 401: - header_info.pszStatus = "401 Authorization Required"; - break; - default: - snprintf(status_buf, MAX_STATUS_LENGTH, "%d Undescribed", SG(sapi_headers).http_response_code); - header_info.pszStatus = status_buf; - break; - } - header_info.cchStatus = strlen(header_info.pszStatus); - header_info.pszHeader = combined_headers; - header_info.cchHeader = total_length; - lpECB->dwHttpStatusCode = SG(sapi_headers).http_response_code; - - lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &header_info, NULL, NULL); - - efree(combined_headers); - if (SG(sapi_headers).http_status_line) { - efree(SG(sapi_headers).http_status_line); - } - return SAPI_HEADER_SENT_SUCCESSFULLY; -} - - -static int php_isapi_startup(sapi_module_struct *sapi_module) -{ - if (php_module_startup(sapi_module)==FAILURE - || zend_startup_module(&php_isapi_module)==FAILURE) { - return FAILURE; - } else { - bTerminateThreadsOnError = (zend_bool) INI_INT("isapi.terminate_threads_on_error"); - return SUCCESS; - } -} - - - -static int sapi_isapi_read_post(char *buffer, uint count_bytes SLS_DC) -{ - LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context); - DWORD read_from_buf=0; - DWORD read_from_input=0; - DWORD total_read=0; - - if ((DWORD) SG(read_post_bytes) < lpECB->cbAvailable) { - read_from_buf = MIN(lpECB->cbAvailable-SG(read_post_bytes), count_bytes); - memcpy(buffer, lpECB->lpbData+SG(read_post_bytes), read_from_buf); - total_read += read_from_buf; - } - if (read_from_buf<count_bytes - && (SG(read_post_bytes)+read_from_buf) < lpECB->cbTotalBytes) { - DWORD cbRead=0, cbSize; - - read_from_input = MIN(count_bytes-read_from_buf, lpECB->cbTotalBytes-SG(read_post_bytes)-read_from_buf); - while (cbRead < read_from_input) { - cbSize = read_from_input - cbRead; - if (!lpECB->ReadClient(lpECB->ConnID, buffer+read_from_buf+cbRead, &cbSize) || cbSize==0) { - break; - } - cbRead += cbSize; - } - total_read += cbRead; - } - return total_read; -} - - -static char *sapi_isapi_read_cookies(SLS_D) -{ - LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context); - char variable_buf[ISAPI_SERVER_VAR_BUF_SIZE]; - DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE; - - if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_COOKIE", variable_buf, &variable_len)) { - return estrndup(variable_buf, variable_len); - } else if (GetLastError()==ERROR_INSUFFICIENT_BUFFER) { - char *tmp_variable_buf = (char *) emalloc(variable_len+1); - - if (lpECB->GetServerVariable(lpECB->ConnID, "HTTP_COOKIE", tmp_variable_buf, &variable_len)) { - tmp_variable_buf[variable_len] = 0; - return tmp_variable_buf; - } else { - efree(tmp_variable_buf); - } - } - return NULL; -} - - -static void sapi_isapi_register_server_variables(zval *track_vars_array ELS_DC SLS_DC PLS_DC) -{ - char static_variable_buf[ISAPI_SERVER_VAR_BUF_SIZE]; - char *variable_buf; - DWORD variable_len = ISAPI_SERVER_VAR_BUF_SIZE; - char *variable; - char *strtok_buf = NULL; - LPEXTENSION_CONTROL_BLOCK lpECB; - char **p = isapi_server_variables; - - lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context); - - /* Register the standard ISAPI variables */ - while (*p) { - variable_len = ISAPI_SERVER_VAR_BUF_SIZE; - if (lpECB->GetServerVariable(lpECB->ConnID, *p, static_variable_buf, &variable_len) - && static_variable_buf[0]) { - php_register_variable(*p, static_variable_buf, track_vars_array ELS_CC PLS_CC); - } else if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { - variable_buf = (char *) emalloc(variable_len); - if (lpECB->GetServerVariable(lpECB->ConnID, *p, variable_buf, &variable_len) - && variable_buf[0]) { - php_register_variable(*p, variable_buf, track_vars_array ELS_CC PLS_CC); - } - efree(variable_buf); - } - p++; - } - - /* PHP_SELF support */ -#ifdef WITH_ZEUS - if (lpECB->GetServerVariable(lpECB->ConnID, "PATH_INFO", static_variable_buf, &variable_len) -#else - if (lpECB->GetServerVariable(lpECB->ConnID, "SCRIPT_NAME", static_variable_buf, &variable_len) -#endif - && static_variable_buf[0]) { - php_register_variable("PHP_SELF", static_variable_buf, track_vars_array ELS_CC PLS_CC); - } - - /* Register the internal bits of ALL_HTTP */ - - variable_len = ISAPI_SERVER_VAR_BUF_SIZE; - - if (lpECB->GetServerVariable(lpECB->ConnID, "ALL_HTTP", static_variable_buf, &variable_len)) { - variable_buf = static_variable_buf; - } else { - if (GetLastError()==ERROR_INSUFFICIENT_BUFFER) { - variable_buf = (char *) emalloc(variable_len); - if (!lpECB->GetServerVariable(lpECB->ConnID, "ALL_HTTP", variable_buf, &variable_len)) { - efree(variable_buf); - return; - } - } else { - return; - } - } - variable = php_strtok_r(variable_buf, "\r\n", &strtok_buf); - while (variable) { - char *colon = strchr(variable, ':'); - - if (colon) { - char *value = colon+1; - - while (*value==' ') { - value++; - } - *colon = 0; - php_register_variable(variable, value, track_vars_array ELS_CC PLS_CC); - *colon = ':'; - } - variable = php_strtok_r(NULL, "\r\n", &strtok_buf); - } - if (variable_buf!=static_variable_buf) { - efree(variable_buf); - } -} - - -static sapi_module_struct sapi_module = { - "ISAPI", /* name */ - - php_isapi_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - NULL, /* activate */ - NULL, /* deactivate */ - - sapi_isapi_ub_write, /* unbuffered write */ - NULL, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, /* error handler */ - - sapi_isapi_header_handler, /* header handler */ - sapi_isapi_send_headers, /* send headers handler */ - NULL, /* send header handler */ - - sapi_isapi_read_post, /* read POST data */ - sapi_isapi_read_cookies, /* read Cookies */ - - sapi_isapi_register_server_variables, /* register server variables */ - NULL, /* Log message */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - - -BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pFilterVersion) -{ - bFilterLoaded = 1; - pFilterVersion->dwFilterVersion = HTTP_FILTER_REVISION; - strcpy(pFilterVersion->lpszFilterDesc, sapi_module.name); - pFilterVersion->dwFlags= (SF_NOTIFY_AUTHENTICATION | SF_NOTIFY_PREPROC_HEADERS); - return TRUE; -} - - -DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, DWORD notificationType, LPVOID pvNotification) -{ - SLS_FETCH(); - - switch (notificationType) { - case SF_NOTIFY_PREPROC_HEADERS: - SG(request_info).auth_user = NULL; - SG(request_info).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); - } - if (auth_password && auth_password[0]) { - SG(request_info).auth_password = estrdup(auth_password); - } - auth_user[0] = 0; - auth_password[0] = 0; - return SF_STATUS_REQ_HANDLED_NOTIFICATION; - } - break; - } - return SF_STATUS_REQ_NEXT_NOTIFICATION; -} - - -static void init_request_info(sapi_globals_struct *sapi_globals, LPEXTENSION_CONTROL_BLOCK lpECB) -{ - SG(request_info).request_method = lpECB->lpszMethod; - SG(request_info).query_string = lpECB->lpszQueryString; - SG(request_info).path_translated = lpECB->lpszPathTranslated; - SG(request_info).request_uri = lpECB->lpszPathInfo; - SG(request_info).content_type = lpECB->lpszContentType; - SG(request_info).content_length = lpECB->cbTotalBytes; - { - char *path_end = strrchr(SG(request_info).path_translated, SEPARATOR); - - if (path_end) { - *path_end = 0; - V_CHDIR(SG(request_info).path_translated); - *path_end = SEPARATOR; - } - } - if (!bFilterLoaded) { /* we don't have valid ISAPI Filter information */ - SG(request_info).auth_user = SG(request_info).auth_password = NULL; - } -} - - -static void php_isapi_report_exception(char *message, int message_len SLS_DC) -{ - if (!SG(headers_sent)) { - HSE_SEND_HEADER_EX_INFO header_info; - LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context); - - header_info.pszStatus = "500 Internal Server Error"; - header_info.cchStatus = strlen(header_info.pszStatus); - header_info.pszHeader = "Content-Type: text/html\r\n\r\n"; - header_info.cchHeader = strlen(header_info.pszHeader); - - lpECB->dwHttpStatusCode = 500; - lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &header_info, NULL, NULL); - SG(headers_sent)=1; - } - sapi_isapi_ub_write(message, message_len); -} - - -BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer) -{ - pVer->dwExtensionVersion = HSE_VERSION; -#ifdef WITH_ZEUS - strncpy( pVer->lpszExtensionDesc, sapi_module.name, HSE_MAX_EXT_DLL_NAME_LEN); -#else - lstrcpyn(pVer->lpszExtensionDesc, sapi_module.name, HSE_MAX_EXT_DLL_NAME_LEN); -#endif - return TRUE; -} - - -static void my_endthread() -{ -#ifdef PHP_WIN32 - if (bTerminateThreadsOnError) { - _endthread(); - } -#endif -} - -#ifdef PHP_WIN32 -// ___except can only call a function, so we have to do this -// to retrieve the pointer. -BOOL exceptionhandler(LPEXCEPTION_POINTERS *e,LPEXCEPTION_POINTERS ep) -{ - *e=ep; - return TRUE; -} -#endif - -DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK lpECB) -{ - zend_file_handle file_handle; - zend_bool stack_overflown=0; - SLS_FETCH(); - CLS_FETCH(); - ELS_FETCH(); - PLS_FETCH(); -#ifdef PHP_WIN32 - LPEXCEPTION_POINTERS e; -#endif - - if (setjmp(EG(bailout))!=0) { - php_request_shutdown(NULL); - return HSE_STATUS_ERROR; - } - - __try { - init_request_info(sapi_globals, lpECB); - SG(server_context) = lpECB; - - file_handle.filename = sapi_globals->request_info.path_translated; - file_handle.free_filename = 0; - file_handle.type = ZEND_HANDLE_FILENAME; - - php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC); - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - if (SG(request_info).cookie_data) { - efree(SG(request_info).cookie_data); - } -#ifdef PHP_WIN32 - } __except(exceptionhandler(&e,GetExceptionInformation())) { -#else - } __except(EXCEPTION_EXECUTE_HANDLER) { -#endif -#ifdef PHP_WIN32 - char buf[1024]; - if (_exception_code()==EXCEPTION_STACK_OVERFLOW) { - LPBYTE lpPage; - static SYSTEM_INFO si; - static MEMORY_BASIC_INFORMATION mi; - static DWORD dwOldProtect; - - GetSystemInfo(&si); - - /* Get page ESP is pointing to */ - _asm mov lpPage, esp; - - /* Get stack allocation base */ - VirtualQuery(lpPage, &mi, sizeof(mi)); - - /* Go to the page below the current page */ - lpPage = (LPBYTE) (mi.BaseAddress) - si.dwPageSize; - - /* Free pages below current page */ - if (!VirtualFree(mi.AllocationBase, (LPBYTE)lpPage - (LPBYTE) mi.AllocationBase, MEM_DECOMMIT)) { - _endthread(); - } - - /* Restore the guard page */ - if (!VirtualProtect(lpPage, si.dwPageSize, PAGE_GUARD | PAGE_READWRITE, &dwOldProtect)) { - _endthread(); - } - - CG(unclean_shutdown)=1; - _snprintf(buf,sizeof(buf)-1,"PHP has encountered a Stack overflow"); - php_isapi_report_exception(buf, strlen(buf) SLS_CC); - } else if (_exception_code()==EXCEPTION_ACCESS_VIOLATION) { - _snprintf(buf,sizeof(buf)-1,"PHP has encountered an Access Violation at %p",e->ExceptionRecord->ExceptionAddress); - php_isapi_report_exception(buf, strlen(buf) SLS_CC); - my_endthread(); - } else { - _snprintf(buf,sizeof(buf)-1,"PHP has encountered an Unhandled Exception Code %d at %p",e->ExceptionRecord->ExceptionCode , e->ExceptionRecord->ExceptionAddress); - php_isapi_report_exception(buf, strlen(buf) SLS_CC); - my_endthread(); - } -#endif - } - __try { - php_request_shutdown(NULL); - } __except(EXCEPTION_EXECUTE_HANDLER) { - my_endthread(); - } - - return HSE_STATUS_SUCCESS; -} - - - -__declspec(dllexport) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) -{ - switch (fdwReason) { - case DLL_PROCESS_ATTACH: - tsrm_startup(1, 1, 0); - sapi_startup(&sapi_module); - if (sapi_module.startup) { - sapi_module.startup(&sapi_module); - } - break; - case DLL_THREAD_ATTACH: - break; - case DLL_THREAD_DETACH: - ts_free_thread(); - break; - case DLL_PROCESS_DETACH: - if (sapi_module.shutdown) { - sapi_module.shutdown(&sapi_module); - } - tsrm_shutdown(); - break; - } - return TRUE; -} - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - */ diff --git a/sapi/isapi/php4isapi.def b/sapi/isapi/php4isapi.def deleted file mode 100644 index 596023ef55..0000000000 --- a/sapi/isapi/php4isapi.def +++ /dev/null @@ -1,5 +0,0 @@ -EXPORTS -HttpFilterProc -GetFilterVersion -HttpExtensionProc -GetExtensionVersion diff --git a/sapi/isapi/php4isapi.dsp b/sapi/isapi/php4isapi.dsp deleted file mode 100644 index 1d65f26a55..0000000000 --- a/sapi/isapi/php4isapi.dsp +++ /dev/null @@ -1,136 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php4isapi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php4isapi - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php4isapi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php4isapi.mak" CFG="php4isapi - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php4isapi - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php4isapi - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php4isapi - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php4isapi - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP4ISAPI_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\win32" /I "..\..\Zend" /I "..\.." /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP4ISAPI_EXPORTS" /D "COMPILE_LIBZEND" /D ZEND_DEBUG=1 /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts_debug.lib /nologo /dll /debug /machine:I386 /nodefaultlib:"libcmt" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "php4isapi - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PHP4ISAPI_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP4ISAPI_EXPORTS" /D ZEND_DEBUG=0 /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /libpath:"..\..\Release_TS"
-
-!ELSEIF "$(CFG)" == "php4isapi - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php4isapi___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php4isapi___Win32_Release_TS_inline"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP4ISAPI_EXPORTS" /D "MSVC5" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /FR /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "...\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "PHP4ISAPI_EXPORTS" /D ZEND_DEBUG=0 /D "MSVC5" /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "ZEND_WIN32_FORCE_INLINE" /D "WIN32" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /libpath:"..\..\Release_TS"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib wsock32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php4ts.lib /nologo /dll /machine:I386 /libpath:"..\..\Release_TS_inline"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php4isapi - Win32 Debug_TS"
-# Name "php4isapi - Win32 Release_TS"
-# Name "php4isapi - Win32 Release_TS_inline"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\php4isapi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\php4isapi.def
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/nsapi/Makefile.in b/sapi/nsapi/Makefile.in deleted file mode 100644 index 8299911313..0000000000 --- a/sapi/nsapi/Makefile.in +++ /dev/null @@ -1,5 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = nsapi.c - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/nsapi/config.m4 b/sapi/nsapi/config.m4 deleted file mode 100644 index 140f0767ee..0000000000 --- a/sapi/nsapi/config.m4 +++ /dev/null @@ -1,37 +0,0 @@ -dnl ## $Id$ -*- sh -*- - -AC_MSG_CHECKING(for NSAPI support) -AC_ARG_WITH(nsapi, -[ --with-nsapi=DIR Specify path to the installed Netscape],[ - PHP_NSAPI=$withval -],[ - PHP_NSAPI=no -]) -AC_MSG_RESULT($PHP_NSAPI) - -if test "$PHP_NSAPI" != "no"; then - if test ! -d $PHP_NSAPI/bin ; then - AC_MSG_ERROR(Please specify the path to the root of your Netscape server using --with-nsapi=DIR) - fi - AC_MSG_CHECKING(for NSAPI include files) - if test -d $PHP_NSAPI/include ; then - NSAPI_INCLUDE=$PHP_NSAPI/include - AC_MSG_RESULT(Netscape-Enterprise/3.x style) - elif test -d $PHP_NSAPI/plugins/include ; then - NSAPI_INCLUDE=$PHP_NSAPI/plugins/include - AC_MSG_RESULT(iPlanet/4.x style) - else - AC_MSG_ERROR(Please check you have nsapi.h in either DIR/include or DIR/plugins/include) - fi - AC_ADD_INCLUDE($NSAPI_INCLUDE) - PHP_BUILD_THREAD_SAFE - AC_DEFINE(HAVE_NSAPI,1,[Whether you have a Netscape Server]) - PHP_SAPI=nsapi - PHP_BUILD_SHARED - INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $PHP_NSAPI/bin/" -fi - - -dnl ## Local Variables: -dnl ## tab-width: 4 -dnl ## End: diff --git a/sapi/nsapi/nsapi-readme.txt b/sapi/nsapi/nsapi-readme.txt deleted file mode 100644 index 2862a44e02..0000000000 --- a/sapi/nsapi/nsapi-readme.txt +++ /dev/null @@ -1,65 +0,0 @@ -Configuration of your Netscape or iPlanet Web Server for PHP4 -------------------------------------------------------------- - -These instructions are targetted at Netscape Enterprise Web Server -and SUN/Netscape Alliance iPlanet Web Server. On other web servers -your milage may vary. - -Firstly you may need to add some paths to the LD_LIBRARY_PATH -environment for netscape to find all the shared libs. This is -best done in the start script for your netscape server. -Windows users can probably skip this step. The start -script is located in: -<path-to-netscape-server>/https-servername/start - -netscape config files are located in: -<path-to-netscape-server>/https-servername/config - -add the following line to mime.types - -type=magnus-internal/x-httpd-php exts=php - - -Add the following to obj.conf, shlib will vary depending on your OS, for unix it -will be something like "<path-to-netscape-server>/bin/libphp4.so". - -#note place following two lines after mime types init! -Init fn="load-modules" funcs="php4_init,php4_close,php4_execute,php4_auth_trans" shlib="/php4/nsapiPHP4.dll" -Init fn=php4_init errorString="Failed to initialize PHP!" - -<Object name="default"> -. -. -. -.#NOTE this next line should happen after all 'ObjectType' and before all 'AddLog' lines -Service fn="php4_execute" type="magnus-internal/x-httpd-php" -. -. -</Object> - - -<Object name="x-httpd-php"> -ObjectType fn="force-type" type="magnus-internal/x-httpd-php" -Service fn=php4_execute -</Object> - - -Authentication configuration - -PHP authentication cannot be used with any other authentication. ALL AUTHENTICATION IS -PASSED TO YOUR PHP SCRIPT. To configure PHP Authentication for the entire server, add -the following line: - -<Object name="default"> -AuthTrans fn=php4_auth_trans -. -. -. -. -</Object> - -To use PHP Authentication on a single directory, add the following: - -<Object ppath="d:\path\to\authenticated\dir\*"> -AuthTrans fn=php4_auth_trans -</Object> diff --git a/sapi/nsapi/nsapi.c b/sapi/nsapi/nsapi.c deleted file mode 100644 index 8f911f1883..0000000000 --- a/sapi/nsapi/nsapi.c +++ /dev/null @@ -1,583 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Jayakumar Muthukumarasamy <jk@kasenna.com> | - +----------------------------------------------------------------------+ -*/ - -/* - * PHP includes - */ -#define NSAPI 1 - -#include "php.h" -#include "php_variables.h" -#include "ext/standard/info.h" -#include "php_ini.h" -#include "php_globals.h" -#include "SAPI.h" -#include "php_main.h" -#include "php_version.h" -#include "TSRM.h" -#include "ext/standard/php_standard.h" - -/* - * If neither XP_UNIX not XP_WIN32 is defined, try to guess which one. - * Ideally, this should be done by the configure script. - */ -#if !defined(XP_UNIX) && !defined(XP_WIN32) - #if defined(WIN32) - #define XP_WIN32 - #else - #define XP_UNIX - #endif -#endif - -/* - * NSAPI includes - */ -#include "nsapi.h" -#include "base/pblock.h" -#include "base/session.h" -#include "frame/req.h" -#include "frame/protocol.h" /* protocol_start_response */ -#include "base/util.h" /* is_mozilla, getline */ -#include "frame/log.h" /* log_error */ - -/* - * Timeout for net_read(). This should probably go into php.ini - */ -#define NSAPI_READ_TIMEOUT 60 /* 60 seconds */ - -#define NSLS_D struct nsapi_request_context *request_context -#define NSLS_DC , NSLS_D -#define NSLS_C request_context -#define NSLS_CC , NSLS_C -#define NSG(v) (request_context->v) - -/* - * ZTS needs to be defined for NSAPI to work - */ -#if !defined(ZTS) - #error "NSAPI module needs ZTS to be defined" -#endif - -/* - * Structure to encapsulate the NSAPI request in SAPI - */ -typedef struct nsapi_request_context { - pblock *pb; - Session *sn; - Request *rq; -} nsapi_request_context; - -/* - * Mappings between NSAPI names and environment variables. This - * mapping was obtained from the sample programs at the iplanet - * website. - */ -typedef struct nsapi_equiv { - const char *env_var; - const char *nsapi_eq; -} nsapi_equiv; - -static nsapi_equiv nsapi_headers[] = { - { "CONTENT_LENGTH", "content-length" }, - { "CONTENT_TYPE", "content-type" }, - { "HTTP_ACCEPT", "accept" }, - { "HTTP_ACCEPT_ENCODING", "accept-encoding" }, - { "HTTP_ACCEPT_LANGUAGE", "accept-language" }, - { "HTTP_AUTHORIZATION", "authorization" }, - { "HTTP_COOKIE", "cookie" }, - { "HTTP_IF_MODIFIED_SINCE", "if-modified-since" }, - { "HTTP_REFERER", "referer" }, - { "HTTP_USER_AGENT", "user-agent" }, - { "HTTP_USER_DEFINED", "user-defined" } -}; -static size_t nsapi_headers_size = sizeof(nsapi_headers)/sizeof(nsapi_headers[0]); - -static nsapi_equiv nsapi_reqpb[] = { - { "QUERY_STRING", "query" }, - { "REQUEST_LINE", "clf-request" }, - { "REQUEST_METHOD", "method" }, - { "SCRIPT_NAME", "uri" }, - { "SCRIPT_PROTOCOL", "protocol" } -}; -static size_t nsapi_reqpb_size = sizeof(nsapi_reqpb)/sizeof(nsapi_reqpb[0]); - -static nsapi_equiv nsapi_vars[] = { - { "AUTH_TYPE", "auth-type" }, - { "PATH_INFO", "path-info" }, - { "REMOTE_USER", "auth-user" } -}; -static size_t nsapi_vars_size = sizeof(nsapi_vars)/sizeof(nsapi_vars[0]); - -static nsapi_equiv nsapi_client[] = { - { "HTTPS_KEYSIZE", "keysize" }, - { "HTTPS_SECRETSIZE", "secret-keysize" }, - { "REMOTE_ADDR", "ip" } -}; -static size_t nsapi_client_size = sizeof(nsapi_client)/sizeof(nsapi_client[0]); - -static int -sapi_nsapi_ub_write(const char *str, unsigned int str_length) -{ - int retval; - nsapi_request_context *rc; - - SLS_FETCH(); - rc = (nsapi_request_context *)SG(server_context); - retval = net_write(rc->sn->csd, (char *)str, str_length); - if (retval == IO_ERROR /*-1*/ || retval == IO_EOF /*0*/) - return -1; - else - return retval; -} - -static int -sapi_nsapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC) -{ - char *header_name, *header_content, *p; - nsapi_request_context *rc = (nsapi_request_context *)SG(server_context); - - header_name = sapi_header->header; - header_content = p = strchr(header_name, ':'); - if (p == NULL) { - return 0; - } - - *p = 0; - do { - header_content++; - } while (*header_content==' '); - - if (!strcasecmp(header_name, "Content-Type")) { - param_free(pblock_remove("content-type", rc->rq->srvhdrs)); - pblock_nvinsert("content-type", header_content, rc->rq->srvhdrs); - } else if (!strcasecmp(header_name, "Set-Cookie")) { - pblock_nvinsert("set-cookie", header_content, rc->rq->srvhdrs); - } else { - pblock_nvinsert(header_name, header_content, rc->rq->srvhdrs); - } - - *p = ':'; /* restore '*p' */ - - efree(sapi_header->header); - - return 0; /* don't use the default SAPI mechanism, NSAPI duplicates this functionality */ -} - -static int -sapi_nsapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ - int retval; - nsapi_request_context *rc = (nsapi_request_context *)SG(server_context); - - /* - * We could probably just do this in the header_handler. But, I - * don't know what the implication of doing it there is. - */ - if (SG(sapi_headers).send_default_content_type) { - param_free(pblock_remove("content-type", rc->rq->srvhdrs)); - pblock_nvinsert("content-type", "text/html", rc->rq->srvhdrs); - } - - protocol_status(rc->sn, rc->rq, SG(sapi_headers).http_response_code, NULL); - retval = protocol_start_response(rc->sn, rc->rq); - if (retval == REQ_PROCEED || retval == REQ_NOACTION) - return SAPI_HEADER_SENT_SUCCESSFULLY; - else - return SAPI_HEADER_SEND_FAILED; -} - -static int -sapi_nsapi_read_post(char *buffer, uint count_bytes SLS_DC) -{ - nsapi_request_context *rc = (nsapi_request_context *)SG(server_context); - char *read_ptr = buffer, *content_length_str = NULL; - uint bytes_read = 0; - int length, content_length = 0; - netbuf *nbuf = rc->sn->inbuf; - - /* - * Determine the content-length. This will tell us the limit we can read. - */ - content_length_str = pblock_findval("content-length", rc->rq->headers); - if (content_length_str != NULL) { - content_length = strtol(content_length_str, 0, 0); - } - - if (content_length <= 0) - return 0; - - /* - * Gobble any pending data in the netbuf. - */ - length = nbuf->cursize - nbuf->pos; - if (length > 0) { - memcpy(read_ptr, nbuf->inbuf + nbuf->pos, length); - bytes_read += length; - read_ptr += length; - content_length -= length; - } - - /* - * Read the remaining from the socket. - */ - while (content_length > 0 && bytes_read < count_bytes) { - int bytes_to_read = count_bytes - bytes_read; - if (content_length < bytes_to_read) - bytes_to_read = content_length; - - length = net_read(rc->sn->csd, read_ptr, bytes_to_read, NSAPI_READ_TIMEOUT); - if (length == IO_ERROR || length == IO_EOF) - break; - - bytes_read += length; - read_ptr += length; - content_length -= length; - } - - return bytes_read; -} - -static char * -sapi_nsapi_read_cookies(SLS_D) -{ - char *cookie_string; - nsapi_request_context *rc = (nsapi_request_context *)SG(server_context); - - cookie_string = pblock_findval("cookie", rc->rq->headers); - return cookie_string; -} - -static void -sapi_nsapi_register_server_variables(zval *track_vars_array ELS_DC SLS_DC PLS_DC) -{ - nsapi_request_context *rc = (nsapi_request_context *)SG(server_context); - size_t i; - char *value = NULL; - char buf[128]; - - *buf = 0; - for (i = 0; i < nsapi_reqpb_size; i++) { - if ((value = pblock_findval(nsapi_reqpb[i].nsapi_eq, rc->rq->reqpb)) == NULL) { - value = buf; - } - php_register_variable( (char *)nsapi_reqpb[i].env_var, value, track_vars_array ELS_CC PLS_CC ); - } - - for (i = 0; i < nsapi_headers_size; i++) { - if ((value = pblock_findval(nsapi_headers[i].nsapi_eq, rc->rq->headers)) == NULL) { - value = buf; - } - php_register_variable( (char *)nsapi_headers[i].env_var, value, track_vars_array ELS_CC PLS_CC ); - } - - for (i = 0; i < nsapi_vars_size; i++) { - if ((value = pblock_findval(nsapi_vars[i].nsapi_eq, rc->rq->vars)) == NULL) { - value = buf; - } - php_register_variable( (char *)nsapi_vars[i].env_var, value, track_vars_array ELS_CC PLS_CC ); - } - - for (i = 0; i < nsapi_client_size; i++) { - if ((value = pblock_findval(nsapi_client[i].nsapi_eq, rc->sn->client)) == NULL) { - value = buf; - } - php_register_variable( (char *)nsapi_client[i].env_var, value, track_vars_array ELS_CC PLS_CC ); - } - - /* - * Special PHP_SELF variable. - */ - value = pblock_findval( "uri", rc->rq->reqpb ); - if( value != NULL ) { - php_register_variable( "PHP_SELF", value, track_vars_array ELS_CC PLS_CC ); - } -} - -static sapi_module_struct sapi_module = { - "NSAPI", /* name */ - - php_module_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - NULL, /* activate */ - NULL, /* deactivate */ - - sapi_nsapi_ub_write, /* unbuffered write */ - NULL, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, /* error handler */ - - sapi_nsapi_header_handler, /* header handler */ - sapi_nsapi_send_headers, /* send headers handler */ - NULL, /* send header handler */ - - sapi_nsapi_read_post, /* read POST data */ - sapi_nsapi_read_cookies, /* read Cookies */ - - sapi_nsapi_register_server_variables, /* register server variables */ - NULL, /* Log message */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - -static char * -nsapi_strdup(char *str) -{ - if (str != NULL) - return strdup(str); - return NULL; -} - -static void -nsapi_free(void *addr) -{ - if (addr != NULL) - free(addr); -} - -/* - * Add symbols to the interpreter. - */ -static void -nsapi_add_string(const char *name, const char *buf) -{ - zval *pval; - ELS_FETCH(); - - if (buf == NULL) - buf = ""; - - MAKE_STD_ZVAL(pval); - pval->type = IS_STRING; - pval->value.str.len = strlen(buf); - pval->value.str.val = estrndup(buf, pval->value.str.len); - zend_hash_update(&EG(symbol_table), (char *)name, strlen(name) + 1, &pval, sizeof(zval *), NULL); -} - -static void -nsapi_hash_environment(NSLS_D SLS_DC) -{ - size_t i; - const char *remote_host = NULL, *server_url = NULL, *path_translated = NULL; - char *value = NULL, buf[128]; - - remote_host = session_dns(NSG(sn)); - server_url = http_uri2url("", ""); - path_translated = SG(request_info).path_translated; - - *buf = 0; - - for (i = 0; i < nsapi_headers_size; i++) { - if ((value = pblock_findval(nsapi_headers[i].nsapi_eq, NSG(rq)->headers)) == NULL) { - value = buf; - } - nsapi_add_string(nsapi_headers[i].env_var, value); - } - - for (i = 0; i < nsapi_reqpb_size; i++) { - if ((value = pblock_findval(nsapi_reqpb[i].nsapi_eq, NSG(rq)->reqpb)) == NULL) { - value = buf; - } - nsapi_add_string(nsapi_reqpb[i].env_var, value); - } - - for (i = 0; i < nsapi_vars_size; i++) { - if ((value = pblock_findval(nsapi_vars[i].nsapi_eq, NSG(rq)->vars)) == NULL) { - value = buf; - } - nsapi_add_string(nsapi_vars[i].env_var, value); - } - - for (i = 0; i < nsapi_client_size; i++) { - if ((value = pblock_findval(nsapi_client[i].nsapi_eq, NSG(sn)->client)) == NULL) { - value = buf; - } - nsapi_add_string(nsapi_client[i].env_var, value); - } - - sprintf(buf, "%d", conf_getglobals()->Vport); - nsapi_add_string("SERVER_PORT", buf); - - nsapi_add_string("HTTPS", (security_active ? "ON" : "OFF")); - nsapi_add_string("SERVER_NAME", server_hostname); - nsapi_add_string("REMOTE_HOST", remote_host); - nsapi_add_string("SERVER_URL", server_url); -/* nsapi_add_string("SERVER_SOFTWARE", MAGNUS_VERSION_STRING); */ - nsapi_add_string("PATH_TRANSLATED", path_translated); -} - -static void -nsapi_request_ctor(NSLS_D SLS_DC) -{ - char *query_string = pblock_findval("query", NSG(rq)->reqpb); - char *uri = pblock_findval("uri", NSG(rq)->reqpb); - char *path_info = pblock_findval("path-info", NSG(rq)->vars); - char *path_translated = NULL; - char *request_method = pblock_findval("method", NSG(rq)->reqpb); - char *content_type = pblock_findval("content-type", NSG(rq)->headers); - char *content_length = pblock_findval("content-length", NSG(rq)->headers); - - if (uri != NULL) - path_translated = request_translate_uri(uri, NSG(sn)); - -#if defined(NSAPI_DEBUG) - log_error(LOG_INFORM, "nsapi_request_ctor", NSG(sn), NSG(rq), - "query_string = %s, " - "uri = %s, " - "path_info = %s, " - "path_translated = %s, " - "request_method = %s, " - "content_type = %s, " - "content_length = %s", - query_string, - uri, - path_info, - path_translated, - request_method, - content_type, - content_length); -#endif - - SG(request_info).query_string = nsapi_strdup(query_string); - SG(request_info).request_uri = nsapi_strdup(path_info); - SG(request_info).request_method = nsapi_strdup(request_method); - SG(request_info).path_translated = nsapi_strdup(path_translated); - SG(request_info).content_type = nsapi_strdup(content_type); - SG(request_info).content_length = (content_length == NULL) ? 0 : strtoul(content_length, 0, 0); -} - -static void -nsapi_request_dtor(NSLS_D SLS_DC) -{ - nsapi_free(SG(request_info).query_string); - nsapi_free(SG(request_info).request_uri); - nsapi_free(SG(request_info).request_method); - nsapi_free(SG(request_info).path_translated); - nsapi_free(SG(request_info).content_type); -} - -int -nsapi_module_main(NSLS_D SLS_DC) -{ - int result; - zend_file_handle file_handle; - - CLS_FETCH(); - ELS_FETCH(); - PLS_FETCH(); - - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC) == FAILURE) { - return FAILURE; - } - - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.filename = SG(request_info).path_translated; - file_handle.free_filename = 0; - -#if defined(NSAPI_DEBUG) - log_error(LOG_INFORM, "nsapi_module_main", NSG(sn), NSG(rq), - "Parsing [%s]", SG(request_info).path_translated); -#endif - - result = php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC); - if (result == FAILURE) { - return FAILURE; - } - - nsapi_hash_environment(NSLS_C SLS_CC); - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - php_request_shutdown(NULL); - - return SUCCESS; -} - -void NSAPI_PUBLIC -php4_close(void *vparam) -{ - if (sapi_module.shutdown) { - sapi_module.shutdown(&sapi_module); - } - tsrm_shutdown(); -} - -int NSAPI_PUBLIC -php4_init(pblock *pb, Session *sn, Request *rq) -{ - php_core_globals *core_globals; - - tsrm_startup(1, 1, 0); - core_globals = ts_resource(core_globals_id); - - sapi_startup(&sapi_module); - sapi_module.startup(&sapi_module); - - log_error(LOG_INFORM, "php4_init", sn, rq, "Initialized PHP Module\n"); - return REQ_PROCEED; -} - -int NSAPI_PUBLIC -php4_execute(pblock *pb, Session *sn, Request *rq) -{ - int retval; - nsapi_request_context *request_context; - - SLS_FETCH(); - - request_context = (nsapi_request_context *)malloc(sizeof(nsapi_request_context)); - request_context->pb = pb; - request_context->sn = sn; - request_context->rq = rq; - - SG(server_context) = request_context; - - nsapi_request_ctor(NSLS_C SLS_CC); - retval = nsapi_module_main(NSLS_C SLS_CC); - nsapi_request_dtor(NSLS_C SLS_CC); - - free(request_context); - - return (retval == SUCCESS) ? REQ_PROCEED : REQ_EXIT; -} - -/********************************************************* -/ authentication -/ -/ we have to make a 'fake' authenticator for netscape so it -/ will pass authentication through to php, and allow us to -/ check authentication with our scripts. -/ -/ php4_auth_trans -/ main function called from netscape server to authenticate -/ a line in obj.conf: -/ funcs=php4_auth_trans shlib="path/to/this/phpnsapi.dll" -/ and: -/ <Object ppath="path/to/be/authenticated/by/php/*"> -/ AuthTrans fn="php4_auth_trans" -/*********************************************************/ -int NSAPI_PUBLIC -php4_auth_trans(pblock * pb, Session * sn, Request * rq) -{ - /*This is a DO NOTHING function that allows authentication information - to be passed through to PHP scripts.*/ - return REQ_PROCEED; -} diff --git a/sapi/nsapi/php4nsapi.dsp b/sapi/nsapi/php4nsapi.dsp deleted file mode 100644 index 7e4103f660..0000000000 --- a/sapi/nsapi/php4nsapi.dsp +++ /dev/null @@ -1,135 +0,0 @@ -# Microsoft Developer Studio Project File - Name="php4nsapi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=php4nsapi - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "php4nsapi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "php4nsapi.mak" CFG="php4nsapi - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "php4nsapi - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php4nsapi - Win32 Release_TS_inline" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "php4nsapi - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "php4nsapi - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php4nsapi___Win32_Release_TS"
-# PROP BASE Intermediate_Dir "php4nsapi___Win32_Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php4nsapi_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /D "XP_WIN32" /D ZEND_DEBUG=0 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "php4nsapi_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ns-httpd30.lib ZendTS.lib TSRM.lib php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /dll /machine:I386 /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Release_TS" /libpath:"..\..\TSRM\Release_TS" /libpath:"..\..\Zend\Release_TS"
-
-!ELSEIF "$(CFG)" == "php4nsapi - Win32 Release_TS_inline"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "php4nsapi___Win32_Release_TS_inline"
-# PROP BASE Intermediate_Dir "php4nsapi___Win32_Release_TS_inline"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS_inline"
-# PROP Intermediate_Dir "Release_TS_inline"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php4nsapi_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /D "XP_WIN32" /D ZEND_DEBUG=0 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "ZEND_WIN32_FORCE_INLINE" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "php4nsapi_EXPORTS" /D "WIN32" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 ns-httpd30.lib ZendTS.lib TSRM.lib php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /dll /machine:I386 /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Release_TS_inline" /libpath:"..\..\TSRM\Release_TS_inline" /libpath:"..\..\Zend\Release_TS_inline"
-
-!ELSEIF "$(CFG)" == "php4nsapi - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "php4nsapi___Win32_Debug_TS"
-# PROP BASE Intermediate_Dir "php4nsapi___Win32_Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "php4nsapi_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "..\..\..\php_build\nsapi30\include\\" /I "..\..\include" /I "..\..\win32" /I "..\..\Zend" /I "..\.." /I "..\..\..\bindlib_w32" /D "XP_WIN32" /D "_Debug_TS" /D ZEND_DEBUG=1 /D "ZTS" /D "ZEND_WIN32" /D "PHP_WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "php4nsapi_EXPORTS" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 ns-httpd30.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x62000000" /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\php_build\nsapi30\lib\\" /libpath:"..\..\Debug_TS" /libpath:"..\..\TSRM\Debug_TS" /libpath:"..\..\Zend\Debug_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "php4nsapi - Win32 Release_TS"
-# Name "php4nsapi - Win32 Release_TS_inline"
-# Name "php4nsapi - Win32 Debug_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\nsapi.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/sapi/phttpd/Makefile.in b/sapi/phttpd/Makefile.in deleted file mode 100644 index 3fa62790f1..0000000000 --- a/sapi/phttpd/Makefile.in +++ /dev/null @@ -1,5 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = phttpd.c - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/phttpd/README b/sapi/phttpd/README deleted file mode 100644 index 8799bb282d..0000000000 --- a/sapi/phttpd/README +++ /dev/null @@ -1,5 +0,0 @@ -phttpd sapi module. - -THIS IS BY NO MEANS COMPLETE NOR USABLE RIGHT NOW! - -thies@digicol.de 03.01.2000 diff --git a/sapi/phttpd/config.m4 b/sapi/phttpd/config.m4 deleted file mode 100644 index 10460b84e0..0000000000 --- a/sapi/phttpd/config.m4 +++ /dev/null @@ -1,24 +0,0 @@ -dnl ## $Id$ -*- sh -*- - -RESULT=no -AC_MSG_CHECKING(for PHTTPD support) -AC_ARG_WITH(phttpd, -[ --with-phttpd=DIR], -[ - if test ! -d $withval ; then - AC_MSG_ERROR(You did not specify a directory) - fi - PHP_BUILD_THREAD_SAFE - PHTTPD_DIR=$withval - AC_ADD_INCLUDE($PHTTPD_DIR/include) - AC_DEFINE(HAVE_PHTTPD,1,[Whether you have phttpd]) - PHP_SAPI=phttpd - PHP_BUILD_SHARED - INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $PHTTPD_DIR/modules/" - RESULT=yes -]) -AC_MSG_RESULT($RESULT) - -dnl ## Local Variables: -dnl ## tab-width: 4 -dnl ## End: diff --git a/sapi/phttpd/php.sym b/sapi/phttpd/php.sym deleted file mode 100644 index f10b883a99..0000000000 --- a/sapi/phttpd/php.sym +++ /dev/null @@ -1,4 +0,0 @@ -pm_init -pm_exit -pm_request - diff --git a/sapi/phttpd/php_phttpd.h b/sapi/phttpd/php_phttpd.h deleted file mode 100644 index 3847eb699f..0000000000 --- a/sapi/phttpd/php_phttpd.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Thies C. Arntzen <thies@digicol.de> | - +----------------------------------------------------------------------+ -*/ - -#ifndef PHP_PHTTPD_H -#define PHP_PHTTPD_H - -#include <phttpd.h> - -#endif diff --git a/sapi/phttpd/phttpd.c b/sapi/phttpd/phttpd.c deleted file mode 100644 index ee3fb977e6..0000000000 --- a/sapi/phttpd/phttpd.c +++ /dev/null @@ -1,318 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Thies C. Arntzen <thies@digicol.de> | - | Based on aolserver SAPI by Sascha Schumann <sascha@schumann.cx> | - +----------------------------------------------------------------------+ -*/ - -#include "php.h" -#include "SAPI.h" -#include "php_main.h" - -#ifdef HAVE_PHTTPD - -#include "ext/standard/info.h" - -#ifndef ZTS -#error PHTTPD module is only useable in thread-safe mode -#endif - -#include "php_phttpd.h" - -typedef struct { - struct connectioninfo *cip; - struct stat sb; -} phttpd_globals_struct; - -static int ph_globals_id; - -#define PHLS_D phttpd_globals_struct *ph_context -#define PHLS_DC , PHLS_D -#define PHLS_C ph_context -#define PHLS_CC , PHLS_C -#define PHG(v) (ph_context->v) -#define PHLS_FETCH() phttpd_globals_struct *ph_context = ts_resource(ph_globals_id) - -static int -php_phttpd_startup(sapi_module_struct *sapi_module) -{ -/* - if(php_module_startup(sapi_module) == FAILURE - || zend_startup_module(&php_aolserver_module) == FAILURE) { -*/ - fprintf(stderr,"***php_phttpd_startup\n"); - - if (php_module_startup(sapi_module)) { - return FAILURE; - } else { - return SUCCESS; - } -} - -static int -php_phttpd_sapi_ub_write(const char *str, uint str_length) -{ - int sent_bytes; - PHLS_FETCH(); - - sent_bytes = fd_write(PHG(cip)->fd,str,str_length); - - if (sent_bytes == -1) perror("fd_write\n"); - - return sent_bytes; -} - -static int -php_phttpd_sapi_header_handler(sapi_header_struct *sapi_header, sapi_headers_struct *sapi_headers SLS_DC) -{ - char *header_name, *header_content; - char *p; - PHLS_FETCH(); - - http_sendheaders(PHG(cip)->fd,PHG(cip), SG(sapi_headers).http_response_code, NULL); - - header_name = sapi_header->header; - header_content = p = strchr(header_name, ':'); - - if (p) { - *p = '\0'; - do { - header_content++; - } while (*header_content == ' '); - - fd_printf(PHG(cip)->fd,"%s: %s\n",header_name,header_content); - - *p = ':'; - } - - sapi_free_header(sapi_header); - - return 0; -} - -static int -php_phttpd_sapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ - PHLS_FETCH(); - - if (SG(sapi_headers).send_default_content_type) { - fd_printf(PHG(cip)->fd,"Content-Type: text/html\n"); - } - - fd_putc('\n', PHG(cip)->fd); - - return SAPI_HEADER_SENT_SUCCESSFULLY; -} - -static char * -php_phttpd_sapi_read_cookies(SLS_D) -{ - -/* - int i; - char *http_cookie = NULL; - NSLS_FETCH(); - - i = Ns_SetIFind(NSG(conn->headers), "cookie"); - if(i != -1) { - http_cookie = Ns_SetValue(NSG(conn->headers), i); - } - - return http_cookie; -*/ - fprintf(stderr,"***php_phttpd_sapi_read_cookies\n"); - - return 0; -} - -static int -php_phttpd_sapi_read_post(char *buf, uint count_bytes SLS_DC) -{ -/* - uint max_read; - uint total_read = 0; - NSLS_FETCH(); - - max_read = MIN(NSG(data_avail), count_bytes); - - total_read = Ns_ConnRead(NSG(conn), buf, max_read); - - if(total_read == NS_ERROR) { - total_read = -1; - } else { - NSG(data_avail) -= total_read; - } - - return total_read; -*/ - fprintf(stderr,"***php_phttpd_sapi_read_post\n"); - return 0; -} - -static sapi_module_struct sapi_module = { - "PHTTPD", - - php_phttpd_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - NULL, /* activate */ - NULL, /* deactivate */ - - php_phttpd_sapi_ub_write, /* unbuffered write */ - NULL, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, /* error handler */ - - php_phttpd_sapi_header_handler, /* header handler */ - php_phttpd_sapi_send_headers, /* send headers handler */ - NULL, /* send header handler */ - - php_phttpd_sapi_read_post, /* read POST data */ - php_phttpd_sapi_read_cookies, /* read Cookies */ - - NULL, /* register server variables */ - NULL, /* Log message */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - -static void -php_phttpd_request_ctor(PHLS_D SLS_DC) -{ - memset(&SG(request_info),0,sizeof(sapi_globals_struct)); /* pfusch! */ - - SG(request_info).query_string = PHG(cip)->hip->request; - SG(request_info).request_method = PHG(cip)->hip->method; - SG(request_info).path_translated = malloc(MAXPATHLEN+1); - if (url_expand(PHG(cip)->hip->url, SG(request_info).path_translated, MAXPATHLEN, &PHG(sb), NULL, NULL) == NULL) { - /* handle error */ - } - -#if 0 - char *server; - Ns_DString ds; - char *root; - int index; - char *tmp; - - server = Ns_ConnServer(NSG(conn)); - - Ns_DStringInit(&ds); - Ns_UrlToFile(&ds, server, NSG(conn->request->url)); - - /* path_translated is the absolute path to the file */ - SG(request_info).path_translated = strdup(Ns_DStringValue(&ds)); - Ns_DStringFree(&ds); - root = Ns_PageRoot(server); - SG(request_info).request_uri = SG(request_info).path_translated + strlen(root); - SG(request_info).content_length = Ns_ConnContentLength(NSG(conn)); - index = Ns_SetIFind(NSG(conn)->headers, "content-type"); - SG(request_info).content_type = index == -1 ? NULL : - Ns_SetValue(NSG(conn)->headers, index); - - tmp = Ns_ConnAuthUser(NSG(conn)); - if(tmp) { - tmp = estrdup(tmp); - } - SG(request_info).auth_user = tmp; - - tmp = Ns_ConnAuthPasswd(NSG(conn)); - if(tmp) { - tmp = estrdup(tmp); - } - SG(request_info).auth_password = tmp; - - NSG(data_avail) = SG(request_info).content_length; -#endif -} - -static void -php_phttpd_request_dtor(PHLS_D SLS_DC) -{ - free(SG(request_info).path_translated); -} - - -int php_doit(PHLS_D SLS_DC) -{ - struct stat sb; - zend_file_handle file_handle; - struct httpinfo *hip = PHG(cip)->hip; - - CLS_FETCH(); - ELS_FETCH(); - PLS_FETCH(); - - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC) == FAILURE) { - return -1; - } - - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.filename = SG(request_info).path_translated; - file_handle.free_filename = 0; - -/* - php_phttpd_hash_environment(PHLS_C CLS_CC ELS_CC PLS_CC SLS_CC); -*/ - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - php_request_shutdown(NULL); - - return SG(sapi_headers).http_response_code; -} - -int pm_init(const char **argv) -{ - tsrm_startup(1, 1, 0); - sapi_startup(&sapi_module); - sapi_module.startup(&sapi_module); - - ph_globals_id = ts_allocate_id(sizeof(phttpd_globals_struct), NULL, NULL); - - return 0; -} - -void pm_exit(void) -{ - fprintf(stderr,"***pm_exit\n"); -} - -int pm_request(struct connectioninfo *cip) -{ - struct httpinfo *hip = cip->hip; - int status; - PHLS_FETCH(); - SLS_FETCH(); - - if (strcasecmp(hip->method, "GET") == 0 || - strcasecmp(hip->method, "HEAD") == 0 || - strcasecmp(hip->method, "POST") == 0) { - PHG(cip) = cip; - - php_phttpd_request_ctor(PHLS_C SLS_CC); - status = php_doit(PHLS_C SLS_CC); - php_phttpd_request_dtor(PHLS_C SLS_CC); - - return status; - } else { - return -2; - } -} - -#endif diff --git a/sapi/roxen/Makefile.in b/sapi/roxen/Makefile.in deleted file mode 100644 index c49bf97ead..0000000000 --- a/sapi/roxen/Makefile.in +++ /dev/null @@ -1,5 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = roxen.c - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/roxen/README b/sapi/roxen/README deleted file mode 100644 index 2a3e4c7926..0000000000 --- a/sapi/roxen/README +++ /dev/null @@ -1,18 +0,0 @@ -Roxen PHP support. Early version. Don't expect to be able to get it to -work. Requires Pike 0.7.79 and Roxen 1.4. Anything less won't work. - -The module is now thread safe, in a couple of different modes. First -mode, the default, uses a process global PHP lock in the Roxen -module. This means that all PHP-requests are serialized (ie only one -script is executed at any one time). The second option is using ZTS -(Zend Thread Safe mode). Unless --enable-roxen-zts is specified, this -won't be used. - -This solution now works fine and is recommended. Multiple PHP4 -requests will be run in parallell. The maximum number of parallell -PHP4-execution is limited to the number of handle threads Roxen is -started with. - -- The Author, David Hedbor <neotron@php.net> - - diff --git a/sapi/roxen/TODO b/sapi/roxen/TODO deleted file mode 100644 index 4ba171accc..0000000000 --- a/sapi/roxen/TODO +++ /dev/null @@ -1,33 +0,0 @@ -BUGS: - -- fix backtraces -- exit in PHP exits Roxen -- POST newline added? -- Rewriting header handling so that more than one header with the same - name can be set (most importantly, cookies). -- Recursive mutex lock problem: - - And another error (when trying to include a class) - - Recursive mutex locks! - /Usr/local/pike/7.0.54/lib/modules/PHP4.so.Interpreter: - run("/home/www/www.tx.pl/news/test.php",mapping[3],modules/scripting/php4.pike.PHPScript(),modules/scripting/php4.pike.PHPScript.done) - modules/scripting/php4.pike:169: run() - base_server/roxen.pike:569: handler_thread(3). - - And after this every access to any php script (on other virtual sites - also) ends (of course there is no proper output) with this error: - - Php4.Interpreter->run: Tried to run a PHP-script from a PHP - callback!/usr/local/pike/7.0.54/lib/modules/PHP4.so.Interpreter: - run("/home/www/biall.com.pl/index.php3",mapping[2],modules/scripting/php4.pike.PHPScript(),modules/scripting/php4.pike.PHPScript.done) - modules/scripting/php4.pike:169: run() - base_server/roxen.pike:569: handler_thread(3). - - -ADDITIONS: - -- use th_farm -- change cwd in single threaded mode -- per-virtual-server configuration - diff --git a/sapi/roxen/config.m4 b/sapi/roxen/config.m4 deleted file mode 100644 index dfd4963da0..0000000000 --- a/sapi/roxen/config.m4 +++ /dev/null @@ -1,59 +0,0 @@ -dnl ## $Id$ -*- sh -*- - -RESULT=no -AC_MSG_CHECKING(for Roxen/Pike support) -AC_ARG_WITH(roxen, -[ --with-roxen=DIR Build PHP as a Pike module. DIR is the base Roxen - directory, normally /usr/local/roxen/server.], -[ - if test ! -d $withval ; then - AC_MSG_ERROR(You did not specify a directory) - fi - if test -f $withval/bin/roxen; then - PIKE="$withval/bin/roxen" - elif test -f $withval/bin/pike; then - PIKE="$withval/bin/pike" - else - AC_MSG_ERROR(Couldn't find a pike in $withval/bin/) - fi - if $PIKE -e 'float v; catch(v = __VERSION__ + (__BUILD__/10000.0)); if(v < 0.7079) exit(1); exit(0);'; then - PIKE_MODULE_DIR="`$PIKE --show-paths 2>&1| grep lib/modules | sed -e 's/.*: //'`" - PIKE_INCLUDE_DIR="`echo $PIKE_MODULE_DIR | sed -e 's,lib/pike/modules,include/pike,' -e 's,lib/modules,include/pike,'`" - if test -z "$PIKE_INCLUDE_DIR" -o -z "$PIKE_MODULE_DIR"; then - AC_MSG_ERROR(Failed to figure out Pike module and include directories) - fi - else - AC_MSG_ERROR(Roxen/PHP requires Pike 0.7.79 or newer) - fi - - AC_ADD_INCLUDE($PIKE_INCLUDE_DIR) - AC_DEFINE(HAVE_ROXEN,1,[Whether you use Roxen]) - PHP_SAPI=roxen - PHP_BUILD_SHARED - INSTALL_IT="\$(INSTALL) -m 0755 $SAPI_SHARED $PIKE_MODULE_DIR/PHP4.so" - RESULT="yes - Pike binary used: $PIKE - Pike include dir: $PIKE_INCLUDE_DIR - Pike module directory: $PIKE_MODULE_DIR" - PIKE_INCLUDE_DIR=" -I$PIKE_INCLUDE_DIR " -# PHP_SUBST(PIKE_INCLUDE_DIR) -]) -AC_MSG_RESULT($RESULT) - -if test "$RESULT" != "no" ; then - RESULT=no - AC_MSG_CHECKING(if Roxen should use ZTS) - AC_ARG_ENABLE(roxen-zts, - [ --enable-roxen-zts Build the Roxen module using Zend Thread Safety.], - [ - PHP_BUILD_THREAD_SAFE - AC_DEFINE(ROXEN_USE_ZTS,1,[Whether to use Roxen in ZTS mode]) - RESULT="yes" - - ]) - AC_MSG_RESULT($RESULT) -fi -dnl ## Local Variables: -dnl ## tab-width: 4 -dnl ## End: - diff --git a/sapi/roxen/roxen.c b/sapi/roxen/roxen.c deleted file mode 100644 index 13aca14dbc..0000000000 --- a/sapi/roxen/roxen.c +++ /dev/null @@ -1,750 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: David Hedbor <neotron@php.net> | - | Based on aolserver SAPI by Sascha Schumann <sascha@schumann.cx> | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#include "php.h" -#ifdef HAVE_ROXEN - -#include "php_ini.h" -#include "php_globals.h" -#include "SAPI.h" -#include "php_main.h" -#include "ext/standard/info.h" - -#include "php_version.h" - -#ifndef ZTS -/* Only valid if thread safety is enabled. */ -#undef ROXEN_USE_ZTS -#endif - - -/* Pike Include Files - * - * conflicts with pike avoided by only using long names. Requires a new - * Pike 0.7 since it was implemented for this interface only. - * - */ -#define NO_PIKE_SHORTHAND - -#include <fdlib.h> -#include <program.h> -#include <pike_types.h> -#include <interpret.h> -#include <module_support.h> -#include <error.h> -#include <array.h> -#include <backend.h> -#include <stralloc.h> -#include <mapping.h> -#include <object.h> -#include <threads.h> -#include <builtin_functions.h> -#include <operators.h> - -#undef HIDE_GLOBAL_VARIABLES -#undef REVEAL_GLOBAL_VARIABLES -#define HIDE_GLOBAL_VARIABLES() -#define REVEAL_GLOBAL_VARIABLES() - -/* php_roxen_request is per-request object storage */ - -typedef struct -{ - struct mapping *request_data; - struct object *my_fd_obj; - int my_fd; - char *filename; -} php_roxen_request; - - -/* Defines to get to the data supplied when the script is started. */ - -#ifdef ROXEN_USE_ZTS - -/* ZTS does work now, but it seems like it's faster using the "serialization" - * method I previously used. Thus it's not used unless ROXEN_USE_ZTS is defined. - */ - -/* Per thread storage area id... */ -static int roxen_globals_id; - -# define GET_THIS() php_roxen_request *_request = ts_resource(roxen_globals_id) -# define THIS _request -#else -static php_roxen_request *current_request = NULL; - -# define GET_THIS() current_request = ((php_roxen_request *)Pike_fp->current_storage) -# define THIS current_request -#endif - -/* File descriptor integer. Used to write directly to the FD without - * passing Pike - */ -#define MY_FD (THIS->my_fd) - -/* FD object. Really a PHPScript object from Pike which implements a couple - * of functions to handle headers, writing and buffering. - */ -#define MY_FD_OBJ ((struct object *)(THIS->my_fd_obj)) - -/* Mapping with data supplied from the calling Roxen module. Contains - * a mapping with headers, an FD object etc. - */ -#define REQUEST_DATA ((struct mapping *)(THIS->request_data)) - - -#if defined(_REENTRANT) && !defined(ROXEN_USE_ZTS) -/* Lock used to serialize the PHP execution. If ROXEN_USE_ZTS is defined, we - * are using the PHP thread safe mechanism instead. - */ -static PIKE_MUTEX_T roxen_php_execution_lock; -# define PHP_INIT_LOCK() mt_init(&roxen_php_execution_lock) -# define PHP_LOCK(X) THREADS_ALLOW();mt_lock(&roxen_php_execution_lock);THREADS_DISALLOW() -# define PHP_UNLOCK(X) mt_unlock(&roxen_php_execution_lock); -# define PHP_DESTROY() mt_destroy(&roxen_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 roxen_php_initialized; - -/* This allows calling of pike functions from the PHP callbacks, - * which requires the Pike interpreter to be locked. - */ -#define THREAD_SAFE_RUN(COMMAND, what) do {\ - struct thread_state *state;\ - if((state = thread_state_for_id(th_self()))!=NULL) {\ - if(!state->swapped) {\ - COMMAND;\ - } else {\ - mt_lock(&interpreter_lock);\ - SWAP_IN_THREAD(state);\ - COMMAND;\ - SWAP_OUT_THREAD(state);\ - mt_unlock(&interpreter_lock);\ - }\ - }\ -} 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. - */ - -static INLINE struct svalue *lookup_header(char *headername) -{ - struct svalue *headers, *value; - struct pike_string *sind; -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif - sind = make_shared_string("env"); - headers = low_mapping_string_lookup(REQUEST_DATA, sind); - free_string(sind); - if(!headers || headers->type != PIKE_T_MAPPING) return NULL; - sind = make_shared_string(headername); - value = low_mapping_string_lookup(headers->u.mapping, sind); - free_string(sind); - if(!value) return NULL; - return value; -} - -/* Lookup a header in the mapping and return the value as a string, or - * return the default if it's missing - */ -INLINE static char *lookup_string_header(char *headername, char *default_value) -{ - struct svalue *head = NULL; - THREAD_SAFE_RUN(head = lookup_header(headername), "header lookup"); - if(!head || head->type != PIKE_T_STRING) - return default_value; - return head->u.string->str; -} - -/* Lookup a header in the mapping and return the value as if it's an integer - * and otherwise return the default. - */ -INLINE static int lookup_integer_header(char *headername, int default_value) -{ - struct svalue *head = NULL; - THREAD_SAFE_RUN(head = lookup_header(headername), "header lookup"); - if(!head || head->type != PIKE_T_INT) - return default_value; - return head->u.integer; -} - -/* - * php_roxen_low_ub_write() writes data to the client connection. Might be - * rewritten to do more direct IO to save CPU and the need to lock the * - * interpreter for better threading. - */ - -static int -php_roxen_low_ub_write(const char *str, uint str_length) { - int sent_bytes = 0; - struct pike_string *to_write = NULL; -#ifdef ZTS - PLS_FETCH(); -#endif -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif - if(!MY_FD_OBJ->prog) { - PG(connection_status) = PHP_CONNECTION_ABORTED; - zend_bailout(); - return -1; - } - to_write = make_shared_binary_string(str, str_length); - push_string(to_write); - safe_apply(MY_FD_OBJ, "write", 1); - if(Pike_sp[-1].type == PIKE_T_INT) - sent_bytes = Pike_sp[-1].u.integer; - pop_stack(); - if(sent_bytes != str_length) { - /* This means the connection is closed. Dead. Gone. *sniff* */ - PG(connection_status) = PHP_CONNECTION_ABORTED; - zend_bailout(); - } - return sent_bytes; -} - -/* - * php_roxen_sapi_ub_write() calls php_roxen_low_ub_write in a Pike thread - * safe manner. - */ - -static int -php_roxen_sapi_ub_write(const char *str, uint str_length) -{ -#ifdef ZTS - PLS_FETCH(); -#endif -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif - int sent_bytes = 0, fd = MY_FD; - if(fd) - { - for(sent_bytes=0;sent_bytes < str_length;) - { - int written; - written = fd_write(fd, str + sent_bytes, str_length - sent_bytes); - if(written < 0) - { - switch(errno) - { - default: - /* This means the connection is closed. Dead. Gone. *sniff* */ - PG(connection_status) = PHP_CONNECTION_ABORTED; - zend_bailout(); - return sent_bytes; - case EINTR: - case EWOULDBLOCK: - continue; - } - - } else { - sent_bytes += written; - } - } - } else { - THREAD_SAFE_RUN(sent_bytes = php_roxen_low_ub_write(str, str_length), - "write"); - } - return sent_bytes; -} - -/* php_roxen_set_header() sets a header in the header mapping. Called in a - * thread safe manner from php_roxen_sapi_header_handler. - */ -static void php_roxen_set_header(char *header_name, char *value, char *p) -{ - struct svalue hsval; - struct pike_string *hval, *ind, *hind; - struct mapping *headermap; - struct svalue *s_headermap; -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif - hval = make_shared_string(value); - ind = make_shared_string(" _headers"); - hind = make_shared_binary_string(header_name, - (int)(p - header_name)); - - s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind); - if(!s_headermap) - { - struct svalue mappie; - mappie.type = PIKE_T_MAPPING; - headermap = allocate_mapping(1); - mappie.u.mapping = headermap; - mapping_string_insert(REQUEST_DATA, ind, &mappie); - free_mapping(headermap); - } else - headermap = s_headermap->u.mapping; - - hsval.type = PIKE_T_STRING; - hsval.u.string = hval; - mapping_string_insert(headermap, hind, &hsval); - - free_string(hval); - free_string(ind); - free_string(hind); -} - -/* - * php_roxen_sapi_header_handler() sets a HTTP reply header to be - * sent to the client. - */ -static int -php_roxen_sapi_header_handler(sapi_header_struct *sapi_header, - sapi_headers_struct *sapi_headers SLS_DC) -{ - char *header_name, *header_content, *p; - header_name = sapi_header->header; - header_content = p = strchr(header_name, ':'); - - if(p) { - do { - header_content++; - } while(*header_content == ' '); - THREAD_SAFE_RUN(php_roxen_set_header(header_name, header_content, p), "header handler"); - } - sapi_free_header(sapi_header); - return 0; -} - -/* - * php_roxen_sapi_send_headers() flushes the headers to the client. - * Called before real content is sent by PHP. - */ - -static int -php_roxen_low_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ -#ifdef ZTS - PLS_FETCH(); -#endif - struct pike_string *ind; - struct svalue *s_headermap; -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif - if(!MY_FD_OBJ->prog) { - PG(connection_status) = PHP_CONNECTION_ABORTED; - zend_bailout(); - return SAPI_HEADER_SEND_FAILED; - } - ind = make_shared_string(" _headers"); - s_headermap = low_mapping_string_lookup(REQUEST_DATA, ind); - free_string(ind); - - push_int(SG(sapi_headers).http_response_code); - if(s_headermap && s_headermap->type == PIKE_T_MAPPING) - ref_push_mapping(s_headermap->u.mapping); - else - push_int(0); - safe_apply(MY_FD_OBJ, "send_headers", 2); - pop_stack(); - - return SAPI_HEADER_SENT_SUCCESSFULLY; -} - -static int -php_roxen_sapi_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ - int res = 0; - THREAD_SAFE_RUN(res = php_roxen_low_send_headers(sapi_headers SLS_CC), "send headers"); - return res; -} - -/* - * php_roxen_sapi_read_post() reads a specified number of bytes from - * the client. Used for POST/PUT requests. - */ - -INLINE static int php_roxen_low_read_post(char *buf, uint count_bytes) -{ - uint total_read = 0; -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif -#ifdef ZTS - PLS_FETCH(); -#endif - - if(!MY_FD_OBJ->prog) - { - PG(connection_status) = PHP_CONNECTION_ABORTED; - zend_bailout(); - return -1; - } - push_int(count_bytes); - safe_apply(MY_FD_OBJ, "read_post", 1); - if(Pike_sp[-1].type == PIKE_T_STRING) { - MEMCPY(buf, Pike_sp[-1].u.string->str, - (total_read = Pike_sp[-1].u.string->len)); - buf[total_read] = '\0'; - } else - total_read = 0; - pop_stack(); - return total_read; -} - -static int -php_roxen_sapi_read_post(char *buf, uint count_bytes SLS_DC) -{ - uint total_read = 0; - THREAD_SAFE_RUN(total_read = php_roxen_low_read_post(buf, count_bytes), "read post"); - return total_read; -} - -/* - * php_roxen_sapi_read_cookies() returns the Cookie header from - * the HTTP request header - */ - -static char * -php_roxen_sapi_read_cookies(SLS_D) -{ - char *cookies; - cookies = lookup_string_header("HTTP_COOKIE", NULL); - return cookies; -} - -static void php_info_roxen(ZEND_MODULE_INFO_FUNC_ARGS) -{ - /* char buf[512]; */ - php_info_print_table_start(); - php_info_print_table_row(2, "SAPI module version", "$Id$"); - /* 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()); - php_info_print_table_row(2, "Installation path", Ns_InfoHomePath()); - php_info_print_table_row(2, "Hostname of server", Ns_InfoHostname()); - php_info_print_table_row(2, "Source code label", Ns_InfoLabel()); - php_info_print_table_row(2, "Server platform", Ns_InfoPlatform()); - snprintf(buf, 511, "%s/%s", Ns_InfoServerName(), Ns_InfoServerVersion()); - php_info_print_table_row(2, "Server version", buf); - snprintf(buf, 511, "%d day(s), %02d:%02d:%02d", - uptime / 86400, - (uptime / 3600) % 24, - (uptime / 60) % 60, - uptime % 60); - php_info_print_table_row(2, "Server uptime", buf); - */ - php_info_print_table_end(); -} - -static zend_module_entry php_roxen_module = { - "Roxen", - NULL, - NULL, - NULL, - NULL, - NULL, - php_info_roxen, - STANDARD_MODULE_PROPERTIES -}; - -static int php_roxen_startup(sapi_module_struct *sapi_module) -{ - if(php_module_startup(sapi_module) == FAILURE - || zend_startup_module(&php_roxen_module) == FAILURE) { - return FAILURE; - } else { - return SUCCESS; - } -} - -/* this structure is static (as in "it does not change") */ - -static sapi_module_struct sapi_module = { - "Roxen", - php_module_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - NULL, /* activate */ - NULL, /* deactivate */ - php_roxen_sapi_ub_write, /* unbuffered write */ - NULL, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - php_error, /* error handler */ - php_roxen_sapi_header_handler, /* header handler */ - php_roxen_sapi_send_headers, /* send headers handler */ - NULL, /* send header handler */ - php_roxen_sapi_read_post, /* read POST data */ - php_roxen_sapi_read_cookies, /* read Cookies */ - NULL, /* register server variables */ - NULL, /* Log message */ - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - -/* - * php_roxen_hash_environment() populates the php script environment - * with a number of variables. HTTP_* variables are created for - * the HTTP header data, so that a script can access these. - */ -#define ADD_STRING(name) \ - MAKE_STD_ZVAL(pval); \ - pval->type = IS_STRING; \ - pval->value.str.len = strlen(buf); \ - pval->value.str.val = estrndup(buf, pval->value.str.len); \ - zend_hash_update(&EG(symbol_table), name, sizeof(name), \ - &pval, sizeof(zval *), NULL) - -static void -php_roxen_hash_environment(CLS_D ELS_DC PLS_DC SLS_DC) -{ - int i; - char buf[512]; - zval *pval; - struct svalue *headers; - struct pike_string *sind; - struct array *indices; - struct svalue *ind, *val; -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif - sind = make_shared_string("env"); - headers = low_mapping_string_lookup(REQUEST_DATA, sind); - free_string(sind); - if(headers && headers->type == PIKE_T_MAPPING) { - indices = mapping_indices(headers->u.mapping); - for(i = 0; i < indices->size; i++) { - ind = &indices->item[i]; - val = low_mapping_lookup(headers->u.mapping, ind); - if(ind && ind->type == PIKE_T_STRING && - val && val->type == PIKE_T_STRING) { - int buf_len; - buf_len = MIN(511, ind->u.string->len); - strncpy(buf, ind->u.string->str, buf_len); - buf[buf_len] = '\0'; /* Terminate correctly */ - MAKE_STD_ZVAL(pval); - pval->type = IS_STRING; - pval->value.str.len = val->u.string->len; - pval->value.str.val = estrndup(val->u.string->str, pval->value.str.len); - - zend_hash_update(&EG(symbol_table), buf, buf_len + 1, &pval, sizeof(zval *), NULL); - } - } - free_array(indices); - } - - /* - MAKE_STD_ZVAL(pval); - pval->type = IS_LONG; - pval->value.lval = Ns_InfoBootTime(); - zend_hash_update(&EG(symbol_table), "SERVER_BOOTTIME", sizeof("SERVER_BOOTTIME"), &pval, sizeof(zval *), NULL); - */ -} - -/* - * php_roxen_module_main() is called by the per-request handler and - * "executes" the script - */ - -static int php_roxen_module_main(SLS_D) -{ - int res, len; - char *dir; - zend_file_handle file_handle; -#ifdef ZTS - CLS_FETCH(); - PLS_FETCH(); - ELS_FETCH(); -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif -#endif - -#ifdef VIRTUAL_DIR - /* Change virtual directory, if the feature is enabled */ - dir = malloc(len = strlen(THIS->filename)); - strcpy(dir, THIS->filename); - while(--len >= 0 && dir[len] != '/') - ; - if(len > 0) { - dir[len] = '\0'; - } - V_CHDIR(dir); - free(dir); -#endif - - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.filename = THIS->filename; - file_handle.free_filename = 0; - - THREADS_ALLOW(); - res = php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC); - THREADS_DISALLOW(); - if(res == FAILURE) { - return 0; - } - php_roxen_hash_environment(CLS_C ELS_CC PLS_CC SLS_CC); - THREADS_ALLOW(); - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - php_request_shutdown(NULL); - THREADS_DISALLOW(); - return 1; -} - -/* - * The php_roxen_request_handler() is called per request and handles - * everything for one request. - */ - -void f_php_roxen_request_handler(INT32 args) -{ - struct object *my_fd_obj; - struct mapping *request_data; - struct svalue *done_callback, *raw_fd; - struct pike_string *script, *ind; - int status = 1; - SLS_FETCH(); -#ifdef ROXEN_USE_ZTS - GET_THIS(); -#endif - - if(current_thread == th_self()) - 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) - error("PHP4.Interpreter->run: Bad argument 4, expected function.\n"); - PHP_LOCK(THIS); /* Need to lock here or reusing the same object might cause - * problems in changing stuff in that object */ -#ifndef ROXEN_USE_ZTS - GET_THIS(); -#endif - THIS->request_data = request_data; - THIS->my_fd_obj = my_fd_obj; - THIS->filename = script->str; - current_thread = th_self(); - SG(request_info).query_string = lookup_string_header("QUERY_STRING", 0); - SG(server_context) = (void *)1; /* avoid server_context == NULL */ - - /* path_translated is apparently the absolute path to the file, not - the translated PATH_INFO - */ - SG(request_info).path_translated = - lookup_string_header("SCRIPT_FILENAME", NULL); - SG(request_info).request_uri = lookup_string_header("DOCUMENT_URI", NULL); - if(!SG(request_info).request_uri) - SG(request_info).request_uri = lookup_string_header("SCRIPT_NAME", NULL); - SG(request_info).request_method = lookup_string_header("REQUEST_METHOD", "GET"); - SG(request_info).content_length = lookup_integer_header("HTTP_CONTENT_LENGTH", 0); - SG(request_info).content_type = lookup_string_header("HTTP_CONTENT_TYPE", NULL); - - /* FIXME: Check for auth stuff needs to be fixed... */ - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; - - ind = make_shared_binary_string("my_fd", 5); - raw_fd = low_mapping_string_lookup(THIS->request_data, ind); - if(raw_fd && raw_fd->type == PIKE_T_OBJECT) - { - int fd = fd_from_object(raw_fd->u.object); - if(fd == -1) - error("PHP4.Interpreter->run: my_fd object not open or not an FD.\n"); - THIS->my_fd = fd; - } else - THIS->my_fd = 0; - - status = php_roxen_module_main(SLS_C); - current_thread = -1; - - apply_svalue(done_callback, 0); - pop_stack(); - pop_n_elems(args); - push_int(status); - PHP_UNLOCK(THIS); -} - - -/* Clear the object global struct */ -static void clear_struct(struct object *o) -{ - MEMSET(Pike_fp->current_storage, 0, sizeof(php_roxen_request)); -} - - -/* - * pike_module_init() is called by Pike once at startup - * - * This functions allocates basic structures - */ - -void pike_module_init( void ) -{ - if (!roxen_php_initialized) { -#ifdef ZTS - tsrm_startup(1, 1, 0); -#ifdef ROXEN_USE_ZTS - roxen_globals_id = ts_allocate_id(sizeof(php_roxen_request), NULL, NULL); -#endif -#endif - sapi_startup(&sapi_module); - php_roxen_startup(&sapi_module); - roxen_php_initialized = 1; - PHP_INIT_LOCK(); - } - start_new_program(); /* Text */ - ADD_STORAGE(php_roxen_request); - set_init_callback(clear_struct); - pike_add_function("run", f_php_roxen_request_handler, - "function(string,mapping,object,function:int)", 0); - add_program_constant("Interpreter", (php_program = end_program()), 0); -} - -/* - * pike_module_exit() performs the last steps before the - * server exists. Shutdowns basic services and frees memory - */ - -void pike_module_exit(void) -{ - roxen_php_initialized = 0; - sapi_module.shutdown(&sapi_module); - if(php_program) free_program(php_program); -#ifdef ZTS - tsrm_shutdown(); -#endif - PHP_DESTROY(); -} -#endif diff --git a/sapi/servlet/Makefile.in b/sapi/servlet/Makefile.in deleted file mode 100644 index 940866b7fc..0000000000 --- a/sapi/servlet/Makefile.in +++ /dev/null @@ -1,30 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = servlet.c java.c -LTLIBRARY_DEPENDENCIES = phpsrvlt.jar - -EXTRA_CFLAGS = $(JAVA_CFLAGS) -EXTRA_INCLUDES = $(JAVA_INCLUDE) - -include $(top_srcdir)/build/ltlib.mk - -java.c : ../../ext/java/java.c - @cp ../../ext/java/java.c . - -phpsrvlt.jar : servlet.java ../../ext/java/reflect.java - $(mkinstalldirs) net/php - @echo library=php4>net/php/reflect.properties - @echo library=php4>net/php/servlet.properties - @cp formatter.java net/php - @cp servlet.java net/php - @cp ../../ext/java/reflect.java net/php - javac net/php/reflect.java - @test ! -f reflect.class || mv reflect.class net/php # bug in KJC javac - javac -classpath .:$(SERVLET_CLASSPATH):$(CLASSPATH) net/php/servlet.java - @test ! -f servlet.class || mv servlet.class net/php # bug in KJC javac - javac -classpath .:$(SERVLET_CLASSPATH):$(CLASSPATH) net/php/formatter.java - @test ! -f formatter.class || mv formatter.class net/php # bug in KJC javac - $(JAVA_JAR) phpsrvlt.jar net/php/*.class net/php/*.properties - @rm net/php/servlet.* net/php/reflect.* net/php/formatter.* - @rmdir net/php - @rmdir net diff --git a/sapi/servlet/README b/sapi/servlet/README deleted file mode 100644 index 1a93186353..0000000000 --- a/sapi/servlet/README +++ /dev/null @@ -1,42 +0,0 @@ -What is PHP4 sapi/servlet? - - PHP4 sapi/servlet builds upon the mechanism defined by ext/java to enable - the entire PHP processor to be run as a servlet. The primary advanatage - of this from a PHP perspective is that web servers which support servlets - typically take great care in pooling and reusing JVMs. - - Notes: - - 1) While this code is intended to be able to run on any servlet engine, - it has only been tested on Apache's Jakarta/tomcat to date. Bug - reports, success stories and/or patches required to get this code - to run on other engines would be appreciated. - - 2) PHP has a habit of changing the working directory. Sapi/servlet will - eventually change it back, but while PHP is running the servlet engine - may not be able to load any classes from the CLASSPATH which are - specified using a relative directory syntax, or find the work directory - used for administration and JSP compilation tasks. - -Build and execution instructions: - - Most of the configuration hassles associated with ext/java are associated - with starting the JVM, and as such do not apply to sapi/servlet. In - particular, no updates to php.ini are required on any operating system. - - Unix: - Build: - ./configure --with-servlet --with-java - Execute: - add phpsrvlt.jar to CLASSPATH - add directory containing libphp4.so to LD_LIBRARY_PATH - merge/overwrite build/tomcat/examples/WEB-INF/web.xml from sapi/servlet - - Win32: - Build: - add jdsk (or d:\build\tomcat\classes) to CLASSPATH - build sapi\servlet\servlet.dsp - Execute: - add phpsrvlt.jar to CLASSPATH - add directory containing php4ts.dll and phpsrvlt.dll to PATH - merge/overwrite build\tomcat\examples\WEB-INF\web.xml from sapi\servlet diff --git a/sapi/servlet/config.m4 b/sapi/servlet/config.m4 deleted file mode 100644 index bc0badb53c..0000000000 --- a/sapi/servlet/config.m4 +++ /dev/null @@ -1,48 +0,0 @@ -# $Id$ -# config.m4 for servlet sapi - -AC_MSG_CHECKING(for Servlet support) -AC_ARG_WITH(servlet, -[ --with-servlet[=DIR] Include servlet support. DIR is the base install - directory for the JSDK. This SAPI prereqs the - java extension must be built as a shared dl.], -[ - if test "$withval" != "no"; then - - if test "$withval" = "yes"; then - SERVLET_CLASSPATH=. - else - if test -f $withval/lib/servlet.jar; then - SERVLET_CLASSPATH=$withval/lib/servlet.jar - fi - - if test -f $withval/lib/jsdk.jar; then - SERVLET_CLASSPATH=$withval/lib/jsdk.jar - fi - - if test -d $withval/javax; then - SERVLET_CLASSPATH=$withval - fi - - if test -z "$SERVLET_CLASSPATH"; then - AC_MSG_RESULT(no) - AC_MSG_ERROR(unable to find servlet libraries) - fi - fi - - AC_DEFINE(SAPI_SERVLET, 1, [Whether you use Servlet]) - - INSTALL_IT="\$(INSTALL) -m 0755 \$(srcdir)/sapi/servlet/phpsrvlt.jar \$(libdir)" - INSTALL_IT="$INSTALL_IT; \$(INSTALL) -m 0755 $SAPI_SHARED \$(libdir)" - PHP_SAPI=servlet - PHP_BUILD_SHARED - PHP_BUILD_THREAD_SAFE - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - fi -],[ - AC_MSG_RESULT(no) -]) - -PHP_SUBST(SERVLET_CLASSPATH) diff --git a/sapi/servlet/cookies.php b/sapi/servlet/cookies.php deleted file mode 100644 index bcc4c40aae..0000000000 --- a/sapi/servlet/cookies.php +++ /dev/null @@ -1,41 +0,0 @@ -<html> -<body bgcolor="white"> -<head> -<title>Cookies Example</title> -</head> -<body> -<h3>Cookies Example</h3> - -<? - $cookies = $request->cookies; - - // print out cookies - - if (!current($cookies)) { - echo "Your browser isn't sending any cookies\n"; - } else { - echo "Your browser is sending the following cookies:<br>\n"; - - foreach ($cookies as $cookie) { - echo "Cookie Name: $cookie->name<br>Cookie value: $cookie->value<br>\n"; - } - } - - // set a cookie - - if ($cookieName) { - $response->addCookie(new Java("javax.servlet.http.Cookie", $cookieName, $cookieValue)); - echo "<p>You just sent the following cookie to your browser:<br>\n"; - echo "Name: $cookieName<br>Value: $cookieValue<P>\n"; - } - -?> -<P> -Create a cookie to send to your browser<br> -<form action="<?PHP echo $PHP_SELF ?>" method=POST> -Name: <input type=text length=20 name=cookieName><br> -Value: <input type=text length=20 name=cookieValue><br> -<input type=submit></form> -</body> -</html> - diff --git a/sapi/servlet/date.php b/sapi/servlet/date.php deleted file mode 100644 index 1146d31fab..0000000000 --- a/sapi/servlet/date.php +++ /dev/null @@ -1,28 +0,0 @@ -<html> -<!-- - Copyright (c) 1999 The Apache Software Foundation. All rights - reserved. ---> - -<body bgcolor="white"> -<?php $clock=new Java("dates.JspCalendar"); ?> - -<font size=4> -<ul> -<li> Day of month: is <?php echo $clock->dayOfMonth ?> -<li> Year: is <?php echo $clock->year ?> -<li> Month: is <?php echo $clock->month ?> -<li> Time: is <?php echo $clock->time ?> -<li> Date: is <?php echo $clock->date ?> -<li> Day: is <?php echo $clock->day ?> -<li> Day Of Year: is <?php echo $clock->dayOfYear ?> -<li> Week Of Year: is <?php echo $clock->weekOfYear ?> -<li> era: is <?php echo $clock->era ?> -<li> DST Offset: is <?php echo $clock->dSTOffset ?> -<li> Zone Offset: is <?php echo $clock->zoneOffset ?> -</ul> -</font> - -</body> -</html> - diff --git a/sapi/servlet/formatter.java b/sapi/servlet/formatter.java deleted file mode 100644 index 7e4605f70c..0000000000 --- a/sapi/servlet/formatter.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.0 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_0.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sam Ruby (rubys@us.ibm.com) | - +----------------------------------------------------------------------+ -*/ - -package net.php; - -import javax.servlet.*; -import javax.servlet.http.*; - -public class formatter extends servlet { - - public void service(HttpServletRequest request, - HttpServletResponse response) - throws ServletException - { - display_source_mode = true; - super.service(request, response); - } - -} diff --git a/sapi/servlet/jinfo.php b/sapi/servlet/jinfo.php deleted file mode 100644 index f20bbfb27d..0000000000 --- a/sapi/servlet/jinfo.php +++ /dev/null @@ -1,5 +0,0 @@ -<? - - phpinfo(); - -?> diff --git a/sapi/servlet/jver.php b/sapi/servlet/jver.php deleted file mode 100644 index e5e029c6e4..0000000000 --- a/sapi/servlet/jver.php +++ /dev/null @@ -1,17 +0,0 @@ -<html> -<? - - $system = new Java("java.lang.System"); - print "Java version=".$system->getProperty("java.version")." <br>\n"; - print "Java vendor=".$system->getProperty("java.vendor")." <p>\n\n"; - print "OS=".$system->getProperty("os.name")." ". - $system->getProperty("os.version")." on ". - $system->getProperty("os.arch")." <br>\n"; - - $formatter = new Java("java.text.SimpleDateFormat", - "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz"); - - print $formatter->format(new Java("java.util.Date"))."\n"; - -?> -</html> diff --git a/sapi/servlet/reqheaders.php b/sapi/servlet/reqheaders.php deleted file mode 100644 index db04aed3dc..0000000000 --- a/sapi/servlet/reqheaders.php +++ /dev/null @@ -1,24 +0,0 @@ -<html> -<body bgcolor="white"> -<head> -<title>Request Header Example</title> -</head> -<body> -<h3>Request Header Example</h3> -<table border=0> - -<?php - - $e = $request->headerNames; - while ($e->hasMoreElements()) { - $name = $e->nextElement(); - $value = $request->getHeader($name); - print "<tr><td bgcolor=\"#CCCCCC\">$name\n"; - print "</td><td>$value</td></tr>\n"; - } - -?> - -</table> -</body> -</html> diff --git a/sapi/servlet/reqinfo.php b/sapi/servlet/reqinfo.php deleted file mode 100644 index 37d453baf9..0000000000 --- a/sapi/servlet/reqinfo.php +++ /dev/null @@ -1,29 +0,0 @@ -<html> -<body> -<head> -<title>Request Information Example</title> -</head> -<body bgcolor="white"> -<h3>Request Information Example</h3> -<table border=0><tr><td> -Method: -</td><td> -<?php print $request->method ?> -</td></tr><tr><td> -Request URI: -</td><td> -<?php print $request->requestURI ?> -</td></tr><tr><td> -Protocol: -</td><td> -<?php print $request->protocol ?> -</td></tr><tr><td> -Path Info: -</td><td> -<?php print $request->pathInfo ?> -</td></tr><tr><td> -Remote Address: -</td><td> -<?php print $request->remoteAddr ?> -</table> - diff --git a/sapi/servlet/reqparams.php b/sapi/servlet/reqparams.php deleted file mode 100644 index a751e96c08..0000000000 --- a/sapi/servlet/reqparams.php +++ /dev/null @@ -1,35 +0,0 @@ -<html> -<body> -<head> -<title>Request Parameters Example</title> -</head> -<body bgcolor="white"> -<h3>Request Parameters Example</h3> -Parameters in this request:<br> -<?php - $e = $request->parameterNames; - - if (!$e->hasMoreElements()) { - echo "No Parameters, Please enter some"; - } - - while ($e->hasMoreElements()) { - $name = $e->nextElement(); - $value = $request->getParameter($name); - echo "$name = $value<br>\n"; - } - -?> -<P> -<form action="<?php echo $PHP_SELF ?>" method=POST> -First Name: -<input type=text size=20 name=firstname> -<br> -Last Name: -<input type=text size=20 name=lastname> -<br> -<input type=submit> -</form> -</body> -</html> - diff --git a/sapi/servlet/servlet.c b/sapi/servlet/servlet.c deleted file mode 100644 index 8922e85834..0000000000 --- a/sapi/servlet/servlet.c +++ /dev/null @@ -1,426 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sam Ruby (rubys@us.ibm.com) | - +----------------------------------------------------------------------+ -*/ - -#include <jni.h> - -#include "dl/phpdl.h" -#include "php.h" -#include "php_globals.h" - -#include "SAPI.h" - -#include <stdio.h> -#include "php.h" -#ifdef PHP_WIN32 -#include "win32/time.h" -#include "win32/signal.h" -#include <process.h> -#else -#include "build-defs.h" -#endif -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif -#if HAVE_UNISTD_H -#include <unistd.h> -#endif -#if HAVE_SIGNAL_H -#include <signal.h> -#endif -#if HAVE_SETLOCALE -#include <locale.h> -#endif -#include "zend.h" -#include "php_ini.h" -#include "php_globals.h" -#include "php_main.h" -#include "fopen-wrappers.h" -#include "ext/standard/php_standard.h" -#include "ext/standard/php_dir.h" -#ifdef PHP_WIN32 -#include <io.h> -#include <fcntl.h> -#include "win32/syslog.h" -#include "win32/php_registry.h" -#else -#include <syslog.h> -#endif - -#include "zend_compile.h" -#include "zend_execute.h" -#include "zend_highlight.h" -#include "zend_indent.h" - -PHPAPI extern char *php_ini_path; - -JNIEXPORT void JNICALL Java_net_php_reflect_setEnv - (JNIEnv *newJenv, jclass self); - -typedef struct { - JNIEnv *jenv; - jobject servlet; - char *cookies; -} servlet_request; - -extern zend_module_entry java_module_entry; - -static zend_module_entry *additional_php_extensions[] = { - &java_module_entry -}; - -#define EXTCOUNT (sizeof(additional_php_extensions)/sizeof(zend_module_entry *)) - -/***************************************************************************/ - -/* - * JNI convenience utilities - */ - -#define SETSTRING(target, source) \ - { const char *UTFString; \ - if (source) { \ - UTFString = (*jenv)->GetStringUTFChars(jenv, source, 0); \ - target = estrdup(UTFString); \ - (*jenv)->ReleaseStringUTFChars(jenv, source, UTFString); \ - } else { \ - target = 0; \ - } } - -#define FREESTRING(target) \ - { if (target) { efree(target); target=0; } } - -void ThrowIOException (JNIEnv *jenv, char *msg) { - jclass iox = (*jenv)->FindClass (jenv, "java/io/IOException"); - (*jenv)->ThrowNew (jenv, iox, (msg?msg:"null") ); -} - -void ThrowServletException (JNIEnv *jenv, char *msg) { - jclass sx = (*jenv)->FindClass (jenv, "javax/servlet/ServletException"); - (*jenv)->ThrowNew (jenv, sx, msg); -} - -/***************************************************************************/ - -/* - * sapi callbacks - */ - -static int sapi_servlet_ub_write(const char *str, uint str_length) -{ - SLS_FETCH(); - if (!SG(server_context)) { - fprintf(stderr, str); - return 0; - } - - { - JNIEnv *jenv = ((servlet_request*)SG(server_context))->jenv; - jobject servlet = ((servlet_request*)SG(server_context))->servlet; - - jclass servletClass = (*jenv)->GetObjectClass(jenv, servlet); - jmethodID write = (*jenv)->GetMethodID(jenv, servletClass, "write", - "(Ljava/lang/String;)V"); - char *copy = malloc(str_length+1); - jstring arg; - memcpy(copy, str, str_length); - copy[str_length] = 0; - arg=(*jenv)->NewStringUTF(jenv, copy); - free(copy); - (*jenv)->CallVoidMethod(jenv, servlet, write, arg); - (*jenv)->DeleteLocalRef(jenv, arg); - return str_length; - } -} - - -static void sapi_servlet_send_header(sapi_header_struct *sapi_header, void *server_context) -{ - SLS_FETCH(); - if (!sapi_header) return; - if (!SG(server_context)) return; - - { - JNIEnv *jenv = ((servlet_request*)SG(server_context))->jenv; - jobject servlet = ((servlet_request*)SG(server_context))->servlet; - - jclass servletClass = (*jenv)->GetObjectClass(jenv, servlet); - jmethodID header = (*jenv)->GetMethodID(jenv, servletClass, "header", - "(Ljava/lang/String;)V"); - jstring arg=(*jenv)->NewStringUTF(jenv, sapi_header->header); - (*jenv)->CallVoidMethod(jenv, servlet, header, arg); - (*jenv)->DeleteLocalRef(jenv, arg); - } -} - - -static int sapi_servlet_read_post(char *buffer, uint count_bytes SLS_DC) -{ - if (count_bytes == 0) { - return 0; - } else { - JNIEnv *jenv = ((servlet_request*)SG(server_context))->jenv; - jobject servlet = ((servlet_request*)SG(server_context))->servlet; - - jclass servletClass = (*jenv)->GetObjectClass(jenv, servlet); - jmethodID readPost = (*jenv)->GetMethodID(jenv, servletClass, - "readPost", "(I)Ljava/lang/String;"); - jstring post = (*jenv)->CallObjectMethod(jenv, servlet, readPost, - count_bytes); - - const char *postAsUTF = (*jenv)->GetStringUTFChars(jenv, post, 0); - uint read_bytes=(*jenv)->GetStringLength(jenv, post); - if (read_bytes>count_bytes) read_bytes=count_bytes; - - memcpy(buffer, postAsUTF, read_bytes); - if (read_bytes<count_bytes) buffer[read_bytes]=0; - - (*jenv)->ReleaseStringUTFChars(jenv, post, postAsUTF); - - return read_bytes; - } -} - - -static char *sapi_servlet_read_cookies(SLS_D) -{ - JNIEnv *jenv = ((servlet_request*)SG(server_context))->jenv; - jobject servlet = ((servlet_request*)SG(server_context))->servlet; - - jclass servletClass = (*jenv)->GetObjectClass(jenv, servlet); - jmethodID readCookies = (*jenv)->GetMethodID(jenv, servletClass, - "readCookies", "()Ljava/lang/String;"); - jstring cookies = (*jenv)->CallObjectMethod(jenv, servlet, readCookies); - - SETSTRING( ((servlet_request*)SG(server_context))->cookies, cookies); - - return ((servlet_request*)SG(server_context))->cookies; -} - -/***************************************************************************/ - -/* - * sapi maintenance - */ - -static sapi_module_struct sapi_module = { - "Java Servlet", /* name */ - - php_module_startup, /* startup */ - php_module_shutdown_wrapper, /* shutdown */ - - NULL, /* activate */ - NULL, /* deactivate */ - - sapi_servlet_ub_write, /* unbuffered write */ - NULL, /* flush */ - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, /* error handler */ - - NULL, /* header handler */ - NULL, /* send headers handler */ - sapi_servlet_send_header, /* send header handler */ - - sapi_servlet_read_post, /* read POST data */ - sapi_servlet_read_cookies, /* read Cookies */ - - NULL, /* register server variables */ - NULL, /* Log message */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - - -JNIEXPORT void JNICALL Java_net_php_servlet_startup - (JNIEnv *jenv, jobject self) -{ - -#ifdef ZTS - tsrm_startup(1,1,0); -#else - if (setjmp(EG(bailout))!=0) { - ThrowServletException(jenv,"bailout"); - return; - } -#endif - - sapi_startup(&sapi_module); - - if (php_module_startup(&sapi_module)==FAILURE) { - ThrowServletException(jenv,"module startup failure"); - return; - } - - if (php_startup_extensions(additional_php_extensions, EXTCOUNT)==FAILURE) { - ThrowServletException(jenv,"extension startup failure"); - return; - } - -} - - -JNIEXPORT void JNICALL Java_net_php_servlet_shutdown - (JNIEnv *jenv, jobject self) -{ - php_module_shutdown(); - php_global_shutdown_extensions(additional_php_extensions, EXTCOUNT); -#ifdef ZTS - tsrm_shutdown(); -#endif - return; -} - -/***************************************************************************/ - -/* - * define a Java object to PHP - */ - -JNIEXPORT jlong JNICALL Java_net_php_servlet_define - (JNIEnv *jenv, jobject self, jstring name) -{ - pval *pzval; - jlong addr = 0; - ELS_FETCH(); - const char *nameAsUTF = (*jenv)->GetStringUTFChars(jenv, name, 0); - - MAKE_STD_ZVAL(pzval); - (pval*)(long)addr = pzval; - - zend_hash_add(&EG(symbol_table), (char*)nameAsUTF, - strlen(nameAsUTF)+1, &pzval, sizeof(pval *), NULL); - (*jenv)->ReleaseStringUTFChars(jenv, name, nameAsUTF); - - return addr; -} - -/* - * execute a script - */ - -JNIEXPORT void JNICALL Java_net_php_servlet_send - (JNIEnv *jenv, jobject self, - jstring requestMethod, jstring queryString, - jstring pathInfo, jstring pathTranslated, - jstring contentType, jint contentLength, - jstring authUser, jboolean display_source_mode) -{ - - zend_file_handle file_handle; -#ifndef VIRTUAL_DIR - char cwd[MAXPATHLEN+1]; -#endif - SLS_FETCH(); - PLS_FETCH(); - CLS_FETCH(); - ELS_FETCH(); - -#ifdef ZTS - if (setjmp(EG(bailout))!=0) { - ThrowServletException(jenv,"bailout"); - return; - } -#endif - - SG(server_context) = emalloc(sizeof(servlet_request)); - ((servlet_request*)SG(server_context))->jenv=jenv; - ((servlet_request*)SG(server_context))->servlet=self; - ((servlet_request*)SG(server_context))->cookies=0; - - CG(extended_info) = 0; - - /* - * Initialize the request - */ - SETSTRING( SG(request_info).auth_user, authUser ); - SETSTRING( SG(request_info).request_method, requestMethod ); - SETSTRING( SG(request_info).query_string, queryString ); - SETSTRING( SG(request_info).request_uri, pathInfo ); - SETSTRING( SG(request_info).content_type, contentType ); - SG(request_info).content_length = contentLength; - SG(request_info).auth_password = NULL; - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC)==FAILURE) { - ThrowServletException(jenv,"request startup failure"); - return; - } - - /* - * Parse the file - */ - SETSTRING( SG(request_info).path_translated, pathTranslated ); -#ifdef VIRTUAL_DIR - file_handle.handle.fp = php_fopen_primary_script(); -#else - /* - * The java runtime doesn't like the working directory to be - * changed, so save it and change it back as quickly as possible - * in the hopes that Java doesn't notice. - */ - getcwd(cwd,MAXPATHLEN); - file_handle.handle.fp = php_fopen_primary_script(); - chdir(cwd); -#endif - file_handle.filename = SG(request_info).path_translated; - file_handle.free_filename = 0; - file_handle.type = ZEND_HANDLE_FP; - - if (!file_handle.handle.fp) { - php_request_shutdown((void *) 0); - php_module_shutdown(); - ThrowIOException(jenv,file_handle.filename); - return; - } - - /* - * Execute the request - */ - Java_net_php_reflect_setEnv(jenv, 0); - - if (display_source_mode) { - zend_syntax_highlighter_ini syntax_highlighter_ini; - - if (open_file_for_scanning(&file_handle CLS_CC)==SUCCESS) { - php_get_highlight_struct(&syntax_highlighter_ini); - sapi_send_headers(); - zend_highlight(&syntax_highlighter_ini); - } - } else { - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - php_header(); /* Make sure headers have been sent */ - } - - /* - * Clean up - */ - - FREESTRING(SG(request_info).request_method); - FREESTRING(SG(request_info).query_string); - FREESTRING(SG(request_info).request_uri); - FREESTRING(SG(request_info).path_translated); - FREESTRING(SG(request_info).content_type); - FREESTRING(((servlet_request*)SG(server_context))->cookies); - efree(SG(server_context)); - SG(server_context)=0; - - if (!display_source_mode) php_request_shutdown((void *) 0); -} - diff --git a/sapi/servlet/servlet.dsp b/sapi/servlet/servlet.dsp deleted file mode 100644 index 35563a5554..0000000000 --- a/sapi/servlet/servlet.dsp +++ /dev/null @@ -1,282 +0,0 @@ -# Microsoft Developer Studio Project File - Name="servlet" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=servlet - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "servlet.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "servlet.mak" CFG="servlet - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "servlet - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "servlet - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "servlet - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "servlet - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "servlet - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release"
-# PROP BASE Intermediate_Dir "..\..\Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release"
-# PROP Intermediate_Dir "..\..\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php_java.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release/phpsrvlt.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release"
-
-!ELSEIF "$(CFG)" == "servlet - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug"
-# PROP BASE Intermediate_Dir "..\..\Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug"
-# PROP Intermediate_Dir "..\..\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php_java.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug/phpsrvlt.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug"
-
-!ELSEIF "$(CFG)" == "servlet - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "..\..\Debug_TS"
-# PROP BASE Intermediate_Dir "..\..\Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\Debug_TS"
-# PROP Intermediate_Dir "..\..\Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "_DEBUG" /D ZEND_DEBUG=1 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /D "ZTS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "_DEBUG"
-# ADD RSC /l 0x40d /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 php4ts_debug.lib php_java.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/phpsrvlt.dll" /pdbtype:sept /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "servlet - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "..\..\Release_TS"
-# PROP BASE Intermediate_Dir "..\..\Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\Release_TS"
-# PROP Intermediate_Dir "..\..\Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\Zend" /I "$(JAVA_HOME)\include\win32" /I "$(JAVA_HOME)\include" /I "..\..\..\bindlib_w32" /D "NDEBUG" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D "ZEND_WIN32" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILE_DL" /D "ZTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40d /d "NDEBUG"
-# ADD RSC /l 0x40d /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 php4ts.lib php_java.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/phpsrvlt.dll" /libpath:"$(JAVA_HOME)\lib" /libpath:"..\..\Release_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "servlet - Win32 Release"
-# Name "servlet - Win32 Debug"
-# Name "servlet - Win32 Debug_TS"
-# Name "servlet - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\servlet.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\ext\java\java.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Java Files"
-
-# PROP Default_Filter "java"
-# Begin Source File
-
-SOURCE=.\servlet.java
-
-!IF "$(CFG)" == "servlet - Win32 Release"
-
-USERDEP__SERVL="..\..\ext\java\reflect.java"
-# Begin Custom Build
-OutDir=.\..\..\Release
-InputPath=.\servlet.java
-
-"$(OutDir)\phpsrvlt.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy *.java net\php > nul
- copy ..\..\ext\java\reflect.java net\php > nul
- echo library=phpsrvlt>net/php/reflect.properties
- echo library=phpsrvlt>net/php/servlet.properties
- $(JAVA_HOME)\bin\javac net\php\servlet.java
- $(JAVA_HOME)\bin\javac net\php\formatter.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
- erase net\php\servlet.*
- erase net\php\formatter.*
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "servlet - Win32 Debug"
-
-USERDEP__SERVL="..\..\ext\java\reflect.java"
-# Begin Custom Build
-OutDir=.\..\..\Debug
-InputPath=.\servlet.java
-
-"$(OutDir)\phpsrvlt.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy *.java net\php > nul
- copy ..\..\ext\java\reflect.java net\php > nul
- echo library=phpsrvlt>net/php/reflect.properties
- echo library=phpsrvlt>net/php/servlet.properties
- $(JAVA_HOME)\bin\javac -g net\php\servlet.java
- $(JAVA_HOME)\bin\javac -g net\php\formatter.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
- erase net\php\servlet.*
- erase net\php\formatter.*
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "servlet - Win32 Debug_TS"
-
-USERDEP__SERVL="..\..\ext\java\reflect.java"
-# Begin Custom Build
-OutDir=.\..\..\Debug_TS
-InputPath=.\servlet.java
-
-"$(OutDir)\phpsrvlt.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy *.java net\php > nul
- copy ..\..\ext\java\reflect.java net\php > nul
- echo library=phpsrvlt>net/php/reflect.properties
- echo library=phpsrvlt>net/php/servlet.properties
- $(JAVA_HOME)\bin\javac -g net\php\servlet.java
- $(JAVA_HOME)\bin\javac -g net\php\formatter.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
- erase net\php\servlet.*
- erase net\php\formatter.*
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ELSEIF "$(CFG)" == "servlet - Win32 Release_TS"
-
-USERDEP__SERVL="..\..\ext\java\reflect.java"
-# Begin Custom Build
-OutDir=.\..\..\Release_TS
-InputPath=.\servlet.java
-
-"$(OutDir)\phpsrvlt.jar" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- if not exist net mkdir net
- if not exist net\php mkdir net\php
- copy *.java net\php > nul
- copy ..\..\ext\java\reflect.java net\php > nul
- echo library=phpsrvlt>net/php/reflect.properties
- echo library=phpsrvlt>net/php/servlet.properties
- $(JAVA_HOME)\bin\javac net\php\servlet.java
- $(JAVA_HOME)\bin\javac net\php\formatter.java
- $(JAVA_HOME)\bin\jar c0f $(OutDir)\phpsrvlt.jar net\php\*.class net\php\*.properties
- erase net\php\servlet.*
- erase net\php\formatter.*
- erase net\php\reflect.*
- rmdir net\php
- rmdir net
-
-# End Custom Build
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\servlet.java
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\jtest.php
-# End Source File
-# End Target
-# End Project
diff --git a/sapi/servlet/servlet.java b/sapi/servlet/servlet.java deleted file mode 100644 index bc91aa72e2..0000000000 --- a/sapi/servlet/servlet.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.0 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_0.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sam Ruby (rubys@us.ibm.com) | - +----------------------------------------------------------------------+ -*/ - -package net.php; - -import java.io.IOException; -import java.net.URLEncoder; -import java.util.Enumeration; -import javax.servlet.*; -import javax.servlet.http.*; - -import java.lang.reflect.Method; - -public class servlet extends HttpServlet { - - char slash=System.getProperty("file.separator").charAt(0); - HttpServletRequest request; - HttpServletResponse response; - ServletInputStream stream; - - static int startup_count = 0; - - protected boolean display_source_mode = false; - private Method addHeader; - - /******************************************************************/ - /* native methods */ - /******************************************************************/ - - static { reflect.loadLibrary("servlet"); } - native void startup(); - native long define(String name); - native void send(String requestMethod, String queryString, - String pathInfo, String pathTranslated, - String contentType, int contentLength, String authUser, - boolean display_source_mode); - native void shutdown(); - - /******************************************************************/ - /* sapi callbacks */ - /******************************************************************/ - - String readPost(int bytes) { - String result; - if (!request.getMethod().equals("POST")) { - result = request.getQueryString(); - } else { - Enumeration e = request.getParameterNames(); - result=""; - String concat=""; - while (e.hasMoreElements()) { - String name = (String)e.nextElement(); - String value = request.getParameter(name); - result+=concat+name+"="+URLEncoder.encode(value); - concat="&"; - } - } - if (result == null) return ""; - return result; - } - - String readCookies() { - reflect.setResult(define("request"), request); - reflect.setResult(define("response"), response); - reflect.setResult(define("PHP_SELF"), request.getRequestURI()); - return request.getHeader("cookie"); - } - - void header(String data) { - - // try to send the header using the most specific servlet API - // as possible (some servlet engines will add a content type - // header unless the setContentType method is called). - try { - if (data.startsWith("Content-type: ")) { - response.setContentType(data.substring(data.indexOf(" ")+1)); - } else if (data.startsWith("Location: ")) { - response.sendRedirect(data.substring(data.indexOf(" ")+1)); - } else { - int colon = data.indexOf(": "); - if (colon > 0) { - try { - addHeader.invoke(response, new Object[] - { data.substring(0,colon), data.substring(colon+2) } ); - } catch (Exception e) { - e.printStackTrace(System.err); - } - } else { - response.getWriter().println(data); - } - } - } catch (IOException e) { - e.printStackTrace(System.err); - } - - } - - void write(String data) { - try { - response.getWriter().print(data); - } catch (IOException e) { - e.printStackTrace(System.err); - } - } - - /******************************************************************/ - /* servlet interface */ - /******************************************************************/ - - public void init(ServletConfig config) throws ServletException { - super.init(config); - if (0 == startup_count++) startup(); - - // try to find the addHeader method (added in the servlet API 2.2) - // otherwise settle for the setHeader method - try { - Class c = Class.forName("javax.servlet.http.HttpServletResponse"); - Method method[] = c.getDeclaredMethods(); - for (int i=0; i<method.length; i++) { - if (method[i].getName().equals("addHeader")) { - addHeader = method[i]; - break; - } - if (method[i].getName().equals("setHeader")) { - addHeader = method[i]; - } - } - } catch (Exception e) { - e.printStackTrace(System.err); - } - } - - public void service(HttpServletRequest request, - HttpServletResponse response) - throws ServletException - { - this.request=request; - this.response=response; - - String servletPath=request.getServletPath(); - String contextPath=getServletContext().getRealPath(servletPath); - - send(request.getMethod(), request.getQueryString(), - request.getPathInfo(), contextPath, - request.getContentType(), request.getContentLength(), - request.getRemoteUser(), display_source_mode); - - try { - if (stream != null) stream.close(); - } catch (IOException e) { - throw new ServletException(e.toString()); - } - } - - public void destroy() { - if (0 == --startup_count) shutdown(); - super.destroy(); - } - -} diff --git a/sapi/servlet/sessions.php b/sapi/servlet/sessions.php deleted file mode 100644 index 463b1b5e92..0000000000 --- a/sapi/servlet/sessions.php +++ /dev/null @@ -1,60 +0,0 @@ -<html> -<body bgcolor="white"> -<head> -<title>Sessions Example</title> -</head> -<body> -<h3>Sessions Example</h3> -<?php - - // print session info - - $session = $request->session; - $created = new Java("java.util.Date", $session->creationTime); - $accessed = new Java("java.util.Date", $session->lastAccessedTime); - - print "Session ID: $session->id<br>\n"; - print "Created: " . $created->toString() . "<br>\n"; - print "Last Accessed: " . $accessed->toString() . "<br>\n"; - - // set session info if needed - - if ($dataName) $session->setAttribute($dataName, $dataValue); - - // print session contents - - print "<P>\n"; - print "The following data is in your session:<br>\n"; - $e = $session->attributeNames; - while ($e->hasMoreElements()) { - $name = $e->nextElement(); - $value = $session->getAttribute($name); - print "$name = $value<br>\n"; - } - -?> -<P> -<form action="<?php echo $PHP_SELF ?>" method=POST> -Name of Session Attribute: -<input type=text size=20 name=dataName> -<br> -Value of Session Attribute: -<input type=text size=20 name=dataValue> -<br> -<input type=submit> -</form> -<P>GET based form:<br> -<form action="<?php echo $PHP_SELF ?>" method=GET> -Name of Session Attribute: -<input type=text size=20 name=dataName> -<br> -Value of Session Attribute: -<input type=text size=20 name=dataValue> -<br> -<input type=submit> -</form> -<p><a href="<?php echo $PHP_SELF ?>?dataName=foo&dataValue=bar" >URL encoded </a> -</body> -</html> -</body> -</html> diff --git a/sapi/servlet/web.xml b/sapi/servlet/web.xml deleted file mode 100644 index 9efa2fd091..0000000000 --- a/sapi/servlet/web.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> - -<!DOCTYPE web-app - PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" - "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> - -<web-app> - <servlet> - <servlet-name> - php - </servlet-name> - <servlet-class> - net.php.servlet - </servlet-class> - </servlet> - <servlet-mapping> - <servlet-name> - php - </servlet-name> - <url-pattern> - *.php - </url-pattern> - </servlet-mapping> - - <servlet> - <servlet-name> - php-formatter - </servlet-name> - <servlet-class> - net.php.formatter - </servlet-class> - </servlet> - <servlet-mapping> - <servlet-name> - php-formatter - </servlet-name> - <url-pattern> - *.phps - </url-pattern> - </servlet-mapping> -</web-app> diff --git a/sapi/thttpd/Makefile.in b/sapi/thttpd/Makefile.in deleted file mode 100644 index 9edad0d7aa..0000000000 --- a/sapi/thttpd/Makefile.in +++ /dev/null @@ -1,5 +0,0 @@ - -LTLIBRARY_NAME = libsapi.la -LTLIBRARY_SOURCES = thttpd.c - -include $(top_srcdir)/build/ltlib.mk diff --git a/sapi/thttpd/README b/sapi/thttpd/README deleted file mode 100644 index 7dc32d8a64..0000000000 --- a/sapi/thttpd/README +++ /dev/null @@ -1,53 +0,0 @@ -README FOR THTTPD MODULE (by Sascha Schumann) ($Date$) - - This is a SAPI module for PHP 4.0 supporting thttpd, the tiny, - turbo, throttling HTTP server by Jef Poskanzer. - - The module contains a patch against version 2.10 of thttpd. The patch - adds hooks to thttpd to call PHP, if a filename matches *.php. This - patch will be applied when you install PHP. - - While functional, this module exists primarily to demonstrate the ability - of PHP to work in almost every web server environment. - -REQUIRED DOWNLOADS - - 1. thttpd 2.xx - - Full Distribution: - http://www.acme.com/software/thttpd/ - - 2. PHP 4.0.x - - Beta Versions: - http://www.php.net/version4/ - - Snapshots: - http://va.php.net/~sas/snapshots/ - - -BUILD INSTRUCTIONS - - 1. Extract software packages - - $ gunzip -c thttpd-2.xx.tar.gz | tar xf - - $ gunzip -c php-*.tar.gz | tar xf - - - 2. Prepare PHP - - $ cd php-* - $ ./configure \ - --with-thttpd=../thttpd-2.xx \ - <further PHP options> - $ make install - $ cd .. - - You can see the list of valid PHP options by executing - - $ ./configure --help - - 3. Configure, compile, install thttpd - - Now follow the thttpd instructions. The Makefile template of - thttpd was changed to automatically use the components - required by PHP. diff --git a/sapi/thttpd/config.m4 b/sapi/thttpd/config.m4 deleted file mode 100644 index 50d37a87e3..0000000000 --- a/sapi/thttpd/config.m4 +++ /dev/null @@ -1,20 +0,0 @@ -AC_ARG_WITH(thttpd, -[ --with-thttpd=SRCDIR],[ - test -d $withval || AC_MSG_RESULT(thttpd directory does not exist ($withval)) - AC_EXPAND_PATH($withval, THTTPD) - INSTALL_IT="\ - echo 'PHP_LIBS = -L. -lphp4 \$(PHP_LIBS) \$(EXTRA_LIBS)' > $THTTPD/php_makefile; \ - echo 'PHP_LDFLAGS = \$(NATIVE_RPATHS) \$(PHP_LDFLAGS)' >> $THTTPD/php_makefile; \ - cp $abs_srcdir/sapi/thttpd/php_thttpd.h $SAPI_STATIC $THTTPD;\ - test -f $THTTPD/php_patched || \ - (cd $THTTPD && patch < $abs_srcdir/sapi/thttpd/thttpd_patch && touch php_patched)" - PHP_THTTPD="yes, using $THTTPD" - AC_ADD_INCLUDE($THTTPD) - PHP_BUILD_STATIC - PHP_SAPI=thttpd -],[ - PHP_THTTPD="no" -]) - -AC_MSG_CHECKING(for thttpd) -AC_MSG_RESULT($PHP_THTTPD) diff --git a/sapi/thttpd/php.sym b/sapi/thttpd/php.sym deleted file mode 100644 index 2214d3964d..0000000000 --- a/sapi/thttpd/php.sym +++ /dev/null @@ -1,3 +0,0 @@ -thttpd_php_request -thttpd_php_init -thttpd_php_shutdown diff --git a/sapi/thttpd/php_thttpd.h b/sapi/thttpd/php_thttpd.h deleted file mode 100644 index e2e070330f..0000000000 --- a/sapi/thttpd/php_thttpd.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann <sascha@schumann.cx> | - +----------------------------------------------------------------------+ -*/ - -#ifndef PHP_THTTPD_H -#define PHP_THTTPD_H - -#include <sys/types.h> -#include <sys/stat.h> -#include <libhttpd.h> - -void thttpd_php_shutdown(void); -void thttpd_php_init(void); -off_t thttpd_php_request(httpd_conn *hc); - -#endif diff --git a/sapi/thttpd/thttpd.c b/sapi/thttpd/thttpd.c deleted file mode 100644 index 4692db29ae..0000000000 --- a/sapi/thttpd/thttpd.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Sascha Schumann <sascha@schumann.cx> | - +----------------------------------------------------------------------+ -*/ - - -#include "php.h" -#include "SAPI.h" -#include "php_main.h" -#include "php_thttpd.h" -#include "version.h" - -typedef struct { - httpd_conn *hc; - int post_off; -} php_thttpd_globals; - -static php_thttpd_globals thttpd_globals; - -#define TLS_D -#define TLS_DC -#define TLS_C -#define TLS_CC -#define TG(v) (thttpd_globals.v) -#define TLS_FETCH() - -static int sapi_thttpd_ub_write(const char *str, uint str_length) -{ - TLS_FETCH(); - - return send(TG(hc)->conn_fd, str, str_length, 0); -} - -static int sapi_thttpd_send_headers(sapi_headers_struct *sapi_headers SLS_DC) -{ - char buf[1024]; - - if (!SG(sapi_headers).http_status_line) { - snprintf(buf, 1023, "HTTP/1.0 %d Something\r\n", SG(sapi_headers).http_response_code); - send(TG(hc)->conn_fd, buf, strlen(buf), 0); - } - - return SAPI_HEADER_DO_SEND; -} - -static void sapi_thttpd_send_header(sapi_header_struct *sapi_header, void *server_context) -{ - TLS_FETCH(); - - if (sapi_header) - send(TG(hc)->conn_fd, sapi_header->header, sapi_header->header_len, 0); - send(TG(hc)->conn_fd, "\r\n", sizeof("\r\n") - 1, 0); -} - -static int sapi_thttpd_read_post(char *buffer, uint count_bytes SLS_DC) -{ - size_t read_bytes = 0, tmp; - int c; - TLS_FETCH(); - - /* to understand this, read cgi_interpose_input() in libhttpd.c */ - c = TG(hc)->read_idx - TG(hc)->checked_idx; - if (c > 0) { - read_bytes = MIN(c, count_bytes); - memcpy(buffer, TG(hc)->read_buf + TG(hc)->checked_idx, read_bytes); - TG(hc)->checked_idx += read_bytes; - count_bytes -= read_bytes; - } - - count_bytes = MIN(count_bytes, - SG(request_info).content_length - SG(read_post_bytes) - TG(post_off)); - - while (read_bytes < count_bytes) { - tmp = recv(TG(hc)->conn_fd, buffer + read_bytes, - count_bytes - read_bytes, 0); - if (tmp <= 0) - break; - read_bytes += tmp; - } - - return read_bytes; -} - -static char *sapi_thttpd_read_cookies(SLS_D) -{ - TLS_FETCH(); - - return TG(hc)->cookie; -} - -static sapi_module_struct sapi_module = { - "thttpd", - - php_module_startup, - php_module_shutdown_wrapper, - - NULL, /* activate */ - NULL, /* deactivate */ - - sapi_thttpd_ub_write, - NULL, - NULL, /* get uid */ - NULL, /* getenv */ - - php_error, - - NULL, - sapi_thttpd_send_headers, - sapi_thttpd_send_header, - sapi_thttpd_read_post, - sapi_thttpd_read_cookies, - - NULL, /* register server variables */ - NULL, /* Log message */ - - NULL, /* Block interruptions */ - NULL, /* Unblock interruptions */ - - STANDARD_SAPI_MODULE_PROPERTIES -}; - -#define BUF_SIZE 512 -#define ADD_STRING(name) \ - MAKE_STD_ZVAL(pval); \ - pval->type = IS_STRING; \ - pval->value.str.len = strlen(buf); \ - pval->value.str.val = estrndup(buf, pval->value.str.len); \ - zend_hash_update(&EG(symbol_table), name, sizeof(name), \ - &pval, sizeof(zval *), NULL) - -static void thttpd_hash_environment(void) -{ - char buf[BUF_SIZE + 1]; - zval *pval; - - buf[BUF_SIZE] = '\0'; - - strncpy(buf, SERVER_SOFTWARE, BUF_SIZE); - ADD_STRING("SERVER_SOFTWARE"); - - strncpy(buf, "CGI/1.1", BUF_SIZE); - ADD_STRING("GATEWAY_INTERFACE"); - - snprintf(buf, BUF_SIZE, "%d", TG(hc)->hs->port); - ADD_STRING("SERVER_PORT"); - - strncpy(buf, SG(request_info).request_method, BUF_SIZE); - ADD_STRING("REQUEST_METHOD"); - - strncpy(buf, SG(request_info).request_uri, BUF_SIZE); - ADD_STRING("REQUEST_URI"); - - snprintf(buf, BUF_SIZE, "/%s", TG(hc)->pathinfo); - ADD_STRING("PATH_INFO"); - - strncpy(buf, SG(request_info).path_translated, BUF_SIZE); - ADD_STRING("PATH_TRANSLATED"); - - snprintf(buf, BUF_SIZE, "/%s", TG(hc)->origfilename); - ADD_STRING("SCRIPT_NAME"); - - strncpy(buf, inet_ntoa(TG(hc)->client_addr.sa_in.sin_addr), BUF_SIZE); - ADD_STRING("REMOTE_ADDR"); - ADD_STRING("REMOTE_HOST"); - -#define CONDADD(name, field) \ - if (TG(hc)->field[0]) { \ - strncpy(buf, TG(hc)->field, BUF_SIZE); \ - ADD_STRING(#name); \ - } - - CONDADD(HTTP_REFERER, referer); - CONDADD(HTTP_USER_AGENT, useragent); - CONDADD(HTTP_ACCEPT, accept); - CONDADD(HTTP_ACCEPT_ENCODING, accepte); - CONDADD(HTTP_COOKIE, cookie); - CONDADD(CONTENT_TYPE, contenttype); - CONDADD(REMOTE_USER, remoteuser); - CONDADD(SERVER_PROTOCOL, protocol); - - if (TG(hc)->contentlength != -1) { - sprintf(buf, "%ld", (long) TG(hc)->contentlength); - ADD_STRING("CONTENT_LENGTH"); - } - - if (TG(hc)->authorization[0]) { - strcpy(buf, "Basic"); - ADD_STRING("AUTH_TYPE"); - } -} - -static void thttpd_module_main(TLS_D SLS_DC) -{ - zend_file_handle file_handle; - CLS_FETCH(); - ELS_FETCH(); - PLS_FETCH(); - - file_handle.type = ZEND_HANDLE_FILENAME; - file_handle.filename = TG(hc)->expnfilename; - file_handle.free_filename = 0; - - if (php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC) == FAILURE) { - return; - } - - thttpd_hash_environment(); - php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); - php_request_shutdown(NULL); -} - -static void thttpd_request_ctor(TLS_D SLS_DC) -{ - char *cp2; - int l; - char buf[1024]; - int offset; - size_t pathinfo_len; - size_t cwd_len; - - pathinfo_len = strlen(TG(hc)->pathinfo); - cwd_len = strlen(TG(hc)->hs->cwd); - - SG(request_info).query_string = TG(hc)->query; - - l = cwd_len + pathinfo_len + 1; - cp2 = (char *) malloc(l); - sprintf(cp2, "%s%s", TG(hc)->hs->cwd, TG(hc)->pathinfo); - SG(request_info).path_translated = cp2; - - snprintf(buf, 1023, "/%s", TG(hc)->origfilename); - SG(request_info).request_uri = strdup(buf); - SG(request_info).request_method = httpd_method_str(TG(hc)->method); - - SG(request_info).content_type = TG(hc)->contenttype; - SG(request_info).content_length = TG(hc)->contentlength; - - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; - - TG(post_off) = TG(hc)->read_idx - TG(hc)->checked_idx; - - /* avoid feeding \r\n from POST data to SAPI */ - offset = TG(post_off) - SG(request_info).content_length; - - if (offset > 0) { - TG(post_off) -= offset; - TG(hc)->read_idx -= offset; - } -} - -static void thttpd_request_dtor(TLS_D SLS_DC) -{ - free(SG(request_info).request_uri); - free(SG(request_info).path_translated); -} - -off_t thttpd_php_request(httpd_conn *hc) -{ - SLS_FETCH(); - TLS_FETCH(); - - TG(hc) = hc; - - thttpd_request_ctor(TLS_C SLS_CC); - - thttpd_module_main(TLS_C SLS_CC); - - thttpd_request_dtor(TLS_C SLS_CC); - - return 0; -} - -void thttpd_php_init(void) -{ - sapi_startup(&sapi_module); - sapi_module.startup(&sapi_module); - SG(server_context) = (void *) 1; -} - -void thttpd_php_shutdown(void) -{ - sapi_module.shutdown(&sapi_module); - sapi_shutdown(); -} diff --git a/sapi/thttpd/thttpd_patch b/sapi/thttpd/thttpd_patch deleted file mode 100644 index fc9fb7d47c..0000000000 --- a/sapi/thttpd/thttpd_patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -ur thttpd-2.10/Makefile.in thttpd-2.10-php/Makefile.in ---- thttpd-2.10/Makefile.in Mon Oct 11 20:45:38 1999 -+++ thttpd-2.10-php/Makefile.in Mon Dec 20 01:37:49 1999 -@@ -46,13 +46,15 @@ - - # You shouldn't need to edit anything below here. - -+include php_makefile -+ - CC = @CC@ - CCOPT = @V_CCOPT@ - DEFS = @DEFS@ - INCLS = -I. - CFLAGS = $(CCOPT) $(DEFS) $(INCLS) --LDFLAGS = @LDFLAGS@ --LIBS = @LIBS@ -+LDFLAGS = @LDFLAGS@ $(PHP_LDFLAGS) -+LIBS = @LIBS@ $(PHP_LIBS) - NETLIBS = @V_NETLIBS@ - INSTALL = @INSTALL@ - -diff -ur thttpd-2.10/libhttpd.c thttpd-2.10-php/libhttpd.c ---- thttpd-2.10/libhttpd.c Wed Dec 15 23:22:50 1999 -+++ thttpd-2.10-php/libhttpd.c Mon Dec 20 01:05:47 1999 -@@ -75,6 +75,8 @@ - #include "match.h" - #include "tdate_parse.h" - -+#include "php_thttpd.h" -+ - #ifndef STDIN_FILENO - #define STDIN_FILENO 0 - #endif -@@ -211,7 +213,11 @@ - free( (void*) hs->cwd ); - if ( hs->cgi_pattern != (char*) 0 ) - free( (void*) hs->cgi_pattern ); -+ if ( hs->php_pattern != (char*) 0 ) -+ free( (void *) hs->php_pattern ); - free( (void*) hs ); -+ -+ thttpd_php_shutdown(); - } - - -@@ -244,6 +250,7 @@ - else - hs->hostname = strdup( hostname ); - hs->port = port; -+ hs->php_pattern = strdup("*.php"); - if ( cgi_pattern == (char*) 0 ) - hs->cgi_pattern = (char*) 0; - else -@@ -272,6 +279,8 @@ - hs->no_symlinks = no_symlinks; - hs->vhost = vhost; - -+ thttpd_php_init(); -+ - /* Create socket. */ - hs->listen_fd = socket( AF_INET, SOCK_STREAM, 0 ); - if ( hs->listen_fd < 0 ) -@@ -3129,6 +3138,11 @@ - ( hc->sb.st_mode & S_IXOTH ) && - match( hc->hs->cgi_pattern, hc->expnfilename ) ) - return cgi( hc ); -+ -+ if ( hc->hs->php_pattern != (char*) 0 && -+ match( hc->hs->php_pattern, hc->expnfilename)) { -+ return thttpd_php_request( hc ); -+ } - - /* It's not CGI. If it's executable or there's pathinfo, someone's - ** trying to either serve or run a non-CGI file as CGI. Either case -diff -ur thttpd-2.10/libhttpd.h thttpd-2.10-php/libhttpd.h ---- thttpd-2.10/libhttpd.h Wed Dec 8 19:53:34 1999 -+++ thttpd-2.10-php/libhttpd.h Mon Dec 20 01:06:09 1999 -@@ -57,6 +57,7 @@ - struct in_addr host_addr; - int port; - char* cgi_pattern; -+ char* php_pattern; - char* cwd; - int listen_fd; - FILE* logfp; |