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