Bug 83536.
Merge script principal implementations into one class. Should reduce footprint, speed up calls to caps a little bit, and fixes several memory leaks. Also fixes bugs 211174 and 211263 r=jst@netscape.com sr=bzbarsky@mit.edu moa=mstoltz@netscape.com (he looked at an earlier patch and said it looked fine, and will do a retroactive review when he returns from vacation as well) git-svn-id: svn://10.0.0.236/trunk@145137 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -22,12 +22,11 @@
|
||||
#include "nsMimeTypes.h"
|
||||
#include "nsNetUtil.h"
|
||||
|
||||
#include "nsScriptSecurityManager.h"
|
||||
#include "nsIAggregatePrincipal.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsIFileURL.h"
|
||||
#include "nsIJAR.h"
|
||||
|
||||
static NS_DEFINE_CID(kScriptSecurityManagerCID, NS_SCRIPTSECURITYMANAGER_CID);
|
||||
static NS_DEFINE_CID(kZipReaderCID, NS_ZIPREADER_CID);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -424,22 +423,28 @@ nsJARChannel::GetOwner(nsISupports **result)
|
||||
if (cert) {
|
||||
// Get the codebase principal
|
||||
nsCOMPtr<nsIScriptSecurityManager> secMan =
|
||||
do_GetService(kScriptSecurityManagerCID, &rv);
|
||||
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIPrincipal> codebase;
|
||||
rv = secMan->GetCodebasePrincipal(mJarBaseURI,
|
||||
getter_AddRefs(codebase));
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
|
||||
nsCOMPtr<nsIURI> codebaseURI;
|
||||
codebase->GetURI(getter_AddRefs(codebaseURI));
|
||||
|
||||
nsCOMPtr<nsIURI> domainURI;
|
||||
codebase->GetDomain(getter_AddRefs(domainURI));
|
||||
|
||||
// Join the certificate and the codebase
|
||||
nsCOMPtr<nsIAggregatePrincipal> agg = do_QueryInterface(cert, &rv);
|
||||
rv = cert->SetURI(codebaseURI);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
rv = agg->SetCodebase(codebase);
|
||||
rv = cert->SetDomain(domainURI);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
mOwner = do_QueryInterface(agg, &rv);
|
||||
mOwner = do_QueryInterface(cert, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
NS_ADDREF(*result = mOwner);
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include "nsString.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "nsXPIDLString.h"
|
||||
#include "nsScriptSecurityManager.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIStringBundle.h"
|
||||
#include "prefapi.h"
|
||||
#include "prmem.h"
|
||||
@@ -68,8 +68,6 @@ struct PrefCallbackData {
|
||||
};
|
||||
|
||||
|
||||
static NS_DEFINE_CID(kSecurityManagerCID, NS_SCRIPTSECURITYMANAGER_CID);
|
||||
|
||||
// Prototypes
|
||||
extern PrefResult pref_UnlockPref(const char *key);
|
||||
PR_STATIC_CALLBACK(PLDHashOperator)
|
||||
@@ -897,7 +895,7 @@ nsresult nsPrefBranch::getValidatedPrefName(const char *aPrefName, const char **
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIScriptSecurityManager> secMan =
|
||||
do_GetService(kSecurityManagerCID, &rv);
|
||||
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
|
||||
PRBool enabled;
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIJSContextStack.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsICodebasePrincipal.h"
|
||||
#include "nsIScriptContext.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIScriptObjectPrincipal.h"
|
||||
@@ -70,9 +69,7 @@ static nsresult getScriptCodebase(JSContext* cx, nsIURI* *result)
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
scriptObjectPrincipal->GetPrincipal(getter_AddRefs(principal));
|
||||
if (principal) {
|
||||
nsCOMPtr<nsICodebasePrincipal> codebasePrincipal = do_QueryInterface(principal);
|
||||
if (codebasePrincipal)
|
||||
return codebasePrincipal->GetURI(result);
|
||||
return principal->GetURI(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ get_JSPrincipals_from_java_caller_impl(JNIEnv *pJNIEnv, JSContext *pJSContext, v
|
||||
rv = ssm->GetCodebasePrincipal(codebaseURI, getter_AddRefs(principal));
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
JSPrincipals* jsprincipals;
|
||||
principal->GetJSPrincipals(&jsprincipals);
|
||||
principal->GetJsPrincipals(&jsprincipals);
|
||||
return jsprincipals;
|
||||
}
|
||||
}
|
||||
@@ -368,7 +368,7 @@ get_JSPrincipals_from_java_caller_impl(JNIEnv *pJNIEnv, JSContext *pJSContext, v
|
||||
nsCOMPtr<nsIPrincipal> principal = do_QueryInterface(credentials);
|
||||
if (principal) {
|
||||
JSPrincipals* jsprincipals;
|
||||
principal->GetJSPrincipals(&jsprincipals);
|
||||
principal->GetJsPrincipals(&jsprincipals);
|
||||
return jsprincipals;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,14 +54,11 @@
|
||||
// For GetOrigin()
|
||||
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsJSPrincipals.h"
|
||||
#include "nsSystemPrincipal.h"
|
||||
#include "nsCodebasePrincipal.h"
|
||||
#include "nsCertificatePrincipal.h"
|
||||
#include "nsScriptSecurityManager.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsIScriptObjectPrincipal.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsCRT.h"
|
||||
|
||||
#include "nsTraceRefcnt.h"
|
||||
@@ -162,39 +159,27 @@ nsCSecurityContext::GetOrigin(char* buf, int buflen)
|
||||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsICodebasePrincipal> codebase = do_QueryInterface(m_pPrincipal);
|
||||
if (!codebase)
|
||||
nsXPIDLCString origin;
|
||||
m_pPrincipal->GetOrigin(getter_Copies(origin));
|
||||
|
||||
if (origin.IsEmpty()) {
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
char* origin=nsnull;
|
||||
codebase->GetOrigin(&origin);
|
||||
|
||||
if (origin) {
|
||||
PRInt32 originlen = (PRInt32) strlen(origin);
|
||||
if (!buf || buflen<=originlen) {
|
||||
if (origin) {
|
||||
nsCRT::free(origin);
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// Copy the string into to user supplied buffer. Is there a better
|
||||
// way to do this?
|
||||
|
||||
memcpy(buf,origin,originlen);
|
||||
buf[originlen]=nsnull; // Gotta terminate it.
|
||||
nsCRT::free(origin);
|
||||
} else {
|
||||
*buf = nsnull;
|
||||
}
|
||||
|
||||
// Copy the string into to user supplied buffer. Is there a better
|
||||
// way to do this?
|
||||
|
||||
PRInt32 originlen = origin.Length();
|
||||
memcpy(buf, origin, originlen);
|
||||
buf[originlen] = nsnull; // Gotta terminate it.
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_METHOD
|
||||
nsCSecurityContext::GetCertificateID(char* buf, int buflen)
|
||||
{
|
||||
nsCOMPtr<nsIPrincipal> principal = NULL;
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
|
||||
// Get the Script Security Manager.
|
||||
|
||||
@@ -203,28 +188,19 @@ nsCSecurityContext::GetCertificateID(char* buf, int buflen)
|
||||
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv) || !secMan) return NS_ERROR_FAILURE;
|
||||
|
||||
|
||||
secMan->GetSubjectPrincipal(getter_AddRefs(principal));
|
||||
nsCOMPtr<nsICertificatePrincipal> cprincipal = do_QueryInterface(principal);
|
||||
if (!cprincipal)
|
||||
|
||||
nsXPIDLCString certificate;
|
||||
principal->GetCertificateID(getter_Copies(certificate));
|
||||
|
||||
PRInt32 certlen = certificate.Length();
|
||||
if (buflen <= certlen) {
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
char* certificate = nsnull;
|
||||
cprincipal->GetCertificateID(&certificate);
|
||||
|
||||
if (certificate) {
|
||||
PRInt32 certlen = (PRInt32) strlen(certificate);
|
||||
if( buflen<=certlen ) {
|
||||
nsCRT::free(certificate);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
memcpy(buf,certificate,certlen);
|
||||
buf[certlen]=nsnull;
|
||||
nsCRT::free(certificate);
|
||||
} else {
|
||||
*buf = nsnull;
|
||||
}
|
||||
|
||||
memcpy(buf, certificate.get(), certlen);
|
||||
buf[certlen] = nsnull;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,14 +68,10 @@
|
||||
#include "nspr.h"
|
||||
#include "plstr.h"
|
||||
#include "nsCOMPtr.h"
|
||||
//#include "nsJSPrincipals.h"
|
||||
//#include "nsSystemPrincipal.h"
|
||||
//#include "nsCodebasePrincipal.h"
|
||||
#include "nsCertificatePrincipal.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsISignatureVerifier.h"
|
||||
|
||||
//#include "nsScriptSecurityManager.h"
|
||||
|
||||
extern "C" int XP_PROGRESS_STARTING_JAVA;
|
||||
extern "C" int XP_PROGRESS_STARTING_JAVA_DONE;
|
||||
@@ -971,15 +967,8 @@ nsJVMManager::IsAllPermissionGranted(
|
||||
rv = secMan->GetCertificatePrincipal(lastFP, &pIPrincipal);
|
||||
if (NS_FAILED(rv)) return PR_FALSE;
|
||||
|
||||
// Get the nsICertificatePrincipal interface so that we can set the
|
||||
// common name. The common name is a user meaningful string.
|
||||
|
||||
nsCOMPtr<nsICertificatePrincipal> pICertificate = do_QueryInterface(pIPrincipal, &rv);
|
||||
if (NS_FAILED(rv) || !pICertificate) return PR_FALSE;
|
||||
|
||||
// Set the common name.
|
||||
|
||||
rv = pICertificate->SetCommonName(lastCN);
|
||||
rv = pIPrincipal->SetCommonName(lastCN);
|
||||
|
||||
PRInt16 ret;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user