diff options
author | Tofu Linden <tofu.linden@lindenlab.com> | 2010-04-15 10:31:05 +0100 |
---|---|---|
committer | Tofu Linden <tofu.linden@lindenlab.com> | 2010-04-15 10:31:05 +0100 |
commit | 90800c84c4836d2eb0425ed09b7dd83e86a106db (patch) | |
tree | 141636931b3185afc81dc005601a6513905a5f3a /indra/newview/llviewermedia.cpp | |
parent | d3d180f5db0350d6a8b930227b17d5001e673295 (diff) | |
parent | 9f0f610682e0bcceb88eaddcb7a02acfcf3d05ce (diff) |
merge from viewer-trunk
Diffstat (limited to 'indra/newview/llviewermedia.cpp')
-rw-r--r-- | indra/newview/llviewermedia.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index dd4192f270..58138d9917 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1286,7 +1286,30 @@ void LLViewerMedia::setOpenIDCookie() { if(!sOpenIDCookie.empty()) { - getCookieStore()->setCookiesFromHost(sOpenIDCookie, sOpenIDURL.mAuthority); + // The LLURL can give me the 'authority', which is of the form: [username[:password]@]hostname[:port] + // We want just the hostname for the cookie code, but LLURL doesn't seem to have a way to extract that. + // We therefore do it here. + std::string authority = sOpenIDURL.mAuthority; + std::string::size_type host_start = authority.find('@'); + if(host_start == std::string::npos) + { + // no username/password + host_start = 0; + } + else + { + // Hostname starts after the @. + // (If the hostname part is empty, this may put host_start at the end of the string. In that case, it will end up passing through an empty hostname, which is correct.) + ++host_start; + } + std::string::size_type host_end = authority.rfind(':'); + if((host_end == std::string::npos) || (host_end < host_start)) + { + // no port + host_end = authority.size(); + } + + getCookieStore()->setCookiesFromHost(sOpenIDCookie, authority.substr(host_start, host_end - host_start)); } } |