From 87bf85eb792f693b61173f8b2a8c9c182c4dd9bd Mon Sep 17 00:00:00 2001 From: "raman%netscape.com" Date: Tue, 4 Aug 1998 23:54:29 +0000 Subject: [PATCH] Adde context as argument to all caps public methods that could be used by JS git-svn-id: svn://10.0.0.236/trunk@7283 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/caps/include/nsCaps.h | 14 +-- mozilla/caps/include/nsPrivilegeManager.h | 36 +++++- mozilla/caps/include/nsTarget.h | 2 + mozilla/caps/src/nsCaps.cpp | 24 ++-- mozilla/caps/src/nsPrivilegeManager.cpp | 143 ++++++++++++++++++---- mozilla/caps/src/nsTarget.cpp | 10 +- mozilla/lib/libmocha/lm_taint.c | 19 ++- 7 files changed, 190 insertions(+), 58 deletions(-) diff --git a/mozilla/caps/include/nsCaps.h b/mozilla/caps/include/nsCaps.h index fe2f7a87944..2a92a668d5a 100644 --- a/mozilla/caps/include/nsCaps.h +++ b/mozilla/caps/include/nsCaps.h @@ -36,19 +36,19 @@ PR_EXTERN(PRBool) nsCapsRegisterPrincipal(struct nsPrincipal *principal); PR_EXTERN(PRBool) -nsCapsEnablePrivilege(struct nsTarget *target, PRInt32 callerDepth); +nsCapsEnablePrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth); PR_EXTERN(PRBool) -nsCapsIsPrivilegeEnabled(struct nsTarget *target, PRInt32 callerDepth); +nsCapsIsPrivilegeEnabled(void* context, struct nsTarget *target, PRInt32 callerDepth); PR_EXTERN(PRBool) -nsCapsRevertPrivilege(struct nsTarget *target, PRInt32 callerDepth); +nsCapsRevertPrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth); PR_EXTERN(PRBool) -nsCapsDisablePrivilege(struct nsTarget *target, PRInt32 callerDepth); +nsCapsDisablePrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth); PR_EXTERN(void*) -nsCapsGetClassPrincipalsFromStack(PRInt32 callerDepth); +nsCapsGetClassPrincipalsFromStack(void* context, PRInt32 callerDepth); PR_EXTERN(nsSetComparisonType) nsCapsComparePrincipalArray(void* prin1Array, void* prin2Array); @@ -106,9 +106,9 @@ nsCapsGetPrivilege(struct nsPrivilegeTable *annotation, struct nsTarget *target) /* Methods for stack walking */ -extern struct NSJSJavaFrameWrapper * (*nsCapsNewNSJSJavaFrameWrapperCallback)(void); +extern struct NSJSJavaFrameWrapper * (*nsCapsNewNSJSJavaFrameWrapperCallback)(void *); PR_EXTERN(void) -setNewNSJSJavaFrameWrapperCallback(struct NSJSJavaFrameWrapper * (*fp)(void)); +setNewNSJSJavaFrameWrapperCallback(struct NSJSJavaFrameWrapper * (*fp)(void *)); extern void (*nsCapsFreeNSJSJavaFrameWrapperCallback)(struct NSJSJavaFrameWrapper *); PR_EXTERN(void) diff --git a/mozilla/caps/include/nsPrivilegeManager.h b/mozilla/caps/include/nsPrivilegeManager.h index 6e01a190638..c062350c28a 100755 --- a/mozilla/caps/include/nsPrivilegeManager.h +++ b/mozilla/caps/include/nsPrivilegeManager.h @@ -58,18 +58,32 @@ public: PRBool isPrivilegeEnabled(nsTarget *target, PRInt32 callerDepth); + PRBool isPrivilegeEnabled(void* context, nsTarget *target, PRInt32 callerDepth); + PRBool enablePrivilege(nsTarget *target, PRInt32 callerDepth); + PRBool enablePrivilege(void* context, nsTarget *target, PRInt32 callerDepth); + PRBool enablePrivilege(nsTarget *target, nsPrincipal *preferredPrincipal, PRInt32 callerDepth); + PRBool enablePrivilege(void* context, nsTarget *target, nsPrincipal *preferredPrincipal, PRInt32 callerDepth); + PRBool revertPrivilege(nsTarget *target, PRInt32 callerDepth); + PRBool revertPrivilege(void* context, nsTarget *target, PRInt32 callerDepth); + PRBool disablePrivilege(nsTarget *target, PRInt32 callerDepth); + PRBool disablePrivilege(void* context, nsTarget *target, PRInt32 callerDepth); + PRBool enablePrincipalPrivilegeHelper(nsTarget *target, PRInt32 callerDepth, nsPrincipal *preferredPrin, void * data, nsTarget *impersonator); + PRBool enablePrincipalPrivilegeHelper(void* context, nsTarget *target, PRInt32 callerDepth, nsPrincipal *preferredPrin, void * data, nsTarget *impersonator); + nsPrivilegeTable *enableScopePrivilegeHelper(nsTarget *target, PRInt32 callerDepth, void *data, PRBool helpingSetScopePrivilege, nsPrincipal *prefPrin); + nsPrivilegeTable *enableScopePrivilegeHelper(void* context, nsTarget *target, PRInt32 callerDepth, void *data, PRBool helpingSetScopePrivilege, nsPrincipal *prefPrin); + void registerPrincipalAndSetPrivileges(nsPrincipal *principal, nsTarget *target, nsPrivilege *newPrivilege); void updatePrivilegeTable(nsTarget *target, @@ -78,10 +92,14 @@ public: PRBool checkPrivilegeGranted(nsTarget *target, PRInt32 callerDepth); + PRBool checkPrivilegeGranted(void* context, nsTarget *target, PRInt32 callerDepth); + PRBool checkPrivilegeGranted(nsTarget *target, nsPrincipal *principal, void *data); - PRBool checkPrivilegeGranted(nsTarget *target, PRInt32 callerDepth, - void *data); + PRBool checkPrivilegeGranted(nsTarget *target, PRInt32 callerDepth, void *data); + + PRBool checkPrivilegeGranted(void* context, nsTarget *target, PRInt32 callerDepth, + void *data); nsPrivilege *getPrincipalPrivilege(nsTarget *target, nsPrincipal *prin, void *data); @@ -89,6 +107,8 @@ public: static nsPrincipalArray* getMyPrincipals(PRInt32 callerDepth); + static nsPrincipalArray* getMyPrincipals(void* context, PRInt32 callerDepth); + static nsPrincipal * getSystemPrincipal(void); static PRBool hasSystemPrincipal(nsPrincipalArray *prinArray); @@ -108,6 +128,8 @@ public: PRBool checkMatchPrincipal(nsPrincipal *principal, PRInt32 callerDepth); + PRBool checkMatchPrincipal(void* context, nsPrincipal *principal, PRInt32 callerDepth); + /* Helper functions for ADMIN UI */ const char * getAllPrincipalsString(void); @@ -126,11 +148,19 @@ public: char * checkPrivilegeEnabled(nsTargetArray* targetArray, PRInt32 callerDepth, void *data); + char * checkPrivilegeEnabled(void* context, nsTargetArray* targetArray, + PRInt32 callerDepth, void *data); + nsPrincipalArray* getClassPrincipalsFromStack(PRInt32 callerDepth); + nsPrincipalArray* getClassPrincipalsFromStack(void* context, PRInt32 callerDepth); + nsPrivilegeTable * getPrivilegeTableFromStack(PRInt32 callerDepth, PRBool createIfNull); + nsPrivilegeTable * getPrivilegeTableFromStack(void* context, PRInt32 callerDepth, + PRBool createIfNull); + /* End of native methods */ private: @@ -151,7 +181,7 @@ private: void addToPrinNameToPrincipalTable(nsPrincipal *prin); - PRBool enablePrivilegePrivate(nsTarget *target, + PRBool enablePrivilegePrivate(void* context, nsTarget *target, nsPrincipal *preferredPrincipal, PRInt32 callerDepth); diff --git a/mozilla/caps/include/nsTarget.h b/mozilla/caps/include/nsTarget.h index 865f0fe8621..8bca6209019 100755 --- a/mozilla/caps/include/nsTarget.h +++ b/mozilla/caps/include/nsTarget.h @@ -65,6 +65,8 @@ public: nsTarget * registerTarget(void); + nsTarget * registerTarget(void* context); + static nsTarget * findTarget(nsTarget *target); static nsTarget * findTarget(char *name); diff --git a/mozilla/caps/src/nsCaps.cpp b/mozilla/caps/src/nsCaps.cpp index 5c0c2128184..a07b9a17d3c 100644 --- a/mozilla/caps/src/nsCaps.cpp +++ b/mozilla/caps/src/nsCaps.cpp @@ -50,38 +50,38 @@ nsCapsRegisterPrincipal(struct nsPrincipal *principal) } PR_IMPLEMENT(PRBool) -nsCapsEnablePrivilege(struct nsTarget *target, PRInt32 callerDepth) +nsCapsEnablePrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth) { nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager(); - return nsPrivManager->enablePrivilege(target, callerDepth); + return nsPrivManager->enablePrivilege(context, target, callerDepth); } PR_IMPLEMENT(PRBool) -nsCapsIsPrivilegeEnabled(struct nsTarget *target, PRInt32 callerDepth) +nsCapsIsPrivilegeEnabled(void* context, struct nsTarget *target, PRInt32 callerDepth) { nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager(); - return nsPrivManager->isPrivilegeEnabled(target, callerDepth); + return nsPrivManager->isPrivilegeEnabled(context, target, callerDepth); } PR_IMPLEMENT(PRBool) -nsCapsRevertPrivilege(struct nsTarget *target, PRInt32 callerDepth) +nsCapsRevertPrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth) { nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager(); - return nsPrivManager->revertPrivilege(target, callerDepth); + return nsPrivManager->revertPrivilege(context, target, callerDepth); } PR_IMPLEMENT(PRBool) -nsCapsDisablePrivilege(struct nsTarget *target, PRInt32 callerDepth) +nsCapsDisablePrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth) { nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager(); - return nsPrivManager->disablePrivilege(target, callerDepth); + return nsPrivManager->disablePrivilege(context, target, callerDepth); } PR_IMPLEMENT(void*) -nsCapsGetClassPrincipalsFromStack(PRInt32 callerDepth) +nsCapsGetClassPrincipalsFromStack(void* context, PRInt32 callerDepth) { nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager(); - return (void *)nsPrivManager->getClassPrincipalsFromStack(callerDepth); + return (void *)nsPrivManager->getClassPrincipalsFromStack(context, callerDepth); } PR_IMPLEMENT(nsSetComparisonType) @@ -205,9 +205,9 @@ nsCapsGetPrivilege(struct nsPrivilegeTable *annotation, struct nsTarget *target) /* Methods for stack walking */ -struct NSJSJavaFrameWrapper * (*nsCapsNewNSJSJavaFrameWrapperCallback)(void) = NULL; +struct NSJSJavaFrameWrapper * (*nsCapsNewNSJSJavaFrameWrapperCallback)(void *) = NULL; PR_IMPLEMENT(void) -setNewNSJSJavaFrameWrapperCallback(struct NSJSJavaFrameWrapper * (*fp)(void)) +setNewNSJSJavaFrameWrapperCallback(struct NSJSJavaFrameWrapper * (*fp)(void *)) { nsCapsNewNSJSJavaFrameWrapperCallback = fp; } diff --git a/mozilla/caps/src/nsPrivilegeManager.cpp b/mozilla/caps/src/nsPrivilegeManager.cpp index 2ce8b001a47..e5151d88272 100755 --- a/mozilla/caps/src/nsPrivilegeManager.cpp +++ b/mozilla/caps/src/nsPrivilegeManager.cpp @@ -215,8 +215,13 @@ PRBool nsPrivilegeManager::unregisterPrincipal(nsPrincipal *prin) return PR_TRUE; } - PRBool nsPrivilegeManager::isPrivilegeEnabled(nsTarget *target, PRInt32 callerDepth) +{ + return isPrivilegeEnabled(NULL, target, callerDepth); +} + + +PRBool nsPrivilegeManager::isPrivilegeEnabled(void *context, nsTarget *target, PRInt32 callerDepth) { nsTargetArray * targetArray = new nsTargetArray(); nsTarget *targ = nsTarget::findTarget(target); @@ -224,23 +229,41 @@ PRBool nsPrivilegeManager::isPrivilegeEnabled(nsTarget *target, PRInt32 callerDe return PR_FALSE; } targetArray->Add(targ); - return (checkPrivilegeEnabled(targetArray, callerDepth, NULL) != NULL) ? PR_FALSE : PR_TRUE; + return (checkPrivilegeEnabled(context, targetArray, callerDepth, NULL) != NULL) ? PR_FALSE : PR_TRUE; } PRBool nsPrivilegeManager::enablePrivilege(nsTarget *target, PRInt32 callerDepth) { - return enablePrivilegePrivate(target, NULL, callerDepth); + return enablePrivilegePrivate(NULL, target, NULL, callerDepth); +} + +PRBool nsPrivilegeManager::enablePrivilege(void* context, nsTarget *target, PRInt32 callerDepth) +{ + return enablePrivilegePrivate(context, target, NULL, callerDepth); } PRBool nsPrivilegeManager::enablePrivilege(nsTarget *target, nsPrincipal *preferredPrincipal, PRInt32 callerDepth) { - return enablePrivilegePrivate(target, preferredPrincipal, callerDepth); + return enablePrivilegePrivate(NULL, target, preferredPrincipal, callerDepth); +} + +PRBool nsPrivilegeManager::enablePrivilege(void* context, nsTarget *target, + nsPrincipal *preferredPrincipal, + PRInt32 callerDepth) +{ + return enablePrivilegePrivate(context, target, preferredPrincipal, callerDepth); } PRBool nsPrivilegeManager::revertPrivilege(nsTarget *target, PRInt32 callerDepth) +{ + return revertPrivilege(NULL, target, callerDepth); +} + +PRBool nsPrivilegeManager::revertPrivilege(void* context, nsTarget *target, + PRInt32 callerDepth) { nsTarget *targ = nsTarget::findTarget(target); if (targ != target) { @@ -248,7 +271,7 @@ PRBool nsPrivilegeManager::revertPrivilege(nsTarget *target, return PR_FALSE; } - nsPrivilegeTable *privTable = getPrivilegeTableFromStack(callerDepth, + nsPrivilegeTable *privTable = getPrivilegeTableFromStack(context, callerDepth, PR_TRUE); nsCaps_lock(); privTable->put(target, nsPrivilege::findPrivilege(nsPermissionState_Blank, @@ -258,7 +281,12 @@ PRBool nsPrivilegeManager::revertPrivilege(nsTarget *target, } -PRBool nsPrivilegeManager::disablePrivilege(nsTarget *target, +PRBool nsPrivilegeManager::disablePrivilege(nsTarget *target, PRInt32 callerDepth) +{ + return disablePrivilege(NULL, target, callerDepth); +} + +PRBool nsPrivilegeManager::disablePrivilege(void* context, nsTarget *target, PRInt32 callerDepth) { nsTarget *targ = nsTarget::findTarget(target); @@ -266,7 +294,7 @@ PRBool nsPrivilegeManager::disablePrivilege(nsTarget *target, //throw new ForbiddenTargetException(target + " is not a registered target"); return PR_FALSE; } - nsPrivilegeTable *privTable = getPrivilegeTableFromStack(callerDepth, + nsPrivilegeTable *privTable = getPrivilegeTableFromStack(context, callerDepth, PR_TRUE); nsCaps_lock(); privTable->put(target, nsPrivilege::findPrivilege(nsPermissionState_Forbidden, @@ -280,6 +308,17 @@ PRBool nsPrivilegeManager::enablePrincipalPrivilegeHelper(nsTarget *target, nsPrincipal *preferredPrin, void * data, nsTarget *impersonator) +{ + return enablePrincipalPrivilegeHelper(NULL, target, callerDepth, preferredPrin, + data, impersonator); +} + +PRBool nsPrivilegeManager::enablePrincipalPrivilegeHelper(void *context, + nsTarget *target, + PRInt32 callerDepth, + nsPrincipal *preferredPrin, + void * data, + nsTarget *impersonator) { nsPrincipalArray* callerPrinArray; nsPrincipal *useThisPrin = NULL; @@ -291,7 +330,7 @@ PRBool nsPrivilegeManager::enablePrincipalPrivilegeHelper(nsTarget *target, return PR_FALSE; /* throw new ForbiddenTargetException(target + " is not a registered target"); */ } - callerPrinArray = getClassPrincipalsFromStack(callerDepth); + callerPrinArray = getClassPrincipalsFromStack(context, callerDepth); if (preferredPrin != NULL) { nsPrincipal *callerPrin; @@ -308,7 +347,7 @@ PRBool nsPrivilegeManager::enablePrincipalPrivilegeHelper(nsTarget *target, if ((useThisPrin == NULL) && (impersonator)){ nsTarget *t1; t1 = impersonator; - if (PR_FALSE == isPrivilegeEnabled(t1, 0)) + if (PR_FALSE == isPrivilegeEnabled(context, t1, 0)) return PR_FALSE; useThisPrin = preferredPrin; callerPrinArray = new nsPrincipalArray(); @@ -401,13 +440,24 @@ done: } - nsPrivilegeTable * nsPrivilegeManager::enableScopePrivilegeHelper(nsTarget *target, PRInt32 callerDepth, void *data, PRBool helpingSetScopePrivilege, nsPrincipal *prefPrin) +{ + return enableScopePrivilegeHelper(NULL, target, callerDepth, data, + helpingSetScopePrivilege, prefPrin); + } + + +nsPrivilegeTable * +nsPrivilegeManager::enableScopePrivilegeHelper(void* context, nsTarget *target, + PRInt32 callerDepth, + void *data, + PRBool helpingSetScopePrivilege, + nsPrincipal *prefPrin) { nsPrivilegeTable *privTable; nsPrivilege *allowedScope; @@ -421,12 +471,12 @@ nsPrivilegeManager::enableScopePrivilegeHelper(nsTarget *target, if (prefPrin != NULL) { res = checkPrivilegeGranted(target, prefPrin, data); } else { - res = checkPrivilegeGranted(target, callerDepth, data); + res = checkPrivilegeGranted(context, target, callerDepth, data); } if (res == PR_FALSE) return NULL; - privTable = getPrivilegeTableFromStack(callerDepth, + privTable = getPrivilegeTableFromStack(context, callerDepth, (helpingSetScopePrivilege ? PR_FALSE : PR_TRUE)); if (helpingSetScopePrivilege) { if (privTable == NULL) { @@ -488,7 +538,13 @@ void nsPrivilegeManager::updatePrivilegeTable(nsTarget *target, PRBool nsPrivilegeManager::checkPrivilegeGranted(nsTarget *target, PRInt32 callerDepth) { - return checkPrivilegeGranted(target, callerDepth, NULL); + return checkPrivilegeGranted(NULL, target, callerDepth, NULL); +} + +PRBool nsPrivilegeManager::checkPrivilegeGranted(void* context, nsTarget *target, + PRInt32 callerDepth) +{ + return checkPrivilegeGranted(context, target, callerDepth, NULL); } PRBool nsPrivilegeManager::checkPrivilegeGranted(nsTarget *target, @@ -506,9 +562,16 @@ PRBool nsPrivilegeManager::checkPrivilegeGranted(nsTarget *target, PRBool nsPrivilegeManager::checkPrivilegeGranted(nsTarget *target, PRInt32 callerDepth, void *data) +{ + return checkPrivilegeGranted(NULL, target, callerDepth, data); +} + +PRBool nsPrivilegeManager::checkPrivilegeGranted(void* context, nsTarget *target, + PRInt32 callerDepth, + void *data) { nsPrincipalArray* callerPrinArray = - getClassPrincipalsFromStack(callerDepth); + getClassPrincipalsFromStack(context, callerDepth); nsPermissionState privilege = getPrincipalPrivilege(target, callerPrinArray, data); @@ -525,10 +588,16 @@ nsPrivilegeManager * nsPrivilegeManager::getPrivilegeManager(void) } nsPrincipalArray* nsPrivilegeManager::getMyPrincipals(PRInt32 callerDepth) +{ + return getMyPrincipals(NULL, callerDepth); +} + +nsPrincipalArray* nsPrivilegeManager::getMyPrincipals(void* context, + PRInt32 callerDepth) { if (thePrivilegeManager == NULL) return NULL; - return thePrivilegeManager->getClassPrincipalsFromStack(callerDepth); + return thePrivilegeManager->getClassPrincipalsFromStack(context, callerDepth); } nsPrincipal* nsPrivilegeManager::getSystemPrincipal(void) @@ -679,12 +748,20 @@ PRBool nsPrivilegeManager::canExtendTrust(nsPrincipalArray* from, return (codebaseCount == 1) ? PR_TRUE : PR_FALSE; } + PRBool nsPrivilegeManager::checkMatchPrincipal(nsPrincipal *prin, PRInt32 callerDepth) +{ + return checkMatchPrincipal(NULL, prin, callerDepth); +} + + +PRBool nsPrivilegeManager::checkMatchPrincipal(void* context, nsPrincipal *prin, + PRInt32 callerDepth) { nsPrincipalArray *prinArray = new nsPrincipalArray(); prinArray->Add(prin); - nsPrincipalArray *classPrinArray = getClassPrincipalsFromStack(callerDepth); + nsPrincipalArray *classPrinArray = getClassPrincipalsFromStack(context, callerDepth); return (comparePrincipalArray(prinArray, classPrinArray) != nsSetComparisonType_NoSubset) ? PR_TRUE : PR_FALSE; } @@ -872,18 +949,18 @@ void nsPrivilegeManager::remove(nsPrincipal *prin, nsTarget *target) #define UNKNOWN_PRIN_KEY "52:4f:53:4b:49:4e:44:4a" -PRBool nsPrivilegeManager::enablePrivilegePrivate(nsTarget *target, +PRBool nsPrivilegeManager::enablePrivilegePrivate(void* context, nsTarget *target, nsPrincipal *prefPrin, PRInt32 callerDepth) { // default "data" as null - if (PR_FALSE == enablePrincipalPrivilegeHelper(target, callerDepth, + if (PR_FALSE == enablePrincipalPrivilegeHelper(context, target, callerDepth, prefPrin, NULL, NULL)) { return PR_FALSE; } // default "data" as null - if (NULL == enableScopePrivilegeHelper(target, callerDepth, NULL, PR_FALSE, + if (NULL == enableScopePrivilegeHelper(context, target, callerDepth, NULL, PR_FALSE, prefPrin)) return PR_FALSE; return PR_TRUE; @@ -980,6 +1057,15 @@ char * nsPrivilegeManager::checkPrivilegeEnabled(nsTargetArray * targetArray, PRInt32 callerDepth, void *data) +{ + return checkPrivilegeEnabled(NULL, targetArray, callerDepth, data); +} + +char * +nsPrivilegeManager::checkPrivilegeEnabled(void *context, + nsTargetArray * targetArray, + PRInt32 callerDepth, + void *data) { struct NSJSJavaFrameWrapper *wrapper = NULL; nsTarget *target; @@ -1003,7 +1089,7 @@ nsPrivilegeManager::checkPrivilegeEnabled(nsTargetArray * targetArray, if (*nsCapsNewNSJSJavaFrameWrapperCallback == NULL) { return NULL; } - wrapper = (*nsCapsNewNSJSJavaFrameWrapperCallback)(); + wrapper = (*nsCapsNewNSJSJavaFrameWrapperCallback)(context); if (wrapper == NULL) { return NULL; } @@ -1109,6 +1195,12 @@ done: nsPrincipalArray * nsPrivilegeManager::getClassPrincipalsFromStack(PRInt32 callerDepth) +{ + return getClassPrincipalsFromStack(NULL, callerDepth); +} + +nsPrincipalArray * +nsPrivilegeManager::getClassPrincipalsFromStack(void* context, PRInt32 callerDepth) { nsPrincipalArray * principalArray = theUnknownPrincipalArray; int depth = 0; @@ -1117,7 +1209,7 @@ nsPrivilegeManager::getClassPrincipalsFromStack(PRInt32 callerDepth) if (*nsCapsNewNSJSJavaFrameWrapperCallback == NULL) { return NULL; } - wrapper = (*nsCapsNewNSJSJavaFrameWrapperCallback)(); + wrapper = (*nsCapsNewNSJSJavaFrameWrapperCallback)(context); if (wrapper == NULL) return NULL; @@ -1141,6 +1233,13 @@ nsPrivilegeManager::getClassPrincipalsFromStack(PRInt32 callerDepth) nsPrivilegeTable * nsPrivilegeManager::getPrivilegeTableFromStack(PRInt32 callerDepth, PRBool createIfNull) +{ + return getPrivilegeTableFromStack(NULL, callerDepth, createIfNull); +} + +nsPrivilegeTable * +nsPrivilegeManager::getPrivilegeTableFromStack(void *context, PRInt32 callerDepth, + PRBool createIfNull) { nsPrivilegeTable *privTable = NULL; int depth = 0; @@ -1150,7 +1249,7 @@ nsPrivilegeManager::getPrivilegeTableFromStack(PRInt32 callerDepth, if (*nsCapsNewNSJSJavaFrameWrapperCallback == NULL) { return NULL; } - wrapper = (*nsCapsNewNSJSJavaFrameWrapperCallback)(); + wrapper = (*nsCapsNewNSJSJavaFrameWrapperCallback)(context); if (wrapper == NULL) return NULL; diff --git a/mozilla/caps/src/nsTarget.cpp b/mozilla/caps/src/nsTarget.cpp index 495ea3c119b..e25fdf446b1 100755 --- a/mozilla/caps/src/nsTarget.cpp +++ b/mozilla/caps/src/nsTarget.cpp @@ -1152,7 +1152,12 @@ nsTarget::~nsTarget(void) delete []itsExpandedTargetArray; } -nsTarget * nsTarget::registerTarget(void) +nsTarget * nsTarget::registerTarget() +{ + return registerTarget(NULL); +} + +nsTarget * nsTarget::registerTarget(void *context) { nsTarget *targ; @@ -1185,7 +1190,8 @@ nsTarget * nsTarget::registerTarget(void) } nsPrivilegeManager *mgr = nsPrivilegeManager::getPrivilegeManager(); - if ((mgr != NULL) && (!mgr->checkMatchPrincipal(itsPrincipal, 1))) { + if ((mgr != NULL) && (context != NULL) && + (!mgr->checkMatchPrincipal(context, itsPrincipal, 1))) { nsCaps_unlock(); return NULL; } diff --git a/mozilla/lib/libmocha/lm_taint.c b/mozilla/lib/libmocha/lm_taint.c index 6559b5e5805..da5a6424109 100644 --- a/mozilla/lib/libmocha/lm_taint.c +++ b/mozilla/lib/libmocha/lm_taint.c @@ -1435,13 +1435,13 @@ principalsCanAccessTarget(JSContext *cx, JSTarget target) * fixed deny the privileged operations from Java to JS. */ /* XXX: raman: We need to fix this with LiveConnect integration. - * javaPrincipals = nsCapsGetClassPrincipalsFromStack(0); + * javaPrincipals = nsCapsGetClassPrincipalsFromStack(cx, 0); */ if (!canExtendTrust(cx, javaPrincipals, principalArray)) { return JS_FALSE; } } - return (JSBool)nsCapsIsPrivilegeEnabled(capsTarget, 0); + return (JSBool)nsCapsIsPrivilegeEnabled(cx, capsTarget, 0); } #endif /* JAVA */ /* No annotation in stack */ @@ -1512,7 +1512,7 @@ LM_GetJSPrincipalsFromJavaCaller(JSContext *cx, int callerDepth) setupJSCapsCallbacks(); - principalsArray = nsCapsGetClassPrincipalsFromStack(callerDepth); + principalsArray = nsCapsGetClassPrincipalsFromStack(cx, callerDepth); if (principalsArray == NULL) return NULL; @@ -1860,9 +1860,9 @@ typedef struct JSFrameIterator { } JSFrameIterator; static JSFrameIterator * -lm_NewJSFrameIterator() +lm_NewJSFrameIterator(void *context) { - JSContext *cx = NULL; + JSContext *cx = (JSContext *)context; char *errorString; JSFrameIterator *result; void *array; @@ -1873,11 +1873,6 @@ lm_NewJSFrameIterator() return NULL; } - /* XXX: raman: Is this correct? How do we get the Context?? */ -#ifdef JAVA - env = JRI_GetCurrentEnv(); - cx = JSJ_CurrentContext(env, &errorString); -#endif /* JAVA */ if (cx == NULL) { return NULL; } @@ -1951,7 +1946,7 @@ typedef struct NSJSJavaFrameWrapper { } NSJSJavaFrameWrapper; struct NSJSJavaFrameWrapper * -lm_NewNSJSJavaFrameWrapperCB(void) +lm_NewNSJSJavaFrameWrapperCB(void *context) { struct NSJSJavaFrameWrapper *result; JRIEnv *env; @@ -1961,7 +1956,7 @@ lm_NewNSJSJavaFrameWrapperCB(void) return NULL; } - result->iterator = lm_NewJSFrameIterator(); + result->iterator = lm_NewJSFrameIterator(context); return result; }