ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: a0001 LOGIN user@domain . test "abra ca dabra" - проблемы из-за пробел ов в пароле



On Mon, Aug 20, 2007 at 10:16:56AM +0400, Igor Sysoev wrote:

> > a0001 LOGIN user@xxxxxxxxxxx " 12345"
> > 
> > 
> > Cyrus IMAP и DBMail напрямую принимают такую команду нормально и логин 
> > проходит, а вот если логин происходит через nginx, то проблема проявляет 
> > себя несколько иначе, чем раньше: в лог nginx пишет ошибка авторизации, а 
> > на внешнем сервере авторизации пароль получается без пробела.
> > 
> > 
> > 
> > Видимо в HTTP-сессии к внешнему серверу авторизации надо как-то 
> > экранировать пароль... (и логин, возможно).
> 
> Насколько я вижу из отладочного лога, nginx передаёт
> 
> Auth-User: user@xxxxxxxxxxx
> Auth-Pass:  12345
> 
> то есть, пробел в начале передаётся, но не экранируется. Экранируются
> \d и \a. А вообще пробелы в паролях - это плохая идея, это нужно рубить
> ещё на стадии регистрации и смены пароля.

Прилагаемый патч включает в себя предыдущий и экранирует пробел.


-- 
Игорь Сысоев
http://sysoev.ru
Index: src/mail/ngx_mail_auth_http_module.c
===================================================================
--- src/mail/ngx_mail_auth_http_module.c        (revision 724)
+++ src/mail/ngx_mail_auth_http_module.c        (working copy)
@@ -1259,7 +1259,7 @@
     for (i = 0; i < text->len; i++) {
         ch = text->data[i];
 
-        if (ch == CR || ch == LF) {
+        if (ch == CR || ch == LF || ch == ' ') {
             n++;
         }
     }
@@ -1295,6 +1295,13 @@
             continue;
         }
 
+        if (ch == ' ') {
+            *p++ = '%';
+            *p++ = '2';
+            *p++ = '0';
+            continue;
+        }
+
         *p++ = ch;
     }
 
Index: src/mail/ngx_mail_parse.c
===================================================================
--- src/mail/ngx_mail_parse.c   (revision 724)
+++ src/mail/ngx_mail_parse.c   (working copy)
@@ -434,6 +434,10 @@
             break;
 
         case sw_argument:
+            if (ch == ' ' && s->quoted) {
+                break;
+            }
+
             switch (ch) {
             case '"':
                 if (!s->quoted) {


 




Copyright © Lexa Software, 1996-2009.