diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/ssl_bogus.c | 4 | ||||
| -rw-r--r-- | lib/ssl_client.h | 3 | ||||
| -rw-r--r-- | lib/ssl_gnutls.c | 11 | ||||
| -rw-r--r-- | lib/ssl_nss.c | 12 | ||||
| -rw-r--r-- | lib/ssl_openssl.c | 9 | 
5 files changed, 31 insertions, 8 deletions
| diff --git a/lib/ssl_bogus.c b/lib/ssl_bogus.c index 5bae3496..391e634a 100644 --- a/lib/ssl_bogus.c +++ b/lib/ssl_bogus.c @@ -27,6 +27,10 @@  int ssl_errno; +void ssl_init( void ) +{ +} +  void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )  {  	return( NULL ); diff --git a/lib/ssl_client.h b/lib/ssl_client.h index dcbf9a01..44fd658c 100644 --- a/lib/ssl_client.h +++ b/lib/ssl_client.h @@ -46,6 +46,9 @@ extern int ssl_errno;  typedef gboolean (*ssl_input_function)(gpointer, void*, b_input_condition); +/* Perform any global initialization the SSL library might need. */ +G_MODULE_EXPORT void ssl_init( void ); +  /* Connect to host:port, call the given function when the connection is     ready to be used for SSL traffic. This is all done asynchronously, no     blocking I/O! (Except for the DNS lookups, for now...) */ diff --git a/lib/ssl_gnutls.c b/lib/ssl_gnutls.c index b964ab49..ae6f46a4 100644 --- a/lib/ssl_gnutls.c +++ b/lib/ssl_gnutls.c @@ -60,6 +60,13 @@ static gboolean ssl_starttls_real( gpointer data, gint source, b_input_condition  static gboolean ssl_handshake( gpointer data, gint source, b_input_condition cond ); +void ssl_init( void ) +{ +	gnutls_global_init(); +	initialized = TRUE; +	atexit( gnutls_global_deinit ); +} +  void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )  {  	struct scd *conn = g_new0( struct scd, 1 ); @@ -121,9 +128,7 @@ static gboolean ssl_connected( gpointer data, gint source, b_input_condition con  	if( !initialized )  	{ -		gnutls_global_init(); -		initialized = TRUE; -		atexit( gnutls_global_deinit ); +		ssl_init();  	}  	gnutls_certificate_allocate_credentials( &conn->xcred ); diff --git a/lib/ssl_nss.c b/lib/ssl_nss.c index 218b3a80..16560e63 100644 --- a/lib/ssl_nss.c +++ b/lib/ssl_nss.c @@ -90,6 +90,14 @@ static SECStatus nss_bad_cert (void *arg, PRFileDesc *socket)  } +void ssl_init( void ) +{ +	PR_Init( PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); +	NSS_NoDB_Init(NULL); +	NSS_SetDomesticPolicy(); +	initialized = TRUE; +} +  void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )  {  	struct scd *conn = g_new0( struct scd, 1 ); @@ -106,9 +114,7 @@ void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data  	if( !initialized )  	{ -		PR_Init( PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); -		NSS_NoDB_Init(NULL); -		NSS_SetDomesticPolicy(); +		ssl_init();  	} diff --git a/lib/ssl_openssl.c b/lib/ssl_openssl.c index b1ba1db9..e54b21ee 100644 --- a/lib/ssl_openssl.c +++ b/lib/ssl_openssl.c @@ -56,6 +56,12 @@ static gboolean ssl_starttls_real( gpointer data, gint source, b_input_condition  static gboolean ssl_handshake( gpointer data, gint source, b_input_condition cond ); +void ssl_init( void ); +{ +	initialized = TRUE; +	SSLeay_add_ssl_algorithms(); +} +  void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data )  {  	struct scd *conn = g_new0( struct scd, 1 ); @@ -114,8 +120,7 @@ static gboolean ssl_connected( gpointer data, gint source, b_input_condition con  	if( !initialized )  	{ -		initialized = TRUE; -		SSLeay_add_ssl_algorithms(); +		ssl_init();  	}  	meth = TLSv1_client_method(); | 
