+Changes with nginx 0.7.38 23 Feb 2009
+
+ *) Feature: authentication failures logging.
+
+ *) Bugfix: name/password in auth_basic_user_file were ignored after odd
+ number of empty lines.
+ Thanks to Alexander Zagrebin.
+
+ *) Bugfix: a segmentation fault occurred in a master process, if long
+ path was used in unix domain socket; the bug had appeared in 0.7.36.
+
+
Changes with nginx 0.7.37 21 Feb 2009
- *) Bugfix: directive using upstreams did not work; the bug had appeared
- in 0.7.36.
+ *) Bugfix: directives using upstreams did not work; the bug had
+ appeared in 0.7.36.
Changes with nginx 0.7.36 21 Feb 2009
+éÚÍÅÎÅÎÉÑ × nginx 0.7.38 23.02.2009
+
+ *) äÏÂÁ×ÌÅÎÉÅ: ÌÏÇÇÉÒÏ×ÁÎÉÅ ÏÛÉÂÏË ÁÕÔÅÎÔÉÆÉËÁÃÉÉ.
+
+ *) éÓÐÒÁ×ÌÅÎÉÅ: ÉÍÑ/ÐÁÒÏÌØ, ÚÁÄÁÎÎÙÅ × auth_basic_user_file,
+ ÉÇÎÏÒÉÒÏ×ÁÌÉÓØ ÐÏÓÌÅ ÎÅÞ£ÔÎÏÇÏ ÞÉÓÌÁ ÐÕÓÔÙÈ ÓÔÒÏË.
+ óÐÁÓÉÂÏ áÌÅËÓÁÎÄÒÕ úÁÇÒÅÂÉÎÕ.
+
+ *) éÓÐÒÁ×ÌÅÎÉÅ: ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÄÌÉÎÎÏÇÏ ÐÕÔÉ × unix domain ÓÏËÅÔÅ ×
+ ÇÌÁ×ÎÏÍ ÐÒÏÃÅÓÓÅ ÐÒÏÉÓÈÏÄÉÌ segmentation fault; ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ ×
+ 0.7.36.
+
+
éÚÍÅÎÅÎÉÑ × nginx 0.7.37 21.02.2009
*) éÓÐÒÁ×ÌÅÎÉÅ: ÄÉÒÅËÔÉ×Ù, ÉÓÐÏÌØÚÕÀÝÉÅ upstream'Ù, ÎÅ ÒÁÂÏÔÁÌÉ; ÏÛÉÂËÁ
#define _NGINX_H_INCLUDED_
-#define NGINX_VERSION "0.7.37"
+#define NGINX_VERSION "0.7.38"
#define NGINX_VER "nginx/" NGINX_VERSION
#define NGINX_VAR "NGINX"
/*
* TODO: autoconfigure NGX_SOCKADDRLEN as
* sizeof(struct sockaddr_storage)
+ * sizeof(struct sockaddr_un)
* sizeof(struct sockaddr_in6)
* sizeof(struct sockaddr_in)
*/
-#if (NGX_HAVE_INET6)
-#define NGX_SOCKADDRLEN sizeof(struct sockaddr_in6)
+#if (NGX_HAVE_UNIX_DOMAIN)
+#define NGX_SOCKADDRLEN sizeof(struct sockaddr_un)
#else
-#define NGX_SOCKADDRLEN sizeof(struct sockaddr_in)
+#define NGX_SOCKADDRLEN 512
#endif
rc = ngx_http_auth_basic_user(r);
if (rc == NGX_DECLINED) {
+
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "no user/password was provided for basic authentication");
+
return ngx_http_auth_basic_set_realm(r, &alcf->realm);
}
switch (state) {
case sw_login:
- if (login == 0 && buf[i] == '#') {
- state = sw_skip;
- break;
+ if (login == 0) {
+
+ if (buf[i] == '#' || buf[i] == CR) {
+ state = sw_skip;
+ break;
+ }
+
+ if (buf[i] == LF) {
+ break;
+ }
}
if (buf[i] != r->headers_in.user.data[login]) {
return ngx_http_auth_basic_crypt_handler(r, NULL, &pwd, &alcf->realm);
}
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "user \"%V\" was not found in \"%V\"",
+ &r->headers_in.user, &alcf->user_file);
+
return ngx_http_auth_basic_set_realm(r, &alcf->realm);
}
&encrypted);
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "rc: %d user: \"%V\" salt: \"%s\"",
- rc, &r->headers_in.user, passwd->data);
+ "rc: %d user: \"%V\" salt: \"%s\"",
+ rc, &r->headers_in.user, passwd->data);
if (rc == NGX_OK) {
if (ngx_strcmp(encrypted, passwd->data) == 0) {
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"encrypted: \"%s\"", encrypted);
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "user \"%V\": password mismatch",
+ &r->headers_in.user);
+
return ngx_http_auth_basic_set_realm(r, realm);
}
HTTP_INSUFFICIENT_STORAGE
);
-our $VERSION = '0.7.37';
+our $VERSION = '0.7.38';
require XSLoader;
XSLoader::load('nginx', $VERSION);
&& !c[i].read->resolver)
{
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
- "open socket #%d left in %ui connection %s",
+ "open socket #%d left in connection %ui%s",
c[i].fd, i, ngx_debug_quit ? ", aborting" : "");
ngx_debug_point();
}