mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-20 04:25:42 +08:00
refs #782 Check permissions in CAtomicFile::open to get earlier indication of any problems.
This commit is contained in:
committed by
Klaus Basan
parent
49f2d5566c
commit
d9d16dc8e0
@@ -23,13 +23,38 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//! \var qt_ntfs_permission_lookup
|
||||||
|
//! \see QFileDevice::Permissions
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
|
||||||
|
#else
|
||||||
|
int qt_ntfs_permission_lookup = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace BlackMisc
|
namespace BlackMisc
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//! \private
|
||||||
|
bool checkPermissions(CAtomicFile::OpenMode mode, const QFileInfo &fileInfo)
|
||||||
|
{
|
||||||
|
bool ok = true;
|
||||||
|
qt_ntfs_permission_lookup++;
|
||||||
|
if ((mode & CAtomicFile::ReadOnly) && ! fileInfo.isReadable()) { ok = false; }
|
||||||
|
if ((mode & CAtomicFile::WriteOnly) && ! fileInfo.isWritable()) { ok = false; }
|
||||||
|
qt_ntfs_permission_lookup--;
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
bool CAtomicFile::open(CAtomicFile::OpenMode mode)
|
bool CAtomicFile::open(CAtomicFile::OpenMode mode)
|
||||||
{
|
{
|
||||||
m_originalFilename = fileName();
|
m_originalFilename = fileName();
|
||||||
QFileInfo fileInfo(fileName());
|
QFileInfo fileInfo(fileName());
|
||||||
|
if (exists() && ! checkPermissions(mode, fileInfo))
|
||||||
|
{
|
||||||
|
m_permissionError = true;
|
||||||
|
setErrorString("Wrong permissions");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
setFileName(QFileInfo(fileInfo.dir(), ".tmp." + fileInfo.fileName() + "." + randomSuffix()).filePath());
|
setFileName(QFileInfo(fileInfo.dir(), ".tmp." + fileInfo.fileName() + "." + randomSuffix()).filePath());
|
||||||
if (exists()) { remove(); }
|
if (exists()) { remove(); }
|
||||||
|
|
||||||
@@ -72,12 +97,14 @@ namespace BlackMisc
|
|||||||
CAtomicFile::FileError CAtomicFile::error() const
|
CAtomicFile::FileError CAtomicFile::error() const
|
||||||
{
|
{
|
||||||
if (m_renameError) { return RenameError; }
|
if (m_renameError) { return RenameError; }
|
||||||
|
if (m_permissionError) { return PermissionsError; }
|
||||||
return QFile::error();
|
return QFile::error();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAtomicFile::unsetError()
|
void CAtomicFile::unsetError()
|
||||||
{
|
{
|
||||||
m_renameError = false;
|
m_renameError = false;
|
||||||
|
m_permissionError = false;
|
||||||
QFile::unsetError();
|
QFile::unsetError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
QString m_originalFilename;
|
QString m_originalFilename;
|
||||||
bool m_renameError = false;
|
bool m_renameError = false;
|
||||||
|
bool m_permissionError = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user