Commit 865666af authored by Kamil Dudka's avatar Kamil Dudka
Browse files

nss: unconditionally require NSS_InitContext()

... since we depend on NSS 3.14+ because of SSL_VersionRangeSet() anyway
parent 7fc9325a
Loading
Loading
Loading
Loading
+0 −8
Original line number Original line Diff line number Diff line
@@ -2088,14 +2088,6 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
      if test "x$USE_NSS" = "xyes"; then
      if test "x$USE_NSS" = "xyes"; then
        AC_MSG_NOTICE([detected NSS version $version])
        AC_MSG_NOTICE([detected NSS version $version])


        dnl NSS_InitContext() was introduced in NSS 3.12.5 and helps to prevent
        dnl collisions on NSS initialization/shutdown with other libraries
        AC_CHECK_FUNC(NSS_InitContext,
        [
          AC_DEFINE(HAVE_NSS_INITCONTEXT, 1, [if you have the NSS_InitContext function])
          AC_SUBST(HAVE_NSS_INITCONTEXT, [1])
        ])

        dnl when shared libs were found in a path that the run-time
        dnl when shared libs were found in a path that the run-time
        dnl linker doesn't search through, we need to add it to
        dnl linker doesn't search through, we need to add it to
        dnl LD_LIBRARY_PATH to prevent further configure tests to fail
        dnl LD_LIBRARY_PATH to prevent further configure tests to fail
+0 −26
Original line number Original line Diff line number Diff line
@@ -77,9 +77,7 @@ PRFileDesc *PR_ImportTCPSocket(PRInt32 osfd);


PRLock * nss_initlock = NULL;
PRLock * nss_initlock = NULL;
PRLock * nss_crllock = NULL;
PRLock * nss_crllock = NULL;
#ifdef HAVE_NSS_INITCONTEXT
NSSInitContext * nss_context = NULL;
NSSInitContext * nss_context = NULL;
#endif


volatile int initialized = 0;
volatile int initialized = 0;


@@ -893,7 +891,6 @@ isTLSIntoleranceError(PRInt32 err)


static CURLcode nss_init_core(struct SessionHandle *data, const char *cert_dir)
static CURLcode nss_init_core(struct SessionHandle *data, const char *cert_dir)
{
{
#ifdef HAVE_NSS_INITCONTEXT
  NSSInitParameters initparams;
  NSSInitParameters initparams;


  if(nss_context != NULL)
  if(nss_context != NULL)
@@ -901,12 +898,6 @@ static CURLcode nss_init_core(struct SessionHandle *data, const char *cert_dir)


  memset((void *) &initparams, '\0', sizeof(initparams));
  memset((void *) &initparams, '\0', sizeof(initparams));
  initparams.length = sizeof(initparams);
  initparams.length = sizeof(initparams);
#else /* HAVE_NSS_INITCONTEXT */
  SECStatus rv;

  if(NSS_IsInitialized())
    return CURLE_OK;
#endif


  if(cert_dir) {
  if(cert_dir) {
    const bool use_sql = NSS_VersionCheck("3.12.0");
    const bool use_sql = NSS_VersionCheck("3.12.0");
@@ -915,35 +906,22 @@ static CURLcode nss_init_core(struct SessionHandle *data, const char *cert_dir)
      return CURLE_OUT_OF_MEMORY;
      return CURLE_OUT_OF_MEMORY;


    infof(data, "Initializing NSS with certpath: %s\n", certpath);
    infof(data, "Initializing NSS with certpath: %s\n", certpath);
#ifdef HAVE_NSS_INITCONTEXT
    nss_context = NSS_InitContext(certpath, "", "", "", &initparams,
    nss_context = NSS_InitContext(certpath, "", "", "", &initparams,
            NSS_INIT_READONLY | NSS_INIT_PK11RELOAD);
            NSS_INIT_READONLY | NSS_INIT_PK11RELOAD);
    free(certpath);
    free(certpath);


    if(nss_context != NULL)
    if(nss_context != NULL)
      return CURLE_OK;
      return CURLE_OK;
#else /* HAVE_NSS_INITCONTEXT */
    rv = NSS_Initialize(certpath, "", "", "", NSS_INIT_READONLY);
    free(certpath);

    if(rv == SECSuccess)
      return CURLE_OK;
#endif


    infof(data, "Unable to initialize NSS database\n");
    infof(data, "Unable to initialize NSS database\n");
  }
  }


  infof(data, "Initializing NSS with certpath: none\n");
  infof(data, "Initializing NSS with certpath: none\n");
#ifdef HAVE_NSS_INITCONTEXT
  nss_context = NSS_InitContext("", "", "", "", &initparams, NSS_INIT_READONLY
  nss_context = NSS_InitContext("", "", "", "", &initparams, NSS_INIT_READONLY
         | NSS_INIT_NOCERTDB   | NSS_INIT_NOMODDB       | NSS_INIT_FORCEOPEN
         | NSS_INIT_NOCERTDB   | NSS_INIT_NOMODDB       | NSS_INIT_FORCEOPEN
         | NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD);
         | NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD);
  if(nss_context != NULL)
  if(nss_context != NULL)
    return CURLE_OK;
    return CURLE_OK;
#else /* HAVE_NSS_INITCONTEXT */
  if(NSS_NoDB_Init(NULL) == SECSuccess)
    return CURLE_OK;
#endif


  infof(data, "Unable to initialize NSS\n");
  infof(data, "Unable to initialize NSS\n");
  return CURLE_SSL_CACERT_BADFILE;
  return CURLE_SSL_CACERT_BADFILE;
@@ -1039,12 +1017,8 @@ void Curl_nss_cleanup(void)
      SECMOD_DestroyModule(mod);
      SECMOD_DestroyModule(mod);
      mod = NULL;
      mod = NULL;
    }
    }
#ifdef HAVE_NSS_INITCONTEXT
    NSS_ShutdownContext(nss_context);
    NSS_ShutdownContext(nss_context);
    nss_context = NULL;
    nss_context = NULL;
#else /* HAVE_NSS_INITCONTEXT */
    NSS_Shutdown();
#endif
  }
  }
  PR_Unlock(nss_initlock);
  PR_Unlock(nss_initlock);