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:
caillon%returnzero.com
2003-07-24 05:15:20 +00:00
parent e07c163859
commit cd46cbbaad
68 changed files with 1812 additions and 2975 deletions

View File

@@ -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);

View File

@@ -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))

View File

@@ -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);
}
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;