Mercurial > hg > nginx-vendor-0-7
comparison src/os/unix/ngx_files.h @ 506:b9fdcaf2062b NGINX_0_7_65
nginx 0.7.65
*) Security: now nginx/Windows ignores trailing spaces in URI.
Thanks to Dan Crowley, Core Security Technologies.
*) Security: now nginx/Windows ignores short files names.
Thanks to Dan Crowley, Core Security Technologies.
*) Change: now the "009" status code is written to an access log for
proxied HTTP/0.9 responses.
*) Change: now the default buffer size of the
"large_client_header_buffers" directive is 8K.
Thanks to Andrew Cholakian.
*) Change: now default SSL ciphers are "HIGH:!ADH:!MD5".
*) Change: now SSLv2 protocol is disabled by default.
*) Change: now $host variable value is always low case.
*) Feature: the conf/fastcgi.conf for simple FastCGI configurations.
*) Feature: now URI part is not required a "proxy_pass" directive if
variables are used.
*) Feature: the $ssl_session_id variable.
*) Bugfix: if a proxied or FastCGI request was internally redirected to
another proxied or FastCGI location, then $upstream_response_time
variable may have abnormally large value; the bug had appeared in
0.7.63.
*) Bugfix: if the "expires modified" set date in the past, then a
negative number was set in the "Cache-Control" response header
line.
Thanks to Alex Kapranoff.
*) Bugfix: nginx closed a connection if a cached response had an empty
body.
Thanks to Piotr Sikora.
*) Bugfix: nginx cached a 304 response if there was the "If-None-Match"
header line in a proxied request.
Thanks to Tim Dettrick and David Kostal.
*) Bugfix: nginx did not treat a comma as separator in the
"Cache-Control" backend response header line.
*) Bugfix: cached HTTP/0.9 responses were handled incorrectly.
*) Bugfix: nginx sent gzipped responses to clients those do not support
gzip, if "gzip_static on" and "gzip_vary off"; the bug had appeared
in 0.8.16.
*) Bugfix: nginx always added "Content-Encoding: gzip" response header
line in 304 responses sent by ngx_http_gzip_static_module.
*) Bugfix: the "!-x" operator did not work.
Thanks to Maxim Dounin.
*) Bugfix: a segmentation fault might occur in a worker process, if
limit_rate was used in HTTPS server.
Thanks to Maxim Dounin.
*) Bugfix: a segmentation fault might occur in a worker process while
$limit_rate logging.
Thanks to Maxim Dounin.
*) Bugfix: nginx did not support dates in 2038 year on 32-bit platforms;
*) Bugfix: nginx/Windows tried to delete a temporary file twice if the
file should replace an already existent file.
*) Bugfix: nginx/Windows tried to rename a temporary file twice if the
file should replace an already existent file.
*) Bugfix: nginx/Windows might not create temporary file, a cache file,
or "proxy/fastcgi_store"d file if a worker had no enough access
rights for top level directories.
*) Bugfix: in UTF-8 encoding support by "try_files" directive in
nginx/Windows.
*) Bugfix: UTF-8 encoding usage in the ngx_http_autoindex_module.
Thanks to Maxim Dounin.
*) Bugfix: the ngx_http_autoindex_module did not show the trailing
slash in links to a directory; the bug had appeared in 0.7.15.
*) Bugfix: nginx did not close a log file set by the --error-log-path
configuration option; the bug had appeared in 0.7.53.
*) Bugfix: "addition_types" directive was incorrectly named
"addtion_types".
*) Bugfix: invalid request line in $request variable was written in
access_log only if error_log was set to "info" or "debug" level.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 01 Feb 2010 00:00:00 +0000 |
parents | 89dc5654117c |
children | 68c0ae0a4959 |
comparison
equal
deleted
inserted
replaced
505:c62da3dcc544 | 506:b9fdcaf2062b |
---|---|
22 struct dirent *de; | 22 struct dirent *de; |
23 struct stat info; | 23 struct stat info; |
24 | 24 |
25 unsigned type:8; | 25 unsigned type:8; |
26 unsigned valid_info:1; | 26 unsigned valid_info:1; |
27 unsigned valid_type:1; | |
28 } ngx_dir_t; | 27 } ngx_dir_t; |
29 | 28 |
30 | 29 |
31 typedef struct { | 30 typedef struct { |
32 size_t n; | 31 size_t n; |
140 #define ngx_fd_info_n "fstat()" | 139 #define ngx_fd_info_n "fstat()" |
141 | 140 |
142 #define ngx_is_dir(sb) (S_ISDIR((sb)->st_mode)) | 141 #define ngx_is_dir(sb) (S_ISDIR((sb)->st_mode)) |
143 #define ngx_is_file(sb) (S_ISREG((sb)->st_mode)) | 142 #define ngx_is_file(sb) (S_ISREG((sb)->st_mode)) |
144 #define ngx_is_link(sb) (S_ISLNK((sb)->st_mode)) | 143 #define ngx_is_link(sb) (S_ISLNK((sb)->st_mode)) |
145 #define ngx_is_exec(sb) ((sb)->st_mode & S_IXUSR) | 144 #define ngx_is_exec(sb) (((sb)->st_mode & S_IXUSR) == S_IXUSR) |
146 #define ngx_file_access(sb) ((sb)->st_mode & 0777) | 145 #define ngx_file_access(sb) ((sb)->st_mode & 0777) |
147 #define ngx_file_size(sb) (sb)->st_size | 146 #define ngx_file_size(sb) (sb)->st_size |
148 #define ngx_file_mtime(sb) (sb)->st_mtime | 147 #define ngx_file_mtime(sb) (sb)->st_mtime |
149 #define ngx_file_uniq(sb) (sb)->st_ino | 148 #define ngx_file_uniq(sb) (sb)->st_ino |
150 | 149 |
198 #if (NGX_HAVE_D_NAMLEN) | 197 #if (NGX_HAVE_D_NAMLEN) |
199 #define ngx_de_namelen(dir) (dir)->de->d_namlen | 198 #define ngx_de_namelen(dir) (dir)->de->d_namlen |
200 #else | 199 #else |
201 #define ngx_de_namelen(dir) ngx_strlen((dir)->de->d_name) | 200 #define ngx_de_namelen(dir) ngx_strlen((dir)->de->d_name) |
202 #endif | 201 #endif |
203 #define ngx_de_info(name, dir) stat((const char *) name, &(dir)->info) | 202 |
203 static ngx_inline ngx_int_t | |
204 ngx_de_info(u_char *name, ngx_dir_t *dir) | |
205 { | |
206 dir->type = 0; | |
207 return stat((const char *) name, &dir->info); | |
208 } | |
209 | |
204 #define ngx_de_info_n "stat()" | 210 #define ngx_de_info_n "stat()" |
205 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) | 211 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) |
206 #define ngx_de_link_info_n "lstat()" | 212 #define ngx_de_link_info_n "lstat()" |
207 | 213 |
208 #if (NGX_HAVE_D_TYPE) | 214 #if (NGX_HAVE_D_TYPE) |
209 | 215 |
210 #if (NGX_LINUX) | 216 /* |
211 | 217 * some file systems (e.g. XFS on Linux and CD9660 on FreeBSD) |
212 /* XFS on Linux does not set dirent.d_type */ | 218 * do not set dirent.d_type |
219 */ | |
213 | 220 |
214 #define ngx_de_is_dir(dir) \ | 221 #define ngx_de_is_dir(dir) \ |
215 (((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode))) | 222 (((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode))) |
216 #define ngx_de_is_file(dir) \ | 223 #define ngx_de_is_file(dir) \ |
217 (((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode))) | 224 (((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode))) |
218 #define ngx_de_is_link(dir) \ | 225 #define ngx_de_is_link(dir) \ |
219 (((dir)->type) ? ((dir)->type == DT_LINK) : (S_ISLNK((dir)->info.st_mode))) | 226 (((dir)->type) ? ((dir)->type == DT_LNK) : (S_ISLNK((dir)->info.st_mode))) |
220 | |
221 #else | |
222 | |
223 #define ngx_de_is_dir(dir) ((dir)->type == DT_DIR) | |
224 #define ngx_de_is_file(dir) ((dir)->type == DT_REG) | |
225 #define ngx_de_is_link(dir) ((dir)->type == DT_LINK) | |
226 | |
227 #endif /* NGX_LINUX */ | |
228 | 227 |
229 #else | 228 #else |
230 | 229 |
231 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) | 230 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) |
232 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) | 231 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) |