1/*	$NetBSD: tls_proxy_server_print.c,v 1.3 2022/10/08 16:12:50 christos Exp $	*/
2
3/*++
4/* NAME
5/*	tls_proxy_server_print 3
6/* SUMMARY
7/*	write TLS_SERVER_XXX structures to stream
8/* SYNOPSIS
9/*	#include <tls_proxy.h>
10/*
11/*	int     tls_proxy_server_init_print(print_fn, stream, flags, ptr)
12/*	ATTR_PRINT_COMMON_FN print_fn;
13/*	VSTREAM *stream;
14/*	int     flags;
15/*	void    *ptr;
16/*
17/*	int     tls_proxy_server_start_print(print_fn, stream, flags, ptr)
18/*	ATTR_PRINT_COMMON_FN print_fn;
19/*	VSTREAM *stream;
20/*	int     flags;
21/*	void    *ptr;
22/* DESCRIPTION
23/*	tls_proxy_server_init_print() writes a TLS_SERVER_INIT_PROPS
24/*	structure to the named stream using the specified attribute print
25/*	routine. tls_proxy_server_init_print() is meant to be passed as
26/*	a call-back to attr_print(), thusly:
27/*
28/*	... SEND_ATTR_FUNC(tls_proxy_server_init_print, (const void *) init_props), ...
29/*
30/*	tls_proxy_server_start_print() writes a TLS_SERVER_START_PROPS
31/*	structure to the named stream using the specified attribute print
32/*	routine. tls_proxy_server_start_print() is meant to be passed as
33/*	a call-back to attr_print(), thusly:
34/*
35/*	... SEND_ATTR_FUNC(tls_proxy_server_start_print, (const void *) start_props), ...
36/* DIAGNOSTICS
37/*	Fatal: out of memory.
38/* LICENSE
39/* .ad
40/* .fi
41/*	The Secure Mailer license must be distributed with this software.
42/* AUTHOR(S)
43/*	Wietse Venema
44/*	Google, Inc.
45/*	111 8th Avenue
46/*	New York, NY 10011, USA
47/*--*/
48
49#ifdef USE_TLS
50
51/* System library. */
52
53#include <sys_defs.h>
54
55/* Utility library */
56
57#include <attr.h>
58
59/* TLS library. */
60
61#include <tls.h>
62#include <tls_proxy.h>
63
64/* tls_proxy_server_init_print - send TLS_SERVER_INIT_PROPS over stream */
65
66int     tls_proxy_server_init_print(ATTR_PRINT_COMMON_FN print_fn, VSTREAM *fp,
67				            int flags, const void *ptr)
68{
69    const TLS_SERVER_INIT_PROPS *props = (const TLS_SERVER_INIT_PROPS *) ptr;
70    int     ret;
71
72#define STRING_OR_EMPTY(s) ((s) ? (s) : "")
73
74    ret = print_fn(fp, flags | ATTR_FLAG_MORE,
75		   SEND_ATTR_STR(TLS_ATTR_LOG_PARAM,
76				 STRING_OR_EMPTY(props->log_param)),
77		   SEND_ATTR_STR(TLS_ATTR_LOG_LEVEL,
78				 STRING_OR_EMPTY(props->log_level)),
79		   SEND_ATTR_INT(TLS_ATTR_VERIFYDEPTH, props->verifydepth),
80		   SEND_ATTR_STR(TLS_ATTR_CACHE_TYPE,
81				 STRING_OR_EMPTY(props->cache_type)),
82		   SEND_ATTR_INT(TLS_ATTR_SET_SESSID, props->set_sessid),
83		   SEND_ATTR_STR(TLS_ATTR_CHAIN_FILES,
84				 STRING_OR_EMPTY(props->chain_files)),
85		   SEND_ATTR_STR(TLS_ATTR_CERT_FILE,
86				 STRING_OR_EMPTY(props->cert_file)),
87		   SEND_ATTR_STR(TLS_ATTR_KEY_FILE,
88				 STRING_OR_EMPTY(props->key_file)),
89		   SEND_ATTR_STR(TLS_ATTR_DCERT_FILE,
90				 STRING_OR_EMPTY(props->dcert_file)),
91		   SEND_ATTR_STR(TLS_ATTR_DKEY_FILE,
92				 STRING_OR_EMPTY(props->dkey_file)),
93		   SEND_ATTR_STR(TLS_ATTR_ECCERT_FILE,
94				 STRING_OR_EMPTY(props->eccert_file)),
95		   SEND_ATTR_STR(TLS_ATTR_ECKEY_FILE,
96				 STRING_OR_EMPTY(props->eckey_file)),
97		   SEND_ATTR_STR(TLS_ATTR_CAFILE,
98				 STRING_OR_EMPTY(props->CAfile)),
99		   SEND_ATTR_STR(TLS_ATTR_CAPATH,
100				 STRING_OR_EMPTY(props->CApath)),
101		   SEND_ATTR_STR(TLS_ATTR_PROTOCOLS,
102				 STRING_OR_EMPTY(props->protocols)),
103		   SEND_ATTR_STR(TLS_ATTR_EECDH_GRADE,
104				 STRING_OR_EMPTY(props->eecdh_grade)),
105		   SEND_ATTR_STR(TLS_ATTR_DH1K_PARAM_FILE,
106				 STRING_OR_EMPTY(props->dh1024_param_file)),
107		   SEND_ATTR_STR(TLS_ATTR_DH512_PARAM_FILE,
108				 STRING_OR_EMPTY(props->dh512_param_file)),
109		   SEND_ATTR_INT(TLS_ATTR_ASK_CCERT, props->ask_ccert),
110		   SEND_ATTR_STR(TLS_ATTR_MDALG,
111				 STRING_OR_EMPTY(props->mdalg)),
112		   ATTR_TYPE_END);
113    /* Do not flush the stream. */
114    return (ret);
115}
116
117/* tls_proxy_server_start_print - send TLS_SERVER_START_PROPS over stream */
118
119int     tls_proxy_server_start_print(ATTR_PRINT_COMMON_FN print_fn, VSTREAM *fp,
120				             int flags, const void *ptr)
121{
122    const TLS_SERVER_START_PROPS *props = (const TLS_SERVER_START_PROPS *) ptr;
123    int     ret;
124
125#define STRING_OR_EMPTY(s) ((s) ? (s) : "")
126
127    ret = print_fn(fp, flags | ATTR_FLAG_MORE,
128		   SEND_ATTR_INT(TLS_ATTR_TIMEOUT, props->timeout),
129		   SEND_ATTR_INT(TLS_ATTR_REQUIRECERT, props->requirecert),
130		   SEND_ATTR_STR(TLS_ATTR_SERVERID,
131				 STRING_OR_EMPTY(props->serverid)),
132		   SEND_ATTR_STR(TLS_ATTR_NAMADDR,
133				 STRING_OR_EMPTY(props->namaddr)),
134		   SEND_ATTR_STR(TLS_ATTR_CIPHER_GRADE,
135				 STRING_OR_EMPTY(props->cipher_grade)),
136		   SEND_ATTR_STR(TLS_ATTR_CIPHER_EXCLUSIONS,
137				 STRING_OR_EMPTY(props->cipher_exclusions)),
138		   SEND_ATTR_STR(TLS_ATTR_MDALG,
139				 STRING_OR_EMPTY(props->mdalg)),
140		   ATTR_TYPE_END);
141    /* Do not flush the stream. */
142    return (ret);
143}
144
145#endif
146