summaryrefslogtreecommitdiffstats
path: root/filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitbcb704366cb5e333a626c18c308c7e0448a8e69f (patch)
treef0d6ab7d78ecdd9207cf46536376b44b91a1ca71 /filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp
downloadtdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.tar.gz
tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp')
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp1442
1 files changed, 1442 insertions, 0 deletions
diff --git a/filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp b/filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp
new file mode 100644
index 00000000..f6ee4f75
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp
@@ -0,0 +1,1442 @@
+/***************************************************************************
+ kcmsambaconf.cpp - description
+ -------------------
+ begin : Mon Apr 8 13:35:56 CEST 2002
+ copyright : (C) 2002 by Christian Nitschkowski,
+
+ copyright : (C) 2002-2004 by Jan Schaefer
+***************************************************************************/
+
+/******************************************************************************
+* *
+* This file is part of KSambaPlugin. *
+* *
+* KSambaPlugin is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+* KSambaPlugin is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU General Public License for more details. *
+* *
+* You should have received a copy of the GNU General Public License *
+* along with KSambaPlugin; if not, write to the Free Software *
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
+* *
+******************************************************************************/
+
+#include <assert.h>
+#include <unistd.h>
+
+#include <qlayout.h>
+#include <qgroupbox.h>
+#include <qpainter.h>
+#include <qcheckbox.h>
+#include <qlistbox.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include <qtabwidget.h>
+#include <qtabbar.h>
+#include <qvbox.h>
+#include <qlabel.h>
+
+#include <klocale.h>
+#include <kglobal.h>
+#include <klineedit.h>
+#include <kurlrequester.h>
+#include <kcombobox.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <knuminput.h>
+#include <krestrictedline.h>
+#include <kmessagebox.h>
+#include <kjanuswidget.h>
+#include <klistview.h>
+#include <ksimpleconfig.h>
+
+#include "sambashare.h"
+#include "sambafile.h"
+#include "sharedlgimpl.h"
+#include "printerdlgimpl.h"
+#include "dictmanager.h"
+#include "kcmsambaconf.h"
+#include "smbpasswdfile.h"
+#include "passwd.h"
+#include "qmultichecklistitem.h"
+#include "joindomaindlg.h"
+#include "smbconfconfigwidget.h"
+
+
+#define COL_DISABLED 2
+#define COL_NOPASSWORD 3
+
+
+ShareListViewItem::ShareListViewItem(QListView * parent, SambaShare* share)
+ : QListViewItem(parent)
+{
+ setShare(share);
+}
+
+SambaShare* ShareListViewItem::getShare() const
+{
+ return _share;
+}
+
+void ShareListViewItem::setShare(SambaShare* share)
+{
+ assert(share);
+ _share = share;
+ updateShare();
+}
+
+void ShareListViewItem::updateShare()
+{
+ assert(_share);
+
+ setText(0,_share->getName());
+ setText(2,_share->getValue("comment"));
+
+ if (_share->isPrinter())
+ {
+ if ( _share->getName() == "printers" )
+ setPixmap(0,SmallIcon("print_class"));
+ else
+ setPixmap(0,SmallIcon("print_printer"));
+ setText(1,_share->getValue("printer name"));
+ }
+ else
+ {
+ if ( _share->getName() == "homes" )
+ setPixmap(0,SmallIcon("folder_home"));
+ else
+ setPixmap(0,SmallIcon("folder"));
+ setText(1,_share->getValue("path"));
+ }
+
+ setPixmap(3,createPropertyPixmap());
+}
+
+QPixmap ShareListViewItem::createPropertyPixmap()
+{
+ // Create a big pixmap wich holds the
+ // icons which are needed
+
+ int numberOfPix = 4; // the max number of pixmaps to join
+
+ int w = 22; // Standard size of one pixmap
+ int margin = 4; // Margin between pixmaps
+ int h = 22;
+
+ int totalWidth = (w+margin)*numberOfPix;
+
+ QPixmap pix(totalWidth,h);
+
+ pix.fill(); // Fill with white
+
+ QPainter p(&pix);
+
+ int x = 0;
+
+ if (_share->getBoolValue("public"))
+ {
+ p.drawPixmap(x,0,SmallIcon("network"));
+ x = x+w+margin;
+ }
+
+ if (!_share->getBoolValue("read only"))
+ {
+ p.drawPixmap(x,0,SmallIcon("edit"));
+ x = x+w+margin;
+ }
+
+ if (_share->getBoolValue("printable"))
+ {
+ p.drawPixmap(x,0,SmallIcon("fileprint"));
+ x = x+w+margin;
+ }
+
+ if (_share->getBoolValue("browseable"))
+ {
+ p.drawPixmap(x,0,SmallIcon("run"));
+ x = x+w+margin;
+ }
+
+ if (!_share->getBoolValue("available"))
+ p.drawPixmap(x,0,SmallIcon("no"));
+
+
+ p.end();
+
+ return QPixmap(pix);
+}
+
+KcmSambaConf::KcmSambaConf(QWidget *parent, const char *name)
+ : KCModule(parent,name)
+{
+ _dictMngr = 0L;
+ _sambaFile = 0L;
+ m_smbConfConfigWidget = 0L;
+
+
+ QBoxLayout * l = new QHBoxLayout( this );
+ l->setAutoAdd( TRUE );
+
+ QString smbFile = SambaFile::findSambaConf();
+ if (smbFile.isNull()) {
+ createSmbConfigWidget();
+ return;
+ }
+
+ slotSpecifySmbConf(smbFile);
+
+}
+
+
+KcmSambaConf::~KcmSambaConf() {
+ delete _dictMngr;
+}
+
+void KcmSambaConf::createSmbConfigWidget() {
+ m_smbConfConfigWidget = new SmbConfConfigWidget(this);
+ connect( m_smbConfConfigWidget, SIGNAL(smbConfChoosed(const QString &)),
+ this, SLOT(slotSpecifySmbConf(const QString &)));
+}
+
+void KcmSambaConf::slotSpecifySmbConf(const QString & smbConf) {
+ if (m_smbConfConfigWidget) {
+ m_smbConfConfigWidget->hide();
+ }
+
+ init();
+ initAdvancedTab();
+ load(smbConf);
+
+
+ if (getuid() != 0) {
+ for (int i=0;i<_interface->mainTab->count();i++) {
+ QWidget* w = _interface->mainTab->page(i);
+ w->setEnabled(false);
+ }
+ }
+
+ _interface->show();
+}
+
+void KcmSambaConf::init() {
+
+ _interface = new KcmInterface(this);
+
+
+ connect ( _interface->sambaUserPasswordBtn, SIGNAL(clicked()), this, SLOT(sambaUserPasswordBtnClicked()));
+
+ connect ( _interface->editShareBtn, SIGNAL(clicked()), this, SLOT(editShare()));
+ connect ( _interface->addShareBtn, SIGNAL(clicked()), this, SLOT(addShare()));
+ connect ( _interface->removeShareBtn, SIGNAL(clicked()), this, SLOT(removeShare()));
+
+ connect ( _interface->editPrinterBtn, SIGNAL(clicked()), this, SLOT(editPrinter()));
+ connect ( _interface->addPrinterBtn, SIGNAL(clicked()), this, SLOT(addPrinter()));
+ connect ( _interface->removePrinterBtn, SIGNAL(clicked()), this, SLOT(removePrinter()));
+
+ connect ( _interface->editDefaultPrinterBtn, SIGNAL(clicked()), this, SLOT(editPrinterDefaults()));
+ connect ( _interface->editDefaultShareBtn, SIGNAL(clicked()), this, SLOT(editShareDefaults()));
+
+ connect( _interface->domainRadio, SIGNAL(toggled(bool)),
+ _interface->joinADomainBtn, SLOT( setEnabled(bool) ));
+
+ connect(_interface->nullPasswordsChk,SIGNAL(toggled(bool)),
+ this, SLOT(nullPasswordsEnabled(bool)));
+
+ connect( _interface->addSambaUserBtn, SIGNAL(clicked()),
+ this, SLOT( addSambaUserBtnClicked() ));
+
+ connect( _interface->removeSambaUserBtn, SIGNAL(clicked()),
+ this, SLOT( removeSambaUserBtnClicked() ));
+
+ _interface->removeSambaUserBtn->setIconSet(SmallIconSet("1rightarrow"));
+ _interface->addSambaUserBtn->setIconSet(SmallIconSet("1leftarrow"));
+
+
+ connect( _interface->sambaUsersListView, SIGNAL(mouseButtonPressed(int,QListViewItem*,const QPoint &,int)),
+ this, SLOT(slotMouseButtonPressed(int,QListViewItem*,const QPoint &,int)));
+
+ connect( _interface->joinADomainBtn, SIGNAL(clicked()),
+ this, SLOT( joinADomainBtnClicked() ));
+
+ connect( _interface->loadBtn, SIGNAL(clicked()),
+ this, SLOT( loadBtnClicked() ));
+
+ connect( _interface, SIGNAL(changed()), this, SLOT(configChanged()));
+}
+
+
+void KcmSambaConf::initAdvancedTab()
+{
+ QVBoxLayout *l = new QVBoxLayout(_interface->advancedFrame);
+ l->setAutoAdd(true);
+ l->setMargin(0);
+ _janus = new KJanusWidget(_interface->advancedFrame,0,KJanusWidget::TreeList);
+ _janus->setRootIsDecorated(false);
+ _janus->setShowIconsInTreeList(true);
+
+ QWidget *w;
+ QFrame *f;
+ QString label;
+ QPixmap icon;
+
+ for (int i=0;i<_interface->advancedTab->count();)
+ {
+ w = _interface->advancedTab->page(i);
+ label = _interface->advancedTab->label(i);
+
+ if (label == i18n("Security"))
+ icon = SmallIcon("password");
+ else
+ if (label == i18n("Logging"))
+ icon = SmallIcon("history");
+ else
+ if (label == i18n("Tuning"))
+ icon = SmallIcon("launch");
+ else
+ if (label == i18n("Filenames"))
+ icon = SmallIcon("folder");
+ else
+ if (label == i18n("Locking"))
+ icon = SmallIcon("lock");
+ else
+ if (label == i18n("Printing"))
+ icon = SmallIcon("fileprint");
+ else
+ if (label == i18n("Logon"))
+ icon = SmallIcon("kdmconfig");
+ else
+ if (label == i18n("Protocol"))
+ icon = SmallIcon("core");
+ else
+ if (label == i18n("Charset"))
+ icon = SmallIcon("charset");
+ else
+ if (label == i18n("Socket"))
+ icon = SmallIcon("socket");
+ else
+ if (label == i18n("SSL"))
+ icon = SmallIcon("encrypted");
+ else
+ if (label == i18n("Browsing"))
+ icon = SmallIcon("konqueror");
+ else
+ if (label == i18n("Misc"))
+ icon = SmallIcon("misc");
+ else
+ if (label == i18n("Commands"))
+ icon = SmallIcon("konsole");
+ else {
+ icon = QPixmap(16,16);
+ icon.fill();
+ }
+ //SmallIcon("empty2");
+
+ f = _janus->addPage( label,label,icon );
+ l = new QVBoxLayout(f);
+ l->setAutoAdd(true);
+ l->setMargin(0);
+
+ _interface->advancedTab->removePage(w);
+
+ w->reparent(f,QPoint(1,1),TRUE);
+
+ }
+
+ w = _interface->mainTab->page(5);
+ _interface->mainTab->removePage(w);
+ delete w;
+ _interface->advancedWarningPixLbl->setPixmap(DesktopIcon("messagebox_warning"));
+
+
+}
+
+void KcmSambaConf::editShare()
+{
+ ShareListViewItem* item = static_cast<ShareListViewItem*>(_interface->shareListView->selectedItem());
+
+ if (!item)
+ return;
+
+ ShareDlgImpl* dlg = new ShareDlgImpl(_interface,item->getShare());
+ connect(dlg, SIGNAL(changed()), this, SLOT(configChanged()));
+ dlg->exec();
+ item->updateShare();
+
+ disconnect(dlg, SIGNAL(changed()), this, SLOT(configChanged()));
+
+ delete dlg;
+
+}
+
+void KcmSambaConf::addShare()
+{
+ SambaShare* share = _sambaFile->newShare(_sambaFile->getUnusedName(),"");
+ ShareListViewItem* item = new ShareListViewItem( _interface->shareListView, share );
+ _interface->shareListView->setSelected(item,true);
+
+ ShareDlgImpl* dlg = new ShareDlgImpl(_interface,share);
+ dlg->exec();
+
+ if (dlg->result() == QDialog::Rejected )
+ removeShare();
+ else {
+ item->updateShare();
+ emit changed(true);
+ }
+
+ delete dlg;
+}
+
+void KcmSambaConf::removeShare()
+{
+ ShareListViewItem* item = static_cast<ShareListViewItem*>(_interface->shareListView->selectedItem());
+
+ if (!item)
+ return;
+
+ SambaShare *share = item->getShare();
+ delete item;
+ _sambaFile->removeShare(share);
+
+ emit changed(true);
+}
+
+
+void KcmSambaConf::editPrinter()
+{
+ ShareListViewItem* item = static_cast<ShareListViewItem*>(_interface->printerListView->selectedItem());
+
+ if (!item)
+ return;
+
+ PrinterDlgImpl* dlg = new PrinterDlgImpl(_interface,item->getShare());
+ dlg->exec();
+ item->updateShare();
+
+ delete dlg;
+
+ emit changed(true);
+}
+
+void KcmSambaConf::addPrinter()
+{
+ SambaShare* share = _sambaFile->newPrinter(_sambaFile->getUnusedName(),"");
+ ShareListViewItem* item = new ShareListViewItem( _interface->shareListView, share );
+ _interface->printerListView->setSelected(item,true);
+
+ PrinterDlgImpl* dlg = new PrinterDlgImpl(_interface,share);
+ dlg->exec();
+
+ if (dlg->result() == QDialog::Rejected )
+ removePrinter();
+ else
+ {
+ item->updateShare();
+ emit changed(true);
+ }
+
+ delete dlg;
+}
+
+void KcmSambaConf::removePrinter()
+{
+ ShareListViewItem* item = static_cast<ShareListViewItem*>(_interface->printerListView->selectedItem());
+
+ if (!item)
+ return;
+
+ SambaShare *share = item->getShare();
+ delete item;
+ _sambaFile->removeShare(share);
+
+ emit changed(true);
+}
+
+void KcmSambaConf::editShareDefaults()
+{
+ SambaShare* share = _sambaFile->getShare("global");
+
+ ShareDlgImpl* dlg = new ShareDlgImpl(_interface,share);
+ dlg->directoryGrp->setEnabled(false);
+ dlg->identifierGrp->setEnabled(false);
+ dlg->exec();
+ delete dlg;
+
+ emit changed(true);
+}
+
+void KcmSambaConf::editPrinterDefaults()
+{
+ SambaShare* share = _sambaFile->getShare("global");
+
+ PrinterDlgImpl* dlg = new PrinterDlgImpl(_interface,share);
+ dlg->printerGrp->setEnabled(false);
+ dlg->identifierGrp->setEnabled(false);
+ dlg->exec();
+
+ delete dlg;
+
+ emit changed(true);
+}
+
+
+
+void KcmSambaConf::loadBtnClicked() {
+ load( _interface->configUrlRq->url());
+}
+
+void KcmSambaConf::load(const QString & smbFile)
+{
+ kdDebug(5009) << "loading " << smbFile << endl;
+ _smbconf = smbFile;
+
+ if (_sambaFile)
+ delete _sambaFile;
+
+
+ _sambaFile = new SambaFile(_smbconf,false);
+
+ connect( _sambaFile, SIGNAL(completed()), this, SLOT(fillFields()));
+ connect( _sambaFile, SIGNAL(canceled(const QString &)), this, SLOT(loadCanceled(const QString &)));
+
+ _sambaFile->load();
+
+}
+
+void KcmSambaConf::loadCanceled(const QString & msg) {
+ KMessageBox::sorry(0L,msg,i18n("Error while opening file"));
+}
+
+void KcmSambaConf::fillFields()
+{
+ // Fill the ListViews
+
+ SambaShareList* list = _sambaFile->getSharedDirs();
+
+ SambaShare *share = 0L;
+ _interface->shareListView->clear();
+ for ( share = list->first(); share; share = list->next() )
+ {
+ new ShareListViewItem(_interface->shareListView, share);
+ }
+
+ share = 0L;
+ _interface->printerListView->clear();
+ list = _sambaFile->getSharedPrinters();
+ for ( share = list->first(); share; share = list->next() )
+ {
+ new ShareListViewItem(_interface->printerListView, share);
+ }
+
+ share = _sambaFile->getShare("global");
+
+ if ( !share)
+ share = _sambaFile->newShare("global");
+
+ Q_ASSERT( share);
+ if (_dictMngr)
+ delete _dictMngr;
+
+ _dictMngr = new DictManager(share);
+
+
+ _interface->configUrlRq->setURL( _smbconf );
+ _interface->configUrlRq->setMode( KFile::File | KFile::ExistingOnly);
+
+
+ loadBaseSettings( share );
+ loadSecurity( share );
+ loadTuning( share );
+ loadLogging( share );
+ loadDomain( share );
+ loadWins( share );
+ loadPrinting( share );
+ loadFilenames( share );
+ loadLocking( share );
+ loadProtocol( share );
+ loadSocket( share );
+ loadSSL( share );
+ loadLogon( share );
+ loadCharset( share );
+ loadWinbind( share );
+ loadNetbios( share );
+ loadVFS( share );
+ loadLDAP( share );
+ loadBrowsing( share );
+ loadCommands( share );
+ loadMisc( share );
+ loadDebug( share );
+
+ _dictMngr->load( share, false,true );
+
+ loadUserTab();
+
+ connect(_dictMngr, SIGNAL(changed()), this, SLOT(configChanged()));
+
+}
+
+
+void KcmSambaConf::loadBaseSettings(SambaShare* share)
+{
+
+ _dictMngr->add("workgroup", _interface->workgroupEdit);
+ _dictMngr->add("server string", _interface->serverStringEdit);
+ _dictMngr->add("netbios name", _interface->netbiosNameEdit);
+ _dictMngr->add("netbios aliases", _interface->netbiosAliasesEdit);
+ _dictMngr->add("netbios scope", _interface->netbiosScopeEdit);
+ _dictMngr->add("interfaces", _interface->interfacesEdit);
+
+ _interface->guestAccountCombo->insertStringList( getUnixUsers() );
+ setComboIndexToValue(_interface->guestAccountCombo,"guest account",share);
+
+ QString value = share->getValue("map to guest",false,true);
+
+ _interface->allowGuestLoginsChk->setChecked( value.lower()!="never" );
+
+ _dictMngr->add("guest ok",_interface->allowGuestLoginsChk);
+
+ _dictMngr->add("bind interfaces only",_interface->bindInterfacesOnlyChk);
+
+ QString s = share->getValue("security",false,true).lower();
+ int i = 0;
+
+ if ( s == "share" ) i = 0; else
+ if ( s == "user" ) i = 1; else
+ if ( s == "server" ) i = 2; else
+ if ( s == "domain" ) i = 3; else
+ if ( s == "ads" ) i = 4;
+
+ _interface->securityLevelBtnGrp->setButton(i);
+ _interface->updateSecurityLevelHelpLbl();
+
+}
+
+
+void KcmSambaConf::loadSecurity(SambaShare*)
+{
+
+ _dictMngr->add("map to guest",_interface->mapToGuestCombo,
+ new QStringList(QStringList() << "Never" << "Bad User" << "Bad Password" ));
+
+
+ _dictMngr->add("password server", _interface->passwordServerEdit);
+ _dictMngr->add("passwd chat", _interface->passwdChatEdit);
+ _dictMngr->add("root directory", _interface->rootDirectoryEdit);
+ _dictMngr->add("passdb backend", _interface->passdbBackendEdit);
+ _dictMngr->add("auth methods", _interface->authMethodsEdit);
+ _dictMngr->add("realm", _interface->realmEdit);
+
+ _dictMngr->add("password level", _interface->passwordLevelSpin);
+ _dictMngr->add("min passwd length", _interface->minPasswdLengthSpin);
+ _dictMngr->add("username level", _interface->usernameLevelSpin);
+ _dictMngr->add("algorithmic rid base", _interface->algorithmicRidBaseSpin);
+ _dictMngr->add("passwd chat timeout", _interface->passwdChatTimeoutSpin);
+
+ _dictMngr->add("encrypt passwords",_interface->encryptPasswordsChk);
+ _dictMngr->add("update encrypted",_interface->updateEncryptedChk);
+ _dictMngr->add("passwd chat debug",_interface->passwdChatDebugChk);
+ _dictMngr->add("unix password sync",_interface->unixPasswordSyncChk);
+ _dictMngr->add("use rhosts",_interface->useRhostsChk);
+ _dictMngr->add("hide local users",_interface->hideLocalUsersChk);
+
+
+ _dictMngr->add("allow trusted domains",_interface->allowTrustedDomainsChk);
+ _dictMngr->add("obey pam restrictions",_interface->obeyPamRestrictionsChk);
+ _dictMngr->add("pam password change",_interface->pamPasswordChangeChk);
+ _dictMngr->add("restrict anonymous",_interface->restrictAnonymousChk);
+ _dictMngr->add("null passwords",_interface->nullPasswordsChk);
+ _dictMngr->add("paranoid server security",_interface->paranoidServerSecurityChk);
+
+ _dictMngr->add("smb passwd file",_interface->smbPasswdFileUrlRq);
+ _dictMngr->add("passwd program",_interface->passwdProgramUrlRq);
+ _dictMngr->add("username map",_interface->usernameMapUrlRq);
+ _dictMngr->add("hosts equiv",_interface->hostsEquivUrlRq);
+ _dictMngr->add("private dir",_interface->privateDirUrlRq);
+
+ // Authentification
+
+ _dictMngr->add("lanman auth",_interface->lanmanAuthChk);
+ _dictMngr->add("ntlm auth",_interface->ntlmAuthChk);
+ _dictMngr->add("use spnego",_interface->useSpnegoChk);
+ _dictMngr->add("server schannel",_interface->serverSchannelCombo,
+ new QStringList(QStringList() << "Yes" << "No" << "Auto" ));
+ _dictMngr->add("server signing",_interface->serverSigningCombo,
+ new QStringList(QStringList() << "Auto" << "Mandatory" << "Disabled" ));
+
+ _dictMngr->add("client lanman auth",_interface->clientLanmanAuthChk);
+ _dictMngr->add("client plaintext auth",_interface->clientPlaintextAuthChk);
+ _dictMngr->add("client ntlmv2 auth",_interface->clientNTLMv2AuthChk);
+ _dictMngr->add("client use spnego",_interface->clientUseSpnegoChk);
+ _dictMngr->add("client schannel",_interface->clientSchannelCombo,
+ new QStringList(QStringList() << "Yes" << "No" << "Auto" ));
+ _dictMngr->add("client signing",_interface->clientSigningCombo,
+ new QStringList(QStringList() << "Auto" << "Mandatory" << "Disabled" ));
+
+
+
+
+
+}
+
+void KcmSambaConf::loadLogging(SambaShare* )
+{
+ _dictMngr->add("log file",_interface->logFileUrlRq);
+
+ _dictMngr->add("max log size", _interface->maxLogSizeSpin);
+ _dictMngr->add("syslog", _interface->syslogSpin);
+ _dictMngr->add("log level", _interface->logLevelEdit);
+
+ _dictMngr->add("status",_interface->statusChk);
+ _dictMngr->add("debug uid",_interface->debugUidChk);
+ _dictMngr->add("debug pid",_interface->debugPidChk);
+ _dictMngr->add("debug hires timestamp",_interface->microsecondsChk);
+ _dictMngr->add("syslog only",_interface->syslogOnlyChk);
+ _dictMngr->add("debug timestamp",_interface->timestampChk);
+ _dictMngr->add("use mmap",_interface->useMmapChk);
+
+
+}
+
+void KcmSambaConf::loadTuning(SambaShare* )
+{
+ _dictMngr->add("change notify timeout", _interface->changeNotifyTimeoutSpin);
+ _dictMngr->add("deadtime", _interface->deadtimeSpin);
+ _dictMngr->add("keepalive", _interface->keepaliveSpin);
+ _dictMngr->add("lpq cache time", _interface->lpqCacheTimeSpin);
+ _dictMngr->add("max open files", _interface->maxOpenFilesSpin);
+ _dictMngr->add("read size", _interface->readSizeSpin);
+ _dictMngr->add("max disk size", _interface->maxDiskSizeSpin);
+ _dictMngr->add("stat cache size", _interface->statCacheSizeSpin);
+ _dictMngr->add("max smbd processes", _interface->maxSmbdProcessesSpin);
+ _dictMngr->add("name cache timeout", _interface->nameCacheTimeoutSpin);
+
+ _dictMngr->add("getwd cache",_interface->getwdCacheChk);
+ _dictMngr->add("use mmap",_interface->useMmapChk);
+ _dictMngr->add("hostname lookups",_interface->hostnameLookupsChk);
+ _dictMngr->add("kernel change notify",_interface->kernelChangeNotifyChk);
+
+}
+
+void KcmSambaConf::loadLocking(SambaShare* )
+{
+ _dictMngr->add("kernel oplocks",_interface->kernelOplocksChk);
+ _dictMngr->add("lock directory",_interface->lockDirectoryUrlRq);
+ _dictMngr->add("pid directory",_interface->pidDirectoryUrlRq);
+ _dictMngr->add("oplock break wait time",_interface->oplockBreakWaitTimeSpin);
+ _dictMngr->add("lock spin time",_interface->lockSpinTimeSpin);
+ _dictMngr->add("lock spin count",_interface->lockSpinCountSpin);
+
+
+}
+
+void KcmSambaConf::loadDomain(SambaShare*)
+{
+ _dictMngr->add("preferred master",_interface->preferredMasterChk);
+ _dictMngr->add("local master",_interface->localMasterChk);
+ _dictMngr->add("domain master",_interface->domainMasterChk);
+ _dictMngr->add("domain logons",_interface->domainLogonsChk);
+ _dictMngr->add("machine password timeout", _interface->machinePasswordTimeoutSpin);
+ _dictMngr->add("os level", _interface->osLevelSpin);
+ _dictMngr->add("domain admin group", _interface->domainAdminGroupEdit);
+ _dictMngr->add("domain guest group", _interface->domainGuestGroupEdit);
+
+}
+
+void KcmSambaConf::loadWins(SambaShare* share)
+{
+ _dictMngr->add("wins proxy",_interface->winsProxyChk);
+ _dictMngr->add("dns proxy",_interface->dnsProxyChk);
+ _dictMngr->add("wins server", _interface->winsServerEdit);
+ _dictMngr->add("wins hook", _interface->winsHookEdit);
+ _interface->winsSupportRadio->setChecked( share->getBoolValue("wins support",false,true));
+ _interface->otherWinsRadio->setChecked( !share->getValue("wins server",false,true).isEmpty() );
+}
+
+
+void KcmSambaConf::loadPrinting(SambaShare* )
+{
+ _dictMngr->add("load printers",_interface->loadPrintersChk);
+ _dictMngr->add("disable spoolss",_interface->disableSpoolssChk);
+ _dictMngr->add("show add printer wizard",_interface->showAddPrinterWizardChk);
+
+ _dictMngr->add("addprinter command", _interface->addprinterCommandEdit);
+ _dictMngr->add("deleteprinter command", _interface->deleteprinterCommandEdit);
+ _dictMngr->add("enumports command", _interface->enumportsCommandEdit);
+
+ _dictMngr->add("printcap name",_interface->printcapNameUrlRq);
+ _dictMngr->add("os2 driver map",_interface->os2DriverMapUrlRq);
+ _dictMngr->add("printer driver file",_interface->printerDriverFileUrlRq);
+
+ _dictMngr->add("total print jobs", _interface->totalPrintJobsSpin);
+}
+
+void KcmSambaConf::loadFilenames(SambaShare* )
+{
+ _dictMngr->add("strip dot",_interface->stripDotChk);
+ _dictMngr->add("stat cache",_interface->statCacheChk);
+
+
+ _dictMngr->add("mangled stack", _interface->mangledStackSpin);
+ _dictMngr->add("mangle prefix", _interface->manglePrefixSpin);
+
+}
+
+void KcmSambaConf::loadProtocol(SambaShare*)
+{
+ // Protocol
+
+ _dictMngr->add("write raw",_interface->writeRawChk);
+ _dictMngr->add("read raw",_interface->readRawChk);
+ _dictMngr->add("read bmpx",_interface->readBmpxChk);
+ _dictMngr->add("large readwrite",_interface->largeReadWriteChk);
+ _dictMngr->add("nt smb support",_interface->ntSmbSupportChk);
+ _dictMngr->add("nt pipe support",_interface->ntPipeSupportChk);
+ _dictMngr->add("time server",_interface->timeServerChk);
+ _dictMngr->add("unix extensions",_interface->unixExtensionsChk);
+
+ _dictMngr->add("max mux", _interface->maxMuxSpin);
+ _dictMngr->add("max xmit", _interface->maxXmitSpin);
+ _dictMngr->add("max ttl", _interface->maxTtlSpin);
+ _dictMngr->add("max wins ttl", _interface->maxWinsTtlSpin);
+ _dictMngr->add("min wins ttl", _interface->minWinsTtlSpin);
+
+ _dictMngr->add("announce version", _interface->announceVersionEdit);
+ _dictMngr->add("name resolve order", _interface->nameResolveOrderEdit);
+ _dictMngr->add("smb ports", _interface->smbPortsEdit);
+
+ _dictMngr->add("announce as", _interface->announceAsCombo,
+ new QStringList(QStringList() << "NT" << "NT workstation" << "win95" << "WfW"));
+
+ _dictMngr->add("protocol", _interface->protocolCombo,
+ new QStringList(QStringList() << "NT" << "lanman2" << "lanman1" << "core" << "coreplus" ));
+
+ _dictMngr->add("max protocol", _interface->maxProtocolCombo,
+ new QStringList(QStringList() << "NT" << "lanman2" << "lanman1" << "core" << "coreplus"));
+
+ _dictMngr->add("min protocol", _interface->minProtocolCombo,
+ new QStringList(QStringList() << "NT" << "lanman2" << "lanman1" << "core" << "coreplus"));
+
+}
+
+void KcmSambaConf::loadSocket(SambaShare* share)
+{
+ // SOCKET options
+
+ _dictMngr->add("socket address", _interface->socketAddressEdit);
+
+ QString s = share->getValue("socket options");
+ s = s.simplifyWhiteSpace();
+
+ // The string s has now the form :
+ // "OPTION1=1 OPTION2=0 OPTION3=2234 OPTION4"
+
+ _interface->SO_KEEPALIVEChk->setChecked(getSocketBoolValue( s, "SO_KEEPALIVE") );
+ _interface->SO_REUSEADDRChk->setChecked( getSocketBoolValue( s, "SO_REUSEADDR") );
+ _interface->SO_BROADCASTChk->setChecked( getSocketBoolValue( s, "SO_BROADCAST") );
+ _interface->TCP_NODELAYChk->setChecked( getSocketBoolValue( s, "TCP_NODELAY") );
+ _interface->IPTOS_LOWDELAYChk->setChecked( getSocketBoolValue( s, "IPTOS_LOWDELAY") );
+ _interface->IPTOS_THROUGHPUTChk->setChecked( getSocketBoolValue( s, "IPTOS_THROUGHPUT") );
+
+ _interface->SO_SNDBUFChk->setChecked( getSocketBoolValue( s, "SO_SNDBUF") );
+ _interface->SO_RCVBUFChk->setChecked( getSocketBoolValue( s, "SO_RCVBUF") );
+ _interface->SO_SNDLOWATChk->setChecked( getSocketBoolValue( s, "SO_SNDLOWAT") );
+ _interface->SO_RCVLOWATChk->setChecked( getSocketBoolValue( s, "SO_RCVLOWAT") );
+
+ _interface->SO_SNDBUFSpin->setValue( getSocketIntValue( s, "SO_SNDBUF") );
+ _interface->SO_RCVBUFSpin->setValue( getSocketIntValue( s, "SO_RCVBUF") );
+ _interface->SO_SNDLOWATSpin->setValue( getSocketIntValue( s, "SO_SNDLOWAT") );
+ _interface->SO_RCVLOWATSpin->setValue( getSocketIntValue( s, "SO_RCVLOWAT") );
+
+}
+
+void KcmSambaConf::loadSSL(SambaShare*)
+{
+ // SSL
+
+ _dictMngr->add("ssl version",_interface->sslVersionCombo,
+ new QStringList(QStringList() << "ssl2" << "ssl3" << "ssl2or3" << "tls1" ));
+
+ _dictMngr->add("ssl",_interface->sslChk);
+ _dictMngr->add("ssl require server cert",_interface->sslRequireServercertChk);
+ _dictMngr->add("ssl compatibility",_interface->sslCompatibilityChk);
+ _dictMngr->add("ssl require clientcert",_interface->sslRequireClientcertChk);
+
+ _dictMngr->add("ssl hosts edit", _interface->sslHostsEdit);
+ _dictMngr->add("ssl hosts resign", _interface->sslHostsResignEdit);
+ _dictMngr->add("ssl egd socket", _interface->sslEgdSocketEdit);
+ _dictMngr->add("ssl ciphers edit", _interface->sslCiphersEdit);
+
+ _dictMngr->add("ssl CA cert dir",_interface->sslCACertDirUrlRq);
+ _dictMngr->add("ssl CA cert file",_interface->sslCACertFileUrlRq);
+ _dictMngr->add("ssl entropy file",_interface->sslEntropyFileUrlRq);
+ _dictMngr->add("ssl client cert",_interface->sslClientCertUrlRq);
+ _dictMngr->add("ssl client key",_interface->sslClientKeyUrlRq);
+ _dictMngr->add("ssl server cert",_interface->sslServerCertUrlRq);
+ _dictMngr->add("ssl server key",_interface->sslServerKeyUrlRq);
+
+ _dictMngr->add("ssl entropy bytes", _interface->sslEntropyBytesSpin);
+
+}
+
+void KcmSambaConf::loadLogon(SambaShare* )
+{
+ // Logon
+
+ _dictMngr->add("add user script", _interface->addUserScriptEdit);
+ _dictMngr->add("add group script", _interface->addGroupScriptEdit);
+ _dictMngr->add("add machine script", _interface->addMachineScriptEdit);
+ _dictMngr->add("add user to group script", _interface->addUserToGroupScriptEdit);
+ _dictMngr->add("delete user script", _interface->deleteUserScriptEdit);
+ _dictMngr->add("delete group script", _interface->deleteGroupScriptEdit);
+ _dictMngr->add("delete user from group script", _interface->deleteUserFromGroupScriptEdit);
+ _dictMngr->add("set primary group script", _interface->addGroupScriptEdit);
+ _dictMngr->add("shutdown script", _interface->shutdownScriptEdit);
+ _dictMngr->add("abort shutdown script", _interface->abortShutdownScriptEdit);
+ _dictMngr->add("logon script", _interface->logonScriptEdit);
+ _dictMngr->add("logon drive", _interface->logonDriveEdit);
+ _dictMngr->add("logon path",_interface->logonPathUrlRq);
+ _dictMngr->add("logon home",_interface->logonHomeUrlRq);
+
+}
+
+
+void KcmSambaConf::loadCharset(SambaShare* )
+{
+ _dictMngr->add("coding system", _interface->codingSystemEdit);
+ _dictMngr->add("client code page", _interface->clientCodePageEdit);
+ _dictMngr->add("code page directory",_interface->codePageDirUrlRq);
+ _dictMngr->add("display charset", _interface->displayCharsetEdit);
+ _dictMngr->add("unix charset", _interface->unixCharsetEdit);
+ _dictMngr->add("dos charset", _interface->dosCharsetEdit);
+ _dictMngr->add("character set", _interface->characterSetEdit);
+ _dictMngr->add("valid chars", _interface->validCharsEdit);
+
+ _dictMngr->add("unicode",_interface->unicodeChk);
+}
+
+void KcmSambaConf::loadWinbind(SambaShare* )
+{
+ _dictMngr->add("winbind uid", _interface->winbindUidEdit);
+ _dictMngr->add("winbind gid", _interface->winbindGidEdit);
+ _dictMngr->add("template homedir", _interface->templateHomedirEdit);
+ _dictMngr->add("template shell", _interface->templateShellEdit);
+ _dictMngr->add("winbind separator", _interface->winbindSeparatorEdit);
+ _dictMngr->add("template primary group", _interface->templatePrimaryGroupEdit);
+
+ _dictMngr->add("winbind cache time", _interface->winbindCacheTimeSpin);
+ _dictMngr->add("acl compatibility",_interface->aclCompatibilityCombo,
+ new QStringList(QStringList() << "winnt" << "win2k" << ""));
+
+ _dictMngr->add("winbind enum users",_interface->winbindEnumUsersChk);
+ _dictMngr->add("winbind enum groups",_interface->winbindEnumGroupsChk);
+ _dictMngr->add("winbind use default domain",_interface->winbindUseDefaultDomainChk);
+ _dictMngr->add("winbind trusted domains only",_interface->winbindTrustedDomainsOnlyChk);
+ _dictMngr->add("winbind enable local accounts",_interface->winbindEnableLocalAccountsChk);
+ _dictMngr->add("winbind nested groups",_interface->winbindNestedGroupsChk);
+
+
+}
+
+void KcmSambaConf::loadNetbios(SambaShare* )
+{
+ _dictMngr->add("disable netbios",_interface->disableNetbiosChk);
+
+ _dictMngr->add("netbios aliases", _interface->netbiosAliasesEdit);
+ _dictMngr->add("netbios scope", _interface->netbiosScopeEdit);
+}
+
+void KcmSambaConf::loadVFS(SambaShare*)
+{
+ _dictMngr->add("host msdfs",_interface->hostMsdfsChk);
+
+}
+
+void KcmSambaConf::loadLDAP(SambaShare*)
+{
+ _dictMngr->add("ldap suffix", _interface->ldapSuffixEdit);
+ _dictMngr->add("ldap machine suffix", _interface->ldapMachineSuffixEdit);
+ _dictMngr->add("ldap user suffix", _interface->ldapUserSuffixEdit);
+ _dictMngr->add("ldap group suffix", _interface->ldapGroupSuffixEdit);
+ _dictMngr->add("ldap idmap suffix", _interface->ldapIdmapSuffixEdit);
+ _dictMngr->add("ldap filter", _interface->ldapFilterEdit);
+ _dictMngr->add("ldap admin dn", _interface->ldapAdminDnEdit);
+ _dictMngr->add("idmap backend", _interface->idmapBackendEdit);
+
+ _dictMngr->add("ldap replication sleep",_interface->ldapReplicationSleepSpin);
+
+ _dictMngr->add("ldap delete dn",_interface->ldapDeleteDnChk);
+
+ _dictMngr->add("ldap ssl", _interface->ldapSslCombo,
+ new QStringList(QStringList() << "No" << "Start_tls" << "Yes"));
+
+ _dictMngr->add("ldap sync", _interface->ldapSyncCombo,
+ new QStringList(QStringList() << "Yes" << "No" << "Only"));
+
+
+}
+
+void KcmSambaConf::loadBrowsing(SambaShare*)
+{
+ _dictMngr->add("enhanced browsing",_interface->enhancedBrowsingChk);
+ _dictMngr->add("browse list",_interface->browseListChk);
+ _dictMngr->add("lm interval", _interface->lmIntervalSpin);
+ _dictMngr->add("remote browse sync", _interface->remoteBrowseSyncEdit);
+ _dictMngr->add("preload", _interface->preloadEdit);
+
+ _dictMngr->add("lm announce", _interface->lmAnnounceCombo,
+ new QStringList(QStringList() << "Yes" << "No" << "Auto"));
+}
+
+void KcmSambaConf::loadCommands(SambaShare*)
+{
+ _dictMngr->add("add share command", _interface->addShareCommandEdit);
+ _dictMngr->add("change share command", _interface->changeShareCommandEdit);
+ _dictMngr->add("delete share command", _interface->deleteShareCommandEdit);
+ _dictMngr->add("message command", _interface->messageCommandEdit);
+ _dictMngr->add("dfree command", _interface->dfreeCommandEdit);
+ _dictMngr->add("set quota command", _interface->setQuotaCommandEdit);
+ _dictMngr->add("get quota command", _interface->getQuotaCommandEdit);
+ _dictMngr->add("panic action", _interface->panicActionEdit);
+
+}
+
+void KcmSambaConf::setComboIndexToValue(QComboBox* box, const QString & value, SambaShare* share)
+{
+ int i = box->listBox()->index(box->listBox()->findItem(share->getValue(value,false,true),Qt::ExactMatch));
+ box->setCurrentItem(i);
+}
+
+
+void KcmSambaConf::loadMisc(SambaShare*)
+{
+ _dictMngr->add("preload modules", _interface->preloadModulesEdit);
+ _dictMngr->add("default service", _interface->defaultServiceEdit);
+ _dictMngr->add("remote announce", _interface->remoteAnnounceEdit);
+ _dictMngr->add("homedir map", _interface->homedirMapEdit);
+ _dictMngr->add("source environment", _interface->sourceEnvironmentEdit);
+
+ _dictMngr->add("utmp directory",_interface->utmpDirectoryUrlRq);
+ _dictMngr->add("wtmp directory",_interface->wtmpDirectoryUrlRq);
+
+ _dictMngr->add("NIS homedir", _interface->nisHomedirChk);
+ _dictMngr->add("time offset", _interface->timeOffsetSpin);
+}
+
+void KcmSambaConf::loadDebug(SambaShare*) {
+ _dictMngr->add("nt status support", _interface->ntStatusSupportChk);
+}
+
+
+
+void KcmSambaConf::loadUserTab()
+{
+ // Remote editing of users isn't supported yet
+ if ( _sambaFile->isRemoteFile()) {
+ _interface->mainTab->page(3)->setEnabled(false);
+ return;
+ } else
+ _interface->mainTab->page(3)->setEnabled(true);
+
+
+ SambaShare* share = _sambaFile->getShare("global");
+
+ QStringList added;
+
+ SmbPasswdFile passwd( KURL(share->getValue("smb passwd file",true,true)) );
+ SambaUserList sambaList = passwd.getSambaUserList();
+ _interface->sambaUsersListView->clear();
+ SambaUser *user;
+ for ( user = sambaList.first(); user; user = sambaList.next() )
+ {
+ QMultiCheckListItem* item = new QMultiCheckListItem(_interface->sambaUsersListView);
+ item->setText(0,user->name);
+ item->setText(1,QString::number(user->uid));
+ item->setOn(COL_DISABLED,user->isDisabled);
+ item->setOn(COL_NOPASSWORD,user->hasNoPassword);
+
+ if ( ! _interface->nullPasswordsChk->isOn())
+ item->setDisabled(COL_NOPASSWORD, true);
+
+ added.append(user->name);
+
+
+ }
+
+ _interface->unixUsersListView->clear();
+
+ UnixUserList unixList = getUnixUserList();
+ UnixUser *unixUser;
+ for ( unixUser = unixList.first(); unixUser; unixUser = unixList.next() )
+ {
+ QStringList::Iterator it;
+
+ it=added.find(unixUser->name);
+ if (it == added.end())
+ new KListViewItem(_interface->unixUsersListView, unixUser->name, QString::number(unixUser->uid));
+ }
+
+ _interface->unixUsersListView->setSelectionMode(QListView::Extended);
+ _interface->sambaUsersListView->setSelectionMode(QListView::Extended);
+
+}
+
+void KcmSambaConf::joinADomainBtnClicked() {
+ JoinDomainDlg *dlg = new JoinDomainDlg();
+ dlg->domainEdit->setText(_interface->workgroupEdit->text());
+ dlg->domainControllerEdit->setText(_interface->passwordServerEdit->text());
+
+ int result = dlg->exec();
+
+ if (result == QDialog::Accepted) {
+ SmbPasswdFile passwd;
+ if (!passwd.joinADomain(dlg->domainEdit->text(),
+ dlg->domainControllerEdit->text(),
+ dlg->usernameEdit->text(),
+ dlg->passwordEdit->text()))
+ {
+ KMessageBox::sorry(0,i18n("Joining the domain %1 failed.").arg(dlg->domainEdit->text()));
+ }
+ }
+ delete dlg;
+}
+
+
+void KcmSambaConf::slotMouseButtonPressed(int,QListViewItem* item,const QPoint &,int col) {
+ if (col < 2)
+ return;
+
+ SambaShare* share = _sambaFile->getShare("global");
+ SmbPasswdFile passwd( KURL(share->getValue("smb passwd file",true,true)) );
+ QMultiCheckListItem* i = static_cast<QMultiCheckListItem*>(item);
+ SambaUser user( item->text(0), item->text(1).toInt() );
+ user.isDisabled = i->isOn(COL_DISABLED);
+ user.hasNoPassword = i->isOn(COL_NOPASSWORD);
+
+ if (!i->isDisabled(col))
+ {
+
+ switch(col) {
+ case COL_DISABLED :
+ if (i->isOn(col))
+ passwd.enableUser(user);
+ else
+ passwd.disableUser(user);
+ break;
+ case COL_NOPASSWORD :
+ if (i->isOn(col)) {
+ sambaUserPasswordBtnClicked();
+ return; // the item is already set off by the btnClicked method
+ }
+ else
+ passwd.setNoPassword(user);
+ break;
+ }
+
+ i->toggle(col);
+ }
+}
+
+void KcmSambaConf::nullPasswordsEnabled(bool b)
+{
+ QListViewItemIterator it( _interface->sambaUsersListView );
+ for ( ; it.current(); ++it ) {
+ QMultiCheckListItem* sambaItem = static_cast<QMultiCheckListItem*>(it.current());
+ sambaItem->setDisabled(COL_NOPASSWORD,!b);
+
+ }
+}
+
+void KcmSambaConf::saveUserTab()
+{
+}
+
+void KcmSambaConf::addSambaUserBtnClicked()
+{
+ QPtrList<QListViewItem> list = _interface->unixUsersListView->selectedItems();
+
+ SambaShare* share = _sambaFile->getShare("global");
+ SmbPasswdFile passwd( KURL(share->getValue("smb passwd file",true,true)) );
+
+ QListViewItem* item;
+ for ( item = list.first(); item; item = list.first() )
+ {
+ SambaUser user( item->text(0), item->text(1).toInt() );
+
+ QCString password;
+ int passResult = KPasswordDialog::getNewPassword(password,
+ i18n("<qt>Please enter a password for the user <b>%1</b></qt>").arg(user.name));
+ if (passResult != KPasswordDialog::Accepted) {
+ list.remove(item);
+ continue;
+ }
+
+ if (!passwd.addUser(user,password))
+ {
+ KMessageBox::sorry(0,i18n("<qt>Adding the user <b>%1</b> to the Samba user database failed.</qt>").arg(user.name));
+ break;
+ }
+
+ QMultiCheckListItem* sambaItem = new QMultiCheckListItem(_interface->sambaUsersListView);
+ sambaItem->setText(0,user.name);
+ sambaItem->setText(1,QString::number(user.uid));
+ sambaItem->setOn(COL_DISABLED,false);
+ sambaItem->setOn(COL_NOPASSWORD,false);
+ if ( ! _interface->nullPasswordsChk->isOn())
+ sambaItem->setDisabled(COL_NOPASSWORD, true);
+
+
+ list.remove(item);
+ delete item;
+ }
+}
+
+void KcmSambaConf::removeSambaUserBtnClicked()
+{
+ QPtrList<QListViewItem> list = _interface->sambaUsersListView->selectedItems();
+
+ SambaShare* share = _sambaFile->getShare("global");
+ SmbPasswdFile passwd( KURL(share->getValue("smb passwd file",true,true)) );
+
+ QListViewItem* item;
+ for ( item = list.first(); item; item = list.first() )
+ {
+ SambaUser user( item->text(0), item->text(1).toInt() );
+ if (!passwd.removeUser(user))
+ {
+ KMessageBox::sorry(0,i18n("Removing the user %1 from the Samba user database failed.").arg(user.name));
+ continue;
+ }
+
+ new KListViewItem(_interface->unixUsersListView, item->text(0), item->text(1));
+ list.remove(item);
+ delete item;
+ }
+}
+
+void KcmSambaConf::sambaUserPasswordBtnClicked()
+{
+ QPtrList<QListViewItem> list = _interface->sambaUsersListView->selectedItems();
+
+ SambaShare* share = _sambaFile->getShare("global");
+ SmbPasswdFile passwd( KURL(share->getValue("smb passwd file",true,true)) );
+
+ QListViewItem* item;
+ for ( item = list.first(); item; item = list.next() )
+ {
+ SambaUser user( item->text(0), item->text(1).toInt() );
+
+ QCString password;
+ int passResult = KPasswordDialog::getNewPassword(password,
+ i18n("Please enter a password for the user %1").arg(user.name));
+ if (passResult != KPasswordDialog::Accepted)
+ return;
+
+ if (!passwd.changePassword(user,password))
+ {
+ KMessageBox::sorry(0,i18n("Changing the password of the user %1 failed.").arg(user.name));
+ } else {
+ static_cast<QMultiCheckListItem*>(item)->setOn(COL_NOPASSWORD,false);
+ }
+
+ }
+
+}
+
+
+void KcmSambaConf::defaults() {
+ // insert your default settings code here...
+ emit changed(true);
+}
+
+#define FILESHARECONF "/etc/security/fileshare.conf"
+
+void KcmSambaConf::save() {
+ SambaShare *share = _sambaFile->getShare("global");
+ assert(share);
+
+ kdDebug(5009) << "saving ... " << endl;
+
+ // Base settings
+
+ _smbconf = _interface->configUrlRq->url();
+ KSimpleConfig config(QString::fromLatin1(FILESHARECONF),false);
+ config.writeEntry("SMBCONF",_smbconf);
+ config.sync();
+
+ // Security
+
+ QString s;
+
+ switch (_interface->securityLevelBtnGrp->id(_interface->securityLevelBtnGrp->selected())) {
+ case 0 : s = "share";break;
+ case 1 : s = "user";break;
+ case 2 : s = "server";break;
+ case 3 : s = "domain";break;
+ case 4 : s = "ads";break;
+ }
+
+ share->setValue("security",s);
+
+
+// share->setValue("security",_interface->securityLevelCombo->currentText());
+ share->setValue("map to guest",_interface->mapToGuestCombo->currentText());
+
+ share->setValue("guest account",_interface->guestAccountCombo->currentText());
+
+ if (_interface->otherWinsRadio->isChecked())
+ share->setValue("wins server",_interface->winsServerEdit->text(), false,true);
+ else
+ share->setValue("wins server",QString(""), false,true);
+
+ // socket options
+
+ s = socketOptions();
+ share->setValue("socket options",s,false,true);
+
+
+ _dictMngr->save( share,false,true );
+
+ _sambaFile->slotApply();
+
+}
+
+bool KcmSambaConf::getSocketBoolValue( const QString & str, const QString & name )
+{
+ QString s = str;
+ int i = s.find(name ,0,false);
+
+ if (i > -1)
+ {
+ s = s.remove(0,i+1+QString(name).length());
+
+ if ( s.startsWith("=") )
+ {
+ s = s.remove(0,1);
+ if ( s.startsWith("0"))
+ return false;
+ else
+ return true;
+ }
+ else
+ return true;
+ }
+
+ return false;
+}
+
+int KcmSambaConf::getSocketIntValue( const QString & str, const QString & name )
+{
+ QString s = str;
+ int i = s.find(name ,0,false);
+
+ if (i > -1)
+ {
+ s = s.remove(0,i+name.length());
+ if ( s.startsWith("=") )
+ {
+ s = s.remove(0,1);
+
+ i = s.find(" ");
+ if (i < 0)
+ i = s.length();
+ else
+ i++;
+
+ s = s.left( i );
+
+ return s.toInt();
+ }
+ else
+ return 0;
+ }
+
+ return 0;
+}
+
+QString KcmSambaConf::socketOptions()
+{
+ QString s = "";
+
+ if ( _interface->SO_KEEPALIVEChk->isChecked() )
+ s+="SO_KEEPALIVE ";
+
+ if ( _interface->SO_REUSEADDRChk->isChecked() )
+ s+= "SO_REUSEADDR ";
+
+ if ( _interface->SO_BROADCASTChk->isChecked() )
+ s+= "SO_BROADCAST ";
+
+ if ( _interface->TCP_NODELAYChk->isChecked() )
+ s+= "TCP_NODELAY ";
+
+ if ( _interface->IPTOS_LOWDELAYChk->isChecked() )
+ s+= "IPTOS_LOWDELAY ";
+
+ if ( _interface->IPTOS_THROUGHPUTChk->isChecked() )
+ s+= "IPTOS_THROUGHPUT ";
+
+ if ( _interface->SO_SNDBUFChk->isChecked() ) {
+ s+= "SO_SNDBUF=";
+ s+= QString::number( _interface->SO_SNDBUFSpin->value() );
+ s+= " ";
+ }
+
+ if ( _interface->SO_RCVBUFChk->isChecked() ) {
+ s+= "SO_RCVBUF=";
+ s+= QString::number( _interface->SO_RCVBUFSpin->value() );
+ s+= " ";
+ }
+
+ if ( _interface->SO_SNDLOWATChk->isChecked() ) {
+ s+= "SO_SNDLOWAT=";
+ s+= QString::number( _interface->SO_SNDLOWATSpin->value() );
+ s+= " ";
+ }
+
+ if ( _interface->SO_RCVLOWATChk->isChecked() ) {
+ s+= "SO_RCVLOWAT=";
+ s+= QString::number( _interface->SO_RCVLOWATSpin->value() );
+ s+= " ";
+
+ }
+
+ return s;
+
+}
+
+
+int KcmSambaConf::buttons () {
+ // KCModule::Default|KCModule::Apply|KCModule::Help;
+ return KCModule::Apply;
+}
+
+void KcmSambaConf::configChanged() {
+ // insert your saving code here...
+ emit changed(true);
+}
+
+QString KcmSambaConf::quickHelp() const
+{
+ return i18n("<h1>Samba Configuration</h1> here you can configure your SAMBA server.");
+}
+
+// ------------------------------------------------------------------------
+
+extern "C"
+{
+ KDE_EXPORT KCModule *create_KcmSambaConf(QWidget *parent, const char *name)
+ {
+ KGlobal::locale()->insertCatalogue("kfileshare");
+ return new KcmSambaConf(parent, name);
+ }
+}
+
+#include "kcmsambaconf.moc"