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