Skip to content

Commit 80768f3

Browse files
committed
imagewriter: Force permissions on settings to 600
Use this mechanism to replace an older scheme that fully read and then fully wrote the file. Resolves raspberrypi#770
1 parent b918a7e commit 80768f3

File tree

1 file changed

+7
-22
lines changed

1 file changed

+7
-22
lines changed

src/imagewriter.cpp

+7-22
Original file line numberDiff line numberDiff line change
@@ -103,30 +103,15 @@ ImageWriter::ImageWriter(QObject *parent)
103103
#ifdef Q_OS_WIN
104104
_taskbarButton = nullptr;
105105
#endif
106-
107-
if (!_settings.isWritable() && !_settings.fileName().isEmpty())
108106
{
109-
/* Settings file is not writable, probably run by root previously */
110-
QString settingsFile = _settings.fileName();
111-
qDebug() << "Settings file" << settingsFile << "not writable. Recreating it";
112-
QFile f(_settings.fileName());
113-
QByteArray oldsettings;
107+
const auto expectedPermissions = (QFileDevice::WriteOwner | QFileDevice::ReadOwner);
108+
auto settingsFile = QFile(_settings.fileName());
114109

115-
if (f.open(f.ReadOnly))
116-
{
117-
oldsettings = f.readAll();
118-
f.close();
119-
}
120-
f.remove();
121-
if (f.open(f.WriteOnly))
122-
{
123-
f.write(oldsettings);
124-
f.close();
125-
_settings.sync();
126-
}
127-
else
128-
{
129-
qDebug() << "Error deleting and recreating settings file. Please remove manually.";
110+
if (settingsFile.exists() && settingsFile.permissions() != expectedPermissions) {
111+
if (!settingsFile.setPermissions(expectedPermissions)) {
112+
qDebug() << "Failed to set expected permissions for settings file. Errant behaviour may follow, including settings failing to persist";
113+
qDebug() << "To prevent future messages of this form, please delete " << _settings.fileName();
114+
}
130115
}
131116
}
132117

0 commit comments

Comments
 (0)