diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-25 16:04:04 +0200 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-01-31 14:07:03 +0000 |
commit | 0126b55180c6aae94f17e0fcb05549ba031f93dc (patch) | |
tree | 9454a154dbf14f1098db6eaa517f27b05dc9d9e5 /src/libs/installer/lib7z_facade.cpp | |
parent | c23540ea462c5b91f0e41fc8c10e8b7d9a0610bf (diff) |
Gain admin rights when user is missing privilege to create symlinks
On Windows, the non-admin users cannot create symbolic links by default.
Extracting archives containing symlinks would fail if the installer was
no started as administrator. Catch the case and auto-elevate installer
to extract such archives.
Do not elevate installer if the current user has the privilege for
symlink creation, or if the Developer mode is enabled, allowing
unprivileged creation of symlinks.
Task-number: QTIFW-2428
Change-Id: I0b6b1079daabb9727055dce8a9475c203d7e92b0
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/lib7z_facade.cpp')
-rw-r--r-- | src/libs/installer/lib7z_facade.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libs/installer/lib7z_facade.cpp b/src/libs/installer/lib7z_facade.cpp index 6d1b6a57d..fc8c6c334 100644 --- a/src/libs/installer/lib7z_facade.cpp +++ b/src/libs/installer/lib7z_facade.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -538,6 +538,7 @@ QVector<File> listArchive(QFileDevice *archive) f.archiveIndex.setY(item); f.path = UString2QString(s).replace(QLatin1Char('\\'), QLatin1Char('/')); Archive_IsItem_Folder(arch, item, f.isDirectory); + Archive_GetItemBoolProp(arch, item, kpidSymLink, f.isSymbolicLink); f.permissions_enum = getPermissions(arch, item, nullptr); getDateTimeProperty(arch, item, kpidMTime, &(f.utcTime)); f.uncompressedSize = getUInt64Property(arch, item, kpidSize, 0); |