mirror of
https://github.com/moparisthebest/curl
synced 2025-02-28 09:21:50 -05:00
share: don't use SSL unless enabled
Don't even declare the struct members for disabled features Introducing the CURLSHE_NOT_BUILT_IN return code for the share interface when trying to set a sharing option that has been disabled (or not enabled) in the library.
This commit is contained in:
parent
9dd85bced5
commit
15e3e45170
@ -277,3 +277,6 @@ An invalid share object was passed to the function.
|
||||
.IP "CURLSHE_NOMEM (4)"
|
||||
Not enough memory was available.
|
||||
(Added in 7.12.0)
|
||||
.IP "CURLSHE_NOT_BUILT_IN (5)"
|
||||
The requsted sharing could not be done because the library you use don't have
|
||||
that particular feature enabled. (Added in 7.23.0)
|
||||
|
@ -550,6 +550,7 @@ CURLSHE_BAD_OPTION 7.10.3
|
||||
CURLSHE_INVALID 7.10.3
|
||||
CURLSHE_IN_USE 7.10.3
|
||||
CURLSHE_NOMEM 7.12.0
|
||||
CURLSHE_NOT_BUILT_IN 7.23.0
|
||||
CURLSHE_OK 7.10.3
|
||||
CURLSHOPT_LOCKFUNC 7.10.3
|
||||
CURLSHOPT_NONE 7.10.3
|
||||
|
@ -2014,8 +2014,9 @@ typedef enum {
|
||||
CURLSHE_BAD_OPTION, /* 1 */
|
||||
CURLSHE_IN_USE, /* 2 */
|
||||
CURLSHE_INVALID, /* 3 */
|
||||
CURLSHE_NOMEM, /* out of memory */
|
||||
CURLSHE_LAST /* never use */
|
||||
CURLSHE_NOMEM, /* 4 out of memory */
|
||||
CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */
|
||||
CURLSHE_LAST /* never use */
|
||||
} CURLSHcode;
|
||||
|
||||
typedef enum {
|
||||
|
22
lib/share.c
22
lib/share.c
@ -73,17 +73,20 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
|
||||
}
|
||||
break;
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
|
||||
case CURL_LOCK_DATA_COOKIE:
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
|
||||
if(!share->cookies) {
|
||||
share->cookies = Curl_cookie_init(NULL, NULL, NULL, TRUE );
|
||||
if(!share->cookies)
|
||||
return CURLSHE_NOMEM;
|
||||
}
|
||||
break;
|
||||
#endif /* CURL_DISABLE_HTTP */
|
||||
#else /* CURL_DISABLE_HTTP */
|
||||
return CURLSHE_NOT_BUILT_IN;
|
||||
#endif
|
||||
|
||||
case CURL_LOCK_DATA_SSL_SESSION:
|
||||
#ifdef USE_SSL
|
||||
if(!share->sslsession) {
|
||||
share->nsslsession = 8;
|
||||
share->sslsession = calloc(share->nsslsession,
|
||||
@ -92,6 +95,9 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
|
||||
return CURLSHE_NOMEM;
|
||||
}
|
||||
break;
|
||||
#else
|
||||
return CURLSHE_NOT_BUILT_IN;
|
||||
#endif
|
||||
|
||||
case CURL_LOCK_DATA_CONNECT: /* not supported (yet) */
|
||||
|
||||
@ -112,22 +118,28 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
|
||||
}
|
||||
break;
|
||||
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
|
||||
case CURL_LOCK_DATA_COOKIE:
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
|
||||
if(share->cookies) {
|
||||
Curl_cookie_cleanup(share->cookies);
|
||||
share->cookies = NULL;
|
||||
}
|
||||
break;
|
||||
#endif /* CURL_DISABLE_HTTP */
|
||||
#else /* CURL_DISABLE_HTTP */
|
||||
return CURLSHE_NOT_BUILT_IN;
|
||||
#endif
|
||||
|
||||
case CURL_LOCK_DATA_SSL_SESSION:
|
||||
#ifdef USE_SSL
|
||||
if(share->sslsession) {
|
||||
free(share->sslsession);
|
||||
share->sslsession = NULL;
|
||||
share->nsslsession = 0;
|
||||
}
|
||||
break;
|
||||
#else
|
||||
return CURLSHE_NOT_BUILT_IN;
|
||||
#endif
|
||||
|
||||
case CURL_LOCK_DATA_CONNECT:
|
||||
break;
|
||||
@ -186,11 +198,13 @@ curl_share_cleanup(CURLSH *sh)
|
||||
if(share->cookies)
|
||||
Curl_cookie_cleanup(share->cookies);
|
||||
|
||||
#ifdef USE_SSL
|
||||
if(share->sslsession) {
|
||||
for(i = 0; i < share->nsslsession; ++i)
|
||||
Curl_ssl_kill_session(&(share->sslsession[i]));
|
||||
free(share->sslsession);
|
||||
}
|
||||
#endif
|
||||
|
||||
if(share->unlockfunc)
|
||||
share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata);
|
||||
|
@ -8,7 +8,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@ -46,9 +46,13 @@ struct Curl_share {
|
||||
void *clientdata;
|
||||
|
||||
struct curl_hash *hostcache;
|
||||
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
|
||||
struct CookieInfo *cookies;
|
||||
#endif
|
||||
|
||||
#ifdef USE_SSL
|
||||
struct curl_ssl_session *sslsession;
|
||||
#endif
|
||||
unsigned int nsslsession;
|
||||
};
|
||||
|
||||
|
@ -384,6 +384,9 @@ curl_share_strerror(CURLSHcode error)
|
||||
case CURLSHE_NOMEM:
|
||||
return "Out of memory";
|
||||
|
||||
case CURLSHE_NOT_BUILT_IN:
|
||||
return "Feature not enabled in this library";
|
||||
|
||||
case CURLSHE_LAST:
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user