From 07174b62c6ee23f7b44742ecfe44d4ff8653e57f Mon Sep 17 00:00:00 2001 From: Aron Budea Date: Mon, 19 Mar 2018 23:56:54 +0100 Subject: [PATCH] tdf#114227: set better proxy params in cURL for crash reporting Take proxy server from internet settings, and pass to cURL. Allow forwarding authentication as well (explicitely setting user/password is still missing). Change-Id: I19a6c9057a11a5911a6117f71060d3f386953602 Reviewed-on: https://gerrit.libreoffice.org/51621 Tested-by: Jenkins Reviewed-by: Thorsten Behrens --- desktop/Library_crashreport.mk | 3 +++ desktop/source/app/crashreport.cxx | 19 ++++++++++++++++++- desktop/source/minidump/minidump.cxx | 11 +++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/desktop/Library_crashreport.mk b/desktop/Library_crashreport.mk index 04f6855123d6..3b9d6dd34fdc 100644 --- a/desktop/Library_crashreport.mk +++ b/desktop/Library_crashreport.mk @@ -30,12 +30,15 @@ $(eval $(call gb_Library_add_libs,crashreport,\ ) \ )) +$(eval $(call gb_Library_use_sdk_api,crashreport)) + $(eval $(call gb_Library_use_libraries,crashreport,\ comphelper \ cppu \ cppuhelper \ sal \ salhelper \ + ucbhelper \ utl \ )) diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx index 24205e8b2b8b..29001367bb91 100644 --- a/desktop/source/app/crashreport.cxx +++ b/desktop/source/app/crashreport.cxx @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include @@ -70,13 +72,28 @@ void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue) void CrashReporter::writeCommonInfo() { osl::MutexGuard aGuard(maMutex); + + ucbhelper::InternetProxyDecider proxy_decider(::comphelper::getProcessComponentContext()); + + const OUString protocol = "https"; + const OUString url = "crashreport.libreoffice.org"; + const sal_Int32 port = 443; + + const ucbhelper::InternetProxyServer proxy_server = proxy_decider.getProxy(protocol, url, port); + // limit the amount of code that needs to be executed before the crash reporting std::string ini_path = CrashReporter::getIniFileName(); std::ofstream minidump_file(ini_path, std::ios_base::trunc); minidump_file << "ProductName=LibreOffice\n"; minidump_file << "Version=" LIBO_VERSION_DOTTED "\n"; minidump_file << "BuildID=" << utl::Bootstrap::getBuildIdData("") << "\n"; - minidump_file << "URL=https://crashreport.libreoffice.org/submit/\n"; + minidump_file << "URL=" << protocol << "://" << url << "/submit/\n"; + + if (proxy_server.aName != OUString()) + { + minidump_file << "Proxy=" << proxy_server.aName << ":" << proxy_server.nPort << "\n"; + } + for (auto& keyValue : maKeyValues) { writeToStream(minidump_file, keyValue.first, keyValue.second); diff --git a/desktop/source/minidump/minidump.cxx b/desktop/source/minidump/minidump.cxx index 96753d6027af..f3eefd023b75 100644 --- a/desktop/source/minidump/minidump.cxx +++ b/desktop/source/minidump/minidump.cxx @@ -111,9 +111,16 @@ bool uploadContent(std::map& parameters, std::string& curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // Set proxy information if necessary. if (!proxy.empty()) + { curl_easy_setopt(curl, CURLOPT_PROXY, proxy.c_str()); - if (!proxy_user_pwd.empty()) - curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_pwd.c_str()); + + curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_ANYSAFE); + + if (!proxy_user_pwd.empty()) + curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_pwd.c_str()); + else + curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, ":"); + } if (!ca_certificate_file.empty()) curl_easy_setopt(curl, CURLOPT_CAINFO, ca_certificate_file.c_str()); -- 2.11.4.GIT