diff --git a/3rdParty/buildMacDependencies.sh b/3rdParty/buildMacDependencies.sh
index 7c3335fab1..1035de2e73 100755
--- a/3rdParty/buildMacDependencies.sh
+++ b/3rdParty/buildMacDependencies.sh
@@ -156,7 +156,6 @@ download_and_build "${opensslDirName}" "${opensslFileName}" "${opensslURL}" "${R
download_and_build "${caresDirName}" "${caresFileName}" "${caresURL}" "${ROOTDIR}/mac_build/buildc-ares.sh" "libcares.a" "x86_64"
download_and_build "${curlDirName}" "${curlFileName}" "${curlURL}" "${ROOTDIR}/mac_build/buildcurl.sh" "libcurl.a" "x86_64"
download_and_build "${wxWidgetsDirName}" "${wxWidgetsFileName}" "${wxWidgetsURL}" "${ROOTDIR}/mac_build/buildWxMac.sh ${wxoption}" "libwx_osx_cocoa_static.a" "x86_64"
-download_and_build "${sqliteDirName}" "${sqliteFileName}" "${sqliteURL}" "${ROOTDIR}/mac_build/buildsqlite3.sh" "libsqlite3.a" "x86_64"
download_and_build "${freetypeDirName}" "${freetypeFileName}" "${freetypeURL}" "${ROOTDIR}/mac_build/buildfreetype.sh" "libfreetype.a" "x86_64"
download_and_build "${ftglDirName}" "${ftglFileName}" "${ftglURL}" "${ROOTDIR}/mac_build/buildFTGL.sh" "libftgl.a" "x86_64"
diff --git a/clientgui/browser.cpp b/clientgui/browser.cpp
deleted file mode 100644
index 1c3f1a5cc8..0000000000
--- a/clientgui/browser.cpp
+++ /dev/null
@@ -1,1035 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see .
-
-DEPRECATED
-
-#ifdef _WIN32
-#include "boinc_win.h"
-#include "win_util.h"
-
-#ifndef InternetGetCookie
-
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-BOOL WINAPI InternetGetCookieA( LPCSTR lpszUrl, LPCSTR lpszCookieName, LPSTR lpszCookieData, LPDWORD lpdwSize );
-
-#if defined(__cplusplus)
-}
-#endif
-
-#endif
-#else
-#include
-#include
-#include
-#endif
-
-#include
-#include "error_numbers.h"
-#include "str_replace.h"
-#include "mfile.h"
-#include "miofile.h"
-#include "str_util.h"
-#include "filesys.h"
-#include "browser.h"
-
-
-//
-// Utility Functions
-//
-
-// retrieve the user's application data directory.
-// Win : C:\Documents and Settings\\Application Data
-// Unix: ~/
-//
-// Google Chrome decided to put its application data in the 'local' application data
-// store on Windows. 'local' only has meaning for Windows.
-//
-void get_home_dir_path( std::string& path, bool local = false ) {
-#ifdef _WIN32
- CHAR szBuffer[MAX_PATH];
- int iCSIDLFlags = CSIDL_FLAG_CREATE;
-
- if (local) {
- iCSIDLFlags |= CSIDL_LOCAL_APPDATA;
- } else {
- iCSIDLFlags |= CSIDL_APPDATA;
- }
-
- if (SUCCEEDED(SHGetFolderPathA(NULL, iCSIDLFlags, NULL, SHGFP_TYPE_CURRENT, szBuffer))) {
- path = std::string(szBuffer);
- path += std::string("\\");
- }
-#elif defined(__APPLE__)
- path = std::string(getenv("HOME")) + std::string("/");
-#else
- path = std::string("~/");
-#endif
-}
-
-// retrieve the user's cookie directory.
-// WinXP
-// C:\Documents and Settings\\Cookies
-// WinVista/Win7
-// C:\Documents and Settings\\Application Data\Roaming\Microsoft\Windows\Cookies
-// C:\Documents and Settings\\Application Data\Roaming\Microsoft\Windows\Cookies\Low
-//
-void get_internet_explorer_cookie_path( bool low_rights, std::string& path ) {
-#ifdef _WIN32
- CHAR szBuffer[MAX_PATH];
- if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_COOKIES|CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, szBuffer))) {
- path = std::string(szBuffer);
- path += std::string("\\");
- if (low_rights) {
- path += std::string("Low\\");
- }
- }
-#endif
-}
-
-
-// retrieve the user's name.
-//
-void get_user_name( std::string& name ) {
-#ifdef _WIN32
- CHAR szBuffer[256];
- DWORD dwSize = sizeof(szBuffer);
-
- if (GetUserNameA((LPSTR)&szBuffer, &dwSize)) {
- name = szBuffer;
- }
-#endif
-}
-
-
-// is the authenticator valid?
-//
-bool is_authenticator_valid(const std::string authenticator) {
- std::string tmp = authenticator;
-
- // Perform some basic validation of the suspect authenticator
- //
-
- // If the string is null then it is invalid.
- if (0 == tmp.length()) {
- return false;
- }
-
- // If the string contains non alpha numeric characters it is invalid.
- std::string::iterator it = tmp.begin();
- while (it != tmp.end()) {
- if (!isalpha(*it) && !isdigit(*it)) {
- return false;
- }
- ++it;
- }
-
- return true;
-}
-
-
-// parse name value pairs based on INI file rules.
-//
-bool parse_name_value_pair(char* buf, std::string& name, std::string& value) {
- std::basic_string::size_type i;
- std::string s;
-
- s = std::string(buf);
- i = s.find("=", 0);
- if ( i < s.npos ) {
- name = s.substr(0, i);
- value = s.substr(i + 1);
- strip_whitespace(name);
- strip_whitespace(value);
- return true;
- }
- return false;
-}
-
-
-// parse host name from url for Mozilla compatible browsers.
-//
-bool parse_hostname_mozilla_compatible(std::string& project_url, std::string& hostname) {
- std::basic_string::size_type start;
- std::basic_string::size_type end;
-
- start = project_url.find("//", 0) + 2;
- end = project_url.find("/", start);
-
- hostname = project_url.substr(start, end - start);
-
- if (starts_with(hostname.c_str(), "www"))
- hostname.erase(0, 3);
-
- if (!hostname.empty())
- return true;
-
- return false;
-}
-
-
-// parse host name from url for Chrome compatible browsers.
-//
-bool parse_hostname_chrome_compatible(std::string& project_url, std::string& hostname) {
- std::basic_string::size_type start;
- std::basic_string::size_type end;
-
- start = project_url.find("//", 0) + 2;
- end = project_url.find("/", start);
-
- hostname = project_url.substr(start, end - start);
-
- if (starts_with(hostname.c_str(), "www"))
- hostname.erase(0, 3);
-
- if (!hostname.empty())
- return true;
-
- return false;
-}
-
-
-// parse host name from url for Internet Explorer compatible browsers.
-//
-bool parse_hostname_ie_compatible(
- std::string& project_url, std::string& hostname, std::string& domainname
-) {
- std::basic_string::size_type start;
- std::basic_string::size_type end;
-
- // Remove the protocol identifier
- start = project_url.find("//", 0) + 2;
- end = project_url.find("/", start);
-
- hostname = project_url.substr(start, end - start);
-
- // Remove the hostname to extract the domain name
- start = 0;
- end = hostname.find(".") + 1;
-
- domainname = hostname;
- domainname.erase(start, end);
-
- if (!hostname.empty() && !domainname.empty())
- return true;
-
- return false;
-}
-
-
-//
-// Generic Browser Support
-//
-
-class COOKIE_SQL {
-public:
- std::string host;
- std::string name;
- std::string value;
-
- COOKIE_SQL();
-
- void clear();
-};
-
-
-COOKIE_SQL::COOKIE_SQL() {
- clear();
-}
-
-
-void COOKIE_SQL::clear() {
- host.clear();
- name.clear();
- value.clear();
-}
-
-
-//
-// Mozilla-Based Browser Support
-//
-
-class MOZILLA_PROFILE {
-public:
- std::string name;
- std::string path;
- bool is_relative;
- bool is_default;
-
- MOZILLA_PROFILE();
-
- void clear();
- int parse(MIOFILE& in);
-};
-
-
-class MOZILLA_PROFILES {
-public:
- std::vector profiles;
-
- MOZILLA_PROFILES();
-
- void clear();
- int parse(MIOFILE& in);
-};
-
-
-MOZILLA_PROFILE::MOZILLA_PROFILE() {
- clear();
-}
-
-
-void MOZILLA_PROFILE::clear() {
- name.clear();
- path.clear();
- is_relative = false;
- is_default = false;
-}
-
-
-int MOZILLA_PROFILE::parse(MIOFILE& in) {
- char buf[512];
- std::string sn;
- std::string sv;
-
- while (in.fgets(buf, 512)) {
- if (starts_with(buf, "\n")) return 0;
- if (starts_with(buf, "\r\n")) return 0;
- if (!parse_name_value_pair(buf, sn, sv)) continue;
-
- if ("Name" == sn) name = sv;
- if ("Path" == sn) path = sv;
- if (("IsRelative" == sn) && ("1" == sv)) is_relative = true;
- if (("Default" == sn) && ("1" == sv)) is_default = true;
- }
- return ERR_FREAD;
-}
-
-
-MOZILLA_PROFILES::MOZILLA_PROFILES() {
- clear();
-}
-
-
-void MOZILLA_PROFILES::clear() {
- unsigned int i;
- for (i=0; iparse( in )) {
- profiles.push_back( p );
- } else {
- delete p;
- }
- }
- }
-
- return 0;
-}
-
-
-// search for the project specific cookie for mozilla based browsers.
-// SELECT host, name, value, expiry from moz_cookies WHERE name = '%s' AND host LIKE '%s'
-//
-static int find_site_cookie_mozilla_v3(
- void* cookie, int /* argc */, char **argv, char ** /* szColumnName */
-) {
- COOKIE_SQL* _cookie = (COOKIE_SQL*)cookie;
- char host[256], cookie_name[256], cookie_value[4096];
- long long expires;
-
-
- safe_strcpy(host, "");
- safe_strcpy(cookie_name, "");
- safe_strcpy(cookie_value, "");
- expires = 0;
-
- sscanf( argv[0], "%255s", host );
- sscanf( argv[1], "%255s", cookie_name );
- sscanf( argv[2], "%4095s", cookie_value );
- sscanf( argv[3],
-#ifdef _WIN32
- "%I64d",
-#elif defined(__APPLE__)
- "%lld",
-#else
- "%Ld",
-#endif
- &expires
- );
-
- // is this a real cookie?
- // temporary cookie? these cookies do not trickle back up
- // to the jscript interface, so ignore them.
- if (starts_with(host, "#HttpOnly")) return 0;
-
- // is this the right host?
- if (!strstr(host, _cookie->host.c_str())) return 0;
-
- // has the cookie expired?
- if (time(0) > expires) return 0;
-
- // is this the right cookie?
- if (starts_with(cookie_name, _cookie->name)) {
- _cookie->value = cookie_value;
- }
-
- return 0;
-}
-
-
-// traverse the profiles and determine which profile to use.
-// this should be compatible with firefox2, firefox3, firefox4, seamonkey, and netscape.
-//
-bool get_firefox_profile_root( std::string& profile_root ) {
- bool retval = false;
- FILE* pf = NULL;
- MIOFILE pmf;
- MOZILLA_PROFILES mps;
- MOZILLA_PROFILE* mp = NULL;
- std::string cookies_root;
- std::string tmp;
- unsigned int i = 0;
- unsigned int default_index = 0;
-
- get_home_dir_path( profile_root );
-#ifdef _WIN32
- profile_root += std::string("Mozilla\\Firefox\\");
-#elif defined(__APPLE__)
- profile_root += std::string("Library/Application Support/Firefox/");
-#else
- profile_root += std::string(".mozilla/firefox/");
-#endif
-
- // lets see if we can open the profiles configuration file
- tmp = profile_root + "profiles.ini";
- pf = fopen(tmp.c_str(), "r");
-
- // if profiles configuration file exists, parse it.
- if (pf) {
- pmf.init_file(pf);
- mps.parse(pmf);
- }
-
- // we need to know which cookie file to look at, so if only
- // one profile exists, use it.
- //
- // if more than one profile exists, look through all the
- // profiles until we find the default profile. even when the
- // user selects a different profile at startup the default
- // profile flag is changed at startup to the new profile.
- if (mps.profiles.size() == 0) {
- if (pf) fclose(pf);
- return retval; // something is very wrong, don't
- // risk a crash
- }
-
- if (mps.profiles.size() == 1) {
- default_index = 0;
- } else {
- for (i=0; i < mps.profiles.size(); i++) {
- if (mps.profiles[i]->is_default) {
- default_index = i;
- break;
- }
- }
- }
-
- // should the path be treated as an absolute path or a relative
- // path?
- mp = mps.profiles[default_index];
- if (mp->is_relative) {
- cookies_root = profile_root + mp->path + "/";
- } else {
- cookies_root = mp->path + "/";
- }
-
- profile_root = cookies_root;
- retval = true;
-
- // cleanup
- if (pf) fclose(pf);
-
- return retval;
-}
-
-
-bool detect_cookie_mozilla_v3(
- std::string profile_root, std::string& project_url, std::string& name, std::string& value
-) {
- bool retval = false;
- std::string tmp;
- std::string hostname;
- char query[1024];
- sqlite3* db;
- char* lpszSQLErrorMessage = NULL;
- int rc;
- COOKIE_SQL cookie;
-
-
- // determine the project hostname using the project url
- parse_hostname_mozilla_compatible(project_url, hostname);
-
-
- // now we should open up the cookie database.
- tmp = profile_root + "cookies.sqlite";
- rc = sqlite3_open(tmp.c_str(), &db);
- if ( rc ) {
- sqlite3_close(db);
- return false;
- }
-
- // construct SQL query to extract the desired cookie
- // SELECT host, name, value, expiry from moz_cookies WHERE name = '%s' AND host LIKE '%%%s'
- sqlite3_snprintf(sizeof(query), query,
- "SELECT host, name, value, expiry from moz_cookies WHERE name = '%q' AND host LIKE '%%%q'",
- name.c_str(),
- hostname.c_str()
- );
-
- // execute query
- rc = sqlite3_exec(db, query, find_site_cookie_mozilla_v3, &cookie, &lpszSQLErrorMessage);
- if ( rc != SQLITE_OK ){
- sqlite3_free(lpszSQLErrorMessage);
- }
-
- // cleanup
- sqlite3_close(db);
-
- if ( !cookie.value.empty() ) {
- value = cookie.value;
- retval = true;
- }
-
- return retval;
-}
-
-
-//
-// Firefox Browser Support
-//
-
-bool detect_cookie_firefox_3(
- std::string& project_url, std::string& name, std::string& value
-) {
- std::string profile_root;
- get_firefox_profile_root(profile_root);
-
- return detect_cookie_mozilla_v3(
- profile_root,
- project_url,
- name,
- value
- );
-}
-
-
-//
-// Chrome-Based Browser Support
-//
-
-// search for the project specific cookie for chrome based browsers.
-// SELECT host_key, name, value, expires_utc, httponly from cookies WHERE name = '%s' AND host_key LIKE '%s'
-//
-static int find_site_cookie_chrome(
- void* cookie, int /* argc */, char **argv, char ** /* szColumnName */
-) {
- COOKIE_SQL* _cookie = (COOKIE_SQL*)cookie;
- char host[256], cookie_name[256], cookie_value[4096];
- long long expires;
- long httponly;
-
- safe_strcpy(host, "");
- safe_strcpy(cookie_name, "");
- safe_strcpy(cookie_value, "");
- expires = 0;
-
- sscanf( argv[0], "%255s", host );
- sscanf( argv[1], "%255s", cookie_name );
- sscanf( argv[2], "%4095s", cookie_value );
- sscanf( argv[3],
-#ifdef _WIN32
- "%I64d",
-#elif defined(__APPLE__)
- "%lld",
-#else
- "%Ld",
-#endif
- &expires
- );
- sscanf( argv[4],
- "%ld",
- &httponly
- );
-
- // Convert Google Chrome time (microseconds since January 1, 1601)
- // to UNIX time (seconds since January 1, 1970)
- expires = (expires / 1000000) - 11644473600LL;
-
- // is this a real cookie?
- // temporary cookie? these cookies do not trickle back up
- // to the jscript interface, so ignore them.
- if (httponly) return 0;
-
- // is this the right host?
- if (!strstr(host, _cookie->host.c_str())) return 0;
-
- // has the cookie expired?
- if (time(0) > expires) return 0;
-
- // is this the right cookie?
- if (starts_with(cookie_name, _cookie->name)) {
- _cookie->value = cookie_value;
- }
-
- return 0;
-}
-
-
-// traverse the profiles and determine which profile to use.
-// this should be compatible with chrome.
-//
-bool get_chrome_profile_root( std::string& profile_root ) {
- get_home_dir_path( profile_root, true );
-
-#ifdef _WIN32
- profile_root += std::string("Google\\Chrome\\User Data\\Default\\");
-#elif defined(__APPLE__)
- profile_root += std::string("Library/Application Support/Google/Chrome/Default/");
-#else
- profile_root += std::string(".google/chrome/");
-#endif
-
- return true;
-}
-
-
-bool detect_cookie_chrome(
- std::string profile_root, std::string& project_url, std::string& name, std::string& value
-) {
- bool retval = false;
- std::string tmp;
- std::string hostname;
- char query[1024];
- sqlite3* db;
- char* lpszSQLErrorMessage = NULL;
- int rc;
- COOKIE_SQL cookie;
-
-
- // determine the project hostname using the project url
- parse_hostname_chrome_compatible(project_url, hostname);
-
-
- // now we should open up the cookie database.
- tmp = profile_root + "Cookies";
- rc = sqlite3_open(tmp.c_str(), &db);
- if ( rc ) {
- sqlite3_close(db);
- tmp = profile_root + "Safe Browsing Cookies";
- rc = sqlite3_open(tmp.c_str(), &db);
- if ( rc ) {
- sqlite3_close(db);
- return false;
- }
- }
-
- // construct SQL query to extract the desired cookie
- // SELECT host_key, name, value, expires_utc, httponly from cookies WHERE name = '%s' AND host_key LIKE '%%%s'
- sqlite3_snprintf(sizeof(query), query,
- "SELECT host_key, name, value, expires_utc, httponly from cookies WHERE name = '%q' AND host_key LIKE '%%%q'",
- name.c_str(),
- hostname.c_str()
- );
-
- // execute query
- rc = sqlite3_exec(db, query, find_site_cookie_chrome, &cookie, &lpszSQLErrorMessage);
- if ( rc != SQLITE_OK ){
- sqlite3_free(lpszSQLErrorMessage);
- }
-
- // cleanup
- sqlite3_close(db);
-
- if ( !cookie.value.empty() ) {
- value = cookie.value;
- retval = true;
- }
-
- return retval;
-}
-
-
-bool detect_cookie_chrome(
- std::string& project_url, std::string& name, std::string& value
-) {
- std::string profile_root;
- get_chrome_profile_root(profile_root);
-
- return detect_cookie_chrome(
- profile_root,
- project_url,
- name,
- value
- );
-}
-
-
-#ifdef _WIN32
-//
-// Internet Explorer Browser Support
-//
-
-//
-// Detect a cookie in Internet Explorer by using the InternetGetCookie API.
-// Supports: 3.x, 4.x, 5.x, 6.x, 7.x (UAC Turned Off), 8.x (UAC Turned Off), 9.x (UAC Turned Off), and
-// 10.x (UAC Turned Off).
-//
-bool detect_cookie_ie_supported(std::string& project_url, std::string& name, std::string& value)
-{
- bool bReturnValue = false;
- bool bCheckDomainName = false;
- char szCookieBuffer[4096];
- char* pszCookieFragment = NULL;
- DWORD dwSize = sizeof(szCookieBuffer)/sizeof(char);
- std::string strCookieFragment;
- std::string strCookieName;
- std::string strCookieValue;
- std::string hostname;
- std::string domainname;
- size_t uiDelimeterLocation;
-
-
- // if we don't find the cookie at the exact project dns name, check one higher
- // (i.e. www.worldcommunitygrid.org becomes worldcommunitygrid.org
- parse_hostname_ie_compatible(project_url, hostname, domainname);
-
- // InternetGetCookie expects them in URL format
- hostname = std::string("http://") + hostname + std::string("/");
- domainname = std::string("http://") + domainname + std::string("/");
-
- // First check to see if the desired cookie is assigned to the hostname.
- bReturnValue = InternetGetCookieA(hostname.c_str(), NULL, szCookieBuffer, &dwSize) == TRUE;
- if (!bReturnValue || (!strstr(szCookieBuffer, name.c_str()))) {
- bCheckDomainName = true;
- }
-
- // Next check if it was assigned to the domainname.
- if (bCheckDomainName) {
- bReturnValue = InternetGetCookieA(domainname.c_str(), NULL, szCookieBuffer, &dwSize) == TRUE;
- if (!bReturnValue || (!strstr(szCookieBuffer, name.c_str()))) {
- return false;
- }
- }
-
- // Format of cookie buffer:
- // 'cookie1=value1; cookie2=value2; cookie3=value3;
- //
- pszCookieFragment = strtok(szCookieBuffer, "; ");
- while(pszCookieFragment) {
- // Convert to a std::string so we can go to town
- strCookieFragment = pszCookieFragment;
-
- // Extract the name & value
- uiDelimeterLocation = strCookieFragment.find("=", 0);
- strCookieName = strCookieFragment.substr(0, uiDelimeterLocation);
- strCookieValue = strCookieFragment.substr(uiDelimeterLocation + 1);
-
- if (0 == strcmp(name.c_str(), strCookieName.c_str())) {
- // Now we found it! Yea - auto attach!
- value = strCookieValue;
- bReturnValue = true;
- }
-
- pszCookieFragment = strtok(NULL, "; ");
- }
-
- return bReturnValue;
-}
-
-//
-// Detect a cookie in Internet Explorer by using the InternetGetCookie API.
-// Supports: 8.x (UAC Turned On), 9.x (UAC Turned On), 10.x (UAC Turned On).
-//
-typedef HRESULT (__stdcall *tIEGPMC)( IN LPCWSTR, IN LPCWSTR, OUT LPWSTR, OUT DWORD*, IN DWORD );
-
-bool detect_cookie_ie_supported_uac(std::string& project_url, std::string& name, std::string& value)
-{
- static HMODULE ieframelib = NULL;
- static tIEGPMC pIEGPMC = NULL;
- bool bReturnValue = false;
- bool bCheckDomainName = false;
- HRESULT rc;
- WCHAR szCookieBuffer[4096];
- WCHAR* pszCookieFragment = NULL;
- DWORD dwSize = sizeof(szCookieBuffer)/sizeof(WCHAR);
- std::wstring strCookieFragment;
- std::wstring strCookieName;
- std::wstring strCookieValue;
- std::string hostname;
- std::wstring hostname_w;
- std::string domainname;
- std::wstring domainname_w;
- std::wstring name_w;
- size_t uiDelimeterLocation;
-
- if (!ieframelib) {
- ieframelib = LoadLibraryA("ieframe.dll");
- if (ieframelib) {
- pIEGPMC = (tIEGPMC)GetProcAddress(ieframelib, "IEGetProtectedModeCookie");
- }
- }
-
- if (!pIEGPMC) {
- return false;
- }
-
- // Convert name into wide character string
- name_w = boinc_ascii_to_wide(name);
-
- // if we don't find the cookie at the exact project dns name, check one higher
- // (i.e. www.worldcommunitygrid.org becomes worldcommunitygrid.org
- parse_hostname_ie_compatible(project_url, hostname, domainname);
-
- // InternetGetCookie expects them in URL format
- hostname_w = std::wstring(_T("http://")) + boinc_ascii_to_wide(hostname) + std::wstring(_T("/"));
- domainname_w = std::wstring(_T("http://")) + boinc_ascii_to_wide(domainname) + std::wstring(_T("/"));
-
- // First check to see if the desired cookie is assigned to the hostname.
- rc = pIEGPMC(hostname_w.c_str(), NULL, szCookieBuffer, &dwSize, NULL) == TRUE;
- if (!SUCCEEDED(rc) || (!wcsstr(szCookieBuffer, name_w.c_str()))) {
- bCheckDomainName = true;
- }
-
- // Next check if it was assigned to the domainname.
- if (bCheckDomainName) {
- rc = pIEGPMC(domainname_w.c_str(), NULL, szCookieBuffer, &dwSize, NULL) == TRUE;
- if (!SUCCEEDED(rc) || (!wcsstr(szCookieBuffer, name_w.c_str()))) {
- return false;
- }
- }
-
- // Format of cookie buffer:
- // 'cookie1=value1; cookie2=value2; cookie3=value3;
- //
- pszCookieFragment = wcstok(szCookieBuffer, _T("; "));
- while(pszCookieFragment) {
- // Convert to a std::string so we can go to town
- strCookieFragment = pszCookieFragment;
-
- // Extract the name & value
- uiDelimeterLocation = strCookieFragment.find(_T("="), 0);
- strCookieName = strCookieFragment.substr(0, uiDelimeterLocation);
- strCookieValue = strCookieFragment.substr(uiDelimeterLocation + 1);
-
- if (0 == wcscmp(name_w.c_str(), strCookieName.c_str())) {
- // Now we found it! Yea - auto attach!
- value = boinc_wide_to_ascii(strCookieValue);
- bReturnValue = true;
- }
-
- pszCookieFragment = wcstok(NULL, _T("; "));
- }
-
- return bReturnValue;
-}
-
-
-//
-// Detect a cookie in Internet Explorer.
-//
-bool detect_cookie_ie(std::string& project_url, std::string& name, std::string& value)
-{
- // Check using the supported methods first
- if (detect_cookie_ie_supported( project_url, name, value )) return true;
- if (detect_cookie_ie_supported_uac( project_url, name, value )) return true;
- return false;
-}
-
-#endif
-
-
-//
-// walk through the various browsers looking up the
-// project cookies until the projects 'Setup' cookie is found.
-//
-// give preference to the default platform specific browers first before going
-// to the platform independant browsers since most people don't switch from
-// the default.
-//
-bool detect_setup_authenticator(
- std::string& project_url, std::string& authenticator
-) {
- bool retval = false;
- std::string strCookieSetup("Setup");
-
-#ifdef _WIN32
- if (detect_cookie_ie(project_url, strCookieSetup, authenticator)) goto END;
-#endif
-#ifdef __APPLE__
- if (detect_cookie_safari(project_url, strCookieSetup, authenticator)) goto END;
-#endif
- if (detect_cookie_chrome(project_url, strCookieSetup, authenticator)) goto END;
- if (detect_cookie_firefox_3(project_url, strCookieSetup, authenticator)) goto END;
-
-END:
- if (is_authenticator_valid(authenticator)) {
- retval = true;
- }
-
- return retval;
-}
-
-
-//
-// walk through the various browsers looking up the
-// various cookies that make up the simple account creation scheme.
-//
-// give preference to the default platform specific browers first before going
-// to the platform independant browsers since most people don't switch from
-// the default.
-//
-bool detect_simple_account_credentials(
- std::string& project_name, std::string& project_url, std::string& authenticator,
- std::string& project_institution, std::string& project_description, std::string& known
-) {
- bool retval = false;
- std::string strCookieServer("http://boinc.berkeley.edu");
- std::string strCookieProjectName("attach_project_name");
- std::string strCookieProjectURL("attach_master_url");
- std::string strCookieAuthenticator("attach_auth");
- std::string strCookieProjectInstitution("attach_project_inst");
- std::string strCookieProjectDescription("attach_project_desc");
- std::string strCookieKnown("attach_known");
-
-#ifdef _WIN32
- if ( detect_cookie_ie(strCookieServer, strCookieProjectName, project_name) &&
- detect_cookie_ie(strCookieServer, strCookieProjectURL, project_url)
- ){
- detect_cookie_ie(strCookieServer, strCookieAuthenticator, authenticator);
- detect_cookie_ie(strCookieServer, strCookieProjectInstitution, project_institution);
- detect_cookie_ie(strCookieServer, strCookieProjectDescription, project_description);
- detect_cookie_ie(strCookieServer, strCookieKnown, known);
- goto END;
- }
-#endif
-#ifdef __APPLE__
- if ( detect_cookie_safari(strCookieServer, strCookieProjectName, project_name) &&
- detect_cookie_safari(strCookieServer, strCookieProjectURL, project_url)
- ){
- detect_cookie_safari(strCookieServer, strCookieAuthenticator, authenticator);
- detect_cookie_safari(strCookieServer, strCookieProjectInstitution, project_institution);
- detect_cookie_safari(strCookieServer, strCookieProjectDescription, project_description);
- detect_cookie_safari(strCookieServer, strCookieKnown, known);
- goto END;
- }
-#endif
- if ( detect_cookie_chrome(strCookieServer, strCookieProjectName, project_name) &&
- detect_cookie_chrome(strCookieServer, strCookieProjectURL, project_url)
- ){
- detect_cookie_chrome(strCookieServer, strCookieAuthenticator, authenticator);
- detect_cookie_chrome(strCookieServer, strCookieProjectInstitution, project_institution);
- detect_cookie_chrome(strCookieServer, strCookieProjectDescription, project_description);
- detect_cookie_chrome(strCookieServer, strCookieKnown, known);
- goto END;
- }
- if ( detect_cookie_firefox_3(strCookieServer, strCookieProjectName, project_name) &&
- detect_cookie_firefox_3(strCookieServer, strCookieProjectURL, project_url)
- ){
- detect_cookie_firefox_3(strCookieServer, strCookieAuthenticator, authenticator);
- detect_cookie_firefox_3(strCookieServer, strCookieProjectInstitution, project_institution);
- detect_cookie_firefox_3(strCookieServer, strCookieProjectDescription, project_description);
- detect_cookie_firefox_3(strCookieServer, strCookieKnown, known);
- goto END;
- }
-END:
- if (!project_name.empty() && !project_url.empty()) {
- retval = true;
- }
-
- return retval;
-}
-
-
-//
-// walk through the various browsers looking up the
-// account manager cookies until the account manager's 'Login' and 'Password_Hash'
-// cookies are found.
-//
-// give preference to the default platform specific browers first before going
-// to the platform independant browsers since most people don't switch from
-// the default.
-//
-bool detect_account_manager_credentials(
- std::string& project_url, std::string& login, std::string& password_hash, std::string& return_url
-) {
- bool retval = false;
- std::string strCookieLogon("Logon");
- std::string strCookiePasswordHash("PasswordHash");
- std::string strCookieReturnURL("ReturnURL");
-
-#ifdef _WIN32
- if ( detect_cookie_ie(project_url, strCookieLogon, login) &&
- detect_cookie_ie(project_url, strCookiePasswordHash, password_hash)
- ){
- detect_cookie_ie(project_url, strCookieReturnURL, return_url);
- goto END;
- }
-#endif
-#ifdef __APPLE__
- if ( detect_cookie_safari(project_url, strCookieLogon, login) &&
- detect_cookie_safari(project_url, strCookiePasswordHash, password_hash)
- ){
- detect_cookie_safari(project_url, strCookieReturnURL, return_url);
- goto END;
- }
-#endif
- if ( detect_cookie_chrome(project_url, strCookieLogon, login) &&
- detect_cookie_chrome(project_url, strCookiePasswordHash, password_hash)
- ){
- detect_cookie_chrome(project_url, strCookieReturnURL, return_url);
- goto END;
- }
-
- if ( detect_cookie_firefox_3(project_url, strCookieLogon, login) &&
- detect_cookie_firefox_3(project_url, strCookiePasswordHash, password_hash)
- ){
- detect_cookie_firefox_3(project_url, strCookieReturnURL, return_url);
- goto END;
- }
-
-END:
- if (!login.empty() && !password_hash.empty()) {
- retval = true;
- }
-
- return retval;
-}
-
diff --git a/clientgui/browser.h b/clientgui/browser.h
deleted file mode 100644
index 5ee7c4d86f..0000000000
--- a/clientgui/browser.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2008 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see .
-
-DEPRECATED
-
-#ifndef BOINC_BROWSER_H
-#define BOINC_BROWSER_H
-
-//
-// The BOINC client now supports the ability to lookup a users
-// authenticator during automatic attachments via a browser
-// cookie.
-//
-
-bool detect_setup_authenticator(std::string& project_url, std::string& authenticator);
-
-bool detect_simple_account_credentials(
- std::string& project_name, std::string& project_url, std::string& authenticator,
- std::string& project_institution, std::string& project_description, std::string& known
-);
-
-bool detect_account_manager_credentials(
- std::string& project_url, std::string& login, std::string& password_hash,
- std::string& return_url
-);
-
-bool is_authenticator_valid(const std::string authenticator);
-
-// platform specific browsers
-//
-#ifdef _WIN32
-bool detect_cookie_ie(std::string& project_url, std::string& name, std::string& value);
-#endif
-#ifdef __APPLE__
-bool detect_cookie_safari(std::string& project_url, std::string& name, std::string& value);
-#endif
-
-// Cross-platform browsers
-//
-bool detect_cookie_firefox_3(std::string& project_url, std::string& name, std::string& value);
-bool detect_cookie_chrome(std::string& project_url, std::string& name, std::string& value);
-
-#endif
diff --git a/clientgui/mac/browser_safari.mm b/clientgui/mac/browser_safari.mm
deleted file mode 100644
index 8f2d0f9e16..0000000000
--- a/clientgui/mac/browser_safari.mm
+++ /dev/null
@@ -1,75 +0,0 @@
-// This file is part of BOINC.
-// http://boinc.berkeley.edu
-// Copyright (C) 2016 University of California
-//
-// BOINC is free software; you can redistribute it and/or modify it
-// under the terms of the GNU Lesser General Public License
-// as published by the Free Software Foundation,
-// either version 3 of the License, or (at your option) any later version.
-//
-// BOINC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with BOINC. If not, see .
-
-#include
-
-#include "str_util.h"
-#include "browser.h"
-
-bool detect_cookie_safari(std::string& project_url, std::string& name, std::string& value)
-{
- NSHTTPCookieStorage *cookieStorage;
- NSArray *theCookies;
- NSHTTPCookie *aCookie;
- NSURL *theURL;
- NSString *theURLString, *theValueString, *theNameString;
- NSDate *expirationDate;
- unsigned int i, n;
- bool retval = false;
-
- NSAutoreleasePool* pool;
-
- pool = [[NSAutoreleasePool alloc] init];
-
-
- theURLString = [ NSString stringWithCString:project_url.c_str() encoding:NSMacOSRomanStringEncoding ];
-
- theURL = [ NSURL URLWithString:theURLString ];
-
- cookieStorage = [ NSHTTPCookieStorage sharedHTTPCookieStorage ];
-
- if (cookieStorage == NULL)
- goto bail;
-
- theCookies = [ cookieStorage cookiesForURL:theURL ];
-
- if (theCookies == NULL)
- goto bail;
-
- n = [ theCookies count ];
- for (i=0; i