sniper          Sun Feb  9 18:27:50 2003 EDT

  Modified files:              (Branch: PHP_4_3)
    /php4/sapi/nsapi    nsapi.c 
  Log:
  MFH: Fixed _SERVER[] variables, memleaks
  
Index: php4/sapi/nsapi/nsapi.c
diff -u php4/sapi/nsapi/nsapi.c:1.28.2.1 php4/sapi/nsapi/nsapi.c:1.28.2.2
--- php4/sapi/nsapi/nsapi.c:1.28.2.1    Tue Dec 31 11:27:13 2002
+++ php4/sapi/nsapi/nsapi.c     Sun Feb  9 18:27:50 2003
@@ -13,6 +13,7 @@
    | [EMAIL PROTECTED] so we can mail you a copy immediately.               |
    +----------------------------------------------------------------------+
    | Author: Jayakumar Muthukumarasamy <[EMAIL PROTECTED]>                   |
+   |         Uwe Schindler <[EMAIL PROTECTED]>                              |
    +----------------------------------------------------------------------+
 */
 
@@ -66,6 +67,8 @@
 #define NSLS_CC                , NSLS_C
 #define NSG(v)         (request_context->v)
 
+#define NS_BUF_SIZE 2048
+
 /*
  * ZTS needs to be defined for NSAPI to work
  */
@@ -95,17 +98,7 @@
 
 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_ACCEPT_CHARSET",        "accept-charset" },
-       { "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" }
+       { "CONTENT_TYPE",                       "content-type" }
 };
 static size_t nsapi_headers_size = sizeof(nsapi_headers)/sizeof(nsapi_headers[0]);
 
@@ -113,14 +106,14 @@
        { "QUERY_STRING",               "query" },
        { "REQUEST_LINE",               "clf-request" },
        { "REQUEST_METHOD",             "method" },
-       { "SCRIPT_NAME",                "uri" },
+       { "PHP_SELF",                   "uri" },
        { "SERVER_PROTOCOL",    "protocol" }
 };
 static size_t nsapi_reqpb_size = sizeof(nsapi_reqpb)/sizeof(nsapi_reqpb[0]);
 
 static nsapi_equiv nsapi_vars[] = {
        { "PATH_INFO",                  "path-info" },
-       { "PATH_TRANSLATED",    "path" },
+       { "SCRIPT_FILENAME",    "path" },
        { "AUTH_TYPE",                  "auth-type" },
        { "CLIENT_CERT",                "auth-cert" },
        { "REMOTE_USER",                "auth-user" }
@@ -130,10 +123,26 @@
 static nsapi_equiv nsapi_client[] = {
        { "HTTPS_KEYSIZE",              "keysize" },
        { "HTTPS_SECRETSIZE",   "secret-keysize" },
-       { "REMOTE_ADDR",                "ip" }
+       { "REMOTE_ADDR",                "ip" },
+       { "REMOTE_HOST",                "ip" }
 };
 static size_t nsapi_client_size = sizeof(nsapi_client)/sizeof(nsapi_client[0]);
 
+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);
+}
+
 static int
 sapi_nsapi_ub_write(const char *str, unsigned int str_length TSRMLS_DC)
 {
@@ -280,9 +289,10 @@
 sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_DC)
 {
        nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-       size_t i;
-       char *value;
-       char buf[128];
+       register size_t i;
+       char *value,*p;
+       char buf[NS_BUF_SIZE + 1];
+       struct pb_entry *entry;
 
        for (i = 0; i < nsapi_reqpb_size; i++) {
                value = pblock_findval(nsapi_reqpb[i].nsapi_eq, rc->rq->reqpb);
@@ -290,7 +300,7 @@
                        php_register_variable( (char *)nsapi_reqpb[i].env_var, value, 
track_vars_array TSRMLS_CC );
                }
        }
-       
+
        for (i = 0; i < nsapi_headers_size; i++) {
                value = pblock_findval(nsapi_headers[i].nsapi_eq, rc->rq->headers);
                if (value) {
@@ -298,6 +308,21 @@
                }
        }
 
+       for (i=0; i < rc->rq->headers->hsize; i++) {
+               entry=rc->rq->headers->ht[i];
+               while (entry) {
+                       snprintf(buf,NS_BUF_SIZE,"HTTP_%s",entry->param->name);
+                       for(p = buf + 5; *p; p++) {
+                               *p = toupper(*p);
+                               if(*p < 'A' || *p > 'Z') {
+                                       *p = '_';
+                               }
+                       }
+                       php_register_variable( buf, entry->param->value, 
+track_vars_array TSRMLS_CC );
+                       entry=entry->next;
+               }
+       }
+
        for (i = 0; i < nsapi_vars_size; i++) {
                value = pblock_findval(nsapi_vars[i].nsapi_eq, rc->rq->vars);
                if (value) {
@@ -311,35 +336,69 @@
                        php_register_variable( (char *)nsapi_client[i].env_var, value, 
track_vars_array TSRMLS_CC );
                }
        }
