Skip to content
Permalink
Browse files

Merge pull request #7819 from spycrab/keep_permissions

MacUpdater: Retain file permissions
  • Loading branch information...
spycrab committed Feb 25, 2019
2 parents 83ff3aa + 96786d0 commit 1ba4fd875f0b4e3f37ea4ebb6d91862a3be1f26d
Showing with 18 additions and 0 deletions.
  1. +18 −0 Source/Core/MacUpdater/AppDelegate.mm
@@ -22,6 +22,9 @@
#include <vector>
#include <zlib.h>

#include <sys/stat.h>
#include <sys/types.h>

#include "Common/CommonPaths.h"
#include "Common/CommonTypes.h"
#include "Common/FileUtil.h"
@@ -558,6 +561,10 @@ bool UpdateFiles(const std::vector<TodoList::UpdateOp>& to_update,
return false;
}

// TODO: A new updater protocol version is required to properly mark executable files. For
// now, copy executable bits from existing files. This will break for newly added executables.
mode_t permission;

if (File::Exists(path))
{
std::string contents;
@@ -574,6 +581,13 @@ bool UpdateFiles(const std::vector<TodoList::UpdateOp>& to_update,
}
else if (!op.old_hash || contents_hash != *op.old_hash)
{
struct stat file_stats;

if (stat(path.c_str(), &file_stats) != 0)
return false;

permission = file_stats.st_mode;

if (!BackupFile(path))
return false;
}
@@ -586,8 +600,12 @@ bool UpdateFiles(const std::vector<TodoList::UpdateOp>& to_update,
if (!File::Copy(temp_path + DIR_SEP + content_filename, path))
{
fprintf(log_fp, "Could not update file %s.\n", op.filename.c_str());

return false;
}

if (chmod(path.c_str(), permission) != 0)
return false;
}
return true;
}

0 comments on commit 1ba4fd8

Please sign in to comment.
You can’t perform that action at this time.