Mercurial > hg > nginx-quic
comparison src/mail/ngx_mail_handler.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 | a9c361479430 |
children | c4b2c893989d |
comparison
equal
deleted
inserted
replaced
1321:8eb4dfcb89a6 | 1322:27f2299e0d80 |
---|---|
1227 ngx_str_t *arg, salt, l; | 1227 ngx_str_t *arg, salt, l; |
1228 ngx_uint_t i; | 1228 ngx_uint_t i; |
1229 ngx_connection_t *c; | 1229 ngx_connection_t *c; |
1230 ngx_mail_session_t *s; | 1230 ngx_mail_session_t *s; |
1231 ngx_mail_core_srv_conf_t *cscf; | 1231 ngx_mail_core_srv_conf_t *cscf; |
1232 #if (NGX_MAIL_SSL) | |
1233 ngx_mail_ssl_conf_t *sslcf; | |
1234 #endif | |
1232 | 1235 |
1233 c = rev->data; | 1236 c = rev->data; |
1234 s = c->data; | 1237 s = c->data; |
1235 | 1238 |
1236 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, c->log, 0, "smtp auth state"); | 1239 ngx_log_debug0(NGX_LOG_DEBUG_MAIL, c->log, 0, "smtp auth state"); |
1293 size = cscf->smtp_server_name.len; | 1296 size = cscf->smtp_server_name.len; |
1294 text = cscf->smtp_server_name.data; | 1297 text = cscf->smtp_server_name.data; |
1295 | 1298 |
1296 } else { | 1299 } else { |
1297 s->esmtp = 1; | 1300 s->esmtp = 1; |
1301 | |
1302 #if (NGX_MAIL_SSL) | |
1303 | |
1304 if (c->ssl == NULL) { | |
1305 sslcf = ngx_mail_get_module_srv_conf(s, ngx_mail_ssl_module); | |
1306 | |
1307 if (sslcf->starttls == NGX_MAIL_STARTTLS_ON) { | |
1308 size = cscf->smtp_starttls_capability.len; | |
1309 text = cscf->smtp_starttls_capability.data; | |
1310 break; | |
1311 } | |
1312 | |
1313 if (sslcf->starttls == NGX_MAIL_STARTTLS_ONLY) { | |
1314 size = cscf->smtp_starttls_only_capability.len; | |
1315 text = cscf->smtp_starttls_only_capability.data; | |
1316 break; | |
1317 } | |
1318 } | |
1319 #endif | |
1320 | |
1298 size = cscf->smtp_capability.len; | 1321 size = cscf->smtp_capability.len; |
1299 text = cscf->smtp_capability.data; | 1322 text = cscf->smtp_capability.data; |
1300 } | 1323 } |
1301 | 1324 |
1302 break; | 1325 break; |
1303 | 1326 |
1304 case NGX_SMTP_AUTH: | 1327 case NGX_SMTP_AUTH: |
1328 | |
1329 #if (NGX_MAIL_SSL) | |
1330 | |
1331 if (c->ssl == NULL) { | |
1332 sslcf = ngx_mail_get_module_srv_conf(s, ngx_mail_ssl_module); | |
1333 | |
1334 if (sslcf->starttls == NGX_MAIL_STARTTLS_ONLY) { | |
1335 rc = NGX_MAIL_PARSE_INVALID_COMMAND; | |
1336 break; | |
1337 } | |
1338 } | |
1339 #endif | |
1305 | 1340 |
1306 if (s->args.nelts == 0) { | 1341 if (s->args.nelts == 0) { |
1307 text = smtp_invalid_argument; | 1342 text = smtp_invalid_argument; |
1308 size = sizeof(smtp_invalid_argument) - 1; | 1343 size = sizeof(smtp_invalid_argument) - 1; |
1309 s->state = 0; | 1344 s->state = 0; |
1451 case NGX_SMTP_NOOP: | 1486 case NGX_SMTP_NOOP: |
1452 case NGX_SMTP_RSET: | 1487 case NGX_SMTP_RSET: |
1453 text = smtp_ok; | 1488 text = smtp_ok; |
1454 size = sizeof(smtp_ok) - 1; | 1489 size = sizeof(smtp_ok) - 1; |
1455 break; | 1490 break; |
1491 | |
1492 #if (NGX_MAIL_SSL) | |
1493 | |
1494 case NGX_SMTP_STARTTLS: | |
1495 if (c->ssl == NULL) { | |
1496 sslcf = ngx_mail_get_module_srv_conf(s, | |
1497 ngx_mail_ssl_module); | |
1498 if (sslcf->starttls) { | |
1499 c->read->handler = ngx_mail_starttls_handler; | |
1500 | |
1501 /* | |
1502 * RFC3207 requires us to discard any knowledge | |
1503 * obtained from client before STARTTLS. | |
1504 */ | |
1505 | |
1506 s->smtp_helo.len = 0; | |
1507 s->smtp_helo.data = NULL; | |
1508 | |
1509 text = smtp_ok; | |
1510 size = sizeof(smtp_ok) - 1; | |
1511 | |
1512 break; | |
1513 } | |
1514 } | |
1515 | |
1516 rc = NGX_MAIL_PARSE_INVALID_COMMAND; | |
1517 break; | |
1518 #endif | |
1519 | |
1520 default: | |
1521 rc = NGX_MAIL_PARSE_INVALID_COMMAND; | |
1522 break; | |
1456 } | 1523 } |
1457 | 1524 |
1458 break; | 1525 break; |
1459 | 1526 |
1460 case ngx_smtp_auth_login_username: | 1527 case ngx_smtp_auth_login_username: |