1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Dominik Riebeling 2011-06-25 17:21:06 +00:00
parent dfd4183a7d
commit a3875d7dfe
2 changed files with 16 additions and 5 deletions

View file

@ -121,7 +121,16 @@ void Config::accept()
proxy.setPort(ui.proxyPort->text().toInt()); 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; qDebug() << "[Config] setting proxy to:" << proxy;
// proxy type // proxy type
QString proxyType; QString proxyType;
@ -218,7 +227,7 @@ void Config::abort()
void Config::setUserSettings() void Config::setUserSettings()
{ {
// set proxy // set proxy
proxy = RbSettings::value(RbSettings::Proxy).toString(); proxy.setEncodedUrl(RbSettings::value(RbSettings::Proxy).toByteArray());
if(proxy.port() > 0) if(proxy.port() > 0)
ui.proxyPort->setText(QString("%1").arg(proxy.port())); ui.proxyPort->setText(QString("%1").arg(proxy.port()));

View file

@ -1240,11 +1240,13 @@ void RbUtilQt::updateInfo()
QUrl RbUtilQt::proxy() QUrl RbUtilQt::proxy()
{ {
QUrl proxy;
if(RbSettings::value(RbSettings::ProxyType) == "manual") 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") else if(RbSettings::value(RbSettings::ProxyType) == "system")
return System::systemProxy(); proxy = System::systemProxy();
return QUrl(""); qDebug() << proxy.userName() << proxy.password() << proxy.host() << proxy.port();
return proxy;
} }