Mercurial > hg > nginx
comparison src/mail/ngx_mail_core_module.c @ 1322:27f2299e0d80
SMTP STARTTLS
patch by Maxim Dounin
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 20 Jul 2007 18:36:04 +0000 |
parents | 6be5ee17d80b |
children | c4b2c893989d |
comparison
equal
deleted
inserted
replaced
1321:8eb4dfcb89a6 | 1322:27f2299e0d80 |
---|---|
276 ngx_mail_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) | 276 ngx_mail_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) |
277 { | 277 { |
278 ngx_mail_core_srv_conf_t *prev = parent; | 278 ngx_mail_core_srv_conf_t *prev = parent; |
279 ngx_mail_core_srv_conf_t *conf = child; | 279 ngx_mail_core_srv_conf_t *conf = child; |
280 | 280 |
281 u_char *p; | 281 u_char *p, *auth; |
282 size_t size, stls_only_size; | 282 size_t size, stls_only_size; |
283 ngx_str_t *c, *d; | 283 ngx_str_t *c, *d; |
284 ngx_uint_t i, m; | 284 ngx_uint_t i, m; |
285 | 285 |
286 ngx_conf_merge_size_value(conf->imap_client_buffer_size, | 286 ngx_conf_merge_size_value(conf->imap_client_buffer_size, |
579 for (i = 0; i < conf->smtp_capabilities.nelts; i++) { | 579 for (i = 0; i < conf->smtp_capabilities.nelts; i++) { |
580 *p++ = '2'; *p++ = '5'; *p++ = '0'; *p++ = '-'; | 580 *p++ = '2'; *p++ = '5'; *p++ = '0'; *p++ = '-'; |
581 p = ngx_cpymem(p, c[i].data, c[i].len); | 581 p = ngx_cpymem(p, c[i].data, c[i].len); |
582 *p++ = CR; *p++ = LF; | 582 *p++ = CR; *p++ = LF; |
583 } | 583 } |
584 | |
585 auth = p; | |
584 | 586 |
585 *p++ = '2'; *p++ = '5'; *p++ = '0'; *p++ = ' '; | 587 *p++ = '2'; *p++ = '5'; *p++ = '0'; *p++ = ' '; |
586 *p++ = 'A'; *p++ = 'U'; *p++ = 'T'; *p++ = 'H'; | 588 *p++ = 'A'; *p++ = 'U'; *p++ = 'T'; *p++ = 'H'; |
587 | 589 |
588 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0; | 590 for (m = NGX_MAIL_AUTH_PLAIN_ENABLED, i = 0; |
595 ngx_smtp_auth_methods_names[i].len); | 597 ngx_smtp_auth_methods_names[i].len); |
596 } | 598 } |
597 } | 599 } |
598 | 600 |
599 *p++ = CR; *p = LF; | 601 *p++ = CR; *p = LF; |
602 | |
603 size += sizeof("250 STARTTLS" CRLF) - 1; | |
604 | |
605 p = ngx_palloc(cf->pool, size); | |
606 if (p == NULL) { | |
607 return NGX_CONF_ERROR; | |
608 } | |
609 | |
610 conf->smtp_starttls_capability.len = size; | |
611 conf->smtp_starttls_capability.data = p; | |
612 | |
613 p = ngx_cpymem(p, conf->smtp_capability.data, | |
614 conf->smtp_capability.len); | |
615 | |
616 p = ngx_cpymem(p, "250 STARTTLS" CRLF, sizeof("250 STARTTLS" CRLF) - 1); | |
617 *p++ = CR; *p = LF; | |
618 | |
619 p = conf->smtp_starttls_capability.data | |
620 + (auth - conf->smtp_capability.data) + 3; | |
621 *p = '-'; | |
622 | |
623 size = (auth - conf->smtp_capability.data) | |
624 + sizeof("250 STARTTLS" CRLF) - 1; | |
625 | |
626 p = ngx_palloc(cf->pool, size); | |
627 if (p == NULL) { | |
628 return NGX_CONF_ERROR; | |
629 } | |
630 | |
631 conf->smtp_starttls_only_capability.len = size; | |
632 conf->smtp_starttls_only_capability.data = p; | |
633 | |
634 p = ngx_cpymem(p, conf->smtp_capability.data, | |
635 auth - conf->smtp_capability.data); | |
636 | |
637 ngx_memcpy(p, "250 STARTTLS" CRLF, sizeof("250 STARTTLS" CRLF) - 1); | |
600 | 638 |
601 return NGX_CONF_OK; | 639 return NGX_CONF_OK; |
602 } | 640 } |
603 | 641 |
604 | 642 |