2001-01-10 01:32:29 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Mozilla Public
|
|
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.mozilla.org/MPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS
|
|
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
|
|
* implied. See the License for the specific language governing
|
|
|
|
* rights and limitations under the License.
|
|
|
|
*
|
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape
|
|
|
|
* Communications Corporation. Portions created by Netscape are
|
|
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
|
|
* Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s):
|
|
|
|
* Hubbie Shaw
|
|
|
|
* Doug Turner <dougt@netscape.com>
|
|
|
|
* Brian Ryner <bryner@netscape.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "nsIModule.h"
|
|
|
|
#include "nsIGenericFactory.h"
|
|
|
|
|
|
|
|
#include "nsNSSComponent.h"
|
|
|
|
#include "nsSSLSocketProvider.h"
|
|
|
|
#include "nsTLSSocketProvider.h"
|
2001-05-03 01:00:56 +00:00
|
|
|
#include "nsKeygenHandler.h"
|
2001-01-10 01:32:29 +00:00
|
|
|
|
2001-01-31 18:03:49 +00:00
|
|
|
#include "nsSDR.h"
|
|
|
|
|
2001-02-06 23:01:33 +00:00
|
|
|
#include "nsPK11TokenDB.h"
|
2001-05-15 20:40:28 +00:00
|
|
|
#include "nsPKCS11Slot.h"
|
2001-02-26 21:50:54 +00:00
|
|
|
#include "nsNSSCertificate.h"
|
2002-03-29 02:46:01 +00:00
|
|
|
#include "nsCertTree.h"
|
2001-05-15 23:15:12 +00:00
|
|
|
#include "nsCrypto.h"
|
|
|
|
//For the NS_CRYPTO_CONTRACTID define
|
|
|
|
#include "nsDOMCID.h"
|
|
|
|
|
2001-10-30 23:52:01 +00:00
|
|
|
#include "nsCMSSecureMessage.h"
|
|
|
|
#include "nsCMS.h"
|
|
|
|
#include "nsCertPicker.h"
|
2001-11-30 00:07:13 +00:00
|
|
|
#include "nsCURILoader.h"
|
|
|
|
#include "nsICategoryManager.h"
|
2001-01-31 18:03:49 +00:00
|
|
|
|
2001-11-29 23:36:34 +00:00
|
|
|
// We must ensure that the nsNSSComponent has been loaded before
|
|
|
|
// creating any other components.
|
|
|
|
static void EnsureNSSInitialized(PRBool triggeredByNSSComponent)
|
|
|
|
{
|
|
|
|
static PRBool haveLoaded = PR_FALSE;
|
|
|
|
if (haveLoaded)
|
|
|
|
return;
|
|
|
|
|
|
|
|
haveLoaded = PR_TRUE;
|
|
|
|
|
|
|
|
if (triggeredByNSSComponent) {
|
|
|
|
// Me must prevent a recursion, as nsNSSComponent creates
|
|
|
|
// additional instances
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
nsCOMPtr<nsISupports> nssComponent
|
|
|
|
= do_GetService(PSM_COMPONENT_CONTRACTID);
|
|
|
|
}
|
|
|
|
|
|
|
|
// These two macros are ripped off from nsIGenericFactory.h and slightly
|
|
|
|
// modified.
|
|
|
|
#define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(triggeredByNSSComponent, \
|
|
|
|
_InstanceClass) \
|
|
|
|
static NS_IMETHODIMP \
|
|
|
|
_InstanceClass##Constructor(nsISupports *aOuter, REFNSIID aIID, \
|
|
|
|
void **aResult) \
|
|
|
|
{ \
|
|
|
|
nsresult rv; \
|
|
|
|
_InstanceClass * inst; \
|
|
|
|
\
|
|
|
|
EnsureNSSInitialized(triggeredByNSSComponent); \
|
|
|
|
\
|
|
|
|
*aResult = NULL; \
|
|
|
|
if (NULL != aOuter) { \
|
|
|
|
rv = NS_ERROR_NO_AGGREGATION; \
|
|
|
|
return rv; \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
NS_NEWXPCOM(inst, _InstanceClass); \
|
|
|
|
if (NULL == inst) { \
|
|
|
|
rv = NS_ERROR_OUT_OF_MEMORY; \
|
|
|
|
return rv; \
|
|
|
|
} \
|
|
|
|
NS_ADDREF(inst); \
|
|
|
|
rv = inst->QueryInterface(aIID, aResult); \
|
|
|
|
NS_RELEASE(inst); \
|
|
|
|
\
|
|
|
|
return rv; \
|
|
|
|
} \
|
|
|
|
|
|
|
|
|
|
|
|
#define NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(triggeredByNSSComponent, \
|
|
|
|
_InstanceClass, _InitMethod) \
|
|
|
|
static NS_IMETHODIMP \
|
|
|
|
_InstanceClass##Constructor(nsISupports *aOuter, REFNSIID aIID, \
|
|
|
|
void **aResult) \
|
|
|
|
{ \
|
|
|
|
nsresult rv; \
|
|
|
|
_InstanceClass * inst; \
|
|
|
|
\
|
|
|
|
EnsureNSSInitialized(triggeredByNSSComponent); \
|
|
|
|
\
|
|
|
|
*aResult = NULL; \
|
|
|
|
if (NULL != aOuter) { \
|
|
|
|
rv = NS_ERROR_NO_AGGREGATION; \
|
|
|
|
return rv; \
|
|
|
|
} \
|
|
|
|
\
|
|
|
|
NS_NEWXPCOM(inst, _InstanceClass); \
|
|
|
|
if (NULL == inst) { \
|
|
|
|
rv = NS_ERROR_OUT_OF_MEMORY; \
|
|
|
|
return rv; \
|
|
|
|
} \
|
|
|
|
NS_ADDREF(inst); \
|
|
|
|
rv = inst->_InitMethod(); \
|
|
|
|
if(NS_SUCCEEDED(rv)) { \
|
|
|
|
rv = inst->QueryInterface(aIID, aResult); \
|
|
|
|
} \
|
|
|
|
NS_RELEASE(inst); \
|
|
|
|
\
|
|
|
|
return rv; \
|
|
|
|
} \
|
|
|
|
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(PR_TRUE, nsNSSComponent, Init)
|
|
|
|
|
|
|
|
// Use the special factory constructor for everything this module implements,
|
|
|
|
// because all code could potentially require the NSS library.
|
|
|
|
// Our factory constructor takes an additional boolean parameter.
|
|
|
|
// Only for the nsNSSComponent, set this to PR_TRUE.
|
|
|
|
// All other classes must have this set to PR_FALSE.
|
|
|
|
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsSSLSocketProvider)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsTLSSocketProvider)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsSecretDecoderRing)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsPK11TokenDB)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsPKCS11ModuleDB)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR_INIT(PR_FALSE, PSMContentListener, init)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsNSSCertificateDB)
|
2002-08-06 13:25:23 +00:00
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsNSSCertCache)
|
2002-03-29 02:46:01 +00:00
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsCertTree)
|
2001-11-29 23:36:34 +00:00
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsCrypto)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsPkcs11)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsCMSSecureMessage)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsCMSDecoder)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsCMSEncoder)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsCMSMessage)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsHash)
|
|
|
|
NS_NSS_GENERIC_FACTORY_CONSTRUCTOR(PR_FALSE, nsCertPicker)
|
2001-01-10 01:32:29 +00:00
|
|
|
|
2001-11-30 00:07:13 +00:00
|
|
|
static NS_METHOD RegisterPSMContentListeners(
|
|
|
|
nsIComponentManager *aCompMgr,
|
|
|
|
nsIFile *aPath, const char *registryLocation,
|
|
|
|
const char *componentType, const nsModuleComponentInfo *info)
|
|
|
|
{
|
|
|
|
nsresult rv;
|
|
|
|
nsCOMPtr<nsICategoryManager> catman =
|
|
|
|
do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv);
|
|
|
|
if (NS_FAILED(rv)) return rv;
|
|
|
|
|
|
|
|
nsXPIDLCString previous;
|
|
|
|
|
|
|
|
catman->AddCategoryEntry(
|
|
|
|
NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY,
|
|
|
|
"application/x-x509-ca-cert",
|
|
|
|
info->mContractID, PR_TRUE, PR_TRUE, getter_Copies(previous));
|
|
|
|
|
|
|
|
catman->AddCategoryEntry(
|
|
|
|
NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY,
|
|
|
|
"application/x-x509-server-cert",
|
|
|
|
info->mContractID, PR_TRUE, PR_TRUE, getter_Copies(previous));
|
|
|
|
|
|
|
|
catman->AddCategoryEntry(
|
|
|
|
NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY,
|
|
|
|
"application/x-x509-user-cert",
|
|
|
|
info->mContractID, PR_TRUE, PR_TRUE, getter_Copies(previous));
|
|
|
|
|
|
|
|
catman->AddCategoryEntry(
|
|
|
|
NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY,
|
|
|
|
"application/x-x509-email-cert",
|
|
|
|
info->mContractID, PR_TRUE, PR_TRUE, getter_Copies(previous));
|
|
|
|
|
|
|
|
catman->AddCategoryEntry(
|
|
|
|
NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY,
|
|
|
|
"application/x-pkcs7-crl",
|
|
|
|
info->mContractID, PR_TRUE, PR_TRUE, getter_Copies(previous));
|
|
|
|
|
|
|
|
catman->AddCategoryEntry(
|
|
|
|
NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY,
|
|
|
|
"application/x-x509-crl",
|
|
|
|
info->mContractID, PR_TRUE, PR_TRUE, getter_Copies(previous));
|
|
|
|
|
|
|
|
catman->AddCategoryEntry(
|
|
|
|
NS_CONTENT_LISTENER_CATEGORYMANAGER_ENTRY,
|
|
|
|
"application/pkix-crl",
|
|
|
|
info->mContractID, PR_TRUE, PR_TRUE, getter_Copies(previous));
|
|
|
|
|
|
|
|
return NS_OK;
|
|
|
|
}
|
|
|
|
|
2002-01-30 21:14:20 +00:00
|
|
|
static const nsModuleComponentInfo components[] =
|
2001-01-10 01:32:29 +00:00
|
|
|
{
|
|
|
|
{
|
|
|
|
PSM_COMPONENT_CLASSNAME,
|
|
|
|
NS_NSSCOMPONENT_CID,
|
|
|
|
PSM_COMPONENT_CONTRACTID,
|
2001-01-19 01:12:10 +00:00
|
|
|
nsNSSComponentConstructor
|
2001-01-10 01:32:29 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
NS_ISSLSOCKETPROVIDER_CLASSNAME,
|
|
|
|
NS_SSLSOCKETPROVIDER_CID,
|
|
|
|
NS_ISSLSOCKETPROVIDER_CONTRACTID,
|
2001-01-19 01:12:10 +00:00
|
|
|
nsSSLSocketProviderConstructor
|
2001-01-10 01:32:29 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
2002-08-14 23:43:28 +00:00
|
|
|
NS_STARTTLSSOCKETPROVIDER_CLASSNAME,
|
|
|
|
NS_STARTTLSSOCKETPROVIDER_CID,
|
|
|
|
NS_STARTTLSSOCKETPROVIDER_CONTRACTID,
|
2001-01-19 01:12:10 +00:00
|
|
|
nsTLSSocketProviderConstructor
|
2001-01-10 01:32:29 +00:00
|
|
|
},
|
|
|
|
|
2001-01-31 18:03:49 +00:00
|
|
|
{
|
|
|
|
NS_SDR_CLASSNAME,
|
|
|
|
NS_SDR_CID,
|
|
|
|
NS_SDR_CONTRACTID,
|
|
|
|
nsSecretDecoderRingConstructor
|
|
|
|
},
|
|
|
|
|
2001-02-06 23:01:33 +00:00
|
|
|
{
|
|
|
|
"PK11 Token Database",
|
|
|
|
NS_PK11TOKENDB_CID,
|
|
|
|
NS_PK11TOKENDB_CONTRACTID,
|
|
|
|
nsPK11TokenDBConstructor
|
|
|
|
},
|
2001-02-26 21:50:54 +00:00
|
|
|
|
2001-05-15 20:40:28 +00:00
|
|
|
{
|
|
|
|
"PKCS11 Module Database",
|
|
|
|
NS_PKCS11MODULEDB_CID,
|
|
|
|
NS_PKCS11MODULEDB_CONTRACTID,
|
|
|
|
nsPKCS11ModuleDBConstructor
|
|
|
|
},
|
|
|
|
|
2001-02-26 21:50:54 +00:00
|
|
|
{
|
|
|
|
"Generic Certificate Content Handler",
|
2001-05-19 01:20:18 +00:00
|
|
|
NS_PSMCONTENTLISTEN_CID,
|
|
|
|
NS_PSMCONTENTLISTEN_CONTRACTID,
|
|
|
|
PSMContentListenerConstructor
|
2001-02-26 21:50:54 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
"X509 Certificate Database",
|
|
|
|
NS_X509CERTDB_CID,
|
|
|
|
NS_X509CERTDB_CONTRACTID,
|
|
|
|
nsNSSCertificateDBConstructor
|
2001-05-01 23:23:23 +00:00
|
|
|
},
|
|
|
|
|
2002-08-06 13:25:23 +00:00
|
|
|
{
|
|
|
|
"NSS Certificate Cache",
|
|
|
|
NS_NSSCERTCACHE_CID,
|
|
|
|
NS_NSSCERTCACHE_CONTRACTID,
|
|
|
|
nsNSSCertCacheConstructor
|
|
|
|
},
|
|
|
|
|
2001-05-03 01:00:56 +00:00
|
|
|
{
|
|
|
|
"Form Processor",
|
|
|
|
NS_FORMPROCESSOR_CID,
|
|
|
|
NS_FORMPROCESSOR_CONTRACTID,
|
|
|
|
nsKeygenFormProcessor::Create
|
|
|
|
},
|
|
|
|
|
2001-05-01 23:23:23 +00:00
|
|
|
{
|
2002-03-29 02:46:01 +00:00
|
|
|
"Certificate Tree",
|
|
|
|
NS_CERTTREE_CID,
|
|
|
|
NS_CERTTREE_CONTRACTID,
|
|
|
|
nsCertTreeConstructor
|
2001-05-15 23:15:12 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
NS_PKCS11_CLASSNAME,
|
|
|
|
NS_PKCS11_CID,
|
|
|
|
NS_PKCS11_CONTRACTID,
|
|
|
|
nsPkcs11Constructor
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
NS_CRYPTO_CLASSNAME,
|
|
|
|
NS_CRYPTO_CID,
|
|
|
|
NS_CRYPTO_CONTRACTID,
|
|
|
|
nsCryptoConstructor
|
2001-10-30 23:52:01 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
NS_CMSSECUREMESSAGE_CLASSNAME,
|
|
|
|
NS_CMSSECUREMESSAGE_CID,
|
|
|
|
NS_CMSSECUREMESSAGE_CONTRACTID,
|
|
|
|
nsCMSSecureMessageConstructor
|
|
|
|
},
|
2001-02-26 21:50:54 +00:00
|
|
|
|
2001-10-30 23:52:01 +00:00
|
|
|
{
|
|
|
|
NS_CMSDECODER_CLASSNAME,
|
|
|
|
NS_CMSDECODER_CID,
|
|
|
|
NS_CMSDECODER_CONTRACTID,
|
|
|
|
nsCMSDecoderConstructor
|
|
|
|
},
|
2001-05-15 23:15:12 +00:00
|
|
|
|
2001-10-30 23:52:01 +00:00
|
|
|
{
|
|
|
|
NS_CMSENCODER_CLASSNAME,
|
|
|
|
NS_CMSENCODER_CID,
|
|
|
|
NS_CMSENCODER_CONTRACTID,
|
|
|
|
nsCMSEncoderConstructor
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
NS_CMSMESSAGE_CLASSNAME,
|
|
|
|
NS_CMSMESSAGE_CID,
|
|
|
|
NS_CMSMESSAGE_CONTRACTID,
|
|
|
|
nsCMSMessageConstructor
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
NS_HASH_CLASSNAME,
|
|
|
|
NS_HASH_CID,
|
|
|
|
NS_HASH_CONTRACTID,
|
|
|
|
nsHashConstructor
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
NS_CERT_PICKER_CLASSNAME,
|
|
|
|
NS_CERT_PICKER_CID,
|
|
|
|
NS_CERT_PICKER_CONTRACTID,
|
|
|
|
nsCertPickerConstructor
|
2001-11-30 00:07:13 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
"PSM Content Listeners",
|
|
|
|
NS_PSMCONTENTLISTEN_CID,
|
|
|
|
"@mozilla.org/uriloader/psm-external-content-listener;1",
|
|
|
|
PSMContentListenerConstructor,
|
|
|
|
RegisterPSMContentListeners
|
2001-10-30 23:52:01 +00:00
|
|
|
}
|
2001-01-10 01:32:29 +00:00
|
|
|
};
|
|
|
|
|
2001-06-20 21:00:57 +00:00
|
|
|
NS_IMPL_NSGETMODULE(NSS, components);
|