mirror of
https://github.com/nginx/nginx.git
synced 2025-06-11 12:22:41 +08:00
compatibility with Microsoft's
AUTH LOGIN [base64 encoded user name ] patch by Maxim Dounin
This commit is contained in:
parent
9f751a8324
commit
09f6cd5fa9
@ -258,11 +258,12 @@ 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_NONE 4
|
||||
#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_NONE 5
|
||||
|
||||
|
||||
#define NGX_MAIL_AUTH_PLAIN_ENABLED 0x0002
|
||||
@ -346,7 +347,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,
|
||||
|
@ -356,21 +356,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_pnalloc(c->pool, ngx_base64_decoded_length(arg[0].len));
|
||||
s->login.data = ngx_pnalloc(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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -462,7 +462,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;
|
||||
@ -611,6 +611,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;
|
||||
|
Loading…
Reference in New Issue
Block a user