summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/configure.cpp
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2013-03-19 22:20:23 +0100
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2013-03-19 22:47:50 +0100
commitaa898d65fef0a8695e8412480146d1b6048771f2 (patch)
tree4839177614e34ff5b64dc5c0a2e3f17c897ce6e5 /rbutil/rbutilqt/configure.cpp
parent9965849765bb113801d2d4c93e07fc259d307f3e (diff)
downloadrockbox-aa898d65fef0a8695e8412480146d1b6048771f2.tar.gz
rockbox-aa898d65fef0a8695e8412480146d1b6048771f2.zip
Encode the password using base64 before storing it to the configuration file.
There are two reasons for this: - QUrl::toEncoded() has problems with some characters like the colon and @. Those are not percent encoded, causing the string getting parsed wrongly when reading it back (see FS#12166). - The password is cleartext in the configuration file. While using base64 doesn't provide any real security either it's at least better than plaintext. Since this program is open source any fixed mechanism to obfuscate / encrypt the password isn't much help either since anyone interested in the password can look at the sources. The best way would be to eventually use host OS functionality to store the password. Change-Id: I6ac49d68211236e540b6ca16481e0e1c196532b7
Diffstat (limited to 'rbutil/rbutilqt/configure.cpp')
-rw-r--r--rbutil/rbutilqt/configure.cpp34
1 files changed, 22 insertions, 12 deletions
diff --git a/rbutil/rbutilqt/configure.cpp b/rbutil/rbutilqt/configure.cpp
index 3175ba4430..0867673593 100644
--- a/rbutil/rbutilqt/configure.cpp
+++ b/rbutil/rbutilqt/configure.cpp
@@ -135,17 +135,23 @@ void Config::accept()
135 proxy.setPort(ui.proxyPort->text().toInt()); 135 proxy.setPort(ui.proxyPort->text().toInt());
136 } 136 }
137 137
138 // QUrl::toEncoded() doesn't encode a colon in the password correctly, 138 // Encode the password using base64 before storing it to the configuration
139 // which will result in errors during parsing the string. 139 // file.
140 // QUrl::toPercentEncoding() does work as expected, so build the string to 140 // There are two reasons for doing this:
141 // store in the configuration file manually. 141 // - QUrl::toEncoded() has problems with some characters like the colon and
142 QString proxystring = "http://" 142 // @. Those are not percent encoded, causing the string getting parsed
143 + QString(QUrl::toPercentEncoding(proxy.userName())) + ":" 143 // wrongly when reading it back (see FS#12166).
144 + QString(QUrl::toPercentEncoding(proxy.password())) + "@" 144 // - The password is cleartext in the configuration file.
145 + proxy.host() + ":" 145 // While using base64 doesn't provide any real security either it's at
146 + QString::number(proxy.port()); 146 // least better than plaintext.
147 RbSettings::setValue(RbSettings::Proxy, proxystring); 147 // Since this program is open source any fixed mechanism to obfuscate /
148 qDebug() << "[Config] setting proxy to:" << proxy; 148 // encrypt the password isn't much help either since anyone interested in
149 // the password can look at the sources. The best way would be to
150 // eventually use host OS functionality to store the password.
151 QUrl p = proxy;
152 p.setPassword(proxy.password().toUtf8().toBase64());
153 RbSettings::setValue(RbSettings::Proxy, p.toString());
154 qDebug() << "[Config] setting proxy to:" << proxy.toString(QUrl::RemovePassword);
149 // proxy type 155 // proxy type
150 QString proxyType; 156 QString proxyType;
151 if(ui.radioNoProxy->isChecked()) proxyType = "none"; 157 if(ui.radioNoProxy->isChecked()) proxyType = "none";
@@ -239,7 +245,11 @@ void Config::abort()
239void Config::setUserSettings() 245void Config::setUserSettings()
240{ 246{
241 // set proxy 247 // set proxy
242 proxy.setEncodedUrl(RbSettings::value(RbSettings::Proxy).toByteArray()); 248 proxy.setUrl(RbSettings::value(RbSettings::Proxy).toString(),
249 QUrl::StrictMode);
250 // password is base64 encoded in configuration.
251 QByteArray pw = QByteArray::fromBase64(proxy.password().toUtf8());
252 proxy.setPassword(pw);
243 253
244 if(proxy.port() > 0) 254 if(proxy.port() > 0)
245 ui.proxyPort->setText(QString("%1").arg(proxy.port())); 255 ui.proxyPort->setText(QString("%1").arg(proxy.port()));