From d55cb10a601be858742675b25b48f0e0dfa33aca Mon Sep 17 00:00:00 2001 From: "mstoltz%netscape.com" Date: Wed, 28 May 2003 23:22:36 +0000 Subject: [PATCH] Bug 163950 - allow opening connections for XML data transfer services when document.domain has been set. r=jst, sr=heikki. git-svn-id: svn://10.0.0.236/trunk@143008 18797224-902f-48f8-a5cc-f745e15eee43 --- .../caps/include/nsScriptSecurityManager.h | 3 ++- mozilla/caps/src/nsScriptSecurityManager.cpp | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/mozilla/caps/include/nsScriptSecurityManager.h b/mozilla/caps/include/nsScriptSecurityManager.h index 67fd1a1cd9c..bc653b585cd 100644 --- a/mozilla/caps/include/nsScriptSecurityManager.h +++ b/mozilla/caps/include/nsScriptSecurityManager.h @@ -323,7 +323,8 @@ private: nsresult CheckSameOriginDOMProp(nsIPrincipal* aSubject, nsIPrincipal* aObject, - PRUint32 aAction); + PRUint32 aAction, + PRBool aIsCheckConnect); PRInt32 GetSecurityLevel(nsIPrincipal *principal, diff --git a/mozilla/caps/src/nsScriptSecurityManager.cpp b/mozilla/caps/src/nsScriptSecurityManager.cpp index 3974f7906d9..7a8a0d2e0ca 100644 --- a/mozilla/caps/src/nsScriptSecurityManager.cpp +++ b/mozilla/caps/src/nsScriptSecurityManager.cpp @@ -590,7 +590,8 @@ nsScriptSecurityManager::CheckSameOriginPrincipal(nsIPrincipal* aSourcePrincipal nsIPrincipal* aTargetPrincipal) { return CheckSameOriginDOMProp(aSourcePrincipal, aTargetPrincipal, - nsIXPCSecurityManager::ACCESS_SET_PROPERTY); + nsIXPCSecurityManager::ACCESS_SET_PROPERTY, + PR_FALSE); } @@ -724,7 +725,8 @@ nsScriptSecurityManager::CheckPropertyAccessImpl(PRUint32 aAction, NS_ERROR("CheckPropertyAccessImpl called without a target object or URL"); return NS_ERROR_FAILURE; } - rv = CheckSameOriginDOMProp(subjectPrincipal, objectPrincipal, aAction); + rv = CheckSameOriginDOMProp(subjectPrincipal, objectPrincipal, + aAction, (PRBool)aTargetURI); break; } default: @@ -849,7 +851,8 @@ nsScriptSecurityManager::CheckPropertyAccessImpl(PRUint32 aAction, nsresult nsScriptSecurityManager::CheckSameOriginDOMProp(nsIPrincipal* aSubject, nsIPrincipal* aObject, - PRUint32 aAction) + PRUint32 aAction, + PRBool aIsCheckConnect) { nsresult rv; /* @@ -867,6 +870,14 @@ nsScriptSecurityManager::CheckSameOriginDOMProp(nsIPrincipal* aSubject, // explicitly setting document.domain then the other must also have // done so in order to be considered the same origin. This prevents // DNS spoofing based on document.domain (154930) + + // But this restriction does not apply to CheckConnect calls, since + // that's called for data-only load checks like XMLHTTPRequest, where + // the target document has not yet loaded and can't have set its domain + // (bug 163950) + if (aIsCheckConnect) + return NS_OK; + nsCOMPtr subjectAgg(do_QueryInterface(aSubject, &rv)); NS_ENSURE_SUCCESS(rv, rv); PRBool subjectSetDomain = PR_FALSE; @@ -1206,7 +1217,7 @@ nsScriptSecurityManager::CheckLoadURI(nsIURI *aSourceURI, nsIURI *aTargetURI, } //-- If the schemes don't match, the policy is specified in this table. - enum Action { AllowProtocol, DenyProtocol, PrefControlled, ChromeProtocol }; + enum Action { AllowProtocol, DenyProtocol, PrefControlled, ChromeProtocol}; static const struct { const char *name;