File indexing completed on 2024-04-21 05:01:38
0001 /* 0002 These are the private helper classes of the Smb4KGlobal namespace. 0003 0004 SPDX-FileCopyrightText: 2007-2024 Alexander Reinholdt <alexander.reinholdt@kdemail.net> 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 // application specific includes 0009 #include "smb4kglobal_p.h" 0010 #include "smb4knotification.h" 0011 #include "smb4ksettings.h" 0012 0013 // Samba includes 0014 #include <libsmbclient.h> 0015 0016 // Qt includes 0017 #include <QAbstractSocket> 0018 #include <QCoreApplication> 0019 #include <QDir> 0020 #include <QDirIterator> 0021 #include <QFile> 0022 #include <QHostAddress> 0023 #include <QHostInfo> 0024 0025 Smb4KGlobalPrivate::Smb4KGlobalPrivate() 0026 { 0027 onlyForeignShares = false; 0028 0029 #ifdef Q_OS_LINUX 0030 // 0031 // 2023-01-08: Updated to mount.cifs, version 7.0 0032 // 0033 // The options 'credentials', 'domainauto', 'intr', 'nointr' 0034 // and 'snapshot' were not included for various reasons. 0035 // 0036 allowedMountArguments << QStringLiteral("idsfromsid"); 0037 allowedMountArguments << QStringLiteral("dynperm"); 0038 allowedMountArguments << QStringLiteral("nostrictsync"); 0039 allowedMountArguments << QStringLiteral("handlecache"); 0040 allowedMountArguments << QStringLiteral("nohandlecache"); 0041 allowedMountArguments << QStringLiteral("handletimeout"); 0042 allowedMountArguments << QStringLiteral("rwpidforward"); 0043 allowedMountArguments << QStringLiteral("mapposix"); 0044 allowedMountArguments << QStringLiteral("hard"); 0045 allowedMountArguments << QStringLiteral("soft"); 0046 allowedMountArguments << QStringLiteral("noacl"); 0047 allowedMountArguments << QStringLiteral("cifsacl"); 0048 allowedMountArguments << QStringLiteral("backupuid"); 0049 allowedMountArguments << QStringLiteral("backupgid"); 0050 allowedMountArguments << QStringLiteral("ignorecase"); 0051 allowedMountArguments << QStringLiteral("nocase"); 0052 allowedMountArguments << QStringLiteral("seal"); 0053 allowedMountArguments << QStringLiteral("rdma"); 0054 allowedMountArguments << QStringLiteral("resilienthandles"); 0055 allowedMountArguments << QStringLiteral("noresilienthandles"); 0056 allowedMountArguments << QStringLiteral("persistenthandles"); 0057 allowedMountArguments << QStringLiteral("nopersistenthandles"); 0058 allowedMountArguments << QStringLiteral("forcemandatorylock"); 0059 allowedMountArguments << QStringLiteral("locallease"); 0060 allowedMountArguments << QStringLiteral("nolease"); 0061 allowedMountArguments << QStringLiteral("sfu"); 0062 allowedMountArguments << QStringLiteral("mfsymlinks"); 0063 allowedMountArguments << QStringLiteral("echo_interval"); 0064 allowedMountArguments << QStringLiteral("posix"); 0065 allowedMountArguments << QStringLiteral("unix"); 0066 allowedMountArguments << QStringLiteral("linux"); 0067 allowedMountArguments << QStringLiteral("noposix"); 0068 allowedMountArguments << QStringLiteral("nounix"); 0069 allowedMountArguments << QStringLiteral("nolinux"); 0070 allowedMountArguments << QStringLiteral("nouser_xattr"); 0071 allowedMountArguments << QStringLiteral("nodfs"); 0072 allowedMountArguments << QStringLiteral("noautotune"); 0073 allowedMountArguments << QStringLiteral("nosharesock"); 0074 allowedMountArguments << QStringLiteral("noblocksend"); 0075 allowedMountArguments << QStringLiteral("rsize"); 0076 allowedMountArguments << QStringLiteral("wsize"); 0077 allowedMountArguments << QStringLiteral("bsize"); 0078 allowedMountArguments << QStringLiteral("max_credits"); 0079 allowedMountArguments << QStringLiteral("fsc"); 0080 allowedMountArguments << QStringLiteral("multiuser"); 0081 allowedMountArguments << QStringLiteral("actimeo"); 0082 allowedMountArguments << QStringLiteral("noposixpaths"); 0083 allowedMountArguments << QStringLiteral("posixpaths"); 0084 #endif 0085 0086 // 0087 // Create and init the SMB context and read the NetBIOS and 0088 // workgroup name of this machine. 0089 // 0090 SMBCCTX *smbContext = smbc_new_context(); 0091 0092 if (smbContext) { 0093 smbContext = smbc_init_context(smbContext); 0094 0095 if (!smbContext) { 0096 smbc_free_context(smbContext, 1); 0097 } else { 0098 machineNetbiosName = QString::fromUtf8(smbc_getNetbiosName(smbContext), -1).toUpper(); 0099 machineWorkgroupName = QString::fromUtf8(smbc_getWorkgroup(smbContext), -1).toUpper(); 0100 } 0101 } 0102 0103 // 0104 // Free the SMB context 0105 // 0106 smbc_free_context(smbContext, 1); 0107 0108 // 0109 // Connections 0110 // 0111 connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), SLOT(slotAboutToQuit())); 0112 } 0113 0114 Smb4KGlobalPrivate::~Smb4KGlobalPrivate() 0115 { 0116 // 0117 // Clear the workgroup list 0118 // 0119 while (!workgroupsList.isEmpty()) { 0120 workgroupsList.takeFirst().clear(); 0121 } 0122 0123 // 0124 // Clear the host list 0125 // 0126 while (!hostsList.isEmpty()) { 0127 hostsList.takeFirst().clear(); 0128 } 0129 0130 // 0131 // Clear the list of mounted shares 0132 // 0133 while (!mountedSharesList.isEmpty()) { 0134 mountedSharesList.takeFirst().clear(); 0135 } 0136 0137 // 0138 // Clear the list of shares 0139 // 0140 while (!sharesList.isEmpty()) { 0141 sharesList.takeFirst().clear(); 0142 } 0143 } 0144 0145 void Smb4KGlobalPrivate::slotAboutToQuit() 0146 { 0147 Smb4KSettings::self()->save(); 0148 }