2017/01/13 の nginx

要約

  • バグ修正。mailモジュールのSASL EXTERNALを無効化出来るようにした

コミットログ (changeset)

http://hg.nginx.org/nginx/rev/b2915d99ee8d

nginx 1.11.6からIMAP, POP3, SMTPの認証にSASL EXTERNAL使えるようになったが、無効にしているつもりでもSASL EXTERNALを使えてしまうバグがあった。

# 以下のように指定して external を有効化する
smtp_auth cram-md5 external;

# 実は以下の状態でも EXTERNAL mechanism を使えてしまった (nginx 1.11.6-1.11.8)
smtp_auth cram-md5;

今回の変更からSASL EXTERNALを無効化出来るようになった。この変更はnginx 1.11.9から反映される。SASL EXTERNAL認証を試みても、NGX_MAIL_AUTH_EXTERNAL_ENABLED フラグが立ってない場合は無効なコマンドとして NGX_MAIL_PARSE_INVALID_COMMAND を返せるように修正されていることが分かる。

changeset:   6869:b2915d99ee8d
user:        Sergey Kandaurov <pluknet@nginx.com>
date:        Thu Jan 12 19:22:03 2017 +0300
summary:     Mail: make it possible to disable SASL EXTERNAL.

 src/mail/ngx_mail_imap_handler.c |  8 ++++++--
 src/mail/ngx_mail_pop3_handler.c |  4 ++++
 src/mail/ngx_mail_smtp_handler.c |  8 ++++++--
 3 files changed, 16 insertions(+), 4 deletions(-)

diff -r ee3645078759 -r b2915d99ee8d src/mail/ngx_mail_imap_handler.c
--- a/src/mail/ngx_mail_imap_handler.c	Wed Jan 11 12:01:56 2017 +0300
+++ b/src/mail/ngx_mail_imap_handler.c	Thu Jan 12 19:22:03 2017 +0300
@@ -356,6 +356,8 @@
     }
 #endif

+    iscf = ngx_mail_get_module_srv_conf(s, ngx_mail_imap_module);
+
     rc = ngx_mail_auth_parse(s, c);

     switch (rc) {
@@ -383,8 +385,6 @@

     case NGX_MAIL_AUTH_CRAM_MD5:

-        iscf = ngx_mail_get_module_srv_conf(s, ngx_mail_imap_module);
-
         if (!(iscf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED)) {
             return NGX_MAIL_PARSE_INVALID_COMMAND;
         }
@@ -406,6 +406,10 @@

     case NGX_MAIL_AUTH_EXTERNAL:

+        if (!(iscf->auth_methods & NGX_MAIL_AUTH_EXTERNAL_ENABLED)) {
+            return NGX_MAIL_PARSE_INVALID_COMMAND;
+        }
+
         ngx_str_set(&s->out, imap_username);
         s->mail_state = ngx_imap_auth_external;

diff -r ee3645078759 -r b2915d99ee8d src/mail/ngx_mail_pop3_handler.c
--- a/src/mail/ngx_mail_pop3_handler.c	Wed Jan 11 12:01:56 2017 +0300
+++ b/src/mail/ngx_mail_pop3_handler.c	Thu Jan 12 19:22:03 2017 +0300
@@ -501,6 +501,10 @@

     case NGX_MAIL_AUTH_EXTERNAL:

+        if (!(pscf->auth_methods & NGX_MAIL_AUTH_EXTERNAL_ENABLED)) {
+            return NGX_MAIL_PARSE_INVALID_COMMAND;
+        }
+
         ngx_str_set(&s->out, pop3_username);
         s->mail_state = ngx_pop3_auth_external;

diff -r ee3645078759 -r b2915d99ee8d src/mail/ngx_mail_smtp_handler.c
--- a/src/mail/ngx_mail_smtp_handler.c	Wed Jan 11 12:01:56 2017 +0300
+++ b/src/mail/ngx_mail_smtp_handler.c	Thu Jan 12 19:22:03 2017 +0300
@@ -609,6 +609,8 @@
         return NGX_OK;
     }

+    sscf = ngx_mail_get_module_srv_conf(s, ngx_mail_smtp_module);
+
     rc = ngx_mail_auth_parse(s, c);

     switch (rc) {
@@ -636,8 +638,6 @@

     case NGX_MAIL_AUTH_CRAM_MD5:

-        sscf = ngx_mail_get_module_srv_conf(s, ngx_mail_smtp_module);
-
         if (!(sscf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED)) {
             return NGX_MAIL_PARSE_INVALID_COMMAND;
         }
@@ -659,6 +659,10 @@

     case NGX_MAIL_AUTH_EXTERNAL:

+        if (!(sscf->auth_methods & NGX_MAIL_AUTH_EXTERNAL_ENABLED)) {
+            return NGX_MAIL_PARSE_INVALID_COMMAND;
+        }
+
         ngx_str_set(&s->out, smtp_username);
         s->mail_state = ngx_smtp_auth_external;