Re: NSAPI Modifications for iPlanet/NES 4.1
| From: | Andi Gutmans | Date: | Thu, 01 Mar 2001 23:55:51 +0000 |
| Subject: | Re: NSAPI Modifications for iPlanet/NES 4.1 | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-47741@lists.php.net to get a copy of this message | ||
Can you please send it as an attachment and I'll apply it. (It would also be good if someone who is familar with the nsapi extension to take a look at the patch).
BTW what are MALLOC() and FREE()?
Andi
At 05:14 PM 3/1/2001 -0600, Andrew Johnson wrote:
Someone said they'd commit the following patch to sapi/nsapi/nsapi.c in CVS for me, but there's been no action from him so I'm posting it here in the hope that someone else will oblige. Hope it's not too late for the 4.0.5 release. I've tested 4.0.4pl1 with this patch under both NES 3.6 and iPlanet 4.1. It fixes problems that prevent the NSAPI interface from working due to Null or empty variables (setting any of the HTTP_SERVER_VARS to an empty string causes phpinfo() to silently exit prematurely). - Andrew -- Every great idea appears crazy to start with.--- nsapi.c.orig Thu Feb 8 17:15:55 2001+++ nsapi.c Fri Feb 9 14:10:00 2001@@ -94,15 +94,16 @@ } nsapi_equiv; static nsapi_equiv nsapi_headers[] = {- { "CONTENT_LENGTH", "content-length" }, - { "CONTENT_TYPE", "content-type" }, - { "HTTP_ACCEPT", "accept" }, + { "CONTENT_LENGTH", "content-length" }, + { "CONTENT_TYPE", "content-type" }, + { "HTTP_ACCEPT", "accept" }, { "HTTP_ACCEPT_ENCODING", "accept-encoding" }, { "HTTP_ACCEPT_LANGUAGE", "accept-language" }, + { "HTTP_ACCEPT_CHARSET", "accept-charset" }, { "HTTP_AUTHORIZATION", "authorization" }, - { "HTTP_COOKIE", "cookie" }, + { "HTTP_COOKIE", "cookie" }, { "HTTP_IF_MODIFIED_SINCE", "if-modified-since" }, - { "HTTP_REFERER", "referer" }, + { "HTTP_REFERER", "referer" }, { "HTTP_USER_AGENT", "user-agent" }, { "HTTP_USER_DEFINED", "user-defined" }}; @@ -113,20 +114,22 @@{ "REQUEST_LINE", "clf-request" }, { "REQUEST_METHOD", "method" }, { "SCRIPT_NAME", "uri" }, - { "SCRIPT_PROTOCOL", "protocol" } + { "SERVER_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" }, + { "PATH_TRANSLATED", "path" }, + { "AUTH_TYPE", "auth-type" }, + { "CLIENT_CERT", "auth-cert" }, { "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" }, + { "HTTPS_SECRETSIZE", "secret-keysize" }, { "REMOTE_ADDR", "ip" }}; static size_t nsapi_client_size = sizeof(nsapi_client)/sizeof(nsapi_client[0]); @@ -279,47 +282,66 @@ {nsapi_request_context *rc = (nsapi_request_context *)SG(server_context); size_t i; - char *value = NULL; + char *value; 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; + value = pblock_findval(nsapi_reqpb[i].nsapi_eq, rc->rq->reqpb); + if (value) { + php_register_variable( (char *)nsapi_reqpb[i].env_var, value, track_vars_array ELS_CC PLS_CC ); } - 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; + value = pblock_findval(nsapi_headers[i].nsapi_eq, rc->rq->headers); + if (value) { + php_register_variable( (char *)nsapi_headers[i].env_var, value, track_vars_array ELS_CC PLS_CC ); } - 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; + value = pblock_findval(nsapi_vars[i].nsapi_eq, rc->rq->vars); + if (value) { + php_register_variable( (char *)nsapi_vars[i].env_var, value, track_vars_array ELS_CC PLS_CC ); } - 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; + value = pblock_findval(nsapi_client[i].nsapi_eq, rc->sn->client); + if (value) { + php_register_variable( (char *)nsapi_client[i].env_var, value, track_vars_array ELS_CC PLS_CC ); } - php_register_variable( (char *)nsapi_client[i].env_var, value, track_vars_array ELS_CC PLS_CC ); }++ value = session_dns(rc->sn); + if (value) { + php_register_variable("REMOTE_HOST", value, track_vars_array ELS_CC PLS_CC ); + } + sprintf(buf, "%d", conf_getglobals()->Vport); + php_register_variable("SERVER_PORT", buf, track_vars_array ELS_CC PLS_CC ); + php_register_variable("SERVER_NAME", util_hostname(), track_vars_array ELS_CC PLS_CC ); + php_register_variable("SERVER_URL", http_uri2url("", ""), track_vars_array ELS_CC PLS_CC ); + php_register_variable("HTTPS", (security_active ? "ON" : "OFF"), track_vars_array ELS_CC PLS_CC ); +/* php_register_variable("SERVER_SOFTWARE", MAGNUS_VERSION_STRING, 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 ); + value = pblock_findval("uri", rc->rq->reqpb); + if ( value != NULL ) { + php_register_variable("PHP_SELF", value, track_vars_array ELS_CC PLS_CC ); }} +static void +nsapi_log_message(char *message) +{+ SLS_FETCH(); + nsapi_request_context *rc = (nsapi_request_context *)SG(server_context); + log_error(LOG_INFORM, "PHP_log_message", rc->sn, rc->rq, + "%s", message);+} + static sapi_module_struct sapi_module = {"nsapi", /* name */ "NSAPI", /* pretty name */@@ -345,7 +367,7 @@sapi_nsapi_read_cookies, /* read Cookies */sapi_nsapi_register_server_variables, /* register server variables */ - NULL, /* Log message */ + nsapi_log_message, /* Log message */NULL, /* Block interruptions */ NULL, /* Unblock interruptions */@@ -357,7 +379,7 @@ nsapi_strdup(char *str) {if (str != NULL) - return strdup(str); + return STRDUP(str); return NULL;} @@ -365,78 +387,7 @@ 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); + FREE(addr);} static void @@ -445,12 +396,12 @@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 *path_translated = pblock_findval("path", NSG(rq)->vars); 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) + if ((path_translated == NULL) && (uri != NULL)) path_translated = request_translate_uri(uri, NSG(sn));#if defined(NSAPI_DEBUG) @@ -472,7 +423,7 @@ #endifSG(request_info).query_string = nsapi_strdup(query_string); - SG(request_info).request_uri = nsapi_strdup(path_info); + SG(request_info).request_uri = nsapi_strdup(uri); 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);@@ -514,17 +465,13 @@"Parsing [%s]", SG(request_info).path_translated);#endif -#if 0- result = php_request_startup(CLS_C ELS_CC PLS_CC SLS_CC); - if (result == FAILURE) { - return FAILURE; - }-#endif -- nsapi_hash_environment(NSLS_C SLS_CC); php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC); php_request_shutdown(NULL);+#if defined(NSAPI_DEBUG)+ log_error(LOG_INFORM, "nsapi_module_main", NSG(sn), NSG(rq), + "PHP request finished Ok");+#endifreturn SUCCESS;} @@ -560,7 +507,7 @@SLS_FETCH();- request_context = (nsapi_request_context *)malloc(sizeof(nsapi_request_context)); + request_context = (nsapi_request_context *)MALLOC(sizeof(nsapi_request_context)); request_context->pb = pb; request_context->sn = sn; request_context->rq = rq;@@ -572,7 +519,7 @@retval = nsapi_module_main(NSLS_C SLS_CC); nsapi_request_dtor(NSLS_C SLS_CC);- free(request_context); + FREE(request_context);return (retval == SUCCESS) ? REQ_PROCEED : REQ_EXIT;} -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe@lists.php.net For additional commands, e-mail: php-dev-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net