From 4c2e40a4889db370308c77e63dd2f10d3a292bdf Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Sat, 13 Sep 2014 15:28:08 +0200
Subject: [PATCH] url: let the backend decide CURLOPT_SSL_CTX_ support

... to further remove specific TLS backend knowledge from url.c
---
 lib/url.c          | 14 ++++++++------
 lib/vtls/openssl.h |  3 +++
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/lib/url.c b/lib/url.c
index 3e90d4e30..74eb7e49b 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -1959,24 +1959,26 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
 
     data->set.ssl.verifyhost = (0 != arg)?TRUE:FALSE;
     break;
-#ifdef USE_SSLEAY
-    /* since these two options are only possible to use on an OpenSSL-
-       powered libcurl we #ifdef them on this condition so that libcurls
-       built against other SSL libs will return a proper error when trying
-       to set this option! */
   case CURLOPT_SSL_CTX_FUNCTION:
+#ifdef have_curlssl_ssl_ctx
     /*
      * Set a SSL_CTX callback
      */
     data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);
+#else
+    result = CURLE_NOT_BUILT_IN;
+#endif
     break;
   case CURLOPT_SSL_CTX_DATA:
+#ifdef have_curlssl_ssl_ctx
     /*
      * Set a SSL_CTX callback parameter pointer
      */
     data->set.ssl.fsslctxp = va_arg(param, void *);
-    break;
+#else
+    result = CURLE_NOT_BUILT_IN;
 #endif
+    break;
   case CURLOPT_CERTINFO:
 #ifdef have_curlssl_certinfo
     data->set.ssl.certinfo = (0 != va_arg(param, long))?TRUE:FALSE;
diff --git a/lib/vtls/openssl.h b/lib/vtls/openssl.h
index e6f205170..9c2602f94 100644
--- a/lib/vtls/openssl.h
+++ b/lib/vtls/openssl.h
@@ -82,6 +82,9 @@ void Curl_ossl_md5sum(unsigned char *tmp, /* input */
 /* this backend supports CURLOPT_CERTINFO */
 #define have_curlssl_certinfo 1
 
+/* this backend suppots CURLOPT_SSL_CTX_* */
+#define have_curlssl_ssl_ctx 1
+
 /* API setup for OpenSSL */
 #define curlssl_init Curl_ossl_init
 #define curlssl_cleanup Curl_ossl_cleanup