comparison src/mail/ngx_mail_core_module.c @ 396:e2d916d7e50f PATCH_NGINX_MAIL_0_1

Mail: starttls only support for SMTP. Capabilities tweaks according to starttls settings.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 18 Jul 2007 02:54:56 +0000
parents 2ceaee987f37
children f9e6413396d4
comparison
equal deleted inserted replaced
395:1c0300c3ae88 396:e2d916d7e50f
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_p;
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 = 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_p - conf->smtp_capability.data) + 3;
621 *p = '-';
622
623 size = (auth_p - 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_p - conf->smtp_capability.data);
636
637 p = ngx_cpymem(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