зеркало из https://github.com/mozilla/gecko-dev.git
bug 171507, implement cookie logging, r=mstoltz, sr=dveditz
This commit is contained in:
Родитель
89ac32a5c8
Коммит
674a25c21e
|
@ -61,6 +61,22 @@
|
||||||
// until this point, we have an evil hack:
|
// until this point, we have an evil hack:
|
||||||
#include "nsIHttpChannelInternal.h"
|
#include "nsIHttpChannelInternal.h"
|
||||||
|
|
||||||
|
#ifdef MOZ_LOGGING
|
||||||
|
// in order to do logging, the following environment variables need to be set:
|
||||||
|
//
|
||||||
|
// set NSPR_LOG_MODULES=cookie:3 -- shows rejected cookies
|
||||||
|
// set NSPR_LOG_MODULES=cookie:4 -- shows accepted and rejected cookies
|
||||||
|
// set NSPR_LOG_FILE=c:\cookie.log
|
||||||
|
//
|
||||||
|
// this next define has to appear before the include of prolog.h
|
||||||
|
#define FORCE_PR_LOG /* Allow logging in the release build */
|
||||||
|
#include "prlog.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
PRLogModuleInfo* gCookieLog = nsnull;
|
||||||
|
#endif /* PR_LOGGING */
|
||||||
|
|
||||||
#define MAX_NUMBER_OF_COOKIES 300
|
#define MAX_NUMBER_OF_COOKIES 300
|
||||||
#define MAX_COOKIES_PER_SERVER 20
|
#define MAX_COOKIES_PER_SERVER 20
|
||||||
#define MAX_BYTES_PER_COOKIE 4096 /* must be at least 1 */
|
#define MAX_BYTES_PER_COOKIE 4096 /* must be at least 1 */
|
||||||
|
@ -170,6 +186,58 @@ get_current_time()
|
||||||
return current_time_in_seconds;
|
return current_time_in_seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
#define SET_COOKIE PR_TRUE
|
||||||
|
#define GET_COOKIE PR_FALSE
|
||||||
|
PRIVATE void
|
||||||
|
cookie_LogFailure(PRBool set_cookie, nsIURI * curURL, const char * cookieString, const char * reason) {
|
||||||
|
if (!gCookieLog) {
|
||||||
|
gCookieLog = PR_NewLogModule("cookie");
|
||||||
|
}
|
||||||
|
nsCAutoString spec;
|
||||||
|
nsresult result = curURL->GetSpec(spec);
|
||||||
|
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_WARNING,
|
||||||
|
("%s%s%s\n", "===== ", set_cookie ? "COOKIE NOT ACCEPTED" : "COOKIE NOT SENT", " ====="));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_WARNING,("request URL: %s\n", spec.get()));
|
||||||
|
if (set_cookie) {
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_WARNING,("cookie string: %s\n", cookieString));
|
||||||
|
}
|
||||||
|
time_t curTime = get_current_time();
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_WARNING,("current time (gmt): %s", asctime(gmtime(&curTime))));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_WARNING,("rejected because %s\n", reason));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_WARNING,("\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
PRIVATE void
|
||||||
|
cookie_LogSuccess(PRBool set_cookie, nsIURI * curURL, const char * cookieString, cookie_CookieStruct * cookie) {
|
||||||
|
if (!gCookieLog) {
|
||||||
|
gCookieLog = PR_NewLogModule("cookie");
|
||||||
|
}
|
||||||
|
nsCAutoString spec;
|
||||||
|
nsresult result = curURL->GetSpec(spec);
|
||||||
|
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,
|
||||||
|
("%s%s%s\n", "===== ", set_cookie ? "COOKIE ACCEPTED" : "COOKIE SENT", " ====="));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("request URL: %s\n", spec.get()));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("cookie string: %s\n", cookieString));
|
||||||
|
time_t curTime = get_current_time();
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("current time (gmt): %s", asctime(gmtime(&curTime))));
|
||||||
|
|
||||||
|
if (set_cookie) {
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("----------------\n"));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("name: %s\n", cookie->name));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("value: %s\n", cookie->cookie));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("%s: %s\n", cookie->isDomain ? "domain" : "host", cookie->host));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("path: %s\n", cookie->path));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("expires (gmt): %s",
|
||||||
|
cookie->expires ? asctime(gmtime(&cookie->expires)) : "at end of session"));
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("is secure: %s\n", cookie->isSecure ? "true" : "false"));
|
||||||
|
}
|
||||||
|
PR_LOG(gCookieLog, PR_LOG_DEBUG,("\n"));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
PRBool PR_CALLBACK deleteCookie(void *aElement, void *aData) {
|
PRBool PR_CALLBACK deleteCookie(void *aElement, void *aData) {
|
||||||
cookie_CookieStruct *cookie = (cookie_CookieStruct*)aElement;
|
cookie_CookieStruct *cookie = (cookie_CookieStruct*)aElement;
|
||||||
PR_FREEIF(cookie->path);
|
PR_FREEIF(cookie->path);
|
||||||
|
@ -677,6 +745,9 @@ COOKIE_GetCookie(nsIURI * address) {
|
||||||
|
|
||||||
/* disable cookies if the user's prefs say so */
|
/* disable cookies if the user's prefs say so */
|
||||||
if(cookie_GetBehaviorPref() == PERMISSION_DontUse) {
|
if(cookie_GetBehaviorPref() == PERMISSION_DontUse) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(GET_COOKIE, address, "", "Cookies are disabled");
|
||||||
|
#endif
|
||||||
return nsnull;
|
return nsnull;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -686,24 +757,39 @@ COOKIE_GetCookie(nsIURI * address) {
|
||||||
|
|
||||||
/* Don't let ftp sites read cookies (could be a security issue) */
|
/* Don't let ftp sites read cookies (could be a security issue) */
|
||||||
PRBool isFtp;
|
PRBool isFtp;
|
||||||
if (NS_FAILED(address->SchemeIs("ftp", &isFtp)) || isFtp)
|
if (NS_FAILED(address->SchemeIs("ftp", &isFtp)) || isFtp) {
|
||||||
return nsnull;
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(GET_COOKIE, address, "", "ftp sites cannot read cookies");
|
||||||
|
#endif
|
||||||
|
return nsnull;
|
||||||
|
}
|
||||||
/* search for all cookies */
|
/* search for all cookies */
|
||||||
if (cookie_list == nsnull) {
|
if (cookie_list == nsnull) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(GET_COOKIE, address, "", "Cookie list is empty");
|
||||||
|
#endif
|
||||||
return nsnull;
|
return nsnull;
|
||||||
}
|
}
|
||||||
nsCAutoString host, path;
|
nsCAutoString host, path;
|
||||||
// Get host and path
|
// Get host and path
|
||||||
nsresult result = address->GetHost(host);
|
nsresult result = address->GetHost(host);
|
||||||
if (NS_FAILED(result)) {
|
if (NS_FAILED(result)) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(GET_COOKIE, address, "", "GetHost failed");
|
||||||
|
#endif
|
||||||
return nsnull;
|
return nsnull;
|
||||||
}
|
}
|
||||||
if ((host.RFindChar(' ') != -1) || (host.RFindChar('\t') != -1)) {
|
if ((host.RFindChar(' ') != -1) || (host.RFindChar('\t') != -1)) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(GET_COOKIE, address, "", "Host has embedded space character");
|
||||||
|
#endif
|
||||||
return nsnull;
|
return nsnull;
|
||||||
}
|
}
|
||||||
result = address->GetPath(path);
|
result = address->GetPath(path);
|
||||||
if (NS_FAILED(result)) {
|
if (NS_FAILED(result)) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(GET_COOKIE, address, "", "GetPath failed");
|
||||||
|
#endif
|
||||||
return nsnull;
|
return nsnull;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,6 +869,9 @@ COOKIE_GetCookie(nsIURI * address) {
|
||||||
PR_FREEIF(name);
|
PR_FREEIF(name);
|
||||||
|
|
||||||
/* may be nsnull */
|
/* may be nsnull */
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogSuccess(GET_COOKIE, address, rv, nsnull);
|
||||||
|
#endif
|
||||||
return(rv);
|
return(rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -991,6 +1080,9 @@ COOKIE_GetCookieFromHttp(nsIURI * address, nsIURI * firstAddress) {
|
||||||
* have to resort to two prefs
|
* have to resort to two prefs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(GET_COOKIE, address, "", "Originating server test failed");
|
||||||
|
#endif
|
||||||
return nsnull;
|
return nsnull;
|
||||||
}
|
}
|
||||||
return COOKIE_GetCookie(address);
|
return COOKIE_GetCookie(address);
|
||||||
|
@ -1038,16 +1130,26 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
rv = curURL->GetHost(cur_host);
|
rv = curURL->GetHost(cur_host);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "GetHost failed");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't let ftp sites set cookies (could be a security issue) */
|
/* Don't let ftp sites set cookies (could be a security issue) */
|
||||||
PRBool isFtp;
|
PRBool isFtp;
|
||||||
if (NS_FAILED(curURL->SchemeIs("ftp", &isFtp)) || isFtp)
|
if (NS_FAILED(curURL->SchemeIs("ftp", &isFtp)) || isFtp) {
|
||||||
return;
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "ftp sites cannot set cookies");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
rv = curURL->GetPath(cur_path);
|
rv = curURL->GetPath(cur_path);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "GetPath failed");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1068,12 +1170,18 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if(cookie_GetBehaviorPref() == PERMISSION_DontUse) {
|
if(cookie_GetBehaviorPref() == PERMISSION_DontUse) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Cookies are disabled");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("\nSetCookieString(URL '%s', header '%s') time %d == %s\n",curURL,setCookieHeader,timeToExpire,asctime(gmtime(&timeToExpire)));
|
//printf("\nSetCookieString(URL '%s', header '%s') time %d == %s\n",curURL,setCookieHeader,timeToExpire,asctime(gmtime(&timeToExpire)));
|
||||||
if(cookie_GetLifetimePref() == COOKIE_Discard) {
|
if(cookie_GetLifetimePref() == COOKIE_Discard) {
|
||||||
if(cookie_GetLifetimeTime() < timeToExpire) {
|
if(cookie_GetLifetimeTime() < timeToExpire) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Cookie lifetime test failed");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1179,6 +1287,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_Free(domain_from_header);
|
PR_Free(domain_from_header);
|
||||||
// TRACEMSG(("DOMAIN failed two dot test"));
|
// TRACEMSG(("DOMAIN failed two dot test"));
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Failed the two-dot test");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1192,6 +1303,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_FREEIF(path_from_header);
|
PR_FREEIF(path_from_header);
|
||||||
PR_Free(domain_from_header);
|
PR_Free(domain_from_header);
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Host is not in the domain");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1225,6 +1339,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_FREEIF(path_from_header);
|
PR_FREEIF(path_from_header);
|
||||||
PR_Free(domain_from_header);
|
PR_Free(domain_from_header);
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Host minus domain failed the no-dot test");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1264,6 +1381,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_FREEIF(path_from_header);
|
PR_FREEIF(path_from_header);
|
||||||
PR_FREEIF(host_from_header);
|
PR_FREEIF(host_from_header);
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Failed the path test");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1321,6 +1441,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_FREEIF(name_from_header);
|
PR_FREEIF(name_from_header);
|
||||||
PR_FREEIF(cookie_from_header);
|
PR_FREEIF(cookie_from_header);
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Unable to allocate memory for new cookie");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1357,6 +1480,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_FREEIF(name_from_header);
|
PR_FREEIF(name_from_header);
|
||||||
PR_FREEIF(cookie_from_header);
|
PR_FREEIF(cookie_from_header);
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Cookies blocked for this site");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1396,6 +1522,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_FREEIF(name_from_header);
|
PR_FREEIF(name_from_header);
|
||||||
PR_FREEIF(cookie_from_header);
|
PR_FREEIF(cookie_from_header);
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Unable to allocate memory for new cookie");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1419,6 +1548,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
PR_FREEIF(cookie_from_header);
|
PR_FREEIF(cookie_from_header);
|
||||||
PR_Free(prev_cookie);
|
PR_Free(prev_cookie);
|
||||||
nsCRT::free(setCookieHeaderInternal);
|
nsCRT::free(setCookieHeaderInternal);
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Unable to allocate memory for cookie list");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1440,6 +1572,9 @@ cookie_SetCookieString(nsIURI * curURL, nsIPrompt *aPrompter, const char * setCo
|
||||||
/* no shorter strings found in list */
|
/* no shorter strings found in list */
|
||||||
cookie_list->InsertElementAt(prev_cookie, 0);
|
cookie_list->InsertElementAt(prev_cookie, 0);
|
||||||
}
|
}
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogSuccess(SET_COOKIE, curURL, setCookieHeader, prev_cookie);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* At this point we know a cookie has changed. Make a note to write the cookies to file. */
|
/* At this point we know a cookie has changed. Make a note to write the cookies to file. */
|
||||||
|
@ -1465,10 +1600,19 @@ COOKIE_SetCookieString(nsIURI * aURL, nsIPrompt *aPrompter, const char * setCook
|
||||||
|
|
||||||
if (aHttpChannel) {
|
if (aHttpChannel) {
|
||||||
nsCOMPtr<nsIHttpChannelInternal> httpInternal = do_QueryInterface(aHttpChannel);
|
nsCOMPtr<nsIHttpChannelInternal> httpInternal = do_QueryInterface(aHttpChannel);
|
||||||
if (!httpInternal) return;
|
if (!httpInternal) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, aURL, setCookieHeader, "unable to QueryInterface httpInternal");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
rv = httpInternal->GetDocumentURI(getter_AddRefs(pFirstURL));
|
rv = httpInternal->GetDocumentURI(getter_AddRefs(pFirstURL));
|
||||||
if (NS_FAILED(rv)) return;
|
if (NS_FAILED(rv)) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, aURL, setCookieHeader, "unable to determine first URL");
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
COOKIE_SetCookieStringFromHttp(aURL, pFirstURL, aPrompter, setCookieHeader, 0, aHttpChannel);
|
COOKIE_SetCookieStringFromHttp(aURL, pFirstURL, aPrompter, setCookieHeader, 0, aHttpChannel);
|
||||||
}
|
}
|
||||||
|
@ -1516,6 +1660,9 @@ COOKIE_SetCookieStringFromHttp(nsIURI * curURL, nsIURI * firstURL, nsIPrompt *aP
|
||||||
nsCOMPtr<nsIObserverService> os(do_GetService("@mozilla.org/observer-service;1"));
|
nsCOMPtr<nsIObserverService> os(do_GetService("@mozilla.org/observer-service;1"));
|
||||||
if (os)
|
if (os)
|
||||||
os->NotifyObservers(nsnull, "cookieIcon", NS_LITERAL_STRING("on").get());
|
os->NotifyObservers(nsnull, "cookieIcon", NS_LITERAL_STRING("on").get());
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "P3P test failed");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1524,12 +1671,19 @@ COOKIE_SetCookieStringFromHttp(nsIURI * curURL, nsIURI * firstURL, nsIPrompt *aP
|
||||||
if ((cookie_GetBehaviorPref() == PERMISSION_DontAcceptForeign) &&
|
if ((cookie_GetBehaviorPref() == PERMISSION_DontAcceptForeign) &&
|
||||||
cookie_isForeign(curURL, firstURL)) {
|
cookie_isForeign(curURL, firstURL)) {
|
||||||
/* it's a foreign cookie so don't set the cookie */
|
/* it's a foreign cookie so don't set the cookie */
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Originating server test failed");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if a Mail/News message is setting the cookie */
|
/* check if a Mail/News message is setting the cookie */
|
||||||
if (cookie_GetDisableCookieForMailNewsPref() && cookie_isFromMailNews(firstURL))
|
if (cookie_GetDisableCookieForMailNewsPref() && cookie_isFromMailNews(firstURL)) {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "Cookies disabled for mailnews");
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Determine when the cookie should expire. This is done by taking the difference between
|
/* Determine when the cookie should expire. This is done by taking the difference between
|
||||||
* the server time and the time the server wants the cookie to expire, and adding that
|
* the server time and the time the server wants the cookie to expire, and adding that
|
||||||
|
@ -1572,7 +1726,6 @@ COOKIE_SetCookieStringFromHttp(nsIURI * curURL, nsIURI * firstURL, nsIPrompt *aP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* If max-age attribute is present, it overrides expires attribute */
|
/* If max-age attribute is present, it overrides expires attribute */
|
||||||
#define MAXAGE "max-age"
|
#define MAXAGE "max-age"
|
||||||
ptr = PL_strcasestr(setCookieHeader, MAXAGE);
|
ptr = PL_strcasestr(setCookieHeader, MAXAGE);
|
||||||
|
@ -1582,6 +1735,9 @@ COOKIE_SetCookieStringFromHttp(nsIURI * curURL, nsIURI * firstURL, nsIPrompt *aP
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
if (*ptr++ != '=') {
|
if (*ptr++ != '=') {
|
||||||
|
#if defined(PR_LOGGING)
|
||||||
|
cookie_LogFailure(SET_COOKIE, curURL, setCookieHeader, "max-age is not followed by an equal sign");
|
||||||
|
#endif
|
||||||
return; // invalid syntax: max-age but no equal sign
|
return; // invalid syntax: max-age but no equal sign
|
||||||
}
|
}
|
||||||
while (isspace(*ptr)) { // skip over white space again
|
while (isspace(*ptr)) { // skip over white space again
|
||||||
|
|
Загрузка…
Ссылка в новой задаче