Commit 15e3e451 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent 9dd85bce
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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)
+1 −0
Original line number Diff line number Diff line
@@ -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
+3 −2
Original line number Diff line number Diff line
@@ -2014,7 +2014,8 @@ typedef enum {
  CURLSHE_BAD_OPTION, /* 1 */
  CURLSHE_IN_USE,     /* 2 */
  CURLSHE_INVALID,    /* 3 */
  CURLSHE_NOMEM,      /* out of memory */
  CURLSHE_NOMEM,      /* 4 out of memory */
  CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */
  CURLSHE_LAST        /* never use */
} CURLSHcode;

+18 −4
Original line number Diff line number Diff line
@@ -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);
+5 −1
Original line number Diff line number Diff line
@@ -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;
};

Loading