Set permissions for the updater binary after updating it.

This commit is contained in:
Petr Mrázek 2013-12-28 22:32:45 +01:00
parent 595e4b697e
commit c816a26647
2 changed files with 12 additions and 1 deletions

View File

@ -528,7 +528,12 @@ void MultiMC::installUpdates(const QString &updateFilesDir, bool restartOnFinish
QLOG_INFO() << "Running updater with command" << updaterBinary << args.join(" ");
QProcess::startDetached(updaterBinary, args);
QFile::setPermissions(updaterBinary, (QFileDevice::Permission) 0755);
if(!QProcess::startDetached(updaterBinary, args))
{
QLOG_ERROR() << "Failed to start the updater process!";
return;
}
// Now that we've started the updater, quit MultiMC.
MMC->quit();

View File

@ -412,6 +412,7 @@ DownloadUpdateTask::processFileLists(NetJob *job,
if (isUpdater)
{
download->setProperty("finalPath", entry.path);
download->setProperty("finalPerms", entry.mode);
connect(download.get(), &MD5EtagDownload::succeeded, this, &DownloadUpdateTask::directDeployFile);
}
}
@ -549,11 +550,16 @@ void DownloadUpdateTask::directDeployFile(const int index)
{
Md5EtagDownloadPtr download = std::dynamic_pointer_cast<MD5EtagDownload>(m_filesNetJob->operator[](index));
const QString finalPath = download->property("finalPath").toString();
bool ok = true;
int finalMode = download->property("finalPerms").toInt(&ok);
if(!ok)
finalMode = 0755;
QLOG_INFO() << "Replacing" << finalPath << "with" << download->m_output_file.fileName();
if (QFile::remove(finalPath))
{
if (download->m_output_file.copy(finalPath))
{
QFile::setPermissions(finalPath, (QFileDevice::Permission) finalMode);
return;
}
}