Author: rjung Date: Wed Sep 9 18:24:13 2015 New Revision: 1702073 URL: http://svn.apache.org/r1702073 Log: IIS: Allow to overwrite empty string returned by GetServerVariable. Keep empty string in cases we are unsure, and use NULL were NULL is safe or needed.
Followup to r1701497. Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?rev=1702073&r1=1702072&r2=1702073&view=diff ============================================================================== --- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original) +++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Wed Sep 9 18:24:13 2015 @@ -445,11 +445,12 @@ static struct error_reasons { #define ISIZEOF(X) (int)sizeof(X) -#define GET_SERVER_VARIABLE_VALUE(name, place) \ +#define GET_SERVER_VARIABLE_VALUE(name, place, def) \ do { \ (place) = dup_server_value(private_data->lpEcb, \ (name), \ - &private_data->p); \ + &private_data->p, \ + def); \ } while(0) #define GET_SERVER_VARIABLE_VALUE_INT(name, place, def) \ @@ -593,7 +594,8 @@ static BOOL get_server_value(LPEXTENSION char *buf, size_t bufsz); static char *dup_server_value(LPEXTENSION_CONTROL_BLOCK lpEcb, - const char *name, jk_pool_t *p); + const char *name, jk_pool_t *p, + const char *def); static int base64_encode_cert_len(int len); @@ -3186,22 +3188,22 @@ static int init_ws_service(isapi_private s->write = iis_write; s->done = iis_done; - GET_SERVER_VARIABLE_VALUE(HTTP_URI_HEADER_NAME, s->req_uri); + GET_SERVER_VARIABLE_VALUE(HTTP_URI_HEADER_NAME, s->req_uri, NULL); if (s->req_uri == NULL) { if (JK_IS_DEBUG_LEVEL(logger)) jk_log(logger, JK_LOG_DEBUG, "No URI header value provided. Defaulting to old behaviour" ); s->query_string = private_data->lpEcb->lpszQueryString; *worker_name = DEFAULT_WORKER_NAME; - GET_SERVER_VARIABLE_VALUE("URL", s->req_uri); + GET_SERVER_VARIABLE_VALUE("URL", s->req_uri, ""); if (unescape_url(s->req_uri) < 0) { JK_TRACE_EXIT(logger); return JK_FALSE; } getparents(s->req_uri); } else { - GET_SERVER_VARIABLE_VALUE(HTTP_QUERY_HEADER_NAME, s->query_string); - GET_SERVER_VARIABLE_VALUE(HTTP_WORKER_HEADER_NAME, (*worker_name)); + GET_SERVER_VARIABLE_VALUE(HTTP_QUERY_HEADER_NAME, s->query_string, ""); + GET_SERVER_VARIABLE_VALUE(HTTP_WORKER_HEADER_NAME, (*worker_name), ""); GET_SERVER_VARIABLE_VALUE_INT(HTTP_WORKER_HEADER_INDEX, worker_index, -1); } @@ -3212,16 +3214,16 @@ static int init_ws_service(isapi_private jk_log(logger, JK_LOG_DEBUG, "Reading extension header %s: %s", HTTP_QUERY_HEADER_NAME, s->query_string); } - GET_SERVER_VARIABLE_VALUE("AUTH_TYPE", s->auth_type); - GET_SERVER_VARIABLE_VALUE("REMOTE_USER", s->remote_user); - GET_SERVER_VARIABLE_VALUE("SERVER_PROTOCOL", s->protocol); - GET_SERVER_VARIABLE_VALUE("REMOTE_HOST", s->remote_host); - GET_SERVER_VARIABLE_VALUE("REMOTE_ADDR", s->remote_addr); - GET_SERVER_VARIABLE_VALUE("REMOTE_PORT", s->remote_port); - GET_SERVER_VARIABLE_VALUE("SERVER_NAME", s->server_name); - GET_SERVER_VARIABLE_VALUE("LOCAL_ADDR", s->local_addr); + GET_SERVER_VARIABLE_VALUE("AUTH_TYPE", s->auth_type, NULL); + GET_SERVER_VARIABLE_VALUE("REMOTE_USER", s->remote_user, NULL); + GET_SERVER_VARIABLE_VALUE("SERVER_PROTOCOL", s->protocol, ""); + GET_SERVER_VARIABLE_VALUE("REMOTE_HOST", s->remote_host, ""); + GET_SERVER_VARIABLE_VALUE("REMOTE_ADDR", s->remote_addr, ""); + GET_SERVER_VARIABLE_VALUE("REMOTE_PORT", s->remote_port, ""); + GET_SERVER_VARIABLE_VALUE("SERVER_NAME", s->server_name, ""); + GET_SERVER_VARIABLE_VALUE("LOCAL_ADDR", s->local_addr, ""); GET_SERVER_VARIABLE_VALUE_INT("SERVER_PORT", s->server_port, 80); - GET_SERVER_VARIABLE_VALUE("SERVER_SOFTWARE", s->server_software); + GET_SERVER_VARIABLE_VALUE("SERVER_SOFTWARE", s->server_software, ""); GET_SERVER_VARIABLE_VALUE_INT("SERVER_PORT_SECURE", s->is_ssl, 0); s->method = private_data->lpEcb->lpszMethod; @@ -3317,7 +3319,7 @@ static int init_ws_service(isapi_private unsigned int num_of_vars = 0; for (i = 0; i < 9; i++) { - GET_SERVER_VARIABLE_VALUE(ssl_env_names[i], ssl_env_values[i]); + GET_SERVER_VARIABLE_VALUE(ssl_env_names[i], ssl_env_values[i], NULL); if (ssl_env_values[i]) { num_of_vars++; } @@ -3373,7 +3375,7 @@ static int init_ws_service(isapi_private } } - GET_SERVER_VARIABLE_VALUE(ALL_HEADERS, all_headers); + GET_SERVER_VARIABLE_VALUE(ALL_HEADERS, all_headers, NULL); if (!all_headers) { JK_TRACE_EXIT(logger); return JK_FALSE; @@ -3554,15 +3556,16 @@ static BOOL get_server_value(LPEXTENSION } static char *dup_server_value(LPEXTENSION_CONTROL_BLOCK lpEcb, - const char *name, jk_pool_t *p) + const char *name, jk_pool_t *p, + const char *def) { DWORD sz = HDR_BUFFER_SIZE; char buf[HDR_BUFFER_SIZE]; char *dp; if (lpEcb->GetServerVariable(lpEcb->ConnID, (LPSTR)name, buf, &sz)) { - if (sz == 0) { - return NULL; + if (sz <= 1) { + return def == NULL ? NULL : jk_pool_strdup(p, def); } return jk_pool_strdup(p, buf); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org