Index: chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp |
diff --git a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp |
index 615ffa6b7a42719407b56e3dda478c6e5d3b4421..13333fcc0f47d4d66dbbd6a1105ae41937620338 100644 |
--- a/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp |
+++ b/chrome/third_party/mozilla_security_manager/nsNSSCertHelper.cpp |
@@ -46,6 +46,7 @@ |
#include <unicode/uidna.h> |
#include "base/i18n/number_formatting.h" |
+#include "base/lazy_instance.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
@@ -104,10 +105,6 @@ std::string ProcessRawBytes(SECItem* data) { |
return x509_certificate_model::ProcessRawBytes(data->data, data->len); |
} |
-} // namespace |
- |
-namespace mozilla_security_manager { |
- |
SECOidTag ms_cert_ext_certtype = SEC_OID_UNKNOWN; |
SECOidTag ms_certsrv_ca_version = SEC_OID_UNKNOWN; |
SECOidTag ms_nt_principal_name = SEC_OID_UNKNOWN; |
@@ -130,41 +127,48 @@ SECOidTag eku_netscape_international_step_up = SEC_OID_UNKNOWN; |
SECOidTag cert_attribute_business_category = SEC_OID_UNKNOWN; |
SECOidTag cert_attribute_ev_incorporation_country = SEC_OID_UNKNOWN; |
-void RegisterDynamicOids() { |
- if (ms_cert_ext_certtype != SEC_OID_UNKNOWN) |
- return; |
- |
- ms_cert_ext_certtype = RegisterDynamicOid("1.3.6.1.4.1.311.20.2"); |
- ms_certsrv_ca_version = RegisterDynamicOid("1.3.6.1.4.1.311.21.1"); |
- ms_nt_principal_name = RegisterDynamicOid("1.3.6.1.4.1.311.20.2.3"); |
- ms_ntds_replication = RegisterDynamicOid("1.3.6.1.4.1.311.25.1"); |
- |
- eku_ms_individual_code_signing = RegisterDynamicOid("1.3.6.1.4.1.311.2.1.21"); |
- eku_ms_commercial_code_signing = RegisterDynamicOid("1.3.6.1.4.1.311.2.1.22"); |
- eku_ms_trust_list_signing = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.1"); |
- eku_ms_time_stamping = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.2"); |
- eku_ms_server_gated_crypto = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.3"); |
- eku_ms_encrypting_file_system = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.4"); |
- eku_ms_file_recovery = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.4.1"); |
- eku_ms_windows_hardware_driver_verification = RegisterDynamicOid( |
- "1.3.6.1.4.1.311.10.3.5"); |
- eku_ms_qualified_subordination = RegisterDynamicOid( |
- "1.3.6.1.4.1.311.10.3.10"); |
- eku_ms_key_recovery = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.11"); |
- eku_ms_document_signing = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.12"); |
- eku_ms_lifetime_signing = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.13"); |
- eku_ms_smart_card_logon = RegisterDynamicOid("1.3.6.1.4.1.311.20.2.2"); |
- eku_ms_key_recovery_agent = RegisterDynamicOid("1.3.6.1.4.1.311.21.6"); |
- eku_netscape_international_step_up = RegisterDynamicOid( |
- "2.16.840.1.113730.4.1"); |
- |
- // These two OIDs will be built-in as SEC_OID_BUSINESS_CATEGORY and |
- // SEC_OID_EV_INCORPORATION_COUNTRY starting in NSS 3.13. Until then, |
- // we need to add them dynamically. |
- cert_attribute_business_category = RegisterDynamicOid("2.5.4.15"); |
- cert_attribute_ev_incorporation_country = RegisterDynamicOid( |
- "1.3.6.1.4.1.311.60.2.1.3"); |
-} |
+class DynamicOidRegisterer { |
+ public: |
+ DynamicOidRegisterer() { |
+ ms_cert_ext_certtype = RegisterDynamicOid("1.3.6.1.4.1.311.20.2"); |
+ ms_certsrv_ca_version = RegisterDynamicOid("1.3.6.1.4.1.311.21.1"); |
+ ms_nt_principal_name = RegisterDynamicOid("1.3.6.1.4.1.311.20.2.3"); |
+ ms_ntds_replication = RegisterDynamicOid("1.3.6.1.4.1.311.25.1"); |
+ |
+ eku_ms_individual_code_signing = RegisterDynamicOid("1.3.6.1.4.1.311.2.1.21"); |
+ eku_ms_commercial_code_signing = RegisterDynamicOid("1.3.6.1.4.1.311.2.1.22"); |
+ eku_ms_trust_list_signing = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.1"); |
+ eku_ms_time_stamping = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.2"); |
+ eku_ms_server_gated_crypto = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.3"); |
+ eku_ms_encrypting_file_system = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.4"); |
+ eku_ms_file_recovery = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.4.1"); |
+ eku_ms_windows_hardware_driver_verification = RegisterDynamicOid( |
+ "1.3.6.1.4.1.311.10.3.5"); |
+ eku_ms_qualified_subordination = RegisterDynamicOid( |
+ "1.3.6.1.4.1.311.10.3.10"); |
+ eku_ms_key_recovery = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.11"); |
+ eku_ms_document_signing = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.12"); |
+ eku_ms_lifetime_signing = RegisterDynamicOid("1.3.6.1.4.1.311.10.3.13"); |
+ eku_ms_smart_card_logon = RegisterDynamicOid("1.3.6.1.4.1.311.20.2.2"); |
+ eku_ms_key_recovery_agent = RegisterDynamicOid("1.3.6.1.4.1.311.21.6"); |
+ eku_netscape_international_step_up = RegisterDynamicOid( |
+ "2.16.840.1.113730.4.1"); |
+ |
+ // These two OIDs will be built-in as SEC_OID_BUSINESS_CATEGORY and |
+ // SEC_OID_EV_INCORPORATION_COUNTRY starting in NSS 3.13. Until then, |
+ // we need to add them dynamically. |
+ cert_attribute_business_category = RegisterDynamicOid("2.5.4.15"); |
+ cert_attribute_ev_incorporation_country = RegisterDynamicOid( |
+ "1.3.6.1.4.1.311.60.2.1.3"); |
+ } |
+}; |
+ |
+static base::LazyInstance<DynamicOidRegisterer>::Leaky |
+ g_dynamic_oid_registerer = LAZY_INSTANCE_INITIALIZER; |
+ |
+} // namespace |
+ |
+namespace mozilla_security_manager { |
std::string DumpOidString(SECItem* oid) { |
char* pr_string = CERT_GetOidString(oid); |
@@ -178,6 +182,8 @@ std::string DumpOidString(SECItem* oid) { |
} |
std::string GetOIDText(SECItem* oid) { |
+ g_dynamic_oid_registerer.Get(); |
+ |
int string_id; |
SECOidTag oid_tag = SECOID_FindOIDTag(oid); |
switch (oid_tag) { |