summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES10
-rw-r--r--CHANGES.ru10
-rw-r--r--auto/options6
-rwxr-xr-xconfigure2
-rw-r--r--src/core/nginx.c4
-rw-r--r--src/core/nginx.h4
-rw-r--r--src/core/ngx_cpuinfo.c8
-rw-r--r--src/core/ngx_log.c4
-rw-r--r--src/core/ngx_log.h2
-rw-r--r--src/http/modules/ngx_http_proxy_module.c6
-rw-r--r--src/http/modules/perl/nginx.pm2
-rw-r--r--src/http/ngx_http_core_module.c14
-rw-r--r--src/http/ngx_http_postpone_filter_module.c2
-rw-r--r--src/mail/ngx_mail.h13
-rw-r--r--src/mail/ngx_mail_auth_http_module.c1
-rw-r--r--src/mail/ngx_mail_handler.c9
-rw-r--r--src/mail/ngx_mail_imap_handler.c10
-rw-r--r--src/mail/ngx_mail_parse.c4
-rw-r--r--src/mail/ngx_mail_pop3_handler.c10
-rw-r--r--src/mail/ngx_mail_smtp_handler.c10
20 files changed, 101 insertions, 30 deletions
diff --git a/CHANGES b/CHANGES
index 066b0c708..fb43fa03b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,14 @@
+Changes with nginx 0.6.37 18 May 2009
+
+ *) Feature: Microsoft specific "AUTH LOGIN with User Name" mode support
+ in mail proxy server.
+ Thanks to Maxim Dounin.
+
+ *) Bugfix: nginx could not be built on platforms different from i386,
+ amd64, sparc, and ppc; the bug had appeared in 0.6.36.
+
+
Changes with nginx 0.6.36 02 Apr 2009
*) Change: now the "Invalid argument" error returned by
diff --git a/CHANGES.ru b/CHANGES.ru
index 6c4a02ae3..2172d11c7 100644
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,4 +1,14 @@
+Изменения в nginx 0.6.37 18.05.2009
+
+ *) Добавление: поддержка Microsoft-специфичного режима
+ "AUTH LOGIN with User Name" в почтовом прокси-сервере.
+ Спасибо Максиму Дунину.
+
+ *) Исправление: nginx не собирался на платформах, отличных от i386,
+ amd64, sparc и ppc; ошибка появилась в 0.6.36.
+
+
Изменения в nginx 0.6.36 02.04.2009
*) Изменение: ошибка "Invalid argument", возвращаемая
diff --git a/auto/options b/auto/options
index 268ece99c..8a1b8b25e 100644
--- a/auto/options
+++ b/auto/options
@@ -119,9 +119,12 @@ NGX_GOOGLE_PERFTOOLS=NO
NGX_CPU_CACHE_LINE=
+opt=
for option
do
+ opt="$opt `echo $option | sed -e \"s/\(--[^=]*=\)\(.* .*\)/\1'\2'/\"`"
+
case "$option" in
-*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
*) value="" ;;
@@ -248,6 +251,9 @@ do
done
+NGX_CONFIGURE="$opt"
+
+
if [ $help = yes ]; then
cat << END
diff --git a/configure b/configure
index 00a7f4872..8cef6df36 100755
--- a/configure
+++ b/configure
@@ -3,8 +3,6 @@
# Copyright (C) Igor Sysoev
-NGX_CONFIGURE=`echo $@ | sed 's/"/\\\\"/g'`
-
. auto/options
. auto/init
. auto/sources
diff --git a/src/core/nginx.c b/src/core/nginx.c
index 28624db76..05d26eefc 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -261,8 +261,8 @@ main(int argc, char *const *argv)
}
#endif
- p = "configure arguments: " NGX_CONFIGURE CRLF;
- n = sizeof("configure arguments :" NGX_CONFIGURE CRLF) - 1;
+ p = "configure arguments:" NGX_CONFIGURE CRLF;
+ n = sizeof("configure arguments:" NGX_CONFIGURE CRLF) - 1;
if (ngx_write_fd(ngx_stderr_fileno, p, n) != n) {
return 1;
diff --git a/src/core/nginx.h b/src/core/nginx.h
index ba51d4ac3..14458bf9f 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,8 +8,8 @@
#define _NGINX_H_INCLUDED_
-#define nginx_version 006036
-#define NGINX_VERSION "0.6.36"
+#define nginx_version 006037
+#define NGINX_VERSION "0.6.37"
#define NGINX_VER "nginx/" NGINX_VERSION
#define NGINX_VAR "NGINX"
diff --git a/src/core/ngx_cpuinfo.c b/src/core/ngx_cpuinfo.c
index 68eb094c9..39a6b05a0 100644
--- a/src/core/ngx_cpuinfo.c
+++ b/src/core/ngx_cpuinfo.c
@@ -72,7 +72,7 @@ void
ngx_cpuinfo(void)
{
u_char *vendor;
- uint32_t vbuf[5], cpu[4];
+ uint32_t vbuf[5], cpu[4], model;
vbuf[0] = 0;
vbuf[1] = 0;
@@ -103,8 +103,10 @@ ngx_cpuinfo(void)
case 6:
ngx_cacheline_size = 32;
- if ((cpu[0] & 0xf0) >= 0xd0) {
- /* Intel Core */
+ model = ((cpu[0] & 0xf0000) >> 8) | (cpu[0] & 0xf0);
+
+ if (model >= 0xd0) {
+ /* Intel Core, Core 2, Atom */
ngx_cacheline_size = 64;
}
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index a9221db6e..6eab24ad7 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -184,9 +184,9 @@ ngx_log_debug_core(ngx_log_t *log, ngx_err_t err, const char *fmt, ...)
void
-ngx_log_abort(ngx_err_t err, const char *text)
+ngx_log_abort(ngx_err_t err, const char *text, void *param)
{
- ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, err, text);
+ ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, err, text, param);
}
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index 1fd1ad8ad..73de6fddc 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -198,7 +198,7 @@ void ngx_cdecl ngx_log_debug_core(ngx_log_t *log, ngx_err_t err,
ngx_log_t *ngx_log_init(void);
ngx_log_t *ngx_log_create_errlog(ngx_cycle_t *cycle, ngx_array_t *args);
char *ngx_set_error_log_levels(ngx_conf_t *cf, ngx_log_t *log);
-void ngx_log_abort(ngx_err_t err, const char *text);
+void ngx_log_abort(ngx_err_t err, const char *text, void *param);
extern ngx_module_t ngx_errlog_module;
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index f5c6ceeaf..23e07d324 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -1899,6 +1899,12 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
conf->proxy_values = prev->proxy_values;
}
+#if (NGX_HTTP_SSL)
+ if (conf->upstream.ssl == NULL) {
+ conf->upstream.ssl = prev->upstream.ssl;
+ }
+#endif
+
ngx_conf_merge_uint_value(conf->headers_hash_max_size,
prev->headers_hash_max_size, 512);
diff --git a/src/http/modules/perl/nginx.pm b/src/http/modules/perl/nginx.pm
index df1a83724..768628be6 100644
--- a/src/http/modules/perl/nginx.pm
+++ b/src/http/modules/perl/nginx.pm
@@ -47,7 +47,7 @@ our @EXPORT = qw(
HTTP_INSUFFICIENT_STORAGE
);
-our $VERSION = '0.6.36';
+our $VERSION = '0.6.37';
require XSLoader;
XSLoader::load('nginx', $VERSION);
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index cfc649299..c312a05f7 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -1557,16 +1557,24 @@ ngx_http_send_header(ngx_http_request_t *r)
ngx_int_t
ngx_http_output_filter(ngx_http_request_t *r, ngx_chain_t *in)
{
- ngx_int_t rc;
+ ngx_int_t rc;
+ ngx_connection_t *c;
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ c = r->connection;
+
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http output filter \"%V?%V\"", &r->uri, &r->args);
rc = ngx_http_top_body_filter(r, in);
if (rc == NGX_ERROR) {
+
+ if (c->destroyed) {
+ return NGX_DONE;
+ }
+
/* NGX_ERROR may be returned by any filter */
- r->connection->error = 1;
+ c->error = 1;
}
return rc;
diff --git a/src/http/ngx_http_postpone_filter_module.c b/src/http/ngx_http_postpone_filter_module.c
index ca5cb9e63..1088704c9 100644
--- a/src/http/ngx_http_postpone_filter_module.c
+++ b/src/http/ngx_http_postpone_filter_module.c
@@ -216,7 +216,7 @@ ngx_http_postpone_filter_output_postponed_request(ngx_http_request_t *r)
r->postponed = r->postponed->next;
}
- if (r->out) {
+ if (r != r->main && r->out) {
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http postpone filter out again \"%V?%V\"",
&r->uri, &r->args);
diff --git a/src/mail/ngx_mail.h b/src/mail/ngx_mail.h
index 1efff5b51..4e6453270 100644
--- a/src/mail/ngx_mail.h
+++ b/src/mail/ngx_mail.h
@@ -164,7 +164,7 @@ typedef struct {
unsigned no_sync_literal:1;
unsigned starttls:1;
unsigned esmtp:1;
- unsigned auth_method:2;
+ unsigned auth_method:3;
unsigned auth_wait:1;
ngx_str_t login;
@@ -243,10 +243,11 @@ typedef struct {
#define NGX_SMTP_STARTTLS 13
-#define NGX_MAIL_AUTH_PLAIN 0
-#define NGX_MAIL_AUTH_LOGIN 1
-#define NGX_MAIL_AUTH_APOP 2
-#define NGX_MAIL_AUTH_CRAM_MD5 3
+#define NGX_MAIL_AUTH_PLAIN 0
+#define NGX_MAIL_AUTH_LOGIN 1
+#define NGX_MAIL_AUTH_LOGIN_USERNAME 2
+#define NGX_MAIL_AUTH_APOP 3
+#define NGX_MAIL_AUTH_CRAM_MD5 4
#define NGX_MAIL_AUTH_PLAIN_ENABLED 0x0002
@@ -329,7 +330,7 @@ ngx_int_t ngx_mail_salt(ngx_mail_session_t *s, ngx_connection_t *c,
ngx_int_t ngx_mail_auth_plain(ngx_mail_session_t *s, ngx_connection_t *c,
ngx_uint_t n);
ngx_int_t ngx_mail_auth_login_username(ngx_mail_session_t *s,
- ngx_connection_t *c);
+ ngx_connection_t *c, ngx_uint_t n);
ngx_int_t ngx_mail_auth_login_password(ngx_mail_session_t *s,
ngx_connection_t *c);
ngx_int_t ngx_mail_auth_cram_md5_salt(ngx_mail_session_t *s,
diff --git a/src/mail/ngx_mail_auth_http_module.c b/src/mail/ngx_mail_auth_http_module.c
index 17e7861c0..cee5faafc 100644
--- a/src/mail/ngx_mail_auth_http_module.c
+++ b/src/mail/ngx_mail_auth_http_module.c
@@ -140,6 +140,7 @@ ngx_module_t ngx_mail_auth_http_module = {
static ngx_str_t ngx_mail_auth_http_method[] = {
ngx_string("plain"),
ngx_string("plain"),
+ ngx_string("plain"),
ngx_string("apop"),
ngx_string("cram-md5")
};
diff --git a/src/mail/ngx_mail_handler.c b/src/mail/ngx_mail_handler.c
index 0cb67a237..6b514972d 100644
--- a/src/mail/ngx_mail_handler.c
+++ b/src/mail/ngx_mail_handler.c
@@ -335,21 +335,22 @@ ngx_mail_auth_plain(ngx_mail_session_t *s, ngx_connection_t *c, ngx_uint_t n)
ngx_int_t
-ngx_mail_auth_login_username(ngx_mail_session_t *s, ngx_connection_t *c)
+ngx_mail_auth_login_username(ngx_mail_session_t *s, ngx_connection_t *c,
+ ngx_uint_t n)
{
ngx_str_t *arg;
arg = s->args.elts;
ngx_log_debug1(NGX_LOG_DEBUG_MAIL, c->log, 0,
- "mail auth login username: \"%V\"", &arg[0]);
+ "mail auth login username: \"%V\"", &arg[n]);
- s->login.data = ngx_palloc(c->pool, ngx_base64_decoded_length(arg[0].len));
+ s->login.data = ngx_palloc(c->pool, ngx_base64_decoded_length(arg[n].len));
if (s->login.data == NULL){
return NGX_ERROR;
}
- if (ngx_decode_base64(&s->login, &arg[0]) != NGX_OK) {
+ if (ngx_decode_base64(&s->login, &arg[n]) != NGX_OK) {
ngx_log_error(NGX_LOG_INFO, c->log, 0,
"client sent invalid base64 encoding in AUTH LOGIN command");
return NGX_MAIL_PARSE_INVALID_COMMAND;
diff --git a/src/mail/ngx_mail_imap_handler.c b/src/mail/ngx_mail_imap_handler.c
index 62ba17da8..e176469fe 100644
--- a/src/mail/ngx_mail_imap_handler.c
+++ b/src/mail/ngx_mail_imap_handler.c
@@ -205,7 +205,7 @@ ngx_mail_imap_auth_state(ngx_event_t *rev)
break;
case ngx_imap_auth_login_username:
- rc = ngx_mail_auth_login_username(s, c);
+ rc = ngx_mail_auth_login_username(s, c, 0);
tag = 0;
s->out.len = sizeof(imap_password) - 1;
@@ -370,6 +370,14 @@ ngx_mail_imap_authenticate(ngx_mail_session_t *s, ngx_connection_t *c)
return NGX_OK;
+ case NGX_MAIL_AUTH_LOGIN_USERNAME:
+
+ s->out.len = sizeof(imap_password) - 1;
+ s->out.data = imap_password;
+ s->mail_state = ngx_imap_auth_login_password;
+
+ return ngx_mail_auth_login_username(s, c, 1);
+
case NGX_MAIL_AUTH_PLAIN:
s->out.len = sizeof(imap_plain_next) - 1;
diff --git a/src/mail/ngx_mail_parse.c b/src/mail/ngx_mail_parse.c
index e558d2f48..693abfdc3 100644
--- a/src/mail/ngx_mail_parse.c
+++ b/src/mail/ngx_mail_parse.c
@@ -848,6 +848,10 @@ ngx_mail_auth_parse(ngx_mail_session_t *s, ngx_connection_t *c)
return NGX_MAIL_AUTH_LOGIN;
}
+ if (s->args.nelts == 2) {
+ return NGX_MAIL_AUTH_LOGIN_USERNAME;
+ }
+
return NGX_MAIL_PARSE_INVALID_COMMAND;
}
diff --git a/src/mail/ngx_mail_pop3_handler.c b/src/mail/ngx_mail_pop3_handler.c
index c486fbebd..668f0525b 100644
--- a/src/mail/ngx_mail_pop3_handler.c
+++ b/src/mail/ngx_mail_pop3_handler.c
@@ -226,7 +226,7 @@ ngx_mail_pop3_auth_state(ngx_event_t *rev)
break;
case ngx_pop3_auth_login_username:
- rc = ngx_mail_auth_login_username(s, c);
+ rc = ngx_mail_auth_login_username(s, c, 0);
s->out.len = sizeof(pop3_password) - 1;
s->out.data = pop3_password;
@@ -474,6 +474,14 @@ ngx_mail_pop3_auth(ngx_mail_session_t *s, ngx_connection_t *c)
return NGX_OK;
+ case NGX_MAIL_AUTH_LOGIN_USERNAME:
+
+ s->out.len = sizeof(pop3_password) - 1;
+ s->out.data = pop3_password;
+ s->mail_state = ngx_pop3_auth_login_password;
+
+ return ngx_mail_auth_login_username(s, c, 1);
+
case NGX_MAIL_AUTH_PLAIN:
s->out.len = sizeof(pop3_next) - 1;
diff --git a/src/mail/ngx_mail_smtp_handler.c b/src/mail/ngx_mail_smtp_handler.c
index 307ec697d..f4cb69fb1 100644
--- a/src/mail/ngx_mail_smtp_handler.c
+++ b/src/mail/ngx_mail_smtp_handler.c
@@ -452,7 +452,7 @@ ngx_mail_smtp_auth_state(ngx_event_t *rev)
break;
case ngx_smtp_auth_login_username:
- rc = ngx_mail_auth_login_username(s, c);
+ rc = ngx_mail_auth_login_username(s, c, 0);
s->out.len = sizeof(smtp_password) - 1;
s->out.data = smtp_password;
@@ -596,6 +596,14 @@ ngx_mail_smtp_auth(ngx_mail_session_t *s, ngx_connection_t *c)
return NGX_OK;
+ case NGX_MAIL_AUTH_LOGIN_USERNAME:
+
+ s->out.len = sizeof(smtp_password) - 1;
+ s->out.data = smtp_password;
+ s->mail_state = ngx_smtp_auth_login_password;
+
+ return ngx_mail_auth_login_username(s, c, 1);
+
case NGX_MAIL_AUTH_PLAIN:
s->out.len = sizeof(smtp_next) - 1;