Mercurial > hg > nginx-mail
comparison src/mail/ngx_mail_proxy_module.c @ 434:375518f786db
Mail: don't drop connection when RCPT TO fails.
Always pass reply for RCPT TO back to client and establish proxied
connection. There is no real reason to close connection here.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 10 Sep 2008 21:27:57 +0400 |
parents | cd9cb7a3ff9e |
children | 9b19e26b2660 |
comparison
equal
deleted
inserted
replaced
433:2b6aba7fe8b5 | 434:375518f786db |
---|---|
102 NULL, /* exit master */ | 102 NULL, /* exit master */ |
103 NGX_MODULE_V1_PADDING | 103 NGX_MODULE_V1_PADDING |
104 }; | 104 }; |
105 | 105 |
106 | 106 |
107 static u_char smtp_auth_ok[] = "235 2.0.0 OK" CRLF; | 107 static u_char smtp_ok[] = "235 2.0.0 OK" CRLF; |
108 static u_char smtp_ok[] = "250 2.0.0 OK" CRLF; | |
109 | 108 |
110 | 109 |
111 void | 110 void |
112 ngx_mail_proxy_init(ngx_mail_session_t *s, ngx_peer_addr_t *peer) | 111 ngx_mail_proxy_init(ngx_mail_session_t *s, ngx_peer_addr_t *peer) |
113 { | 112 { |
601 | 600 |
602 case ngx_smtp_helo: | 601 case ngx_smtp_helo: |
603 case ngx_smtp_xclient: | 602 case ngx_smtp_xclient: |
604 case ngx_smtp_to: | 603 case ngx_smtp_to: |
605 | 604 |
606 if (s->auth_method == NGX_MAIL_AUTH_NONE) { | 605 if (s->auth_method != NGX_MAIL_AUTH_NONE) { |
607 ngx_memcpy(s->proxy->buffer->start, smtp_ok, sizeof(smtp_ok) - 1); | 606 ngx_memcpy(s->proxy->buffer->start, smtp_ok, |
607 sizeof(smtp_ok) - 1); | |
608 s->proxy->buffer->last = s->proxy->buffer->start | 608 s->proxy->buffer->last = s->proxy->buffer->start |
609 + sizeof(smtp_ok) - 1; | 609 + sizeof(smtp_ok) - 1; |
610 } else { | 610 s->proxy->buffer->pos = s->proxy->buffer->start; |
611 ngx_memcpy(s->proxy->buffer->start, smtp_auth_ok, | 611 } |
612 sizeof(smtp_auth_ok) - 1); | 612 |
613 s->proxy->buffer->last = s->proxy->buffer->start | |
614 + sizeof(smtp_auth_ok) - 1; | |
615 } | |
616 | |
617 s->proxy->buffer->pos = s->proxy->buffer->start; | |
618 | 613 |
619 s->connection->read->handler = ngx_mail_proxy_handler; | 614 s->connection->read->handler = ngx_mail_proxy_handler; |
620 s->connection->write->handler = ngx_mail_proxy_handler; | 615 s->connection->write->handler = ngx_mail_proxy_handler; |
621 rev->handler = ngx_mail_proxy_handler; | 616 rev->handler = ngx_mail_proxy_handler; |
622 c->write->handler = ngx_mail_proxy_handler; | 617 c->write->handler = ngx_mail_proxy_handler; |
751 break; | 746 break; |
752 | 747 |
753 default: /* NGX_MAIL_SMTP_PROTOCOL */ | 748 default: /* NGX_MAIL_SMTP_PROTOCOL */ |
754 switch (state) { | 749 switch (state) { |
755 | 750 |
751 case ngx_smtp_to: | |
752 return NGX_OK; | |
753 | |
756 case ngx_smtp_helo: | 754 case ngx_smtp_helo: |
757 case ngx_smtp_helo_from: | 755 case ngx_smtp_helo_from: |
758 case ngx_smtp_helo_xclient: | 756 case ngx_smtp_helo_xclient: |
759 case ngx_smtp_from: | 757 case ngx_smtp_from: |
760 case ngx_smtp_to: | |
761 if (p[0] == '2' && p[1] == '5' && p[2] == '0') { | 758 if (p[0] == '2' && p[1] == '5' && p[2] == '0') { |
762 return NGX_OK; | 759 return NGX_OK; |
763 } | 760 } |
764 break; | 761 break; |
765 | 762 |