Warning, file /network/smb4k/core/smb4kcustomsettings.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 This class carries custom settings 0003 0004 SPDX-FileCopyrightText: 2011-2023 Alexander Reinholdt <alexander.reinholdt@kdemail.net> 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 // application specific includes 0009 #include "smb4kcustomsettings.h" 0010 #include "smb4khost.h" 0011 #include "smb4ksettings.h" 0012 #include "smb4kshare.h" 0013 0014 #if defined(Q_OS_LINUX) 0015 #include "smb4kmountsettings_linux.h" 0016 #elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) 0017 #include "smb4kmountsettings_bsd.h" 0018 #endif 0019 0020 // Qt includes 0021 #include <QDebug> 0022 #include <QHostAddress> 0023 #include <QRegularExpression> 0024 0025 // KDE includes 0026 #include <KLocalizedString> 0027 0028 class Smb4KCustomSettingsPrivate 0029 { 0030 public: 0031 QString workgroup; 0032 QUrl url; 0033 QHostAddress ip; 0034 NetworkItem type; 0035 int remount; 0036 bool useUser; 0037 KUser user; 0038 bool useGroup; 0039 KUserGroup group; 0040 bool useFileMode; 0041 QString fileMode; 0042 bool useDirectoryMode; 0043 QString directoryMode; 0044 #if defined(Q_OS_LINUX) 0045 bool cifsUnixExtensionsSupport; 0046 bool useFileSystemPort; 0047 int fileSystemPort; 0048 bool useMountProtocolVersion; 0049 int mountProtocolVersion; 0050 bool useSecurityMode; 0051 int securityMode; 0052 bool useWriteAccess; 0053 int writeAccess; 0054 #endif 0055 QString profile; 0056 bool useClientProtocolVersions; 0057 int minimalClientProtocolVersion; 0058 int maximalClientProtocolVersion; 0059 bool useSmbPort; 0060 int smbPort; 0061 bool useKerberos; 0062 QString macAddress; 0063 bool wakeOnLanBeforeFirstScan; 0064 bool wakeOnLanBeforeMount; 0065 }; 0066 0067 Smb4KCustomSettings::Smb4KCustomSettings(Smb4KBasicNetworkItem *networkItem) 0068 : d(new Smb4KCustomSettingsPrivate) 0069 { 0070 d->type = networkItem->type(); 0071 d->url = networkItem->url(); 0072 d->remount = UndefinedRemount; 0073 d->useFileMode = Smb4KMountSettings::useFileMode(); 0074 d->fileMode = Smb4KMountSettings::fileMode(); 0075 d->useDirectoryMode = Smb4KMountSettings::useDirectoryMode(); 0076 d->directoryMode = Smb4KMountSettings::directoryMode(); 0077 #if defined(Q_OS_LINUX) 0078 d->cifsUnixExtensionsSupport = Smb4KMountSettings::cifsUnixExtensionsSupport(); 0079 d->useMountProtocolVersion = Smb4KMountSettings::useSmbProtocolVersion(); 0080 d->mountProtocolVersion = Smb4KMountSettings::smbProtocolVersion(); 0081 d->useSecurityMode = Smb4KMountSettings::useSecurityMode(); 0082 d->securityMode = Smb4KMountSettings::securityMode(); 0083 d->useWriteAccess = Smb4KMountSettings::useWriteAccess(); 0084 d->writeAccess = Smb4KMountSettings::writeAccess(); 0085 #endif 0086 0087 switch (d->type) { 0088 case Host: { 0089 Smb4KHost *host = static_cast<Smb4KHost *>(networkItem); 0090 0091 if (host) { 0092 d->workgroup = host->workgroupName(); 0093 d->ip.setAddress(host->ipAddress()); 0094 d->useUser = Smb4KMountSettings::useUserId(); 0095 d->user = KUser((K_UID)Smb4KMountSettings::userId().toInt()); 0096 d->useGroup = Smb4KMountSettings::useGroupId(); 0097 d->group = KUserGroup((K_GID)Smb4KMountSettings::groupId().toInt()); 0098 d->useSmbPort = Smb4KSettings::useRemoteSmbPort(); 0099 d->smbPort = host->port() != -1 ? host->port() : Smb4KSettings::remoteSmbPort(); 0100 #if defined(Q_OS_LINUX) 0101 d->useFileSystemPort = Smb4KMountSettings::useRemoteFileSystemPort(); 0102 d->fileSystemPort = Smb4KMountSettings::remoteFileSystemPort(); 0103 #endif 0104 } 0105 break; 0106 } 0107 case Share: { 0108 Smb4KShare *share = static_cast<Smb4KShare *>(networkItem); 0109 0110 if (share) { 0111 d->workgroup = share->workgroupName(); 0112 d->ip.setAddress(share->hostIpAddress()); 0113 d->useUser = Smb4KMountSettings::useUserId(); 0114 d->user = share->user(); 0115 d->useGroup = Smb4KMountSettings::useGroupId(); 0116 d->group = share->group(); 0117 d->useSmbPort = Smb4KSettings::useRemoteSmbPort(); 0118 d->smbPort = Smb4KSettings::remoteSmbPort(); 0119 #if defined(Q_OS_LINUX) 0120 d->useFileSystemPort = Smb4KMountSettings::useRemoteFileSystemPort(); 0121 d->fileSystemPort = share->port() != -1 ? share->port() : Smb4KMountSettings::remoteFileSystemPort(); 0122 #endif 0123 } 0124 break; 0125 } 0126 default: { 0127 break; 0128 } 0129 } 0130 0131 d->useClientProtocolVersions = Smb4KSettings::useClientProtocolVersions(); 0132 d->minimalClientProtocolVersion = Smb4KSettings::minimalClientProtocolVersion(); 0133 d->maximalClientProtocolVersion = Smb4KSettings::maximalClientProtocolVersion(); 0134 d->useKerberos = Smb4KSettings::useKerberos(); 0135 d->wakeOnLanBeforeFirstScan = false; 0136 d->wakeOnLanBeforeMount = false; 0137 } 0138 0139 Smb4KCustomSettings::Smb4KCustomSettings(const Smb4KCustomSettings &o) 0140 : d(new Smb4KCustomSettingsPrivate) 0141 { 0142 *d = *o.d; 0143 } 0144 0145 Smb4KCustomSettings::Smb4KCustomSettings() 0146 : d(new Smb4KCustomSettingsPrivate) 0147 { 0148 d->type = UnknownNetworkItem; 0149 d->remount = UndefinedRemount; 0150 d->useUser = Smb4KMountSettings::useUserId(); 0151 d->user = KUser((K_UID)Smb4KMountSettings::userId().toInt()); 0152 d->useGroup = Smb4KMountSettings::useGroupId(); 0153 d->group = KUserGroup((K_GID)Smb4KMountSettings::groupId().toInt()); 0154 d->useFileMode = Smb4KMountSettings::useFileMode(); 0155 d->fileMode = Smb4KMountSettings::fileMode(); 0156 d->useDirectoryMode = Smb4KMountSettings::useDirectoryMode(); 0157 d->directoryMode = Smb4KMountSettings::directoryMode(); 0158 #if defined(Q_OS_LINUX) 0159 d->cifsUnixExtensionsSupport = Smb4KMountSettings::cifsUnixExtensionsSupport(); 0160 d->useFileSystemPort = Smb4KMountSettings::useRemoteFileSystemPort(); 0161 d->fileSystemPort = Smb4KMountSettings::remoteFileSystemPort(); 0162 d->useMountProtocolVersion = Smb4KMountSettings::useSmbProtocolVersion(); 0163 d->mountProtocolVersion = Smb4KMountSettings::smbProtocolVersion(); 0164 d->useSecurityMode = Smb4KMountSettings::useSecurityMode(); 0165 d->securityMode = Smb4KMountSettings::securityMode(); 0166 d->useWriteAccess = Smb4KMountSettings::useWriteAccess(); 0167 d->writeAccess = Smb4KMountSettings::writeAccess(); 0168 #endif 0169 d->useClientProtocolVersions = Smb4KSettings::useClientProtocolVersions(); 0170 d->minimalClientProtocolVersion = Smb4KSettings::minimalClientProtocolVersion(); 0171 d->maximalClientProtocolVersion = Smb4KSettings::maximalClientProtocolVersion(); 0172 d->useSmbPort = Smb4KSettings::useRemoteSmbPort(); 0173 d->smbPort = Smb4KSettings::remoteSmbPort(); 0174 d->useKerberos = Smb4KSettings::useKerberos(); 0175 d->wakeOnLanBeforeFirstScan = false; 0176 d->wakeOnLanBeforeMount = false; 0177 } 0178 0179 Smb4KCustomSettings::~Smb4KCustomSettings() 0180 { 0181 } 0182 0183 void Smb4KCustomSettings::setNetworkItem(Smb4KBasicNetworkItem *networkItem) const 0184 { 0185 if (networkItem && d->type == UnknownNetworkItem) { 0186 d->type = networkItem->type(); 0187 d->url = networkItem->url(); 0188 0189 switch (d->type) { 0190 case Host: { 0191 Smb4KHost *host = static_cast<Smb4KHost *>(networkItem); 0192 0193 if (host) { 0194 d->workgroup = host->workgroupName(); 0195 d->smbPort = host->port() != -1 ? host->port() : d->smbPort; 0196 d->ip.setAddress(host->ipAddress()); 0197 } 0198 break; 0199 } 0200 case Share: { 0201 Smb4KShare *share = static_cast<Smb4KShare *>(networkItem); 0202 0203 if (share) { 0204 d->workgroup = share->workgroupName(); 0205 #if defined(Q_OS_LINUX) 0206 d->fileSystemPort = share->port() != -1 ? share->port() : d->fileSystemPort; 0207 #endif 0208 d->user = share->user(); 0209 d->group = share->group(); 0210 d->ip.setAddress(share->hostIpAddress()); 0211 } 0212 break; 0213 } 0214 default: { 0215 break; 0216 } 0217 } 0218 } 0219 } 0220 0221 Smb4KGlobal::NetworkItem Smb4KCustomSettings::type() const 0222 { 0223 return d->type; 0224 } 0225 0226 void Smb4KCustomSettings::setWorkgroupName(const QString &workgroup) const 0227 { 0228 d->workgroup = workgroup; 0229 } 0230 0231 QString Smb4KCustomSettings::workgroupName() const 0232 { 0233 return d->workgroup; 0234 } 0235 0236 void Smb4KCustomSettings::setUrl(const QUrl &url) const 0237 { 0238 d->url = url; 0239 } 0240 0241 QUrl Smb4KCustomSettings::url() const 0242 { 0243 return d->url; 0244 } 0245 0246 QString Smb4KCustomSettings::hostName() const 0247 { 0248 return d->url.host().toUpper(); 0249 } 0250 0251 QString Smb4KCustomSettings::shareName() const 0252 { 0253 if (d->url.path().startsWith(QStringLiteral("/"))) { 0254 return d->url.path().remove(0, 1); 0255 } 0256 0257 return d->url.path(); 0258 } 0259 0260 void Smb4KCustomSettings::setIpAddress(const QString &ip) const 0261 { 0262 d->ip.setAddress(ip); 0263 } 0264 0265 QString Smb4KCustomSettings::ipAddress() const 0266 { 0267 return d->ip.toString(); 0268 } 0269 0270 bool Smb4KCustomSettings::hasIpAddress() const 0271 { 0272 return !d->ip.isNull(); 0273 } 0274 0275 QString Smb4KCustomSettings::displayString() const 0276 { 0277 QString string; 0278 0279 switch (d->type) { 0280 case Host: { 0281 string = hostName(); 0282 break; 0283 } 0284 case Share: { 0285 string = i18n("%1 on %2", shareName(), hostName()); 0286 break; 0287 } 0288 default: { 0289 break; 0290 } 0291 } 0292 0293 return string; 0294 } 0295 0296 void Smb4KCustomSettings::setRemount(int remount) const 0297 { 0298 switch (d->type) { 0299 case Share: { 0300 if (d->remount != remount) { 0301 d->remount = remount; 0302 } 0303 break; 0304 } 0305 default: { 0306 d->remount = UndefinedRemount; 0307 break; 0308 } 0309 } 0310 } 0311 0312 int Smb4KCustomSettings::remount() const 0313 { 0314 return d->remount; 0315 } 0316 0317 void Smb4KCustomSettings::setUseUser(bool use) const 0318 { 0319 d->useUser = use; 0320 } 0321 0322 bool Smb4KCustomSettings::useUser() const 0323 { 0324 return d->useUser; 0325 } 0326 0327 void Smb4KCustomSettings::setUser(const KUser &user) const 0328 { 0329 d->user = user; 0330 } 0331 0332 KUser Smb4KCustomSettings::user() const 0333 { 0334 return d->user; 0335 } 0336 0337 void Smb4KCustomSettings::setUseGroup(bool use) const 0338 { 0339 d->useGroup = use; 0340 } 0341 0342 bool Smb4KCustomSettings::useGroup() const 0343 { 0344 return d->useGroup; 0345 } 0346 0347 void Smb4KCustomSettings::setGroup(const KUserGroup &group) const 0348 { 0349 d->group = group; 0350 } 0351 0352 KUserGroup Smb4KCustomSettings::group() const 0353 { 0354 return d->group; 0355 } 0356 0357 void Smb4KCustomSettings::setUseFileMode(bool use) const 0358 { 0359 d->useFileMode = use; 0360 } 0361 0362 bool Smb4KCustomSettings::useFileMode() const 0363 { 0364 return d->useFileMode; 0365 } 0366 0367 void Smb4KCustomSettings::setFileMode(const QString &mode) const 0368 { 0369 d->fileMode = mode; 0370 } 0371 0372 QString Smb4KCustomSettings::fileMode() const 0373 { 0374 return d->fileMode; 0375 } 0376 0377 void Smb4KCustomSettings::setUseDirectoryMode(bool use) const 0378 { 0379 d->useDirectoryMode = use; 0380 } 0381 0382 bool Smb4KCustomSettings::useDirectoryMode() const 0383 { 0384 return d->useDirectoryMode; 0385 } 0386 0387 void Smb4KCustomSettings::setDirectoryMode(const QString &mode) const 0388 { 0389 d->directoryMode = mode; 0390 } 0391 0392 QString Smb4KCustomSettings::directoryMode() const 0393 { 0394 return d->directoryMode; 0395 } 0396 0397 #if defined(Q_OS_LINUX) 0398 void Smb4KCustomSettings::setCifsUnixExtensionsSupport(bool support) const 0399 { 0400 d->cifsUnixExtensionsSupport = support; 0401 } 0402 0403 bool Smb4KCustomSettings::cifsUnixExtensionsSupport() const 0404 { 0405 return d->cifsUnixExtensionsSupport; 0406 } 0407 0408 void Smb4KCustomSettings::setUseFileSystemPort(bool use) const 0409 { 0410 d->useFileSystemPort = use; 0411 } 0412 0413 bool Smb4KCustomSettings::useFileSystemPort() const 0414 { 0415 return d->useFileSystemPort; 0416 } 0417 0418 void Smb4KCustomSettings::setFileSystemPort(int port) const 0419 { 0420 d->fileSystemPort = port; 0421 0422 switch (d->type) { 0423 case Share: { 0424 d->url.setPort(port); 0425 break; 0426 } 0427 default: { 0428 break; 0429 } 0430 } 0431 } 0432 0433 int Smb4KCustomSettings::fileSystemPort() const 0434 { 0435 return d->fileSystemPort; 0436 } 0437 0438 void Smb4KCustomSettings::setUseMountProtocolVersion(bool use) const 0439 { 0440 d->useMountProtocolVersion = use; 0441 } 0442 0443 bool Smb4KCustomSettings::useMountProtocolVersion() const 0444 { 0445 return d->useMountProtocolVersion; 0446 } 0447 0448 void Smb4KCustomSettings::setMountProtocolVersion(int version) const 0449 { 0450 d->mountProtocolVersion = version; 0451 } 0452 0453 int Smb4KCustomSettings::mountProtocolVersion() const 0454 { 0455 return d->mountProtocolVersion; 0456 } 0457 0458 void Smb4KCustomSettings::setUseSecurityMode(bool use) const 0459 { 0460 d->useSecurityMode = use; 0461 } 0462 0463 bool Smb4KCustomSettings::useSecurityMode() const 0464 { 0465 return d->useSecurityMode; 0466 } 0467 0468 void Smb4KCustomSettings::setSecurityMode(int mode) const 0469 { 0470 d->securityMode = mode; 0471 } 0472 0473 int Smb4KCustomSettings::securityMode() const 0474 { 0475 return d->securityMode; 0476 } 0477 0478 void Smb4KCustomSettings::setUseWriteAccess(bool use) const 0479 { 0480 d->useWriteAccess = use; 0481 } 0482 0483 bool Smb4KCustomSettings::useWriteAccess() const 0484 { 0485 return d->useWriteAccess; 0486 } 0487 0488 void Smb4KCustomSettings::setWriteAccess(int access) const 0489 { 0490 d->writeAccess = access; 0491 } 0492 0493 int Smb4KCustomSettings::writeAccess() const 0494 { 0495 return d->writeAccess; 0496 } 0497 #endif 0498 0499 void Smb4KCustomSettings::setProfile(const QString &profile) const 0500 { 0501 d->profile = profile; 0502 } 0503 0504 QString Smb4KCustomSettings::profile() const 0505 { 0506 return d->profile; 0507 } 0508 0509 void Smb4KCustomSettings::setUseClientProtocolVersions(bool use) const 0510 { 0511 d->useClientProtocolVersions = use; 0512 } 0513 0514 bool Smb4KCustomSettings::useClientProtocolVersions() const 0515 { 0516 return d->useClientProtocolVersions; 0517 } 0518 0519 void Smb4KCustomSettings::setMinimalClientProtocolVersion(int version) const 0520 { 0521 d->minimalClientProtocolVersion = version; 0522 } 0523 0524 int Smb4KCustomSettings::minimalClientProtocolVersion() const 0525 { 0526 return d->minimalClientProtocolVersion; 0527 } 0528 0529 void Smb4KCustomSettings::setMaximalClientProtocolVersion(int version) const 0530 { 0531 d->maximalClientProtocolVersion = version; 0532 } 0533 0534 int Smb4KCustomSettings::maximalClientProtocolVersion() const 0535 { 0536 return d->maximalClientProtocolVersion; 0537 } 0538 0539 void Smb4KCustomSettings::setUseSmbPort(bool use) const 0540 { 0541 d->useSmbPort = use; 0542 } 0543 0544 bool Smb4KCustomSettings::useSmbPort() const 0545 { 0546 return d->useSmbPort; 0547 } 0548 0549 void Smb4KCustomSettings::setSmbPort(int port) const 0550 { 0551 d->smbPort = port; 0552 0553 switch (d->type) { 0554 case Host: { 0555 d->url.setPort(port); 0556 break; 0557 } 0558 default: { 0559 break; 0560 } 0561 } 0562 } 0563 0564 int Smb4KCustomSettings::smbPort() const 0565 { 0566 return d->smbPort; 0567 } 0568 0569 void Smb4KCustomSettings::setUseKerberos(bool use) const 0570 { 0571 d->useKerberos = use; 0572 } 0573 0574 bool Smb4KCustomSettings::useKerberos() const 0575 { 0576 return d->useKerberos; 0577 } 0578 0579 void Smb4KCustomSettings::setMACAddress(const QString &macAddress) const 0580 { 0581 QRegularExpression expression(QStringLiteral("..\\:..\\:..\\:..\\:..\\:..")); 0582 0583 if (expression.match(macAddress).hasMatch() || macAddress.isEmpty()) { 0584 d->macAddress = macAddress; 0585 } 0586 } 0587 0588 QString Smb4KCustomSettings::macAddress() const 0589 { 0590 return d->macAddress; 0591 } 0592 0593 void Smb4KCustomSettings::setWakeOnLanSendBeforeNetworkScan(bool send) const 0594 { 0595 d->wakeOnLanBeforeFirstScan = send; 0596 } 0597 0598 bool Smb4KCustomSettings::wakeOnLanSendBeforeNetworkScan() const 0599 { 0600 return d->wakeOnLanBeforeFirstScan; 0601 } 0602 0603 void Smb4KCustomSettings::setWakeOnLanSendBeforeMount(bool send) const 0604 { 0605 d->wakeOnLanBeforeMount = send; 0606 } 0607 0608 bool Smb4KCustomSettings::wakeOnLanSendBeforeMount() const 0609 { 0610 return d->wakeOnLanBeforeMount; 0611 } 0612 0613 QMap<QString, QString> Smb4KCustomSettings::customSettings() const 0614 { 0615 QMap<QString, QString> entries; 0616 0617 // 0618 // Remounting 0619 // 0620 entries.insert(QStringLiteral("remount"), QString::number(d->remount)); 0621 0622 // 0623 // User 0624 // 0625 entries.insert(QStringLiteral("use_user"), QString::number(d->useUser)); 0626 entries.insert(QStringLiteral("uid"), d->user.userId().toString()); 0627 0628 // 0629 // Group 0630 // 0631 entries.insert(QStringLiteral("use_group"), QString::number(d->useGroup)); 0632 entries.insert(QStringLiteral("gid"), d->group.groupId().toString()); 0633 0634 // 0635 // File mode 0636 // 0637 entries.insert(QStringLiteral("use_file_mode"), QString::number(d->useFileMode)); 0638 entries.insert(QStringLiteral("file_mode"), d->fileMode); 0639 0640 // 0641 // Directory mode 0642 // 0643 entries.insert(QStringLiteral("use_directory_mode"), QString::number(d->useDirectoryMode)); 0644 entries.insert(QStringLiteral("directory_mode"), d->directoryMode); 0645 0646 #if defined(Q_OS_LINUX) 0647 // 0648 // Unix CIFS extensions supported 0649 // 0650 entries.insert(QStringLiteral("cifs_unix_extensions_support"), QString::number(d->cifsUnixExtensionsSupport)); 0651 0652 // 0653 // File system port 0654 // 0655 entries.insert(QStringLiteral("use_filesystem_port"), QString::number(d->useFileSystemPort)); 0656 entries.insert(QStringLiteral("filesystem_port"), QString::number(fileSystemPort())); 0657 0658 // 0659 // Mount protocol version 0660 // 0661 entries.insert(QStringLiteral("use_smb_mount_protocol_version"), QString::number(d->useMountProtocolVersion)); 0662 entries.insert(QStringLiteral("smb_mount_protocol_version"), QString::number(d->mountProtocolVersion)); 0663 0664 // 0665 // Security mode 0666 // 0667 entries.insert(QStringLiteral("use_security_mode"), QString::number(d->useSecurityMode)); 0668 entries.insert(QStringLiteral("security_mode"), QString::number(d->securityMode)); 0669 0670 // 0671 // Write access 0672 // 0673 entries.insert(QStringLiteral("use_write_access"), QString::number(d->useWriteAccess)); 0674 entries.insert(QStringLiteral("write_access"), QString::number(d->writeAccess)); 0675 #endif 0676 0677 // 0678 // Client protocol versions 0679 // 0680 entries.insert(QStringLiteral("use_client_protocol_versions"), QString::number(d->useClientProtocolVersions)); 0681 entries.insert(QStringLiteral("minimal_client_protocol_version"), QString::number(d->minimalClientProtocolVersion)); 0682 entries.insert(QStringLiteral("maximal_client_protocol_version"), QString::number(d->maximalClientProtocolVersion)); 0683 0684 // 0685 // SMB port used by the client 0686 // 0687 entries.insert(QStringLiteral("use_smb_port"), QString::number(d->useSmbPort)); 0688 entries.insert(QStringLiteral("smb_port"), QString::number(smbPort())); 0689 0690 // 0691 // Usage of Kerberos 0692 // 0693 entries.insert(QStringLiteral("kerberos"), QString::number(d->useKerberos)); 0694 0695 // 0696 // MAC address 0697 // 0698 entries.insert(QStringLiteral("mac_address"), d->macAddress); 0699 0700 // 0701 // Wake-On_LAN settings 0702 // 0703 entries.insert(QStringLiteral("wol_send_before_first_scan"), QString::number(d->wakeOnLanBeforeFirstScan)); 0704 entries.insert(QStringLiteral("wol_send_before_mount"), QString::number(d->wakeOnLanBeforeMount)); 0705 0706 return entries; 0707 } 0708 0709 bool Smb4KCustomSettings::hasCustomSettings(bool withoutRemountOnce) const 0710 { 0711 // NOTE: This function does not honor the workgroup, the url, 0712 // the ip address, the type and the profile, because these things 0713 // are not custom settings. 0714 0715 // Perform remounts 0716 if ((!withoutRemountOnce && d->remount != Smb4KCustomSettings::UndefinedRemount) || d->remount == Smb4KCustomSettings::RemountAlways) { 0717 return true; 0718 } 0719 0720 // Use user information 0721 if (d->useUser != Smb4KMountSettings::useUserId()) { 0722 return true; 0723 } 0724 0725 // User information 0726 if (d->user.userId().toString() != Smb4KMountSettings::userId()) { 0727 return true; 0728 } 0729 0730 // Use group information 0731 if (d->useGroup != Smb4KMountSettings::useGroupId()) { 0732 return true; 0733 } 0734 0735 // Group information 0736 if (d->group.groupId().toString() != Smb4KMountSettings::groupId()) { 0737 return true; 0738 } 0739 0740 // Use file mask 0741 if (d->useFileMode != Smb4KMountSettings::useFileMode()) { 0742 return true; 0743 } 0744 0745 if (d->fileMode != Smb4KMountSettings::fileMode()) { 0746 return true; 0747 } 0748 0749 if (d->useDirectoryMode != Smb4KMountSettings::useDirectoryMode()) { 0750 return true; 0751 } 0752 0753 if (d->directoryMode != Smb4KMountSettings::directoryMode()) { 0754 return true; 0755 } 0756 #if defined(Q_OS_LINUX) 0757 // CIFS Unix extension support 0758 if (d->cifsUnixExtensionsSupport != Smb4KMountSettings::cifsUnixExtensionsSupport()) { 0759 return true; 0760 } 0761 0762 // Use filesystem port 0763 if (d->useFileSystemPort != Smb4KMountSettings::useRemoteFileSystemPort()) { 0764 return true; 0765 } 0766 0767 // File system port (used for mounting) 0768 if (d->fileSystemPort != Smb4KMountSettings::remoteFileSystemPort()) { 0769 return true; 0770 } 0771 0772 // Use SMB mount protocol version 0773 if (d->useMountProtocolVersion != Smb4KMountSettings::useSmbProtocolVersion()) { 0774 return true; 0775 } 0776 0777 // SMB mount protocol version 0778 if (d->mountProtocolVersion != Smb4KMountSettings::smbProtocolVersion()) { 0779 return true; 0780 } 0781 0782 // Use security mode 0783 if (d->useSecurityMode != Smb4KMountSettings::useSecurityMode()) { 0784 return true; 0785 } 0786 0787 // Security mode 0788 if (d->securityMode != Smb4KMountSettings::securityMode()) { 0789 return true; 0790 } 0791 0792 // Use write access 0793 if (d->useWriteAccess != Smb4KMountSettings::useWriteAccess()) { 0794 return true; 0795 } 0796 0797 // Write access 0798 if (d->writeAccess != Smb4KMountSettings::writeAccess()) { 0799 return true; 0800 } 0801 #endif 0802 0803 // Use client protocol versions 0804 if (d->useClientProtocolVersions != Smb4KSettings::useClientProtocolVersions()) { 0805 return true; 0806 } 0807 0808 // Minimal client protocol version 0809 if (d->minimalClientProtocolVersion != Smb4KSettings::minimalClientProtocolVersion()) { 0810 return true; 0811 } 0812 0813 // Maximal client protocol version 0814 if (d->maximalClientProtocolVersion != Smb4KSettings::maximalClientProtocolVersion()) { 0815 return true; 0816 } 0817 0818 // Use SMB port 0819 if (d->useSmbPort != Smb4KSettings::useRemoteSmbPort()) { 0820 return true; 0821 } 0822 0823 // SMB port 0824 if (d->smbPort != Smb4KSettings::remoteSmbPort()) { 0825 return true; 0826 } 0827 0828 // Kerberos 0829 if (d->useKerberos != Smb4KSettings::useKerberos()) { 0830 return true; 0831 } 0832 0833 // MAC address 0834 if (!d->macAddress.isEmpty()) { 0835 return true; 0836 } 0837 0838 // Send WOL packets before first scan 0839 if (d->wakeOnLanBeforeFirstScan) { 0840 return true; 0841 } 0842 0843 // Send WOL packets before mount 0844 if (d->wakeOnLanBeforeMount) { 0845 return true; 0846 } 0847 0848 return false; 0849 } 0850 0851 void Smb4KCustomSettings::update(Smb4KCustomSettings *customSettings) 0852 { 0853 // NOTE: Do not update the workgroup, URL and the type 0854 0855 d->ip.setAddress(customSettings->ipAddress()); 0856 d->remount = customSettings->remount(); 0857 d->useUser = customSettings->useUser(); 0858 d->user = customSettings->user(); 0859 d->useGroup = customSettings->useGroup(); 0860 d->group = customSettings->group(); 0861 d->useFileMode = customSettings->useFileMode(); 0862 d->fileMode = customSettings->fileMode(); 0863 d->useDirectoryMode = customSettings->useDirectoryMode(); 0864 d->directoryMode = customSettings->directoryMode(); 0865 #if defined(Q_OS_LINUX) 0866 d->cifsUnixExtensionsSupport = customSettings->cifsUnixExtensionsSupport(); 0867 d->useFileSystemPort = customSettings->useFileSystemPort(); 0868 d->fileSystemPort = customSettings->fileSystemPort(); 0869 d->useMountProtocolVersion = customSettings->useMountProtocolVersion(); 0870 d->mountProtocolVersion = customSettings->mountProtocolVersion(); 0871 d->useSecurityMode = customSettings->useSecurityMode(); 0872 d->securityMode = customSettings->securityMode(); 0873 d->useWriteAccess = customSettings->useWriteAccess(); 0874 d->writeAccess = customSettings->writeAccess(); 0875 #endif 0876 d->profile = customSettings->profile(); 0877 d->useClientProtocolVersions = customSettings->useClientProtocolVersions(); 0878 d->minimalClientProtocolVersion = customSettings->minimalClientProtocolVersion(); 0879 d->maximalClientProtocolVersion = customSettings->maximalClientProtocolVersion(); 0880 d->useSmbPort = customSettings->useSmbPort(); 0881 d->smbPort = customSettings->smbPort(); 0882 d->useKerberos = customSettings->useKerberos(); 0883 d->macAddress = customSettings->macAddress(); 0884 d->wakeOnLanBeforeFirstScan = customSettings->wakeOnLanSendBeforeNetworkScan(); 0885 d->wakeOnLanBeforeMount = customSettings->wakeOnLanSendBeforeMount(); 0886 } 0887 0888 Smb4KCustomSettings &Smb4KCustomSettings::operator=(const Smb4KCustomSettings &other) 0889 { 0890 *d = *other.d; 0891 return *this; 0892 }