Compare commits

...

2 Commits

Author SHA1 Message Date
duffyduck 48ff7a68ab Rebuild kf5 plugin with ACL fixes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:07:45 +02:00
duffyduck c1694bdfa9 Fix ACL handling: prevent spurious overwrites and strip domain prefixes
Two fixes in loadCurrentShare() / constructor:

1. Reset dirty flag after initial load so opening the Properties dialog
   (or triggering applyChanges from another plugin in the same dialog,
   e.g. a sibling FTP share tab) doesn't rewrite the share with stale
   combo values.

2. Strip Samba domain/authority prefixes like "DOMAIN\user" or
   "Unix User\user" when parsing usershare_acl, so the username
   comparison against /etc/passwd users succeeds and the combo boxes
   reflect the actual saved permissions.

Applied identically to kf5 and kf6 variants.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:06:28 +02:00
7 changed files with 3276 additions and 88 deletions
-80
View File
@@ -175,100 +175,27 @@ set(CMAKE_MAKEFILE_DEPENDS
"/usr/share/ECM/modules/ECMUseFindModules.cmake"
"/usr/share/ECM/modules/QtVersionOption.cmake"
"/usr/share/ECM/modules/ecm_uninstall.cmake.in"
"/usr/share/cmake-3.25/Modules/CMakeCCompiler.cmake.in"
"/usr/share/cmake-3.25/Modules/CMakeCCompilerABI.c"
"/usr/share/cmake-3.25/Modules/CMakeCInformation.cmake"
"/usr/share/cmake-3.25/Modules/CMakeCXXCompiler.cmake.in"
"/usr/share/cmake-3.25/Modules/CMakeCXXCompilerABI.cpp"
"/usr/share/cmake-3.25/Modules/CMakeCXXInformation.cmake"
"/usr/share/cmake-3.25/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake"
"/usr/share/cmake-3.25/Modules/CMakeCommonLanguageInclude.cmake"
"/usr/share/cmake-3.25/Modules/CMakeCompilerIdDetection.cmake"
"/usr/share/cmake-3.25/Modules/CMakeDetermineCCompiler.cmake"
"/usr/share/cmake-3.25/Modules/CMakeDetermineCXXCompiler.cmake"
"/usr/share/cmake-3.25/Modules/CMakeDetermineCompileFeatures.cmake"
"/usr/share/cmake-3.25/Modules/CMakeDetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/CMakeDetermineCompilerABI.cmake"
"/usr/share/cmake-3.25/Modules/CMakeDetermineCompilerId.cmake"
"/usr/share/cmake-3.25/Modules/CMakeDetermineSystem.cmake"
"/usr/share/cmake-3.25/Modules/CMakeFindBinUtils.cmake"
"/usr/share/cmake-3.25/Modules/CMakeFindDependencyMacro.cmake"
"/usr/share/cmake-3.25/Modules/CMakeGenericSystem.cmake"
"/usr/share/cmake-3.25/Modules/CMakeInitializeConfigs.cmake"
"/usr/share/cmake-3.25/Modules/CMakeLanguageInformation.cmake"
"/usr/share/cmake-3.25/Modules/CMakeParseArguments.cmake"
"/usr/share/cmake-3.25/Modules/CMakeParseImplicitIncludeInfo.cmake"
"/usr/share/cmake-3.25/Modules/CMakeParseImplicitLinkInfo.cmake"
"/usr/share/cmake-3.25/Modules/CMakeParseLibraryArchitecture.cmake"
"/usr/share/cmake-3.25/Modules/CMakeSystem.cmake.in"
"/usr/share/cmake-3.25/Modules/CMakeSystemSpecificInformation.cmake"
"/usr/share/cmake-3.25/Modules/CMakeSystemSpecificInitialize.cmake"
"/usr/share/cmake-3.25/Modules/CMakeTestCCompiler.cmake"
"/usr/share/cmake-3.25/Modules/CMakeTestCXXCompiler.cmake"
"/usr/share/cmake-3.25/Modules/CMakeTestCompilerCommon.cmake"
"/usr/share/cmake-3.25/Modules/CMakeUnixFindMake.cmake"
"/usr/share/cmake-3.25/Modules/CheckCXXCompilerFlag.cmake"
"/usr/share/cmake-3.25/Modules/CheckCXXSourceCompiles.cmake"
"/usr/share/cmake-3.25/Modules/CheckFunctionExists.cmake"
"/usr/share/cmake-3.25/Modules/CheckLanguage.cmake"
"/usr/share/cmake-3.25/Modules/CheckLibraryExists.cmake"
"/usr/share/cmake-3.25/Modules/CheckSymbolExists.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/ADSP-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/ARMClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Borland-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Bruce-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Clang-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Compaq-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Cray-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/GHS-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/GNU-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/GNU-C.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/GNU-CXX.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/GNU-FindBinUtils.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/GNU.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/HP-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/HP-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/IAR-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Intel-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/LCC-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/MSVC-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/NVHPC-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/NVIDIA-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/PGI-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/PathScale-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/SCO-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/SDCC-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/SunPro-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/TI-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Tasking-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/Watcom-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/XL-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/XL-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/XLClang-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/zOS-C-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake"
"/usr/share/cmake-3.25/Modules/FeatureSummary.cmake"
"/usr/share/cmake-3.25/Modules/FindGettext.cmake"
"/usr/share/cmake-3.25/Modules/FindPackageHandleStandardArgs.cmake"
@@ -277,9 +204,7 @@ set(CMAKE_MAKEFILE_DEPENDS
"/usr/share/cmake-3.25/Modules/Internal/CheckCompilerFlag.cmake"
"/usr/share/cmake-3.25/Modules/Internal/CheckFlagCommonConfig.cmake"
"/usr/share/cmake-3.25/Modules/Internal/CheckSourceCompiles.cmake"
"/usr/share/cmake-3.25/Modules/Internal/FeatureTesting.cmake"
"/usr/share/cmake-3.25/Modules/MacroAddFileDependencies.cmake"
"/usr/share/cmake-3.25/Modules/Platform/Linux-Determine-CXX.cmake"
"/usr/share/cmake-3.25/Modules/Platform/Linux-GNU-C.cmake"
"/usr/share/cmake-3.25/Modules/Platform/Linux-GNU-CXX.cmake"
"/usr/share/cmake-3.25/Modules/Platform/Linux-GNU.cmake"
@@ -295,11 +220,6 @@ set(CMAKE_MAKEFILE_OUTPUTS
# Byproducts of CMake generate step:
set(CMAKE_MAKEFILE_PRODUCTS
"CMakeFiles/3.25.1/CMakeSystem.cmake"
"CMakeFiles/3.25.1/CMakeCCompiler.cmake"
"CMakeFiles/3.25.1/CMakeCXXCompiler.cmake"
"CMakeFiles/3.25.1/CMakeCCompiler.cmake"
"CMakeFiles/3.25.1/CMakeCXXCompiler.cmake"
"prefix.sh"
"ecm_uninstall.cmake"
"CMakeFiles/CMakeDirectoryInformation.cmake"
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+15 -3
View File
@@ -150,8 +150,14 @@ SmbSharePlugin::SmbSharePlugin(QObject *parent, const QVariantList &args)
// Load existing share info
loadCurrentShare();
// Initial UI state
onShareToggled(m_shareCheckBox->isChecked());
// Initial UI state — apply enabled/disabled without marking dirty
m_nameEdit->setEnabled(m_shareCheckBox->isChecked());
m_guestCheckBox->setEnabled(m_shareCheckBox->isChecked());
m_usersWidget->setEnabled(m_shareCheckBox->isChecked());
// Reset dirty after all initial setup so opening the dialog doesn't
// trigger applyChanges() on this or other plugins.
setDirty(false);
// Add the page as a tab
properties->addPage(m_page, i18n("Share"));
@@ -228,9 +234,15 @@ void SmbSharePlugin::loadCurrentShare()
const int colonPos = entry.lastIndexOf(QLatin1Char(':'));
if (colonPos < 0)
continue;
const QString name = entry.left(colonPos);
QString name = entry.left(colonPos);
const QString perm = entry.mid(colonPos + 1);
// Strip Samba domain/authority prefix, e.g. "DEBIANTERMINAL\duffy"
// or "Unix User\filiz" -> "duffy" / "filiz".
const int backslashPos = name.lastIndexOf(QLatin1Char('\\'));
if (backslashPos >= 0)
name = name.mid(backslashPos + 1);
for (auto &up : m_userPerms) {
if (up.username.compare(name, Qt::CaseInsensitive) == 0) {
up.combo->setCurrentIndex(indexForAcl(perm));
+15 -3
View File
@@ -150,8 +150,14 @@ SmbSharePlugin::SmbSharePlugin(QObject *parent, const QVariantList &args)
// Load existing share info
loadCurrentShare();
// Initial UI state
onShareToggled(m_shareCheckBox->isChecked());
// Initial UI state — apply enabled/disabled without marking dirty
m_nameEdit->setEnabled(m_shareCheckBox->isChecked());
m_guestCheckBox->setEnabled(m_shareCheckBox->isChecked());
m_usersWidget->setEnabled(m_shareCheckBox->isChecked());
// Reset dirty after all initial setup so opening the dialog doesn't
// trigger applyChanges() on this or other plugins.
setDirty(false);
// Add the page as a tab
properties->addPage(m_page, i18n("Share"));
@@ -228,9 +234,15 @@ void SmbSharePlugin::loadCurrentShare()
const int colonPos = entry.lastIndexOf(QLatin1Char(':'));
if (colonPos < 0)
continue;
const QString name = entry.left(colonPos);
QString name = entry.left(colonPos);
const QString perm = entry.mid(colonPos + 1);
// Strip Samba domain/authority prefix, e.g. "DEBIANTERMINAL\duffy"
// or "Unix User\filiz" -> "duffy" / "filiz".
const int backslashPos = name.lastIndexOf(QLatin1Char('\\'));
if (backslashPos >= 0)
name = name.mid(backslashPos + 1);
for (auto &up : m_userPerms) {
if (up.username.compare(name, Qt::CaseInsensitive) == 0) {
up.combo->setCurrentIndex(indexForAcl(perm));