Home | History | Annotate | Line # | Download | only in tls
      1 /*	$NetBSD: tlsrpt_wrapper.h,v 1.2 2025/02/25 19:15:50 christos Exp $	*/
      2 
      3 #ifndef _TLSRPT_WRAPPER_INCLUDED_
      4 #define _TLSRPT_WRAPPER_INCLUDED_
      5 
      6 /*++
      7 /* NAME
      8 /*	tlsrpt_wrapper 3h
      9 /* SUMMARY
     10 /*	TLSRPT support for the SMTP and TLS protocol engines
     11 /* SYNOPSIS
     12 /*	#include <tlsrpt_wrapper.h>
     13 /* DESCRIPTION
     14 /* .nf
     15 
     16  /*
     17   * System library.
     18   */
     19 #if defined(USE_TLS)
     20 
     21 #if defined(USE_TLSRPT)
     22 
     23 #include <tlsrpt.h>
     24 
     25  /*
     26   * External interface, with convenient setters for each SMTP protocol engine
     27   * stage. Many functions have multiple arguments of the same type. Include
     28   * parameter names in function prototypes here, and in call sites include
     29   * comments before parameter values, to prepare for future clang-tidy
     30   * bugprone-argument-comment checks.
     31   */
     32 typedef struct TLSRPT_WRAPPER TLSRPT_WRAPPER;
     33 
     34 extern TLSRPT_WRAPPER *trw_create(const char *rpt_socket_name,
     35 				          const char *rpt_policy_domain,
     36 				          const char *rpt_policy_string,
     37 				          int skip_reused_hs);
     38 extern void trw_free(TLSRPT_WRAPPER *trw);
     39 extern void trw_set_tls_policy(TLSRPT_WRAPPER *trw,
     40 			               tlsrpt_policy_type_t tls_policy_type,
     41 			             const char *const * tls_policy_strings,
     42 			               const char *tls_policy_domain,
     43 			            const char *const * mx_policy_patterns);
     44 extern void trw_set_tcp_connection(TLSRPT_WRAPPER *trw,
     45 				           const char *snd_mta_addr,
     46 				           const char *rcv_mta_name,
     47 				           const char *rcv_mta_addr);
     48 extern void trw_set_ehlo_resp(TLSRPT_WRAPPER *trw,
     49 			              const char *rcv_mta_ehlo);
     50 extern int trw_report_failure(TLSRPT_WRAPPER *trw,
     51 			              tlsrpt_failure_t policy_failure,
     52 			              const char *additional_info,
     53 			              const char *failure_reason);
     54 extern int trw_report_success(TLSRPT_WRAPPER *trw);
     55 extern int trw_is_reported(const TLSRPT_WRAPPER *trw);
     56 extern int trw_is_skip_reused_hs(const TLSRPT_WRAPPER *trw);
     57 
     58  /*
     59   * The internals declarations are also needed for functions that transmit
     60   * and receive TLSRPT_WRAPPER objects.
     61   */
     62 #ifdef TLSRPT_WRAPPER_INTERNAL
     63 
     64  /*
     65   * Utility library.
     66   */
     67 #include <argv.h>
     68 
     69 struct TLSRPT_WRAPPER {
     70     /* Set with trw_create(). */
     71     char   *rpt_socket_name;
     72     char   *rpt_policy_domain;
     73     char   *rpt_policy_string;
     74     int     skip_reused_hs;
     75     /* Set with trw_set_policy(). */
     76     tlsrpt_policy_type_t tls_policy_type;
     77     ARGV   *tls_policy_strings;
     78     char   *tls_policy_domain;
     79     ARGV   *mx_host_patterns;
     80     /* Set with trw_set_tcp_connection(). */
     81     char   *snd_mta_addr;
     82     char   *rcv_mta_name;
     83     char   *rcv_mta_addr;
     84     /* Set with trw_set_ehlo_resp(). */
     85     char   *rcv_mta_ehlo;
     86     int     flags;
     87 };
     88 
     89 #define TRW_FLAG_HAVE_TLS_POLICY (1<<0)
     90 #define TRW_FLAG_HAVE_TCP_CONN	(1<<1)
     91 #define TRW_FLAG_HAVE_EHLO_RESP	(1<<2)
     92 #define TRW_FLAG_REPORTED	(1<<3)
     93 
     94 #define TRW_RPT_SOCKET_NAME	"rpt_socket_name"
     95 #define TRW_RPT_POLICY_DOMAIN	"rpt_policy_domain"
     96 #define TRW_RPT_POLICY_STRING	"rpt_policy_string"
     97 #define TRW_SKIP_REUSED_HS	"skip_reused_hs"
     98 #define TRW_TLS_POLICY_TYPE	"tls_policy_type"
     99 #define TRW_TLS_POLICY_STRINGS	"tls_policy_strings"	/* XXX Not checked */
    100 #define TRW_TLS_POLICY_DOMAIN	"tls_policy_domain"
    101 #define TRW_MX_HOST_PATTERNS	"mx_host_patterns"	/* XXX Not checked */
    102 #define TRW_SRC_MTA_ADDR	"snd_mta_addr"
    103 #define TRW_DST_MTA_NAME	"rcv_mta_name"
    104 #define TRW_DST_MTA_ADDR	"rcv_mta_addr"
    105 #define TRW_DST_MTA_EHLO	"rcv_mta_ehlo"	/* Optional */
    106 #define TRW_FLAGS		"flags"
    107 
    108 #endif					/* TLSRPT_WRAPPER_INTERNAL */
    109 
    110 extern tlsrpt_policy_type_t convert_tlsrpt_policy_type(const char *policy_type);
    111 extern tlsrpt_failure_t convert_tlsrpt_policy_failure(const char *policy_failure);
    112 
    113 #endif					/* USE_TLSRPT */
    114 
    115 extern int valid_tlsrpt_policy_type(const char *policy_type);
    116 extern int valid_tlsrpt_policy_failure(const char *policy_failure);
    117 
    118 #endif					/* USE_TLS */
    119 
    120 /* LICENSE
    121 /* .ad
    122 /* .fi
    123 /*	The Secure Mailer license must be distributed with this software.
    124 /* AUTHOR(S)
    125 /*	Wietse Venema
    126 /*--*/
    127 
    128 #endif					/* _TLSRPT_WRAPPER_INCLUDED_ */
    129