-       
-       value = session_dns(rc->sn);
-       if (value) {
+
+       if (value = session_dns(rc->sn)) {
                php_register_variable("REMOTE_HOST", value, track_vars_array TSRMLS_CC 
);
+               nsapi_free(value);
        }
+
        sprintf(buf, "%d", conf_getglobals()->Vport);
        php_register_variable("SERVER_PORT", buf, track_vars_array TSRMLS_CC );
-       if ((value = util_hostname())) {
-               php_register_variable("SERVER_NAME", value, track_vars_array TSRMLS_CC 
);
-       }       
-       php_register_variable("SERVER_URL", http_uri2url("", ""), track_vars_array 
TSRMLS_CC );
+
+       php_register_variable("SERVER_NAME", conf_getglobals()->Vserver_hostname, 
+track_vars_array TSRMLS_CC );
+
+       value = http_uri2url_dynamic("", "", rc->sn, rc->rq);
+       php_register_variable("SERVER_URL", value, track_vars_array TSRMLS_CC );
+       nsapi_free(value);
+
+       php_register_variable("SERVER_SOFTWARE", system_version(), track_vars_array 
+TSRMLS_CC );
+
        php_register_variable("HTTPS", (security_active ? "ON" : "OFF"), 
track_vars_array TSRMLS_CC );
-/*     php_register_variable("SERVER_SOFTWARE", MAGNUS_VERSION_STRING, 
track_vars_array TSRMLS_CC ); */
 
-       /*
-        * Special PHP_SELF variable.
-        */
-       value = pblock_findval("uri", rc->rq->reqpb);
-       if ( value != NULL ) {
-               php_register_variable("PHP_SELF", value, track_vars_array TSRMLS_CC );
-       }
+       php_register_variable("GATEWAY_INTERFACE", "CGI/1.1", track_vars_array 
+TSRMLS_CC );
+
+
+       /* DOCUMENT_ROOT */
+       if (value = request_translate_uri("/", rc->sn)) {
+               value[strlen(value)-1]=0;
+               php_register_variable("DOCUMENT_ROOT", value, track_vars_array 
+TSRMLS_CC );
+               nsapi_free(value);
+       }
+
+       /* PATH_TRANSLATED */
+       if (value = pblock_findval("path-info", rc->rq->vars)) {
+               if (value = request_translate_uri(value, rc->sn)) {
+                       php_register_variable("PATH_TRANSLATED", value, 
+track_vars_array TSRMLS_CC );
+                       nsapi_free(value);
+               }
+       }
+
+       /* Create full Request-URI */
+       if (value = pblock_findval("uri", rc->rq->reqpb)) {
+               snprintf(buf,NS_BUF_SIZE, "%s", value);
+               if (value = pblock_findval("query", rc->rq->reqpb)) {
+                       p=strchr(buf,0);
+                       snprintf(p, NS_BUF_SIZE-(p-buf), "?%s", value);
+               }
+               php_register_variable("REQUEST_URI", buf, track_vars_array TSRMLS_CC );
+       }
+
+       /* Create Script-Name */
+       if (value = pblock_findval("uri", rc->rq->reqpb)) {
+               snprintf(buf,NS_BUF_SIZE, "%s", value);
+               if (value = pblock_findval("path-info", rc->rq->vars)) {
+                       buf[strlen(buf) - strlen(value)]=0;
+               }
+               php_register_variable("SCRIPT_NAME", buf, track_vars_array TSRMLS_CC );
+       }
 }
-  
+
 static void
 nsapi_log_message(char *message)
 {
        TSRMLS_FETCH();
        nsapi_request_context *rc = (nsapi_request_context *)SG(server_context);
-       log_error(LOG_INFORM, "PHP_log_message", rc->sn, rc->rq,
+       log_error(LOG_INFORM, "PHP module", rc->sn, rc->rq,
                "%s", message);
 }
 
@@ -386,34 +445,16 @@
        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);
-}
-
 static void
 nsapi_request_ctor(NSLS_D TSRMLS_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 = 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 ((path_translated == NULL) && (uri != NULL))
-               path_translated = request_translate_uri(uri, NSG(sn));
+       char *path_translated=pblock_findval("path", NSG(rq)->vars);;
 
 #if defined(NSAPI_DEBUG)
        log_error(LOG_INFORM, "nsapi_request_ctor", NSG(sn), NSG(rq),
@@ -452,7 +493,7 @@
        nsapi_free(SG(request_info).content_type);
 }
 
-int 
+int
 nsapi_module_main(NSLS_D TSRMLS_DC)
 {
        zend_file_handle file_handle;
@@ -481,7 +522,7 @@
        return SUCCESS;
 }
 
-void NSAPI_PUBLIC 
+void NSAPI_PUBLIC
 php4_close(void *vparam)
 {
        if (nsapi_sapi_module.shutdown) {
@@ -545,7 +586,7 @@
 /              <Object ppath="path/to/be/authenticated/by/php/*">
 /              AuthTrans fn="php4_auth_trans"
 /*********************************************************/
-int NSAPI_PUBLIC 
+int NSAPI_PUBLIC
 php4_auth_trans(pblock * pb, Session * sn, Request * rq)
 {
        /*This is a DO NOTHING function that allows authentication information

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to