comparison src/os/unix/ngx_user.c @ 509:9b8c906f6e63 release-0.1.29

nginx-0.1.29-RELEASE import *) Feature: the ngx_http_ssi_module supports "include virtual" command. *) Feature: the ngx_http_ssi_module supports the condition command like 'if expr="$NAME"' and "else" and "endif" commands. Only one nested level is supported. *) Feature: the ngx_http_ssi_module supports the DATE_LOCAL and DATE_GMT variables and "config timefmt" command. *) Feature: the "ssi_ignore_recycled_buffers" directive. *) Bugfix: the "echo" command did not show the default value for the empty QUERY_STRING variable. *) Change: the ngx_http_proxy_module was rewritten. *) Feature: the "proxy_redirect", "proxy_pass_request_headers", "proxy_pass_request_body", and "proxy_method" directives. *) Feature: the "proxy_set_header" directive. The "proxy_x_var" was canceled and must be replaced with the proxy_set_header directive. *) Change: the "proxy_preserve_host" is canceled and must be replaced with the "proxy_set_header Host $host" and the "proxy_redirect off" directives, the "proxy_set_header Host $host:$proxy_port" directive and the appropriate proxy_redirect directives. *) Change: the "proxy_set_x_real_ip" is canceled and must be replaced with the "proxy_set_header X-Real-IP $remote_addr" directive. *) Change: the "proxy_add_x_forwarded_for" is canceled and must be replaced with the "proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for" directive. *) Change: the "proxy_set_x_url" is canceled and must be replaced with the "proxy_set_header X-URL http://$host:$server_port$request_uri" directive. *) Feature: the "fastcgi_param" directive. *) Change: the "fastcgi_root", "fastcgi_set_var" and "fastcgi_params" directive are canceled and must be replaced with the fastcgi_param directives. *) Feature: the "index" directive can use the variables. *) Feature: the "index" directive can be used at http and server levels. *) Change: the last index only in the "index" directive can be absolute. *) Feature: the "rewrite" directive can use the variables. *) Feature: the "internal" directive. *) Feature: the CONTENT_LENGTH, CONTENT_TYPE, REMOTE_PORT, SERVER_ADDR, SERVER_PORT, SERVER_PROTOCOL, DOCUMENT_ROOT, SERVER_NAME, REQUEST_METHOD, REQUEST_URI, and REMOTE_USER variables. *) Change: nginx now passes the invalid lines in a client request headers or a backend response header. *) Bugfix: if the backend did not transfer response for a long time and the "send_timeout" was less than "proxy_read_timeout", then nginx returned the 408 response. *) Bugfix: the segmentation fault was occurred if the backend sent an invalid line in response header; the bug had appeared in 0.1.26. *) Bugfix: the segmentation fault may occurred in FastCGI fault tolerance configuration. *) Bugfix: the "expires" directive did not remove the previous "Expires" and "Cache-Control" headers. *) Bugfix: nginx did not take into account trailing dot in "Host" header line. *) Bugfix: the ngx_http_auth_module did not work under Linux. *) Bugfix: the rewrite directive worked incorrectly, if the arguments were in a request. *) Bugfix: nginx could not be built on MacOS X.
author Igor Sysoev <igor@sysoev.ru>
date Thu, 12 May 2005 14:58:06 +0000
parents b1648294f693
children 7fa11e5c6e96
comparison
equal deleted inserted replaced
508:ca1020ce99ba 509:9b8c906f6e63
25 ngx_int_t 25 ngx_int_t
26 ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted) 26 ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
27 { 27 {
28 char *value; 28 char *value;
29 size_t len; 29 size_t len;
30 ngx_err_t err;
30 struct crypt_data cd; 31 struct crypt_data cd;
32
33 ngx_set_errno(0);
34
35 cd.initialized = 0;
31 36
32 value = crypt_r((char *) key, (char *) salt, &cd); 37 value = crypt_r((char *) key, (char *) salt, &cd);
33 38
34 if (value) { 39 err = ngx_errno;
40
41 if (err == 0) {
35 len = ngx_strlen(value); 42 len = ngx_strlen(value);
36 43
37 *encrypted = ngx_palloc(pool, len); 44 *encrypted = ngx_palloc(pool, len);
38 if (*encrypted) { 45 if (*encrypted) {
39 ngx_memcpy(*encrypted, value, len + 1); 46 ngx_memcpy(*encrypted, value, len + 1);
40 return NGX_OK; 47 return NGX_OK;
41 } 48 }
42 } 49 }
50
51 ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt_r() failed");
43 52
44 return NGX_ERROR; 53 return NGX_ERROR;
45 } 54 }
46 55
47 #else 56 #else
49 ngx_int_t 58 ngx_int_t
50 ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted) 59 ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
51 { 60 {
52 char *value; 61 char *value;
53 size_t len; 62 size_t len;
54 ngx_int_t rc; 63 ngx_err_t err;
55 64
56 #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT) 65 #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
57 66
58 /* crypt() is a time consuming funtion, so we only try to lock */ 67 /* crypt() is a time consuming funtion, so we only try to lock */
59 68
61 return NGX_AGAIN; 70 return NGX_AGAIN;
62 } 71 }
63 72
64 #endif 73 #endif
65 74
66 rc = NGX_ERROR; 75 ngx_set_errno(0);
67 76
68 value = crypt((char *) key, (char *) salt); 77 value = crypt((char *) key, (char *) salt);
69 78
70 if (value) { 79 if (value) {
71 len = ngx_strlen(value); 80 len = ngx_strlen(value);
72 81
73 *encrypted = ngx_palloc(pool, len); 82 *encrypted = ngx_palloc(pool, len);
74 if (*encrypted) { 83 if (*encrypted) {
75 ngx_memcpy(*encrypted, value, len + 1); 84 ngx_memcpy(*encrypted, value, len + 1);
76 rc = NGX_OK;
77 } 85 }
86
87 #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
88 ngx_mutex_unlock(ngx_crypt_mutex);
89 #endif
90 return NGX_OK;
78 } 91 }
92
93 err = ngx_errno;
79 94
80 #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT) 95 #if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
81 ngx_mutex_unlock(ngx_crypt_mutex); 96 ngx_mutex_unlock(ngx_crypt_mutex);
82 #endif 97 #endif
83 98
84 return rc; 99 ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt() failed");
100
101 return NGX_ERROR;
85 } 102 }
86 103
87 #endif 104 #endif
88 105
89 #endif /* NGX_CRYPT */ 106 #endif /* NGX_CRYPT */