int SSL_set_session(SSL *s, SSL_SESSION *session) { int ret = 0; const SSL_METHOD *meth; if (session != NULL) { meth = s->ctx->method->internal->get_ssl_method(session->ssl_version); if (meth == NULL) meth = s->method->internal->get_ssl_method(session->ssl_version); if (meth == NULL) { SSLerror(s, SSL_R_UNABLE_TO_FIND_SSL_METHOD); return (0); } if (meth != s->method) { if (!SSL_set_ssl_method(s, meth)) return (0); } /* CRYPTO_w_lock(CRYPTO_LOCK_SSL);*/ CRYPTO_add(&session->references, 1, CRYPTO_LOCK_SSL_SESSION); if (s->session != NULL) SSL_SESSION_free(s->session); s->session = session; s->verify_result = s->session->verify_result; /* CRYPTO_w_unlock(CRYPTO_LOCK_SSL);*/ ret = 1; } else { if (s->session != NULL) { SSL_SESSION_free(s->session); s->session = NULL; } meth = s->ctx->method; if (meth != s->method) { if (!SSL_set_ssl_method(s, meth)) return (0); } ret = 1; } return (ret); }
SSL * ssl_read_ssl(FILE * fp, int sock) { SSL *ssl; BIO *bio; bio = BIO_new(BIO_s_socket()); fread(bio, sizeof(BIO), 1, fp); ssl = SSL_new(ctx); fread(ssl, sizeof(SSL), 1, fp); SSL_set_ssl_method(ssl, SSLv23_server_method()); SSL_set_bio(ssl, bio, bio); return ssl; }
int SSL_set_session(SSL *s, SSL_SESSION *session) { ssl_clear_bad_session(s); if (s->ctx->method != s->method) { if (!SSL_set_ssl_method(s, s->ctx->method)) return 0; } if (session != NULL) { SSL_SESSION_up_ref(session); s->verify_result = session->verify_result; } SSL_SESSION_free(s->session); s->session = session; return 1; }
void * ssl_smtp_init(void *ssl_ctx) { SSL *ssl = NULL; log_debug("debug: session_start_ssl: switching to SSL"); if ((ssl = SSL_new(ssl_ctx)) == NULL) goto err; if (!SSL_set_ssl_method(ssl, SSLv23_server_method())) goto err; return (void *)(ssl); err: if (ssl != NULL) SSL_free(ssl); ssl_error("ssl_smtp_init"); return (NULL); }
void * ssl_mta_init(void *pkiname, char *cert, off_t cert_len, const char *ciphers) { SSL_CTX *ctx = NULL; SSL *ssl = NULL; ctx = ssl_ctx_create(pkiname, cert, cert_len, ciphers); if ((ssl = SSL_new(ctx)) == NULL) goto err; if (!SSL_set_ssl_method(ssl, SSLv23_client_method())) goto err; SSL_CTX_free(ctx); return (void *)(ssl); err: if (ssl != NULL) SSL_free(ssl); if (ctx != NULL) SSL_CTX_free(ctx); ssl_error("ssl_mta_init"); return (NULL); }