summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--old-configure.in19
-rw-r--r--security/certverifier/NSSCertDBTrustDomain.cpp5
-rw-r--r--security/manager/ssl/nsNSSComponent.cpp11
3 files changed, 35 insertions, 0 deletions
diff --git a/old-configure.in b/old-configure.in
index d438d9ea36..6c0b80d7b5 100644
--- a/old-configure.in
+++ b/old-configure.in
@@ -2160,6 +2160,7 @@ MOZ_SERVICES_HEALTHREPORT=1
MOZ_SERVICES_SYNC=1
MOZ_USERINFO=1
NSS_DISABLE_DBM=
+NSS_SQLSTORE=
MOZ_MAILNEWS=
MOZ_MAILNEWS_OAUTH2=
MOZ_LDAP_XPCOM=
@@ -2717,6 +2718,24 @@ fi
AC_SUBST(NSS_DISABLE_DBM)
dnl =========================================================
+dnl = NSS SQL storage format
+dnl =========================================================
+MOZ_ARG_ENABLE_BOOL(nss-sqlstore,
+[ --enable-nss-sqlstore Enable the us of SQL storage for NSS],
+ NSS_SQLSTORE=1,
+ NSS_SQLSTORE=)
+
+if test -n "$NSS_DISABLE_DBM" -a -z "$NSS_SQLSTORE"; then
+ AC_MSG_ERROR([DBM storage support is required if not using NSS SQL storage])
+fi
+
+if test -n "$NSS_SQLSTORE"; then
+ AC_DEFINE(NSS_SQLSTORE)
+fi
+
+AC_SUBST(NSS_SQLSTORE)
+
+dnl =========================================================
dnl = Don't fold mailnews related comps into libXUL
dnl =========================================================
MOZ_ARG_ENABLE_BOOL(incomplete-external-linkage,
diff --git a/security/certverifier/NSSCertDBTrustDomain.cpp b/security/certverifier/NSSCertDBTrustDomain.cpp
index 5e89c24849..2793fad486 100644
--- a/security/certverifier/NSSCertDBTrustDomain.cpp
+++ b/security/certverifier/NSSCertDBTrustDomain.cpp
@@ -1102,7 +1102,12 @@ InitializeNSS(const nsACString& dir, bool readOnly, bool loadPKCS11Modules)
flags |= NSS_INIT_NOMODDB;
}
nsAutoCString dbTypeAndDirectory;
+#ifdef NSS_SQLSTORE
+ // Not strictly necessary with current NSS versions, but can't hurt to be explicit.
+ dbTypeAndDirectory.Append("sql:");
+#else
dbTypeAndDirectory.Append("dbm:");
+#endif
dbTypeAndDirectory.Append(dir);
return ::NSS_Initialize(dbTypeAndDirectory.get(), "", "", SECMOD_DB, flags);
}
diff --git a/security/manager/ssl/nsNSSComponent.cpp b/security/manager/ssl/nsNSSComponent.cpp
index dfff59da98..d505b8abae 100644
--- a/security/manager/ssl/nsNSSComponent.cpp
+++ b/security/manager/ssl/nsNSSComponent.cpp
@@ -12,6 +12,9 @@
#include "SharedSSLState.h"
#include "cert.h"
#include "certdb.h"
+#ifdef NSS_SQLSTORE
+#include "mozStorageCID.h"
+#endif
#include "mozilla/ArrayUtils.h"
#include "mozilla/Casting.h"
#include "mozilla/Preferences.h"
@@ -1970,6 +1973,14 @@ nsNSSComponent::Init()
return NS_ERROR_NOT_SAME_THREAD;
}
+#ifdef NSS_SQLSTORE
+ // To avoid an sqlite3_config race in NSS init, we require the storage service to get initialized first.
+ nsCOMPtr<nsISupports> storageService = do_GetService(MOZ_STORAGE_SERVICE_CONTRACTID);
+ if (!storageService) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+#endif
+
nsresult rv = NS_OK;
MOZ_LOG(gPIPNSSLog, LogLevel::Debug, ("Beginning NSS initialization\n"));