diff options
| author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2011-06-25 17:21:06 +0000 |
|---|---|---|
| committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2011-06-25 17:21:06 +0000 |
| commit | a3875d7dfe94906c95914840149afbb9944b719f (patch) | |
| tree | be7237f7da2ed8dafa7f2efe31da84ee3df763e5 | |
| parent | dfd4183a7da257a1df9979c3ced830cfd5f1e6e3 (diff) | |
| download | rockbox-a3875d7dfe94906c95914840149afbb9944b719f.zip rockbox-a3875d7dfe94906c95914840149afbb9944b719f.tar.gz rockbox-a3875d7dfe94906c95914840149afbb9944b719f.tar.bz2 rockbox-a3875d7dfe94906c95914840149afbb9944b719f.tar.xz | |
Rockbox Utility: fix proxy password getting lost (FS#12166).
The proxy settings are stored as string representation in the configuration
file. If username / password contains characters used as separators parsing the
string again will cause wrong results. Percent-encode them before storing, and
parse it as percent-encoded string when reading it back.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30071 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | rbutil/rbutilqt/configure.cpp | 13 | ||||
| -rw-r--r-- | rbutil/rbutilqt/rbutilqt.cpp | 8 |
2 files changed, 16 insertions, 5 deletions
diff --git a/rbutil/rbutilqt/configure.cpp b/rbutil/rbutilqt/configure.cpp index 50af453..35654f8 100644 --- a/rbutil/rbutilqt/configure.cpp +++ b/rbutil/rbutilqt/configure.cpp @@ -121,7 +121,16 @@ void Config::accept() proxy.setPort(ui.proxyPort->text().toInt()); } - RbSettings::setValue(RbSettings::Proxy, proxy.toString()); + // QUrl::toEncoded() doesn't encode a colon in the password correctly, + // which will result in errors during parsing the string. + // QUrl::toPercentEncoding() does work as expected, so build the string to + // store in the configuration file manually. + QString proxystring = "http://" + + QString(QUrl::toPercentEncoding(proxy.userName())) + ":" + + QString(QUrl::toPercentEncoding(proxy.password())) + "@" + + proxy.host() + ":" + + QString::number(proxy.port()); + RbSettings::setValue(RbSettings::Proxy, proxystring); qDebug() << "[Config] setting proxy to:" << proxy; // proxy type QString proxyType; @@ -218,7 +227,7 @@ void Config::abort() void Config::setUserSettings() { // set proxy - proxy = RbSettings::value(RbSettings::Proxy).toString(); + proxy.setEncodedUrl(RbSettings::value(RbSettings::Proxy).toByteArray()); if(proxy.port() > 0) ui.proxyPort->setText(QString("%1").arg(proxy.port())); diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp index 59ba9e3..835fb0d 100644 --- a/rbutil/rbutilqt/rbutilqt.cpp +++ b/rbutil/rbutilqt/rbutilqt.cpp @@ -1240,11 +1240,13 @@ void RbUtilQt::updateInfo() QUrl RbUtilQt::proxy() { + QUrl proxy; if(RbSettings::value(RbSettings::ProxyType) == "manual") - return QUrl(RbSettings::value(RbSettings::Proxy).toString()); + proxy.setEncodedUrl(RbSettings::value(RbSettings::Proxy).toByteArray()); else if(RbSettings::value(RbSettings::ProxyType) == "system") - return System::systemProxy(); - return QUrl(""); + proxy = System::systemProxy(); + qDebug() << proxy.userName() << proxy.password() << proxy.host() << proxy.port(); + return proxy; } |