diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2019-07-24 16:45:39 +0300 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2019-08-30 07:22:30 +0000 |
commit | c410e4250266a04e7897ecd0c98c49f040f67205 (patch) | |
tree | 81a3ebf3ec4cab211d03fd107a33110c318b88bf /src/libs/installer/fileutils.cpp | |
parent | 8f7af86198935849c74c71add7c9ca081347fb85 (diff) |
Refactor setting and checking of file permissions
Create methods to explicitly set default file permissions on Unix
platforms, use these on installer created files and installation
target directory. Add unit test for introduced functions.
Remove method introduced in 46aecc23b2983c807ff2232ae9cb9651b4d2fdc2
as the same effect is achieved more efficiently by ensuring target
directory will be written with explicit permissions on initial
installation. Unlike the removed method, this will also not break if
an installed component contains owner non-writable directories.
Further simplify PackageManagerCore::directoryWritable() introduced
in 89f772f819178ee2502768c3d259d22ecb910fbe. Remove orphan unit
test for removed PackageManagerCore::subdirectoriesWritable().
This does not change permissions of files and directories extracted
for installed components.
Task-number: QTIFW-1412
Change-Id: I59698c78aceef874b1f79482bff5a618b9a1b536
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index 18c5f90fd..b000247e6 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -293,6 +293,43 @@ void QInstaller::removeSystemGeneratedFiles(const QString &path) #endif } +/*! + Sets permissions of file or directory specified by \a fileName to \c 644 or \c 755 + based by the value of \a permissions. +*/ +bool QInstaller::setDefaultFilePermissions(const QString &fileName, DefaultFilePermissions permissions) +{ + QFile file(fileName); + return setDefaultFilePermissions(&file, permissions); +} + +/*! + Sets permissions of file or directory specified by \a file to \c 644 or \c 755 + based by the value of \a permissions. This is effective only on Unix platforms + as \c setPermissions() does not manipulate ACLs. On Windows this does nothing + and always returns \c true. +*/ +bool QInstaller::setDefaultFilePermissions(QFile *file, DefaultFilePermissions permissions) +{ +#ifdef Q_OS_UNIX + if (!file->exists()) { + qWarning() << "Target" << file->fileName() << "does not exists."; + return false; + } + if (file->permissions() == static_cast<QFileDevice::Permission>(permissions)) + return true; + + if (!file->setPermissions(static_cast<QFileDevice::Permission>(permissions))) { + qWarning() << "Cannot set default permissions for target" + << file->fileName() << ":" << file->errorString(); + return false; + } + return true; +#else + return true; +#endif +} + void QInstaller::copyDirectoryContents(const QString &sourceDir, const QString &targetDir) { Q_ASSERT(QFileInfo(sourceDir).isDir()); |