Mercurial > hg > nginx-vendor-0-8
comparison src/http/ngx_http_upstream.c @ 320:95183808f549 NGINX_0_6_4
nginx 0.6.4
*) Security: the "msie_refresh" directive allowed XSS.
Thanks to Maxim Boguk.
*) Change: the "proxy_store" and "fastcgi_store" directives were
changed.
*) Feature: the "proxy_store_access" and "fastcgi_store_access"
directives.
*) Bugfix: nginx did not work on Solaris/sparc64 if it was built by Sun
Studio.
Thanks to Andrei Nigmatulin.
*) Workaround: for Sun Studio 12.
Thanks to Jiang Hong.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 17 Jul 2007 00:00:00 +0400 |
parents | fc223117327f |
children | f7cd062ee035 |
comparison
equal
deleted
inserted
replaced
319:6ccd0af7f704 | 320:95183808f549 |
---|---|
370 | 370 |
371 cln->handler = ngx_http_upstream_cleanup; | 371 cln->handler = ngx_http_upstream_cleanup; |
372 cln->data = r; | 372 cln->data = r; |
373 u->cleanup = &cln->handler; | 373 u->cleanup = &cln->handler; |
374 | 374 |
375 u->store = (u->conf->store != 0); | 375 u->store = (u->conf->store || u->conf->store_lengths); |
376 | 376 |
377 ngx_http_upstream_connect(r, u); | 377 ngx_http_upstream_connect(r, u); |
378 } | 378 } |
379 | 379 |
380 | 380 |
2027 | 2027 |
2028 temp = &u->pipe->temp_file->file.name; | 2028 temp = &u->pipe->temp_file->file.name; |
2029 | 2029 |
2030 #if !(NGX_WIN32) | 2030 #if !(NGX_WIN32) |
2031 | 2031 |
2032 if (ngx_change_file_access(temp->data, u->conf->store) == NGX_FILE_ERROR) { | 2032 if (ngx_change_file_access(temp->data, u->conf->store_access) |
2033 == NGX_FILE_ERROR) | |
2034 { | |
2033 err = ngx_errno; | 2035 err = ngx_errno; |
2034 failed = ngx_change_file_access_n; | 2036 failed = ngx_change_file_access_n; |
2035 name = temp->data; | 2037 name = temp->data; |
2036 | 2038 |
2037 goto failed; | 2039 goto failed; |
2050 != NGX_OK) | 2052 != NGX_OK) |
2051 { | 2053 { |
2052 err = ngx_errno; | 2054 err = ngx_errno; |
2053 failed = ngx_set_file_time_n; | 2055 failed = ngx_set_file_time_n; |
2054 name = temp->data; | 2056 name = temp->data; |
2055 | 2057 |
2056 goto failed; | 2058 goto failed; |
2057 } | 2059 } |
2058 } | 2060 } |
2059 } | 2061 } |
2060 | 2062 |
2061 ngx_http_map_uri_to_path(r, &path, &root, 0); | 2063 if (u->conf->store_lengths == NULL) { |
2064 | |
2065 ngx_http_map_uri_to_path(r, &path, &root, 0); | |
2066 | |
2067 } else { | |
2068 if (ngx_http_script_run(r, &path, u->conf->store_lengths->elts, 0, | |
2069 u->conf->store_values->elts) | |
2070 == NULL) | |
2071 { | |
2072 return; | |
2073 } | |
2074 } | |
2062 | 2075 |
2063 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | 2076 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
2064 "upstream stores \"%s\" to \"%s\"", temp->data, path.data); | 2077 "upstream stores \"%s\" to \"%s\"", temp->data, path.data); |
2065 | 2078 |
2066 failed = ngx_rename_file_n; | 2079 failed = ngx_rename_file_n; |
2072 | 2085 |
2073 err = ngx_errno; | 2086 err = ngx_errno; |
2074 | 2087 |
2075 if (err == NGX_ENOENT) { | 2088 if (err == NGX_ENOENT) { |
2076 | 2089 |
2077 err = ngx_create_full_path(path.data, ngx_dir_access(u->conf->store)); | 2090 err = ngx_create_full_path(path.data, |
2078 | 2091 ngx_dir_access(u->conf->store_access)); |
2079 if (err == 0) { | 2092 if (err == 0) { |
2080 if (ngx_rename_file(temp->data, path.data) != NGX_FILE_ERROR) { | 2093 if (ngx_rename_file(temp->data, path.data) != NGX_FILE_ERROR) { |
2081 return; | 2094 return; |
2082 } | 2095 } |
2083 | 2096 |