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))