Lines Matching defs:session

167   * Sender and receiver state. A session does not necessarily go through a
179 * and with its own dedicated state transitions. The session proceeds as
249 #define SMTP_MIME_DOWNGRADE(session, request) \
251 && (session->features & SMTP_FEATURE_8BITMIME) == 0 \
295 SMTP_SESSION *session = state->session;
327 int saved_features = session->features;
339 /* XXX Mix-up of per-session and per-request flags. */
341 smtp_stream_setup(state->session->stream, var_smtp_starttls_tmout,
352 smtp_stream_setup(state->session->stream, var_smtp_helo_tmout,
354 if ((except = vstream_setjmp(state->session->stream)) != 0)
368 switch ((resp = smtp_chat_resp(session))->code / 100) {
378 session->namaddr,
416 > vstream_ftime(state->session->stream) - var_smtp_pix_thresh)
422 session->namaddrport);
423 session->features |= pix_bug_mask;
439 session->namaddrport, var_myhostname);
441 session->features |= SMTP_FEATURE_ESMTP;
445 && (session->features & SMTP_FEATURE_PIX_NO_ESMTP) == 0)
446 session->features |= SMTP_FEATURE_ESMTP;
448 || (session->features & SMTP_FEATURE_PIX_NO_ESMTP) != 0)
449 session->features &= ~SMTP_FEATURE_ESMTP;
451 session->features |= SMTP_FEATURE_ESMTP;
460 session->features |= SMTP_FEATURE_ESMTP;
469 if (session->features & SMTP_FEATURE_ESMTP) {
470 smtp_chat_cmd(session, "EHLO %s", var_smtp_helo_name);
471 if ((resp = smtp_chat_resp(session))->code / 100 != 2) {
475 session->namaddr,
478 session->features &= ~SMTP_FEATURE_ESMTP;
481 if ((session->features & SMTP_FEATURE_ESMTP) == 0) {
483 smtp_chat_cmd(session, "HELO %s", var_smtp_helo_name);
484 if ((resp = smtp_chat_resp(session))->code / 100 != 2)
487 session->namaddr,
492 smtp_chat_cmd(session, "LHLO %s", var_smtp_helo_name);
493 if ((resp = smtp_chat_resp(session))->code / 100 != 2)
496 session->namaddr,
504 if (session->features & SMTP_FEATURE_ESMTP) {
516 session->state->request->queue_id,
518 vstream_longjmp(session->stream, SMTP_ERR_DATA);
540 if (session->helo != 0)
541 myfree(session->helo);
549 session->helo = mystrdup(word);
554 session->namaddrport, var_myhostname);
555 if (session->features & SMTP_FEATURE_BEST_MX)
568 session->features |= SMTP_FEATURE_8BITMIME;
571 session->features |= SMTP_FEATURE_PIPELINING;
575 session->features |=
580 session->features |= SMTP_FEATURE_SIZE;
584 word, session->namaddrport);
586 session->size_limit = off_cvt_string(word);
593 session->features |= SMTP_FEATURE_STARTTLS;
599 smtp_sasl_helo_auth(session, words);
603 session->features |= SMTP_FEATURE_DSN;
606 session->features |= SMTP_FEATURE_SMTPUTF8;
614 session->features, (double) session->size_limit);
649 if ((session->features & SMTP_FEATURE_SMTPUTF8) == 0
655 session->namaddr));
662 if ((session->features & SMTP_FEATURE_SMTPUTF8) != 0
663 && (session->features & SMTP_FEATURE_8BITMIME) == 0) {
665 session->namaddr);
666 session->features |= SMTP_FEATURE_8BITMIME;
717 if (session->features & SMTP_FEATURE_PIPELINING) {
723 if (getsockopt(vstream_fileno(session->stream), SOL_SOCKET,
734 if (setsockopt(vstream_fileno(session->stream), SOL_SOCKET,
754 if ((session->features & SMTP_FEATURE_STARTTLS) &&
762 if ((session->features & SMTP_FEATURE_STARTTLS) != 0
768 smtp_stream_setup(state->session->stream, var_smtp_starttls_tmout,
770 if ((except = vstream_setjmp(state->session->stream)) != 0)
784 smtp_chat_cmd(session, "STARTTLS");
785 if ((resp = smtp_chat_resp(session))->code / 100 == 2) {
787 if (session->features & SMTP_FEATURE_AUTH)
788 smtp_sasl_cleanup(session);
790 session->features = saved_features;
791 /* XXX Mix-up of per-session and per-request flags. */
802 session->features &= ~SMTP_FEATURE_STARTTLS;
806 session->namaddr,
819 if (!(session->features & SMTP_FEATURE_STARTTLS)) {
823 session->namaddr));
839 if (var_smtp_sasl_enable && (session->features & SMTP_FEATURE_AUTH))
852 SMTP_SESSION *session = state->session;
881 * All this without a shared TLS session cache, and they still want to
882 * use TLS session caching???
884 * The TLS session cache records the trust chain verification status of
889 * is valid for another. Therefore the client session id must include
893 * XXX: We store only one session per lookup key. Ideally the key maps
894 * 1-to-1 to a server TLS session cache. We use the IP address, port and
901 * SSL session lookup key lengths.
934 nexthop = session->tls_nexthop,
936 namaddr = session->namaddrport,
939 helo = session->helo,
954 * cause it to tear down the session.
973 session->stream, STR(iter->addr),
983 * session->stream VSTREAMS, so that we don't lose all the
984 * user-configurable session->stream attributes (such as longjump
1001 session->tls_context = 0;
1006 vstream_control(session->stream,
1015 vstream_fpurge(session->stream, VSTREAM_PURGE_BOTH);
1027 session->tls_context = tls_proxy_context_receive(session->stream);
1028 if (session->tls_context) {
1029 session->features |= SMTP_FEATURE_FROM_PROXY;
1031 session->tls_context);
1049 session->tls_context =
1052 stream = session->stream,
1056 nexthop = session->tls_nexthop,
1058 namaddr = session->namaddrport,
1061 helo = session->helo,
1074 vstream_fpurge(session->stream, VSTREAM_PURGE_BOTH);
1079 if (session->tls_context == 0) {
1112 * result, abort the delivery here. We have a usable TLS session with the
1127 if (TLS_MUST_MATCH(session->tls_context->level))
1128 if (!TLS_CERT_IS_MATCHED(session->tls_context))
1166 SMTP_SESSION *session = state->session;
1182 smtp_fputc('.', session->stream);
1185 smtp_fputs(data_start, state->space_left, session->stream);
1190 smtp_fputc(' ', session->stream);
1207 smtp_fwrite(data_start, data_left, session->stream);
1210 smtp_fputs(data_start, data_left, session->stream);
1281 vstream_longjmp(state->session->stream, SMTP_ERR_DATA);
1383 vstream_longjmp(state->session->stream, SMTP_ERR_DATA);
1408 SMTP_SESSION *session = state->session;
1411 if (session->mime_state == 0) {
1416 mime_state_update(session->mime_state, rec_type,
1426 /* smtp_out_add_header - format address header, uses session->scratch* */
1432 SMTP_SESSION *session = state->session;
1434 smtp_rewrite_generic_internal(session->scratch2, addr);
1435 vstring_sprintf(session->scratch, "%s: %s", label, lt);
1436 smtp_quote_822_address_flags(session->scratch,
1437 vstring_str(session->scratch2),
1439 vstring_strcat(session->scratch, gt);
1440 return (smtp_out_raw_or_mime(state, REC_TYPE_NORM, session->scratch));
1443 /* smtp_out_add_headers - output additional headers, uses session->scratch* */
1470 SMTP_SESSION *session = state->session;
1499 if (session->mime_state) \
1500 session->mime_state = mime_state_free(session->mime_state); \
1514 (session->features |= SMTP_FEATURE_RSET_REJECTED)
1560 smtp_stream_setup(session->stream, *xfer_timeouts[send_state],
1562 if ((except = vstream_setjmp(session->stream)) != 0) {
1611 if ((session->features & SMTP_FEATURE_XFORWARD_NAME)
1616 if ((session->features & SMTP_FEATURE_XFORWARD_ADDR)
1621 if ((session->features & SMTP_FEATURE_XFORWARD_PORT)
1626 if (session->send_proto_helo)
1634 if ((session->features & SMTP_FEATURE_XFORWARD_PROTO)
1639 if ((session->features & SMTP_FEATURE_XFORWARD_HELO)
1644 if ((session->features & SMTP_FEATURE_XFORWARD_IDENT)
1649 if ((session->features & SMTP_FEATURE_XFORWARD_DOMAIN)
1663 request->msg_stats.reuse_count = session->reuse_count;
1665 smtp_rewrite_generic_internal(session->scratch2, request->sender);
1666 smtp_quote_821_address(session->scratch,
1667 vstring_str(session->scratch2));
1669 vstring_str(session->scratch));
1671 if (session->features & SMTP_FEATURE_SIZE /* RFC 1870 */
1672 && !SMTP_MIME_DOWNGRADE(session, request))
1675 if (session->features & SMTP_FEATURE_8BITMIME) { /* RFC 1652 */
1684 if (session->features & SMTP_FEATURE_DSN) {
1703 if ((session->features & SMTP_FEATURE_SMTPUTF8) != 0
1713 && (session->features & SMTP_FEATURE_AUTH))
1720 * commands to our TLS session.
1725 * session (otherwise the Postfix SMTP client would time out
1738 && (vstream_peek(session->stream) > 0
1739 || peekfd(vstream_fileno(session->stream)) > 0))
1740 session->features |= SMTP_FEATURE_EARLY_TLS_MAIL_REPLY;
1755 smtp_rewrite_generic_internal(session->scratch2, rcpt->address);
1756 smtp_quote_821_address(session->scratch,
1757 vstring_str(session->scratch2));
1759 vstring_str(session->scratch));
1760 if (session->features & SMTP_FEATURE_DSN) {
1766 quote_822_local(session->scratch, rcpt->orig_addr);
1767 vstring_sprintf(session->scratch2, "%s;%s",
1770 && !allascii(vstring_str(session->scratch))) ?
1772 vstring_str(session->scratch));
1773 orcpt_type_addr = vstring_str(session->scratch2);
1780 if (uxtext_quote(session->scratch,
1783 vstring_str(session->scratch));
1785 xtext_quote(session->scratch, orcpt_type_addr, "=");
1787 vstring_str(session->scratch));
1846 * used to find out the status of a cached session before
1857 * or is reached near the end of any non-cached session.
1908 && ((session->features & SMTP_FEATURE_PIPELINING) == 0
1911 + vstream_bufstat(session->stream, VSTREAM_BST_OUT_PEND)
1914 - vstream_ftime(session->stream) > 10))) {
1947 smtp_stream_setup(session->stream, *xfer_timeouts[recv_state],
1950 if (vstream_setjmp(session->stream) != 0)
1954 if ((except = vstream_setjmp(session->stream)) != 0)
1958 resp = smtp_chat_resp(session);
1971 session->namaddrport,
1974 if (session->send_proto_helo)
1983 session->namaddrport,
1998 session->namaddr,
2010 * the middle of a TLS session. We disconnect and try
2015 && (session->features & SMTP_FEATURE_EARLY_TLS_MAIL_REPLY)) {
2020 session->namaddr,
2071 session->namaddr,
2081 /* XXX Also: record if non-delivering session. */
2095 session->namaddr,
2142 session->namaddr,
2169 session->namaddr,
2221 * It is used to find out the status of a cached session
2260 /* XXX Also: record if non-delivering session. */
2282 smtp_stream_setup(session->stream, var_smtp_data1_tmout,
2285 if ((except = vstream_setjmp(session->stream)) == 0) {
2290 downgrading = SMTP_MIME_DOWNGRADE(session, request);
2299 session->mime_state = mime_state_alloc(downgrading ?
2322 while ((rec_type = rec_get(state->src, session->scratch, 0)) > 0) {
2326 session->scratch) < 0)
2331 if (session->mime_state) {
2344 mime_state_update(session->mime_state, rec_type, "", 0);
2350 smtp_fputs("", 0, session->stream);
2351 if (session->features & SMTP_FEATURE_PIX_DELAY_DOTCRLF) {
2352 smtp_flush(session->stream);/* hurts performance */
2364 (void) vstream_fpurge(session->stream, VSTREAM_PURGE_BOTH);
2389 (void) vstream_fpurge(session->stream, VSTREAM_PURGE_WRITE);
2398 smtp_chat_cmd(session, "%s", vstring_str(next_command));
2413 SMTP_SESSION *session = state->session;
2435 if (session->size_limit > 0 && session->size_limit < request->data_size) {
2439 request->data_size, (double) session->size_limit,
2440 session->namaddr);
2455 && (((session->features & SMTP_FEATURE_XFORWARD_NAME)
2457 || ((session->features & SMTP_FEATURE_XFORWARD_ADDR)
2459 || ((session->features & SMTP_FEATURE_XFORWARD_PORT)
2461 session->send_proto_helo =
2463 && (((session->features & SMTP_FEATURE_XFORWARD_PROTO)
2465 || ((session->features & SMTP_FEATURE_XFORWARD_HELO)
2467 || ((session->features & SMTP_FEATURE_XFORWARD_IDENT)
2469 || ((session->features & SMTP_FEATURE_XFORWARD_DOMAIN)
2473 else if (session->send_proto_helo)
2479 * Remember this session's "normal completion", even if the server 4xx-ed
2487 && vstream_ferror(session->stream) == 0
2488 && vstream_feof(session->stream) == 0)