diff options
Diffstat (limited to 'packages/gtk-webcore/files/NRCit_HTTP_auth.diff')
-rw-r--r-- | packages/gtk-webcore/files/NRCit_HTTP_auth.diff | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/packages/gtk-webcore/files/NRCit_HTTP_auth.diff b/packages/gtk-webcore/files/NRCit_HTTP_auth.diff new file mode 100644 index 0000000000..7a2df30d1d --- /dev/null +++ b/packages/gtk-webcore/files/NRCit_HTTP_auth.diff @@ -0,0 +1,132 @@ +Index: NRCit/src/Http.cpp +=================================================================== +--- NRCit/src/Http.cpp (revision 55) ++++ NRCit/src/Http.cpp (working copy) +@@ -299,3 +299,9 @@ + { + + } ++ ++HttpHeaderWWWAuthenticate::HttpHeaderWWWAuthenticate(const gchar * value) ++ : HttpHeader(WWWAuthenticate, "WWW-Authenticate", value) ++{ ++ ++} +Index: NRCit/src/HttpCurl.cpp +=================================================================== +--- NRCit/src/HttpCurl.cpp (revision 55) ++++ NRCit/src/HttpCurl.cpp (working copy) +@@ -69,7 +69,7 @@ + void setPostData(const gchar * contentType, GByteArray *); + + protected: +- bool shouldAuthenticate() { return m_authenticate; } ++ bool shouldAuthenticate() { return m_need_authenticate; } + + /** Authenticates the request. */ + void doAuth(); +@@ -89,7 +89,7 @@ + + GByteArray * postData; + bool headerEnd; +- bool m_authenticate; ++ bool m_need_authenticate; + + gchar * proxy; + CurlFactory* parent; +@@ -374,7 +374,7 @@ + ,curl_post_last(NULL) + ,postData(NULL) + ,headerEnd(false) +- ,m_authenticate(true) ++ ,m_need_authenticate(true) + ,proxy(NULL) + ,parent(aParent) + ,status(-1) +@@ -438,7 +438,8 @@ + } + + void CurlRequest::doAuth() { +- m_authenticate = m_listener->authenticate(this); ++ m_listener->authenticate(this); ++ m_need_authenticate = false; // set false to go on processing data in CurlRequest::data + } + + void CurlRequest::execute() +@@ -457,6 +458,8 @@ + curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1); + curl_easy_setopt(handle, CURLOPT_MAXREDIRS, 10); + ++ curl_easy_setopt(handle, CURLOPT_AUTOREFERER, 1); ++ + // url ptr must remain valid through the request + curl_easy_setopt(handle, CURLOPT_URL, m_url); + +@@ -534,7 +537,7 @@ + + + // if we are in middle of authenticating, do nothing. +- if (status != HTTP_AUTH_REQUIRED || !m_authenticate) { ++ if (status != HTTP_AUTH_REQUIRED || !m_need_authenticate) { + m_listener->data(this, data, len); + } + } +@@ -570,6 +573,8 @@ + header = new HttpHeaderRefresh(value); + } else if (!strcmp(key, HTTP_SET_COOKIE)) { + header = new HttpHeaderSetCookie(value); ++ } else if (!strcmp(key, HTTP_WWW_AUTHENTICATE)) { ++ header = new HttpHeaderWWWAuthenticate(value); + } else { + header = new HttpHeader(HttpHeader::Unknown, key, value); + } +@@ -584,7 +589,7 @@ + { + HttpHeader *hdr = parseHeader(data, len); + if (hdr) { +- if (hdr->key() == HTTP_WWW_AUTHENTICATE && hdr->value()) ++ if (!strcmp(hdr->key(), HTTP_WWW_AUTHENTICATE) && hdr->value()) + { + const gchar * value = hdr->value(); + char * realm = g_strrstr(value, "realm=" ); +Index: NRCit/src/PageLoadListener.cpp +=================================================================== +--- NRCit/src/PageLoadListener.cpp (revision 55) ++++ NRCit/src/PageLoadListener.cpp (working copy) +@@ -206,8 +206,9 @@ + creds->setCredential(newcred, space); + request->authenticate(newcred.user(), newcred.password()); + } +- if (user) g_free(user); +- if (password) g_free(password); ++ // Do not free these values which are owned by Webi. ++ // if (user) g_free(user); ++ // if (password) g_free(password); + return ret; + } + +Index: NRCit/src/Http.h +=================================================================== +--- NRCit/src/Http.h (revision 55) ++++ NRCit/src/Http.h (working copy) +@@ -165,6 +165,7 @@ + ContentLength, + Refresh, + SetCookie, ++ WWWAuthenticate, + Unknown, + Invalid + }; +@@ -236,6 +237,12 @@ + ~HttpHeaderSetCookie() {} + }; + ++class HttpHeaderWWWAuthenticate : public HttpHeader ++{ ++public: ++ HttpHeaderWWWAuthenticate(const gchar* value); ++ ~HttpHeaderWWWAuthenticate() {} ++}; + + + #endif |