]> granicus.if.org Git - php/commitdiff
(NSAPI SAPI) Fixed _SERVER[] variables (all headers included) to be now similar to...
authorUwe Schindler <thetaphi@php.net>
Fri, 7 Feb 2003 18:57:40 +0000 (18:57 +0000)
committerUwe Schindler <thetaphi@php.net>
Fri, 7 Feb 2003 18:57:40 +0000 (18:57 +0000)
sapi/nsapi/nsapi.c

index a6d04abef8b29ccba6575aa1dbf1cf0263fab838..ee05018efbc41fd8b29d2e99fd591fc7305f28ea 100644 (file)
@@ -13,6 +13,7 @@
    | license@php.net so we can mail you a copy immediately.               |
    +----------------------------------------------------------------------+
    | Author: Jayakumar Muthukumarasamy <jk@kasenna.com>                   |
+   |         Uwe Schindler <uwe@thetaphi.de>                              |
    +----------------------------------------------------------------------+
 */
 
@@ -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 @@ typedef struct 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_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 @@ static nsapi_equiv nsapi_reqpb[] = {
        { "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 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" }
+       { "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 @@ static void
 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 @@ sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_DC)
                        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 @@ sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_DC)
                }
        }
 
+       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 @@ sapi_nsapi_register_server_variables(zval *track_vars_array TSRMLS_DC)
                        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);
 }
 
@@ -380,37 +439,22 @@ static sapi_module_struct nsapi_sapi_module = {
        sapi_nsapi_register_server_variables,   /* register server variables */
        nsapi_log_message,                      /* 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);
-}
-
 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),
@@ -449,7 +493,7 @@ nsapi_request_dtor(NSLS_D TSRMLS_DC)
        nsapi_free(SG(request_info).content_type);
 }
 
-int 
+int
 nsapi_module_main(NSLS_D TSRMLS_DC)
 {
        zend_file_handle file_handle;
@@ -478,7 +522,7 @@ nsapi_module_main(NSLS_D TSRMLS_DC)
        return SUCCESS;
 }
 
-void NSAPI_PUBLIC 
+void NSAPI_PUBLIC
 php4_close(void *vparam)
 {
        if (nsapi_sapi_module.shutdown) {
@@ -542,7 +586,7 @@ php4_execute(pblock *pb, Session *sn, Request *rq)
 /              <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