1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
/*
** Copyright 2002-2008, Double Precision Inc.
**
** See COPYING for distribution information.
*/
#include "libmail_config.h"
#include "fdtls.H"
#include <cstdlib>
#if HAVE_LIBCOURIERTLS
// libcouriertls.a callback - get a config setting
const char *mail::fdTLS::get_tls_config_var(const char *varname, void *vp)
{
return ((mail::fdTLS *)vp)->get_tls_config_var(varname);
}
// libcouriertls.a callback - report a tls error msg
void mail::fdTLS::get_tls_err_msg(const char *errmsg, void *vp)
{
((mail::fdTLS *)vp)->get_tls_err_msg(errmsg);
}
// libcouriertls.a callback - retrieve SSL/TLS certificate
int mail::fdTLS::get_tls_client_certs(size_t i,
const char **cert_array_ret,
size_t *cert_array_size_ret,
void *vp)
{
return ((mail::fdTLS *)vp)->get_tls_client_certs(i, cert_array_ret,
cert_array_size_ret);
}
// libcouriertls.a callback - release all SSL/TLS certificates
void mail::fdTLS::free_tls_client_certs(void *vp)
{
((mail::fdTLS *)vp)->free_tls_client_certs();
}
// Get a config setting, for now, use getenv.
const char *mail::fdTLS::get_tls_config_var(const char *varname)
{
if (strcmp(varname, "TLS_PROTOCOL") == 0 && tlsflag)
varname="TLS_STARTTLS_PROTOCOL";
if (strcmp(varname, "TLS_VERIFYPEER") == 0)
{
if (domain.size() == 0)
return "NONE";
}
return getenv(varname);
}
int mail::fdTLS::get_tls_client_certs(size_t i,
const char **cert_array_ret,
size_t *cert_array_size_ret)
{
if (i < certs.size())
{
*cert_array_ret=certs[i].c_str();
*cert_array_size_ret=certs[i].size();
return 1;
}
return 0;
}
void mail::fdTLS::free_tls_client_certs()
{
}
// libcouriertls.a callback - report a tls error msg
void mail::fdTLS::get_tls_err_msg(const char *errmsgArg)
{
errmsg=errmsgArg;
}
#else
mail::fdTLS::fdTLS()
{
}
mail::fdTLS::~fdTLS()
{
}
#endif
|