#ifdef USE_TLS
#include <sys_defs.h>
#include <attr.h>
#include <mail_proto.h>
#include <tls.h>
#include <tls_proxy.h>
int tls_proxy_context_scan(ATTR_SCAN_MASTER_FN scan_fn, VSTREAM *fp,
int flags, void *ptr)
{
TLS_SESS_STATE *tls_context = (TLS_SESS_STATE *) ptr;
int ret;
VSTRING *peer_CN = vstring_alloc(25);
VSTRING *issuer_CN = vstring_alloc(25);
VSTRING *peer_cert_fprint = vstring_alloc(60);
VSTRING *peer_pkey_fprint = vstring_alloc(60);
VSTRING *protocol = vstring_alloc(25);
VSTRING *cipher_name = vstring_alloc(25);
memset(ptr, 0, sizeof(TLS_SESS_STATE));
ret = scan_fn(fp, flags | ATTR_FLAG_MORE,
RECV_ATTR_STR(MAIL_ATTR_PEER_CN, peer_CN),
RECV_ATTR_STR(MAIL_ATTR_ISSUER_CN, issuer_CN),
RECV_ATTR_STR(MAIL_ATTR_PEER_CERT_FPT, peer_cert_fprint),
RECV_ATTR_STR(MAIL_ATTR_PEER_PKEY_FPT, peer_pkey_fprint),
RECV_ATTR_INT(MAIL_ATTR_PEER_STATUS,
&tls_context->peer_status),
RECV_ATTR_STR(MAIL_ATTR_CIPHER_PROTOCOL, protocol),
RECV_ATTR_STR(MAIL_ATTR_CIPHER_NAME, cipher_name),
RECV_ATTR_INT(MAIL_ATTR_CIPHER_USEBITS,
&tls_context->cipher_usebits),
RECV_ATTR_INT(MAIL_ATTR_CIPHER_ALGBITS,
&tls_context->cipher_algbits),
ATTR_TYPE_END);
tls_context->peer_CN = vstring_export(peer_CN);
tls_context->issuer_CN = vstring_export(issuer_CN);
tls_context->peer_cert_fprint = vstring_export(peer_cert_fprint);
tls_context->peer_pkey_fprint = vstring_export(peer_pkey_fprint);
tls_context->protocol = vstring_export(protocol);
tls_context->cipher_name = vstring_export(cipher_name);
return (ret == 9 ? 1 : -1);
}
#endif