a0001 LOGIN user at domain .test "abra ca dabra" - проблемы из-за пробел ов в пароле
Igor Sysoev
is at rambler-co.ru
Mon Aug 20 10:22:56 MSD 2007
On Mon, Aug 20, 2007 at 10:16:56AM +0400, Igor Sysoev wrote:
> > a0001 LOGIN user at domain.test " 12345"
> >
> >
> > Cyrus IMAP и DBMail напрямую принимают такую команду нормально и логин проходит, а вот если логин происходит через nginx, то проблема проявляет себя несколько иначе, чем раньше: в лог nginx пишет ошибка авторизации, а на внешнем сервере авторизации пароль получается без пробела.
> >
> >
> >
> > Видимо в HTTP-сессии к внешнему серверу авторизации надо как-то экранировать пароль... (и логин, возможно).
>
> Насколько я вижу из отладочного лога, nginx передаёт
>
> Auth-User: user at domain.test
> Auth-Pass: 12345
>
> то есть, пробел в начале передаётся, но не экранируется. Экранируются
> \d и \a. А вообще пробелы в паролях - это плохая идея, это нужно рубить
> ещё на стадии регистрации и смены пароля.
Прилагаемый патч включает в себя предыдущий и экранирует пробел.
--
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
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) {
More information about the nginx-ru
mailing list