File indexing completed on 2024-04-21 15:42:45

0001 /***************************************************************************
0002     This class carries custom options
0003                              -------------------
0004     begin                : Fr 29 Apr 2011
0005     copyright            : (C) 2011-2019 by Alexander Reinholdt
0006     email                : alexander.reinholdt@kdemail.net
0007  ***************************************************************************/
0008 
0009 /***************************************************************************
0010  *   This program is free software; you can redistribute it and/or modify  *
0011  *   it under the terms of the GNU General Public License as published by  *
0012  *   the Free Software Foundation; either version 2 of the License, or     *
0013  *   (at your option) any later version.                                   *
0014  *                                                                         *
0015  *   This program is distributed in the hope that it will be useful, but   *
0016  *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
0017  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
0018  *   General Public License for more details.                              *
0019  *                                                                         *
0020  *   You should have received a copy of the GNU General Public License     *
0021  *   along with this program; if not, write to the                         *
0022  *   Free Software Foundation, Inc., 51 Franklin Street, Suite 500, Boston,*
0023  *   MA 02110-1335, USA                                                    *
0024  ***************************************************************************/
0025 
0026 #ifdef HAVE_CONFIG_H
0027 #include <config.h>
0028 #endif
0029 
0030 // application specific includes
0031 #include "smb4kcustomoptions.h"
0032 #include "smb4ksettings.h"
0033 
0034 #if defined(Q_OS_LINUX)
0035 #include "smb4kmountsettings_linux.h"
0036 #elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
0037 #include "smb4kmountsettings_bsd.h"
0038 #endif
0039 
0040 // Qt includes
0041 #include <QDebug>
0042 #include <QHostAddress>
0043 
0044 // KDE includes
0045 #include <KCoreAddons/KUser>
0046 #include <KI18n/KLocalizedString>
0047 
0048 
0049 class Smb4KCustomOptionsPrivate
0050 {
0051   public:
0052     QString workgroup;
0053     QUrl url;
0054     QHostAddress ip;
0055     NetworkItem type;
0056     Smb4KCustomOptions::Remount remount;
0057     bool useUser;
0058     KUser user;
0059     bool useGroup;
0060     KUserGroup group;
0061     bool useFileMode;
0062     QString fileMode;
0063     bool useDirectoryMode;
0064     QString directoryMode;
0065 #if defined(Q_OS_LINUX)
0066     bool cifsUnixExtensionsSupport;
0067     bool useFileSystemPort;
0068     int fileSystemPort;
0069     bool useSecurityMode;
0070     int securityMode;
0071     bool useWriteAccess;
0072     int writeAccess;
0073 #endif
0074     QString profile;
0075     bool useSmbPort;
0076     int smbPort;
0077     bool useKerberos;
0078     QString mac;
0079     bool wakeOnLanBeforeFirstScan;
0080     bool wakeOnLanBeforeMount;
0081 };
0082 
0083 
0084 Smb4KCustomOptions::Smb4KCustomOptions(Smb4KHost *host)
0085 : d(new Smb4KCustomOptionsPrivate)
0086 {
0087   d->workgroup = host->workgroupName();
0088   d->url = host->url();
0089   d->type = Host;
0090   d->remount = UndefinedRemount;
0091   d->useUser = Smb4KMountSettings::useUserId();
0092   d->user = KUser((K_UID)Smb4KMountSettings::userId().toInt());
0093   d->useGroup = Smb4KMountSettings::useGroupId();
0094   d->group = KUserGroup((K_GID)Smb4KMountSettings::groupId().toInt());
0095   d->useFileMode = Smb4KMountSettings::useFileMode();
0096   d->fileMode = Smb4KMountSettings::fileMode();
0097   d->useDirectoryMode = Smb4KMountSettings::useDirectoryMode();
0098   d->directoryMode = Smb4KMountSettings::directoryMode();
0099 #if defined(Q_OS_LINUX)
0100   d->cifsUnixExtensionsSupport = Smb4KMountSettings::cifsUnixExtensionsSupport();
0101   d->useFileSystemPort = Smb4KMountSettings::useRemoteFileSystemPort();
0102   d->fileSystemPort = Smb4KMountSettings::remoteFileSystemPort();
0103   d->useSecurityMode = Smb4KMountSettings::useSecurityMode();
0104   d->securityMode = Smb4KMountSettings::securityMode();
0105   d->useWriteAccess = Smb4KMountSettings::useWriteAccess();
0106   d->writeAccess = Smb4KMountSettings::writeAccess();
0107 #endif
0108   d->useSmbPort = Smb4KSettings::useRemoteSmbPort();
0109   d->smbPort = host->port() != -1 ? host->port() : Smb4KSettings::remoteSmbPort();
0110   d->useKerberos = Smb4KSettings::useKerberos();
0111   d->ip.setAddress(host->ipAddress());
0112   d->wakeOnLanBeforeFirstScan = false;
0113   d->wakeOnLanBeforeMount = false;
0114 }
0115 
0116 Smb4KCustomOptions::Smb4KCustomOptions(Smb4KShare *share)
0117 : d(new Smb4KCustomOptionsPrivate)
0118 {
0119   d->url = share->url();
0120   d->workgroup = share->workgroupName();
0121   d->type = Share;
0122   d->remount = UndefinedRemount;
0123   d->useUser = Smb4KMountSettings::useUserId();
0124   d->user = share->user();
0125   d->useGroup = Smb4KMountSettings::useGroupId();
0126   d->group = share->group();
0127   d->useFileMode = Smb4KMountSettings::useFileMode();
0128   d->fileMode = Smb4KMountSettings::fileMode();
0129   d->useDirectoryMode = Smb4KMountSettings::useDirectoryMode();
0130   d->directoryMode = Smb4KMountSettings::directoryMode();
0131 #if defined(Q_OS_LINUX)
0132   d->cifsUnixExtensionsSupport = Smb4KMountSettings::cifsUnixExtensionsSupport();
0133   d->useFileSystemPort = Smb4KMountSettings::useRemoteFileSystemPort();
0134   d->fileSystemPort = share->port() != -1 ? share->port() : Smb4KMountSettings::remoteFileSystemPort();
0135   d->useSecurityMode = Smb4KMountSettings::useSecurityMode();
0136   d->securityMode = Smb4KMountSettings::securityMode();
0137   d->useWriteAccess = Smb4KMountSettings::useWriteAccess();
0138   d->writeAccess = Smb4KMountSettings::writeAccess();
0139 #endif
0140   d->useSmbPort = Smb4KSettings::useRemoteSmbPort();
0141   d->smbPort = Smb4KSettings::remoteSmbPort();
0142   d->useKerberos = Smb4KSettings::useKerberos();
0143   d->ip.setAddress(share->hostIpAddress());
0144   d->wakeOnLanBeforeFirstScan = false;
0145   d->wakeOnLanBeforeMount = false;
0146 }
0147 
0148 
0149 Smb4KCustomOptions::Smb4KCustomOptions(const Smb4KCustomOptions &o)
0150 : d(new Smb4KCustomOptionsPrivate)
0151 {
0152   *d = *o.d;
0153 }
0154 
0155 
0156 Smb4KCustomOptions::Smb4KCustomOptions()
0157 : d(new Smb4KCustomOptionsPrivate)
0158 {
0159   d->type = UnknownNetworkItem;
0160   d->remount = UndefinedRemount;
0161   d->useUser = Smb4KMountSettings::useUserId();
0162   d->user = KUser((K_UID)Smb4KMountSettings::userId().toInt());
0163   d->useGroup = Smb4KMountSettings::useGroupId();
0164   d->group = KUserGroup((K_GID)Smb4KMountSettings::groupId().toInt());
0165   d->useFileMode = Smb4KMountSettings::useFileMode();
0166   d->fileMode = Smb4KMountSettings::fileMode();
0167   d->useDirectoryMode = Smb4KMountSettings::useDirectoryMode();
0168   d->directoryMode = Smb4KMountSettings::directoryMode();
0169 #if defined(Q_OS_LINUX)
0170   d->cifsUnixExtensionsSupport = Smb4KMountSettings::cifsUnixExtensionsSupport();
0171   d->useFileSystemPort = Smb4KMountSettings::useRemoteFileSystemPort();
0172   d->fileSystemPort = Smb4KMountSettings::remoteFileSystemPort();
0173   d->useSecurityMode = Smb4KMountSettings::useSecurityMode();
0174   d->securityMode = Smb4KMountSettings::securityMode();
0175   d->useWriteAccess = Smb4KMountSettings::useWriteAccess();
0176   d->writeAccess = Smb4KMountSettings::writeAccess();
0177 #endif
0178   d->useSmbPort = Smb4KSettings::useRemoteSmbPort();
0179   d->smbPort = Smb4KSettings::remoteSmbPort();
0180   d->useKerberos = Smb4KSettings::useKerberos();
0181   d->wakeOnLanBeforeFirstScan = false;
0182   d->wakeOnLanBeforeMount = false;
0183 }
0184 
0185 
0186 Smb4KCustomOptions::~Smb4KCustomOptions()
0187 {
0188 }
0189 
0190 
0191 void Smb4KCustomOptions::setHost(Smb4KHost *host)
0192 {
0193   //
0194   // Set all variables that can be extracted from the host item
0195   //
0196   if (host)
0197   {
0198     switch (d->type)
0199     {
0200       case UnknownNetworkItem:
0201       {
0202         d->workgroup = host->workgroupName();
0203         d->url = host->url();
0204         d->type = Host;
0205         d->smbPort = host->port() != -1 ? host->port() : d->smbPort;
0206         d->ip.setAddress(host->ipAddress());
0207         break;
0208       }
0209       default:
0210       {
0211         break;
0212       }
0213     }
0214   }
0215 }
0216 
0217 
0218 void Smb4KCustomOptions::setShare(Smb4KShare *share)
0219 {
0220   //
0221   // Set all variables that can be extracted from the share item
0222   // 
0223   if (share)
0224   {
0225     switch (d->type)
0226     {
0227       case UnknownNetworkItem:
0228       {
0229         d->url = share->url();
0230         d->workgroup = share->workgroupName();
0231         d->type = Share;
0232 #if defined(Q_OS_LINUX)
0233         d->fileSystemPort = share->port() != -1 ? share->port() : d->fileSystemPort;
0234 #endif
0235         d->user = share->user();
0236         d->group = share->group();
0237         d->ip.setAddress(share->hostIpAddress());
0238         break;
0239       }
0240       case Host:
0241       {
0242         if (QString::compare(d->url.toString(QUrl::RemoveUserInfo|QUrl::RemovePort|QUrl::RemovePath),
0243                              share->url().toString(QUrl::RemoveUserInfo|QUrl::RemovePort|QUrl::RemovePath),
0244                              Qt::CaseInsensitive) == 0)
0245         {
0246           d->url = share->url();
0247           d->type = Share;
0248 #if defined(Q_OS_LINUX)
0249           d->fileSystemPort = share->port() != -1 ? share->port() : d->fileSystemPort;
0250 #endif
0251           d->user = share->user();
0252           d->group = share->group();
0253           d->ip.setAddress(share->hostIpAddress());
0254         }
0255         break;
0256       }
0257       default:
0258       {
0259         break;
0260       }
0261     }    
0262   }
0263 }
0264 
0265 
0266 Smb4KGlobal::NetworkItem Smb4KCustomOptions::type() const
0267 {
0268   return d->type;
0269 }
0270 
0271 
0272 void Smb4KCustomOptions::setWorkgroupName(const QString &workgroup)
0273 {
0274   d->workgroup = workgroup;
0275 }
0276 
0277 
0278 QString Smb4KCustomOptions::workgroupName() const
0279 {
0280   return d->workgroup;
0281 }
0282 
0283 
0284 void Smb4KCustomOptions::setUrl(const QUrl &url)
0285 {
0286   d->url = url;
0287 }
0288 
0289 
0290 QUrl Smb4KCustomOptions::url() const
0291 {
0292   return d->url;
0293 }
0294 
0295 
0296 QString Smb4KCustomOptions::hostName() const
0297 {
0298   return d->url.host().toUpper();
0299 }
0300 
0301 
0302 QString Smb4KCustomOptions::shareName() const
0303 {
0304   if (d->url.path().startsWith('/'))
0305   {
0306     return d->url.path().remove(0, 1);
0307   }
0308 
0309   return d->url.path();
0310 }
0311 
0312 
0313 void Smb4KCustomOptions::setIpAddress(const QString &ip)
0314 {
0315   d->ip.setAddress(ip);
0316 }
0317 
0318 
0319 QString Smb4KCustomOptions::ipAddress() const
0320 {
0321   return d->ip.toString();
0322 }
0323 
0324 
0325 bool Smb4KCustomOptions::hasIpAddress() const
0326 {
0327   return !d->ip.isNull();
0328 }
0329 
0330 
0331 QString Smb4KCustomOptions::displayString() const
0332 {
0333   QString string;
0334   
0335   switch (d->type)
0336   {
0337     case Host:
0338     {
0339       string = hostName();
0340       break;
0341     }
0342     case Share:
0343     {
0344       string = i18n("%1 on %2", shareName(), hostName());
0345       break;
0346     }
0347     default:
0348     {
0349       break;
0350     }
0351   }
0352   
0353   return string;
0354 }
0355 
0356 
0357 void Smb4KCustomOptions::setRemount(Smb4KCustomOptions::Remount remount)
0358 {
0359   switch (d->type)
0360   {
0361     case Share:
0362     {
0363       d->remount = remount;
0364       break;
0365     }
0366     default:
0367     {
0368       d->remount = UndefinedRemount;
0369       break;
0370     }
0371   }
0372 }
0373 
0374 
0375 Smb4KCustomOptions::Remount Smb4KCustomOptions::remount() const
0376 {
0377   return d->remount;
0378 }
0379 
0380 
0381 void Smb4KCustomOptions::setUseUser(bool use)
0382 {
0383   d->useUser = use;
0384 }
0385 
0386 
0387 bool Smb4KCustomOptions::useUser() const
0388 {
0389   return d->useUser;
0390 }
0391 
0392 
0393 void Smb4KCustomOptions::setUser(const KUser &user)
0394 {
0395   d->user = user;
0396 }
0397 
0398 
0399 KUser Smb4KCustomOptions::user() const
0400 {
0401   return d->user;
0402 }
0403 
0404 
0405 void Smb4KCustomOptions::setUseGroup(bool use)
0406 {
0407   d->useGroup = use;
0408 }
0409 
0410 
0411 bool Smb4KCustomOptions::useGroup() const
0412 {
0413   return d->useGroup;
0414 }
0415 
0416 
0417 void Smb4KCustomOptions::setGroup(const KUserGroup& group)
0418 {
0419   d->group = group;
0420 }
0421 
0422 
0423 KUserGroup Smb4KCustomOptions::group() const
0424 {
0425   return d->group;
0426 }
0427 
0428 
0429 void Smb4KCustomOptions::setUseFileMode(bool use)
0430 {
0431   d->useFileMode = use;
0432 }
0433 
0434 
0435 bool Smb4KCustomOptions::useFileMode() const
0436 {
0437   return d->useFileMode;
0438 }
0439 
0440 
0441 void Smb4KCustomOptions::setFileMode(const QString& mode)
0442 {
0443   d->fileMode = mode;
0444 }
0445 
0446 
0447 QString Smb4KCustomOptions::fileMode() const
0448 {
0449   return d->fileMode;
0450 }
0451 
0452 
0453 void Smb4KCustomOptions::setUseDirectoryMode(bool use)
0454 {
0455   d->useDirectoryMode = use;
0456 }
0457 
0458 
0459 bool Smb4KCustomOptions::useDirectoryMode() const
0460 {
0461   return d->useDirectoryMode;
0462 }
0463 
0464 
0465 void Smb4KCustomOptions::setDirectoryMode(const QString& mode)
0466 {
0467   d->directoryMode = mode;
0468 }
0469 
0470 
0471 QString Smb4KCustomOptions::directoryMode() const
0472 {
0473   return d->directoryMode;
0474 }
0475 
0476 
0477 #if defined(Q_OS_LINUX)
0478 void Smb4KCustomOptions::setCifsUnixExtensionsSupport(bool support)
0479 {
0480   d->cifsUnixExtensionsSupport = support;
0481 }
0482 
0483 
0484 bool Smb4KCustomOptions::cifsUnixExtensionsSupport() const
0485 {
0486   return d->cifsUnixExtensionsSupport;
0487 }
0488 
0489 
0490 void Smb4KCustomOptions::setUseFileSystemPort(bool use)
0491 {
0492   d->useFileSystemPort = use;
0493 }
0494 
0495 
0496 bool Smb4KCustomOptions::useFileSystemPort() const
0497 {
0498   return d->useFileSystemPort;
0499 }
0500 
0501 
0502 void Smb4KCustomOptions::setFileSystemPort(int port)
0503 {
0504   d->fileSystemPort = port;
0505   
0506   switch (d->type)
0507   {
0508     case Share:
0509     {
0510       d->url.setPort(port);
0511       break;
0512     }
0513     default:
0514     {
0515       break;
0516     }
0517   }
0518 }
0519 
0520 
0521 int Smb4KCustomOptions::fileSystemPort() const
0522 {
0523   return d->fileSystemPort;
0524 }
0525 
0526 
0527 void Smb4KCustomOptions::setUseSecurityMode(bool use)
0528 {
0529   d->useSecurityMode = use;
0530 }
0531 
0532 
0533 bool Smb4KCustomOptions::useSecurityMode() const
0534 {
0535   return d->useSecurityMode;
0536 }
0537 
0538 
0539 void Smb4KCustomOptions::setSecurityMode(int mode)
0540 {
0541   d->securityMode = mode;
0542 }
0543 
0544 
0545 int Smb4KCustomOptions::securityMode() const
0546 {
0547   return d->securityMode;
0548 }
0549 
0550 
0551 void Smb4KCustomOptions::setUseWriteAccess(bool use)
0552 {
0553   d->useWriteAccess = use;
0554 }
0555 
0556 
0557 bool Smb4KCustomOptions::useWriteAccess() const
0558 {
0559   return d->useWriteAccess;
0560 }
0561 
0562 
0563 void Smb4KCustomOptions::setWriteAccess(int access)
0564 {
0565   d->writeAccess = access;
0566 }
0567 
0568 
0569 int Smb4KCustomOptions::writeAccess() const
0570 {
0571   return d->writeAccess;
0572 }
0573 #endif
0574 
0575 
0576 void Smb4KCustomOptions::setProfile(const QString &profile)
0577 {
0578   d->profile = profile;
0579 }
0580 
0581 
0582 QString Smb4KCustomOptions::profile() const
0583 {
0584   return d->profile;
0585 }
0586 
0587 
0588 void Smb4KCustomOptions::setUseSmbPort(bool use)
0589 {
0590   d->useSmbPort = use;
0591 }
0592 
0593 
0594 bool Smb4KCustomOptions::useSmbPort() const
0595 {
0596   return d->useSmbPort;
0597 }
0598 
0599 
0600 void Smb4KCustomOptions::setSmbPort(int port)
0601 {
0602   d->smbPort = port;
0603 
0604   switch (d->type)
0605   {
0606     case Host:
0607     {
0608       d->url.setPort(port);
0609       break;
0610     }
0611     default:
0612     {
0613       break;
0614     }
0615   }
0616 }
0617 
0618 
0619 int Smb4KCustomOptions::smbPort() const
0620 {
0621   return d->smbPort;
0622 }
0623 
0624 
0625 void Smb4KCustomOptions::setUseKerberos(bool use)
0626 {
0627   d->useKerberos = use;
0628 }
0629 
0630 
0631 bool Smb4KCustomOptions::useKerberos() const
0632 {
0633   return d->useKerberos;
0634 }
0635 
0636 
0637 void Smb4KCustomOptions::setMACAddress(const QString &macAddress)
0638 {
0639   QRegExp exp("..\\:..\\:..\\:..\\:..\\:..");
0640   
0641   if (exp.exactMatch(macAddress))
0642   {
0643     d->mac = macAddress;
0644   }
0645 }
0646 
0647 
0648 QString Smb4KCustomOptions::macAddress() const
0649 {
0650   return d->mac;
0651 }
0652 
0653 
0654 void Smb4KCustomOptions::setWOLSendBeforeNetworkScan(bool send)
0655 {
0656   d->wakeOnLanBeforeFirstScan = send;
0657 }
0658 
0659 
0660 bool Smb4KCustomOptions::wolSendBeforeNetworkScan() const
0661 {
0662   return d->wakeOnLanBeforeFirstScan;
0663 }
0664 
0665 
0666 void Smb4KCustomOptions::setWOLSendBeforeMount(bool send)
0667 {
0668   d->wakeOnLanBeforeMount = send;
0669 }
0670 
0671 
0672 bool Smb4KCustomOptions::wolSendBeforeMount() const
0673 {
0674   return d->wakeOnLanBeforeMount;
0675 }
0676 
0677 
0678 QMap<QString, QString> Smb4KCustomOptions::customOptions() const
0679 {
0680   QMap<QString,QString> entries;
0681 
0682   switch (d->remount)
0683   {
0684     case RemountOnce:
0685     {
0686       entries.insert("remount", "once");
0687       break;
0688     }
0689     case RemountAlways:
0690     {
0691       entries.insert("remount", "always");
0692       break;
0693     }
0694     case UndefinedRemount:
0695     {
0696       entries.insert("remount", QString());
0697       break;
0698     }
0699     default:
0700     {
0701       break;
0702     }
0703   }
0704   
0705   entries.insert("use_user", d->useUser ? "true" : "false");
0706   entries.insert("uid", QString("%1").arg(d->user.userId().toString()));
0707   entries.insert("owner", d->user.loginName());
0708   entries.insert("use_group", d->useGroup ? "true" : "false");
0709   entries.insert("gid", QString("%1").arg(d->group.groupId().toString()));
0710   entries.insert("group", d->group.name());
0711   entries.insert("use_file_mode", d->useFileMode ? "true" : "false");
0712   entries.insert("file_mode", d->fileMode);
0713   entries.insert("use_directory_mode", d->useDirectoryMode ? "true" : "false");
0714   entries.insert("directory_mode", d->directoryMode);
0715   
0716 #if defined(Q_OS_LINUX)
0717   entries.insert("cifs_unix_extensions_support", d->cifsUnixExtensionsSupport ? "true" : "false");
0718   entries.insert("use_filesystem_port", d->useFileSystemPort ? "true" : "false");
0719   entries.insert("filesystem_port", QString("%1").arg(fileSystemPort()));
0720   entries.insert("use_security_mode", d->useSecurityMode ? "true" : "false");
0721   
0722   switch (d->securityMode)
0723   {
0724     case Smb4KMountSettings::EnumSecurityMode::None:
0725     {
0726       entries.insert("security_mode", "none");
0727       break;
0728     }
0729     case Smb4KMountSettings::EnumSecurityMode::Krb5:
0730     {
0731       entries.insert("security_mode", "krb5");
0732       break;
0733     }
0734     case Smb4KMountSettings::EnumSecurityMode::Krb5i:
0735     {
0736       entries.insert("security_mode", "krb5i");
0737       break;
0738     }
0739     case Smb4KMountSettings::EnumSecurityMode::Ntlm:
0740     {
0741       entries.insert("security_mode", "ntlm");
0742       break;
0743     }
0744     case Smb4KMountSettings::EnumSecurityMode::Ntlmi:
0745     {
0746       entries.insert("security_mode", "ntlmi");
0747       break;
0748     }
0749     case Smb4KMountSettings::EnumSecurityMode::Ntlmv2:
0750     {
0751       entries.insert("security_mode", "ntlmv2");
0752       break;
0753     }
0754     case Smb4KMountSettings::EnumSecurityMode::Ntlmv2i:
0755     {
0756       entries.insert("security_mode", "ntlmv2i");
0757       break;
0758     }
0759     case Smb4KMountSettings::EnumSecurityMode::Ntlmssp:
0760     {
0761       entries.insert("security_mode", "ntlmssp");
0762       break;
0763     }
0764     case Smb4KMountSettings::EnumSecurityMode::Ntlmsspi:
0765     {
0766       entries.insert("security_mode", "ntlmsspi");
0767       break;
0768     }
0769     default:
0770     {
0771       break;
0772     }
0773   }
0774   
0775   entries.insert("use_write_access", d->useWriteAccess ? "true" : "false");
0776 
0777   switch (d->writeAccess)
0778   {
0779     case Smb4KMountSettings::EnumWriteAccess::ReadWrite:
0780     {
0781       entries.insert("write_access", "true");
0782       break;
0783     }
0784     case Smb4KMountSettings::EnumWriteAccess::ReadOnly:
0785     {
0786       entries.insert("write_access", "false");
0787       break;
0788     }
0789     default:
0790     {
0791       break;
0792     }
0793   }
0794 #endif
0795   entries.insert("use_smb_port", d->useSmbPort ? "true" : "false");
0796   entries.insert("smb_port", QString("%1").arg(smbPort()));
0797   entries.insert("kerberos", d->useKerberos ? "true" : "false");
0798   entries.insert("mac_address", d->mac);
0799   entries.insert("wol_send_before_first_scan", d->wakeOnLanBeforeFirstScan ? "true" : "false");
0800   entries.insert("wol_send_before_mount", d->wakeOnLanBeforeMount ? "true" : "false");
0801   
0802   return entries;
0803 }
0804 
0805 
0806 bool Smb4KCustomOptions::hasOptions() const
0807 {
0808   //
0809   // NOTE: This function does not honor the workgroup, the url,
0810   // the ip address, the type and the profile, because these things 
0811   // are not custom options.
0812   // 
0813   // Perform remount
0814   if (d->remount != Smb4KCustomOptions::UndefinedRemount)
0815   {
0816     return true;
0817   }
0818   
0819   // Use user information
0820   if (d->useUser != Smb4KMountSettings::useUserId())
0821   {
0822     return true;
0823   }
0824   
0825   // User information
0826   if (d->user.userId().toString() != Smb4KMountSettings::userId())
0827   {
0828     return true;
0829   }
0830   
0831   // Use group information
0832   if (d->useGroup != Smb4KMountSettings::useGroupId())
0833   {
0834     return true;
0835   }
0836   
0837   // Group information
0838   if (d->group.groupId().toString() != Smb4KMountSettings::groupId())
0839   {
0840     return true;
0841   }
0842   
0843   // Use file mask
0844   if (d->useFileMode != Smb4KMountSettings::useFileMode())
0845   {
0846     return true;
0847   }
0848   
0849   if (d->fileMode != Smb4KMountSettings::fileMode())
0850   {
0851     return true;
0852   }
0853   
0854   if (d->useDirectoryMode != Smb4KMountSettings::useDirectoryMode())
0855   {
0856     return true;
0857   }
0858   
0859   if (d->directoryMode != Smb4KMountSettings::directoryMode())
0860   {
0861     return true;
0862   }
0863 #if defined(Q_OS_LINUX)
0864   // CIFS Unix extension support
0865   if (d->cifsUnixExtensionsSupport != Smb4KMountSettings::cifsUnixExtensionsSupport())
0866   {
0867     return true;
0868   }
0869   
0870   // Use filesystem port
0871   if (d->useFileSystemPort != Smb4KMountSettings::useRemoteFileSystemPort())
0872   {
0873     return true;
0874   }
0875   
0876   // File system port (used for mounting)
0877   if (d->fileSystemPort != Smb4KMountSettings::remoteFileSystemPort())
0878   {
0879     return true;
0880   }
0881   
0882   // Use security mode
0883   if (d->useSecurityMode != Smb4KMountSettings::useSecurityMode())
0884   {
0885     return true;
0886   }
0887   
0888   // Security mode
0889   if (d->securityMode != Smb4KMountSettings::securityMode())
0890   {
0891     return true;
0892   }
0893   
0894   // Use write access
0895   if (d->useWriteAccess != Smb4KMountSettings::useWriteAccess())
0896   {
0897     return true;
0898   }
0899 
0900   // Write access
0901   if (d->writeAccess != Smb4KMountSettings::writeAccess())
0902   {
0903     return true;
0904   }
0905 #endif
0906 
0907   // Use SMB port
0908   if (d->useSmbPort != Smb4KSettings::useRemoteSmbPort())
0909   {
0910     return true;
0911   }
0912 
0913   // SMB port
0914   if (d->smbPort != Smb4KSettings::remoteSmbPort())
0915   {
0916     return true;
0917   }
0918 
0919   // Kerberos
0920   if (d->useKerberos != Smb4KSettings::useKerberos())
0921   {
0922     return true;
0923   }
0924   
0925   // MAC address
0926   if (!d->mac.isEmpty())
0927   {
0928     return true;
0929   }
0930   
0931   // Send WOL packages before first scan
0932   if (d->wakeOnLanBeforeFirstScan)
0933   {
0934     return true;
0935   }
0936   
0937   // Send WOL packages before mount
0938   if (d->wakeOnLanBeforeMount)
0939   {
0940     return true;
0941   }
0942   
0943   return false;
0944 }
0945 
0946 
0947 
0948 void Smb4KCustomOptions::update(Smb4KCustomOptions *options)
0949 {
0950     d->ip.setAddress(options->ipAddress());
0951     d->remount = options->remount();
0952     d->useUser = options->useUser();
0953     d->user = options->user();
0954     d->useGroup = options->useGroup();
0955     d->group = options->group();
0956     d->useFileMode = options->useFileMode();
0957     d->fileMode = options->fileMode();
0958     d->useDirectoryMode = options->useDirectoryMode();
0959     d->directoryMode = options->directoryMode();
0960 #if defined(Q_OS_LINUX)
0961     d->cifsUnixExtensionsSupport = options->cifsUnixExtensionsSupport();
0962     d->useFileSystemPort = options->useFileSystemPort();
0963     d->fileSystemPort = options->fileSystemPort();
0964     d->useSecurityMode = options->useSecurityMode();
0965     d->securityMode = options->securityMode();
0966     d->useWriteAccess = options->useWriteAccess();
0967     d->writeAccess = options->writeAccess();
0968 #endif
0969     d->profile = options->profile();
0970     d->useSmbPort = options->useSmbPort();
0971     d->smbPort = options->smbPort();
0972     d->useKerberos = options->useKerberos();
0973     d->mac = options->macAddress();
0974     d->wakeOnLanBeforeFirstScan = options->wolSendBeforeNetworkScan();
0975     d->wakeOnLanBeforeMount = options->wolSendBeforeMount();
0976 }
0977