1 /* $NetBSD: tls_proxy_server_print.c,v 1.2 2020/03/18 19:05:21 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_MASTER_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_MASTER_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, (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, (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 66 int tls_proxy_server_init_print(ATTR_PRINT_MASTER_FN print_fn, VSTREAM *fp, 67 int flags, void *ptr) 68 { 69 TLS_SERVER_INIT_PROPS *props = (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 119 int tls_proxy_server_start_print(ATTR_PRINT_MASTER_FN print_fn, VSTREAM *fp, 120 int flags, void *ptr) 121 { 122 TLS_SERVER_START_PROPS *props = (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