summaryrefslogtreecommitdiffstats
path: root/filesharing
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
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')
-rw-r--r--filesharing/Makefile.am5
-rw-r--r--filesharing/advanced/Makefile.am1
-rw-r--r--filesharing/advanced/kcm_sambaconf/ChangeLog53
-rw-r--r--filesharing/advanced/kcm_sambaconf/Makefile.am46
-rw-r--r--filesharing/advanced/kcm_sambaconf/TODO2
-rw-r--r--filesharing/advanced/kcm_sambaconf/common.cpp72
-rw-r--r--filesharing/advanced/kcm_sambaconf/common.h40
-rw-r--r--filesharing/advanced/kcm_sambaconf/dictmanager.cpp216
-rw-r--r--filesharing/advanced/kcm_sambaconf/dictmanager.h80
-rw-r--r--filesharing/advanced/kcm_sambaconf/expertuserdlg.ui263
-rw-r--r--filesharing/advanced/kcm_sambaconf/filemodedlg.ui430
-rw-r--r--filesharing/advanced/kcm_sambaconf/filemodedlgimpl.cpp118
-rw-r--r--filesharing/advanced/kcm_sambaconf/filemodedlgimpl.h64
-rw-r--r--filesharing/advanced/kcm_sambaconf/groupselectdlg.ui445
-rw-r--r--filesharing/advanced/kcm_sambaconf/groupselectdlg.ui.h63
-rw-r--r--filesharing/advanced/kcm_sambaconf/hi16-app-kcmsambaconf.pngbin0 -> 499 bytes
-rw-r--r--filesharing/advanced/kcm_sambaconf/hiddenfileview.cpp610
-rw-r--r--filesharing/advanced/kcm_sambaconf/hiddenfileview.h140
-rw-r--r--filesharing/advanced/kcm_sambaconf/joindomaindlg.ui239
-rw-r--r--filesharing/advanced/kcm_sambaconf/joindomaindlg.ui.h17
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcminterface.ui8507
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcminterface.ui.h124
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui1211
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui.h47
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcmsambaconf.cpp1442
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcmsambaconf.desktop97
-rw-r--r--filesharing/advanced/kcm_sambaconf/kcmsambaconf.h159
-rw-r--r--filesharing/advanced/kcm_sambaconf/konqinterface.ui543
-rw-r--r--filesharing/advanced/kcm_sambaconf/konqinterface.ui.h39
-rw-r--r--filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.cpp202
-rw-r--r--filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.h103
-rw-r--r--filesharing/advanced/kcm_sambaconf/passwd.cpp164
-rw-r--r--filesharing/advanced/kcm_sambaconf/passwd.h56
-rw-r--r--filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp241
-rw-r--r--filesharing/advanced/kcm_sambaconf/printerdlgimpl.h78
-rw-r--r--filesharing/advanced/kcm_sambaconf/programmingconventions.txt10
-rw-r--r--filesharing/advanced/kcm_sambaconf/qmultichecklistitem.cpp159
-rw-r--r--filesharing/advanced/kcm_sambaconf/qmultichecklistitem.h64
-rw-r--r--filesharing/advanced/kcm_sambaconf/sambafile.cpp701
-rw-r--r--filesharing/advanced/kcm_sambaconf/sambafile.h178
-rw-r--r--filesharing/advanced/kcm_sambaconf/sambashare.cpp334
-rw-r--r--filesharing/advanced/kcm_sambaconf/sambashare.h231
-rw-r--r--filesharing/advanced/kcm_sambaconf/share.ui3300
-rw-r--r--filesharing/advanced/kcm_sambaconf/share.ui.h258
-rw-r--r--filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp478
-rw-r--r--filesharing/advanced/kcm_sambaconf/sharedlgimpl.h100
-rw-r--r--filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.cpp89
-rw-r--r--filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.h46
-rw-r--r--filesharing/advanced/kcm_sambaconf/smbpasswdfile.cpp229
-rw-r--r--filesharing/advanced/kcm_sambaconf/smbpasswdfile.h141
-rw-r--r--filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui332
-rw-r--r--filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui.h112
-rw-r--r--filesharing/advanced/kcm_sambaconf/userselectdlg.ui301
-rw-r--r--filesharing/advanced/kcm_sambaconf/userselectdlg.ui.h50
-rw-r--r--filesharing/advanced/kcm_sambaconf/usertab.ui352
-rw-r--r--filesharing/advanced/kcm_sambaconf/usertab.ui.h39
-rw-r--r--filesharing/advanced/kcm_sambaconf/usertabimpl.cpp418
-rw-r--r--filesharing/advanced/kcm_sambaconf/usertabimpl.h95
-rw-r--r--filesharing/advanced/nfs/Makefile.am13
-rw-r--r--filesharing/advanced/nfs/hostprops.ui558
-rw-r--r--filesharing/advanced/nfs/hostprops.ui.h13
-rw-r--r--filesharing/advanced/nfs/nfsdialog.cpp216
-rw-r--r--filesharing/advanced/nfs/nfsdialog.h58
-rw-r--r--filesharing/advanced/nfs/nfsdialoggui.ui156
-rw-r--r--filesharing/advanced/nfs/nfsdialoggui.ui.h18
-rw-r--r--filesharing/advanced/nfs/nfsentry.cpp381
-rw-r--r--filesharing/advanced/nfs/nfsentry.h120
-rw-r--r--filesharing/advanced/nfs/nfsfile.cpp261
-rw-r--r--filesharing/advanced/nfs/nfsfile.h59
-rw-r--r--filesharing/advanced/nfs/nfshostdlg.cpp226
-rw-r--r--filesharing/advanced/nfs/nfshostdlg.h59
-rw-r--r--filesharing/advanced/propsdlgplugin/Makefile.am25
-rw-r--r--filesharing/advanced/propsdlgplugin/fileshare_propsdlgplugin.desktop102
-rw-r--r--filesharing/advanced/propsdlgplugin/propertiespage.cpp612
-rw-r--r--filesharing/advanced/propsdlgplugin/propertiespage.h87
-rw-r--r--filesharing/advanced/propsdlgplugin/propertiespagegui.ui478
-rw-r--r--filesharing/advanced/propsdlgplugin/propertiespagegui.ui.h56
-rw-r--r--filesharing/advanced/propsdlgplugin/propsdlgshareplugin.cpp126
-rw-r--r--filesharing/advanced/propsdlgplugin/propsdlgshareplugin.h44
-rw-r--r--filesharing/simple/Makefile.am19
-rw-r--r--filesharing/simple/controlcenter.ui486
-rw-r--r--filesharing/simple/controlcenter.ui.h22
-rw-r--r--filesharing/simple/fileshare.cpp442
-rw-r--r--filesharing/simple/fileshare.desktop169
-rw-r--r--filesharing/simple/fileshare.h82
-rw-r--r--filesharing/simple/groupconfigdlg.cpp418
-rw-r--r--filesharing/simple/groupconfigdlg.h68
-rw-r--r--filesharing/simple/groupconfiggui.ui200
-rw-r--r--filesharing/simple/groupconfiggui.ui.h14
-rw-r--r--filesharing/simple/krichtextlabel.cpp112
-rw-r--r--filesharing/simple/krichtextlabel.h65
91 files changed, 29699 insertions, 0 deletions
diff --git a/filesharing/Makefile.am b/filesharing/Makefile.am
new file mode 100644
index 00000000..61d66854
--- /dev/null
+++ b/filesharing/Makefile.am
@@ -0,0 +1,5 @@
+SUBDIRS = advanced simple
+
+messages: rc.cpp
+ $(EXTRACTRC) `find . -name '*.ui'` > rc.cpp
+ $(XGETTEXT) rc.cpp `find . -name '*.cpp' -or -name '*.h'` -o $(podir)/kfileshare.pot
diff --git a/filesharing/advanced/Makefile.am b/filesharing/advanced/Makefile.am
new file mode 100644
index 00000000..135d9702
--- /dev/null
+++ b/filesharing/advanced/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = nfs kcm_sambaconf propsdlgplugin
diff --git a/filesharing/advanced/kcm_sambaconf/ChangeLog b/filesharing/advanced/kcm_sambaconf/ChangeLog
new file mode 100644
index 00000000..218c7bd3
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/ChangeLog
@@ -0,0 +1,53 @@
+- 0.5
+ * New features :
+ - Added new options of Samba 3.0.2
+ * Bugfixes :
+ - Fixed a crash if files are deleted from a directory
+ that is configured by KSambaPlugin at the same time.
+- 0.5 Beta 2
+ * New features :
+ - Support of Samba 3.0.1
+ * Bugfixes :
+ - Should now be compileable with Qt 3.0
+- 0.5 Beta
+ * New features :
+ - Works with Samba 3.x
+ - Supports all options of Samba 3.0 and Samba 2.x
+ - Supports loading and saving of remote Samba configuration files
+ with KIO slaves (e.g. fish)
+ - Complete rewrite of the user permission tab
+ - Accelerator keys added where possible
+ - Tab ordering fixed everywhere
+ - Redesigned big parts of the interface
+
+ * Bugfixes :
+ - Fixed crash, when smb.conf wasn't found
+ - Some other bugs fixed
+
+- 0.4.1
+ * Bugfixes :
+ - "user only" changed to "only user"
+ - Changings in the advanced tab will enable the apply button
+ * New options :
+ - Many new options have been added to the Share dialog
+ - The layout of the Share dialog has been changed
+ * Automake :
+ - Doesn't depend on automake 1.7, but on version 1.5.x
+
+- 0.4b
+ * Bugfixes :
+ - General :
+ * adding a blank line between two sections in the smb.conf
+ - Konqueror Plugin :
+ * availabe changed to available
+ * when changing a share to be not shared the entry is removed from the smb.conf
+ - KControl Center Module :
+ * Changing of the socket options works now
+ * New layout :
+ - The KControl Center module layout has changed much
+ - The Konqueror plugin layout has been changed a little
+ * New options :
+ - Many new options have been added to the KControl Center module
+
+
+
diff --git a/filesharing/advanced/kcm_sambaconf/Makefile.am b/filesharing/advanced/kcm_sambaconf/Makefile.am
new file mode 100644
index 00000000..55cd699d
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/Makefile.am
@@ -0,0 +1,46 @@
+KDE_ICON = AUTO
+noinst_LTLIBRARIES = libfilesharesamba.la
+kde_module_LTLIBRARIES = kcm_kcmsambaconf.la
+
+AM_CPPFLAGS = $(all_includes)
+METASOURCES=AUTO
+
+kcm_kcmsambaconf_la_SOURCES = \
+ kcminterface.ui \
+ kcmprinterdlg.ui \
+ printerdlgimpl.cpp \
+ kcmsambaconf.cpp \
+ joindomaindlg.ui
+kcm_kcmsambaconf_la_COMPILE_FIRST = usertab.h share.h
+
+
+kcm_kcmsambaconf_la_LIBADD = \
+ -lkdeprint \
+ libfilesharesamba.la
+
+kcm_kcmsambaconf_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+
+libfilesharesamba_la_SOURCES = \
+ sambafile.cpp \
+ share.ui \
+ sharedlgimpl.cpp \
+ sambashare.cpp \
+ socketoptionsdlg.ui \
+ common.cpp \
+ userselectdlg.ui \
+ groupselectdlg.ui \
+ usertab.ui \
+ usertabimpl.cpp \
+ filemodedlg.ui \
+ filemodedlgimpl.cpp \
+ smbpasswdfile.cpp \
+ passwd.cpp \
+ hiddenfileview.cpp \
+ dictmanager.cpp \
+ qmultichecklistitem.cpp \
+ smbconfconfigwidget.cpp \
+ linuxpermissionchecker.cpp \
+ expertuserdlg.ui
+
+
+xdg_apps_DATA = kcmsambaconf.desktop
diff --git a/filesharing/advanced/kcm_sambaconf/TODO b/filesharing/advanced/kcm_sambaconf/TODO
new file mode 100644
index 00000000..01abf9f2
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/TODO
@@ -0,0 +1,2 @@
+- Translations
+- Wizards
diff --git a/filesharing/advanced/kcm_sambaconf/common.cpp b/filesharing/advanced/kcm_sambaconf/common.cpp
new file mode 100644
index 00000000..1a8a8c13
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/common.cpp
@@ -0,0 +1,72 @@
+/***************************************************************************
+ common.cpp - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <qstring.h>
+#include <qcombobox.h>
+#include <qlistbox.h>
+
+#include "common.h"
+
+void setComboToString(QComboBox* combo,const QString & s)
+{
+ int i = combo->listBox()->index(combo->listBox()->findItem(s,Qt::ExactMatch));
+ combo->setCurrentItem(i);
+}
+
+bool boolFromText(const QString & value, bool testTrue)
+{
+ QString lower = value.lower();
+
+ if (testTrue) {
+ if (lower=="yes" ||
+ lower=="1" ||
+ lower=="true" ||
+ lower=="on")
+ return true;
+ else
+ return false;
+ } else {
+ if (lower=="no" ||
+ lower=="0" ||
+ lower=="false" ||
+ lower=="off")
+ return false;
+ else
+ return true;
+ }
+}
+
+QString textFromBool(bool value)
+{
+ if (value)
+ return "yes";
+ else
+ return "no";
+}
+
+
diff --git a/filesharing/advanced/kcm_sambaconf/common.h b/filesharing/advanced/kcm_sambaconf/common.h
new file mode 100644
index 00000000..a839e883
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/common.h
@@ -0,0 +1,40 @@
+/***************************************************************************
+ common.h - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef COMMON_H
+#define COMMON_H
+
+class QString;
+class QComboBox;
+
+
+void setComboToString(QComboBox*,const QString &);
+bool boolFromText(const QString & value,bool testTrue=true);
+QString textFromBool(bool value);
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/dictmanager.cpp b/filesharing/advanced/kcm_sambaconf/dictmanager.cpp
new file mode 100644
index 00000000..51f63266
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/dictmanager.cpp
@@ -0,0 +1,216 @@
+/***************************************************************************
+ dictmanager.cpp - description
+ -------------------
+ begin : Wed Jan 1 2003
+ copyright : (C) 2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <qlineedit.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qcombobox.h>
+#include <qtooltip.h>
+#include <qstringlist.h>
+
+#include <kurlrequester.h>
+#include <klocale.h>
+
+#include "sambashare.h"
+#include "dictmanager.h"
+#include "common.h"
+
+
+DictManager::DictManager(SambaShare* share):
+ lineEditDict(40,false),
+ checkBoxDict(40,false),
+ urlRequesterDict(40,false),
+ spinBoxDict(40,false),
+ comboBoxDict(20,false),
+ comboBoxValuesDict(20,false)
+{
+ _share = share;
+}
+
+DictManager::~DictManager() {
+}
+
+void DictManager::handleUnsupportedWidget(const QString & s, QWidget* w) {
+ w->setEnabled(false);
+ QToolTip::add(w,i18n("The option <em>%1</em> is not supported by your Samba version").arg(s));
+}
+
+void DictManager::add(const QString & key, QLineEdit* lineEdit) {
+ if (_share->optionSupported(key)) {
+ lineEditDict.insert(key,lineEdit);
+ connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(changedSlot()));
+ } else
+ handleUnsupportedWidget(key,lineEdit);
+}
+
+void DictManager::add(const QString & key, QCheckBox* checkBox){
+ if (_share->optionSupported(key)) {
+ checkBoxDict.insert(key,checkBox);
+ connect(checkBox, SIGNAL(clicked()), this, SLOT(changedSlot()));
+ } else
+ handleUnsupportedWidget(key,checkBox);
+}
+
+void DictManager::add(const QString & key, KURLRequester* urlRq){
+ if (_share->optionSupported(key)) {
+ urlRequesterDict.insert(key,urlRq);
+ connect(urlRq, SIGNAL(textChanged(const QString &)), this, SLOT(changedSlot()));
+ } else
+ handleUnsupportedWidget(key,urlRq);
+}
+
+void DictManager::add(const QString & key, QSpinBox* spinBox){
+ if (_share->optionSupported(key)) {
+ spinBoxDict.insert(key,spinBox);
+ connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(changedSlot()));
+ } else
+ handleUnsupportedWidget(key,spinBox);
+}
+
+void DictManager::add(const QString & key, QComboBox* comboBox, QStringList* values){
+ if (_share->optionSupported(key)) {
+ comboBoxDict.insert(key,comboBox);
+ comboBoxValuesDict.insert(key,values);
+ connect(comboBox, SIGNAL(activated(int)), this, SLOT(changedSlot()));
+ } else
+ handleUnsupportedWidget(key,comboBox);
+}
+
+
+void DictManager::load(SambaShare* share, bool globalValue, bool defaultValue){
+ QDictIterator<QCheckBox> checkBoxIt( checkBoxDict );
+
+ for( ; checkBoxIt.current(); ++checkBoxIt ) {
+ checkBoxIt.current()->setChecked(share->getBoolValue(checkBoxIt.currentKey(),globalValue,defaultValue));
+ }
+
+ QDictIterator<QLineEdit> lineEditIt( lineEditDict );
+
+ for( ; lineEditIt.current(); ++lineEditIt ) {
+ lineEditIt.current()->setText(share->getValue(lineEditIt.currentKey(),globalValue,defaultValue));
+ }
+
+ QDictIterator<KURLRequester> urlRequesterIt( urlRequesterDict );
+
+ for( ; urlRequesterIt.current(); ++urlRequesterIt ) {
+ urlRequesterIt.current()->setURL(share->getValue(urlRequesterIt.currentKey(),globalValue,defaultValue));
+ }
+
+ QDictIterator<QSpinBox> spinBoxIt( spinBoxDict );
+
+ for( ; spinBoxIt.current(); ++spinBoxIt ) {
+ spinBoxIt.current()->setValue(share->getValue(spinBoxIt.currentKey(),globalValue,defaultValue).toInt());
+ }
+
+ loadComboBoxes(share,globalValue,defaultValue);
+
+}
+
+void DictManager::loadComboBoxes(SambaShare* share, bool globalValue, bool defaultValue) {
+ QDictIterator<QComboBox> comboBoxIt( comboBoxDict );
+
+ for( ; comboBoxIt.current(); ++comboBoxIt ) {
+ QStringList *v = comboBoxValuesDict[comboBoxIt.currentKey()];
+ QString value = share->getValue(comboBoxIt.currentKey(),globalValue,defaultValue);
+
+ if (value.isNull())
+ continue;
+
+ value = value.lower();
+
+
+ int comboIndex = 0;
+
+ QStringList::iterator it;
+ for ( it = v->begin(); it != v->end(); ++it ) {
+ QString lower = (*it).lower();
+ if ( lower == "yes" &&
+ boolFromText(value))
+ break;
+
+ if ( lower == "no" &&
+ ! boolFromText(value,false))
+ break;
+
+ if ( lower == value )
+ break;
+
+ comboIndex++;
+ }
+
+ comboBoxIt.current()->setCurrentItem(comboIndex);
+ }
+}
+
+
+void DictManager::save(SambaShare* share, bool globalValue, bool defaultValue){
+ QDictIterator<QCheckBox> checkBoxIt( checkBoxDict );
+
+ for( ; checkBoxIt.current(); ++checkBoxIt ) {
+ share->setValue(checkBoxIt.currentKey(),checkBoxIt.current()->isChecked(), globalValue, defaultValue );
+ }
+
+ QDictIterator<QLineEdit> lineEditIt( lineEditDict );
+
+ for( ; lineEditIt.current(); ++lineEditIt ) {
+ share->setValue(lineEditIt.currentKey(),lineEditIt.current()->text(), globalValue, defaultValue );
+ }
+
+ QDictIterator<KURLRequester> urlRequesterIt( urlRequesterDict );
+
+ for( ; urlRequesterIt.current(); ++urlRequesterIt ) {
+ share->setValue(urlRequesterIt.currentKey(),urlRequesterIt.current()->url(), globalValue, defaultValue );
+ }
+
+ QDictIterator<QSpinBox> spinBoxIt( spinBoxDict );
+
+ for( ; spinBoxIt.current(); ++spinBoxIt ) {
+ share->setValue(spinBoxIt.currentKey(),spinBoxIt.current()->value(), globalValue, defaultValue );
+ }
+
+ QDictIterator<QComboBox> comboBoxIt( comboBoxDict );
+
+ for( ; comboBoxIt.current(); ++comboBoxIt ) {
+ QStringList* values = comboBoxValuesDict[comboBoxIt.currentKey()];
+
+ int i = comboBoxIt.current()->currentItem();
+ share->setValue(comboBoxIt.currentKey(),(*values)[i], globalValue, defaultValue );
+ }
+
+}
+
+void DictManager::changedSlot() {
+ emit changed();
+}
+
+
+
+#include "dictmanager.moc"
+
+
diff --git a/filesharing/advanced/kcm_sambaconf/dictmanager.h b/filesharing/advanced/kcm_sambaconf/dictmanager.h
new file mode 100644
index 00000000..765c8c6e
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/dictmanager.h
@@ -0,0 +1,80 @@
+/***************************************************************************
+ dictmanager.h - description
+ -------------------
+ begin : Wed Jan 1 2003
+ copyright : (C) 2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef _DICTMANAGER_H_
+#define _DICTMANAGER_H_
+
+class SambaShare;
+class QLineEdit;
+class QCheckBox;
+class QSpinBox;
+class QComboBox;
+class QString;
+class SambaShare;
+class QStringList;
+
+/**
+ * @author Jan Schfer
+ **/
+class DictManager : public QObject
+{
+Q_OBJECT
+ public :
+ DictManager(SambaShare *share);
+ virtual ~DictManager();
+
+ void add(const QString &, QLineEdit*);
+ void add(const QString &, QCheckBox*);
+ void add(const QString &, KURLRequester*);
+ void add(const QString &, QSpinBox*);
+ void add(const QString &, QComboBox*, QStringList*);
+
+ void load(SambaShare* share, bool globalValue=true, bool defaultValue=true);
+ void save(SambaShare* share, bool globalValue=true, bool defaultValue=true);
+
+ protected :
+ QDict<QLineEdit> lineEditDict;
+ QDict<QCheckBox> checkBoxDict;
+ QDict<KURLRequester> urlRequesterDict;
+ QDict<QSpinBox> spinBoxDict;
+ QDict<QComboBox> comboBoxDict;
+ QDict<QStringList> comboBoxValuesDict;
+
+ SambaShare* _share;
+
+ void handleUnsupportedWidget(const QString &, QWidget*);
+ void loadComboBoxes(SambaShare*, bool, bool);
+
+ protected slots:
+ void changedSlot();
+
+ signals:
+ void changed();
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/expertuserdlg.ui b/filesharing/advanced/kcm_sambaconf/expertuserdlg.ui
new file mode 100644
index 00000000..a088dcae
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/expertuserdlg.ui
@@ -0,0 +1,263 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>ExpertUserDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>ExpertUserDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>463</width>
+ <height>221</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>User Settings</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Valid users:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>validUsersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>validUsersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel12_2_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Admin users:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>adminUsersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>adminUsersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel12_2_2_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Invalid users:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>invalidUsersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>invalidUsersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QFrame" row="6" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>frame16</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer row="5" column="1">
+ <property name="name">
+ <cstring>spacer97</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel12_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Write list:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>writeListEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>writeListEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>readListEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel12_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Read list:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>readListEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>ExpertUserDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>ExpertUserDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>validUsersEdit</tabstop>
+ <tabstop>readListEdit</tabstop>
+ <tabstop>writeListEdit</tabstop>
+ <tabstop>adminUsersEdit</tabstop>
+ <tabstop>invalidUsersEdit</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/filemodedlg.ui b/filesharing/advanced/kcm_sambaconf/filemodedlg.ui
new file mode 100644
index 00000000..a5b77c92
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/filemodedlg.ui
@@ -0,0 +1,430 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>FileModeDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>FileModeDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>370</width>
+ <height>220</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Access Modifiers</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Access Permissions</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="Line" row="0" column="4" rowspan="4" colspan="1">
+ <property name="name">
+ <cstring>Line4</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>VLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ </widget>
+ <spacer row="4" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Spacer37</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>43</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="1" column="6" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>Spacer38</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>70</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Others</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Read</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="1">
+ <property name="name">
+ <cstring>othersReadChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="3">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Exec</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Write</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="2">
+ <property name="name">
+ <cstring>groupWriteChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="2">
+ <property name="name">
+ <cstring>othersWriteChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="2">
+ <property name="name">
+ <cstring>ownerWriteChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="3">
+ <property name="name">
+ <cstring>othersExecChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="1">
+ <property name="name">
+ <cstring>groupReadChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>ownerReadChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Owner</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="3">
+ <property name="name">
+ <cstring>groupExecChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Group</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="3">
+ <property name="name">
+ <cstring>ownerExecChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="5">
+ <property name="name">
+ <cstring>stickyBitChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Sticky</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="5">
+ <property name="name">
+ <cstring>setGIDChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Set GID</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="5">
+ <property name="name">
+ <cstring>setUIDChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Set UID</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="5">
+ <property name="name">
+ <cstring>TextLabel8</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Special</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>FileModeDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>FileModeDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>ownerReadChk</tabstop>
+ <tabstop>ownerWriteChk</tabstop>
+ <tabstop>ownerExecChk</tabstop>
+ <tabstop>groupReadChk</tabstop>
+ <tabstop>groupWriteChk</tabstop>
+ <tabstop>groupExecChk</tabstop>
+ <tabstop>othersReadChk</tabstop>
+ <tabstop>othersWriteChk</tabstop>
+ <tabstop>othersExecChk</tabstop>
+ <tabstop>setUIDChk</tabstop>
+ <tabstop>setGIDChk</tabstop>
+ <tabstop>stickyBitChk</tabstop>
+ <tabstop>buttonHelp</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/filemodedlgimpl.cpp b/filesharing/advanced/kcm_sambaconf/filemodedlgimpl.cpp
new file mode 100644
index 00000000..7c61751d
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/filemodedlgimpl.cpp
@@ -0,0 +1,118 @@
+/***************************************************************************
+ filemodedlgimpl.cpp - description
+ -------------------
+ begin : Thu Jul 18 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <stdio.h>
+
+#include <qlineedit.h>
+#include <qcheckbox.h>
+
+#include "filemodedlgimpl.h"
+
+FileModeDlgImpl::FileModeDlgImpl(QWidget* parent, QLineEdit* edit)
+ : FileModeDlg(parent)
+{
+ assert(edit);
+ _edit = edit;
+
+ init();
+}
+
+FileModeDlgImpl::~FileModeDlgImpl()
+{
+}
+
+void FileModeDlgImpl::init()
+{
+ bool ok;
+ int mod = _edit->text().toInt(&ok,8);
+
+ if (!ok)
+ mod = 0;
+
+ stickyBitChk->setChecked( mod & 01000 );
+ setGIDChk->setChecked( mod & 02000 );
+ setUIDChk->setChecked( mod & 04000 );
+
+ ownerExecChk->setChecked( mod & 0100 );
+ ownerWriteChk->setChecked( mod & 0200 );
+ ownerReadChk->setChecked( mod & 0400 );
+
+ groupExecChk->setChecked( mod & 010 );
+ groupWriteChk->setChecked( mod & 020 );
+ groupReadChk->setChecked( mod & 040 );
+
+ othersExecChk->setChecked( mod & 01 );
+ othersWriteChk->setChecked( mod & 02 );
+ othersReadChk->setChecked( mod & 04 );
+
+}
+
+void FileModeDlgImpl::accept()
+{
+ QString s = "";
+
+ s += QString::number(
+ (stickyBitChk->isChecked() ? 1 : 0) +
+ (setGIDChk->isChecked() ? 2 : 0) +
+ (setUIDChk->isChecked() ? 4 : 0)
+ );
+
+ s += QString::number(
+ (ownerExecChk->isChecked() ? 1 : 0) +
+ (ownerWriteChk->isChecked() ? 2 : 0) +
+ (ownerReadChk->isChecked() ? 4 : 0)
+ );
+
+ s += QString::number(
+ (groupExecChk->isChecked() ? 1 : 0) +
+ (groupWriteChk->isChecked() ? 2 : 0) +
+ (groupReadChk->isChecked() ? 4 : 0)
+ );
+
+ s += QString::number(
+ (othersExecChk->isChecked() ? 1 : 0) +
+ (othersWriteChk->isChecked() ? 2 : 0) +
+ (othersReadChk->isChecked() ? 4 : 0)
+ );
+
+ // it's an octal number so start with a 0
+ // but remove all the other trailing 0's
+ s = QString::number( s.toInt());
+ s = "0"+s;
+
+ _edit->setText(s);
+
+
+
+ FileModeDlg::accept();
+}
+
+#include "filemodedlgimpl.moc"
+
diff --git a/filesharing/advanced/kcm_sambaconf/filemodedlgimpl.h b/filesharing/advanced/kcm_sambaconf/filemodedlgimpl.h
new file mode 100644
index 00000000..e855d288
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/filemodedlgimpl.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+ filemodedlgimpl.cpp - description
+ -------------------
+ begin : Thu Jul 18 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef FILEMODEDLGIMPL_H
+#define FILEMODEDLGIMPL_H
+
+/**
+ *@author Jan Schfer
+ */
+
+#include "filemodedlg.h"
+
+class QLineEdit;
+
+/**
+ * Small dialog to change the UNIX access rights
+ * It is called with a QLineEdit as parameter.
+ * The class then takes the text from the QLineEdit and
+ * interprets it as an oktal UNIX access right string
+ * e.g. 0744
+ * After the user has changed the access rights with the dialog
+ * the class sets the new access rights as a new octal string
+ * of the QLineEdit
+ * Implements the filemodedlg.ui interface
+ **/
+class FileModeDlgImpl : public FileModeDlg
+{
+Q_OBJECT
+public:
+ FileModeDlgImpl(QWidget* parent, QLineEdit* edit);
+ ~FileModeDlgImpl();
+protected:
+ QLineEdit* _edit;
+ void init();
+protected slots:
+ virtual void accept();
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/groupselectdlg.ui b/filesharing/advanced/kcm_sambaconf/groupselectdlg.ui
new file mode 100644
index 00000000..1722dd18
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/groupselectdlg.ui
@@ -0,0 +1,445 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>GroupSelectDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>GroupSelectDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>406</width>
+ <height>370</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Select Groups</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>285</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>frame16</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer90</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="0" column="0" rowspan="3" colspan="1">
+ <property name="name">
+ <cstring>groupBox87</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>100</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Selec&amp;t Groups</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>GID</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>groupListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>100</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="selectionMode">
+ <enum>Extended</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup" row="0" column="1">
+ <property name="name">
+ <cstring>accessBtnGrp</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Acc&amp;ess</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>defaultRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Default</string>
+ </property>
+ <property name="accel">
+ <number>8388676</number>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>readRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Read access</string>
+ </property>
+ <property name="accel">
+ <number>8388690</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>writeRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Write access</string>
+ </property>
+ <property name="accel">
+ <number>8388695</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>adminRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;Admin access</string>
+ </property>
+ <property name="accel">
+ <number>8388673</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>noAccessRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;No access at all</string>
+ </property>
+ <property name="accel">
+ <number>8388686</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup" row="1" column="1">
+ <property name="name">
+ <cstring>kindBtnGrp</cstring>
+ </property>
+ <property name="title">
+ <string>&amp;Kind of Group</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>unixRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;UNIX group</string>
+ </property>
+ <property name="accel">
+ <number>8388693</number>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>nisRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>NI&amp;S group</string>
+ </property>
+ <property name="accel">
+ <number>8388691</number>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>bothRadio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>UNIX and NIS gr&amp;oup</string>
+ </property>
+ <property name="accel">
+ <number>8388687</number>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>GroupSelectDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>GroupSelectDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>groupListView</tabstop>
+ <tabstop>defaultRadio</tabstop>
+ <tabstop>bothRadio</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<includes>
+ <include location="local" impldecl="in declaration">qstringlist.h</include>
+ <include location="local" impldecl="in implementation">passwd.h</include>
+ <include location="local" impldecl="in implementation">groupselectdlg.ui.h</include>
+</includes>
+<variables>
+ <variable>QString groupKind;</variable>
+ <variable>int access;</variable>
+ <variable>QStringList selectedGroups;</variable>
+</variables>
+<slots>
+ <slot>init( const QStringList &amp; specifiedGroups )</slot>
+ <slot access="protected">accept()</slot>
+ <slot returnType="QStringList">getSelectedGroups()</slot>
+ <slot returnType="int">getAccess()</slot>
+ <slot returnType="QString">getGroupKind()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/groupselectdlg.ui.h b/filesharing/advanced/kcm_sambaconf/groupselectdlg.ui.h
new file mode 100644
index 00000000..090e270f
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/groupselectdlg.ui.h
@@ -0,0 +1,63 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+
+void GroupSelectDlg::init(const QStringList & specifiedGroups)
+{
+ QStringList unixGroups = getUnixGroups();
+
+ for (QStringList::Iterator it = unixGroups.begin(); it != unixGroups.end(); ++it)
+ {
+ if ( ! specifiedGroups.contains(*it))
+ new QListViewItem(groupListView, *it, QString::number(getGroupGID(*it)));
+ }
+}
+
+void GroupSelectDlg::accept()
+{
+ QListViewItemIterator it( groupListView);
+
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->isSelected() )
+ selectedGroups << it.current()->text(0);
+ }
+
+ access = accessBtnGrp->id(accessBtnGrp->selected());
+
+ if (unixRadio->isChecked())
+ groupKind = "+";
+ else
+ if (nisRadio->isChecked())
+ groupKind = "&";
+ else
+ if (bothRadio->isChecked())
+ groupKind = "@";
+
+ QDialog::accept();
+}
+
+
+
+
+QStringList GroupSelectDlg::getSelectedGroups()
+{
+ return selectedGroups;
+}
+
+
+int GroupSelectDlg::getAccess()
+{
+ return access;
+}
+
+
+QString GroupSelectDlg::getGroupKind()
+{
+ return groupKind;
+}
diff --git a/filesharing/advanced/kcm_sambaconf/hi16-app-kcmsambaconf.png b/filesharing/advanced/kcm_sambaconf/hi16-app-kcmsambaconf.png
new file mode 100644
index 00000000..e587589b
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/hi16-app-kcmsambaconf.png
Binary files differ
diff --git a/filesharing/advanced/kcm_sambaconf/hiddenfileview.cpp b/filesharing/advanced/kcm_sambaconf/hiddenfileview.cpp
new file mode 100644
index 00000000..988e2594
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/hiddenfileview.cpp
@@ -0,0 +1,610 @@
+/***************************************************************************
+ hiddenfileview.cpp - description
+ -------------------
+ begin : Wed Jan 1 2003
+ copyright : (C) 2003 by Jan Sch�er
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <qcheckbox.h>
+#include <qlineedit.h>
+#include <qregexp.h>
+#include <qstringlist.h>
+#include <qgroupbox.h>
+#include <qcursor.h>
+
+
+#include <kpopupmenu.h>
+#include <kaction.h>
+#include <krestrictedline.h>
+#include <klocale.h>
+#include <kfiledetailview.h>
+#include <kdirlister.h>
+#include <kmessagebox.h>
+#include <kurlrequester.h>
+
+#include "hiddenfileview.h"
+#include "sharedlgimpl.h"
+#include "sambashare.h"
+
+
+#define COL_NAME 0
+#define COL_HIDDEN 1
+#define COL_VETO 2
+#define COL_VETO_OPLOCK 3
+#define COL_SIZE 4
+#define COL_DATE 5
+#define COL_PERM 6
+#define COL_OWNER 7
+#define COL_GROUP 8
+
+#define HIDDENTABINDEX 5
+
+HiddenListViewItem::HiddenListViewItem( QListView *parent, KFileItem *fi, bool hidden=false, bool veto=false, bool vetoOplock=false )
+ : QMultiCheckListItem( parent )
+{
+ setPixmap( COL_NAME, fi->pixmap(KIcon::SizeSmall));
+
+ setText( COL_NAME, fi->text() );
+ setText( COL_SIZE, KGlobal::locale()->formatNumber( fi->size(), 0));
+ setText( COL_DATE, fi->timeString() );
+ setText( COL_PERM, fi->permissionsString() );
+ setText( COL_OWNER, fi->user() );
+ setText( COL_GROUP, fi->group() );
+
+ setOn(COL_HIDDEN,hidden);
+ setOn(COL_VETO,veto);
+ setOn(COL_VETO_OPLOCK,vetoOplock);
+
+ _fileItem = fi;
+}
+
+HiddenListViewItem::~HiddenListViewItem()
+{
+}
+
+KFileItem* HiddenListViewItem::getFileItem()
+{
+ return _fileItem;
+}
+
+
+void HiddenListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
+{
+ QColorGroup _cg = cg;
+
+ if (isOn(COL_VETO))
+ _cg.setColor(QColorGroup::Base,lightGray);
+
+ if (isOn(COL_HIDDEN))
+ _cg.setColor(QColorGroup::Text,gray);
+
+ QMultiCheckListItem::paintCell(p, _cg, column, width, alignment);
+}
+
+
+
+
+HiddenFileView::HiddenFileView(ShareDlgImpl* shareDlg, SambaShare* share)
+{
+ _share = share;
+ _dlg = shareDlg;
+
+ _hiddenActn = new KToggleAction(i18n("&Hide"));
+ _vetoActn = new KToggleAction(i18n("&Veto"));
+ _vetoOplockActn = new KToggleAction(i18n("&Veto Oplock"));
+
+ initListView();
+
+ _dlg->hiddenChk->setTristate(true);
+ _dlg->vetoChk->setTristate(true);
+
+ connect( _dlg->hiddenChk, SIGNAL(toggled(bool)), this, SLOT( hiddenChkClicked(bool) ));
+ connect( _dlg->vetoChk, SIGNAL(toggled(bool)), this, SLOT( vetoChkClicked(bool) ));
+ connect( _dlg->vetoOplockChk, SIGNAL(toggled(bool)), this, SLOT( vetoOplockChkClicked(bool) ));
+
+ _dlg->hiddenEdit->setText( _share->getValue("hide files") );
+ connect( _dlg->hiddenEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateView()));
+
+ _dlg->vetoEdit->setText( _share->getValue("veto files") );
+ connect( _dlg->vetoEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateView()));
+
+ _dlg->vetoOplockEdit->setText( _share->getValue("veto oplock files") );
+ connect( _dlg->vetoOplockEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateView()));
+
+// new QLabel(i18n("Hint")+" : ",grid);
+// new QLabel(i18n("You have to separate the entries with a '/'. You can use the wildcards '*' and '?'"),grid);
+// new QLabel(i18n("Example")+" : ",grid);
+// new QLabel(i18n("*.tmp/*SECRET*/.*/file?.*/"),grid);
+
+ _dir = new KDirLister(true);
+ _dir->setShowingDotFiles(true);
+
+ connect( _dir, SIGNAL(newItems(const KFileItemList &)),
+ this, SLOT(insertNewFiles(const KFileItemList &)));
+
+ connect( _dir, SIGNAL(deleteItem(KFileItem*)),
+ this, SLOT(deleteItem(KFileItem*)));
+
+ connect( _dir, SIGNAL(refreshItems(const KFileItemList &)),
+ this, SLOT(refreshItems(const KFileItemList &)));
+
+ connect( _hiddenActn, SIGNAL(toggled(bool)), this, SLOT(hiddenChkClicked(bool)));
+ connect( _vetoActn, SIGNAL(toggled(bool)), this, SLOT(vetoChkClicked(bool)));
+ connect( _vetoOplockActn, SIGNAL(toggled(bool)), this, SLOT(vetoOplockChkClicked(bool)));
+}
+
+void HiddenFileView::initListView()
+{
+ _dlg->hiddenListView->setMultiSelection(true);
+ _dlg->hiddenListView->setSelectionMode(QListView::Extended);
+ _dlg->hiddenListView->setAllColumnsShowFocus(true);
+
+ _hiddenList = createRegExpList(_share->getValue("hide files"));
+ _vetoList = createRegExpList(_share->getValue("veto files"));
+ _vetoOplockList = createRegExpList(_share->getValue("veto oplock files"));
+
+ _popup = new KPopupMenu(_dlg->hiddenListView);
+
+ _hiddenActn->plug(_popup);
+ _vetoActn->plug(_popup);
+ _vetoOplockActn->plug(_popup);
+
+ connect( _dlg->hiddenListView, SIGNAL(selectionChanged()), this, SLOT(selectionChanged()));
+ connect( _dlg->hiddenListView, SIGNAL(contextMenu(KListView*,QListViewItem*,const QPoint&)),
+ this, SLOT(showContextMenu()));
+
+ connect( _dlg->hideDotFilesChk, SIGNAL(toggled(bool)), this, SLOT(hideDotFilesChkClicked(bool)));
+ connect( _dlg->hideUnreadableChk, SIGNAL(toggled(bool)), this, SLOT(hideUnreadableChkClicked(bool)));
+
+ connect( _dlg->hiddenListView, SIGNAL(mouseButtonPressed(int,QListViewItem*,const QPoint &,int)),
+ this, SLOT(slotMouseButtonPressed(int,QListViewItem*,const QPoint &,int)));
+}
+
+HiddenFileView::~HiddenFileView()
+{
+ delete _dir;
+}
+
+void HiddenFileView::load()
+{
+ if (_dlg->hiddenListView)
+ _dlg->hiddenListView->clear();
+
+ _dir->openURL( _dlg->pathUrlRq->url() );
+}
+
+void HiddenFileView::save()
+{
+ QString s = _dlg->hiddenEdit->text().stripWhiteSpace();
+ // its important that the string ends with an '/'
+ // otherwise Samba won't recognize the last entry
+ if ( (!s.isEmpty()) && (s.right(1)!="/"))
+ s+="/";
+ _share->setValue("hide files", s);
+
+ s = _dlg->vetoEdit->text().stripWhiteSpace();
+ // its important that the string ends with an '/'
+ // otherwise Samba won't recognize the last entry
+ if ( (!s.isEmpty()) && (s.right(1)!="/"))
+ s+="/";
+ _share->setValue("veto files", s);
+
+ s = _dlg->vetoOplockEdit->text().stripWhiteSpace();
+ // its important that the string ends with an '/'
+ // otherwise Samba won't recognize the last entry
+ if ( (!s.isEmpty()) && (s.right(1)!="/"))
+ s+="/";
+ _share->setValue("veto oplock files", s);
+
+}
+
+void HiddenFileView::insertNewFiles(const KFileItemList &newone)
+{
+ if ( newone.isEmpty() )
+ return;
+
+ KFileItem *tmp;
+
+ int j=0;
+
+ for (KFileItemListIterator it(newone); (tmp = it.current()); ++it)
+ {
+ j++;
+
+ bool hidden = matchHidden(tmp->text());
+ bool veto = matchVeto(tmp->text());
+ bool vetoOplock = matchVetoOplock(tmp->text());
+
+ new HiddenListViewItem( _dlg->hiddenListView, tmp, hidden, veto, vetoOplock );
+
+ }
+}
+
+
+
+void HiddenFileView::columnClicked(int column) {
+
+
+ switch (column) {
+ case COL_HIDDEN : hiddenChkClicked( !_dlg->hiddenChk->isOn() );break;
+ case COL_VETO : vetoChkClicked( !_dlg->vetoChk->isOn() );break;
+ case COL_VETO_OPLOCK : vetoOplockChkClicked( !_dlg->vetoOplockChk->isOn() );break;
+ default : break;
+ }
+}
+
+void HiddenFileView::deleteItem( KFileItem *fileItem )
+{
+ HiddenListViewItem* item;
+ for (item = dynamic_cast<HiddenListViewItem*>(_dlg->hiddenListView->firstChild());item;
+ item = dynamic_cast<HiddenListViewItem*>(item->nextSibling()))
+ {
+ if (item->getFileItem() == fileItem)
+ {
+ delete item;
+ break;
+ }
+ }
+
+}
+
+void HiddenFileView::refreshItems( const KFileItemList& /*items*/ )
+{
+ updateView();
+}
+
+
+void HiddenFileView::showContextMenu()
+{
+ _popup->exec(QCursor::pos());
+}
+
+
+void HiddenFileView::selectionChanged()
+{
+ bool veto = false;
+ bool noVeto = false;
+ bool hide = false;
+ bool noHide = false;
+ bool vetoOplock = false;
+ bool noVetoOplock = false;
+
+ int n = 0;
+
+ HiddenListViewItem* item;
+ for (item = static_cast<HiddenListViewItem*>(_dlg->hiddenListView->firstChild());item;
+ item = static_cast<HiddenListViewItem*>(item->nextSibling()))
+ {
+ if (!item->isSelected())
+ continue;
+
+ n++;
+
+ if (item->isOn(COL_VETO))
+ veto = true;
+ else
+ noVeto = true;
+
+ if (item->isOn(COL_VETO_OPLOCK))
+ vetoOplock = true;
+ else
+ noVetoOplock = true;
+
+ if (item->isOn(COL_HIDDEN))
+ hide = true;
+ else
+ noHide = true;
+ }
+
+
+ _dlg->selGrpBx->setEnabled(n>0);
+
+ if (veto && noVeto)
+ {
+ _dlg->vetoChk->setTristate(true);
+ _dlg->vetoChk->setNoChange();
+ _dlg->vetoChk->update();
+ }
+ else
+ {
+ _dlg->vetoChk->setTristate(false);
+ _dlg->vetoChk->setChecked(veto);
+ }
+
+ if (vetoOplock && noVetoOplock)
+ {
+ _dlg->vetoOplockChk->setTristate(true);
+ _dlg->vetoOplockChk->setNoChange();
+ _dlg->vetoOplockChk->update();
+ }
+ else
+ {
+ _dlg->vetoOplockChk->setTristate(false);
+ _dlg->vetoOplockChk->setChecked(vetoOplock);
+ }
+
+
+ if (hide && noHide)
+ {
+ _dlg->hiddenChk->setTristate(true);
+ _dlg->hiddenChk->setNoChange();
+ _dlg->hiddenChk->update();
+ }
+ else
+ {
+ _dlg->hiddenChk->setTristate(false);
+ _dlg->hiddenChk->setChecked(hide);
+ }
+}
+
+void HiddenFileView::checkBoxClicked(QCheckBox* chkBox,KToggleAction* action,QLineEdit* edit, int column,QPtrList<QRegExp> & reqExpList,bool b) {
+ // We don't save the old state so
+ // disable the tristate mode
+ chkBox->setTristate(false);
+ action->setChecked(b);
+ chkBox->setChecked(b);
+
+ HiddenListViewItem* item;
+ for (item = static_cast<HiddenListViewItem*>(_dlg->hiddenListView->firstChild());item;
+ item = static_cast<HiddenListViewItem*>(item->nextSibling()))
+ {
+ if (!item->isSelected())
+ continue;
+
+ if (b == item->isOn(column))
+ continue;
+
+ if (!b) {
+ QRegExp* rx = getRegExpListMatch(item->text(0),reqExpList);
+
+ // Perhaps the file was hidden because it started with a dot
+ if (!rx && item->text(0)[0]=='.' && _dlg->hideDotFilesChk->isChecked()) {
+ int result = KMessageBox::questionYesNo(_dlg,i18n(
+ "<qt>Some files you have selected are hidden because they start with a dot; "
+ "do you want to uncheck all files starting with a dot?</qt>"),i18n("Files Starting With Dot"),i18n("Uncheck Hidden"), i18n("Keep Hidden"));
+
+ if (result == KMessageBox::No) {
+ QPtrList<HiddenListViewItem> lst = getMatchingItems(QRegExp(".*",false,true));
+ deselect(lst);
+ } else {
+ _dlg->hideDotFilesChk->setChecked(false);
+ }
+ continue;
+ } else {
+ if (rx) {
+ // perhaps it is matched by a wildcard string
+ QString p = rx->pattern();
+ if ( p.find("*") > -1 ||
+ p.find("?") > -1 )
+ {
+ // TODO after message freeze: why show three times the wildcard string? Once should be enough.
+ // TODO remove <b></b> and use <qt> instead
+ int result = KMessageBox::questionYesNo(_dlg,i18n(
+ "<b></b>Some files you have selected are matched by the wildcarded string <b>'%1'</b>; "
+ "do you want to uncheck all files matching <b>'%1'</b>?").arg(rx->pattern()).arg(rx->pattern()).arg(rx->pattern()),
+ i18n("Wildcarded String"),i18n("Uncheck Matches"),i18n("Keep Selected"));
+
+ QPtrList<HiddenListViewItem> lst = getMatchingItems( *rx );
+
+ if (result == KMessageBox::No) {
+ deselect(lst);
+ } else {
+ setState(lst,column,false);
+ reqExpList.remove(rx);
+ updateEdit(edit, reqExpList);
+ }
+ continue;
+ } else {
+ reqExpList.remove(rx);
+ updateEdit(edit, reqExpList);
+ }
+ }
+ }
+ }
+ else {
+ reqExpList.append( new QRegExp(item->text(0)) );
+ updateEdit(edit, reqExpList);
+ }
+
+ item->setOn(column,b);
+ }
+
+ _dlg->hiddenListView->update();
+}
+
+void HiddenFileView::hiddenChkClicked(bool b)
+{
+ checkBoxClicked(_dlg->hiddenChk, _hiddenActn, _dlg->hiddenEdit, COL_HIDDEN,_hiddenList,b);
+
+}
+
+void HiddenFileView::vetoOplockChkClicked(bool b) {
+ checkBoxClicked(_dlg->vetoOplockChk, _vetoOplockActn, _dlg->vetoOplockEdit, COL_VETO_OPLOCK,_vetoOplockList,b);
+}
+
+void HiddenFileView::vetoChkClicked(bool b)
+{
+ checkBoxClicked(_dlg->vetoChk, _vetoActn, _dlg->vetoEdit, COL_VETO,_vetoList,b);
+}
+
+/**
+ * Sets the text of the QLineEdit edit to the entries of the passed QRegExp-List
+ **/
+void HiddenFileView::updateEdit(QLineEdit* edit, QPtrList<QRegExp> & lst)
+{
+ QString s="";
+
+ QRegExp* rx;
+ for(rx = static_cast<QRegExp*>(lst.first()); rx;
+ rx = static_cast<QRegExp*>(lst.next()) )
+ {
+ s+= rx->pattern()+QString("/");
+ }
+
+ edit->setText(s);
+}
+
+
+void HiddenFileView::setState(QPtrList<HiddenListViewItem> & lst, int column, bool b) {
+ HiddenListViewItem* item;
+ for(item = static_cast<HiddenListViewItem*>(lst.first()); item;
+ item = static_cast<HiddenListViewItem*>(lst.next()) )
+ {
+ item->setOn(column,b);
+ }
+}
+
+
+void HiddenFileView::deselect(QPtrList<HiddenListViewItem> & lst)
+{
+ HiddenListViewItem* item;
+ for(item = static_cast<HiddenListViewItem*>(lst.first()); item;
+ item = static_cast<HiddenListViewItem*>(lst.next()) )
+ {
+ item->setSelected(false);
+ }
+}
+
+
+QPtrList<HiddenListViewItem> HiddenFileView::getMatchingItems(const QRegExp & rx)
+{
+ QPtrList<HiddenListViewItem> lst;
+
+ HiddenListViewItem* item;
+ for (item = static_cast<HiddenListViewItem*>(_dlg->hiddenListView->firstChild());item;
+ item = static_cast<HiddenListViewItem*>(item->nextSibling()))
+ {
+ if (rx.exactMatch(item->text(0)))
+ lst.append(item);
+ }
+
+ return lst;
+}
+
+void HiddenFileView::updateView()
+{
+ _hiddenList = createRegExpList(_dlg->hiddenEdit->text());
+ _vetoList = createRegExpList(_dlg->vetoEdit->text());
+ _vetoOplockList = createRegExpList(_dlg->vetoOplockEdit->text());
+
+ HiddenListViewItem* item;
+ for (item = static_cast<HiddenListViewItem*>(_dlg->hiddenListView->firstChild());item;
+ item = static_cast<HiddenListViewItem*>(item->nextSibling()))
+ {
+ item->setOn(COL_HIDDEN,matchHidden(item->text(0)));
+ item->setOn(COL_VETO,matchVeto(item->text(0)));
+ item->setOn(COL_VETO_OPLOCK,matchVetoOplock(item->text(0)));
+ }
+
+ _dlg->hiddenListView->repaint();
+}
+
+
+QPtrList<QRegExp> HiddenFileView::createRegExpList(const QString & s)
+{
+ QPtrList<QRegExp> lst;
+ bool cs = _share->getBoolValue("case sensitive");
+
+ if (!s.isEmpty())
+ {
+ QStringList l = QStringList::split("/",s);
+
+ for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) {
+ lst.append( new QRegExp(*it,cs,true) );
+ }
+ }
+
+ return lst;
+}
+
+bool HiddenFileView::matchHidden(const QString & s)
+{
+ QPtrList<QRegExp> hiddenList(_hiddenList);
+
+ if (_dlg->hideDotFilesChk->isChecked())
+ hiddenList.append( new QRegExp(".*",false,true) );
+
+ return matchRegExpList(s,hiddenList);
+}
+
+bool HiddenFileView::matchVeto(const QString & s)
+{
+ return matchRegExpList(s,_vetoList);
+}
+
+bool HiddenFileView::matchVetoOplock(const QString & s)
+{
+ return matchRegExpList(s,_vetoOplockList);
+}
+
+bool HiddenFileView::matchRegExpList(const QString & s, QPtrList<QRegExp> & lst)
+{
+ if (getRegExpListMatch(s,lst))
+ return true;
+ else
+ return false;
+}
+
+
+QRegExp* HiddenFileView::getHiddenMatch(const QString & s)
+{
+ return getRegExpListMatch(s,_hiddenList);
+}
+
+QRegExp* HiddenFileView::getVetoMatch(const QString & s)
+{
+ return getRegExpListMatch(s,_vetoList);
+}
+
+QRegExp* HiddenFileView::getRegExpListMatch(const QString & s, QPtrList<QRegExp> & lst)
+{
+ QRegExp* rx;
+
+ for ( rx = lst.first(); rx; rx = lst.next() )
+ {
+ if (rx->exactMatch(s))
+ return rx;
+ }
+
+ return 0L;
+}
+
+void HiddenFileView::hideDotFilesChkClicked(bool)
+{
+ updateView();
+}
+
+void HiddenFileView::hideUnreadableChkClicked(bool)
+{
+ updateView();
+}
+
+void HiddenFileView::slotMouseButtonPressed( int, QListViewItem*, const QPoint&, int c ) {
+ columnClicked(c);
+}
+
+
+#include "hiddenfileview.moc"
diff --git a/filesharing/advanced/kcm_sambaconf/hiddenfileview.h b/filesharing/advanced/kcm_sambaconf/hiddenfileview.h
new file mode 100644
index 00000000..c15b772f
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/hiddenfileview.h
@@ -0,0 +1,140 @@
+/***************************************************************************
+ hiddenfileview.h - description
+ -------------------
+ begin : Wed Jan 1 2003
+ copyright : (C) 2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef _HIDDENFILEVIEW_H_
+#define _HIDDENFILEVIEW_H_
+
+#include <kfileitem.h>
+#include <klistview.h>
+
+#include "qmultichecklistitem.h"
+
+class KDirLister;
+class QRegExp;
+class ShareDlgImpl;
+class SambaShare;
+
+class HiddenListViewItem : public QMultiCheckListItem
+{
+Q_OBJECT
+public:
+ HiddenListViewItem( QListView *parent, KFileItem *fi, bool hidden, bool veto, bool vetoOplock );
+ ~HiddenListViewItem();
+
+ virtual void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment);
+
+ KFileItem* getFileItem();
+protected:
+ KFileItem *_fileItem;
+};
+
+class KToggleAction;
+class KPopupMenu;
+class ShareDlgImpl;
+
+
+/**
+ * Widget which shows a list of files
+ * from a directory.
+ * It gets the directory from the SambaShare
+ * It also interprets the hidden files parameter
+ * of the SambaShare an offers the possibility of
+ * selecting the files which should be hidden
+ **/
+class HiddenFileView : public QObject
+{
+Q_OBJECT
+
+public:
+ HiddenFileView(ShareDlgImpl* shareDlg, SambaShare* share);
+ ~HiddenFileView();
+
+ /**
+ * Load the values from the share and show them
+ **/
+ void load();
+
+ /**
+ * Save changings to the share
+ **/
+ void save();
+
+protected:
+ SambaShare* _share;
+ ShareDlgImpl* _dlg;
+
+ KDirLister* _dir;
+ QPtrList<QRegExp> _hiddenList;
+ QPtrList<QRegExp> _vetoList;
+ QPtrList<QRegExp> _vetoOplockList;
+
+ KToggleAction* _hiddenActn;
+ KToggleAction* _vetoActn;
+ KToggleAction* _vetoOplockActn;
+
+ KPopupMenu* _popup;
+
+ void initListView();
+
+ QPtrList<QRegExp> createRegExpList(const QString & s);
+ bool matchHidden(const QString & s);
+ bool matchVeto(const QString & s);
+ bool matchVetoOplock(const QString & s);
+ bool matchRegExpList(const QString & s, QPtrList<QRegExp> & lst);
+
+ QRegExp* getHiddenMatch(const QString & s);
+ QRegExp* getVetoMatch(const QString & s);
+ QRegExp* getRegExpListMatch(const QString & s, QPtrList<QRegExp> & lst);
+
+ QPtrList<HiddenListViewItem> getMatchingItems(const QRegExp & rx);
+
+ void setState(QPtrList<HiddenListViewItem> & lst,int column, bool b);
+ void deselect(QPtrList<HiddenListViewItem> & lst);
+
+ void updateEdit(QLineEdit* edit, QPtrList<QRegExp> & lst);
+
+protected slots:
+ // slots for KDirListener :
+ void insertNewFiles(const KFileItemList &newone);
+ void deleteItem( KFileItem *_fileItem );
+ void refreshItems( const KFileItemList& items );
+
+ void selectionChanged();
+ void hiddenChkClicked(bool b);
+ void vetoChkClicked(bool b);
+ void vetoOplockChkClicked(bool b);
+ void checkBoxClicked(QCheckBox* chkBox,KToggleAction* action,QLineEdit* edit,int column,QPtrList<QRegExp> &reqExpList,bool b);
+ void columnClicked(int column);
+ void showContextMenu();
+ void updateView();
+ void hideDotFilesChkClicked(bool);
+ void hideUnreadableChkClicked(bool);
+ void slotMouseButtonPressed( int button, QListViewItem * item, const QPoint & pos, int c );
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/joindomaindlg.ui b/filesharing/advanced/kcm_sambaconf/joindomaindlg.ui
new file mode 100644
index 00000000..c928a409
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/joindomaindlg.ui
@@ -0,0 +1,239 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>JoinDomainDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>JoinDomainDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>427</width>
+ <height>215</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Join Domain</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>domainEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>domainControllerEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>usernameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>textLabel5_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Verify:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>verifyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel5_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Password:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>passwordEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Username:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>usernameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Domain co&amp;ntroller:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>domainControllerEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Domain:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>domainEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KPasswordEdit" row="3" column="1">
+ <property name="name">
+ <cstring>passwordEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KPasswordEdit" row="4" column="1">
+ <property name="name">
+ <cstring>verifyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="Line" row="6" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <spacer row="5" column="1">
+ <property name="name">
+ <cstring>spacer65</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>JoinDomainDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>JoinDomainDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>domainEdit</tabstop>
+ <tabstop>domainControllerEdit</tabstop>
+ <tabstop>usernameEdit</tabstop>
+ <tabstop>passwordEdit</tabstop>
+ <tabstop>verifyEdit</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<includes>
+ <include location="global" impldecl="in declaration">kpassdlg.h</include>
+ <include location="global" impldecl="in implementation">kmessagebox.h</include>
+ <include location="global" impldecl="in implementation">klocale.h</include>
+ <include location="local" impldecl="in implementation">joindomaindlg.ui.h</include>
+</includes>
+<slots>
+ <slot>accept()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpassdlg.h</includehint>
+ <includehint>kpassdlg.h</includehint>
+</includehints>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/joindomaindlg.ui.h b/filesharing/advanced/kcm_sambaconf/joindomaindlg.ui.h
new file mode 100644
index 00000000..bcc5fe53
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/joindomaindlg.ui.h
@@ -0,0 +1,17 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+void JoinDomainDlg::accept() {
+ if (passwordEdit->text() != verifyEdit->text()) {
+ KMessageBox::sorry(this, "Sorry", "You entered two different passwords. Please try again.");
+ return;
+ }
+
+ QDialog::accept();
+}
diff --git a/filesharing/advanced/kcm_sambaconf/kcminterface.ui b/filesharing/advanced/kcm_sambaconf/kcminterface.ui
new file mode 100644
index 00000000..0c8b31b3
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/kcminterface.ui
@@ -0,0 +1,8507 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KcmInterface</class>
+<comment>
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+</comment>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>KcmInterface</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>714</width>
+ <height>578</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>mainTab</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;qt&gt;
+Here you can edit the Samba users, stored in the smbpasswd file.
+&lt;p&gt;
+Every Samba user must have a corresponding UNIX user.
+On the right you can see all UNIX users, stored in the passwd file and not configured as Samba users.
+You can see the Samba users on the left-hand side.
+&lt;p&gt;
+To add new Samba users simply press the &lt;em&gt;&amp;lt; add&lt;/em&gt; button.
+The selected UNIX users will then become Samba users and will be
+removed from the UNIX users list (but they will remain UNIX users).
+&lt;p&gt;
+To remove Samba users click the &lt;em&gt;&amp;gt; remove&lt;/em&gt; button.
+The selected Samba users will be removed from the smbpasswd file
+and reappear on the right-hand side, as UNIX users which are not Samba users.
+&lt;/qt&gt;</string>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Base Settings</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout38</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_6</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>MShape</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>MShadow</enum>
+ </property>
+ <property name="text">
+ <string>Samba config file:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>configUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>configUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>loadBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Load</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox1_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Server Identification</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Wor&amp;kgroup:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>workgroupEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>workgroupEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enter here the name of your workgroup/domain.</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>serverStringEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>netbiosNameEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4_3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Server strin&amp;g:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>serverStringEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>NetBIOS name:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>netbiosNameEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>securityLevelBtnGrp</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Securit&amp;y Level</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout33</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>shareRadio</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Share</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>userRadio</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>User</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>serverRadio</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Server</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>domainRadio</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Domai&amp;n</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>adsRadio</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>ADS</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>securityLevelHelpLbl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Use the &lt;i&gt;share&lt;/i&gt; security level if you have a home network or a small office network.&lt;br&gt; It allows everyone to read all share names before a login is required.</string>
+ </property>
+ <property name="textFormat">
+ <enum>RichText</enum>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignTop</set>
+ </property>
+ <property name="indent">
+ <number>5</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox12</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Further Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>passwordServerLabel</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Password server address/name:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>passwordServerEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>passwordServerEdit</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>realmLabel</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Real&amp;m:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>realmEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>allowGuestLoginsChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Allo&amp;w guest logins</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="1">
+ <property name="name">
+ <cstring>layout39</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel6_5</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Guest acc&amp;ount:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer44</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>realmEdit</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox10</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Help</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>For detailed help about every option please look at:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter</set>
+ </property>
+ </widget>
+ <widget class="KURLLabel">
+ <property name="name">
+ <cstring>KURLLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>man:smb.conf</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer38</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer36</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>shareTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Shares</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Path</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Comment</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Properties</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>shareListView</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout54</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>editDefaultShareBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Edit Defau&amp;lts...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer21</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>addShareBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Add &amp;New Share...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>editShareBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Edit Share...</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>removeShareBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Re&amp;move Share</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Prin&amp;ters</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Printer</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Comment</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Properties</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>printerListView</cstring>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>AllColumns</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout53</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>editDefaultPrinterBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Edit Defau&amp;lts</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer21_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>addPrinterBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Add Ne&amp;w Printer</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>editPrinterBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Edit Pri&amp;nter</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>removePrinterBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Re&amp;move Printer</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Users</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout56</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox51_2</cstring>
+ </property>
+ <property name="title">
+ <string>Sa&amp;mba Users</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>UID</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Disabled</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>No Password</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>sambaUsersListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>10</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout55</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer71_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>addSambaUserBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Add</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer71</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>removeSambaUserBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Rem&amp;ove</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer71_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox52_2</cstring>
+ </property>
+ <property name="title">
+ <string>UNI&amp;X Users</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>UID</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>unixUsersListView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>5</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout55</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>sambaUserPasswordBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Chan&amp;ge Password...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>joinADomainBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Join Domain</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer26</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>240</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>advanced</cstring>
+ </property>
+ <attribute name="title">
+ <string>Advan&amp;ced</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>advancedFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame26</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout92</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>advancedWarningPixLbl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Here you can change advanced options of the SAMBA server.
+Only change something if you know what you are doing.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>advancedDumpTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Advanced Dump</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>advancedTab</cstring>
+ </property>
+ <property name="tabShape">
+ <enum>Rounded</enum>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Security</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget" row="0" column="0">
+ <property name="name">
+ <cstring>tabWidget4</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;General</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer90</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox66</cstring>
+ </property>
+ <property name="title">
+ <string>PAM</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>obeyPamRestrictionsChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Obey PAM restrictions</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>pamPasswordChangeChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>PAM password change</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>groupBox67</cstring>
+ </property>
+ <property name="title">
+ <string>Other Switches</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>allowTrustedDomainsChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>A&amp;llow trusted domains</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>paranoidServerSecurityChk</cstring>
+ </property>
+ <property name="text">
+ <string>Paranoid server security</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox68</cstring>
+ </property>
+ <property name="title">
+ <string>General</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2_2_2_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Auth methods:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>authMethodsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2_2_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Root director&amp;y:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>rootDirectoryEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_5_2</cstring>
+ </property>
+ <property name="text">
+ <string>I&amp;nterfaces:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>interfacesEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2_5_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Map to guest:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>mapToGuestCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="3">
+ <property name="name">
+ <cstring>bindInterfacesOnlyChk</cstring>
+ </property>
+ <property name="text">
+ <string>Bind interfaces only</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>Never</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bad User</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Bad Password</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>mapToGuestCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2_3_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Hosts e&amp;quiv:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>hostsEquivUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>rootDirectoryEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>authMethodsEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>interfacesEdit</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="2" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Spacer37_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>180</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel6_7_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Algorithmic rid base:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>algorithmicRidBaseSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="6" column="1">
+ <property name="name">
+ <cstring>algorithmicRidBaseSpin</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row="6" column="2" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Spacer37_2_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>117</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KURLRequester" row="4" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>hostsEquivUrlRq</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2_2_3_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Private dir:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>privateDirUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="5" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>privateDirUrlRq</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Pass&amp;word</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer57</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="1" column="2">
+ <property name="name">
+ <cstring>groupBox73</cstring>
+ </property>
+ <property name="title">
+ <string>Migration</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>updateEncryptedChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Update encr&amp;ypted</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox75</cstring>
+ </property>
+ <property name="title">
+ <string>Samba Passwords</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>encryptPasswordsChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>E&amp;ncrypt passwords</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Smb passwd file:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>smbPasswdFileUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>smbPasswdFileUrlRq</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_3_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Passdb bac&amp;kend:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>passdbBackendEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>passwdChatEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>passdbBackendEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Passwd chat:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>passwdChatEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>passwdChatDebugChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Passwd chat debug</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="3">
+ <property name="name">
+ <cstring>TextLabel5_2_3_4_3</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel3_5_3_3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Passwd chat timeout:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>passwdChatEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="4" column="2">
+ <property name="name">
+ <cstring>passwdChatTimeoutSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox74</cstring>
+ </property>
+ <property name="title">
+ <string>Password</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel6_7</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Password level:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>passwordLevelSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel6_3_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Min password length:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>minPasswdLengthSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Machine password timeout:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>machinePasswordTimeoutSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>machinePasswordTimeoutSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>minPasswdLengthSpin</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row="3" column="3">
+ <property name="name">
+ <cstring>Spacer31_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="3" column="2">
+ <property name="name">
+ <cstring>TextLabel5_2_3_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>nullPasswordsChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Nu&amp;ll passwords</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>passwordLevelSpin</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox76</cstring>
+ </property>
+ <property name="title">
+ <string>UNIX Passwords</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2_2_3_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Passwd program:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>passwdProgramUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="0" column="1">
+ <property name="name">
+ <cstring>passwdProgramUrlRq</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>unixPasswordSyncChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>UNI&amp;X password sync</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Userna&amp;me</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>User&amp;name map:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>usernameMapUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="1" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>usernameMapUrlRq</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_4_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Username &amp;level:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>usernameLevelSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>usernameLevelSpin</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="maxValue">
+ <number>255</number>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer52</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>hideLocalUsersChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Hide local users</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>restrictAnonymousChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Restrict anon&amp;ymous</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>useRhostsChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Use rhosts</string>
+ </property>
+ </widget>
+ <spacer row="5" column="0">
+ <property name="name">
+ <cstring>spacer53</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>170</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Authenticati&amp;on</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupBox13</cstring>
+ </property>
+ <property name="title">
+ <string>Client</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>C&amp;lient signing:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>clientSigningCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>clientPlaintextAuthChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Client plainte&amp;xt authentication</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>clientLanmanAuthChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Client lanman authentication</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="5" column="1">
+ <item>
+ <property name="text">
+ <string>Auto</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Mandatory</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Disabled</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>clientSigningCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="4" column="1">
+ <item>
+ <property name="text">
+ <string>Yes</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>No</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Auto</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>clientSchannelCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_2</cstring>
+ </property>
+ <property name="text">
+ <string>Client channel:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>clientSchannelCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>clientUseSpnegoChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Client use spnego</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>clientNTLMv2AuthChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Client NTLMv&amp;2 authentication</string>
+ </property>
+ </widget>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>spacer54</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox13_2</cstring>
+ </property>
+ <property name="title">
+ <string>Server</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_2_3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Server signing:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>serverSigningCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>lanmanAuthChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Lanman authentication</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="5" column="1">
+ <item>
+ <property name="text">
+ <string>Auto</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Mandatory</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Disabled</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>serverSigningCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="4" column="1">
+ <item>
+ <property name="text">
+ <string>Yes</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>No</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Auto</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>serverSchannelCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_2_5</cstring>
+ </property>
+ <property name="text">
+ <string>Server channel:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>serverSchannelCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>useSpnegoChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Use sp&amp;nego</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>ntlmAuthChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>NTLM authentication</string>
+ </property>
+ </widget>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>spacer54_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>120</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer row="1" column="0">
+ <property name="name">
+ <cstring>spacer55</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Logging</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>loggingFrame</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>100</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox36_2</cstring>
+ </property>
+ <property name="title">
+ <string>General</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4_3_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>L&amp;og file:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>logFileUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="0" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>logFileUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>TextLabel3_3_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>KB</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Ma&amp;x log size:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxLogSizeSpin</cstring>
+ </property>
+ </widget>
+ <spacer row="2" column="3">
+ <property name="name">
+ <cstring>spacer60_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel5_3_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>S&amp;yslog:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>syslogSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>maxLogSizeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_2_2_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>76</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Log &amp;level:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>logLevelEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>logLevelEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>syslogSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>4</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox48</cstring>
+ </property>
+ <property name="title">
+ <string>S&amp;witches</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>syslogOnlyChk</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Syslog o&amp;nly</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>statusChk</cstring>
+ </property>
+ <property name="text">
+ <string>Status</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>timestampChk</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Ti&amp;mestamp</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>microsecondsChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>microseconds</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>debugPidChk</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Debug pid</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>debugUidChk</cstring>
+ </property>
+ <property name="text">
+ <string>Debu&amp;g uid</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer114_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>60</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Tuning</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox37_2</cstring>
+ </property>
+ <property name="title">
+ <string>Modules</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel4_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Pre&amp;load modules:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>preloadModulesEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>preloadModulesEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox" row="2" column="1">
+ <property name="name">
+ <cstring>groupBox47</cstring>
+ </property>
+ <property name="title">
+ <string>Numbers</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_2_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Max smbd processes:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxSmbdProcessesSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_2_2_2_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Max open files:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxOpenFilesSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>maxSmbdProcessesSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>maxOpenFilesSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer61</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>Spacer60</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="2" column="0">
+ <property name="name">
+ <cstring>groupBox46</cstring>
+ </property>
+ <property name="title">
+ <string>Sizes</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_2_2_2_5</cstring>
+ </property>
+ <property name="text">
+ <string>Max disk size:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxDiskSizeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_2_2_2_2_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Read si&amp;ze:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>readSizeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_2_2_2_3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Stat cache size:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>statCacheSizeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>readSizeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>65536</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>statCacheSizeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>maxDiskSizeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row="0" column="3">
+ <property name="name">
+ <cstring>spacer62</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel5_2_3_2_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>MB</string>
+ <comment>mega byte</comment>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>maxXmitSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>65535</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4_4_2_7_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Ma&amp;x xmit:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxXmitSpin</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>groupBox45</cstring>
+ </property>
+ <property name="title">
+ <string>Times</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_5</cstring>
+ </property>
+ <property name="text">
+ <string>Change notify timeout:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>changeNotifyTimeoutSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>TextLabel5_2_3_4</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_4</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Keepalive:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>keepaliveSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>changeNotifyTimeoutSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>TextLabel5_2_5</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>keepaliveSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>TextLabel5_2_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Min</string>
+ <comment>minutes</comment>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Deadtime:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>deadtimeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>deadtimeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Lp&amp;q cache time:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>lpqCacheTimeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>lpqCacheTimeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="2">
+ <property name="name">
+ <cstring>TextLabel5_2_3_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="2">
+ <property name="name">
+ <cstring>TextLabel5_2_3_2_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_3_2_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Name cache timeout:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>nameCacheTimeoutSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="4" column="1">
+ <property name="name">
+ <cstring>nameCacheTimeoutSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox44</cstring>
+ </property>
+ <property name="title">
+ <string>Switches</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>getwdCacheChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Getwd cache</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>useMmapChk</cstring>
+ </property>
+ <property name="text">
+ <string>Use &amp;mmap</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kernelChangeNotifyChk</cstring>
+ </property>
+ <property name="text">
+ <string>Kernel change notif&amp;y</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>hostnameLookupsChk</cstring>
+ </property>
+ <property name="text">
+ <string>H&amp;ostname lookups</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>readRawChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Read ra&amp;w</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>writeRawChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Write raw</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Printing</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox52</cstring>
+ </property>
+ <property name="title">
+ <string>&amp;General</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Total print &amp;jobs:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>totalPrintJobsSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>totalPrintJobsSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>Spacer22</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox51</cstring>
+ </property>
+ <property name="title">
+ <string>Drivers</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>OS&amp;2 driver map:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>os2DriverMapUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3_4</cstring>
+ </property>
+ <property name="text">
+ <string>Printcap na&amp;me:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>printcapNameUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="0" column="1">
+ <property name="name">
+ <cstring>printcapNameUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="1" column="1">
+ <property name="name">
+ <cstring>os2DriverMapUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>printerDriverLbl</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <italic>1</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Pri&amp;nter driver file: </string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>printerDriverFileUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="1">
+ <property name="name">
+ <cstring>printerDriverFileUrlRq</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox50</cstring>
+ </property>
+ <property name="title">
+ <string>Commands</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Enumports command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>enumportsCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3_3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Addprinter command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>addprinterCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Deleteprinter command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>deleteprinterCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>addprinterCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>deleteprinterCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>enumportsCommandEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox49</cstring>
+ </property>
+ <property name="title">
+ <string>S&amp;witches</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>loadPrintersChk</cstring>
+ </property>
+ <property name="text">
+ <string>L&amp;oad printers</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>disableSpoolssChk</cstring>
+ </property>
+ <property name="text">
+ <string>Disab&amp;le spools</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>showAddPrinterWizardChk</cstring>
+ </property>
+ <property name="text">
+ <string>Show add printer wi&amp;zard</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer48</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Domain</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="7" column="2">
+ <property name="name">
+ <cstring>spacer58</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>100</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KIntSpinBox" row="4" column="1">
+ <property name="name">
+ <cstring>osLevelSpin</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>localMasterChk</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>L&amp;ocal master</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>domainMasterChk</cstring>
+ </property>
+ <property name="text">
+ <string>Domai&amp;n master</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>domainLogonsChk</cstring>
+ </property>
+ <property name="text">
+ <string>Domain lo&amp;gons</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>preferredMasterChk</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Preferred &amp;master</string>
+ </property>
+ </widget>
+ <spacer row="4" column="2">
+ <property name="name">
+ <cstring>Spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Preferred</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>323</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>OS &amp;level:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>osLevelSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel3_3_3_3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Domain admin group:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>domainAdminGroupEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel3_3_3_4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Domain guest group:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>domainGuestGroupEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="6" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>domainGuestGroupEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>domainAdminGroupEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>WINS</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup4</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>7</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>noWinsSupportRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Deactivate &amp;WINS</string>
+ </property>
+ <property name="autoRepeat">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>winsSupportRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Act as a WI&amp;NS server</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>otherWinsRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Use an&amp;other WINS server</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox35</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>WINS Server Settin&amp;gs</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4_4_2_4_3_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Max WINS tt&amp;l:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxWinsTtlSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4_4_2_5_3_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>&amp;Min WINS ttl:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>minWinsTtlSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>maxWinsTtlSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>minWinsTtlSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="2">
+ <property name="name">
+ <cstring>TextLabel6_5_2_4_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>TextLabel6_5_2_2_3_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ <spacer row="2" column="3">
+ <property name="name">
+ <cstring>spacer59_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>winsHookLbl</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>WINS hoo&amp;k:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>winsHookEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>winsHookEdit</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>dnsProxyChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>DNS prox&amp;y</string>
+ </property>
+ <property name="tristate">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox36</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>WINS Server IP or DNS Name</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>winsServerEdit</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox37</cstring>
+ </property>
+ <property name="title">
+ <string>General Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_3_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>WINS partners:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>winsPartnersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>winsPartnersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>winsProxyChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>WINS pro&amp;xy</string>
+ </property>
+ <property name="tristate">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer60_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>120</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Filenames</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox54</cstring>
+ </property>
+ <property name="title">
+ <string>Ge&amp;neral</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>stripDotChk</cstring>
+ </property>
+ <property name="text">
+ <string>Strip d&amp;ot</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox55</cstring>
+ </property>
+ <property name="title">
+ <string>&amp;Mangling</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>mangledStackSpin</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Mangled stac&amp;k:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>mangledStackSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Mangle prefi&amp;x:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>manglePrefixSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>manglePrefixSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>6</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer56</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox53</cstring>
+ </property>
+ <property name="title">
+ <string>Specia&amp;l</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>statCacheChk</cstring>
+ </property>
+ <property name="text">
+ <string>Stat cache</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer61</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>280</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Locking</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox59</cstring>
+ </property>
+ <property name="title">
+ <string>&amp;General</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>kernelOplocksChk</cstring>
+ </property>
+ <property name="text">
+ <string>Use ker&amp;nel oplocks</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox56</cstring>
+ </property>
+ <property name="title">
+ <string>Direct&amp;ories</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2</cstring>
+ </property>
+ <property name="text">
+ <string>Loc&amp;k directory:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>lockDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="0" column="1">
+ <property name="name">
+ <cstring>lockDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2</cstring>
+ </property>
+ <property name="text">
+ <string>Pid director&amp;y:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>pidDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="1" column="1">
+ <property name="name">
+ <cstring>pidDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox57</cstring>
+ </property>
+ <property name="title">
+ <string>Lock Spin</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>lockSpinTimeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>lockSpinCountSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>microseconds</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Lock spin count:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>lockSpinCountSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Lock spin ti&amp;me:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>lockSpinTimeSpin</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer60</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox58</cstring>
+ </property>
+ <property name="title">
+ <string>Very Advanced</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Oplock break &amp;wait time:</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter</set>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>oplockBreakWaitTimeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>oplockBreakWaitTimeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>milliseconds</string>
+ </property>
+ </widget>
+ <spacer row="0" column="4">
+ <property name="name">
+ <cstring>spacer101</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer59</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>120</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Charset</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox40</cstring>
+ </property>
+ <property name="title">
+ <string>Samba &amp;3.x</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_4_2_2_2_2_3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>D&amp;OS charset:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>dosCharsetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>dosCharsetEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_4_2_2_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>UNI&amp;X charset:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>unixCharsetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>unixCharsetEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_4_2_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Displa&amp;y charset:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>displayCharsetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>displayCharsetEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>unicodeChk</cstring>
+ </property>
+ <property name="text">
+ <string>U&amp;nicode</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox39</cstring>
+ </property>
+ <property name="title">
+ <string>Samba &amp;2.x</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Character set:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>characterSetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>characterSetEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>clientCodePageEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="text">
+ <string>Va&amp;lid chars:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>validCharsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="1">
+ <property name="name">
+ <cstring>codePageDirUrlRq</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>validCharsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_4_3_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Code page directory:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>codePageDirUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>codingSystemEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_4_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Codin&amp;g system:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>codingSystemEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2_3_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Client code page:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>clientCodePageEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer185</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>80</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Logon</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox60</cstring>
+ </property>
+ <property name="title">
+ <string>Add Scripts</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2</cstring>
+ </property>
+ <property name="text">
+ <string>Add user script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>addUserScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>addUserScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_5_2</cstring>
+ </property>
+ <property name="text">
+ <string>Add user to group script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>addUserToGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_5</cstring>
+ </property>
+ <property name="text">
+ <string>Add gr&amp;oup script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>addGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>addGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>addUserToGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_6</cstring>
+ </property>
+ <property name="text">
+ <string>Add machine script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>addMachineScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>addMachineScriptEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="3" column="0">
+ <property name="name">
+ <cstring>Spacer64</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupBox61</cstring>
+ </property>
+ <property name="title">
+ <string>Delete Scripts</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>deleteUserScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>deleteUserFromGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>deleteGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Delete group script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>deleteGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Delete user script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>deleteUserScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Delete user from group script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>deleteUserFromGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="0">
+ <property name="name">
+ <cstring>groupBox64</cstring>
+ </property>
+ <property name="title">
+ <string>Primary Group Script</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel7_2_5_3</cstring>
+ </property>
+ <property name="text">
+ <string>Set primar&amp;y group script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>SetPrimaryGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>SetPrimaryGroupScriptEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox62</cstring>
+ </property>
+ <property name="title">
+ <string>Shutdown</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Shutdo&amp;wn script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>shutdownScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Abort shutdown script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>abortShutdownScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>shutdownScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>abortShutdownScriptEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>groupBox63</cstring>
+ </property>
+ <property name="title">
+ <string>Logon</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Logo&amp;n path:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>logonPathUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="3" column="1">
+ <property name="name">
+ <cstring>logonHomeUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel8_2</cstring>
+ </property>
+ <property name="text">
+ <string>Logon ho&amp;me:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>logonHomeUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>logonDriveEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Logon drive:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>logonDriveEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="1">
+ <property name="name">
+ <cstring>logonPathUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel7_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Lo&amp;gon script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>logonScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>logonScriptEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Socket</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout25</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel15</cstring>
+ </property>
+ <property name="text">
+ <string>Socket address:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>socketAddressEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>socketAddressEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox7</cstring>
+ </property>
+ <property name="title">
+ <string>Socket Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="3" column="0">
+ <property name="name">
+ <cstring>SO_KEEPALIVEChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_&amp;KEEPALIVE</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>SO_SNDBUFChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_S&amp;NDBUF:</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>SO_RCVLOWATSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>SO_SNDLOWATSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="0">
+ <property name="name">
+ <cstring>SO_BROADCASTChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_BROADCAST</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>TCP_NODELAYChk</cstring>
+ </property>
+ <property name="text">
+ <string>TCP_NODELA&amp;Y</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>IPTOS_LOWDELAYChk</cstring>
+ </property>
+ <property name="text">
+ <string>IPTOS_LOWDELAY</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="1">
+ <property name="name">
+ <cstring>SO_RCVLOWATChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_RCV&amp;LOWAT:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0">
+ <property name="name">
+ <cstring>SO_REUSEADDRChk</cstring>
+ </property>
+ <property name="text">
+ <string>S&amp;O_REUSEADDR</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="1">
+ <property name="name">
+ <cstring>SO_SNDLOWATChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_SNDLO&amp;WAT:</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="2">
+ <property name="name">
+ <cstring>SO_SNDBUFSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>IPTOS_THROUGHPUTChk</cstring>
+ </property>
+ <property name="text">
+ <string>IPTOS_THROU&amp;GHPUT</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>SO_RCVBUFChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_RCVBUF:</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>SO_RCVBUFSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row="0" column="3">
+ <property name="name">
+ <cstring>Spacer69</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer62</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>70</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>SSL</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>sslChk</cstring>
+ </property>
+ <property name="text">
+ <string>E&amp;nable SSL</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Enables or disables the entire SSL mode</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This enables or disables the entire SSL mode. If it is set to no, the SSL-enabled Samba behaves exactly like the non-SSL Samba. If set to yes, it depends on the variables ssl hosts and ssl hosts resign whether an SSL connection will be required.
+
+This is only available if the SSL libraries have been compiled on your system and the configure option --with-ssl was given at configure time.</string>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>SSLFrame</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout81</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>SSL h&amp;osts:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslHostsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="6" column="1">
+ <property name="name">
+ <cstring>Layout232_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>sslEntropyFileUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel12_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>SSL entrop&amp;y bytes:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslEntropyBytesSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox">
+ <property name="name">
+ <cstring>sslEntropyBytesSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>sslHostsResignEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="3" column="1">
+ <property name="name">
+ <cstring>sslCACertDirUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="7" column="1">
+ <property name="name">
+ <cstring>sslCiphersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>sslEgdSocketEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>TextLabel14_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>SSL ciphers:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslCiphersEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3_7</cstring>
+ </property>
+ <property name="text">
+ <string>SSL hosts resi&amp;gn:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslHostsResignEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="1">
+ <property name="name">
+ <cstring>Layout80</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>ssl2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ssl3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ssl2or3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>tls1</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>sslVersionCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>sslCompatibilityChk</cstring>
+ </property>
+ <property name="text">
+ <string>SSL co&amp;mpatibility</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer223_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>140</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel4_4</cstring>
+ </property>
+ <property name="text">
+ <string>SSL CA certDir:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslCACertDirUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="4" column="1">
+ <property name="name">
+ <cstring>sslCACertFileUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel11_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>SSL entropy file:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslEntropyFileUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel10_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>SSL egd socket:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslEgdSocketEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel15_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>SSL version:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslVersionCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>sslHostsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5_4_3</cstring>
+ </property>
+ <property name="text">
+ <string>SSL CA certFile:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslCACertFileUrlRq</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout231</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KURLRequester" row="1" column="3">
+ <property name="name">
+ <cstring>sslClientCertUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="2" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>sslRequireClientcertChk</cstring>
+ </property>
+ <property name="text">
+ <string>SSL require clientcert</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>TextLabel9_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>SSL client key:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslClientKeyUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>sslRequireServercertChk</cstring>
+ </property>
+ <property name="text">
+ <string>SSL re&amp;quire servercert</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="3">
+ <property name="name">
+ <cstring>sslClientKeyUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel6_6_2</cstring>
+ </property>
+ <property name="text">
+ <string>SS&amp;L server cert:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslServerCertUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>TextLabel8_4</cstring>
+ </property>
+ <property name="text">
+ <string>SSL client cert:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslClientCertUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="1" column="1">
+ <property name="name">
+ <cstring>sslServerCertUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="1">
+ <property name="name">
+ <cstring>sslServerKeyUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel7_5</cstring>
+ </property>
+ <property name="text">
+ <string>SSL server &amp;key:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sslServerKeyUrlRq</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer46</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Protocol</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>Spacer63</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox69</cstring>
+ </property>
+ <property name="title">
+ <string>Limits</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>maxTtlSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel4_4_4_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Ma&amp;x mux:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxMuxSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel4_4_2_3_3_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Max tt&amp;l:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxTtlSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>maxMuxSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <spacer row="1" column="3">
+ <property name="name">
+ <cstring>spacer86</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>330</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>TextLabel6_5_4_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ <comment>seconds</comment>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox70</cstring>
+ </property>
+ <property name="title">
+ <string>S&amp;witches</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>timeServerChk</cstring>
+ </property>
+ <property name="text">
+ <string>Ti&amp;me server</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>largeReadWriteChk</cstring>
+ </property>
+ <property name="text">
+ <string>Lar&amp;ge readwrite</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>unixExtensionsChk</cstring>
+ </property>
+ <property name="text">
+ <string>UNIX extensions</string>
+ </property>
+ <property name="accel">
+ <string>Alt+
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>readBmpxChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Read bmpx</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1">
+ <property name="name">
+ <cstring>groupBox71</cstring>
+ </property>
+ <property name="title">
+ <string>Protocol Versions</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Max protocol:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxProtocolCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Announce version:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>announceVersionEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3_6_2</cstring>
+ </property>
+ <property name="text">
+ <string>A&amp;nnounce as:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>announceAsCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Min protocol:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>minProtocolCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Pr&amp;otocol:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>protocolCombo</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer87</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>NT1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LANMAN2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LANMAN1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>CORE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>COREPLUS</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>protocolCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="3" column="1">
+ <item>
+ <property name="text">
+ <string>NT1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LANMAN2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LANMAN1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>CORE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>COREPLUS</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>maxProtocolCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="4" column="1">
+ <item>
+ <property name="text">
+ <string>NT1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LANMAN2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LANMAN1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>CORE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>COREPLUS</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>minProtocolCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>NT</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NT Workstation</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>win95</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>WfW</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>announceAsCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>announceVersionEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>4.2</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>groupBox72</cstring>
+ </property>
+ <property name="title">
+ <string>Listening SMB Ports</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel5_4_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>SMB ports:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>smbPortsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>smbPortsEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Browsing</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>LM i&amp;nterval:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>lmIntervalSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5</cstring>
+ </property>
+ <property name="text">
+ <string>L&amp;M announce:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>lmAnnounceCombo</cstring>
+ </property>
+ </widget>
+ <spacer row="3" column="3">
+ <property name="name">
+ <cstring>Spacer40</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>340</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLineEdit" row="4" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>remoteBrowseSyncEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="2">
+ <property name="name">
+ <cstring>TextLabel27_2</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="3" column="1">
+ <property name="name">
+ <cstring>lmIntervalSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel14</cstring>
+ </property>
+ <property name="text">
+ <string>Remote browse s&amp;ync:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>remoteBrowseSyncEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>Yes</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>No</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Auto</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>lmAnnounceCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>browseListChk</cstring>
+ </property>
+ <property name="text">
+ <string>Bro&amp;wse list</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>enhancedBrowsingChk</cstring>
+ </property>
+ <property name="text">
+ <string>Enhanced browsin&amp;g</string>
+ </property>
+ </widget>
+ <spacer row="6" column="0">
+ <property name="name">
+ <cstring>Spacer39</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>300</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Pre&amp;load:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>preloadEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>preloadEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Winbind</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel21</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Winbind/Idmap UID:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>winbindUidEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>winbindUidEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>winbindGidEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel21_2</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind/Idmap &amp;GID:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>winbindGidEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel22</cstring>
+ </property>
+ <property name="text">
+ <string>Template h&amp;omedir:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>templateHomedirEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>templateHomedirEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel23</cstring>
+ </property>
+ <property name="text">
+ <string>Temp&amp;late shell:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>templateShellEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>templateShellEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel24</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind separator:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>winbindSeparatorEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>winbindSeparatorEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel24_2</cstring>
+ </property>
+ <property name="text">
+ <string>Template primary group:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>templatePrimaryGroupEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>templatePrimaryGroupEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="3">
+ <property name="name">
+ <cstring>TextLabel27</cstring>
+ </property>
+ <property name="text">
+ <string>Sec</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel25</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind cache ti&amp;me:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>winbindCacheTimeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="6" column="2">
+ <property name="name">
+ <cstring>winbindCacheTimeSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <spacer row="6" column="4">
+ <property name="name">
+ <cstring>Spacer35</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>370</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QComboBox" row="7" column="2" rowspan="1" colspan="2">
+ <item>
+ <property name="text">
+ <string>Windows NT 4</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Windows 2000</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Auto</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>aclCompatibilityCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>textLabel3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Acl compatibilit&amp;y:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>aclCompatibilityCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="8" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>winbindEnumUsersChk</cstring>
+ </property>
+ <property name="text">
+ <string>Wi&amp;nbind enum users</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="9" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>winbindEnumGroupsChk</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind enum groups</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="10" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>winbindUseDefaultDomainChk</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind use default domain</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="11" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>winbindEnableLocalAccountsChk</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind enable local accounts</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="12" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>winbindTrustedDomainsOnlyChk</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind trusted domains only</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="13" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>winbindNestedGroupsChk</cstring>
+ </property>
+ <property name="text">
+ <string>Winbind nested groups</string>
+ </property>
+ </widget>
+ <spacer row="14" column="1">
+ <property name="name">
+ <cstring>Spacer34</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>100</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>NetBIOS</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="4" column="0">
+ <property name="name">
+ <cstring>Spacer220</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>280</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3_4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>NetBIOS sc&amp;ope:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>netbiosScopeEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>&amp;NetBIOS aliases:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>netbiosAliasesEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>disableNetbiosChk</cstring>
+ </property>
+ <property name="text">
+ <string>Disab&amp;le netbios</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel5_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Na&amp;me resolve order:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>nameResolveOrderEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>netbiosScopeEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>netbiosAliasesEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>nameResolveOrderEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>lmhosts host wins bcast</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>VFS</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>hostMsdfsChk</cstring>
+ </property>
+ <property name="text">
+ <string>H&amp;ost msdfs</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer221</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>LDAP</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP suffi&amp;x:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapSuffixEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP machine suffix:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapMachineSuffixEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2_2_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP user suffix:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapUserSuffixEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2_2_2_3</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP &amp;group suffix:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapGroupSuffixEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2_2_2_4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP idmap suffix:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapIdmapSuffixEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2_2_2_5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP filter:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapFilterEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel3_2_2_2_6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP ad&amp;min dn:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapAdminDnEdit</cstring>
+ </property>
+ </widget>
+ <spacer row="12" column="0">
+ <property name="name">
+ <cstring>spacer46</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>130</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox" row="11" column="0">
+ <property name="name">
+ <cstring>ldapDeleteDnChk</cstring>
+ </property>
+ <property name="text">
+ <string>LDAP delete d&amp;n</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="10" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>LDAP s&amp;ync:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapSyncCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="9" column="0">
+ <property name="name">
+ <cstring>TextLabel3_5_4</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;LDAP ssl:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>ldapSslCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>TextLabel3_4_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Idmap bac&amp;kend:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>idmapBackendEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="8" column="0">
+ <property name="name">
+ <cstring>TextLabel3_4_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>LDAP replication sleep:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>idmapBackendEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="7" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>idmapBackendEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="6" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ldapAdminDnEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="5" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ldapFilterEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="4" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ldapIdmapSuffixEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="3" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ldapGroupSuffixEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ldapUserSuffixEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ldapMachineSuffixEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>ldapSuffixEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="8" column="1">
+ <property name="name">
+ <cstring>ldapReplicationSleepSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="8" column="2">
+ <property name="name">
+ <cstring>textLabel3_3</cstring>
+ </property>
+ <property name="text">
+ <string>milliseconds</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="9" column="1">
+ <item>
+ <property name="text">
+ <string>Off</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Start_tls</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>On</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ldapSslCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="10" column="1">
+ <item>
+ <property name="text">
+ <string>Yes</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>No</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Only</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ldapSyncCombo</cstring>
+ </property>
+ </widget>
+ <spacer row="9" column="2">
+ <property name="name">
+ <cstring>spacer88</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>330</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>TabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Commands</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_5</cstring>
+ </property>
+ <property name="text">
+ <string>Add share c&amp;ommand:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>addShareCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Change share command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>changeShareCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel3_3</cstring>
+ </property>
+ <property name="text">
+ <string>De&amp;lete share command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>deleteShareCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel10</cstring>
+ </property>
+ <property name="text">
+ <string>Messa&amp;ge command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>messageCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel11</cstring>
+ </property>
+ <property name="text">
+ <string>Dfree co&amp;mmand:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>dfreeCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel1_5_2</cstring>
+ </property>
+ <property name="text">
+ <string>Set &amp;quota command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>setQuotaCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Get quota command:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>getQuotaCommandEdit</cstring>
+ </property>
+ </widget>
+ <spacer row="8" column="0">
+ <property name="name">
+ <cstring>spacer52_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>230</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>TextLabel20</cstring>
+ </property>
+ <property name="text">
+ <string>Pa&amp;nic action:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>panicActionEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>messageCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>dfreeCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>setQuotaCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="6" column="1">
+ <property name="name">
+ <cstring>getQuotaCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="7" column="1">
+ <property name="name">
+ <cstring>panicActionEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>deleteShareCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>changeShareCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>addShareCommandEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Misc</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox12</cstring>
+ </property>
+ <property name="title">
+ <string>Miscellaneous</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel17</cstring>
+ </property>
+ <property name="text">
+ <string>Time &amp;offset:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>timeOffsetSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>sourceEnvironmentEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>defaultServiceEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel9</cstring>
+ </property>
+ <property name="text">
+ <string>Default service:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>defaultServiceEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel13</cstring>
+ </property>
+ <property name="text">
+ <string>Remote a&amp;nnounce:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>remoteAnnounceEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>remoteAnnounceEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel19</cstring>
+ </property>
+ <property name="text">
+ <string>Source environment:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>sourceEnvironmentEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>CheckBox68</cstring>
+ </property>
+ <property name="text">
+ <string>Hide &amp;local users</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>timeOffsetSpin</cstring>
+ </property>
+ <property name="maxValue">
+ <number>1440</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>TextLabel18</cstring>
+ </property>
+ <property name="text">
+ <string>Min</string>
+ <comment>minurtes</comment>
+ </property>
+ </widget>
+ <spacer row="2" column="3">
+ <property name="name">
+ <cstring>spacer63</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox11</cstring>
+ </property>
+ <property name="title">
+ <string>NIS</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>nisHomedirChk</cstring>
+ </property>
+ <property name="text">
+ <string>NIS homedir</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel16</cstring>
+ </property>
+ <property name="text">
+ <string>Homedir map:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>homedirMapEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>homedirMapEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox9</cstring>
+ </property>
+ <property name="title">
+ <string>UTMP</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel7_3</cstring>
+ </property>
+ <property name="text">
+ <string>Utmp director&amp;y:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>utmpDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="2" column="1">
+ <property name="name">
+ <cstring>wtmpDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel8_3</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Wtmp directory:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>wtmpDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="1" column="1">
+ <property name="name">
+ <cstring>utmpDirectoryUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>CheckBox51</cstring>
+ </property>
+ <property name="text">
+ <string>Ut&amp;mp</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer33</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Debug</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>ntStatusSupportChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;NT status support</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>ntSmbSupportChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>NT S&amp;MB support</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>ntPipeSupportChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>NT pipe supp&amp;ort</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer81</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>320</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+</customwidgets>
+<connections>
+ <connection>
+ <sender>shareListView</sender>
+ <signal>doubleClicked(QListViewItem*)</signal>
+ <receiver>editShareBtn</receiver>
+ <slot>animateClick()</slot>
+ </connection>
+ <connection>
+ <sender>printerListView</sender>
+ <signal>doubleClicked(QListViewItem*)</signal>
+ <receiver>editPrinterBtn</receiver>
+ <slot>animateClick()</slot>
+ </connection>
+ <connection>
+ <sender>KURLLabel1</sender>
+ <signal>leftClickedURL()</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>KURLLabel1_leftClickedURL()</slot>
+ </connection>
+ <connection>
+ <sender>serverRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>domainRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>lmAnnounceCombo</sender>
+ <signal>activated(int)</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>lmAnnounceCombo_activated(int)</slot>
+ </connection>
+ <connection>
+ <sender>allowGuestLoginsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>allowGuestLoginsChk_toggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>allowGuestLoginsChk</sender>
+ <signal>pressed()</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>SO_SNDBUFChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_SNDBUFSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>SO_RCVBUFChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_RCVBUFSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>SO_SNDLOWATChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_SNDLOWATSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>SO_RCVLOWATChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_RCVLOWATSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>shareRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>allowGuestLoginsChk</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>userRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>allowGuestLoginsChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>serverRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>allowGuestLoginsChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>domainRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>allowGuestLoginsChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>shareRadio</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>userRadio</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>serverRadio</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>domainRadio</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>passwordServerEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>KcmInterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>sslChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SSLFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>timestampChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>microsecondsChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>adsRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>adsRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>adsRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>realmLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>adsRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>realmEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>allowGuestLoginsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>TextLabel6_5</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>allowGuestLoginsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>guestAccountCombo</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>domainRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>domainRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>serverRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerLabel</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>serverRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>passwordServerEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>adsRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>allowGuestLoginsChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>shareRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>TextLabel6_5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>shareRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>guestAccountCombo</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>winsSupportRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>groupBox35</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>otherWinsRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>groupBox36</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>winsSupportRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>dnsProxyChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>winsSupportRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>winsHookEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>winsSupportRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>winsHookEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>winsSupportRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>maxWinsTtlSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>winsSupportRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>minWinsTtlSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>otherWinsRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>winsServerEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>winsSupportRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>winsHookLbl</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>ntStatusSupportChk</tabstop>
+ <tabstop>ntSmbSupportChk</tabstop>
+ <tabstop>ntPipeSupportChk</tabstop>
+ <tabstop>CheckBox68</tabstop>
+ <tabstop>defaultServiceEdit</tabstop>
+ <tabstop>timeOffsetSpin</tabstop>
+ <tabstop>remoteAnnounceEdit</tabstop>
+ <tabstop>sourceEnvironmentEdit</tabstop>
+ <tabstop>nisHomedirChk</tabstop>
+ <tabstop>homedirMapEdit</tabstop>
+ <tabstop>CheckBox51</tabstop>
+ <tabstop>utmpDirectoryUrlRq</tabstop>
+ <tabstop>wtmpDirectoryUrlRq</tabstop>
+ <tabstop>advancedTab</tabstop>
+ <tabstop>addShareCommandEdit</tabstop>
+ <tabstop>changeShareCommandEdit</tabstop>
+ <tabstop>deleteShareCommandEdit</tabstop>
+ <tabstop>messageCommandEdit</tabstop>
+ <tabstop>dfreeCommandEdit</tabstop>
+ <tabstop>setQuotaCommandEdit</tabstop>
+ <tabstop>getQuotaCommandEdit</tabstop>
+ <tabstop>panicActionEdit</tabstop>
+ <tabstop>ldapSuffixEdit</tabstop>
+ <tabstop>ldapMachineSuffixEdit</tabstop>
+ <tabstop>ldapUserSuffixEdit</tabstop>
+ <tabstop>ldapGroupSuffixEdit</tabstop>
+ <tabstop>ldapIdmapSuffixEdit</tabstop>
+ <tabstop>ldapFilterEdit</tabstop>
+ <tabstop>ldapAdminDnEdit</tabstop>
+ <tabstop>idmapBackendEdit</tabstop>
+ <tabstop>ldapSslCombo</tabstop>
+ <tabstop>ldapSyncCombo</tabstop>
+ <tabstop>ldapDeleteDnChk</tabstop>
+ <tabstop>hostMsdfsChk</tabstop>
+ <tabstop>disableNetbiosChk</tabstop>
+ <tabstop>netbiosAliasesEdit</tabstop>
+ <tabstop>netbiosScopeEdit</tabstop>
+ <tabstop>nameResolveOrderEdit</tabstop>
+ <tabstop>winbindUidEdit</tabstop>
+ <tabstop>winbindGidEdit</tabstop>
+ <tabstop>templateHomedirEdit</tabstop>
+ <tabstop>templateShellEdit</tabstop>
+ <tabstop>winbindSeparatorEdit</tabstop>
+ <tabstop>templatePrimaryGroupEdit</tabstop>
+ <tabstop>winbindCacheTimeSpin</tabstop>
+ <tabstop>aclCompatibilityCombo</tabstop>
+ <tabstop>winbindEnumUsersChk</tabstop>
+ <tabstop>winbindEnumGroupsChk</tabstop>
+ <tabstop>winbindUseDefaultDomainChk</tabstop>
+ <tabstop>winbindEnableLocalAccountsChk</tabstop>
+ <tabstop>winbindTrustedDomainsOnlyChk</tabstop>
+ <tabstop>enhancedBrowsingChk</tabstop>
+ <tabstop>browseListChk</tabstop>
+ <tabstop>lmAnnounceCombo</tabstop>
+ <tabstop>lmIntervalSpin</tabstop>
+ <tabstop>remoteBrowseSyncEdit</tabstop>
+ <tabstop>preloadEdit</tabstop>
+ <tabstop>timeServerChk</tabstop>
+ <tabstop>largeReadWriteChk</tabstop>
+ <tabstop>unixExtensionsChk</tabstop>
+ <tabstop>readBmpxChk</tabstop>
+ <tabstop>announceAsCombo</tabstop>
+ <tabstop>announceVersionEdit</tabstop>
+ <tabstop>protocolCombo</tabstop>
+ <tabstop>maxProtocolCombo</tabstop>
+ <tabstop>minProtocolCombo</tabstop>
+ <tabstop>maxMuxSpin</tabstop>
+ <tabstop>maxTtlSpin</tabstop>
+ <tabstop>smbPortsEdit</tabstop>
+ <tabstop>sslChk</tabstop>
+ <tabstop>sslVersionCombo</tabstop>
+ <tabstop>sslCompatibilityChk</tabstop>
+ <tabstop>sslHostsEdit</tabstop>
+ <tabstop>sslHostsResignEdit</tabstop>
+ <tabstop>sslCACertDirUrlRq</tabstop>
+ <tabstop>sslCACertFileUrlRq</tabstop>
+ <tabstop>sslEgdSocketEdit</tabstop>
+ <tabstop>sslEntropyFileUrlRq</tabstop>
+ <tabstop>sslEntropyBytesSpin</tabstop>
+ <tabstop>sslCiphersEdit</tabstop>
+ <tabstop>sslRequireServercertChk</tabstop>
+ <tabstop>sslServerCertUrlRq</tabstop>
+ <tabstop>sslServerKeyUrlRq</tabstop>
+ <tabstop>sslRequireClientcertChk</tabstop>
+ <tabstop>sslClientCertUrlRq</tabstop>
+ <tabstop>sslClientKeyUrlRq</tabstop>
+ <tabstop>socketAddressEdit</tabstop>
+ <tabstop>TCP_NODELAYChk</tabstop>
+ <tabstop>IPTOS_LOWDELAYChk</tabstop>
+ <tabstop>IPTOS_THROUGHPUTChk</tabstop>
+ <tabstop>SO_KEEPALIVEChk</tabstop>
+ <tabstop>SO_REUSEADDRChk</tabstop>
+ <tabstop>SO_BROADCASTChk</tabstop>
+ <tabstop>SO_SNDBUFChk</tabstop>
+ <tabstop>SO_SNDBUFSpin</tabstop>
+ <tabstop>SO_RCVBUFChk</tabstop>
+ <tabstop>SO_RCVBUFSpin</tabstop>
+ <tabstop>SO_SNDLOWATChk</tabstop>
+ <tabstop>SO_SNDLOWATSpin</tabstop>
+ <tabstop>SO_RCVLOWATChk</tabstop>
+ <tabstop>SO_RCVLOWATSpin</tabstop>
+ <tabstop>addUserScriptEdit</tabstop>
+ <tabstop>addGroupScriptEdit</tabstop>
+ <tabstop>addUserToGroupScriptEdit</tabstop>
+ <tabstop>addMachineScriptEdit</tabstop>
+ <tabstop>shutdownScriptEdit</tabstop>
+ <tabstop>abortShutdownScriptEdit</tabstop>
+ <tabstop>SetPrimaryGroupScriptEdit</tabstop>
+ <tabstop>deleteUserScriptEdit</tabstop>
+ <tabstop>deleteGroupScriptEdit</tabstop>
+ <tabstop>deleteUserFromGroupScriptEdit</tabstop>
+ <tabstop>logonScriptEdit</tabstop>
+ <tabstop>logonDriveEdit</tabstop>
+ <tabstop>logonPathUrlRq</tabstop>
+ <tabstop>logonHomeUrlRq</tabstop>
+ <tabstop>unicodeChk</tabstop>
+ <tabstop>displayCharsetEdit</tabstop>
+ <tabstop>unixCharsetEdit</tabstop>
+ <tabstop>dosCharsetEdit</tabstop>
+ <tabstop>characterSetEdit</tabstop>
+ <tabstop>clientCodePageEdit</tabstop>
+ <tabstop>codePageDirUrlRq</tabstop>
+ <tabstop>codingSystemEdit</tabstop>
+ <tabstop>validCharsEdit</tabstop>
+ <tabstop>mainTab</tabstop>
+ <tabstop>configUrlRq</tabstop>
+ <tabstop>loadBtn</tabstop>
+ <tabstop>workgroupEdit</tabstop>
+ <tabstop>netbiosNameEdit</tabstop>
+ <tabstop>serverStringEdit</tabstop>
+ <tabstop>shareRadio</tabstop>
+ <tabstop>userRadio</tabstop>
+ <tabstop>serverRadio</tabstop>
+ <tabstop>domainRadio</tabstop>
+ <tabstop>adsRadio</tabstop>
+ <tabstop>passwordServerEdit</tabstop>
+ <tabstop>realmEdit</tabstop>
+ <tabstop>guestAccountCombo</tabstop>
+ <tabstop>allowGuestLoginsChk</tabstop>
+ <tabstop>shareListView</tabstop>
+ <tabstop>editDefaultShareBtn</tabstop>
+ <tabstop>addShareBtn</tabstop>
+ <tabstop>editShareBtn</tabstop>
+ <tabstop>removeShareBtn</tabstop>
+ <tabstop>printerListView</tabstop>
+ <tabstop>editDefaultPrinterBtn</tabstop>
+ <tabstop>addPrinterBtn</tabstop>
+ <tabstop>editPrinterBtn</tabstop>
+ <tabstop>removePrinterBtn</tabstop>
+ <tabstop>sambaUsersListView</tabstop>
+ <tabstop>addSambaUserBtn</tabstop>
+ <tabstop>removeSambaUserBtn</tabstop>
+ <tabstop>unixUsersListView</tabstop>
+ <tabstop>sambaUserPasswordBtn</tabstop>
+ <tabstop>joinADomainBtn</tabstop>
+ <tabstop>tabWidget4</tabstop>
+ <tabstop>mapToGuestCombo</tabstop>
+ <tabstop>interfacesEdit</tabstop>
+ <tabstop>bindInterfacesOnlyChk</tabstop>
+ <tabstop>rootDirectoryEdit</tabstop>
+ <tabstop>authMethodsEdit</tabstop>
+ <tabstop>hostsEquivUrlRq</tabstop>
+ <tabstop>privateDirUrlRq</tabstop>
+ <tabstop>algorithmicRidBaseSpin</tabstop>
+ <tabstop>obeyPamRestrictionsChk</tabstop>
+ <tabstop>pamPasswordChangeChk</tabstop>
+ <tabstop>allowTrustedDomainsChk</tabstop>
+ <tabstop>paranoidServerSecurityChk</tabstop>
+ <tabstop>encryptPasswordsChk</tabstop>
+ <tabstop>smbPasswdFileUrlRq</tabstop>
+ <tabstop>passdbBackendEdit</tabstop>
+ <tabstop>passwdChatEdit</tabstop>
+ <tabstop>passwdChatDebugChk</tabstop>
+ <tabstop>passwdProgramUrlRq</tabstop>
+ <tabstop>unixPasswordSyncChk</tabstop>
+ <tabstop>nullPasswordsChk</tabstop>
+ <tabstop>passwordLevelSpin</tabstop>
+ <tabstop>minPasswdLengthSpin</tabstop>
+ <tabstop>machinePasswordTimeoutSpin</tabstop>
+ <tabstop>updateEncryptedChk</tabstop>
+ <tabstop>usernameLevelSpin</tabstop>
+ <tabstop>usernameMapUrlRq</tabstop>
+ <tabstop>hideLocalUsersChk</tabstop>
+ <tabstop>restrictAnonymousChk</tabstop>
+ <tabstop>useRhostsChk</tabstop>
+ <tabstop>lanmanAuthChk</tabstop>
+ <tabstop>ntlmAuthChk</tabstop>
+ <tabstop>useSpnegoChk</tabstop>
+ <tabstop>serverSchannelCombo</tabstop>
+ <tabstop>serverSigningCombo</tabstop>
+ <tabstop>clientLanmanAuthChk</tabstop>
+ <tabstop>clientPlaintextAuthChk</tabstop>
+ <tabstop>clientNTLMv2AuthChk</tabstop>
+ <tabstop>clientUseSpnegoChk</tabstop>
+ <tabstop>clientSchannelCombo</tabstop>
+ <tabstop>clientSigningCombo</tabstop>
+ <tabstop>logFileUrlRq</tabstop>
+ <tabstop>logLevelEdit</tabstop>
+ <tabstop>maxLogSizeSpin</tabstop>
+ <tabstop>syslogSpin</tabstop>
+ <tabstop>syslogOnlyChk</tabstop>
+ <tabstop>statusChk</tabstop>
+ <tabstop>timestampChk</tabstop>
+ <tabstop>microsecondsChk</tabstop>
+ <tabstop>debugPidChk</tabstop>
+ <tabstop>debugUidChk</tabstop>
+ <tabstop>preloadModulesEdit</tabstop>
+ <tabstop>getwdCacheChk</tabstop>
+ <tabstop>useMmapChk</tabstop>
+ <tabstop>kernelChangeNotifyChk</tabstop>
+ <tabstop>hostnameLookupsChk</tabstop>
+ <tabstop>readRawChk</tabstop>
+ <tabstop>writeRawChk</tabstop>
+ <tabstop>changeNotifyTimeoutSpin</tabstop>
+ <tabstop>deadtimeSpin</tabstop>
+ <tabstop>keepaliveSpin</tabstop>
+ <tabstop>lpqCacheTimeSpin</tabstop>
+ <tabstop>nameCacheTimeoutSpin</tabstop>
+ <tabstop>maxDiskSizeSpin</tabstop>
+ <tabstop>readSizeSpin</tabstop>
+ <tabstop>statCacheSizeSpin</tabstop>
+ <tabstop>maxXmitSpin</tabstop>
+ <tabstop>maxSmbdProcessesSpin</tabstop>
+ <tabstop>maxOpenFilesSpin</tabstop>
+ <tabstop>totalPrintJobsSpin</tabstop>
+ <tabstop>printcapNameUrlRq</tabstop>
+ <tabstop>os2DriverMapUrlRq</tabstop>
+ <tabstop>printerDriverFileUrlRq</tabstop>
+ <tabstop>addprinterCommandEdit</tabstop>
+ <tabstop>deleteprinterCommandEdit</tabstop>
+ <tabstop>enumportsCommandEdit</tabstop>
+ <tabstop>loadPrintersChk</tabstop>
+ <tabstop>disableSpoolssChk</tabstop>
+ <tabstop>showAddPrinterWizardChk</tabstop>
+ <tabstop>preferredMasterChk</tabstop>
+ <tabstop>localMasterChk</tabstop>
+ <tabstop>domainMasterChk</tabstop>
+ <tabstop>domainLogonsChk</tabstop>
+ <tabstop>osLevelSpin</tabstop>
+ <tabstop>domainAdminGroupEdit</tabstop>
+ <tabstop>domainGuestGroupEdit</tabstop>
+ <tabstop>noWinsSupportRadio</tabstop>
+ <tabstop>dnsProxyChk</tabstop>
+ <tabstop>winsHookEdit</tabstop>
+ <tabstop>maxWinsTtlSpin</tabstop>
+ <tabstop>minWinsTtlSpin</tabstop>
+ <tabstop>winsServerEdit</tabstop>
+ <tabstop>winsProxyChk</tabstop>
+ <tabstop>winsPartnersEdit</tabstop>
+ <tabstop>stripDotChk</tabstop>
+ <tabstop>mangledStackSpin</tabstop>
+ <tabstop>manglePrefixSpin</tabstop>
+ <tabstop>statCacheChk</tabstop>
+ <tabstop>kernelOplocksChk</tabstop>
+ <tabstop>lockDirectoryUrlRq</tabstop>
+ <tabstop>pidDirectoryUrlRq</tabstop>
+ <tabstop>lockSpinCountSpin</tabstop>
+ <tabstop>lockSpinTimeSpin</tabstop>
+ <tabstop>oplockBreakWaitTimeSpin</tabstop>
+</tabstops>
+<includes>
+ <include location="global" impldecl="in declaration">qptrlist.h</include>
+ <include location="global" impldecl="in declaration">share.h</include>
+ <include location="global" impldecl="in implementation">kprocess.h</include>
+ <include location="local" impldecl="in implementation">kiconloader.h</include>
+ <include location="local" impldecl="in implementation">kcminterface.ui.h</include>
+</includes>
+<signals>
+ <signal>changed()</signal>
+</signals>
+<slots>
+ <slot>init()</slot>
+ <slot>changedSlot()</slot>
+ <slot>securityLevelCombo_activated( int i )</slot>
+ <slot>KURLLabel1_leftClickedURL()</slot>
+ <slot>lmAnnounceCombo_activated( int i )</slot>
+ <slot>allowGuestLoginsChk_toggled( bool b )</slot>
+ <slot>mapToGuestCombo_activated( int i )</slot>
+ <slot>updateSecurityLevelHelpLbl()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kurllabel.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/kcminterface.ui.h b/filesharing/advanced/kcm_sambaconf/kcminterface.ui.h
new file mode 100644
index 00000000..708667ec
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/kcminterface.ui.h
@@ -0,0 +1,124 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename slots use Qt Designer which will
+** update this file, preserving your code. Create an init() slot in place of
+** a constructor, and a destroy() slot in place of a destructor.
+*****************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+void KcmInterface::init()
+{
+ addShareBtn->setIconSet(SmallIconSet("filenew"));
+ editShareBtn->setIconSet(SmallIconSet("edit"));
+ removeShareBtn->setIconSet(SmallIconSet("editdelete"));
+ editDefaultShareBtn->setIconSet(SmallIconSet("queue"));
+
+ addPrinterBtn->setIconSet(SmallIconSet("filenew"));
+ editPrinterBtn->setIconSet(SmallIconSet("edit"));
+ removePrinterBtn->setIconSet(SmallIconSet("editdelete"));
+ editDefaultPrinterBtn->setIconSet(SmallIconSet("print_class"));
+
+ advancedWarningPixLbl->setPixmap(SmallIcon("messagebox_warning"));
+
+}
+
+
+
+void KcmInterface::changedSlot()
+{
+ emit changed();
+}
+
+
+void KcmInterface::securityLevelCombo_activated( int i )
+{
+ passwordServerEdit->setDisabled(i<2);
+ allowGuestLoginsChk->setDisabled(i==0);
+ updateSecurityLevelHelpLbl();
+}
+
+void KcmInterface::KURLLabel1_leftClickedURL()
+{
+ KProcess* p = new KProcess();
+
+ *p << "konqueror";
+ *p << "man:smb.conf";
+ p->start();
+
+
+
+}
+
+
+
+
+void KcmInterface::lmAnnounceCombo_activated( int i)
+{
+ lmIntervalSpin->setEnabled(i==0);
+}
+
+
+
+
+void KcmInterface::allowGuestLoginsChk_toggled( bool b)
+{
+ int i = 0;
+ if (b)
+ i = 1;
+
+ mapToGuestCombo->setCurrentItem(i);
+}
+
+
+void KcmInterface::mapToGuestCombo_activated( int i)
+{
+ allowGuestLoginsChk->setChecked(i>0);
+}
+
+void KcmInterface::updateSecurityLevelHelpLbl()
+{
+ if (shareRadio->isChecked()) {
+ securityLevelHelpLbl->setText(i18n("Use the <i>share</i> security level if you have a home network "
+ "or a small office network.<br> It allows everyone to read the list "
+ "of all your shared directories and printers before a login is required."));
+
+ } else if (userRadio->isChecked()) {
+ securityLevelHelpLbl->setText(i18n("Use the <i>user</i> security level if you have a bigger network "
+ "and you do not want to allow everyone to read your list of shared "
+ "directories and printers without a login.<p>"
+ "If you want to run your Samba server as a <b>Primary Domain controller</b> (PDC) "
+ "you also have to set this option."));
+} else if (serverRadio->isChecked()) {
+ securityLevelHelpLbl->setText(i18n("Use the <i>server</i> security level if you have a big network "
+ "and the samba server should validate the username/password "
+ "by passing it to another SMB server, such as an NT box."));
+ } else if (domainRadio->isChecked()) {
+ securityLevelHelpLbl->setText(i18n("Use the <i>domain</i> security level if you have a big network "
+ "and the samba server should validate the username/password "
+ "by passing it to a Windows NT Primary or Backup Domain Controller."));
+ } else if (adsRadio->isChecked()) {
+ securityLevelHelpLbl->setText(i18n("Use the <i>ADS</i> security level if you have a big network "
+ "and the samba server should act as a domain member in an ADS realm."));
+ }
+
+}
diff --git a/filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui b/filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui
new file mode 100644
index 00000000..7aefef4f
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui
@@ -0,0 +1,1211 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+ <class>KcmPrinterDlg</class>
+ <comment>
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+</comment>
+ <widget class='QDialog'>
+ <property name='name'>
+ <cstring>KcmPrinterDlg</cstring>
+ </property>
+ <property name='geometry'>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>533</width>
+ <height>381</height>
+ </rect>
+ </property>
+ <property name='caption'>
+ <string>Printer Settings</string>
+ </property>
+ <vbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QTabWidget'>
+ <property name='name'>
+ <cstring>_tabs</cstring>
+ </property>
+ <widget class='QWidget'>
+ <property name='name'>
+ <cstring>tab</cstring>
+ </property>
+ <attribute name='title'>
+ <string>&amp;Base Settings</string>
+ </attribute>
+ <vbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class='QLayoutWidget'>
+ <property name='name'>
+ <cstring>Layout51</cstring>
+ </property>
+ <hbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>0</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QFrame'>
+ <property name='name'>
+ <cstring>pixFrame</cstring>
+ </property>
+ <property name='frameShape'>
+ <enum>Box</enum>
+ </property>
+ <property name='frameShadow'>
+ <enum>Sunken</enum>
+ </property>
+ <vbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QLabel'>
+ <property name='name'>
+ <cstring>printerPixLbl</cstring>
+ </property>
+ <property name='sizePolicy'>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name='text'>
+ <string>Pixmap</string>
+ </property>
+ <property name='scaledContents'>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class='QGroupBox'>
+ <property name='name'>
+ <cstring>printerGrp</cstring>
+ </property>
+ <property name='enabled'>
+ <bool>true</bool>
+ </property>
+ <property name='title'>
+ <string>Pr&amp;inter</string>
+ </property>
+ <hbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QLayoutWidget'>
+ <property name='name'>
+ <cstring>Layout49</cstring>
+ </property>
+ <grid>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>0</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget row='1' class='KURLRequester' column='1'>
+ <property name='name'>
+ <cstring>pathUrlRq</cstring>
+ </property>
+ </widget>
+ <widget row='1' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel7</cstring>
+ </property>
+ <property name='text'>
+ <string>Pa&amp;th:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>pathUrlRq</cstring>
+ </property>
+ </widget>
+ <widget row='0' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel4_2</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;Queue:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>queueCombo</cstring>
+ </property>
+ </widget>
+ <widget row='0' class='QLayoutWidget' column='1'>
+ <property name='name'>
+ <cstring>Layout48</cstring>
+ </property>
+ <hbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>0</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='KComboBox'>
+ <property name='name'>
+ <cstring>queueCombo</cstring>
+ </property>
+ </widget>
+ <widget class='QCheckBox'>
+ <property name='name'>
+ <cstring>printersChk</cstring>
+ </property>
+ <property name='enabled'>
+ <bool>true</bool>
+ </property>
+ <property name='text'>
+ <string>Sha&amp;re all printers</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+ </widget>
+ </hbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class='QGroupBox'>
+ <property name='name'>
+ <cstring>identifierGrp</cstring>
+ </property>
+ <property name='title'>
+ <string>I&amp;dentifier</string>
+ </property>
+ <grid>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget row='0' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>Lbl_shareName</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;Name:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>shareNameEdit</cstring>
+ </property>
+ </widget>
+ <widget row='1' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name='text'>
+ <string>Comm&amp;ent:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>commentEdit</cstring>
+ </property>
+ </widget>
+ <widget row='1' class='KLineEdit' column='1'>
+ <property name='name'>
+ <cstring>commentEdit</cstring>
+ </property>
+ </widget>
+ <widget row='0' class='KLineEdit' column='1'>
+ <property name='name'>
+ <cstring>shareNameEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class='QGroupBox'>
+ <property name='name'>
+ <cstring>GroupBox4</cstring>
+ </property>
+ <property name='title'>
+ <string>Main Properties</string>
+ </property>
+ <hbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QCheckBox'>
+ <property name='name'>
+ <cstring>availableBaseChk</cstring>
+ </property>
+ <property name='text'>
+ <string>A&amp;vailable</string>
+ </property>
+ </widget>
+ <widget class='QCheckBox'>
+ <property name='name'>
+ <cstring>browseableBaseChk</cstring>
+ </property>
+ <property name='text'>
+ <string>Bro&amp;wseable</string>
+ </property>
+ </widget>
+ <widget class='QCheckBox'>
+ <property name='name'>
+ <cstring>publicBaseChk</cstring>
+ </property>
+ <property name='text'>
+ <string>Pub&amp;lic</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name='name'>
+ <cstring>Spacer18</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Vertical</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class='QWidget'>
+ <property name='name'>
+ <cstring>tab</cstring>
+ </property>
+ <attribute name='title'>
+ <string>&amp;Printing</string>
+ </attribute>
+ <grid>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row='8' column='1'>
+ <property name='name'>
+ <cstring>Spacer24</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Vertical</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ <widget row='3' class='QLabel' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>TextLabel5_2_8</cstring>
+ </property>
+ <property name='font'>
+ <font>
+ <italic>1</italic>
+ </font>
+ </property>
+ <property name='text'>
+ <string>Printer dri&amp;ver:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>printerDriverEdit</cstring>
+ </property>
+ </widget>
+ <widget row='3' class='QLineEdit' rowspan='1' column='2' colspan='2'>
+ <property name='name'>
+ <cstring>printerDriverEdit</cstring>
+ </property>
+ </widget>
+ <widget row='4' class='QLabel' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>TextLabel5_2_2_2</cstring>
+ </property>
+ <property name='font'>
+ <font>
+ <italic>1</italic>
+ </font>
+ </property>
+ <property name='text'>
+ <string>Print&amp;er driver location:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>printerDriverLocationEdit</cstring>
+ </property>
+ </widget>
+ <widget row='4' class='QLineEdit' rowspan='1' column='2' colspan='2'>
+ <property name='name'>
+ <cstring>printerDriverLocationEdit</cstring>
+ </property>
+ </widget>
+ <widget row='5' class='QCheckBox' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>postscriptChk</cstring>
+ </property>
+ <property name='text'>
+ <string>PostScr&amp;ipt</string>
+ </property>
+ </widget>
+ <widget row='0' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>PrintingLbl</cstring>
+ </property>
+ <property name='text'>
+ <string>Printin&amp;g:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>printingCombo</cstring>
+ </property>
+ </widget>
+ <widget row='0' class='QComboBox' column='2'>
+ <item>
+ <property name='text'>
+ <string>sysv</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>aix</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>hpux</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>bsd</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>qnx</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>plp</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>lprng</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>softq</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>cups</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>nt</string>
+ </property>
+ </item>
+ <item>
+ <property name='text'>
+ <string>os2</string>
+ </property>
+ </item>
+ <property name='name'>
+ <cstring>printingCombo</cstring>
+ </property>
+ </widget>
+ <widget row='2' class='QLabel' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>TextLabel3_2_2</cstring>
+ </property>
+ <property name='text'>
+ <string>Max reported print &amp;jobs:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>maxReportedPrintJobsSpin</cstring>
+ </property>
+ </widget>
+ <widget row='1' class='QLabel' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>TextLabel3_2</cstring>
+ </property>
+ <property name='text'>
+ <string>Ma&amp;x print jobs:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>maxPrintJobsSpin</cstring>
+ </property>
+ </widget>
+ <widget row='2' class='KIntSpinBox' column='2'>
+ <property name='name'>
+ <cstring>maxReportedPrintJobsSpin</cstring>
+ </property>
+ <property name='font'>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name='maxValue'>
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget row='1' class='KIntSpinBox' column='2'>
+ <property name='name'>
+ <cstring>maxPrintJobsSpin</cstring>
+ </property>
+ <property name='font'>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name='maxValue'>
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row='1' column='3'>
+ <property name='name'>
+ <cstring>Spacer26</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Horizontal</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>200</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget row='6' class='QCheckBox' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>useClientDriverChk</cstring>
+ </property>
+ <property name='text'>
+ <string>Use c&amp;lient driver</string>
+ </property>
+ </widget>
+ <widget row='7' class='QCheckBox' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>defaultDevmodeChk</cstring>
+ </property>
+ <property name='text'>
+ <string>De&amp;fault devmode</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class='QWidget'>
+ <property name='name'>
+ <cstring>tab</cstring>
+ </property>
+ <attribute name='title'>
+ <string>&amp;Security</string>
+ </attribute>
+ <grid>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <widget row='3' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name='text'>
+ <string>Hosts &amp;deny:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>hostsDenyEdit</cstring>
+ </property>
+ <property name='whatsThis' stdset='0'>
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <widget row='3' class='QLineEdit' rowspan='1' column='1' colspan='2'>
+ <property name='name'>
+ <cstring>hostsDenyEdit</cstring>
+ </property>
+ <property name='whatsThis' stdset='0'>
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <widget row='2' class='QLineEdit' rowspan='1' column='1' colspan='2'>
+ <property name='name'>
+ <cstring>hostsAllowEdit</cstring>
+ </property>
+ <property name='whatsThis' stdset='0'>
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget row='2' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name='text'>
+ <string>Hosts a&amp;llow:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>hostsAllowEdit</cstring>
+ </property>
+ <property name='whatsThis' stdset='0'>
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget row='1' class='QLineEdit' rowspan='1' column='1' colspan='2'>
+ <property name='name'>
+ <cstring>printerAdminEdit</cstring>
+ </property>
+ <property name='whatsThis' stdset='0'>
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <spacer row='4' column='0'>
+ <property name='name'>
+ <cstring>Spacer21</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Vertical</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget row='1' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel6_2</cstring>
+ </property>
+ <property name='text'>
+ <string>P&amp;rinter admin:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>printerAdminEdit</cstring>
+ </property>
+ <property name='whatsThis' stdset='0'>
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <widget row='0' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;Guest account:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ <property name='whatsThis' stdset='0'>
+ <string>This is a username which will be used for access to services which are specified as guest ok. Whatever privileges this user has will be available to any client connecting to the guest service. Typically this user will exist in the password file, but will not have a valid login. The user account \"ftp\" is often a good choice for this parameter. If a username is specified in a given service, the specified username overrides this one.</string>
+ </property>
+ </widget>
+ <widget row='0' class='QComboBox' column='1'>
+ <property name='name'>
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ </widget>
+ <spacer row='0' column='2'>
+ <property name='name'>
+ <cstring>Spacer27</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Horizontal</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>263</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class='QWidget'>
+ <property name='name'>
+ <cstring>tab</cstring>
+ </property>
+ <attribute name='title'>
+ <string>Co&amp;mmands</string>
+ </attribute>
+ <grid>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget row='0' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5_2</cstring>
+ </property>
+ <property name='text'>
+ <string>Pr&amp;int command:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>printCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget row='0' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>printCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget row='1' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5_2_2</cstring>
+ </property>
+ <property name='text'>
+ <string>lpq comma&amp;nd:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>lpqCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget row='1' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>lpqCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget row='2' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>lprmCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget row='2' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5_2_3</cstring>
+ </property>
+ <property name='text'>
+ <string>lprm comman&amp;d:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>lprmCommandEdit</cstring>
+ </property>
+ </widget>
+ <widget row='4' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>lpresumeEdit</cstring>
+ </property>
+ </widget>
+ <widget row='3' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>lppauseEdit</cstring>
+ </property>
+ </widget>
+ <widget row='4' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5_2_5</cstring>
+ </property>
+ <property name='text'>
+ <string>lp&amp;resume:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>lpresumeEdit</cstring>
+ </property>
+ </widget>
+ <widget row='5' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5_2_6</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;queuepause:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>queuepauseEdit</cstring>
+ </property>
+ </widget>
+ <widget row='3' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5_2_4</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;lppause:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>lppauseEdit</cstring>
+ </property>
+ </widget>
+ <widget row='5' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>queuepauseEdit</cstring>
+ </property>
+ </widget>
+ <widget row='6' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>queueresumeEdit</cstring>
+ </property>
+ </widget>
+ <widget row='6' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel5_2_7</cstring>
+ </property>
+ <property name='text'>
+ <string>qu&amp;eueresume:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>queueresumeEdit</cstring>
+ </property>
+ </widget>
+ <spacer row='7' column='0'>
+ <property name='name'>
+ <cstring>Spacer23</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Vertical</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class='QWidget'>
+ <property name='name'>
+ <cstring>tab</cstring>
+ </property>
+ <attribute name='title'>
+ <string>&amp;Advanced</string>
+ </attribute>
+ <grid>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <widget row='1' class='QGroupBox' rowspan='1' column='0' colspan='2'>
+ <property name='name'>
+ <cstring>GroupBox31</cstring>
+ </property>
+ <property name='title'>
+ <string>Miscella&amp;neous</string>
+ </property>
+ <grid>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget row='1' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>postExecEdit</cstring>
+ </property>
+ </widget>
+ <widget row='0' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>preExecEdit</cstring>
+ </property>
+ </widget>
+ <widget row='0' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel6_3</cstring>
+ </property>
+ <property name='text'>
+ <string>p&amp;reexec:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>preExecEdit</cstring>
+ </property>
+ </widget>
+ <widget row='2' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel6_3_3</cstring>
+ </property>
+ <property name='text'>
+ <string>root pr&amp;eexec:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>rootPreExecEdit</cstring>
+ </property>
+ </widget>
+ <widget row='2' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>rootPreExecEdit</cstring>
+ </property>
+ </widget>
+ <widget row='3' class='QLineEdit' column='1'>
+ <property name='name'>
+ <cstring>rootPostExecEdit</cstring>
+ </property>
+ </widget>
+ <widget row='3' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel6_3_4</cstring>
+ </property>
+ <property name='text'>
+ <string>root postexec:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>rootPostExecEdit</cstring>
+ </property>
+ </widget>
+ <widget row='1' class='QLabel' column='0'>
+ <property name='name'>
+ <cstring>TextLabel6_3_2</cstring>
+ </property>
+ <property name='text'>
+ <string>poste&amp;xec:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>postExecEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row='2' column='0'>
+ <property name='name'>
+ <cstring>Spacer22</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Vertical</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget row='0' class='QGroupBox' column='0'>
+ <property name='name'>
+ <cstring>GroupBox27</cstring>
+ </property>
+ <property name='title'>
+ <string>Tunin&amp;g</string>
+ </property>
+ <hbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QLabel'>
+ <property name='name'>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name='sizePolicy'>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name='text'>
+ <string>M&amp;in print space:</string>
+ </property>
+ <property name='buddy' stdset='0'>
+ <cstring>minPrintSpaceSpin</cstring>
+ </property>
+ </widget>
+ <widget class='KIntSpinBox'>
+ <property name='name'>
+ <cstring>minPrintSpaceSpin</cstring>
+ </property>
+ <property name='font'>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name='maxValue'>
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class='QLabel'>
+ <property name='name'>
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name='text'>
+ <string>kB</string>
+ <comment>kilo Byte</comment>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget row='0' class='QGroupBox' column='1'>
+ <property name='name'>
+ <cstring>GroupBox17</cstring>
+ </property>
+ <property name='title'>
+ <string>&amp;Logging</string>
+ </property>
+ <vbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>11</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QCheckBox'>
+ <property name='name'>
+ <cstring>statusChk</cstring>
+ </property>
+ <property name='text'>
+ <string>S&amp;tatus</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <widget class='QLayoutWidget'>
+ <property name='name'>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name='name'>
+ <cstring>unnamed</cstring>
+ </property>
+ <property name='margin'>
+ <number>0</number>
+ </property>
+ <property name='spacing'>
+ <number>6</number>
+ </property>
+ <widget class='QPushButton'>
+ <property name='name'>
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;Help</string>
+ </property>
+ <property name='accel'>
+ <string>F1</string>
+ </property>
+ <property name='autoDefault'>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name='name'>
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name='orientation'>
+ <enum>Horizontal</enum>
+ </property>
+ <property name='sizeType'>
+ <enum>Expanding</enum>
+ </property>
+ <property name='sizeHint'>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class='QPushButton'>
+ <property name='name'>
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;OK</string>
+ </property>
+ <property name='autoDefault'>
+ <bool>true</bool>
+ </property>
+ <property name='default'>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class='QPushButton'>
+ <property name='name'>
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name='text'>
+ <string>&amp;Cancel</string>
+ </property>
+ <property name='autoDefault'>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <connections>
+ <connection>
+ <sender>printersChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>queueCombo</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>printersChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>shareNameEdit</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmPrinterDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmPrinterDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>printersChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>KcmPrinterDlg</receiver>
+ <slot>printersChkToggled(bool)</slot>
+ </connection>
+ </connections>
+ <tabstops>
+ <tabstop>queueCombo</tabstop>
+ <tabstop>printersChk</tabstop>
+ <tabstop>pathUrlRq</tabstop>
+ <tabstop>shareNameEdit</tabstop>
+ <tabstop>commentEdit</tabstop>
+ <tabstop>availableBaseChk</tabstop>
+ <tabstop>browseableBaseChk</tabstop>
+ <tabstop>publicBaseChk</tabstop>
+ <tabstop>minPrintSpaceSpin</tabstop>
+ <tabstop>statusChk</tabstop>
+ <tabstop>preExecEdit</tabstop>
+ <tabstop>postExecEdit</tabstop>
+ <tabstop>rootPreExecEdit</tabstop>
+ <tabstop>rootPostExecEdit</tabstop>
+ <tabstop>printCommandEdit</tabstop>
+ <tabstop>lpqCommandEdit</tabstop>
+ <tabstop>lprmCommandEdit</tabstop>
+ <tabstop>lppauseEdit</tabstop>
+ <tabstop>lpresumeEdit</tabstop>
+ <tabstop>queuepauseEdit</tabstop>
+ <tabstop>queueresumeEdit</tabstop>
+ <tabstop>guestAccountCombo</tabstop>
+ <tabstop>printerAdminEdit</tabstop>
+ <tabstop>hostsAllowEdit</tabstop>
+ <tabstop>hostsDenyEdit</tabstop>
+ <tabstop>printingCombo</tabstop>
+ <tabstop>maxPrintJobsSpin</tabstop>
+ <tabstop>maxReportedPrintJobsSpin</tabstop>
+ <tabstop>printerDriverEdit</tabstop>
+ <tabstop>printerDriverLocationEdit</tabstop>
+ <tabstop>postscriptChk</tabstop>
+ <tabstop>useClientDriverChk</tabstop>
+ <tabstop>defaultDevmodeChk</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+ <tabstop>buttonHelp</tabstop>
+ <tabstop>_tabs</tabstop>
+ </tabstops>
+ <includes>
+ <include location='local' impldecl='in implementation'>kiconloader.h</include>
+ <include location='local' impldecl='in implementation'>kcmprinterdlg.ui.h</include>
+ </includes>
+ <slots>
+ <slot>init()</slot>
+ <slot>accept()</slot>
+ <slot>reject()</slot>
+ <slot>printersChkToggled( bool )</slot>
+ </slots>
+ <layoutdefaults margin='11' spacing='6'/>
+ <includehints>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ </includehints>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui.h b/filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui.h
new file mode 100644
index 00000000..a02204dd
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/kcmprinterdlg.ui.h
@@ -0,0 +1,47 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename slots use Qt Designer which will
+** update this file, preserving your code. Create an init() slot in place of
+** a constructor, and a destroy() slot in place of a destructor.
+*****************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+void KcmPrinterDlg::init()
+{
+ printerPixLbl->setPixmap(DesktopIcon("printer1"));
+}
+
+void KcmPrinterDlg::accept()
+{
+ QDialog::accept();
+}
+
+void KcmPrinterDlg::reject()
+{
+ QDialog::reject();
+}
+
+void KcmPrinterDlg::printersChkToggled( bool )
+{
+
+}
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,
+ email : segfault_ii@web.de
+
+ copyright : (C) 2002-2004 by Jan Schaefer
+ email : janschaefer@users.sourceforge.net
+***************************************************************************/
+
+/******************************************************************************
+* *
+* 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"
diff --git a/filesharing/advanced/kcm_sambaconf/kcmsambaconf.desktop b/filesharing/advanced/kcm_sambaconf/kcmsambaconf.desktop
new file mode 100644
index 00000000..f180d216
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/kcmsambaconf.desktop
@@ -0,0 +1,97 @@
+[Desktop Entry]
+Exec=kcmshell kcmsambaconf
+Icon=kcmsambaconf
+Type=Application
+
+Terminal=false
+X-KDE-FactoryName=KcmSambaConf
+X-KDE-Library=kcmsambaconf
+X-KDE-ModuleType=Library
+X-KDE-SubstituteUID=false
+X-KDE-HasReadOnlyMode=true
+X-KDE-RootOnly=true
+X-KDE-ParentApp=kcontrol
+Categories=Qt;KDE;X-KDE-settings-network;Settings;
+OnlyShowIn=KDE;
+
+Comment=A module to configure shares for Microsoft Windows
+Comment[be]=Модуль настаўлення агульных рэсурсаў для Microsoft Windows
+Comment[bg]=Настройване споделянето на ресурси с Майкрософт Уиндоус
+Comment[bn]=মাইক্রোসফ্ট উইন্ডোজের জন্য ভাগাভাগি কনফিগার করতে একটি মডিউল
+Comment[bs]=Modul za konfigurisanje dijeljenja direktorija sa Microsoft Windowsom
+Comment[ca]=Un mòdul per configurar els recursos compartits de Microsoft Windows
+Comment[cs]=Modul pro konfiguraci sdílených prostředků MS Windows
+Comment[da]=Et modul til at indstille shares delt med Microsoft Windows
+Comment[de]=Ein Modul zum Einrichten von Microsoft Windows-Freigaben
+Comment[el]=Ένα άρθρωμα για τη ρύθμιση κοινόχρηστων για τα Microsoft Windows
+Comment[es]=Un módulo para configurar recursos compartidos de Microsoft Windows
+Comment[et]=Microsoft Windowsi jagatud ressursside seadistusmoodul
+Comment[eu]=Microsoft Windows-en partekatzeak konfiguratzeko modulu bat
+Comment[fa]=یک پیمانه جهت پیکربندی مشترکات برای میکروسافت ویندوز
+Comment[fi]=Moduli Microsoft Windows jakojen asetuksiin
+Comment[fr]=Un module permettant de configurer les partages Microsoft Windows
+Comment[gl]=Un módulo para configurar comparticións con Microsoft Windows
+Comment[he]=מודול להגדרת שיתופים עם חלונות של מיקרוסופט
+Comment[hu]=Beállítómodul Microsoft Windows-os megosztásokhoz
+Comment[is]=Eining til að stilla sameignir fyrir Microsoft Windows
+Comment[it]=Un modulo per configurare le condivisioni per Microsoft Windows
+Comment[ja]=Microsoft Windows との共有設定
+Comment[ka]=Microsoft Windows-ის საზიაროების დაკონფიგურირების მოდული
+Comment[kk]=Microsoft Windows-пен ортақ ресурстарды баптау модулі
+Comment[km]=ម៉ូឌុល​ដើម្បី​កំណត់​រចនា​សម្ព័ន្ធ​ការ​ចែក​រំលែក​សម្រាប់​ម៉ៃក្រូសូហ្វ​វ៉ីនដូ
+Comment[lt]=Modulis MS Windows dalinamų diskų konfigūravimui
+Comment[nb]=En modul som setter opp delte ressurser for Microsoft Windows
+Comment[nds]=Moduul för't Instellen vun Microsoft-Windows-Ressourcen
+Comment[ne]=माइक्रोसफ्ट विन्डोजका लागि साझेदारी कन्फिगर गर्न मोड्युल
+Comment[nl]=Een module voor het instellen van shares voor Microsoft Windows
+Comment[nn]=Ein modul for oppsett av delte Microsoft Windows-ressursar
+Comment[pl]=Moduł do konfigurowania udziałów Microsoft Windows
+Comment[pt]=Um módulo para configurar partilhas para o Microsoft Windows
+Comment[pt_BR]=Um módulo para configurar compartilhamentos com o Microsoft Windows
+Comment[ru]=Модуль настройки общих ресурсов для Microsoft Windows
+Comment[sk]=Modul na konfiguráciu zdieľania pre Microsoft Windows
+Comment[sl]=Modul za nastavitev souporabe map za Microsoft Windows
+Comment[sr]=Модул који подешава дељења за Microsoft Windows
+Comment[sr@Latn]=Modul koji podešava deljenja za Microsoft Windows
+Comment[sv]=En modul för att ställa in kataloger delade med Microsoft Windows
+Comment[tr]=Microsoft Windows paylaşımlarını yapılandıran modül
+Comment[uk]=Модуль для налаштування спільних ресурсів для Microsoft Windows
+Comment[zh_CN]=配置 Microsoft Windows 共享的模块
+Comment[zh_HK]=設定 Microsoft Windows 分享資源的模組
+Comment[zh_TW]=設定 Microsoft Windows 分享的模組
+Keywords=KcmSambaConf,kcmsambaconf,samba,windows,share
+Keywords[be]=агульны рэсурс,KcmSambaConf,kcmsambaconf,samba,windows,share
+Keywords[bg]=Самба, Уиндоус, мрежа, споделяне, KcmSambaConf, kcmsambaconf, samba, windows, share
+Keywords[ca]=KcmSambaConf,kcmsambaconf,samba,windows,share,recurs compartit
+Keywords[cs]=Samba,nastavení,windows,sdílení
+Keywords[de]=KcmSambaConf,kcmsambaconf,samba,windows,freigabe
+Keywords[et]=KcmSambaConf,kcmsambaconf,samba,windows,jagatud ressursid
+Keywords[eu]=KcmSambaConf,kcmsambaconf,samba,windows,partekatze
+Keywords[fa]=KcmSambaConf، kcmsambaconf، samba، ویندوز، مشترک
+Keywords[fi]=KcmSambaConf,kcmsambaconf,samba,windows,jako
+Keywords[fr]=KcmSambaConf,kcmsambaconf,samba,windows,partage
+Keywords[gl]=KcmSambaConf,kcmsambaconf,samba,widows,compartir
+Keywords[he]=KcmSambaConf,kcmsambaconf,samba,windows,share, סמבה, חלונות, שיתוף, שיתופי חלונות
+Keywords[hu]=KcmSambaConf,kcmsambaconf,samba,windows,megosztás
+Keywords[is]=KcmSambaConf,kcmsambaconf,samba,windows,sameign
+Keywords[it]=KcmSambaConf,kcmsambaconf,samba,windows,condivisione
+Keywords[ja]=KcmSambaConf,kcmsambaconf,samba,windows,共有
+Keywords[km]=KcmSambaConf,kcmsambaconf,samba,បង្អួច,ចែក​រំលែក
+Keywords[lt]=KcmSambaConf,kcmsambaconf,samba,windows,share,dalinimasis,dalintis,pasidalinti
+Keywords[nb]=KcmSambaConf,kcmsambaconf,samba,windows,delt,ressurs
+Keywords[nds]=KcmSambaConf,kcmsambaconf,samba,windows,share,freegaav,freegaven
+Keywords[ne]=KcmSambaConf,kcmsambaconf,साम्बा,विन्डोज,साझेदारी
+Keywords[nl]=KcmSambaConf,kcmsambaconf,samba,windows netwerk,share,gedeelde mappen,gedeelde printers
+Keywords[nn]=KcmSambaConf,kcmsambaconf,samba,Windows,delt ressurs
+Keywords[pl]=KcmSambaConf,kcmsambaconf,samba,Samba,serwer,SMB,smb,windows,udział,dysk sieciowy
+Keywords[pt]=KcmSambaConf,kcmsambaconf,Samba,Windows,partilha
+Keywords[sl]=KcmSambaConf,kcmsambaconf,Samba,samba,souporaba,deljeno
+Keywords[sv]=IM SAMBA-inställning,IM samba-inställning,Windows,dela
+Keywords[uk]=KcmSambaConf,kcmsambaconf,samba,windows,share,спільні ресурси
+Keywords[zh_CN]=KcmSambaConf,kcmsambaconf,samba,windows,share,共享
+Name=Samba
+Name[bg]=Самба
+Name[bn]=সাম্বা
+Name[he]=סמבה
+Name[ne]=साम्बा
+Name[pa]=ਸਾਂਬਾ
diff --git a/filesharing/advanced/kcm_sambaconf/kcmsambaconf.h b/filesharing/advanced/kcm_sambaconf/kcmsambaconf.h
new file mode 100644
index 00000000..32e37784
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/kcmsambaconf.h
@@ -0,0 +1,159 @@
+/***************************************************************************
+ kcmsambaconf.h - description
+ -------------------
+ begin : Mon Apr 8 13:35:56 CEST 2002
+ copyright : (C) 2002 by Christian Nitschkowski
+ email : segfault_ii@web.de
+ copyright : (C) 2002-2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+***************************************************************************/
+
+/******************************************************************************
+* *
+* 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 *
+* *
+******************************************************************************/
+
+#ifndef KCMSAMBACONF_H_
+#define KCMSAMBACONF_H_
+
+#include <kcmodule.h>
+#include <kcminterface.h>
+#include <share.h>
+#include <qptrlist.h>
+#include <qlistview.h>
+
+
+class SambaShare;
+class SambaFile;
+class QPixmap;
+/**
+* A QListViewItem which holds a SambaShare object
+**/
+class ShareListViewItem : public QListViewItem
+{
+public:
+ ShareListViewItem(QListView * parent, SambaShare* share);
+
+ SambaShare* getShare() const;
+ void setShare(SambaShare* share);
+ void updateShare();
+
+protected:
+ SambaShare* _share;
+ QPixmap createPropertyPixmap();
+};
+
+
+class KJanusWidget;
+class QLineEdit;
+class QCheckBox;
+class QSpinBox;
+class DictManager;
+class SmbConfConfigWidget;
+
+class KcmSambaConf: public KCModule
+{
+ Q_OBJECT
+ public:
+ KcmSambaConf(QWidget *parent = 0L, const char *name = 0L);
+ virtual ~KcmSambaConf();
+
+ void load(const QString &);
+ void save();
+ void defaults();
+ int buttons();
+ QString quickHelp() const;
+
+ public slots:
+ void configChanged();
+
+ void editShare();
+ void addShare();
+ void removeShare();
+
+ void editPrinter();
+ void addPrinter();
+ void removePrinter();
+
+ void editShareDefaults();
+ void editPrinterDefaults();
+
+
+ protected:
+ /**
+ * The path of the smb.conf file
+ **/
+ QString _smbconf;
+ SambaFile* _sambaFile;
+
+ DictManager* _dictMngr;
+
+ void init();
+ void loadUserTab();
+ void saveUserTab();
+ bool getSocketBoolValue( const QString & str, const QString & name );
+ int getSocketIntValue( const QString & str, const QString & name );
+ QString socketOptions();
+ void setComboIndexToValue(QComboBox* box, const QString & value, SambaShare* share);
+
+ void loadBaseSettings(SambaShare*s=0L);
+ void loadSecurity(SambaShare* );
+ void loadLogging(SambaShare* );
+ void loadTuning(SambaShare* );
+ void loadDomain(SambaShare* );
+ void loadWins(SambaShare* );
+ void loadPrinting(SambaShare* );
+ void loadFilenames(SambaShare* );
+ void loadLocking(SambaShare* );
+ void loadCharset(SambaShare*);
+ void loadLogon(SambaShare* );
+ void loadSocket(SambaShare* );
+ void loadSSL(SambaShare* );
+ void loadProtocol(SambaShare* );
+ void loadWinbind(SambaShare* );
+ void loadNetbios(SambaShare* );
+ void loadVFS(SambaShare* );
+ void loadBrowsing(SambaShare* );
+ void loadCommands(SambaShare*);
+ void loadMisc(SambaShare* );
+ void loadDebug(SambaShare* );
+ void loadLDAP(SambaShare*);
+
+ void initAdvancedTab();
+
+ void createSmbConfigWidget();
+
+ protected slots:
+ void addSambaUserBtnClicked();
+ void removeSambaUserBtnClicked();
+ void sambaUserPasswordBtnClicked();
+ void slotMouseButtonPressed(int,QListViewItem*,const QPoint &,int);
+ void joinADomainBtnClicked();
+ void nullPasswordsEnabled(bool);
+ void loadBtnClicked();
+ void loadCanceled(const QString & msg);
+ void fillFields();
+ void slotSpecifySmbConf(const QString &);
+
+ private:
+ KcmInterface* _interface;
+ KJanusWidget* _janus;
+ SmbConfConfigWidget* m_smbConfConfigWidget;
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/konqinterface.ui b/filesharing/advanced/kcm_sambaconf/konqinterface.ui
new file mode 100644
index 00000000..e3a11b7e
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/konqinterface.ui
@@ -0,0 +1,543 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>KonqInterface</class>
+<comment>
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+</comment>
+<author>Jan Schäfer &lt;janschaefer@users.sourceforge.net&gt;</author>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>konqinterface</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>368</width>
+ <height>417</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>btnGrp</cstring>
+ </property>
+ <property name="lineWidth">
+ <number>0</number>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>5</number>
+ </property>
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>notSharedRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Not share&amp;d</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>sharedRadio</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Shared</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>0</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>baseGrp</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Bas&amp;e Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>commentEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Comment</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is a text field that is seen next to a share when a client queries the server, either via the network neighborhood or via net view, to list what shares are available.</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>nameEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Name of the share</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is the name of the share</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>&amp;Name:</string>
+ </property>
+ <property name="textFormat">
+ <enum>PlainText</enum>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>nameEdit</cstring>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is the name of the share</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Commen&amp;t:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>commentEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is a text field that is seen next to a share when a client queries the server, either via the network neighborhood or via net view, to list what shares are available.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>securityGrp</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Security Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>denyEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>allowEdit</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Hosts den&amp;y:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>denyEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>&amp;Hosts allow:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>allowEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Guest &amp;account:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is a username which will be used for access to services which are specified as guest ok. Whatever privileges this user has will be available to any client connecting to the guest service. Typically this user will exist in the password file, but will not have a valid login. The user account \"ftp\" is often a good choice for this parameter. If a username is specified in a given service, the specified username overrides this one.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>readOnlyChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>&amp;Read only</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this is checked, then users of a service may not create or modify files in the service's directory.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>guestOkChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>G&amp;uests allowed</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string></string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this is checked , then no password is required to connect to the service. Privileges will be those of the guest account.</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is a username which will be used for access this directory if guests are allowed</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>otherGrp</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="title">
+ <string>Other Options</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>browseableChk</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Bro&amp;wseable</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This controls whether this share is seen in the list of available shares in a net view and in the browse list.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>availableChk</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>10</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>A&amp;vailable</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Checkbox lets you \"turn off\" a service. If not checked, then ALL attempts to connect to the service will fail. Such failures are logged.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>moreOptionsBtn</cstring>
+ </property>
+ <property name="text">
+ <string>More Opt&amp;ions</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>0</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>nameEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>commentEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>readOnlyChk</sender>
+ <signal>clicked()</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>guestOkChk</sender>
+ <signal>clicked()</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>allowEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>denyEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>browseableChk</sender>
+ <signal>clicked()</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>availableChk</sender>
+ <signal>clicked()</signal>
+ <receiver>konqinterface</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>moreOptionsBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>konqinterface</receiver>
+ <slot>moreOptionsPressed()</slot>
+ </connection>
+ <connection>
+ <sender>guestOkChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>guestAccountCombo</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>notSharedRadio</tabstop>
+ <tabstop>sharedRadio</tabstop>
+ <tabstop>nameEdit</tabstop>
+ <tabstop>commentEdit</tabstop>
+ <tabstop>readOnlyChk</tabstop>
+ <tabstop>guestOkChk</tabstop>
+ <tabstop>guestAccountCombo</tabstop>
+ <tabstop>allowEdit</tabstop>
+ <tabstop>denyEdit</tabstop>
+ <tabstop>browseableChk</tabstop>
+ <tabstop>availableChk</tabstop>
+ <tabstop>moreOptionsBtn</tabstop>
+</tabstops>
+<signals>
+ <signal>changed()</signal>
+</signals>
+<slots>
+ <slot>changedSlot()</slot>
+ <slot>moreOptionsPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/konqinterface.ui.h b/filesharing/advanced/kcm_sambaconf/konqinterface.ui.h
new file mode 100644
index 00000000..195d9c72
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/konqinterface.ui.h
@@ -0,0 +1,39 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename slots use Qt Designer which will
+** update this file, preserving your code. Create an init() slot in place of
+** a constructor, and a destroy() slot in place of a destructor.
+*****************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+void KonqInterface::changedSlot()
+{
+ emit changed();
+}
+
+void KonqInterface::moreOptionsPressed()
+{
+
+}
+
+
diff --git a/filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.cpp b/filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.cpp
new file mode 100644
index 00000000..17b782ab
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.cpp
@@ -0,0 +1,202 @@
+/***************************************************************************
+ begin : Tue May 17 2003
+ copyright : (C) 2003 by Jan Sch�er
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <qregexp.h>
+#include <qstringlist.h>
+
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "passwd.h"
+#include "sambashare.h"
+#include "linuxpermissionchecker.h"
+
+LinuxPermissionChecker::LinuxPermissionChecker(SambaShare* share,QWidget* parent = 0L)
+{
+ m_sambaShare = share;
+ m_parent = parent;
+
+ if (!share) {
+ kdWarning() << "WARNING: LinuxPermissionChecker: share is null !" << endl;
+ return;
+ }
+
+ m_fi = QFileInfo(share->getValue("path"));
+
+ if ( ! m_fi.exists()) {
+ kdDebug(5009) << "LinuxPermissionChecker: path does not exists !" << endl;
+ }
+
+}
+
+
+LinuxPermissionChecker::~LinuxPermissionChecker()
+{
+}
+
+bool LinuxPermissionChecker::checkAllPermissions() {
+ if (! m_sambaShare )
+ return true;
+
+ if ( ! m_fi.exists())
+ return true;
+
+ if (! checkPublicPermissions())
+ return false;
+
+ if (! checkAllUserPermissions())
+ return false;
+
+ return true;
+}
+
+bool LinuxPermissionChecker::checkAllUserPermissions() {
+ if (! m_sambaShare )
+ return true;
+
+ if ( ! m_fi.exists())
+ return true;
+
+ QStringList readList = QStringList::split(QRegExp("[,\\s]+"),m_sambaShare->getValue("read list"));
+
+ for ( QStringList::Iterator it = readList.begin(); it != readList.end(); ++it )
+ {
+ if (!checkUserReadPermissions(*it))
+ return false;
+ }
+
+ QStringList writeList = QStringList::split(QRegExp("[,\\s]+"),m_sambaShare->getValue("write list"));
+
+ for ( QStringList::Iterator it = writeList.begin(); it != writeList.end(); ++it )
+ {
+ if (!checkUserWritePermissions(*it))
+ return false;
+ }
+
+ return true;
+}
+
+bool LinuxPermissionChecker::checkPublicPermissions() {
+ if (! m_sambaShare )
+ return true;
+
+ bool isPublic = m_sambaShare->getBoolValue("public");
+ if (!isPublic)
+ return true;
+
+ QString guestAccount = m_sambaShare->getValue("guest account");
+
+ if ( ! checkUserReadPermissions(guestAccount,false))
+ {
+ if (KMessageBox::Cancel == KMessageBox::warningContinueCancel(
+ 0L,i18n(
+ "<qt>You have specified <b>public read access</b> for this directory, but "
+ "the guest account <b>%1</b> does not have the necessary read permissions;<br>"
+ "do you want to continue anyway?</qt>").arg(guestAccount)
+ ,i18n("Warning")
+ ,KStdGuiItem::cont()
+ ,"KSambaPlugin_guestAccountHasNoReadPermissionsWarning"))
+ return false;
+ }
+
+
+ if ( ! checkUserWritePermissions(guestAccount,false))
+ {
+ if (KMessageBox::Cancel == KMessageBox::warningContinueCancel(
+ 0L,i18n(
+ "<qt>You have specified <b>public write access</b> for this directory, but "
+ "the guest account <b>%1</b> does not have the necessary write permissions;<br>"
+ "do you want to continue anyway?</qt>").arg(guestAccount)
+ ,i18n("Warning")
+ ,KStdGuiItem::cont()
+ ,"KSambaPlugin_guestAccountHasNoWritePermissionsWarning"))
+ return false;
+ }
+
+ return true;
+}
+
+bool LinuxPermissionChecker::checkUserPermissions(const QString & user) {
+ if ( ! checkUserReadPermissions(user))
+ return false;
+
+ if ( ! checkUserWritePermissions(user))
+ return false;
+
+ return true;
+}
+
+bool LinuxPermissionChecker::checkUserWritePermissions(const QString & user, bool showMessageBox) {
+ // If no write permissions are given, we don't need to check them.
+ if (m_sambaShare->getBoolValue("read only"))
+ return true;
+
+ if (! ((m_fi.permission(QFileInfo::WriteOther)) ||
+ (m_fi.permission(QFileInfo::WriteUser) && user == m_fi.owner()) ||
+ (m_fi.permission(QFileInfo::WriteGroup) && isUserInGroup(user, m_fi.group())))
+ )
+ {
+ if (!showMessageBox)
+ return false;
+
+ if (KMessageBox::Cancel == KMessageBox::warningContinueCancel(
+ 0L,i18n(
+ "<qt>You have specified <b>write access</b> to the user <b>%1</b> for this directory, but "
+ "the user does not have the necessary write permissions;<br>"
+ "do you want to continue anyway?</qt>").arg(user)
+ ,i18n("Warning")
+ ,KStdGuiItem::cont()
+ ,"KSambaPlugin_userHasNoWritePermissionsWarning"))
+ return false;
+ }
+
+ return true;
+}
+
+bool LinuxPermissionChecker::checkUserReadPermissions(const QString & user, bool showMessageBox) {
+ if (! ((m_fi.permission(QFileInfo::ReadOther)) ||
+ (m_fi.permission(QFileInfo::ReadUser) && user == m_fi.owner()) ||
+ (m_fi.permission(QFileInfo::ReadGroup) && isUserInGroup(user, m_fi.group())))
+ )
+ {
+ if (!showMessageBox)
+ return false;
+
+ if (KMessageBox::Cancel == KMessageBox::warningContinueCancel(
+ 0L,i18n(
+ "<qt>You have specified <b>read access</b> to the user <b>%1</b> for this directory, but "
+ "the user does not have the necessary read permissions;<br>"
+ "do you want to continue anyway?</qt>").arg(user)
+ ,i18n("Warning")
+ ,KStdGuiItem::cont()
+ ,"KSambaPlugin_userHasNoReadPermissionsWarning"))
+ return false;
+
+ }
+
+ return true;
+}
+
diff --git a/filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.h b/filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.h
new file mode 100644
index 00000000..f18494b1
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/linuxpermissionchecker.h
@@ -0,0 +1,103 @@
+/***************************************************************************
+ begin : Tue May 17 2003
+ copyright : (C) 2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+#ifndef LINUXPERMISSIONCHECKER_H
+#define LINUXPERMISSIONCHECKER_H
+
+#include <qfileinfo.h>
+
+class SambaShare;
+class QWidget;
+
+/**
+ * A class to check if the Samba permissions specified in the SambaShare fit
+ * to the un?x permissions of the directory. E.g. a user specifies a SambaShare as writeable
+ * for the public, but the guest account has no write permissions for the directory of the
+ * SambaShare. This will cause a dialog (which can be turned of) to popup and inform the
+ * user about the missing rights and ask him to continue nevertheless or to cancel.
+ * This class works for all un?x systems not only for Linux, but I couldn't call the
+ * class Un?xPermissionChecker ;-)
+ * @author Jan Schaefer
+ */
+class LinuxPermissionChecker{
+public:
+ LinuxPermissionChecker(SambaShare*,QWidget* parent );
+ ~LinuxPermissionChecker();
+
+ /**
+ * Checks all possible errors that the user could made
+ * @returns <ul>
+ * <li><code>false</code> if the un?x permissions of the directory doesn't fit
+ * to the specified permissions in the Samba share and the user has pushed
+ * the cancel button of one of the dialogs, that informed her.
+ * <li><code>true</code> if either there haven't been any problems with the un?x
+ * permissions, or there have been problems, but the user pressed always the continue button.
+ */
+ bool checkAllPermissions();
+
+ /**
+ * Checks only the public permissions of the directory. First checks
+ * if the Samba share is specified public and then checks if the guest account
+ * has the appropriate rights.
+ * @return @see #check
+ */
+ bool checkPublicPermissions();
+
+ /**
+ * Checks all permissions of all users specified in
+ * the Samba share
+ * @return @see #check
+ */
+ bool checkAllUserPermissions();
+
+protected:
+
+
+ /**
+ * Checks all permissions of the given un?x user
+ * @return @see #check
+ */
+ bool checkUserPermissions(const QString & user);
+
+ /**
+ * Checks the write permissions of the given un?x user
+ * Does not show a dialog if showMessageBox is false
+ * @return @see #check
+ */
+ bool checkUserWritePermissions(const QString & user,bool showMessageBox = true);
+
+ /**
+ * Checks the read permissions of the given un?x user
+ * Does not show a dialog if showMessageBox is false
+ * @return @see #check
+ */
+ bool checkUserReadPermissions(const QString & user,bool showMessageBox = true);
+
+ QWidget* m_parent;
+ SambaShare* m_sambaShare;
+ QFileInfo m_fi;
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/passwd.cpp b/filesharing/advanced/kcm_sambaconf/passwd.cpp
new file mode 100644
index 00000000..532e42db
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/passwd.cpp
@@ -0,0 +1,164 @@
+/***************************************************************************
+ passwd.cpp - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schaefer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <sys/types.h>
+#include <pwd.h>
+#include <grp.h>
+#include <iostream>
+
+#include "passwd.h"
+
+UnixUserList getUnixUserList()
+{
+ UnixUserList list;
+
+ struct passwd* p;
+
+ while ((p = getpwent()))
+ {
+ if (!p) continue;
+
+ UnixUser *u = new UnixUser();
+ u->name = p->pw_name;
+ u->uid = p->pw_uid;
+ list.append(u);
+ }
+
+ endpwent();
+
+ list.sort();
+
+ return list;
+}
+
+QStringList getUnixUsers()
+{
+ QStringList list;
+
+ struct passwd* p;
+
+ while ((p = getpwent()))
+ {
+ if (p)
+ list.append(QString(p->pw_name));
+ }
+
+ endpwent();
+
+ list.sort();
+
+ return list;
+}
+
+QStringList getUnixGroups()
+{
+ QStringList list;
+
+ struct group* g;
+
+ while ((g = getgrent()))
+ {
+ if (g)
+ list.append(QString(g->gr_name));
+ }
+
+ endgrent();
+
+ list.sort();
+
+ return list;
+}
+
+int getUserUID(const QString & name)
+{
+ if (name.isNull()) return -1;
+
+ struct passwd* p;
+
+ p = getpwnam(name.local8Bit());
+
+ if (p)
+ return p->pw_uid;
+
+ return -1;
+}
+
+int getUserGID(const QString & name)
+{
+ if (name.isNull()) return -1;
+
+ struct passwd* p;
+
+ p = getpwnam(name.local8Bit());
+
+ if (p)
+ return p->pw_gid;
+
+ return -1;
+}
+
+int getGroupGID(const QString & name)
+{
+ if (name.isNull()) return -1;
+
+ struct group* g;
+
+ g = getgrnam(name.local8Bit());
+
+ if (g)
+ return g->gr_gid;
+
+ return -1;
+}
+
+bool isUserInGroup(const QString & user, const QString & group) {
+ struct group* g;
+
+ while ((g = getgrent()))
+ {
+ if (g && QString(g->gr_name) == group) {
+ char** names = g->gr_mem;
+
+ int i = 0;
+ char* name = names[0];
+ while (name != 0L) {
+ i++;
+ if (QString(name) == user) {
+ endgrent();
+ return true;
+ }
+ name = names[i];
+ }
+ break;
+ }
+ }
+
+ endgrent();
+ return false;
+}
diff --git a/filesharing/advanced/kcm_sambaconf/passwd.h b/filesharing/advanced/kcm_sambaconf/passwd.h
new file mode 100644
index 00000000..490e0381
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/passwd.h
@@ -0,0 +1,56 @@
+/***************************************************************************
+ passwd.h - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef PASSWD_H
+#define PASSWD_H
+
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qptrlist.h>
+
+
+
+class UnixUser
+{
+public:
+ QString name;
+ int uid;
+};
+
+typedef QPtrList<UnixUser> UnixUserList;
+
+UnixUserList getUnixUserList();
+QStringList getUnixUsers();
+QStringList getUnixGroups();
+int getUserUID(const QString &);
+int getUserGID(const QString &);
+int getGroupGID(const QString &);
+bool isUserInGroup(const QString &, const QString &);
+
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp b/filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp
new file mode 100644
index 00000000..2910a1a7
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/printerdlgimpl.cpp
@@ -0,0 +1,241 @@
+/***************************************************************************
+ printerdlgimpl.cpp - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+
+/**
+ * @author Jan Schfer
+ **/
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qlistbox.h>
+#include <qpainter.h>
+#include <qgroupbox.h>
+#include <qpixmap.h>
+#include <qbitmap.h>
+#include <qlayout.h>
+#include <qtabwidget.h>
+
+#include <klineedit.h>
+#include <kurlrequester.h>
+#include <knuminput.h>
+#include <kdebug.h>
+#include <kdeprint/kmmanager.h>
+#include <kdeprint/kmprinter.h>
+#include <kcombobox.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+#include <assert.h>
+
+#include "sambafile.h"
+#include "printerdlgimpl.h"
+#include "usertabimpl.h"
+#include "passwd.h"
+#include "dictmanager.h"
+
+
+PrinterDlgImpl::PrinterDlgImpl(QWidget* parent, SambaShare* share)
+ : KcmPrinterDlg(parent,"sharedlgimpl")
+{
+ if (!share) {
+ kdWarning() << "PrinterDlgImpl::Constructor : share parameter is null!" << endl;
+ return;
+ }
+
+ _share = share;
+ _dictMngr = new DictManager(share);
+
+ initDialog();
+}
+
+void PrinterDlgImpl::initDialog()
+{
+ // Base settings
+ if (!_share)
+ return;
+
+ QPtrList<KMPrinter> *printerList = KMManager::self()->printerListComplete();
+
+ for (QPtrListIterator<KMPrinter> it(*printerList); it.current(); ++it)
+ {
+ if (!it.current()->isSpecial()){
+ queueCombo->insertItem(it.current()->printerName());
+ }
+ }
+
+ setComboToString(queueCombo,_share->getValue("printer name"));
+
+
+ _dictMngr->add("path",pathUrlRq);
+ printersChk->setChecked( _share->getName() == "printers" );
+
+ shareNameEdit->setText( _share->getName() );
+ _dictMngr->add("comment",commentEdit);
+
+ _dictMngr->add("available",availableBaseChk);
+ _dictMngr->add("browseable",browseableBaseChk);
+ _dictMngr->add("public",publicBaseChk);
+
+ // Users
+
+ _userTab = new UserTabImpl(this,_share);
+ _tabs->insertTab(_userTab,i18n("&Users"),1);
+ _userTab->load();
+ connect(_userTab, SIGNAL(changed()), this, SLOT(changedSlot()));
+
+
+ // Printing
+
+ _dictMngr->add("postscript",postscriptChk);
+ _dictMngr->add("use client driver",useClientDriverChk);
+ _dictMngr->add("default devmode",defaultDevmodeChk);
+
+ _dictMngr->add("max print jobs",maxPrintJobsSpin);
+ _dictMngr->add("max reported print jobs",maxReportedPrintJobsSpin);
+ _dictMngr->add("printing",printingCombo,
+ new QStringList(QStringList()
+ << "sysv" << "aix" << "hpux" << "bsd" << "qnx"
+ << "plp" << "lprng" << "softq" << "cups" << "nt" << "os2"));
+
+ _dictMngr->add("printer driver",printerDriverEdit);
+ _dictMngr->add("printer driver location",printerDriverLocationEdit);
+
+ // Commands
+
+ _dictMngr->add("print command",printCommandEdit);
+ _dictMngr->add("lpq command",lpqCommandEdit);
+ _dictMngr->add("lprm command",lprmCommandEdit);
+ _dictMngr->add("lppause",lppauseEdit);
+ _dictMngr->add("lpresume",lpresumeEdit);
+ _dictMngr->add("queuepause",queuepauseEdit);
+ _dictMngr->add("queueresume",queueresumeEdit);
+
+ // Security
+
+ _dictMngr->add("printer admin",printerAdminEdit);
+ _dictMngr->add("hosts allow",hostsAllowEdit);
+ _dictMngr->add("hosts deny",hostsDenyEdit);
+
+ guestAccountCombo->insertStringList( getUnixUsers() );
+ setComboToString(guestAccountCombo,_share->getValue("guest account"));
+
+ // Advanced
+
+ _dictMngr->add("min print space",minPrintSpaceSpin);
+ _dictMngr->add("status",statusChk);
+ _dictMngr->add("preexec",preExecEdit);
+ _dictMngr->add("postexec",postExecEdit);
+ _dictMngr->add("root preexec",rootPreExecEdit);
+ _dictMngr->add("root postexec",rootPostExecEdit);
+
+ _dictMngr->load( _share );
+ connect(_dictMngr, SIGNAL(changed()), this, SLOT(changedSlot()));
+
+}
+
+void PrinterDlgImpl::accept()
+{
+ if (!_share)
+ return;
+
+ // Security
+
+ _share->setValue("guest account",guestAccountCombo->currentText( ) );
+ _share->setValue("printer name",queueCombo->currentText());
+
+ if (printersChk->isChecked())
+ {
+ _share->setName("printers");
+ }
+ else
+ _share->setName(shareNameEdit->text());
+
+
+ _userTab->save();
+ _dictMngr->save( _share );
+
+
+ KcmPrinterDlg::accept();
+}
+
+PrinterDlgImpl::~PrinterDlgImpl()
+{
+}
+
+void PrinterDlgImpl::printersChkToggled(bool b)
+{
+ if (b)
+ {
+ shareNameEdit->setText("printers");
+ shareNameEdit->setEnabled(false);
+
+ int dist = 10;
+ int w = 64 + dist;
+ int h = 64 + 2*dist;
+
+ QPixmap pix(w,h);
+ pix.fill(); // fill with white
+
+ QPixmap pix2 = DesktopIcon("printer1");
+
+ // Draw the printericon three times
+ QPainter p(&pix);
+ p.drawPixmap(dist+dist/2,0,pix2);
+ p.drawPixmap(dist/2,dist,pix2);
+ p.drawPixmap(dist+dist/2,2*dist,pix2);
+ p.end();
+
+ QBitmap mask(w,h);
+
+ mask.fill(Qt::black); // everything is transparent
+
+ p.begin(&mask);
+
+ p.setRasterOp(Qt::OrROP);
+ p.drawPixmap(dist+dist/2,0,*pix2.mask());
+ p.drawPixmap(dist/2,dist,*pix2.mask());
+ p.drawPixmap(dist+dist/2,2*dist,*pix2.mask());
+ p.end();
+
+ pix.setMask(mask);
+
+ printerPixLbl->setPixmap(pix);
+ pixFrame->layout()->setMargin( 2 );
+ }
+ else
+ {
+ shareNameEdit->setEnabled(true);
+ shareNameEdit->setText( _share->getName() );
+ printerPixLbl->setPixmap(DesktopIcon("printer1"));
+ pixFrame->layout()->setMargin( 11 );
+ }
+}
+
+#include "printerdlgimpl.moc"
diff --git a/filesharing/advanced/kcm_sambaconf/printerdlgimpl.h b/filesharing/advanced/kcm_sambaconf/printerdlgimpl.h
new file mode 100644
index 00000000..d7488985
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/printerdlgimpl.h
@@ -0,0 +1,78 @@
+/***************************************************************************
+ printerdlgimpl.h - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef PRINTERDLGIMPL_H
+#define PRINTERDLGIMPL_H
+
+
+/**
+ * @author Jan Schfer
+ **/
+
+#include "kcmprinterdlg.h"
+
+class SambaShare;
+class QWidget;
+class UserTabImpl;
+class DictManager;
+
+/**
+ * This class implements the tcmprinterdlg.ui interface
+ **/
+class PrinterDlgImpl : public KcmPrinterDlg
+{
+Q_OBJECT
+
+public :
+
+ PrinterDlgImpl(QWidget* parent, SambaShare* share);
+ ~PrinterDlgImpl();
+
+protected :
+
+ /**
+ * Fills all dialog fields with the values
+ * of the SambaShare object
+ **/
+ void initDialog();
+
+ /**
+ * The share object to change with this dialog
+ **/
+ SambaShare* _share;
+
+ UserTabImpl* _userTab;
+ DictManager* _dictMngr;
+
+protected slots:
+ void accept();
+ virtual void printersChkToggled(bool);
+};
+
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/programmingconventions.txt b/filesharing/advanced/kcm_sambaconf/programmingconventions.txt
new file mode 100644
index 00000000..b9019e74
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/programmingconventions.txt
@@ -0,0 +1,10 @@
+Programming conventions :
+
+Class member variable : starting with _ e.g. _name
+
+QCheckBox variable : ending to Chk e.g. nameChk
+QLineEdit variable : ending to Edit e.g. nameEdit
+KUrlRequerster variable : ending to UrlRq e.g. pathUrlRq
+QPushButton : ending to Btn e.g. addBtn
+
+QListView: ending to ListView e.g. sharesListView
diff --git a/filesharing/advanced/kcm_sambaconf/qmultichecklistitem.cpp b/filesharing/advanced/kcm_sambaconf/qmultichecklistitem.cpp
new file mode 100644
index 00000000..44383f6d
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/qmultichecklistitem.cpp
@@ -0,0 +1,159 @@
+/***************************************************************************
+ qmultichecklistitem.cpp - description
+ -------------------
+ begin : Sun Jan 26 2003
+ copyright : (C) 2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <qpen.h>
+#include <qpainter.h>
+#include <qvbox.h>
+#include <qheader.h>
+
+#include <kdebug.h>
+#include <kmessagebox.h>
+
+#include "qmultichecklistitem.moc"
+#include "qmultichecklistitem.h"
+
+static const int BoxSize = 16;
+
+
+QMultiCheckListItem::QMultiCheckListItem( QListView *parent=0) :
+ QListViewItem(parent) {
+}
+
+void QMultiCheckListItem::setOn(int column, bool b) {
+ if (column >= (int) checkBoxColumns.size()) {
+ checkBoxColumns.resize(column*2);
+ checkStates.resize(column*2);
+ }
+
+ checkStates.setBit(column,b);
+ checkBoxColumns.setBit(column);
+ kdDebug(5009) << "setOn : " << column << endl;
+ repaint();
+}
+
+bool QMultiCheckListItem::isOn(int column) {
+ return checkStates.testBit(column);
+}
+
+bool QMultiCheckListItem::isDisabled(int column) {
+ return disableStates.testBit(column);
+}
+
+void QMultiCheckListItem::toggle(int column) {
+ if (column >= (int) checkBoxColumns.size()) {
+ checkBoxColumns.resize(column*2);
+ checkStates.resize(column*2);
+ }
+
+ checkBoxColumns.setBit(column);
+ checkStates.toggleBit(column);
+ emit stateChanged(column,checkStates.testBit(column));
+
+ repaint();
+}
+
+void QMultiCheckListItem::setDisabled(int column, bool b) {
+ if (column >= (int) disableStates.size()) {
+ disableStates.resize(column*2);
+ }
+
+ disableStates.setBit(column,b);
+// KMessageBox::information(0L,QString("setDisabled"),QString("disable %1 ").arg(column));
+ repaint();
+}
+
+void QMultiCheckListItem::paintCell(QPainter *p,const QColorGroup & cg, int col, int width, int align)
+{
+
+ if ( !p )
+ return;
+
+ QListView *lv = listView();
+ if ( !lv )
+ return;
+
+ QListViewItem::paintCell(p,cg,col,width,align );
+
+ int marg = lv->itemMargin();
+// int width = BoxSize + marg*2;
+ // use a provate color group and set the text/highlighted text colors
+ QColorGroup mcg = cg;
+
+ if (checkBoxColumns.testBit(col)) {
+ // Bold/Italic/use default checkboxes
+ // code allmost identical to QCheckListItem
+ Q_ASSERT( lv ); //###
+ // I use the text color of defaultStyles[0], normalcol in parent listview
+// mcg.setColor( QColorGroup::Text, ((StyleListView*)lv)->normalcol );
+ int x = 0;
+ if ( align == AlignCenter ) {
+ QFontMetrics fm( lv->font() );
+ x = (width - BoxSize - fm.width(text(0)))/2;
+ }
+ int y = (height() - BoxSize) / 2;
+
+ if ( !isEnabled() || disableStates.testBit(col))
+ p->setPen( QPen( lv->palette().color( QPalette::Disabled, QColorGroup::Text ), 2 ) );
+ else
+ p->setPen( QPen( mcg.text(), 2 ) );
+
+ if ( isSelected() && lv->header()->mapToSection( 0 ) != 0 ) {
+ p->fillRect( 0, 0, x + marg + BoxSize + 4, height(),
+ mcg.brush( QColorGroup::Highlight ) );
+ if ( isEnabled() )
+ p->setPen( QPen( mcg.highlightedText(), 2 ) ); // FIXME! - use defaultstyles[0].selecol. luckily not used :)
+ }
+ p->drawRect( x+marg, y+2, BoxSize-4, BoxSize-4 );
+ x++;
+ y++;
+ if ( checkStates.testBit(col) ) {
+ QPointArray a( 7*2 );
+ int i, xx, yy;
+ xx = x+1+marg;
+ yy = y+5;
+ for ( i=0; i<3; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy++;
+ }
+ yy -= 2;
+ for ( i=3; i<7; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy--;
+ }
+ p->drawLineSegments( a );
+ }
+
+ }
+
+
+}
+
+
+
diff --git a/filesharing/advanced/kcm_sambaconf/qmultichecklistitem.h b/filesharing/advanced/kcm_sambaconf/qmultichecklistitem.h
new file mode 100644
index 00000000..0f0d2410
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/qmultichecklistitem.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+ qextendedchecklistitem.h - description
+ -------------------
+ begin : Sun Jan 26 2003
+ copyright : (C) 2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef _QMULTICHECKLISTITEM_H_
+#define _QMULTICHECKLISTITEM_H_
+
+#include <qlistview.h>
+
+#include <qbitarray.h>
+
+class QMultiCheckListItem : public QObject, public QListViewItem {
+Q_OBJECT
+
+ public:
+ QMultiCheckListItem( QListView *parent);
+ ~QMultiCheckListItem() {};
+
+ virtual bool isOn(int column);
+ virtual bool isDisabled(int column);
+
+
+ protected:
+ /* reimp */
+ virtual void paintCell(QPainter *, const QColorGroup &, int, int, int);
+
+ public slots:
+ virtual void setOn(int, bool);
+ virtual void toggle(int);
+ virtual void setDisabled(int, bool);
+
+ signals:
+ void stateChanged(int, bool);
+ private:
+ QBitArray checkStates;
+ QBitArray checkBoxColumns;
+ QBitArray disableStates;
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/sambafile.cpp b/filesharing/advanced/kcm_sambaconf/sambafile.cpp
new file mode 100644
index 00000000..f1f48263
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/sambafile.cpp
@@ -0,0 +1,701 @@
+/*
+ Copyright (c) 2002-2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#include <qfile.h>
+#include <qprocess.h>
+#include <qfileinfo.h>
+
+#include <ksimpleconfig.h>
+#include <kdebug.h>
+#include <qfileinfo.h>
+#include <kio/job.h>
+#include <kprocess.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <ktempfile.h>
+#include <ksambashare.h>
+
+#include <pwd.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "sambafile.h"
+
+#define FILESHARE_DEBUG 5009
+
+SambaConfigFile::SambaConfigFile(SambaFile* sambaFile)
+{
+ QDict<QString>(10,false);
+ setAutoDelete(true);
+ _sambaFile = sambaFile;
+}
+
+QString SambaConfigFile::getDefaultValue(const QString & name)
+{
+ SambaShare* defaults = _sambaFile->getTestParmValues();
+ QString s = defaults->getValue(name,false,false);
+
+ return s;
+}
+
+SambaShare* SambaConfigFile::addShare(const QString & name)
+{
+ SambaShare* newShare = new SambaShare(name,this);
+ addShare(name,newShare);
+ return newShare;
+}
+
+
+void SambaConfigFile::addShare(const QString & name, SambaShare* share)
+{
+ insert(name,share),
+ _shareList.append(name);
+}
+
+void SambaConfigFile::removeShare(const QString & name)
+{
+ remove(name);
+ _shareList.remove(name);
+}
+
+
+QStringList SambaConfigFile::getShareList()
+{
+ return _shareList;
+}
+
+SambaFile::SambaFile(const QString & _path, bool _readonly)
+ : readonly(_readonly),
+ changed(false),
+ path(_path),
+ localPath(_path),
+ _sambaConfig(0),
+ _testParmValues(0),
+ _sambaVersion(-1),
+ _tempFile(0)
+{
+}
+
+SambaFile::~SambaFile()
+{
+ delete _sambaConfig;
+ delete _testParmValues;
+ delete _tempFile;
+
+}
+
+bool SambaFile::isRemoteFile() {
+ return ! KURL(path).isLocalFile();
+}
+
+/** No descriptions */
+QString SambaFile::findShareByPath(const QString & path) const
+{
+ QDictIterator<SambaShare> it(*_sambaConfig);
+ KURL url(path);
+ url.adjustPath(-1);
+
+ for ( ; it.current(); ++it )
+ {
+ SambaShare* share = it.current();
+
+ QString *s = share->find("path");
+ if (s) {
+ KURL curUrl(*s);
+ curUrl.adjustPath(-1);
+
+ kdDebug(5009) << url.path() << " =? " << curUrl.path() << endl;
+
+ if (url.path() == curUrl.path())
+ return it.currentKey();
+ }
+ }
+
+ return QString::null;
+}
+
+bool SambaFile::save() {
+ return slotApply();
+}
+
+
+bool SambaFile::slotApply()
+{
+ if (readonly) {
+ kdDebug(FILESHARE_DEBUG) << "SambaFile::slotApply: readonly=true" << endl;
+ return false;
+ }
+
+ // If we have write access to the smb.conf
+ // we simply save the values to it
+ // if not we have to save the results in
+ // a temporary file and copy it afterwards
+ // over the smb.conf file with kdesu.
+ if (QFileInfo(path).isWritable())
+ {
+ saveTo(path);
+ changed = false;
+ return true;
+ }
+
+ // Create a temporary smb.conf file
+ delete _tempFile;
+ _tempFile = new KTempFile();
+ _tempFile->setAutoDelete(true);
+
+ if (!saveTo(_tempFile->name())) {
+ kdDebug(5009) << "SambaFile::slotApply: Could not save to temporary file" << endl;
+ delete _tempFile;
+ _tempFile = 0;
+ return false;
+ }
+
+ QFileInfo fi(path);
+ KURL url(path);
+
+ if (KURL(path).isLocalFile()) {
+ KProcess proc;
+ kdDebug(5009) << "SambaFile::slotApply: is local file!" << endl;
+
+ QString suCommand=QString("cp %1 %2; rm %3")
+ .arg(_tempFile->name())
+ .arg(path)
+ .arg(_tempFile->name());
+ proc << "kdesu" << "-d" << suCommand;
+
+ if (! proc.start(KProcess::Block)) {
+ kdDebug(5009) << "SambaFile::slotApply: saving to " << path << " failed!" << endl;
+ //KMessageBox::sorry(0,i18n("Saving the results to %1 failed.").arg(path));
+ delete _tempFile;
+ _tempFile = 0;
+ return false;
+ }
+ else {
+ changed = false;
+ delete _tempFile;
+ _tempFile = 0;
+ kdDebug(5009) << "SambaFile::slotApply: changes successfully saved!" << endl;
+ return true;
+ }
+ } else {
+ kdDebug(5009) << "SambaFile::slotApply: is remote file!" << endl;
+ _tempFile->setAutoDelete(true);
+ KURL srcURL;
+ srcURL.setPath( _tempFile->name() );
+
+ KIO::FileCopyJob * job = KIO::file_copy( srcURL, url, -1, true );
+ connect( job, SIGNAL( result( KIO::Job * ) ),
+ this, SLOT( slotSaveJobFinished ( KIO::Job * ) ) );
+ return (job->error()==0);
+ }
+
+ return true;
+}
+
+ /**
+ * Returns a name which isn't already used for a share
+ **/
+QString SambaFile::getUnusedName(const QString alreadyUsedName) const
+{
+
+ QString init = i18n("Unnamed");
+ if (alreadyUsedName != QString::null)
+ init = alreadyUsedName;
+
+ QString s = init;
+
+ int i = 2;
+
+ while (_sambaConfig->find(s))
+ {
+ s = init+QString::number(i);
+ i++;
+ }
+
+ return s;
+}
+
+
+
+SambaShare* SambaFile::newShare(const QString & name)
+{
+ if (_sambaConfig->find(name))
+ return 0L;
+
+ SambaShare* share = new SambaShare(name,_sambaConfig);
+ _sambaConfig->addShare(name,share);
+
+ changed = true;
+
+ return share;
+
+}
+
+SambaShare* SambaFile::newShare(const QString & name, const QString & path)
+{
+ SambaShare* share = newShare(name);
+ if (share)
+ {
+ share->setValue("path",path);
+ }
+
+ return share;
+}
+
+SambaShare* SambaFile::newPrinter(const QString & name, const QString & printer)
+{
+ SambaShare* share = newShare(name);
+
+ if (share)
+ {
+ share->setValue("printable",true);
+ share->setValue("printer name",printer);
+ }
+
+ return share;
+}
+
+
+/** No descriptions */
+void SambaFile::removeShare(const QString & share)
+{
+ changed = true;
+
+ _sambaConfig->removeShare(share);
+}
+
+void SambaFile::removeShare(SambaShare* share)
+{
+ removeShare(share->getName());
+}
+
+void SambaFile::removeShareByPath(const QString & path) {
+ QString share = findShareByPath(path);
+ removeShare(share);
+}
+
+/** No descriptions */
+SambaShare* SambaFile::getShare(const QString & share) const
+{
+ SambaShare *s = _sambaConfig->find(share);
+
+ return s;
+}
+
+/**
+* Returns a list of all shared directories
+**/
+SambaShareList* SambaFile::getSharedDirs() const
+{
+ SambaShareList* list = new SambaShareList();
+
+ QDictIterator<SambaShare> it(*_sambaConfig);
+
+ for( ; it.current(); ++it )
+ {
+ if (!it.current()->isPrinter() &&
+ it.current()->getName() != "global")
+ {
+ list->append(it.current());
+ }
+ }
+
+ return list;
+}
+
+/**
+* Returns a list of all shared printers
+**/
+SambaShareList* SambaFile::getSharedPrinters() const
+{
+ SambaShareList* list = new SambaShareList();
+
+ QDictIterator<SambaShare> it(*_sambaConfig);
+
+ for( ; it.current(); ++it )
+ {
+ if (it.current()->isPrinter())
+ list->append(it.current());
+ }
+
+ return list;
+}
+
+int SambaFile::getSambaVersion() {
+ if (_sambaVersion > -1)
+ return _sambaVersion;
+
+ KProcess testParam;
+ testParam << "testparm";
+ testParam << "-V";
+ _parmOutput = QString("");
+ _sambaVersion = 2;
+
+ connect( &testParam, SIGNAL(receivedStdout(KProcess*,char*,int)),
+ this, SLOT(testParmStdOutReceived(KProcess*,char*,int)));
+
+
+
+ if (testParam.start(KProcess::Block,KProcess::Stdout)) {
+ if (_parmOutput.find("3") > -1)
+ _sambaVersion = 3;
+ }
+
+ kdDebug(5009) << "Samba version = " << _sambaVersion << endl;
+
+ return _sambaVersion;
+}
+
+
+SambaShare* SambaFile::getTestParmValues(bool reload)
+{
+ if (_testParmValues && !reload)
+ return _testParmValues;
+
+
+ KProcess testParam;
+ testParam << "testparm";
+ testParam << "-s";
+
+ if (getSambaVersion() == 3)
+ testParam << "-v";
+
+
+ testParam << "/dev/null";
+ _parmOutput = QString("");
+
+ connect( &testParam, SIGNAL(receivedStdout(KProcess*,char*,int)),
+ this, SLOT(testParmStdOutReceived(KProcess*,char*,int)));
+
+ if (testParam.start(KProcess::Block,KProcess::Stdout))
+ {
+ parseParmStdOutput();
+ } else
+ _testParmValues = new SambaShare(_sambaConfig);
+
+ return _testParmValues;
+}
+
+void SambaFile::testParmStdOutReceived(KProcess *, char *buffer, int buflen)
+{
+ _parmOutput+=QString::fromLatin1(buffer,buflen);
+}
+
+void SambaFile::parseParmStdOutput()
+{
+
+ QTextIStream s(&_parmOutput);
+
+ if (_testParmValues)
+ delete _testParmValues;
+ _testParmValues = new SambaShare(_sambaConfig);
+
+ QString section="";
+
+ while (!s.atEnd())
+ {
+ QString line = s.readLine().stripWhiteSpace();
+
+ // empty lines
+ if (line.isEmpty())
+ continue;
+
+ // comments
+ if ('#' == line[0])
+ continue;
+
+ // sections
+ if ('[' == line[0])
+ {
+ // get the name of the section
+ section = line.mid(1,line.length()-2).lower();
+ continue;
+ }
+
+ // we are only interested in the global section
+ if (section != KGlobal::staticQString("global"))
+ continue;
+
+ // parameter
+ // parameter
+ int i = line.find('=');
+
+ if (i>-1) {
+ QString name = line.left(i).stripWhiteSpace();
+ QString value = line.mid(i+1).stripWhiteSpace();
+ _testParmValues->setValue(name,value,false,false);
+ }
+
+ }
+
+
+
+}
+
+/**
+* Try to find the samba config file position
+* First tries the config file, then checks
+* several common positions
+* If nothing is found returns QString::null
+**/
+QString SambaFile::findSambaConf()
+{
+ return KSambaShare::instance()->smbConfPath();
+}
+
+void SambaFile::slotSaveJobFinished( KIO::Job * job ) {
+ delete _tempFile;
+ _tempFile = 0;
+}
+
+void SambaFile::slotJobFinished( KIO::Job * job )
+{
+ if (job->error())
+ emit canceled( job->errorString() );
+ else
+ {
+ openFile();
+ emit completed();
+ }
+}
+
+bool SambaFile::load()
+{
+ if (path.isNull() || path.isEmpty())
+ return false;
+
+ kdDebug(FILESHARE_DEBUG) << "SambaFile::load: path=" << path << endl;
+ KURL url(path);
+
+ if (!url.isLocalFile()) {
+ KTempFile tempFile;
+ localPath = tempFile.name();
+ KURL destURL;
+ destURL.setPath( localPath );
+ KIO::FileCopyJob * job = KIO::file_copy( url, destURL, 0600, true, false, true );
+// emit started( d->m_job );
+ connect( job, SIGNAL( result( KIO::Job * ) ), this, SLOT( slotJobFinished ( KIO::Job * ) ) );
+ return true;
+ } else {
+ localPath = path;
+ bool ret = openFile();
+ if (ret)
+ emit completed();
+ return ret;
+ }
+}
+
+bool SambaFile::openFile() {
+
+ QFile f(localPath);
+
+ if (!f.open(IO_ReadOnly)) {
+ //throw SambaFileLoadException(QString("<qt>Could not open file <em>%1</em> for reading.</qt>").arg(path));
+ return false;
+ }
+
+ QTextStream s(&f);
+
+ delete _sambaConfig;
+
+ _sambaConfig = new SambaConfigFile(this);
+
+ SambaShare *currentShare = 0L;
+ bool continuedLine = false; // is true if the line before ended with a backslash
+ QString completeLine;
+ QStringList comments;
+
+ while (!s.eof())
+ {
+ QString currentLine = s.readLine().stripWhiteSpace();
+
+ if (continuedLine)
+ {
+ completeLine += currentLine;
+ continuedLine = false;
+ } else
+ completeLine = currentLine;
+
+ // is the line continued in the next line ?
+ if ( completeLine[completeLine.length()-1] == '\\' )
+ {
+ continuedLine = true;
+ // remove the ending backslash
+ completeLine.truncate( completeLine.length()-1 );
+ continue;
+ }
+
+ // comments or empty lines
+ if (completeLine.isEmpty() ||
+ '#' == completeLine[0] ||
+ ';' == completeLine[0])
+ {
+ comments.append(completeLine);
+ continue;
+ }
+
+
+ // sections
+ if ('[' == completeLine[0])
+ {
+ // get the name of the section
+ QString section = completeLine.mid(1,completeLine.length()-2);
+ currentShare = _sambaConfig->addShare(section);
+ currentShare->setComments(comments);
+ comments.clear();
+
+ continue;
+ }
+
+ // parameter
+ int i = completeLine.find('=');
+
+ if (i>-1)
+ {
+ QString name = completeLine.left(i).stripWhiteSpace();
+ QString value = completeLine.mid(i+1).stripWhiteSpace();
+
+ if (currentShare)
+ {
+ currentShare->setComments(name,comments);
+ currentShare->setValue(name,value,true,true);
+
+ comments.clear();
+ }
+ }
+ }
+
+ f.close();
+
+ // Make sure there is a global share
+ if (!getShare("global")) {
+ _sambaConfig->addShare("global");
+ }
+
+ return true;
+}
+
+bool SambaFile::saveTo(const QString & path)
+{
+ QFile f(path);
+
+ if (!f.open(IO_WriteOnly))
+ return false;
+
+ QTextStream s(&f);
+
+ QStringList shareList = _sambaConfig->getShareList();
+
+ for ( QStringList::Iterator it = shareList.begin(); it != shareList.end(); ++it )
+ {
+ SambaShare* share = _sambaConfig->find(*it);
+
+ // First add all comments of the share to the file
+ QStringList comments = share->getComments();
+ for ( QStringList::Iterator cmtIt = comments.begin(); cmtIt != comments.end(); ++cmtIt )
+ {
+ s << *cmtIt << endl;
+
+ kdDebug(5009) << *cmtIt << endl;
+ }
+
+ // If there are no lines before the section add
+ // a blank line
+ if (comments.isEmpty())
+ s << endl;
+
+ // Add the name of the share / section
+ s << "[" << share->getName() << "]" << endl;
+
+ // Add all options of the share
+ QStringList optionList = share->getOptionList();
+
+ for ( QStringList::Iterator optionIt = optionList.begin(); optionIt != optionList.end(); ++optionIt )
+ {
+
+ // Add the comments of the option
+ comments = share->getComments(*optionIt);
+ for ( QStringList::Iterator cmtIt = comments.begin(); cmtIt != comments.end(); ++cmtIt )
+ {
+ s << *cmtIt << endl;
+ }
+
+ // Add the option
+ s << *optionIt << " = " << *share->find(*optionIt) << endl;
+ }
+
+
+ }
+
+ f.close();
+
+ return true;
+}
+
+
+SambaConfigFile* SambaFile::getSambaConfigFile(KSimpleConfig* config)
+{
+ QStringList groups = config->groupList();
+
+ SambaConfigFile* samba = new SambaConfigFile(this);
+
+ for ( QStringList::Iterator it = groups.begin(); it != groups.end(); ++it )
+ {
+ QMap<QString,QString> entries = config->entryMap(*it);
+
+ SambaShare *share = new SambaShare(*it,samba);
+ samba->insert(*it,share);
+
+ for (QMap<QString,QString>::Iterator it2 = entries.begin(); it2 != entries.end(); ++it2 )
+ {
+ if (!it2.data().isEmpty())
+ share->setValue(it2.key(),QString(it2.data()),false,false);
+ }
+
+ }
+
+ return samba;
+
+}
+
+KSimpleConfig* SambaFile::getSimpleConfig(SambaConfigFile* sambaConfig, const QString & path)
+{
+ KSimpleConfig *config = new KSimpleConfig(path,false);
+
+ QDictIterator<SambaShare> it(*sambaConfig);
+
+ for ( ; it.current(); ++it )
+ {
+ SambaShare* share = it.current();
+
+ config->setGroup(it.currentKey());
+
+ QDictIterator<QString> it2(*share);
+
+ for (; it2.current(); ++it2 )
+ {
+ config->writeEntry(it2.currentKey(), *it2.current());
+ }
+
+ }
+
+ return config;
+}
+
+#include "sambafile.moc"
diff --git a/filesharing/advanced/kcm_sambaconf/sambafile.h b/filesharing/advanced/kcm_sambaconf/sambafile.h
new file mode 100644
index 00000000..4eba9705
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/sambafile.h
@@ -0,0 +1,178 @@
+/*
+ Copyright (c) 2002-2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef SAMBAFILE_H
+#define SAMBAFILE_H
+
+
+#include <qdict.h>
+#include <qstring.h>
+#include <qobject.h>
+#include <kio/job.h>
+
+#include "sambashare.h"
+
+
+class KSimpleConfig;
+class KProcess;
+class KConfig;
+class KTempFile;
+
+class SambaFile;
+
+class SambaFileLoadException
+{
+ public:
+ SambaFileLoadException(const QString & msg) { message = msg; };
+
+ QString getMessage() { return message; };
+ protected:
+ QString message;
+};
+
+class SambaConfigFile : public QDict<SambaShare>
+{
+public:
+ SambaConfigFile(SambaFile*);
+ QString getDefaultValue(const QString & name);
+ QStringList getShareList();
+ void addShare(const QString & name, SambaShare* share);
+ SambaShare* addShare(const QString & name);
+ void removeShare(const QString & name);
+protected:
+ SambaFile* _sambaFile;
+ QStringList _shareList;
+};
+
+class SambaFile : public QObject
+{
+Q_OBJECT
+public:
+ SambaFile(const QString & _path, bool _readonly=true);
+ ~SambaFile();
+
+ /** No descriptions */
+ QString findShareByPath(const QString & path) const;
+ void removeShareByPath(const QString & path);
+
+
+ SambaShare* newShare(const QString & name);
+ SambaShare* newShare(const QString & name, const QString & path);
+ SambaShare* newPrinter(const QString & name, const QString & printer);
+
+ void removeShare(const QString & share);
+ void removeShare(SambaShare* share);
+
+ void renameShare(const QString & oldName, const QString & newName);
+
+ SambaShare* getShare(const QString & share) const;
+
+ /**
+ * Returns a list of all shared directories
+ **/
+ SambaShareList* getSharedDirs() const;
+
+ /**
+ * Returns a list of all shared printers
+ **/
+ SambaShareList* getSharedPrinters() const;
+
+ /**
+ * Returns a name which isn't already used for a share
+ * if the alreadyUsedName parameter is given, then
+ * a name based on this name is returned.
+ * E.g.: if public is already used, the method could return
+ * public2
+ **/
+ QString getUnusedName(const QString alreadyUsedName=QString::null) const;
+
+ /**
+ * Returns all values of the global section
+ * which are returned by the testparam program
+ * if the values were already loaded then these
+ * values are returned except the reload parameter
+ * is true
+ **/
+ SambaShare* getTestParmValues(bool reload=false);
+
+ static QString findSambaConf();
+
+
+ int getSambaVersion();
+
+ /**
+ * Load all data from the smb.conf file
+ * Can load a remote file
+ **/
+ bool load();
+
+ bool save();
+
+ /**
+ * Reads the local smb.conf
+ */
+ bool openFile();
+
+ bool isRemoteFile();
+
+ /**
+ * Save all data to the specified file
+ * if successful returns true otherwise false
+ **/
+ bool saveTo(const QString & path);
+
+protected:
+ bool readonly;
+ bool changed;
+ QString path;
+ QString localPath;
+ SambaConfigFile *_sambaConfig;
+ SambaShare* _testParmValues;
+ QString _parmOutput;
+ int _sambaVersion;
+
+ void parseParmStdOutput();
+ SambaConfigFile* getSambaConfigFile(KSimpleConfig* config);
+ KSimpleConfig* getSimpleConfig(SambaConfigFile* sambaConfig, const QString & filename);
+
+
+
+private:
+ void copyConfigs(KConfig* first, KConfig* second);
+ KTempFile * _tempFile;
+public slots:
+
+ /**
+ * Saves all changes to the smb.conf file
+ * if the user is not allowed she'll be asked
+ * for a root password
+ **/
+ bool slotApply();
+protected slots:
+ void testParmStdOutReceived(KProcess *proc, char *buffer, int buflen);
+ void slotJobFinished( KIO::Job *);
+ void slotSaveJobFinished( KIO::Job *);
+
+signals:
+ void canceled(const QString &);
+ void completed();
+
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/sambashare.cpp b/filesharing/advanced/kcm_sambaconf/sambashare.cpp
new file mode 100644
index 00000000..b30d7db7
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/sambashare.cpp
@@ -0,0 +1,334 @@
+/***************************************************************************
+ sambashare.cpp - description
+ -------------------
+ begin : Mon Jun 12 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+***************************************************************************/
+
+/******************************************************************************
+* *
+* 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 <kdebug.h>
+#include <qstringlist.h>
+
+#include "sambafile.h"
+#include "sambashare.h"
+#include "common.h"
+
+SambaShare::SambaShare(SambaConfigFile* sambaFile)
+ : QDict<QString>(10,false)
+{
+ _sambaFile = sambaFile;
+ setName("defaults");
+ setAutoDelete(true);
+}
+
+SambaShare::SambaShare(const QString & name, SambaConfigFile* sambaFile)
+ : QDict<QString>(10,false)
+{
+ _sambaFile = sambaFile;
+ setName(name);
+ setAutoDelete(true);
+}
+
+const QString& SambaShare::getName() const
+{
+ return _name;
+}
+
+bool SambaShare::setName(const QString & name, bool testWetherExists)
+{
+
+ if ( testWetherExists &&
+ _sambaFile->find(name) &&
+ _sambaFile->find(name) != this)
+ return false;
+
+ _name = name;
+return true;
+}
+
+bool SambaShare::optionSupported(const QString & name)
+{
+ QString defaultValue = _sambaFile->getDefaultValue(name);
+// kdDebug(5009) << name << " = " << defaultValue << " null : " << defaultValue.isNull() << endl;
+ return ! defaultValue.isNull();
+}
+
+/**
+* Returns the value of the given parameter
+* if no value is set yet the default value
+* will be returned.
+**/
+QString SambaShare::getValue(const QString & name, bool globalValue, bool defaultValue)
+{
+ QString synonym = getSynonym(name);
+
+ QString* str = find(synonym);
+ QString ret;
+
+ if (str) {
+ ret = *str;
+ }
+ else
+ if (globalValue)
+ ret = getGlobalValue(synonym,defaultValue);
+ else
+ if (defaultValue)
+ ret = getDefaultValue(synonym);
+
+
+ if (name=="writable" || name=="write ok" || name=="writeable")
+ ret = textFromBool( ! boolFromText(ret) );
+
+ return ret;
+}
+
+bool SambaShare::getBoolValue(const QString & name, bool globalValue, bool defaultValue)
+{
+ return boolFromText(getValue(name,globalValue,defaultValue));
+}
+
+
+QString SambaShare::getGlobalValue(const QString & name, bool defaultValue)
+{
+ if (!_sambaFile)
+ return getValue(name,false,defaultValue);
+
+ SambaShare* globals = _sambaFile->find("global");
+
+ QString s = globals->getValue(name,false,defaultValue);
+
+ return s;
+}
+
+
+/**
+* Returns the default synonym for the given parameter
+* if no synonym exists the original parameter in lower
+* case is returned
+**/
+QString SambaShare::getSynonym(const QString & name) const
+{
+ QString lname = name.lower().stripWhiteSpace();
+
+ if (lname == "browsable") return "browseable";
+ if (lname == "allow hosts") return "hosts allow";
+ if (lname == "auto services") return "preload";
+ if (lname == "casesignames") return "case sensitive";
+ if (lname == "create mode") return "create mask";
+ if (lname == "debuglevel") return "log level";
+ if (lname == "default") return "default service";
+ if (lname == "deny hosts") return "hosts deny";
+ if (lname == "directory") return "path";
+ if (lname == "directory mode") return "directory mask";
+ if (lname == "exec") return "preexec";
+ if (lname == "group") return "force group";
+ if (lname == "lock dir") return "lock directory";
+ if (lname == "min passwd length") return "min password length";
+ if (lname == "only guest") return "guest only";
+ if (lname == "prefered master") return "preferred master";
+ if (lname == "print ok") return "printable";
+ if (lname == "printcap") return "printcap name";
+ if (lname == "printer") return "printer name";
+ if (lname == "protocol") return "max protocol";
+ if (lname == "public") return "guest ok";
+ if (lname == "writable") return "read only";
+ if (lname == "write ok") return "read only";
+ if (lname == "read only") return "read only";
+ if (lname == "root") return "root directory";
+ if (lname == "root") return "root dir";
+ if (lname == "timestamp logs") return "debug timestamp";
+ if (lname == "user") return "username";
+ if (lname == "users") return "username";
+ if (lname == "idmap uid") return "winbind uid";
+ if (lname == "idmap gid") return "winbind gid";
+ if (lname == "vfs object") return "vfs objects";
+
+
+ return lname;
+}
+
+void SambaShare::setValue(const QString & name, const QString & value, bool globalValue, bool defaultValue)
+{
+ QString synonym = getSynonym(name);
+
+ QString newValue = value;
+
+ if (newValue.isNull())
+ newValue = "";
+
+ if (getName().lower() == "global")
+ globalValue = false;
+
+ if (name=="writable" || name=="write ok" || name=="writeable")
+ {
+ synonym = "read only";
+ newValue = textFromBool(!boolFromText(value));
+ }
+
+ QString global = "";
+
+ if (globalValue && !hasComments(synonym))
+ {
+ global = getGlobalValue(synonym, false);
+
+ if ( newValue.lower() == global.lower() )
+ {
+ remove(synonym);
+ _optionList.remove(synonym);
+ return;
+ }
+ }
+
+ // If the option has a comment we don't remove
+ // it if the value is equal to the default value.
+ // That's because the author of the option has thought about it.
+ if (defaultValue && global.isEmpty() && !hasComments(synonym))
+ {
+ if ( newValue.stripWhiteSpace().lower() == getDefaultValue(synonym).stripWhiteSpace().lower() )
+ {
+ kdDebug(5009) << getName() << " global: " << global << " remove " << synonym << endl;
+ remove(synonym);
+ _optionList.remove(synonym);
+ return;
+ }
+
+ }
+
+ if (!find(synonym))
+ {
+ _optionList.append(synonym);
+ }
+
+ replace(synonym,new QString(newValue));
+}
+
+void SambaShare::setValue(const QString & name, bool value, bool globalValue, bool defaultValue)
+{
+ setValue(name,textFromBool(value),globalValue, defaultValue);
+}
+
+void SambaShare::setValue(const QString & name, int value, bool globalValue, bool defaultValue)
+{
+ setValue(name,QString::number(value),globalValue, defaultValue);
+}
+
+/**
+* Returns the default value of the parameter
+**/
+QString SambaShare::getDefaultValue(const QString & name)
+{
+ QString defaultValue = _sambaFile->getDefaultValue(name);
+ if (defaultValue.isNull())
+ defaultValue = "";
+
+ return defaultValue;
+}
+
+bool SambaShare::getDefaultBoolValue(const QString & name)
+{
+
+ return boolFromText(getDefaultValue(name));
+}
+
+/**
+* Sets the comments for the passed option
+**/
+void SambaShare::setComments(const QString & name, const QStringList & commentList)
+{
+ // Only add inempty lists
+ if (commentList.empty())
+ return;
+
+ QString synonym = getSynonym(name);
+
+ _commentList.replace(name,new QStringList(commentList));
+}
+
+/**
+* Returns the comments of the passed option
+**/
+QStringList SambaShare::getComments(const QString & name)
+{
+ QStringList* list = _commentList.find(getSynonym(name));
+
+ if (list)
+ return QStringList(*list);
+ else
+ return QStringList();
+}
+
+
+bool SambaShare::hasComments(const QString & name)
+{
+ return 0L != _commentList.find(getSynonym(name));
+}
+
+/**
+* Returns the comments of the share
+* e.g. the text above the [...] section
+**/
+QStringList SambaShare::getComments()
+{
+ return _comments;
+}
+
+/**
+* Sets the comments for the share
+* e.g. the text above the [...] section
+**/
+void SambaShare::setComments(const QStringList & commentList)
+{
+ _comments = commentList;
+}
+
+QStringList SambaShare::getOptionList()
+{
+ return _optionList;
+}
+
+/**
+* Returns true if this share is a printer
+**/
+bool SambaShare::isPrinter()
+{
+ QString* str = find("printable");
+
+ if (!str)
+ str = find("print ok");
+
+ return str!=0;
+}
+
+/**
+* Returns true if the share name is
+* global, printers or homes
+**/
+bool SambaShare::isSpecialSection()
+{
+ if ( _name.lower() == "global" ||
+ _name.lower() == "printers" ||
+ _name.lower() == "homes" )
+ return true;
+ else
+ return false;
+}
diff --git a/filesharing/advanced/kcm_sambaconf/sambashare.h b/filesharing/advanced/kcm_sambaconf/sambashare.h
new file mode 100644
index 00000000..d6c0e3b7
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/sambashare.h
@@ -0,0 +1,231 @@
+/***************************************************************************
+ sambashare.h - description
+ -------------------
+ begin : Mon 12 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef SAMBASHARE_H
+#define SAMBASHARE_H
+
+#include <qdict.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qptrlist.h>
+
+class SambaConfigFile;
+class QStringList;
+
+/**
+ * A class which represents a Samba share
+ * @author Jan Sch&auml;fer
+ **/
+class SambaShare :public QDict<QString>
+{
+public:
+
+ /**
+ * Creates a new SambaShare with an empty name
+ **/
+ SambaShare(SambaConfigFile* sambaFile);
+
+ /**
+ * Creates a new SambaShare with the given name
+ * @param name the name of the share
+ **/
+ SambaShare(const QString & name, SambaConfigFile* sambaFile);
+
+ /**
+ * Returns the name of the share
+ **/
+ const QString& getName() const;
+
+
+ /**
+ * Sets the name of the share
+ * returns false if the name already exists and the testWetherExists
+ * parameter is set to true
+ **/
+ bool setName(const QString & name, bool testWetherExists=true);
+
+ /**
+ * Tests wether or not the given option is supported by Samba.
+ * It does this by testing the output of testparm for this option
+ **/
+ bool optionSupported(const QString & name);
+
+ /**
+ * Returns the value of the given parameter
+ * if the parameter doesn't exists, the
+ * global and then the default value is returned.
+ * @param name the name of the parameter
+ * @param gobalValue if the gobal value should be returend
+ * @param defaultValue if the default value should be returned or a null string
+ **/
+ QString getValue(const QString & name, bool globalValue=true, bool defaultValue=true);
+
+ /**
+ * Same as above but for boolean parameters
+ * Don't use defaultValue = false with this function
+ * because you can't distinguish an unset parameter
+ * from a false parameter
+ **/
+ bool getBoolValue(const QString & name, bool globalValue=true, bool defaultValue=true);
+
+ /**
+ * Returns the value from the [globals] section
+ **/
+ QString getGlobalValue(const QString & name, bool defaultValue=true);
+
+ /**
+ * Sets the parameter name to the given value
+ * @param value the value of the parameter
+ * @param name the name of the parameter
+ * @param globalValue if true then the value is only set if it is different to the global value
+ * @param defaultValue if true then the value is only set if it is different to the default value
+ * if globalValue and defaultValue is true then the value is set when a global value
+ * exists and it it is different to it. If no global value exists then it is only
+ * set if different to the default value.
+ **/
+ void setValue(const QString & name,const QString & value, bool globalValue=true, bool defaultValue=true);
+
+ /**
+ * Same as above but for boolean parameters
+ **/
+ void setValue(const QString & name, bool value, bool globalValue=true, bool defaultValue=true);
+
+ /**
+ * Same as above but for integer parameters
+ **/
+ void setValue(const QString & name, int value, bool globalValue=true, bool defaultValue=true);
+
+ /**
+ * Returns the default value of the parameter
+ * @param name the name of the parameter
+ **/
+ QString getDefaultValue(const QString & name);
+
+ /**
+ * Same as above but for booleans
+ **/
+ bool getDefaultBoolValue(const QString & name);
+
+ /**
+ * Returns the default synonym for the given parameter
+ * if no synonym exists the original parameter in lower
+ * case is returned
+ **/
+ QString getSynonym(const QString & name) const;
+
+ /**
+ * Returns the comments of the share
+ * e.g. the text above the [...] section
+ **/
+ QStringList getComments();
+
+ /**
+ * Sets the comments for the share
+ * e.g. the text above the [...] section
+ **/
+ void setComments(const QStringList & commentList);
+
+ /**
+ * Sets the comments for the passed option
+ **/
+ void setComments(const QString & name, const QStringList & commentList);
+
+ /**
+ * Returns the comments of the passed option
+ **/
+ QStringList getComments(const QString & name);
+
+ /**
+ * Returns true if the passed option has comments
+ * otherwise returns false
+ **/
+ bool hasComments(const QString & name);
+
+ /**
+ * Returns the list of all options
+ * the order of the options is exactly the
+ * order of the insertion of the options
+ **/
+ QStringList getOptionList();
+
+ /**
+ * Returns true if this share is a printer
+ * that's if printable = true
+ **/
+ bool isPrinter();
+
+ /**
+ * Returns true if the share name is
+ * global, printers or homes
+ **/
+ bool isSpecialSection();
+
+protected:
+ /**
+ * The name of the share
+ * could be also printers, global and homes
+ **/
+ QString _name;
+ SambaConfigFile* _sambaFile;
+
+ /**
+ * This attribute stores all option comments.
+ * the comments which stood above the option name
+ * are stored in this QStringList
+ **/
+ QDict<QStringList> _commentList;
+
+ /**
+ * The comments for this share
+ **/
+ QStringList _comments;
+
+ /**
+ * An extra list which holds
+ * all stored options
+ * You might say, hey for what is this ?
+ * We have them already stored in the QDict.
+ * That's right, but there is a problem :
+ * QDict doesn't preserve the order of
+ * the inserted items, but when saving
+ * the options back to the smb.conf
+ * we want to have exactly the same order
+ * so this QStringList is only for saving
+ * the order of the options.
+ * On the other side we need a very fast lookup
+ * of the options, because we lookup very frequently
+ * so this is the best way to do both.
+ **/
+ QStringList _optionList;
+
+};
+
+typedef QPtrList<SambaShare> SambaShareList;
+
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/share.ui b/filesharing/advanced/kcm_sambaconf/share.ui
new file mode 100644
index 00000000..91d16843
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/share.ui
@@ -0,0 +1,3300 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>KcmShareDlg</class>
+<comment>
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>KcmShareDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>706</width>
+ <height>535</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Add/Edit Share</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>_tabs</cstring>
+ </property>
+ <property name="tabPosition">
+ <enum>Top</enum>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>baseTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Base Settings</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout52</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>pixmapFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>directoryPixLbl</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Pixmap</string>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>directoryGrp</cstring>
+ </property>
+ <property name="title">
+ <string>D&amp;irectory</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Path:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>pathUrlRq</cstring>
+ </property>
+ </widget>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>pathUrlRq</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>homeChk</cstring>
+ </property>
+ <property name="text">
+ <string>Share all home &amp;directories</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>identifierGrp</cstring>
+ </property>
+ <property name="title">
+ <string>Iden&amp;tifier</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>Lbl_shareName</cstring>
+ </property>
+ <property name="text">
+ <string>Na&amp;me:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>shareNameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Comme&amp;nt:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>commentEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>commentEdit</cstring>
+ </property>
+ </widget>
+ <widget class="KLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>shareNameEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox4</cstring>
+ </property>
+ <property name="title">
+ <string>Main P&amp;roperties</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>readOnlyBaseChk</cstring>
+ </property>
+ <property name="text">
+ <string>Read onl&amp;y</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>publicBaseChk</cstring>
+ </property>
+ <property name="text">
+ <string>Pub&amp;lic</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>browseableBaseChk</cstring>
+ </property>
+ <property name="text">
+ <string>Bro&amp;wseable</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>availableBaseChk</cstring>
+ </property>
+ <property name="text">
+ <string>A&amp;vailable</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer42</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>90</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>securityTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Security</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox19</cstring>
+ </property>
+ <property name="title">
+ <string>Gu&amp;ests</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>Spacer27</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>guestAccountLbl</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Guest account:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>guestAccountCombo</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This is a username which will be used for access to services which are specified as guest ok. Whatever privileges this user has will be available to any client connecting to the guest service. Typically this user will exist in the password file, but will not have a valid login. The user account \"ftp\" is often a good choice for this parameter. If a username is specified in a given service, the specified username overrides this one.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>guestOnlyChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Only allow guest connect&amp;ions</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this is checked , then no password is required to connect to the service. Privileges will be those of the guest account.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox18</cstring>
+ </property>
+ <property name="title">
+ <string>Hos&amp;ts</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>hostsDenyEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Hosts allo&amp;w:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>hostsAllowEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Hosts &amp;deny:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>hostsDenyEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>The opposite of hosts allow - hosts listed here are NOT permitted access to services unless the specific services have their own lists to override this one. Where the lists conflict, the allow list takes precedence.</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>hostsAllowEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox17</cstring>
+ </property>
+ <property name="title">
+ <string>Sy&amp;mbolic Links</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>followSymlinksChk</cstring>
+ </property>
+ <property name="text">
+ <string>Allow following of symbolic lin&amp;ks</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>wideLinksChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Allow following of symbolic links that &amp;point to areas outside the directory tree</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;qt&gt;Validate password against the following usernames if the client cannot supply a username:&lt;/qt&gt;</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>userNameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>userNameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>onlyUserChk</cstring>
+ </property>
+ <property name="text">
+ <string>Only allow connections with use&amp;rnames specified in this username list</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>If this is checked , then no password is required to connect to the service. Privileges will be those of the guest account.</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer31</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>hiddenFilesTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Hidden &amp;Files</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Hidden</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Veto</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Veto Oplock</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Date</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Permissions</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Owner</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Group</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>hiddenListView</cstring>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>selGrpBx</cstring>
+ </property>
+ <property name="title">
+ <string>Se&amp;lected Files</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>hiddenChk</cstring>
+ </property>
+ <property name="text">
+ <string>Hi&amp;de</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>vetoChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Veto</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>vetoOplockChk</cstring>
+ </property>
+ <property name="text">
+ <string>Veto oploc&amp;k</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox13_2</cstring>
+ </property>
+ <property name="title">
+ <string>&amp;Manual Configuration</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout18</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Ve&amp;to files:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>vetoEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Veto oplock f&amp;iles:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>vetoOplockEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>hiddenEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>vetoOplockEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>vetoEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Hidde&amp;n files:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>hiddenEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout52</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>hideUnwriteableFilesChk</cstring>
+ </property>
+ <property name="text">
+ <string>Hide un&amp;writable files</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>hideSpecialFilesChk</cstring>
+ </property>
+ <property name="text">
+ <string>Hide s&amp;pecial files</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>hideDotFilesChk</cstring>
+ </property>
+ <property name="text">
+ <string>Hide files startin&amp;g with a dot </string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>hideUnreadableChk</cstring>
+ </property>
+ <property name="text">
+ <string>Hide un&amp;readable files</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>advancedTab</cstring>
+ </property>
+ <attribute name="title">
+ <string>&amp;Advanced</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>advancedFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame26</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout92</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>PixmapLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_4</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Here you can change advanced options of the SAMBA server.
+Only change something if you know what you are doing.</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>advancedDumpTabPage</cstring>
+ </property>
+ <attribute name="title">
+ <string>Advanced Dump</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>advancedDumpTab</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Security</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QGroupBox" row="3" column="0">
+ <property name="name">
+ <cstring>GroupBox11_2</cstring>
+ </property>
+ <property name="title">
+ <string>Force Modes</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_3_2_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Forc&amp;e directory security mode:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>forceDirectorySecurityModeEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_3_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Fo&amp;rce security mode:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>forceSecurityModeEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_3_2_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Force director&amp;y mode:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>forceDirectoryModeEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_3_3</cstring>
+ </property>
+ <property name="text">
+ <string>Force create mo&amp;de:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>forceCreateModeEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="2" column="2">
+ <property name="name">
+ <cstring>forceDirectoryModeBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="3" column="2">
+ <property name="name">
+ <cstring>forceDirectorySecurityModeBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="0" column="1">
+ <property name="name">
+ <cstring>forceCreateModeEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="1" column="1">
+ <property name="name">
+ <cstring>forceSecurityModeEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="2" column="1">
+ <property name="name">
+ <cstring>forceDirectoryModeEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="3" column="1">
+ <property name="name">
+ <cstring>forceDirectorySecurityModeEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="1" column="2">
+ <property name="name">
+ <cstring>forceSecurityModeBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="0" column="2">
+ <property name="name">
+ <cstring>forceCreateModeBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="4" column="0">
+ <property name="name">
+ <cstring>Spacer62</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="3" column="1">
+ <property name="name">
+ <cstring>GroupBox10_2</cstring>
+ </property>
+ <property name="title">
+ <string>Masks</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_4_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Directory security mask:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>directorySecurityMaskEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_4_3</cstring>
+ </property>
+ <property name="text">
+ <string>Security &amp;mask:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>securityMaskEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_4_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Direc&amp;tory mask:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>directoryMaskEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="1" column="2">
+ <property name="name">
+ <cstring>securityMaskBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="2" column="2">
+ <property name="name">
+ <cstring>directoryMaskBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="3" column="2">
+ <property name="name">
+ <cstring>directorySecurityMaskBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="1" column="1">
+ <property name="name">
+ <cstring>securityMaskEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="2" column="1">
+ <property name="name">
+ <cstring>directoryMaskEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="3" column="1">
+ <property name="name">
+ <cstring>directorySecurityMaskEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Create mas&amp;k:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>createMaskEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="0" column="1">
+ <property name="name">
+ <cstring>createMaskEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="0" column="2">
+ <property name="name">
+ <cstring>createMaskBtn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>groupBox56</cstring>
+ </property>
+ <property name="title">
+ <string>ACL</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>profileAclsChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Profile acls</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>inheritAclsChk</cstring>
+ </property>
+ <property name="text">
+ <string>Inherit ac&amp;ls</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>ntAclSupportChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;NT ACL support</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Force unkno&amp;wn acl user:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>forceUnknownAclUserEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service.</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>mapAclInheritChk</cstring>
+ </property>
+ <property name="text">
+ <string>Map acl &amp;inherit</string>
+ </property>
+ </widget>
+ <widget class="KRestrictedLine" row="4" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>forceUnknownAclUserEdit</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>40</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="validChars">
+ <string>01234567</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox58</cstring>
+ </property>
+ <property name="title">
+ <string>General</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>inheritPermissionsChk</cstring>
+ </property>
+ <property name="text">
+ <string>Inherit permissions from parent directory</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>deleteReadonlyChk</cstring>
+ </property>
+ <property name="text">
+ <string>Allow deletion of readonly files</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>groupBox57</cstring>
+ </property>
+ <property name="title">
+ <string>DOS Attribute Mapping</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>mapArchiveChk</cstring>
+ </property>
+ <property name="text">
+ <string>Map DOS archi&amp;ve to UNIX owner execute</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>mapHiddenChk</cstring>
+ </property>
+ <property name="text">
+ <string>Map DOS hidden to UNI&amp;X world execute</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>mapSystemChk</cstring>
+ </property>
+ <property name="text">
+ <string>Map DOS system to UNIX &amp;group execute</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>storeDosAttributesChk</cstring>
+ </property>
+ <property name="text">
+ <string>Store DOS attributes onto extended attribute</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="2" column="1">
+ <property name="name">
+ <cstring>groupBox76</cstring>
+ </property>
+ <property name="title">
+ <string>OS/2</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>eaSupportChk</cstring>
+ </property>
+ <property name="text">
+ <string>OS/2 style extended attributes support</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Tuning</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>syncAlwaysChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Sync al&amp;ways</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>strictSyncChk</cstring>
+ </property>
+ <property name="text">
+ <string>Strict s&amp;ync</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>strictAllocateChk</cstring>
+ </property>
+ <property name="text">
+ <string>St&amp;rict allocate</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>useSendfileChk</cstring>
+ </property>
+ <property name="text">
+ <string>Use sen&amp;dfile</string>
+ </property>
+ </widget>
+ <spacer row="8" column="1">
+ <property name="name">
+ <cstring>Spacer53</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>120</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="6" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Bloc&amp;k size:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>blockSizeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="7" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Client-side cachin&amp;g policy:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>cscPolicyCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="6" column="3">
+ <property name="name">
+ <cstring>TextLabel1_7_2</cstring>
+ </property>
+ <property name="text">
+ <string>bytes</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel5_3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Write cache si&amp;ze:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>writeCacheSizeSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="7" column="2" rowspan="1" colspan="2">
+ <item>
+ <property name="text">
+ <string>manual</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>documents</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>programs</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>disable</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cscPolicyCombo</cstring>
+ </property>
+ </widget>
+ <spacer row="4" column="4">
+ <property name="name">
+ <cstring>Spacer55</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>143</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="5" column="3">
+ <property name="name">
+ <cstring>TextLabel1_7</cstring>
+ </property>
+ <property name="text">
+ <string>bytes</string>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="4" column="2">
+ <property name="name">
+ <cstring>maxConnectionsSpin</cstring>
+ </property>
+ <property name="buttonSymbols">
+ <enum>UpDownArrows</enum>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="6" column="2">
+ <property name="name">
+ <cstring>blockSizeSpin</cstring>
+ </property>
+ <property name="buttonSymbols">
+ <enum>UpDownArrows</enum>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>TextLabel5_3_4</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Maximum number of simultaneous connections:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>maxConnectionsSpin</cstring>
+ </property>
+ </widget>
+ <widget class="KIntSpinBox" row="5" column="2">
+ <property name="name">
+ <cstring>writeCacheSizeSpin</cstring>
+ </property>
+ <property name="buttonSymbols">
+ <enum>UpDownArrows</enum>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Filenames</string>
+ </attribute>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout54</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>330</x>
+ <y>1</y>
+ <width>323</width>
+ <height>270</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox9</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Other Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>hideTrailingDotChk</cstring>
+ </property>
+ <property name="text">
+ <string>Hide traili&amp;ng dot</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox15</cstring>
+ </property>
+ <property name="title">
+ <string>DOS</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>dosFilemodeChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;DOS file mode</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>dosFiletimesChk</cstring>
+ </property>
+ <property name="text">
+ <string>DOS f&amp;ile times</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>dosFiletimeResolutionChk</cstring>
+ </property>
+ <property name="text">
+ <string>DOS file time resolution</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer61</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>152</x>
+ <y>277</y>
+ <width>20</width>
+ <height>119</height>
+ </rect>
+ </property>
+ </spacer>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GroupBox5</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>1</x>
+ <y>1</y>
+ <width>323</width>
+ <height>270</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Name Mangling</string>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel3_2_2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>179</y>
+ <width>168</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Mangling cha&amp;r:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>manglingCharEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout14</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>185</x>
+ <y>179</y>
+ <width>127</width>
+ <height>24</height>
+ </rect>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>manglingCharEdit</cstring>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>40</width>
+ <height>32767</height>
+ </size>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer40_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_5</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>209</y>
+ <width>168</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Mangled ma&amp;p:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>mangledMapEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>mangledMapEdit</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>185</x>
+ <y>209</y>
+ <width>127</width>
+ <height>22</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>mangledNamesChk</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>21</y>
+ <width>168</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Enable na&amp;me mangling</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>mangleCaseChk</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>47</y>
+ <width>168</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Man&amp;gle case</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>11</x>
+ <y>237</y>
+ <width>168</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Mangling method:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>manglingMethodCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>hash</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>hash2</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>manglingMethodCombo</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>185</x>
+ <y>237</y>
+ <width>127</width>
+ <height>22</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>preserveCaseChk</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>70</y>
+ <width>168</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Preser&amp;ve case</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>shortPreserveCaseChk</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>90</y>
+ <width>168</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Short pr&amp;eserve case</string>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_3</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>150</y>
+ <width>168</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Defau&amp;lt case:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>defaultCaseCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Lower</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Upper</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>defaultCaseCombo</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>185</x>
+ <y>151</y>
+ <width>127</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Automatic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Yes</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>No</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>caseSensitiveCombo</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>185</x>
+ <y>121</y>
+ <width>127</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_3_3</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>120</y>
+ <width>168</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Case sensi&amp;tive:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>caseSensitiveCombo</cstring>
+ </property>
+ </widget>
+ </widget>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Locking</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>Spacer51</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox47</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="title">
+ <string>Locki&amp;ng</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="4" column="0">
+ <property name="name">
+ <cstring>oplocksChk</cstring>
+ </property>
+ <property name="text">
+ <string>Issue oppo&amp;rtunistic locks (oplocks) </string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" row="5" column="0">
+ <property name="name">
+ <cstring>groupBox59</cstring>
+ </property>
+ <property name="title">
+ <string>O&amp;plocks</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KIntSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>oplockContentionLimitSpin</cstring>
+ </property>
+ <property name="buttonSymbols">
+ <enum>UpDownArrows</enum>
+ </property>
+ <property name="maxValue">
+ <number>2147483647</number>
+ </property>
+ </widget>
+ <spacer row="1" column="2">
+ <property name="name">
+ <cstring>spacer23</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>299</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5_3_3_2_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ </font>
+ </property>
+ <property name="text">
+ <string>Oplock contention li&amp;mit:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>oplockContentionLimitSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>level2OplocksChk</cstring>
+ </property>
+ <property name="text">
+ <string>Le&amp;vel2 oplocks</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox" row="6" column="0">
+ <property name="name">
+ <cstring>fakeOplocksChk</cstring>
+ </property>
+ <property name="text">
+ <string>Fak&amp;e oplocks</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0">
+ <property name="name">
+ <cstring>shareModesChk</cstring>
+ </property>
+ <property name="text">
+ <string>Share mo&amp;des</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>posixLockingChk</cstring>
+ </property>
+ <property name="text">
+ <string>Posi&amp;x locking</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>S&amp;trict locking:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>strictLockingCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Automatic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Yes</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>No</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>strictLockingCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>blockingLocksChk</cstring>
+ </property>
+ <property name="text">
+ <string>Blockin&amp;g locks</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>lockingChk</cstring>
+ </property>
+ <property name="text">
+ <string>Enable lock&amp;ing</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>VFS</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>Spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>260</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>vfsObjectsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel1_6</cstring>
+ </property>
+ <property name="text">
+ <string>Vfs ob&amp;jects:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>vfsObjectsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel1_6_2</cstring>
+ </property>
+ <property name="text">
+ <string>Vfs o&amp;ptions:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>vfsOptionsEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>vfsOptionsEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Exec</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="4" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>preexecCloseChk</cstring>
+ </property>
+ <property name="text">
+ <string>preexec c&amp;lose</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>rootPreexecCloseChk</cstring>
+ </property>
+ <property name="text">
+ <string>root pree&amp;xec close</string>
+ </property>
+ </widget>
+ <spacer row="6" column="1">
+ <property name="name">
+ <cstring>Spacer16</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>284</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>Pos&amp;texec:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>rootPreexecEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2</cstring>
+ </property>
+ <property name="text">
+ <string>Root pr&amp;eexec:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>postexecEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>P&amp;reexec:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>preexecEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>preexecEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel5_2_4</cstring>
+ </property>
+ <property name="text">
+ <string>Root &amp;postexec:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>rootPostexecEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>postexecEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>rootPreexecEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>rootPostexecEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Misc</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <spacer row="9" column="1">
+ <property name="name">
+ <cstring>Spacer15</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Fst&amp;ype:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>fstypeEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>fstypeEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>magicScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>Ma&amp;gic script:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>magicScriptEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Volume:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>volumeEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="3" column="1">
+ <property name="name">
+ <cstring>magicOutputEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Mag&amp;ic output:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>magicOutputEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="7" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>fakeDirectoryCreateTimesChk</cstring>
+ </property>
+ <property name="text">
+ <string>Fa&amp;ke directory create times</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="8" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>msdfsRootChk</cstring>
+ </property>
+ <property name="text">
+ <string>Ms&amp;dfs root</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="6" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>setDirectoryChk</cstring>
+ </property>
+ <property name="text">
+ <string>Setdir command allo&amp;wed</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="4" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Do &amp;not descend:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>dontDescendEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="4" column="1">
+ <property name="name">
+ <cstring>dontDescendEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="5" column="0">
+ <property name="name">
+ <cstring>TextLabel6_2_3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Msdfs pro&amp;xy:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>msdfsProxyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="5" column="1">
+ <property name="name">
+ <cstring>msdfsProxyEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="1">
+ <property name="name">
+ <cstring>volumeEdit</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>shareNameEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>checkValues()</slot>
+ </connection>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>homeChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>homeChkToggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>strictSyncChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>syncAlwaysChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>forceCreateModeEdit</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>forceCreateModeBtn</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>forceDirectoryModeEdit</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>forceDirectoryModeBtn</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>createMaskEdit</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>createMaskBtn</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>directoryMaskEdit</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>inheritPermissionsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>directoryMaskBtn</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>followSymlinksChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>wideLinksChk</receiver>
+ <slot>setChecked(bool)</slot>
+ </connection>
+ <connection>
+ <sender>followSymlinksChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>wideLinksChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>publicBaseChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>publicBaseChk_toggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>pathUrlRq</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>pathUrlRq_textChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>lockingChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>lockingChk_toggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>vetoOplockChk</sender>
+ <signal>stateChanged(int)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>lockingChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>groupBox47</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>oplockContentionLimitSpin</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>oplockContentionLimitSpin_valueChanged(int)</slot>
+ </connection>
+ <connection>
+ <sender>fakeOplocksChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>fakeOplocksChk_toggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>oplocksChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>groupBox59</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>forceCreateModeBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>forceSecurityModeBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>forceDirectoryModeBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>forceDirectorySecurityModeBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>createMaskBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>securityMaskBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>directoryMaskBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>directorySecurityMaskBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>accessModifierBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>storeDosAttributesChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>storeDosAttributesChk_toggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>buttonHelp</sender>
+ <signal>clicked()</signal>
+ <receiver>KcmShareDlg</receiver>
+ <slot>buttonHelp_clicked()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>volumeEdit</tabstop>
+ <tabstop>fstypeEdit</tabstop>
+ <tabstop>magicScriptEdit</tabstop>
+ <tabstop>magicOutputEdit</tabstop>
+ <tabstop>dontDescendEdit</tabstop>
+ <tabstop>setDirectoryChk</tabstop>
+ <tabstop>fakeDirectoryCreateTimesChk</tabstop>
+ <tabstop>msdfsRootChk</tabstop>
+ <tabstop>preexecEdit</tabstop>
+ <tabstop>rootPreexecEdit</tabstop>
+ <tabstop>postexecEdit</tabstop>
+ <tabstop>rootPostexecEdit</tabstop>
+ <tabstop>preexecCloseChk</tabstop>
+ <tabstop>rootPreexecCloseChk</tabstop>
+ <tabstop>lockingChk</tabstop>
+ <tabstop>blockingLocksChk</tabstop>
+ <tabstop>posixLockingChk</tabstop>
+ <tabstop>shareModesChk</tabstop>
+ <tabstop>oplocksChk</tabstop>
+ <tabstop>level2OplocksChk</tabstop>
+ <tabstop>oplockContentionLimitSpin</tabstop>
+ <tabstop>fakeOplocksChk</tabstop>
+ <tabstop>mangledNamesChk</tabstop>
+ <tabstop>mangleCaseChk</tabstop>
+ <tabstop>preserveCaseChk</tabstop>
+ <tabstop>shortPreserveCaseChk</tabstop>
+ <tabstop>defaultCaseCombo</tabstop>
+ <tabstop>manglingCharEdit</tabstop>
+ <tabstop>mangledMapEdit</tabstop>
+ <tabstop>manglingMethodCombo</tabstop>
+ <tabstop>hideTrailingDotChk</tabstop>
+ <tabstop>dosFilemodeChk</tabstop>
+ <tabstop>dosFiletimesChk</tabstop>
+ <tabstop>dosFiletimeResolutionChk</tabstop>
+ <tabstop>strictSyncChk</tabstop>
+ <tabstop>syncAlwaysChk</tabstop>
+ <tabstop>strictAllocateChk</tabstop>
+ <tabstop>useSendfileChk</tabstop>
+ <tabstop>maxConnectionsSpin</tabstop>
+ <tabstop>writeCacheSizeSpin</tabstop>
+ <tabstop>blockSizeSpin</tabstop>
+ <tabstop>cscPolicyCombo</tabstop>
+ <tabstop>inheritPermissionsChk</tabstop>
+ <tabstop>deleteReadonlyChk</tabstop>
+ <tabstop>mapArchiveChk</tabstop>
+ <tabstop>mapHiddenChk</tabstop>
+ <tabstop>mapSystemChk</tabstop>
+ <tabstop>forceCreateModeEdit</tabstop>
+ <tabstop>forceSecurityModeEdit</tabstop>
+ <tabstop>forceDirectoryModeEdit</tabstop>
+ <tabstop>forceDirectorySecurityModeEdit</tabstop>
+ <tabstop>ntAclSupportChk</tabstop>
+ <tabstop>inheritAclsChk</tabstop>
+ <tabstop>profileAclsChk</tabstop>
+ <tabstop>mapAclInheritChk</tabstop>
+ <tabstop>forceUnknownAclUserEdit</tabstop>
+ <tabstop>createMaskEdit</tabstop>
+ <tabstop>securityMaskEdit</tabstop>
+ <tabstop>directoryMaskEdit</tabstop>
+ <tabstop>directorySecurityMaskEdit</tabstop>
+ <tabstop>advancedDumpTab</tabstop>
+ <tabstop>hiddenListView</tabstop>
+ <tabstop>hiddenChk</tabstop>
+ <tabstop>vetoChk</tabstop>
+ <tabstop>vetoOplockChk</tabstop>
+ <tabstop>hiddenEdit</tabstop>
+ <tabstop>vetoEdit</tabstop>
+ <tabstop>vetoOplockEdit</tabstop>
+ <tabstop>hideUnreadableChk</tabstop>
+ <tabstop>hideUnwriteableFilesChk</tabstop>
+ <tabstop>hideDotFilesChk</tabstop>
+ <tabstop>hideSpecialFilesChk</tabstop>
+ <tabstop>pathUrlRq</tabstop>
+ <tabstop>homeChk</tabstop>
+ <tabstop>shareNameEdit</tabstop>
+ <tabstop>commentEdit</tabstop>
+ <tabstop>readOnlyBaseChk</tabstop>
+ <tabstop>publicBaseChk</tabstop>
+ <tabstop>browseableBaseChk</tabstop>
+ <tabstop>availableBaseChk</tabstop>
+ <tabstop>guestAccountCombo</tabstop>
+ <tabstop>guestOnlyChk</tabstop>
+ <tabstop>hostsAllowEdit</tabstop>
+ <tabstop>hostsDenyEdit</tabstop>
+ <tabstop>followSymlinksChk</tabstop>
+ <tabstop>wideLinksChk</tabstop>
+ <tabstop>userNameEdit</tabstop>
+ <tabstop>onlyUserChk</tabstop>
+ <tabstop>_tabs</tabstop>
+ <tabstop>vfsObjectsEdit</tabstop>
+ <tabstop>vfsOptionsEdit</tabstop>
+ <tabstop>buttonHelp</tabstop>
+ <tabstop>buttonOk</tabstop>
+ <tabstop>buttonCancel</tabstop>
+</tabstops>
+<includes>
+ <include location="local" impldecl="in implementation">kiconloader.h</include>
+ <include location="global" impldecl="in implementation">qptrlist.h</include>
+ <include location="global" impldecl="in implementation">kmessagebox.h</include>
+ <include location="global" impldecl="in implementation">kprocess.h</include>
+ <include location="local" impldecl="in implementation">share.ui.h</include>
+</includes>
+<slots>
+ <slot access="private">checkValues()</slot>
+ <slot access="private" specifier="non virtual">init()</slot>
+ <slot>trytoAccept()</slot>
+ <slot>homeChkToggled( bool )</slot>
+ <slot>addAllowedUserBtnClicked()</slot>
+ <slot>removeAllowedUserBtnClicked()</slot>
+ <slot>guestOnlyChk_toggled( bool b )</slot>
+ <slot>userOnlyChk_toggled( bool b )</slot>
+ <slot access="protected">accessModifierBtnClicked()</slot>
+ <slot access="protected">changedSlot()</slot>
+ <slot>publicBaseChk_toggled( bool b )</slot>
+ <slot>pathUrlRq_textChanged( const QString &amp; )</slot>
+ <slot>oplocksChk_toggled( bool b )</slot>
+ <slot>lockingChk_toggled( bool b )</slot>
+ <slot>fakeOplocksChk_toggled( bool b )</slot>
+ <slot>oplockContentionLimitSpin_valueChanged( int i )</slot>
+ <slot>storeDosAttributesChk_toggled( bool b )</slot>
+ <slot>buttonHelp_clicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>krestrictedline.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+</includehints>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/share.ui.h b/filesharing/advanced/kcm_sambaconf/share.ui.h
new file mode 100644
index 00000000..414d055f
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/share.ui.h
@@ -0,0 +1,258 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename slots use Qt Designer which will
+** update this file, preserving your code. Create an init() slot in place of
+** a constructor, and a destroy() slot in place of a destructor.
+*****************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+void KcmShareDlg::checkValues()
+{
+/*
+ bool state = true;
+ // Check if the ok-button should be enabled
+ if (directory->isChecked()){
+ if (homes->isChecked()){
+ state = true;
+ }else{
+ if (shareName->text() == "")
+ state = false;
+ if (path->url() == "")
+ state = false;
+ }
+ }else{
+ if (printers->isChecked()){
+ state = true;
+ }else{
+ if (shareName->text() == ""){
+ state = false;
+ }
+ }
+ }
+ buttonOk->setEnabled(state);
+*/
+}
+
+
+
+
+
+
+void KcmShareDlg::init()
+{
+ directoryPixLbl->setPixmap(DesktopIcon("folder"));
+ PixmapLabel1->setPixmap(SmallIcon("messagebox_warning"));
+/*
+ QListBoxItem* item = 0;
+ QPtrList<QListBoxItem>* selectedList = new QPtrList<QListBoxItem>;
+ selectedList->setAutoDelete(false);
+ for (int i=0; i < possible->count(); i++){
+ item = possible->item(i);
+ if (item->isSelected()){
+ selectedList->append(item);
+ }
+ }
+ selected->clearSelection();
+ for (QPtrListIterator<QListBoxItem> it(*selectedList); it.current(); ++it){
+ possible->takeItem(it.current());
+ selected->insertItem(it.current());
+ }
+ delete selectedList;
+*/
+}
+
+
+
+
+void KcmShareDlg::trytoAccept()
+{
+/*
+ bool error = false;
+ if (directory->isChecked()){
+ if (!homes->isChecked()){
+ if (shareName->text() == "[homes]"){
+ KMessageBox::sorry(this, i18n("Sorry, but you can't create a share named \"[homes]\".\nIf you want to share your home-directorys, please click on \"Share homes\" on the \"Base settings\"-tab."));
+ error = true;
+ }
+ }
+ }else{
+ if (!printers->isChecked()){
+ if (shareName->text() == "[printers]"){
+ KMessageBox::sorry(this, i18n("Sorry, but you can't create a share named \"[printers]\".\nIf you want to share all your printers, please click on \"Share all printers\" on the \"Base settings\"-tab."));
+ error = true;
+ }
+ }
+ }
+ if (!error){
+ updateShareData();
+ accept();
+ }
+*/
+}
+
+
+
+
+
+void KcmShareDlg::homeChkToggled( bool )
+{
+
+}
+
+void KcmShareDlg::addAllowedUserBtnClicked()
+{
+
+}
+
+void KcmShareDlg::removeAllowedUserBtnClicked()
+{
+
+}
+
+void KcmShareDlg::guestOnlyChk_toggled( bool b)
+{
+ if (b)
+ {
+ onlyUserChk->setChecked(false);
+ publicBaseChk->setChecked(true);
+ }
+
+ onlyUserChk->setDisabled(b);
+ publicBaseChk->setDisabled(b);
+}
+
+
+void KcmShareDlg::userOnlyChk_toggled( bool b)
+{
+ if (b)
+ {
+ guestOnlyChk->setChecked(false);
+ publicBaseChk->setChecked(false);
+ }
+
+ guestOnlyChk->setDisabled(b);
+ publicBaseChk->setDisabled(b);
+}
+
+void KcmShareDlg::accessModifierBtnClicked()
+{
+
+
+}
+
+
+void KcmShareDlg::changedSlot()
+{
+
+}
+
+
+void KcmShareDlg::publicBaseChk_toggled( bool b)
+{
+ guestOnlyChk->setEnabled(b);
+ if (!b) {
+ guestOnlyChk->setChecked(false);
+ }
+ guestAccountCombo->setEnabled(b);
+ guestAccountLbl->setEnabled(b);
+
+}
+
+
+void KcmShareDlg::pathUrlRq_textChanged( const QString & )
+{
+
+}
+
+
+void KcmShareDlg::oplocksChk_toggled( bool b)
+{
+ if (b)
+ fakeOplocksChk->setChecked(false);
+}
+
+
+void KcmShareDlg::lockingChk_toggled( bool b)
+{
+ // Its Dangerous to disable locking !
+/*
+ if (!b) {
+ enableLockingWarnPix->setPixmap(SmallIcon("messagebox_warning"));
+ enableLockingWarnPix->show();
+ } else {
+ enableLockingWarnPix->hide();
+ }
+*/
+
+}
+
+
+void KcmShareDlg::fakeOplocksChk_toggled( bool b)
+{
+/*
+ if (b) {
+ fakeOplocksWarnPix->setPixmap(SmallIcon("messagebox_info"));
+ fakeOplocksWarnPix->setText(i18n("Better use the real oplocks support than this parameter"));
+ fakeOplocksWarnPix->showMaximized();
+ fakeOplocksWarnPix->show();
+ } else {
+ fakeOplocksWarnPix->hide();
+ }
+*/
+}
+
+
+void KcmShareDlg::oplockContentionLimitSpin_valueChanged( int i)
+{
+/*
+ oplockContentionLimitWarnPix->setMaximumWidth(32767);
+ oplockContentionLimitWarnPix->setPixmap(SmallIcon("messagebox_critical"));
+*/
+ //oplockContentionLimitWarnPix->show();
+
+}
+
+
+void KcmShareDlg::storeDosAttributesChk_toggled( bool b)
+{
+ mapArchiveChk->setDisabled(b);
+ mapSystemChk->setDisabled(b);
+ mapHiddenChk->setDisabled(b);
+
+ if (b) {
+ mapArchiveChk->setChecked(false);
+ mapSystemChk->setChecked(false);
+ mapHiddenChk->setChecked(false);
+ }
+}
+
+
+void KcmShareDlg::buttonHelp_clicked()
+{
+ KProcess* p = new KProcess();
+ *p << "konqueror";
+ *p << "man:smb.conf";
+ p->start();
+}
+
+
diff --git a/filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp b/filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp
new file mode 100644
index 00000000..aca5ea39
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/sharedlgimpl.cpp
@@ -0,0 +1,478 @@
+/***************************************************************************
+ sharedlgimpl.cpp - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+
+/**
+ * @author Jan Schfer
+ **/
+
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+#include <qlayout.h>
+#include <qtabwidget.h>
+#include <qregexp.h>
+#include <qstringlist.h>
+#include <qgrid.h>
+#include <qcursor.h>
+#include <qtable.h>
+#include <qlistbox.h>
+#include <qtoolbutton.h>
+#include <qpixmap.h>
+#include <qframe.h>
+#include <qwidget.h>
+#include <qtabwidget.h>
+
+
+#include <klineedit.h>
+#include <kurlrequester.h>
+#include <knuminput.h>
+#include <kdebug.h>
+#include <kcombobox.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kfiledetailview.h>
+#include <kdirlister.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <kaction.h>
+#include <krestrictedline.h>
+#include <kjanuswidget.h>
+
+#include "smbpasswdfile.h"
+#include "sambafile.h"
+#include "common.h"
+#include "passwd.h"
+#include "usertabimpl.h"
+#include "filemodedlgimpl.h"
+#include "hiddenfileview.h"
+#include "dictmanager.h"
+
+#include "sharedlgimpl.h"
+
+
+
+
+ShareDlgImpl::ShareDlgImpl(QWidget* parent, SambaShare* share)
+ : KcmShareDlg(parent,"sharedlgimpl")
+{
+ if (!share) {
+ kdWarning() << "ShareDlgImpl::Constructor : share parameter is null!" << endl;
+ return;
+ }
+
+ _dictMngr = new DictManager(share);
+ _share = share;
+
+ initDialog();
+ initAdvancedTab();
+}
+
+void ShareDlgImpl::initDialog()
+{
+ if (!_share)
+ return;
+
+ // Base settings
+ _fileView = 0L;
+
+ pathUrlRq->setMode(2+8+16);
+
+ homeChk->setChecked(_share->getName().lower() == "homes");
+ shareNameEdit->setText( _share->getName() );
+
+ _dictMngr->add("path",pathUrlRq);
+
+ _dictMngr->add("comment",commentEdit);
+ _dictMngr->add("available",availableBaseChk);
+ _dictMngr->add("browseable",browseableBaseChk);
+ _dictMngr->add("public",publicBaseChk);
+
+ _dictMngr->add("read only",readOnlyBaseChk);
+
+ // User settings
+
+ _userTab = new UserTabImpl(this,_share);
+ _tabs->insertTab(_userTab,i18n("&Users"),1);
+ _userTab->load();
+ connect(_userTab, SIGNAL(changed()), this, SLOT(changedSlot()));
+
+ // Filename settings
+
+ _dictMngr->add("case sensitive",caseSensitiveCombo,
+ new QStringList(QStringList() << "auto" << "yes" << "no"));
+ _dictMngr->add("preserve case",preserveCaseChk);
+ _dictMngr->add("short preserve case",shortPreserveCaseChk);
+ _dictMngr->add("mangled names",mangledNamesChk);
+ _dictMngr->add("mangle case",mangleCaseChk);
+ _dictMngr->add("mangling char",manglingCharEdit);
+ _dictMngr->add("mangled map",mangledMapEdit);
+
+
+ _dictMngr->add("mangling method",manglingMethodCombo,
+ new QStringList(QStringList() << "hash" << "hash2"));
+
+ _dictMngr->add("default case",defaultCaseCombo,
+ new QStringList(QStringList() << "Lower" << "Upper"));
+
+ _dictMngr->add("hide dot files",hideDotFilesChk);
+ _dictMngr->add("strip dot",hideTrailingDotChk);
+ _dictMngr->add("hide unreadable",hideUnreadableChk);
+ _dictMngr->add("hide unwriteable files",hideUnwriteableFilesChk);
+ _dictMngr->add("hide special files",hideSpecialFilesChk);
+ _dictMngr->add("dos filemode",dosFilemodeChk);
+ _dictMngr->add("dos filetimes",dosFiletimesChk);
+ _dictMngr->add("dos filetime resolution",dosFiletimeResolutionChk);
+
+ // Security tab
+
+ _dictMngr->add("guest only",guestOnlyChk);
+ _dictMngr->add("hosts allow",hostsAllowEdit);
+
+ _dictMngr->add("only user",onlyUserChk);
+ _dictMngr->add("username",userNameEdit);
+
+
+ guestAccountCombo->insertStringList( getUnixUsers() );
+ setComboToString(guestAccountCombo,_share->getValue("guest account"));
+
+ _dictMngr->add("hosts deny",hostsDenyEdit);
+ _dictMngr->add("force directory security mode",forceDirectorySecurityModeEdit);
+ _dictMngr->add("force directory mode",forceDirectoryModeEdit);
+ _dictMngr->add("force security mode",forceSecurityModeEdit);
+
+ _dictMngr->add("force create mode",forceCreateModeEdit);
+ _dictMngr->add("directory security mask",directorySecurityMaskEdit);
+ _dictMngr->add("directory mask",directoryMaskEdit);
+ _dictMngr->add("security mask",securityMaskEdit);
+ _dictMngr->add("create mask",createMaskEdit);
+ _dictMngr->add("inherit permissions",inheritPermissionsChk);
+ _dictMngr->add("inherit acls",inheritAclsChk);
+ _dictMngr->add("nt acl support",ntAclSupportChk);
+ _dictMngr->add("delete readonly",deleteReadonlyChk);
+
+ _dictMngr->add("wide links",wideLinksChk);
+ _dictMngr->add("follow symlinks",followSymlinksChk);
+
+ _dictMngr->add("map hidden",mapHiddenChk);
+ _dictMngr->add("map archive",mapArchiveChk);
+ _dictMngr->add("map system",mapSystemChk);
+ _dictMngr->add("store dos attributes",eaSupportChk);
+
+ _dictMngr->add("ea support",eaSupportChk);
+
+
+ _dictMngr->add("force unknown acl user",forceUnknownAclUserEdit);
+ _dictMngr->add("profile acls",profileAclsChk);
+ _dictMngr->add("map acl inherit",mapAclInheritChk);
+
+
+ // Advanced
+
+ _dictMngr->add("blocking locks",blockingLocksChk);
+ _dictMngr->add("fake oplocks",fakeOplocksChk);
+ _dictMngr->add("locking",lockingChk);
+ _dictMngr->add("level2 oplocks",level2OplocksChk);
+ _dictMngr->add("posix locking",posixLockingChk);
+ _dictMngr->add("strict locking",strictLockingCombo,
+ new QStringList(QStringList() << "Auto" << "yes" << "no"));
+ _dictMngr->add("share modes",shareModesChk);
+ _dictMngr->add("oplocks",oplocksChk);
+
+
+ _dictMngr->add("oplock contention limit",oplockContentionLimitSpin);
+ _dictMngr->add("strict sync",strictSyncChk);
+
+ // Tuning
+
+ _dictMngr->add("strict allocate",strictAllocateChk);
+
+ _dictMngr->add("max connections",maxConnectionsSpin);
+ _dictMngr->add("write cache size",writeCacheSizeSpin);
+ _dictMngr->add("block size",blockSizeSpin);
+
+
+ _dictMngr->add("sync always",syncAlwaysChk);
+ _dictMngr->add("use sendfile",useSendfileChk);
+
+ _dictMngr->add("csc policy",cscPolicyCombo,
+ new QStringList(QStringList() << "manual" << "documents" << "programs" << "disable"));
+
+
+
+ // VFS
+
+ _dictMngr->add("vfs objects",vfsObjectsEdit);
+ _dictMngr->add("vfs options",vfsOptionsEdit);
+
+ // Misc
+
+ _dictMngr->add("preexec",preexecEdit);
+ _dictMngr->add("postexec",postexecEdit);
+ _dictMngr->add("root preexec",rootPreexecEdit);
+ _dictMngr->add("root postexec",rootPostexecEdit);
+
+ _dictMngr->add("preexec close",preexecCloseChk);
+ _dictMngr->add("root preexec close",rootPreexecCloseChk);
+
+ _dictMngr->add("volume",volumeEdit);
+ _dictMngr->add("fstype",fstypeEdit);
+ _dictMngr->add("magic script",magicScriptEdit);
+ _dictMngr->add("magic output",magicOutputEdit);
+ _dictMngr->add("dont descend",dontDescendEdit);
+ _dictMngr->add("set directory",setDirectoryChk);
+ _dictMngr->add("fake directory create times",fakeDirectoryCreateTimesChk);
+
+ _dictMngr->add("msdfs root",msdfsRootChk);
+ _dictMngr->add("msdfs proxy",msdfsProxyEdit);
+
+ _dictMngr->load( _share );
+
+
+ connect( _tabs, SIGNAL(currentChanged(QWidget*)), this, SLOT(tabChangedSlot(QWidget*)));
+ connect(_dictMngr, SIGNAL(changed()), this, SLOT(changedSlot()));
+}
+
+ShareDlgImpl::~ShareDlgImpl()
+{
+ delete _fileView;
+}
+
+void ShareDlgImpl::initAdvancedTab()
+{
+
+ QVBoxLayout *l = new QVBoxLayout(advancedFrame);
+ l->setAutoAdd(true);
+ l->setMargin(0);
+ _janus = new KJanusWidget(advancedFrame,0,KJanusWidget::TreeList);
+ _janus->setRootIsDecorated(false);
+ _janus->setShowIconsInTreeList(true);
+
+ QWidget *w;
+ QFrame *f;
+ QString label;
+ QPixmap icon;
+
+ for (int i=0;i<advancedDumpTab->count();)
+ {
+ w = advancedDumpTab->page(i);
+ label = advancedDumpTab->label(i);
+
+ if (label.lower() == "security")
+ icon = SmallIcon("password");
+ else
+ if (label.lower() == "tuning")
+ icon = SmallIcon("launch");
+ else
+ if (label.lower() == "filenames")
+ icon = SmallIcon("folder");
+ else
+ if (label.lower() == "printing")
+ icon = SmallIcon("fileprint");
+ else
+ if (label.lower() == "locking")
+ icon = SmallIcon("lock");
+ else
+ if (label.lower() == "logon")
+ icon = SmallIcon("kdmconfig");
+ else
+ if (label.lower() == "protocol")
+ icon = SmallIcon("core");
+ else
+ if (label.lower() == "coding")
+ icon = SmallIcon("charset");
+ else
+ if (label.lower() == "socket")
+ icon = SmallIcon("socket");
+ else
+ if (label.lower() == "ssl")
+ icon = SmallIcon("encrypted");
+ else
+ if (label.lower() == "browsing")
+ icon = SmallIcon("konqueror");
+ else
+ if (label.lower() == "misc")
+ icon = SmallIcon("misc");
+ 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);
+
+ advancedDumpTab->removePage(w);
+
+ w->reparent(f,QPoint(1,1),TRUE);
+
+ }
+
+ w = _tabs->page(5);
+ _tabs->removePage(w);
+ delete w;
+
+
+}
+
+
+void ShareDlgImpl::tabChangedSlot(QWidget* w)
+{
+ // We are only interrested in the Hidden files tab
+ if ( QString(w->name()) == "hiddenFilesTab" )
+ loadHiddenFilesView();
+
+}
+
+void ShareDlgImpl::loadHiddenFilesView()
+{
+
+ if (_fileView)
+ return;
+
+ _fileView = new HiddenFileView( this, _share );
+
+ if ( ! _share->isSpecialSection())
+ _fileView->load();
+
+
+}
+
+void ShareDlgImpl::accept()
+{
+ // Base settings
+ if (!_share)
+ return;
+
+ if (homeChk->isChecked())
+ _share->setName("homes");
+ else
+ _share->setName(shareNameEdit->text());
+
+ // User settings
+
+ _userTab->save();
+
+ // Security
+
+ _share->setValue("guest account",guestAccountCombo->currentText( ) );
+
+
+ // Hidden files
+ if (_fileView)
+ _fileView->save();
+
+ _dictMngr->save( _share );
+
+ KcmShareDlg::accept();
+}
+
+void ShareDlgImpl::homeChkToggled(bool b)
+{
+ shareNameEdit->setDisabled(b);
+ pathUrlRq->setDisabled(b);
+
+ if (b)
+ {
+ shareNameEdit->setText("homes");
+ pathUrlRq->setURL("");
+ directoryPixLbl->setPixmap(DesktopIcon("folder_home",48));
+
+ }
+ else
+ {
+ shareNameEdit->setText( _share->getName() );
+ pathUrlRq->setURL( _share->getValue("path") );
+ directoryPixLbl->setPixmap(DesktopIcon("folder"));
+ }
+}
+
+void ShareDlgImpl::accessModifierBtnClicked()
+{
+ if (!QObject::sender()) {
+ kdWarning() << "ShareDlgImpl::accessModifierBtnClicked() : QObject::sender() is null!" << endl;
+ return;
+ }
+
+
+ QString name = QObject::sender()->name();
+
+ QLineEdit *edit = 0L;
+
+ if (name == "forceCreateModeBtn")
+ edit = forceCreateModeEdit;
+ else
+ if (name == "forceSecurityModeBtn")
+ edit = forceSecurityModeEdit;
+ else
+ if (name == "forceDirectoryModeBtn")
+ edit = forceDirectoryModeEdit;
+ else
+ if (name == "forceDirectorySecurityModeBtn")
+ edit = forceDirectorySecurityModeEdit;
+ else
+ if (name == "createMaskBtn")
+ edit = createMaskEdit;
+ else
+ if (name == "securityMaskBtn")
+ edit = securityMaskEdit;
+ else
+ if (name == "directoryMaskBtn")
+ edit = directoryMaskEdit;
+ else
+ if (name == "directorySecurityMaskBtn")
+ edit = directorySecurityMaskEdit;
+
+ if (!edit) {
+ kdWarning() << "ShareDlgImpl::accessModifierBtnClicked() : edit is null! name=" << name << endl;
+ return;
+ }
+
+ FileModeDlgImpl dlg(this, edit);
+
+ dlg.exec();
+}
+
+void ShareDlgImpl::changedSlot() {
+ m_changed = true;
+ kdDebug(5009) << "ShareDlgImpl::changedSlot()" << endl;
+ emit changed();
+}
+
+void ShareDlgImpl::pathUrlRq_textChanged( const QString & s)
+{
+ if (_fileView && ! _share->isSpecialSection())
+ _fileView->load();
+}
+
+
+#include "sharedlgimpl.moc"
diff --git a/filesharing/advanced/kcm_sambaconf/sharedlgimpl.h b/filesharing/advanced/kcm_sambaconf/sharedlgimpl.h
new file mode 100644
index 00000000..da6e178d
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/sharedlgimpl.h
@@ -0,0 +1,100 @@
+/***************************************************************************
+ sharedlgimpl.h - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef SHAREDLGIMPL_H
+#define SHAREDLGIMPL_H
+
+
+/**
+ * @author Jan Schfer
+ **/
+
+#include <qptrlist.h>
+
+#include "share.h"
+
+class SambaShare;
+class QWidget;
+class KPopupMenu;
+class KToggleAction;
+class QGroupBox;
+class UserTabImpl;
+class HiddenFileView;
+class DictManager;
+class KJanusWidget;
+
+/**
+ * This class implements the share.ui interface
+ **/
+class ShareDlgImpl : public KcmShareDlg
+{
+Q_OBJECT
+
+public :
+
+ ShareDlgImpl(QWidget* parent, SambaShare* share);
+ ~ShareDlgImpl();
+
+ bool hasChanged() { return m_changed; };
+
+protected :
+
+ /**
+ * Fills all dialog fields with the values
+ * of the SambaShare object
+ **/
+ void initDialog();
+
+ /**
+ * The share object to change with this dialog
+ **/
+ SambaShare* _share;
+
+ HiddenFileView* _fileView;
+ UserTabImpl* _userTab;
+ KJanusWidget* _janus;
+ bool m_changed;
+ DictManager* _dictMngr;
+
+ void loadHiddenFilesView();
+ void initAdvancedTab();
+
+protected slots:
+ virtual void accept();
+ virtual void homeChkToggled(bool);
+ virtual void accessModifierBtnClicked();
+ virtual void changedSlot();
+ virtual void pathUrlRq_textChanged( const QString & );
+
+ void tabChangedSlot(QWidget* w);
+signals:
+ void changed();
+};
+
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.cpp b/filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.cpp
new file mode 100644
index 00000000..ce276979
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.cpp
@@ -0,0 +1,89 @@
+/***************************************************************************
+ smbconfconfigwidget.cpp - description
+ -------------------
+ begin : Tue May 16 2003
+ copyright : (C) 2003 by Jan Sch�er
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <qfileinfo.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+
+#include <kapplication.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+
+
+#include "smbconfconfigwidget.h"
+
+SmbConfConfigWidget::SmbConfConfigWidget(QWidget* parent)
+ : QWidget(parent,"configWidget")
+{
+
+ QVBoxLayout *layout = new QVBoxLayout(this,5);
+
+ QLabel *lbl = new QLabel(i18n("<p>The SAMBA configuration file <strong>'smb.conf'</strong>" \
+ " could not be found;</p>" \
+ "make sure you have SAMBA installed.\n\n"), this);
+
+ QHBoxLayout *hbox = new QHBoxLayout(this);
+ QPushButton *btn = new QPushButton(i18n("Specify Location"), this);
+ connect(btn, SIGNAL(pressed()), this, SLOT( btnPressed()));
+
+ btn->setDefault(false);
+ btn->setAutoDefault(false);
+
+ hbox->addStretch();
+ hbox->addWidget(btn);
+
+ layout->addWidget(lbl);
+ layout->addLayout(hbox);
+ layout->addStretch();
+}
+
+void SmbConfConfigWidget::btnPressed() {
+ QString smbConf = KFileDialog::getOpenFileName("/",
+ "smb.conf|Samba conf. File\n"
+ "*|All Files",0,i18n("Get smb.conf Location"));
+
+ if (smbConf.isEmpty())
+ return;
+ if ( ! QFileInfo(smbConf).isReadable() ) {
+ KMessageBox::sorry(this,i18n("<qt>The file <i>%1</i> could not be read.</qt>").arg(smbConf),i18n("Could Not Read File"));
+ return;
+ }
+
+ KConfig config("ksambaplugin");
+
+ config.setGroup("KSambaKonqiPlugin");
+ config.writeEntry("smb.conf",smbConf);
+ config.sync();
+
+ emit smbConfChoosed(smbConf);
+
+}
+
+#include "smbconfconfigwidget.moc"
diff --git a/filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.h b/filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.h
new file mode 100644
index 00000000..bd00357a
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/smbconfconfigwidget.h
@@ -0,0 +1,46 @@
+/***************************************************************************
+ smbconfconfigwidget.h - description
+ -------------------
+ begin : Tue May 16 2003
+ copyright : (C) 2003 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef SMBCONFCONFIGWIDGET_H
+#define SMBCONFCONFIGWIDGET_H
+
+#include <qwidget.h>
+
+class SmbConfConfigWidget : public QWidget {
+Q_OBJECT
+public:
+ SmbConfConfigWidget(QWidget*);
+
+protected slots:
+ void btnPressed();
+signals:
+ void smbConfChoosed(const QString &);
+};
+
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/smbpasswdfile.cpp b/filesharing/advanced/kcm_sambaconf/smbpasswdfile.cpp
new file mode 100644
index 00000000..594864b9
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/smbpasswdfile.cpp
@@ -0,0 +1,229 @@
+/***************************************************************************
+ smbpasswdfile.cpp - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <qstring.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qstringlist.h>
+
+#include <kurl.h>
+#include <kdebug.h>
+#include <kpassdlg.h>
+#include <klocale.h>
+#include <kprocess.h>
+
+#include "sambafile.h"
+#include "smbpasswdfile.h"
+#include "passwd.h"
+
+
+QStringList SambaUserList::getUserNames()
+{
+ QStringList list;
+
+ SambaUser *user;
+ for ( user = first(); user; user = next() )
+ {
+ list.append(user->name);
+ }
+
+ return list;
+}
+
+
+SmbPasswdFile::SmbPasswdFile() {
+}
+
+
+SmbPasswdFile::SmbPasswdFile(const KURL & url)
+{
+ setUrl(url);
+}
+
+SmbPasswdFile::~SmbPasswdFile()
+{
+}
+
+void SmbPasswdFile::setUrl(const KURL & url) {
+ _url = url;
+}
+
+/**
+ * Returns a list of all users stored in
+ * the smbpasswd file
+ **/
+SambaUserList SmbPasswdFile::getSambaUserList()
+{
+ QFile f(_url.path());
+
+ SambaUserList list;
+
+ if ( f.open(IO_ReadOnly) )
+ {
+ QTextStream t( &f );
+ QString s;
+ while ( !t.eof() )
+ {
+ s = t.readLine().stripWhiteSpace();
+
+ // Ignore comments
+ if (s.left(1)=="#")
+ continue;
+
+ QStringList l = QStringList::split(":",s);
+
+ SambaUser* user = new SambaUser(l[0],l[1].toInt());
+ user->gid = getUserGID(l[0]);
+ user->isUserAccount = l[4].contains('U');
+ user->hasNoPassword = l[4].contains('N');;
+ user->isDisabled = l[4].contains('D');;
+ user->isWorkstationTrustAccount = l[4].contains('W');;
+ list.append(user);
+ }
+ f.close();
+ }
+
+ return list;
+}
+
+bool SmbPasswdFile::executeSmbpasswd(const QStringList & args) {
+ KProcess p;
+ p << "smbpasswd" << args;
+
+ connect( &p, SIGNAL(receivedStdout(KProcess*,char*,int)),
+ this, SLOT(smbpasswdStdOutReceived(KProcess*,char*,int)));
+
+ _smbpasswdOutput = "";
+
+ bool result = p.start(KProcess::Block,KProcess::Stdout);
+
+ if (result)
+ {
+ kdDebug(5009) << _smbpasswdOutput << endl;
+ }
+
+ return result;
+}
+
+/**
+ * Tries to add the passed user to the smbpasswd file
+ * returns true if successful otherwise false
+ **/
+bool SmbPasswdFile::addUser(const SambaUser & user,const QString & password)
+{
+ KProcess p;
+ p << "smbpasswd" << "-a" << user.name;
+
+ p << password;
+
+ connect( &p, SIGNAL(receivedStdout(KProcess*,char*,int)),
+ this, SLOT(smbpasswdStdOutReceived(KProcess*,char*,int)));
+
+ _smbpasswdOutput = "";
+
+ bool result = p.start(KProcess::Block,KProcess::Stdout);
+
+ if (result)
+ {
+ kdDebug(5009) << _smbpasswdOutput << endl;
+ }
+
+ return result;
+}
+
+/**
+ * Tries to remove the passed user from the smbpasswd file
+ * returns true if successful otherwise false
+ **/
+bool SmbPasswdFile::removeUser(const SambaUser & user)
+{
+ QStringList l;
+ l << "-x" << user.name;
+ return executeSmbpasswd(l);
+}
+
+bool SmbPasswdFile::changePassword(const SambaUser & user, const QString & newPassword)
+{
+ return addUser(user,newPassword);
+}
+
+
+void SmbPasswdFile::smbpasswdStdOutReceived(KProcess *, char *buffer, int buflen)
+{
+ _smbpasswdOutput+=QString::fromLatin1(buffer,buflen);
+}
+
+
+/**
+ * Returns the Url of the smbpasswd file
+ * specified in the [global] section of
+ * the smb.conf file.
+ * If there is no entry in the [global] section
+ * it tries to guess the location.
+ **/
+KURL SmbPasswdFile::getUrlFromSambaFile(const SambaFile * /*file*/)
+{
+ kdWarning() << "SmbPasswdFile::getUrlFromSambaFile unimplemeneted!" << endl;
+ return KURL("");
+}
+
+bool SmbPasswdFile::enableUser(const SambaUser & user) {
+ QStringList l;
+ l << "-e" << user.name;
+ return executeSmbpasswd(l);
+}
+
+bool SmbPasswdFile::disableUser(const SambaUser & user) {
+ QStringList l;
+ l << "-d" << user.name;
+ return executeSmbpasswd(l);
+}
+
+bool SmbPasswdFile::setNoPassword(const SambaUser & user) {
+ QStringList l;
+ l << "-n" << user.name;
+ return executeSmbpasswd(l);
+}
+
+bool SmbPasswdFile::setMachineTrustAccount(const SambaUser & user) {
+ QStringList l;
+ l << "-m" << user.name;
+ return executeSmbpasswd(l);
+}
+
+bool SmbPasswdFile::joinADomain(const QString & domain, const QString & server,
+ const QString & user, const QString & password) {
+ QStringList l;
+ l << "-j" << domain;
+ l << "-r" << server;
+ l << "-U" << user << "%" << password;
+ return executeSmbpasswd(l);
+}
+
+
+#include "smbpasswdfile.moc"
diff --git a/filesharing/advanced/kcm_sambaconf/smbpasswdfile.h b/filesharing/advanced/kcm_sambaconf/smbpasswdfile.h
new file mode 100644
index 00000000..6a15c8c0
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/smbpasswdfile.h
@@ -0,0 +1,141 @@
+/***************************************************************************
+ smbpasswdfile.h - description
+ -------------------
+ begin : Tue June 6 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef SMBPASSWDFILE_H
+#define SMBPASSWDFILE_H
+
+
+/**
+ *@author Jan Schfer
+ */
+
+#include <qstring.h>
+#include <kurl.h>
+
+class SambaFile;
+class KProcess;
+
+/**
+ * Simple class to store a Samba User
+ **/
+class SambaUser
+{
+public:
+ SambaUser(const QString & aName = QString::null, int anUid = -1) {name = aName; uid = anUid;};
+
+ QString name;
+ int uid;
+ int gid;
+ bool isUserAccount;
+ bool hasNoPassword;
+ bool isDisabled;
+ bool isWorkstationTrustAccount;
+};
+
+/**
+ * A QPtrList of SambaUser
+ **/
+class SambaUserList : public QPtrList<SambaUser>
+{
+public:
+ QStringList getUserNames();
+};
+
+/**
+ * This class represents the SAMBA smbpasswd file.
+ * It provides :
+ * - getting a list of all SAMBA users
+ * - adding a new user -> uses smbpasswd program
+ * - removing an existing user -> uses smbpasswd program
+ **/
+class SmbPasswdFile : public QObject
+{
+Q_OBJECT
+public:
+ SmbPasswdFile();
+ SmbPasswdFile(const KURL &);
+ ~SmbPasswdFile();
+
+ void setUrl(const KURL &);
+
+ /**
+ * Returns a list of all users stored in
+ * the smbpasswd file
+ **/
+ SambaUserList getSambaUserList();
+
+ /**
+ * Calls smbpasswd with the given arguments
+ **/
+ bool executeSmbpasswd(const QStringList & args);
+
+ /**
+ * Tries to add the passed user to the smbpasswd file
+ * returns true if successful otherwise false
+ **/
+ bool addUser(const SambaUser &, const QString & password);
+
+ /**
+ * Tries to remove the passed user from the smbpasswd file
+ * returns true if successful otherwise false
+ **/
+ bool removeUser(const SambaUser &);
+
+ /**
+ * Tries to change the password of the passed user
+ * if it fails returns false otherwise true
+ **/
+ bool changePassword(const SambaUser &, const QString & password);
+
+ bool enableUser(const SambaUser &);
+
+ bool disableUser(const SambaUser &);
+
+ bool setNoPassword(const SambaUser &);
+
+ bool setMachineTrustAccount(const SambaUser &);
+
+ bool joinADomain(const QString &, const QString &, const QString &, const QString &);
+
+ /**
+ * Returns the Url of the smbpasswd file
+ * specified in the [global] section of
+ * the smb.conf file.
+ * If there is no entry in the [global] section
+ * it tries to guess the location.
+ **/
+ static KURL getUrlFromSambaFile(const SambaFile *file);
+protected:
+ KURL _url;
+ QString _smbpasswdOutput;
+
+protected slots:
+ void smbpasswdStdOutReceived(KProcess*,char*,int);
+};
+
+#endif
diff --git a/filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui b/filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui
new file mode 100644
index 00000000..acfaf91f
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui
@@ -0,0 +1,332 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>SocketOptionsDlg</class>
+<comment>
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+</comment>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>SocketOptionsDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>457</width>
+ <height>240</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Socket Options</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout106</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="2" column="1">
+ <property name="name">
+ <cstring>SO_SNDLOWATChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_SNDLOWAT:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>IPTOS_THROUGHPUTChk</cstring>
+ </property>
+ <property name="text">
+ <string>IPTOS_THROUGHPUT</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>SO_SNDBUFChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_SNDBUF:</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0">
+ <property name="name">
+ <cstring>SO_KEEPALIVEChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_KEEPALIVE</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>SO_RCVBUFChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_RCVBUF:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="2">
+ <property name="name">
+ <cstring>SO_SNDBUFSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>100000</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="3" column="2">
+ <property name="name">
+ <cstring>SO_RCVLOWATSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>100000</number>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="0">
+ <property name="name">
+ <cstring>SO_BROADCASTChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_BROADCAST</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>IPTOS_LOWDELAYChk</cstring>
+ </property>
+ <property name="text">
+ <string>IPTOS_LOWDELAY</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>TCP_NODELAYChk</cstring>
+ </property>
+ <property name="text">
+ <string>TCP_NODELAY</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="1">
+ <property name="name">
+ <cstring>SO_RCVLOWATChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_RCVLOWAT:</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="2">
+ <property name="name">
+ <cstring>SO_RCVBUFSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>100000</number>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="2" column="2">
+ <property name="name">
+ <cstring>SO_SNDLOWATSpin</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="maxValue">
+ <number>100000</number>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0">
+ <property name="name">
+ <cstring>SO_REUSEADDRChk</cstring>
+ </property>
+ <property name="text">
+ <string>SO_REUSEADDR</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>Frame8</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>SocketOptionsDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>SocketOptionsDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>SO_RCVLOWATChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_RCVLOWATSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>SO_SNDLOWATChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_SNDLOWATSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>SO_RCVBUFChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_RCVBUFSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>SO_SNDBUFChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>SO_SNDBUFSpin</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">assert.h</include>
+ <include location="local" impldecl="in implementation">sambashare.h</include>
+ <include location="local" impldecl="in implementation">socketoptionsdlg.ui.h</include>
+</includes>
+<forwards>
+ <forward>class SambaShare;</forward>
+</forwards>
+<variables>
+ <variable>SambaShare* _share;</variable>
+</variables>
+<slots>
+ <slot>setShare( SambaShare * share )</slot>
+ <slot access="private" returnType="bool">getBoolValue( const QString &amp; str, const QString &amp; name )</slot>
+ <slot access="private" returnType="int">getIntValue( const QString &amp; str, const QString &amp; name )</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui.h b/filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui.h
new file mode 100644
index 00000000..bc8c5d49
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/socketoptionsdlg.ui.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename slots use Qt Designer which will
+** update this file, preserving your code. Create an init() slot in place of
+** a constructor, and a destroy() slot in place of a destructor.
+*****************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+void SocketOptionsDlg::setShare( SambaShare * share )
+{
+ assert(share);
+
+ _share = share;
+
+ QString s = _share->getValue("socket options");
+
+ s = s.simplifyWhiteSpace();
+
+ // The string s has now the form e.g. :
+ // "OPTION1=1 OPTION2=0 OPTION3=2234 OPTION4"
+
+SO_KEEPALIVEChk->setChecked(getBoolValue( s, "SO_KEEPALIVE") );
+SO_REUSEADDRChk->setChecked( getBoolValue( s, "SO_REUSEADDR") );
+SO_BROADCASTChk->setChecked( getBoolValue( s, "SO_BROADCAST") );
+TCP_NODELAYChk->setChecked( getBoolValue( s, "TCP_NODELAY") );
+IPTOS_LOWDELAYChk->setChecked( getBoolValue( s, "IPTOS_LOWDELAY") );
+IPTOS_THROUGHPUTChk->setChecked( getBoolValue( s, "IPTOS_THROUGHPUT") );
+SO_SNDBUFChk->setChecked( getBoolValue( s, "SO_SNDBUF") );
+SO_RCVBUFChk->setChecked( getBoolValue( s, "SO_RCVBUF") );
+SO_SNDLOWATChk->setChecked( getBoolValue( s, "SO_SNDLOWAT") );
+SO_RCVLOWATChk->setChecked( getBoolValue( s, "SO_RCVLOWAT") );
+
+SO_SNDBUFSpin->setValue( getIntValue( s, "SO_SNDBUF") );
+SO_RCVBUFSpin->setValue( getIntValue( s, "SO_RCVBUF") );
+SO_SNDLOWATSpin->setValue( getIntValue( s, "SO_SNDLOWAT") );
+SO_RCVLOWATSpin->setValue( getIntValue( s, "SO_RCVLOWAT") );
+
+}
+
+
+
+bool SocketOptionsDlg::getBoolValue( 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 SocketOptionsDlg::getIntValue( 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);
+
+ i = s.find(" ");
+ if (i < 0)
+ i = s.length();
+ else
+ i++;
+
+ s = s.left( i );
+
+ return s.toInt();
+ }
+ else
+ return 0;
+ }
+
+ return 0;
+}
diff --git a/filesharing/advanced/kcm_sambaconf/userselectdlg.ui b/filesharing/advanced/kcm_sambaconf/userselectdlg.ui
new file mode 100644
index 00000000..8fa38372
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/userselectdlg.ui
@@ -0,0 +1,301 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>UserSelectDlg</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>UserSelectDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>485</width>
+ <height>269</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Select Users</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>groupBox87</cstring>
+ </property>
+ <property name="title">
+ <string>Select &amp;Users</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>UID</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>GID</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizeable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>userListView</cstring>
+ </property>
+ <property name="selectionMode">
+ <enum>Extended</enum>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup" row="0" column="1">
+ <property name="name">
+ <cstring>accessBtnGrp</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Acc&amp;ess</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>defaultRadio</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Default</string>
+ </property>
+ <property name="accel">
+ <number>8388676</number>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>readRadio</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Read access</string>
+ </property>
+ <property name="accel">
+ <number>8388690</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>writeRadio</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Write access</string>
+ </property>
+ <property name="accel">
+ <number>8388695</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>adminRadio</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Admin access</string>
+ </property>
+ <property name="accel">
+ <number>8388673</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>noAccessRadio</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;No access at all</string>
+ </property>
+ <property name="accel">
+ <number>8388686</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer90</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>50</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QFrame" row="2" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>frame16</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>285</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <number>0</number>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>UserSelectDlg</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>UserSelectDlg</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in declaration">sambashare.h</include>
+ <include location="local" impldecl="in implementation">smbpasswdfile.h</include>
+ <include location="local" impldecl="in implementation">kurl.h</include>
+ <include location="local" impldecl="in implementation">userselectdlg.ui.h</include>
+</includes>
+<variables>
+ <variable>QStringList selectedUsers;</variable>
+ <variable>int access;</variable>
+</variables>
+<slots>
+ <slot>init( const QStringList &amp; specifiedUsers, SambaShare * share )</slot>
+ <slot access="protected">accept()</slot>
+ <slot specifier="non virtual" returnType="QStringList">getSelectedUsers()</slot>
+ <slot specifier="non virtual" returnType="int">getAccess()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/userselectdlg.ui.h b/filesharing/advanced/kcm_sambaconf/userselectdlg.ui.h
new file mode 100644
index 00000000..af323fe6
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/userselectdlg.ui.h
@@ -0,0 +1,50 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+
+void UserSelectDlg::init(const QStringList & specifiedUsers, SambaShare* share)
+{
+ SmbPasswdFile passwd( KURL(share->getValue("smb passwd file",true,true)) );
+ SambaUserList sambaList = passwd.getSambaUserList();
+
+ for (SambaUser * user = sambaList.first(); user; user = sambaList.next() )
+ {
+ if (! specifiedUsers.contains(user->name))
+ new QListViewItem(userListView, user->name, QString::number(user->uid), QString::number(user->gid));
+ }
+
+}
+
+
+void UserSelectDlg::accept()
+{
+ QListViewItemIterator it( userListView);
+
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->isSelected() )
+ selectedUsers << it.current()->text(0);
+ }
+
+ access = accessBtnGrp->id(accessBtnGrp->selected());
+
+ QDialog::accept();
+
+}
+
+
+QStringList UserSelectDlg::getSelectedUsers()
+{
+ return selectedUsers;
+}
+
+
+int UserSelectDlg::getAccess()
+{
+ return access;
+}
diff --git a/filesharing/advanced/kcm_sambaconf/usertab.ui b/filesharing/advanced/kcm_sambaconf/usertab.ui
new file mode 100644
index 00000000..43e556dc
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/usertab.ui
@@ -0,0 +1,352 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>UserTab</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>UserTab</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>548</width>
+ <height>396</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Users</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox53</cstring>
+ </property>
+ <property name="title">
+ <string>All U&amp;nspecified Users</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Allow</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Reject</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>allUnspecifiedUsersCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox77</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Spec&amp;ified Users</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTable" row="0" column="0" rowspan="5" colspan="1">
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>UID</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>GID</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Access Rights</string>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>userTable</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>100</horstretch>
+ <verstretch>50</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="numRows">
+ <number>0</number>
+ </property>
+ <property name="numCols">
+ <number>4</number>
+ </property>
+ <property name="showGrid">
+ <bool>false</bool>
+ </property>
+ <property name="columnMovingEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>MultiRow</enum>
+ </property>
+ <property name="focusStyle">
+ <enum>FollowStyle</enum>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>addUserBtn</cstring>
+ </property>
+ <property name="text">
+ <string>A&amp;dd User...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>expertBtn</cstring>
+ </property>
+ <property name="text">
+ <string>E&amp;xpert</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>addGroupBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Add &amp;Group...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>removeSelectedBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Remo&amp;ve Selected</string>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>spacer88</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>100</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox35</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>All Users Should be Forced to the Follo&amp;wing User/Group</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel12</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Forc&amp;e user:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>forceUserCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>forceUserCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel13</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Fo&amp;rce group:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>forceGroupCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>forceGroupCombo</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>addUserBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>addUserBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>addGroupBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>addGroupBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>removeSelectedBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>removeSelectedBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>expertBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>expertBtnClicked()</slot>
+ </connection>
+ <connection>
+ <sender>allUnspecifiedUsersCombo</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>UserTab</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>addUserBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>addGroupBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>removeSelectedBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>expertBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>UserTab</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>forceUserCombo</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>UserTab</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>forceGroupCombo</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>UserTab</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>allUnspecifiedUsersCombo</tabstop>
+ <tabstop>userTable</tabstop>
+ <tabstop>addUserBtn</tabstop>
+ <tabstop>addGroupBtn</tabstop>
+ <tabstop>removeSelectedBtn</tabstop>
+ <tabstop>expertBtn</tabstop>
+ <tabstop>forceUserCombo</tabstop>
+ <tabstop>forceGroupCombo</tabstop>
+</tabstops>
+<includes>
+ <include location="local" impldecl="in implementation">userselectdlg.h</include>
+ <include location="local" impldecl="in implementation">groupselectdlg.h</include>
+ <include location="local" impldecl="in implementation">usertab.ui.h</include>
+</includes>
+<signals>
+ <signal>changed()</signal>
+</signals>
+<slots>
+ <slot>addUserBtnClicked()</slot>
+ <slot>removeSelectedBtnClicked()</slot>
+ <slot>addGroupBtnClicked()</slot>
+ <slot>expertBtnClicked()</slot>
+ <slot>changedSlot()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/kcm_sambaconf/usertab.ui.h b/filesharing/advanced/kcm_sambaconf/usertab.ui.h
new file mode 100644
index 00000000..088f468a
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/usertab.ui.h
@@ -0,0 +1,39 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+
+void UserTab::addUserBtnClicked()
+{
+
+}
+
+
+void UserTab::removeSelectedBtnClicked()
+{
+
+}
+
+
+void UserTab::addGroupBtnClicked()
+{
+
+}
+
+
+
+void UserTab::expertBtnClicked()
+{
+
+}
+
+
+void UserTab::changedSlot()
+{
+ emit changed();
+}
diff --git a/filesharing/advanced/kcm_sambaconf/usertabimpl.cpp b/filesharing/advanced/kcm_sambaconf/usertabimpl.cpp
new file mode 100644
index 00000000..b6d2b0da
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/usertabimpl.cpp
@@ -0,0 +1,418 @@
+/***************************************************************************
+ usertabimpl.cpp - description
+ -------------------
+ begin : Mon Jul 15 2002
+ copyright : (C) 2002 by Jan Sch�er
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 <unistd.h> // for getuid
+
+#include <qcombobox.h>
+#include <qstringlist.h>
+#include <passwd.h>
+#include <qregexp.h>
+#include <qtable.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qlineedit.h>
+
+#include <klistview.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <kinputdialog.h>
+
+#include "usertabimpl.h"
+#include "sambashare.h"
+#include "smbpasswdfile.h"
+#include "passwd.h"
+#include "groupselectdlg.h"
+#include "userselectdlg.h"
+#include "expertuserdlg.h"
+
+#include <assert.h>
+
+/**
+ * @pre share is not null
+ * @post _share = share
+ */
+UserTabImpl::UserTabImpl(QWidget* parent, SambaShare* share)
+ : UserTab(parent)
+{
+ if (share == 0L) {
+ kdWarning() << "WARNING: UserTabImpl constructor: share parameter is null!" << endl;
+ return;
+ }
+
+ _share = share;
+ userTable->setLeftMargin(0);
+ // userTable->setColumnStretchable ( 3, true );
+
+}
+
+UserTabImpl::~UserTabImpl()
+{
+}
+
+void UserTabImpl::load()
+{
+ if (_share == 0L)
+ return;
+
+ loadForceCombos();
+ loadUsers(_share->getValue("valid users"),
+ _share->getValue("read list"),
+ _share->getValue("write list"),
+ _share->getValue("admin users"),
+ _share->getValue("invalid users"));
+}
+
+void UserTabImpl::loadUsers(const QString & validUsersStr,
+ const QString & readListStr,
+ const QString & writeListStr,
+ const QString & adminUsersStr,
+ const QString & invalidUsersStr)
+{
+ userTable->setNumRows(0);
+ QStringList validUsers = QStringList::split(QRegExp("[,\\s]+"),validUsersStr);
+ QStringList readList = QStringList::split(QRegExp("[,\\s]+"),readListStr);
+ QStringList writeList = QStringList::split(QRegExp("[,\\s]+"),writeListStr);
+ QStringList adminUsers = QStringList::split(QRegExp("[,\\s]+"),adminUsersStr);
+ QStringList invalidUsers = QStringList::split(QRegExp("[,\\s]+"),invalidUsersStr);
+
+ // if the valid users list contains no entries
+ // then all users are allowed, except those that are
+ // in the invalid list
+ if (validUsers.empty())
+ allUnspecifiedUsersCombo->setCurrentItem(0);
+ else
+ allUnspecifiedUsersCombo->setCurrentItem(1);
+
+ removeDuplicates(validUsers,readList,writeList,adminUsers,invalidUsers);
+
+ addListToUserTable(adminUsers,3);
+ addListToUserTable(writeList,2);
+ addListToUserTable(readList,1);
+ addListToUserTable(validUsers,0);
+ addListToUserTable(invalidUsers,4);
+
+}
+
+
+void UserTabImpl::loadForceCombos() {
+ forceUserCombo->insertItem("");
+ forceGroupCombo->insertItem("");
+
+ QStringList unixGroups = getUnixGroups();
+
+ forceUserCombo->insertStringList( getUnixUsers() );
+ forceGroupCombo->insertStringList( unixGroups );
+
+ setComboToString(forceUserCombo, _share->getValue("force user"));
+ setComboToString(forceGroupCombo, _share->getValue("force group"));
+}
+
+/**
+ * Remove all duplicates of the different list, so that
+ * all lists are disjunct.
+ */
+void UserTabImpl::removeDuplicates( QStringList & validUsers, QStringList & readList,
+ QStringList & writeList, QStringList & adminUsers,
+ QStringList & invalidUsers)
+{
+ removeAll(adminUsers, writeList);
+
+ removeAll(writeList, readList);
+ removeAll(adminUsers, readList);
+
+ removeAll(readList, validUsers);
+ removeAll(writeList, validUsers);
+ removeAll(adminUsers, validUsers);
+
+ removeAll(invalidUsers, validUsers);
+ removeAll(invalidUsers, readList);
+ removeAll(invalidUsers, writeList);
+ removeAll(invalidUsers, adminUsers);
+}
+
+/**
+ * Remove all entries of entryList from the fromList
+ */
+void UserTabImpl::removeAll(QStringList & entryList, QStringList & fromList) {
+ for (QStringList::Iterator it = entryList.begin(); it != entryList.end(); ++it) {
+ fromList.remove((*it));
+ }
+}
+
+
+void UserTabImpl::addListToUserTable(const QStringList & list, int accessRight) {
+
+ for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
+ addUserToUserTable(*it,accessRight);
+ }
+}
+
+void UserTabImpl::addUserToUserTable(const QString & user, int accessRight) {
+ int row = userTable->numRows();
+ userTable->setNumRows(row+1);
+ setAllowedUser(row, user);
+
+ QComboTableItem* comboItem = static_cast<QComboTableItem*>(userTable->item(row,3));
+ comboItem->setCurrentItem(accessRight);
+}
+
+QString UserTabImpl::removeQuotationMarks(const QString & name) {
+ QString result = name;
+ if (name.left(1) == "\"") {
+ result = result.left(result.length()-1);
+ result = result.right(result.length()-1);
+ }
+ return result;
+}
+
+QString UserTabImpl::removeGroupTag(const QString & name) {
+ QString result = name;
+
+
+ if (nameIsGroup(result)) {
+ result = result.right(result.length()-1);
+ if (nameIsGroup(result))
+ result = result.right(result.length()-1);
+ }
+
+ return result;
+}
+
+
+bool UserTabImpl::nameIsGroup(const QString & name) {
+ QString quoteless = removeQuotationMarks(name);
+ if (quoteless.left(1) == "@" ||
+ quoteless.left(1) == "+" ||
+ quoteless.left(1) == "&")
+ return true;
+
+ return false;
+
+}
+
+void UserTabImpl::setAllowedUser(int i, const QString & name)
+{
+ QStringList accessRights;
+ accessRights << i18n("Default") << i18n("Read only") << i18n("Writeable") << i18n("Admin") << i18n("Reject");
+
+ QString uid;
+ QString gid;
+
+ QString name2 = name;
+
+ if (nameIsGroup(name2))
+ {
+ QString name3 = removeGroupTag(name2);
+ uid = "";
+ gid = QString::number(getGroupGID(name3));
+ _specifiedGroups << name3;
+ }
+ else
+ {
+ uid = QString::number(getUserUID(name2));
+ gid = QString::number(getUserGID(name2));
+ _specifiedUsers << name2;
+ }
+
+ if (name2.contains(' '))
+ name2 = "\""+name2+"\"";
+
+
+ QTableItem* item = new QTableItem( userTable,QTableItem::Never, name2 );
+ userTable->setItem(i,0,item);
+
+ item = new QTableItem( userTable,QTableItem::Never, uid );
+ userTable->setItem(i,1,item);
+
+ item = new QTableItem( userTable,QTableItem::Never, gid );
+ userTable->setItem(i,2,item);
+
+ QComboTableItem* comboItem = new QComboTableItem( userTable,accessRights);
+ userTable->setItem(i,3,comboItem);
+
+}
+
+void UserTabImpl::addUserBtnClicked()
+{
+ if (getuid() == 0) {
+ UserSelectDlg *dlg = new UserSelectDlg();
+ dlg->init(_specifiedUsers,_share);
+
+ QStringList selectedUsers = dlg->getSelectedUsers();
+
+ if (dlg->exec()) {
+ for (QStringList::Iterator it = selectedUsers.begin(); it != selectedUsers.end(); ++it)
+ {
+ addUserToUserTable(*it,dlg->getAccess());
+ }
+ }
+
+ delete dlg;
+ } else {
+ bool ok;
+ QString name = KInputDialog::getText(i18n("Add User"),i18n("Name:"),
+ QString::null,&ok );
+
+ if (ok)
+ addUserToUserTable(name,0);
+ }
+}
+
+void UserTabImpl::removeSelectedBtnClicked()
+{
+ QMemArray<int>rows;
+
+ int j=0;
+
+ for (int i=0; i<userTable->numRows(); i++)
+ {
+ if (userTable->isRowSelected(i))
+ {
+ if (nameIsGroup(userTable->item(i,0)->text())) {
+ _specifiedGroups.remove( removeGroupTag(removeQuotationMarks(userTable->item(i,0)->text())));
+ } else
+ _specifiedUsers.remove(userTable->item(i,0)->text());
+
+ rows.resize(j+1);
+ rows[j] = i;
+ j++;
+ }
+ }
+
+ userTable->removeRows(rows);
+}
+
+
+void UserTabImpl::addGroupBtnClicked()
+{
+ GroupSelectDlg *dlg = new GroupSelectDlg();
+ dlg->init(_specifiedGroups);
+ QStringList selectedGroups = dlg->getSelectedGroups();
+ if (dlg->exec()) {
+ for (QStringList::Iterator it = selectedGroups.begin(); it != selectedGroups.end(); ++it)
+ {
+ kdDebug(5009) << "GroupKind: " << dlg->getGroupKind() << endl;
+ QString name = dlg->getGroupKind() + (*it);
+ addUserToUserTable(name,dlg->getAccess());
+ }
+ }
+
+ delete dlg;
+}
+
+void UserTabImpl::expertBtnClicked() {
+ ExpertUserDlg *dlg = new ExpertUserDlg();
+ QString validUsersStr;
+ QString readListStr;
+ QString writeListStr;
+ QString adminUsersStr;
+ QString invalidUsersStr;
+
+ saveUsers(validUsersStr,readListStr,writeListStr,adminUsersStr,invalidUsersStr);
+
+ dlg->validUsersEdit->setText(validUsersStr);
+ dlg->readListEdit->setText(readListStr);
+ dlg->writeListEdit->setText(writeListStr);
+ dlg->adminUsersEdit->setText(adminUsersStr);
+ dlg->invalidUsersEdit->setText(invalidUsersStr);
+
+ if (dlg->exec()) {
+ loadUsers(dlg->validUsersEdit->text(),
+ dlg->readListEdit->text(),
+ dlg->writeListEdit->text(),
+ dlg->adminUsersEdit->text(),
+ dlg->invalidUsersEdit->text());
+
+ }
+
+ delete dlg;
+}
+
+void UserTabImpl::save()
+{
+ QString validUsersStr;
+ QString readListStr;
+ QString writeListStr;
+ QString adminUsersStr;
+ QString invalidUsersStr;
+
+ saveUsers(validUsersStr,readListStr,writeListStr,adminUsersStr,invalidUsersStr);
+
+ _share->setValue("valid users",validUsersStr);
+ _share->setValue("read list", readListStr);
+ _share->setValue("write list", writeListStr);
+ _share->setValue("admin users", adminUsersStr);
+ _share->setValue("invalid users", invalidUsersStr);
+
+ _share->setValue("force user",forceUserCombo->currentText( ) );
+ _share->setValue("force group",forceGroupCombo->currentText( ) );
+}
+
+void UserTabImpl::saveUsers(QString & validUsersStr,
+ QString & readListStr,
+ QString & writeListStr,
+ QString & adminUsersStr,
+ QString & invalidUsersStr)
+{
+ QStringList validUsers;
+ QStringList writeList;
+ QStringList readList;
+ QStringList adminUsers;
+ QStringList invalidUsers;
+
+ bool allowAllUsers = allUnspecifiedUsersCombo->currentItem() == 0;
+
+ for (int i=0; i<userTable->numRows(); i++)
+ {
+ QTableItem* item = userTable->item(i,0);
+ QComboTableItem* comboItem = static_cast<QComboTableItem*>(userTable->item(i,3));
+
+ if (! allowAllUsers && comboItem->currentItem() < 4)
+ validUsers.append(item->text());
+
+ switch (comboItem->currentItem())
+ {
+ case 0 : break;
+ case 1 : readList.append(item->text());break;
+ case 2 : writeList.append(item->text());break;
+ case 3 : adminUsers.append(item->text());break;
+ case 4 : invalidUsers.append(item->text());break;
+ }
+ }
+
+ validUsersStr = validUsers.join(",");
+ readListStr = readList.join(",");
+ writeListStr = writeList.join(",");
+ adminUsersStr = adminUsers.join(",");
+ invalidUsersStr = invalidUsers.join(",");
+}
+
+
+
+#include "usertabimpl.moc"
diff --git a/filesharing/advanced/kcm_sambaconf/usertabimpl.h b/filesharing/advanced/kcm_sambaconf/usertabimpl.h
new file mode 100644
index 00000000..78d3697a
--- /dev/null
+++ b/filesharing/advanced/kcm_sambaconf/usertabimpl.h
@@ -0,0 +1,95 @@
+/***************************************************************************
+ usertabimpl.h - description
+ -------------------
+ begin : Mon Jul 15 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/******************************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************************/
+
+#ifndef USERTABIMPL_H
+#define USERTABIMPL_H
+
+#include "usertab.h"
+#include "common.h"
+#include "qstringlist.h"
+
+/**
+ *@author Jan Schfer
+ */
+
+class KListViewItem;
+class SambaShare;
+
+/**
+ * Implements the usertab.ui interface
+ * A Widget where you can add SambaUsers to the valid users, rejected users,
+ * write list, read list and admin list parameters of the smb.conf file
+ **/
+class UserTabImpl : public UserTab
+{
+Q_OBJECT
+public:
+ UserTabImpl(QWidget* parent, SambaShare* share);
+ ~UserTabImpl();
+
+ void load();
+ void save();
+private:
+ SambaShare* _share;
+ QStringList _specifiedUsers;
+ QStringList _specifiedGroups;
+
+ void setAllowedUser(int, const QString &);
+ void removeDuplicates( QStringList & validUsers, QStringList & readList,
+ QStringList & writeList, QStringList & adminUsers,
+ QStringList & invalidUsers);
+
+ void removeAll(QStringList & entryList, QStringList & fromList);
+ void addListToUserTable(const QStringList & list, int accessRight);
+ void loadForceCombos();
+
+ void loadUsers(const QString & validUsersStr,
+ const QString & readListStr,
+ const QString & writeListStr,
+ const QString & adminUsersStr,
+ const QString & invalidUsersStr);
+
+ void saveUsers(QString & validUsersStr,
+ QString & readListStr,
+ QString & writeListStr,
+ QString & adminUsersStr,
+ QString & invalidUsersStr);
+
+ bool nameIsGroup(const QString & name);
+ QString removeGroupTag(const QString & name);
+ QString removeQuotationMarks(const QString & name);
+ void addUserToUserTable(const QString & user, int accessRight);
+
+protected slots:
+ virtual void addUserBtnClicked();
+ virtual void addGroupBtnClicked();
+ virtual void removeSelectedBtnClicked();
+ virtual void expertBtnClicked();
+};
+
+#endif
diff --git a/filesharing/advanced/nfs/Makefile.am b/filesharing/advanced/nfs/Makefile.am
new file mode 100644
index 00000000..f9395529
--- /dev/null
+++ b/filesharing/advanced/nfs/Makefile.am
@@ -0,0 +1,13 @@
+METASOURCES = AUTO
+AM_CPPFLAGS= $(all_includes)
+
+noinst_LTLIBRARIES = libfilesharenfs.la
+
+libfilesharenfs_la_SOURCES = \
+ nfsdialog.cpp \
+ nfshostdlg.cpp \
+ hostprops.ui \
+ nfsdialoggui.ui \
+ nfsfile.cpp \
+ nfsentry.cpp
+
diff --git a/filesharing/advanced/nfs/hostprops.ui b/filesharing/advanced/nfs/hostprops.ui
new file mode 100644
index 00000000..4ff97e28
--- /dev/null
+++ b/filesharing/advanced/nfs/hostprops.ui
@@ -0,0 +1,558 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>HostProps</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>HostProps</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>333</width>
+ <height>332</height>
+ </rect>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox" row="0" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>propertiesGrp</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>180</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>Box</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="title">
+ <string>Host Properties</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Name/address:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>nameEdit</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>nameEdit</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>LineEditPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Name / Address field&lt;/b&gt;
+&lt;p&gt;
+Here you can enter the host name or address.&lt;br&gt;
+The host may be specified in a number of ways:
+&lt;p&gt;
+&lt;i&gt;single host&lt;/i&gt;
+&lt;p&gt;
+ This is the most common format. You may specify a host either by an abbreviated name recognized by the resolver, the fully qualified domain name, or an IP address.
+&lt;/p&gt;
+
+&lt;i&gt;netgroups&lt;/i&gt;
+&lt;p&gt;
+ NIS netgroups may be given as @group. Only the host part of each netgroup members is consider in checking for membership. Empty host parts or those containing a single dash (-) are ignored.
+&lt;/p&gt;
+
+&lt;i&gt;wildcards&lt;/i&gt;
+&lt;p&gt;
+ Machine names may contain the wildcard characters * and ?. This can be used to make the exports file more compact; for instance, *.cs.foo.edu matches all hosts in the domain cs.foo.edu. However, these wildcard characters do not match the dots in a domain name, so the above pattern does not include hosts such as a.b.cs.foo.edu.
+&lt;/p&gt;
+
+&lt;i&gt;IP networks&lt;/i&gt;
+&lt;p&gt;
+ You can also export directories to all hosts on an IP (sub-) network simultaneously. This is done by specifying an IP address and netmask pair as address/netmask where the netmask can be specified in dotted-decimal format, or as a contiguous mask length (for example, either `/255.255.252.0' or `/22' appended to the network base address result in identical subnetworks with 10 bits of host).
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>publicChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Public access</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Public access&lt;/b&gt;
+&lt;p&gt;
+If you check this, the host address will be a single wildcard , which means public access.
+This is just the same as if you would enter a wildcard in the address field.
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>GroupBox7</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox" row="0" column="0">
+ <property name="name">
+ <cstring>readOnlyChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Writable</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Writable&lt;/b&gt;
+&lt;p&gt;
+Allow both read and write requests on this NFS volume.
+&lt;/p&gt;
+&lt;p&gt;
+The default is to disallow any request which changes the filesystem
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>secureChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Insecure</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Insecure&lt;/b&gt;
+&lt;p&gt;
+If this option is checked, it is not required that requests originate on an internet port less than IPPORT_RESERVED (1024).
+&lt;/p&gt;
+&lt;p&gt;
+If unsure leave it unchecked.
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>syncChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Sync</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Sync&lt;/b&gt;
+&lt;p&gt;
+This option requests that all file writes be committed to disk before the write request completes. This is required for complete safety of data in the face of a server crash, but incurs a performance hit.
+&lt;/p&gt;
+&lt;p&gt;
+The default is to allow the server to write the data out whenever it is ready.
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0">
+ <property name="name">
+ <cstring>wdelayChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>No w&amp;delay</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;No wdelay&lt;/b&gt;
+&lt;p&gt;
+This option only has effect if sync is also set. The NFS server will normally delay committing a write request to disk slightly if it suspects that another related write request may be in progress or may arrive soon. This allows multiple write requests to be committed to disk with the one operation which can improve performance. If an NFS server received mainly small unrelated requests, this behavior could actually reduce performance, so no wdelay is available to turn it off. &lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0">
+ <property name="name">
+ <cstring>hideChk</cstring>
+ </property>
+ <property name="text">
+ <string>No &amp;hide</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;No hide&lt;/b&gt;
+&lt;p&gt;
+This option is based on the option of the same name provided in IRIX NFS. Normally, if a server exports two filesystems one of which is mounted on the other, then the client will have to mount both filesystems explicitly to get access to them. If it just mounts the parent, it will see an empty directory at the place where the other filesystem is mounted. That filesystem is "hidden".
+&lt;/p&gt;
+&lt;p&gt;
+Setting the nohide option on a filesystem causes it not to be hidden, and an appropriately authorized client will be able to move from the parent to that filesystem without noticing the change.
+&lt;/p&gt;
+&lt;p&gt;
+However, some NFS clients do not cope well with this situation as, for instance, it is then possible for two files in the one apparent filesystem to have the same inode number.
+&lt;/p&gt;
+&lt;p&gt;
+The nohide option is currently only effective on single host exports. It does not work reliably with netgroup, subnet, or wildcard exports.
+&lt;/p&gt;
+&lt;p&gt;
+This option can be very useful in some situations, but it should be used with due care, and only after confirming that the client system copes with the situation effectively.
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="5" column="0">
+ <property name="name">
+ <cstring>subtreeChk</cstring>
+ </property>
+ <property name="text">
+ <string>No su&amp;btree check</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;No subtree check&lt;/b&gt;
+&lt;p&gt;
+This option disables subtree checking, which has mild security implications, but can improve reliability is some circumstances.
+&lt;/p&gt;
+&lt;p&gt;
+If a subdirectory of a filesystem is exported, but the whole filesystem is not, then whenever a NFS request arrives, the server must check not only that the accessed file is in the appropriate filesystem (which is easy) but also that it is in the exported tree (which is harder). This check is called the subtree_check.
+&lt;/p&gt;
+&lt;p&gt;
+In order to perform this check, the server must include some information about the location of the file in the "filehandle" that is given to the client. This can cause problems with accessing files that are renamed while a client has them open (though in many simple cases it will still work).
+&lt;/p&gt;
+&lt;p&gt;
+subtree checking is also used to make sure that files inside directories to which only root has access can only be accessed if the filesystem is exported with no_root_squash (see below), even the file itself allows more general access.
+&lt;/p&gt;
+&lt;p&gt;
+As a general guide, a home directory filesystem, which is normally exported at the root and may see lots of file renames, should be exported with subtree checking disabled. A filesystem which is mostly read-only, and at least does not see many file renames (e.g. /usr or /var) and for which subdirectories may be exported, should probably be exported with subtree checks enabled.
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="6" column="0">
+ <property name="name">
+ <cstring>secureLocksChk</cstring>
+ </property>
+ <property name="text">
+ <string>Insecure loc&amp;ks</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Insecure locks&lt;/b&gt;
+&lt;p&gt;
+This option tells the NFS server not to require authentication of locking requests (i.e. requests which use the NLM protocol). Normally the NFS server will require a lock request to hold a credential for a user who has read access to the file. With this flag no access checks will be performed.
+&lt;/p&gt;
+&lt;p&gt;
+Early NFS client implementations did not send credentials with lock requests, and many current NFS clients still exist which are based on the old implementations. Use this flag if you find that you can only lock files which are world readable.
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QGroupBox" row="1" column="1">
+ <property name="name">
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>User Mapping</string>
+ </property>
+ <property name="alignment">
+ <set>AlignAuto</set>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>allSquashChk</cstring>
+ </property>
+ <property name="text">
+ <string>All s&amp;quash</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;All squash&lt;/b&gt;
+&lt;p&gt;
+Map all uids and gids to the anonymous user. Useful for NFS-exported public FTP directories, news spool directories, etc. &lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>rootSquashChk</cstring>
+ </property>
+ <property name="text">
+ <string>No &amp;root squash</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;No root squash&lt;/b&gt;
+&lt;p&gt;
+Turn of root squashing. This option is mainly useful for diskless clients.
+&lt;/p&gt;
+&lt;i&gt;root squashing&lt;/i&gt;
+&lt;p&gt;
+Map requests from uid/gid 0 to the anonymous uid/gid. Note that this does not apply to any other uids that might be equally sensitive, such as user bin.
+&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout15</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Anonym. &amp;UID:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>anonuidEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Anonym. UID/GID&lt;/b&gt; &lt;p&gt; These options explicitly set the uid and gid of the anonymous account. This option is primarily useful for PC/NFS clients, where you might want all requests appear to be from one user. &lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>anonuidEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>100</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>FF</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Anonym. &amp;GID:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>anongidEdit</cstring>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>&lt;b&gt;Anonym. UID/GID&lt;/b&gt; &lt;p&gt; These options explicitly set the uid and gid of the anonymous account. This option is primarily useful for PC/NFS clients, where you might want all requests appear to be from one user. &lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit">
+ <property name="name">
+ <cstring>anongidEdit</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>50</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>FF</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>publicChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>nameEdit</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>readOnlyChk</sender>
+ <signal>clicked()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>secureChk</sender>
+ <signal>clicked()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>syncChk</sender>
+ <signal>clicked()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>wdelayChk</sender>
+ <signal>pressed()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>subtreeChk</sender>
+ <signal>pressed()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>secureLocksChk</sender>
+ <signal>pressed()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>allSquashChk</sender>
+ <signal>pressed()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>rootSquashChk</sender>
+ <signal>pressed()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>nameEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>hideChk</sender>
+ <signal>clicked()</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>syncChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>wdelayChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>anonuidEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+ <connection>
+ <sender>anongidEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>HostProps</receiver>
+ <slot>setModified()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">hostprops.ui.h</include>
+</includes>
+<signals>
+ <signal>modified()</signal>
+</signals>
+<slots>
+ <slot>setModified()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/nfs/hostprops.ui.h b/filesharing/advanced/nfs/hostprops.ui.h
new file mode 100644
index 00000000..5d456a22
--- /dev/null
+++ b/filesharing/advanced/nfs/hostprops.ui.h
@@ -0,0 +1,13 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename slots use Qt Designer which will
+** update this file, preserving your code. Create an init() slot in place of
+** a constructor, and a destroy() slot in place of a destructor.
+*****************************************************************************/
+
+
+void HostProps::setModified()
+{
+ emit modified();
+}
diff --git a/filesharing/advanced/nfs/nfsdialog.cpp b/filesharing/advanced/nfs/nfsdialog.cpp
new file mode 100644
index 00000000..7e88f2be
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsdialog.cpp
@@ -0,0 +1,216 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+
+#include <qradiobutton.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qlineedit.h>
+#include <qbuttongroup.h>
+#include <qlayout.h>
+
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <klistview.h>
+#include <kaccel.h>
+
+#include "nfsdialog.h"
+#include "nfsentry.h"
+#include "nfshostdlg.h"
+#include "nfsfile.h"
+#include "nfsdialoggui.h"
+
+NFSDialog::NFSDialog(QWidget * parent, NFSEntry* entry)
+ : KDialogBase(Plain, i18n("NFS Options"), Ok|Cancel, Ok, parent),
+ m_nfsEntry(entry),
+ m_modified(false)
+{
+ if (m_nfsEntry)
+ m_workEntry = m_nfsEntry->copy();
+ else
+ kdWarning() << "NFSDialog::NFSDialog: entry is null!" << endl;
+
+ initGUI();
+ initSlots();
+ initListView();
+}
+
+NFSDialog::~NFSDialog()
+{
+ delete m_workEntry;
+}
+
+void NFSDialog::initGUI() {
+ QWidget* page = plainPage();
+ m_gui = new NFSDialogGUI(page);
+
+ QVBoxLayout *layout = new QVBoxLayout( page );
+ layout->addWidget( m_gui );
+
+ KAccel* accel = new KAccel( m_gui->listView );
+ accel->insert( "Delete", Qt::Key_Delete, this, SLOT(slotRemoveHost()));
+}
+
+void NFSDialog::initSlots()
+{
+ connect( m_gui->removeHostBtn, SIGNAL(clicked()), this, SLOT( slotRemoveHost()));
+ connect( m_gui->addHostBtn, SIGNAL(clicked()), this, SLOT( slotAddHost()));
+ connect( m_gui->modifyHostBtn, SIGNAL(clicked()), this, SLOT( slotModifyHost()));
+ connect( m_gui->listView, SIGNAL(doubleClicked(QListViewItem*)),
+ this, SLOT( slotModifyHost()));
+
+}
+
+void NFSDialog::initListView()
+{
+ if (m_workEntry) {
+ HostIterator it = m_workEntry->getHosts();
+
+ NFSHost* host;
+ while ( (host = it.current()) != 0 ) {
+ ++it;
+ createItemFromHost(host);
+ }
+ }
+}
+
+QListViewItem* NFSDialog::createItemFromHost(NFSHost* host)
+{
+ if (!host)
+ return 0;
+
+ QListViewItem* item = new QListViewItem(m_gui->listView);
+ updateItem(item, host);
+ return item;
+}
+
+void NFSDialog::updateItem(QListViewItem* item, NFSHost* host)
+{
+ item->setText(0,host->name);
+ item->setText(1,host->paramString());
+}
+
+void NFSDialog::slotAddHost()
+{
+ NFSHost *host = new NFSHost();
+
+ // Set some secure parameters
+ //host->allSquash=true;
+ host->readonly=true;
+
+ HostList hostList;
+ hostList.append(host);
+
+ NFSHostDlg *dlg = new NFSHostDlg(this, &hostList, m_workEntry);
+ dlg->exec();
+
+
+ if (dlg->result()==QDialog::Accepted) {
+ m_workEntry->addHost(host);
+ createItemFromHost(host);
+ setModified();
+ } else {
+ delete host;
+ }
+
+ delete dlg;
+}
+
+void NFSDialog::slotOk() {
+ if (m_modified) {
+ m_nfsEntry->copyFrom(m_workEntry);
+ }
+ KDialogBase::slotOk();
+}
+
+void NFSDialog::slotRemoveHost()
+{
+ QPtrList<QListViewItem> items = m_gui->listView->selectedItems();
+ if (items.count()==0)
+ return;
+
+ QListViewItem *item;
+ for ( item = items.first(); item; item = items.next() ) {
+ QString name = item->text(0);
+ m_gui->listView->takeItem(item);
+
+ NFSHost* host = m_workEntry->getHostByName(name);
+ if (host) {
+ m_workEntry->removeHost(host);
+ } else {
+ kdWarning() << "NFSDialog::slotRemoveHost: no host "
+ << name << " << found!" << endl;
+ }
+
+ }
+
+ m_gui->modifyHostBtn->setDisabled(true);
+ m_gui->removeHostBtn->setDisabled(true);
+ setModified();
+}
+
+void NFSDialog::slotModifyHost()
+{
+ QPtrList<QListViewItem> items = m_gui->listView->selectedItems();
+ if (items.count()==0)
+ return;
+
+ HostList hostList;
+
+ QListViewItem *item;
+ for ( item = items.first(); item; item = items.next() ) {
+
+ NFSHost* host = m_workEntry->getHostByName(item->text(0));
+ if (host)
+ hostList.append(host);
+ else
+ kdWarning() << "NFSDialog::slogModifyHost: host "
+ << item->text(0) << " is null!" << endl;
+ }
+
+ NFSHostDlg *dlg = new NFSHostDlg(this, &hostList, m_workEntry);
+ if (dlg->exec() == QDialog::Accepted &&
+ dlg->isModified())
+ {
+ setModified();
+ }
+
+ delete dlg;
+
+ NFSHost* host = hostList.first();
+ for ( item = items.first(); item; item = items.next() ) {
+ if (item && host)
+ updateItem( item,host);
+ host = hostList.next();
+ }
+}
+
+void NFSDialog::setModified()
+{
+ m_modified = true;
+}
+
+bool NFSDialog::modified() {
+ return m_modified;
+}
+
+#include "nfsdialog.moc"
+
diff --git a/filesharing/advanced/nfs/nfsdialog.h b/filesharing/advanced/nfs/nfsdialog.h
new file mode 100644
index 00000000..f6128230
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsdialog.h
@@ -0,0 +1,58 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef NFSDIALOG_H
+#define NFSDIALOG_H
+
+#include <kdialogbase.h>
+
+class NFSEntry;
+class NFSHost;
+class QListViewItem;
+class NFSFile;
+class NFSDialogGUI;
+
+class NFSDialog : public KDialogBase
+{
+Q_OBJECT
+public:
+ NFSDialog(QWidget * parent, NFSEntry* entry);
+ ~NFSDialog();
+ bool modified();
+protected:
+ NFSEntry * m_nfsEntry;
+ NFSEntry * m_workEntry;
+ NFSDialogGUI* m_gui;
+
+ bool m_modified;
+ QListViewItem* createItemFromHost(NFSHost* host);
+ void updateItem(QListViewItem* item, NFSHost* host);
+ void initGUI();
+ void initListView();
+ void initSlots();
+ void initWorkEntry();
+protected slots:
+ void slotAddHost();
+ void slotRemoveHost();
+ void slotModifyHost();
+ virtual void slotOk();
+ void setModified();
+};
+
+#endif
diff --git a/filesharing/advanced/nfs/nfsdialoggui.ui b/filesharing/advanced/nfs/nfsdialoggui.ui
new file mode 100644
index 00000000..002ae30a
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsdialoggui.ui
@@ -0,0 +1,156 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>NFSDialogGUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>NFSDialogGUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>466</width>
+ <height>338</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="title">
+ <string>Allowed &amp;Hosts</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>A list of allowed hosts</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Here you can see a list of hosts which are allowed to access this directory via NFS.
+The first column shows the name or address of the host, the second column shows the access parameters. The name '*' donates public access.</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>addHostBtn</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Add Host...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>modifyHostBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Mo&amp;dify Host...</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>removeHostBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Remove Host</string>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KListView" row="0" column="0" rowspan="4" colspan="1">
+ <column>
+ <property name="text">
+ <string>Name/Address</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Parameters</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>listView</cstring>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>Extended</enum>
+ </property>
+ <property name="fullWidth">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>listView</sender>
+ <signal>selectionChanged()</signal>
+ <receiver>NFSDialogGUI</receiver>
+ <slot>listView_selectionChanged()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>addHostBtn</tabstop>
+ <tabstop>modifyHostBtn</tabstop>
+ <tabstop>removeHostBtn</tabstop>
+</tabstops>
+<includes>
+ <include location="local" impldecl="in implementation">nfsdialoggui.ui.h</include>
+</includes>
+<slots>
+ <slot>listView_selectionChanged()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/nfs/nfsdialoggui.ui.h b/filesharing/advanced/nfs/nfsdialoggui.ui.h
new file mode 100644
index 00000000..85894340
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsdialoggui.ui.h
@@ -0,0 +1,18 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename slots use Qt Designer which will
+** update this file, preserving your code. Create an init() slot in place of
+** a constructor, and a destroy() slot in place of a destructor.
+*****************************************************************************/
+
+
+
+
+
+void NFSDialogGUI::listView_selectionChanged()
+{
+ bool empty = listView->selectedItems().isEmpty();
+ modifyHostBtn->setDisabled(empty);
+ removeHostBtn->setDisabled(empty);
+}
diff --git a/filesharing/advanced/nfs/nfsentry.cpp b/filesharing/advanced/nfs/nfsentry.cpp
new file mode 100644
index 00000000..4144cc7c
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsentry.cpp
@@ -0,0 +1,381 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#include <kdebug.h>
+
+#include "nfsentry.h"
+
+NFSHost::NFSHost(const QString & hostString)
+{
+ readonly = true;
+
+ QString s = hostString;
+
+ int l = s.find('(');
+ int r = s.find(')');
+
+ initParams();
+
+ // get hostname
+ if (l>=0)
+ name = s.left(l);
+ else
+ name = s;
+
+ kdDebug(5009) << "NFSHost: name='" << name << "'" << endl;
+
+ if (l>=0 && r>=0)
+ {
+ QString params = s.mid(l+1,r-l-1);
+
+ parseParamsString(params);
+ }
+}
+
+NFSHost::NFSHost() {
+ initParams();
+ name="";
+}
+
+NFSHost::~NFSHost()
+{
+}
+
+/**
+ * Set the parameters to their default values
+ */
+void NFSHost::initParams()
+{
+ readonly = true;
+ sync = false;
+ secure = true;
+ wdelay = true;
+ hide = true;
+ subtreeCheck = true;
+ secureLocks = true;
+ allSquash = false;
+ rootSquash = true;
+
+ anonuid = 65534;
+ anongid = 65534;
+}
+
+
+void NFSHost::parseParamsString(const QString & s)
+{
+
+ if (s.isEmpty())
+ return;
+
+ int i;
+
+ QString rest = s;
+ QString p;
+
+ do
+ {
+ i = rest.find(",",0);
+
+ if (i==-1)
+ p = rest;
+ else
+ {
+ p = rest.left( i );
+ rest = rest.mid(i+1);
+ }
+
+ setParam(p);
+ }
+ while (i>-1);
+
+}
+
+QString NFSHost::paramString() const
+{
+ QString s;
+
+ if (!readonly) s+="rw,";
+ if (!rootSquash) s+="no_root_squash,";
+ if (!secure) s+="insecure,";
+ if (!secureLocks) s+="insecure_locks,";
+ if (!subtreeCheck) s+="no_subtree_check,";
+ if (sync)
+ s+="sync,";
+ else
+ s+="async,";
+
+ if (!wdelay) s+="wdelay,";
+ if (allSquash) s+="all_squash,";
+ if (!hide) s+="nohide,";
+
+ if (anongid!=65534)
+ s+=QString("anongid=%1,").arg(anongid);
+
+ if (anonuid!=65534)
+ s+=QString("anonuid=%1,").arg(anonuid);
+
+ // get rid of the last ','
+ s.truncate(s.length()-1);
+
+ return s;
+}
+
+QString NFSHost::toString() const
+{
+ QString s = name;
+
+ s+='(';
+ s+=paramString();
+ s+=')';
+
+ return s;
+
+}
+
+NFSHost* NFSHost::copy() const {
+ NFSHost* result = new NFSHost();
+
+ result->name = name;
+
+ result->readonly = readonly;
+ result->sync = sync;
+ result->secure = secure;
+ result->wdelay = wdelay;
+ result->hide = hide;
+ result->subtreeCheck = subtreeCheck;
+ result->secureLocks = secureLocks;
+ result->allSquash = allSquash;
+ result->rootSquash = rootSquash;
+
+ result->anonuid = anonuid;
+ result->anongid = anongid;
+
+ return result;
+}
+
+bool NFSHost::isPublic() const {
+ return name == "*";
+}
+
+void NFSHost::setParam(const QString & s)
+{
+ QString p = s.lower();
+
+ if (p=="ro") {
+ readonly = true;
+ return; }
+
+ if (p=="rw") {
+ readonly = false;
+ return; }
+
+ if (p=="sync") {
+ sync = true;
+ return; }
+
+ if (p=="async") {
+ sync = false;
+ return; }
+
+ if (p=="secure") {
+ secure = true;
+ return; }
+
+ if (p=="insecure") {
+ secure = false;
+ return; }
+
+ if (p=="wdelay") {
+ wdelay = true;
+ return; }
+
+ if (p=="no_wdelay") {
+ wdelay = false;
+ return; }
+
+ if (p=="hide") {
+ hide = true;
+ return; }
+
+ if (p=="nohide") {
+ hide = false;
+ return; }
+
+ if (p=="subtree_check") {
+ subtreeCheck = true;
+ return; }
+
+ if (p=="no_subtree_check") {
+ subtreeCheck = false;
+ return; }
+
+ if (p=="secure_locks" ||
+ p=="auth_nlm") {
+ secureLocks = true;
+ return; }
+
+ if (p=="insecure_locks" ||
+ p=="no_auth_nlm" ) {
+ secureLocks = true;
+ return; }
+
+ if (p=="all_squash") {
+ allSquash = true;
+ return; }
+
+ if (p=="no_all_squash") {
+ allSquash = false;
+ return; }
+
+ if (p=="root_squash") {
+ rootSquash = true;
+ return; }
+
+ if (p=="no_root_squash") {
+ rootSquash = false;
+ return; }
+
+ int i = p.find("=",0);
+
+ // get anongid or anonuid
+ if (i>-1)
+ {
+ QString name = p.left(i).lower();
+ kdDebug(5009) << name << endl;
+
+ QString value = p.mid(i+1);
+ kdDebug(5009) << value << endl;
+
+ if (name=="anongid")
+ anongid = value.toInt();
+
+ if (name=="anonuid")
+ anonuid = value.toInt();
+ }
+
+}
+
+NFSEntry::NFSEntry(const QString & path)
+{
+ _hosts.setAutoDelete(true);
+ setPath(path);
+}
+
+NFSEntry::~NFSEntry()
+{
+}
+
+void NFSEntry::clear() {
+ _hosts.clear();
+}
+
+NFSEntry* NFSEntry::copy() {
+ NFSEntry* result = new NFSEntry(path());
+ result->copyFrom(this);
+ return result;
+}
+
+void NFSEntry::copyFrom(NFSEntry* entry) {
+ clear();
+ HostIterator it = entry->getHosts();
+
+ NFSHost* host;
+ while ( (host = it.current()) != 0 ) {
+ ++it;
+ addHost(host->copy());
+ }
+}
+
+QString NFSEntry::toString() const
+{
+ QString s = _path.stripWhiteSpace();
+
+ if (_path.find(' ') > -1) {
+ s = '"'+s+'"';
+ }
+
+ s += ' ';
+
+ HostIterator it = getHosts();
+
+ NFSHost* host;
+
+ while ( (host = it.current()) != 0 )
+ {
+ ++it;
+ s+= host->toString() ;
+ if (it.current())
+ s+= " \\\n\t ";
+ }
+
+
+ return s;
+}
+
+void NFSEntry::addHost(NFSHost * host)
+{
+ _hosts.append(host);
+}
+
+void NFSEntry::removeHost(NFSHost * host)
+{
+ _hosts.remove(host);
+}
+
+NFSHost* NFSEntry::getHostByName(const QString & name) const
+{
+ HostIterator it = getHosts();
+ NFSHost* host;
+
+ while ( (host = it.current()) != 0 )
+ {
+ ++it;
+
+ if (host->name==name)
+ return host;
+ }
+
+ return 0;
+}
+
+NFSHost* NFSEntry::getPublicHost() const
+{
+ NFSHost* result = getHostByName("*");
+ if (result)
+ return result;
+
+ return getHostByName(QString::null);
+}
+
+
+HostIterator NFSEntry::getHosts() const
+{
+ return HostIterator(_hosts);
+}
+
+QString NFSEntry::path() const
+{
+ return _path;
+}
+
+void NFSEntry::setPath(const QString & path)
+{
+ _path = path;
+}
+
diff --git a/filesharing/advanced/nfs/nfsentry.h b/filesharing/advanced/nfs/nfsentry.h
new file mode 100644
index 00000000..6003412d
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsentry.h
@@ -0,0 +1,120 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef NFSENTRY_H
+#define NFSENTRY_H
+
+
+#include <qstring.h>
+#include <qptrlist.h>
+
+
+class NFSHost
+{
+public:
+ NFSHost(const QString & hostString);
+ ~NFSHost();
+ NFSHost();
+
+ bool readonly;
+ bool sync;
+ bool secure;
+ bool wdelay;
+ bool hide;
+ bool subtreeCheck;
+ bool secureLocks;
+ bool allSquash;
+ bool rootSquash;
+
+ int anonuid;
+ int anongid;
+
+ QString name;
+
+ QString paramString() const;
+ QString toString() const;
+ bool isPublic() const;
+
+ /** returns a copy of this host */
+ NFSHost* copy() const;
+protected:
+ void parseParamsString(const QString &);
+ void setParam(const QString &);
+ void initParams();
+};
+
+
+
+typedef QPtrList<NFSHost> HostList;
+typedef QPtrListIterator<NFSHost> HostIterator;
+
+class NFSLine {
+public:
+ virtual QString toString() const = 0;
+};
+
+typedef QPtrList<NFSLine> NFSLineList;
+typedef QPtrListIterator<NFSLine> NFSLineIterator;
+
+class NFSEmptyLine : public NFSLine {
+public:
+ virtual QString toString() const { return QString::fromLatin1("\n"); }
+ virtual ~NFSEmptyLine() {};
+};
+
+class NFSComment : public NFSLine {
+public:
+ NFSComment(const QString & s) { comment = s; }
+ virtual ~NFSComment() {};
+ QString comment;
+ virtual QString toString() const { return comment; }
+};
+
+class NFSEntry : public NFSLine {
+public:
+ NFSEntry(const QString & path);
+ virtual ~NFSEntry();
+
+ void addHost(NFSHost * host);
+ void removeHost(NFSHost * host);
+ NFSHost* getHostByName(const QString & name) const;
+ NFSHost* getPublicHost() const;
+ HostIterator getHosts() const;
+
+ /** Creates a deep copy of this entry */
+ NFSEntry * copy();
+
+ /** clears all hosts and makes a deep copy of
+ * the given entry
+ */
+ void copyFrom(NFSEntry* entry);
+
+ /** removes all hosts */
+ void clear();
+ QString path() const;
+ void setPath(const QString &);
+
+ virtual QString toString() const;
+
+protected:
+ HostList _hosts;
+ QString _path;
+};
+
+#endif
diff --git a/filesharing/advanced/nfs/nfsfile.cpp b/filesharing/advanced/nfs/nfsfile.cpp
new file mode 100644
index 00000000..229eb983
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsfile.cpp
@@ -0,0 +1,261 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#include <pwd.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <qfileinfo.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qstringlist.h>
+
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <knfsshare.h>
+#include <ktempfile.h>
+#include <kprocio.h>
+
+#include "nfsfile.h"
+
+NFSFile::NFSFile(const KURL & url, bool readonly)
+{
+ _lines.setAutoDelete(true);
+ _entries.setAutoDelete(false);
+ _url = url;
+ _readonly = readonly;
+}
+
+NFSFile::~NFSFile()
+{
+}
+
+void NFSFile::addEntry(NFSEntry *entry)
+{
+ _lines.append(entry);
+ _entries.append(entry);
+}
+
+void NFSFile::removeEntry(NFSEntry *entry)
+{
+ _entries.remove(entry);
+ _lines.remove(entry);
+}
+
+bool NFSFile::hasEntry(NFSEntry *entry)
+{
+ return 0 < _entries.contains(entry);
+}
+
+
+NFSEntry* NFSFile::getEntryByPath(const QString & path)
+{
+ QString testPath = path.stripWhiteSpace();
+ if ( testPath[testPath.length()-1] != '/' )
+ testPath += '/';
+
+ for (NFSEntry* entry = _entries.first(); entry; entry = _entries.next())
+ {
+ if (entry->path()==testPath)
+ return entry;
+ }
+
+ return 0L;
+}
+
+bool NFSFile::removeEntryByPath(const QString & path) {
+ NFSEntry* entry = getEntryByPath(path);
+ if (!entry)
+ return false;
+
+ removeEntry(entry);
+ return true;
+}
+
+EntryIterator NFSFile::getEntries()
+{
+ return EntryIterator(_entries);
+}
+
+
+
+
+bool NFSFile::load()
+{
+ QFile f(_url.path());
+
+ if ( !f.open(IO_ReadOnly) ) {
+ kdError() << "NFSFile::load: Could not open " << _url.path() << endl;
+ return false;
+ }
+
+ _entries.clear();
+ _lines.clear();
+
+ QTextStream s( &f );
+
+ bool continuedLine = false; // is true if the line before ended with a backslash
+ QString completeLine;
+
+ while ( !s.eof() )
+ {
+ QString currentLine = s.readLine().stripWhiteSpace();
+
+ if (continuedLine) {
+ completeLine += currentLine;
+ continuedLine = false;
+ }
+ else
+ completeLine = currentLine;
+
+ // is the line continued in the next line ?
+ if ( completeLine[completeLine.length()-1] == '\\' )
+ {
+ continuedLine = true;
+ // remove the ending backslash
+ completeLine.truncate( completeLine.length()-1 );
+ continue;
+ }
+
+ // empty lines
+ if (completeLine.isEmpty()) {
+ _lines.append(new NFSEmptyLine());
+ continue;
+ }
+
+ // comments
+ if ('#' == completeLine[0]) {
+ _lines.append(new NFSComment(completeLine));
+ continue;
+ }
+
+ QString path;
+ QString hosts;
+
+ // Handle quotation marks
+ if ( completeLine[0] == '"' ) {
+ int i = completeLine.find('"',1);
+ if (i == -1) {
+ kdError() << "NFSFile: Parse error: Missing quotation mark: "
+ << completeLine << endl;
+ continue;
+ }
+ path = completeLine.mid(1,i-1);
+ hosts = completeLine.mid(i+1);
+
+ } else { // no quotation marks
+ int i = completeLine.find(' ');
+ if (i == -1)
+ i = completeLine.find('\t');
+
+ if (i == -1)
+ path = completeLine;
+ else {
+ path = completeLine.left(i);
+ hosts = completeLine.mid(i+1).stripWhiteSpace();
+ }
+ }
+
+ // normalize path
+ if ( path[path.length()-1] != '/' )
+ path += '/';
+
+ kdDebug(5009) << "KNFSShare: Found path: '" << path << "'" << endl;
+ NFSEntry *entry = new NFSEntry(path);
+ QStringList hostList = QStringList::split(' ', hosts);
+
+ if (hostList.isEmpty()) {
+ NFSHost* host = new NFSHost("*");
+ entry->addHost(host);
+ } else {
+ QStringList::iterator it;
+ for ( it = hostList.begin(); it != hostList.end(); ++it ) {
+ NFSHost* host = new NFSHost((*it).stripWhiteSpace());
+ entry->addHost(host);
+ kdDebug(5009) << "KNFSShare: Found host: " << (*it) << " name='"
+ << host->name << "'" << endl;
+ }
+ }
+
+ kdDebug(5009) << "KNFSShare: Found hosts: " << hosts << "'" << endl;
+ this->addEntry(entry);
+ }
+
+ f.close();
+
+
+ return true;
+
+}
+
+void NFSFile::saveTo(QTextStream * stream) {
+ QPtrListIterator<NFSLine> it(_lines);
+
+ NFSLine *line;
+ while ( (line = it.current()) != 0 ) {
+ ++it;
+ *stream << line->toString() << endl;
+ }
+}
+
+bool NFSFile::saveTo(const QString& fileName) {
+ QFile file(fileName);
+ if (!file.open(IO_WriteOnly))
+ return false;
+
+ QTextStream stream(&file);
+ saveTo(&stream);
+ file.close();
+ return true;
+}
+
+bool NFSFile::save()
+{
+ if (QFileInfo(_url.path()).isWritable() ) {
+ saveTo(_url.path());
+ } else
+ {
+
+ KTempFile tempFile;
+ saveTo(tempFile.name());
+ tempFile.close();
+ tempFile.setAutoDelete( true );
+
+ KProcIO proc;
+
+ QString command = QString("cp %1 %2")
+ .arg(KProcess::quote( tempFile.name() ))
+ .arg(KProcess::quote( _url.path() ));
+
+ if (restartNFSServer)
+ command +=";exportfs -ra";
+
+ if (!QFileInfo(_url.path()).isWritable() )
+ proc<<"kdesu" << "-d" << "-c"<<command;
+
+ if (!proc.start(KProcess::Block, true)) {
+ return false;
+ }
+
+
+ }
+ return true;
+}
+
diff --git a/filesharing/advanced/nfs/nfsfile.h b/filesharing/advanced/nfs/nfsfile.h
new file mode 100644
index 00000000..3d493a04
--- /dev/null
+++ b/filesharing/advanced/nfs/nfsfile.h
@@ -0,0 +1,59 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef NFSFILE_H
+#define NFSFILE_H
+
+
+#include <kurl.h>
+#include "nfsentry.h"
+
+typedef QPtrList<NFSEntry> EntryList;
+typedef QPtrListIterator<NFSEntry> EntryIterator;
+
+class QTextStream;
+
+class NFSFile {
+public:
+ NFSFile(const KURL & , bool readonly = true);
+ ~NFSFile();
+
+ void addEntry(NFSEntry *);
+ void removeEntry(NFSEntry *);
+ bool hasEntry(NFSEntry *);
+ NFSEntry* getEntryByPath(const QString &);
+ bool removeEntryByPath(const QString &);
+ EntryIterator getEntries();
+
+ bool save();
+ bool saveTo(const QString& fileName);
+ void saveTo(QTextStream * stream);
+ bool load();
+
+ bool restartNFSServer;
+
+
+protected:
+ KURL _url;
+ bool _readonly;
+ EntryList _entries;
+ NFSLineList _lines;
+};
+
+#endif
diff --git a/filesharing/advanced/nfs/nfshostdlg.cpp b/filesharing/advanced/nfs/nfshostdlg.cpp
new file mode 100644
index 00000000..073170d6
--- /dev/null
+++ b/filesharing/advanced/nfs/nfshostdlg.cpp
@@ -0,0 +1,226 @@
+/***************************************************************************
+ nfshostdlg.cpp - description
+ -------------------
+ begin : Mon Apr 29 2002
+ copyright : (C) 2002 by Jan Sch�er
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program 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. *
+ * *
+ ***************************************************************************/
+
+#include <qcheckbox.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qwhatsthis.h>
+#include <qgroupbox.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+
+#include <assert.h>
+
+#include "nfshostdlg.h"
+#include "hostprops.h"
+#include "nfsentry.h"
+
+
+NFSHostDlg::NFSHostDlg(QWidget* parent, HostList* hosts, NFSEntry* entry)
+ : KDialogBase(Plain, i18n("Host Properties"), Ok|Cancel, Ok, parent),
+ m_hosts(hosts), m_nfsEntry(entry), m_modified(false)
+{
+
+ QWidget* page = plainPage();
+
+ m_gui = new HostProps(page);
+
+ QVBoxLayout *layout = new QVBoxLayout( page, 0, 6 );
+ layout->addWidget( m_gui );
+
+ connect( m_gui, SIGNAL(modified()), this, SLOT(setModified()));
+
+ init();
+
+}
+
+NFSHostDlg::~NFSHostDlg()
+{
+}
+
+void NFSHostDlg::init()
+{
+ if (m_hosts->count()==1) {
+ NFSHost* host = m_hosts->first();
+ assert(host);
+ m_gui->nameEdit->setText(host->name);
+ m_gui->publicChk->setChecked(host->isPublic());
+
+ setHostValues(host);
+
+ m_gui->nameEdit->setFocus();
+ } else {
+ m_gui->nameEdit->setDisabled(true);
+ m_gui->publicChk->setDisabled(true);
+
+ m_gui->readOnlyChk->setTristate();
+ m_gui->allSquashChk->setTristate();
+ m_gui->rootSquashChk->setTristate();
+ m_gui->hideChk->setTristate();
+ m_gui->secureChk->setTristate();
+ m_gui->secureLocksChk->setTristate();
+ m_gui->subtreeChk->setTristate();
+ m_gui->syncChk->setTristate();
+ m_gui->wdelayChk->setTristate();
+
+ for (NFSHost* host = m_hosts->first(); host; host = m_hosts->next()) {
+ setHostValues(host);
+ }
+ }
+}
+
+void NFSHostDlg::setHostValues(NFSHost* host) {
+ setCheckBoxValue(m_gui->readOnlyChk, ! host->readonly);
+ setCheckBoxValue(m_gui->allSquashChk, host->allSquash);
+ setCheckBoxValue(m_gui->rootSquashChk, ! host->rootSquash);
+ setCheckBoxValue(m_gui->hideChk, ! host->hide);
+ setCheckBoxValue(m_gui->secureChk, ! host->secure);
+ setCheckBoxValue(m_gui->secureLocksChk, ! host->secureLocks);
+ setCheckBoxValue(m_gui->subtreeChk, ! host->subtreeCheck);
+ setCheckBoxValue(m_gui->syncChk, host->sync);
+ setCheckBoxValue(m_gui->wdelayChk, ! host->wdelay);
+
+ setEditValue(m_gui->anonuidEdit,QString::number(host->anonuid));
+ setEditValue(m_gui->anongidEdit,QString::number(host->anongid));
+}
+
+void NFSHostDlg::setEditValue(QLineEdit* edit, const QString & value) {
+ if (edit->text().isEmpty())
+ return;
+
+ if (edit->text() == "FF")
+ edit->setText(value);
+ else
+ if (edit->text() != value)
+ edit->setText(QString::null);
+}
+
+void NFSHostDlg::setCheckBoxValue(QCheckBox* chk, bool value) {
+ if (chk->state() == QButton::NoChange)
+ return;
+
+ if (chk->isChecked()) {
+ if (! value)
+ chk->setNoChange();
+ } else {
+ if (value)
+ chk->setChecked(true);
+ }
+}
+
+
+void NFSHostDlg::slotOk()
+{
+ if (m_hosts->count()==1) {
+ NFSHost* host = m_hosts->first();
+ if (! saveName(host))
+ return;
+
+ saveValues(host);
+ } else {
+ for (NFSHost* host = m_hosts->first(); host; host = m_hosts->next()) {
+ saveValues(host);
+ }
+ }
+
+ KDialogBase::slotOk();
+}
+
+bool NFSHostDlg::saveName(NFSHost* host) {
+ if (m_gui->publicChk->isChecked()) {
+ NFSHost* publicHost = m_nfsEntry->getPublicHost();
+ if (publicHost && publicHost != host) {
+ KMessageBox::sorry(this,i18n("There already exists a public entry."),
+ i18n("Host Already Exists"));
+ m_gui->publicChk->setChecked(false);
+ return false;
+ }
+ host->name="*";
+ } else {
+ QString name = m_gui->nameEdit->text().stripWhiteSpace();
+ if (name.isEmpty()) {
+ KMessageBox::sorry(this,
+ i18n("Please enter a hostname or an IP address.").arg(name),
+ i18n("No Hostname/IP-Address"));
+ m_gui->nameEdit->setFocus();
+ return false;
+ } else {
+ NFSHost* host2 = m_nfsEntry->getHostByName(name);
+ if (host2 && host2 != host) {
+ KMessageBox::sorry(this,i18n("The host '%1' already exists.").arg(name),
+ i18n("Host Already Exists"));
+ m_gui->nameEdit->setFocus();
+ return false;
+ }
+ }
+ host->name=name;
+ }
+
+ return true;
+}
+
+
+void NFSHostDlg::saveValues(NFSHost* host) {
+
+ saveCheckBoxValue(host->readonly,m_gui->readOnlyChk,true);
+ saveCheckBoxValue(host->allSquash,m_gui->allSquashChk,false);
+ saveCheckBoxValue(host->rootSquash,m_gui->rootSquashChk,true);
+ saveCheckBoxValue(host->hide,m_gui->hideChk,true);
+ saveCheckBoxValue(host->secure,m_gui->secureChk,true);
+ saveCheckBoxValue(host->secureLocks,m_gui->secureLocksChk,true);
+ saveCheckBoxValue(host->subtreeCheck,m_gui->subtreeChk,true);
+ saveCheckBoxValue(host->sync,m_gui->syncChk,false);
+ saveCheckBoxValue(host->wdelay,m_gui->wdelayChk,true);
+
+ saveEditValue(host->anonuid,m_gui->anonuidEdit);
+ saveEditValue(host->anongid,m_gui->anongidEdit);
+}
+
+void NFSHostDlg::saveEditValue(int & value, QLineEdit* edit) {
+ if ( edit->text().isEmpty())
+ return;
+
+ value = edit->text().toInt();
+}
+
+void NFSHostDlg::saveCheckBoxValue(bool & value, QCheckBox* chk, bool neg) {
+ if (chk->state() == QButton::NoChange)
+ return;
+
+ if (neg)
+ value = ! chk->isChecked();
+ else
+ value = chk->isChecked();
+}
+
+
+
+bool NFSHostDlg::isModified() {
+ return m_modified;
+}
+
+
+void NFSHostDlg::setModified()
+{
+ m_modified = true;
+}
+
+#include "nfshostdlg.moc"
+
+
diff --git a/filesharing/advanced/nfs/nfshostdlg.h b/filesharing/advanced/nfs/nfshostdlg.h
new file mode 100644
index 00000000..6580b2bd
--- /dev/null
+++ b/filesharing/advanced/nfs/nfshostdlg.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+ nfshostdlg.h - description
+ -------------------
+ begin : Mon Apr 29 2002
+ copyright : (C) 2002 by Jan Schfer
+ email : janschaefer@users.sourceforge.net
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef NFSHOSTDLG_H
+#define NFSHOSTDLG_H
+
+#include <kdialogbase.h>
+#include "nfsentry.h"
+
+class NFSHost;
+class HostProps;
+class NFSEntry;
+class QCheckBox;
+class QLineEdit;
+
+
+class NFSHostDlg : public KDialogBase
+{
+Q_OBJECT
+public:
+ NFSHostDlg(QWidget* parent, HostList* hosts, NFSEntry* entry);
+ virtual ~NFSHostDlg();
+ bool isModified();
+protected:
+ HostList* m_hosts;
+ NFSEntry* m_nfsEntry;
+ HostProps* m_gui;
+ bool m_modified;
+
+ void init();
+protected slots:
+ virtual void slotOk();
+ void setModified();
+
+private:
+ void setHostValues(NFSHost* host);
+ void setEditValue(QLineEdit* edit, const QString & value);
+ void setCheckBoxValue(QCheckBox* chk, bool value);
+ bool saveName(NFSHost* host);
+ void saveValues(NFSHost* host);
+ void saveEditValue(int & value, QLineEdit* edit);
+ void saveCheckBoxValue(bool & value, QCheckBox* chk, bool neg);
+};
+
+#endif
diff --git a/filesharing/advanced/propsdlgplugin/Makefile.am b/filesharing/advanced/propsdlgplugin/Makefile.am
new file mode 100644
index 00000000..7322f0a8
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/Makefile.am
@@ -0,0 +1,25 @@
+METASOURCES = AUTO
+
+
+kde_module_LTLIBRARIES = fileshare_propsdlgplugin.la
+
+fileshare_propsdlgplugin_la_SOURCES = \
+ propsdlgshareplugin.cpp
+
+fileshare_propsdlgplugin_la_COMPILE_FIRST = propertiespagegui.h
+
+fileshare_propsdlgplugin_la_LIBADD = \
+ libpropsdlgplugin_common.la \
+ ../nfs/libfilesharenfs.la \
+ ../kcm_sambaconf/libfilesharesamba.la \
+ $(LIB_KIO)
+
+fileshare_propsdlgplugin_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+
+AM_CPPFLAGS = -I../kcm_sambaconf $(all_includes)
+
+kde_services_DATA = fileshare_propsdlgplugin.desktop
+
+# Shared with the 'simple' kcm
+noinst_LTLIBRARIES = libpropsdlgplugin_common.la
+libpropsdlgplugin_common_la_SOURCES = propertiespage.cpp propertiespagegui.ui
diff --git a/filesharing/advanced/propsdlgplugin/fileshare_propsdlgplugin.desktop b/filesharing/advanced/propsdlgplugin/fileshare_propsdlgplugin.desktop
new file mode 100644
index 00000000..f6064ed5
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/fileshare_propsdlgplugin.desktop
@@ -0,0 +1,102 @@
+[Desktop Entry]
+Type=Service
+Icon=fileshare
+Name=Fileshare Konqueror Directory Properties Page
+Name[bg]=Настройки за приставката за браузъра за споделяна на файлове
+Name[bn]=ফাইল ভাগাভাগি কনকরার ডিরেক্টরী বৈশিষ্ট্যাবলী পাতা
+Name[bs]=Stranica sa osobinama dijeljenja direktorija u Konqueroru
+Name[ca]=Pàgina de propietats de compartició de fitxers Konqueror
+Name[cs]=Stránka vlastností adresáře sdílení Konqueroru
+Name[da]=Fileshare Konqueror-mappens side med egenskaber
+Name[de]=Dateifreigabe Konqueror Ordner-Eigenschaftenseite
+Name[el]=Σελίδα ιδιοτήτων κοινόχρηστου καταλόγου του Konqueror
+Name[eo]=dosierujo-eco-paĝo
+Name[es]=Página de propiedades del directorio para compartir archivos de Konqueror
+Name[et]=Failijagamise Konquerori kataloogi omaduste lehekülg
+Name[eu]=Fitxategiak partekatzeko Konqueror direktorio propietateen orria
+Name[fa]=صفحۀ ویژگیهای فهرست راهنمای اشتراک پروندۀ Konqueror
+Name[fi]=Konquerorin tiedostojakojen ominaisuussivu
+Name[fr]=Page des propriétés d'un dossier de partage de Konqueror
+Name[gl]=Páxina coas Propiedades do Directorio de Ficheiros Compartidos de Konqueror
+Name[he]=דף מאפייני ספרית קבצים משותפת של Konqueror
+Name[hu]=Fájlmegosztási lap a Konqueror könyvtártulajdonságainál
+Name[is]=Skráastjóraeiginleikar Konqueror
+Name[it]=Pagina delle proprietà di Konqueror per la condivisione
+Name[ja]=Konqueror でファイル共有するディレクトリのプロパティのページ
+Name[ka]=Konqueror-ის ფაილთა გაზიარების თვისებების გვერდი
+Name[kk]=Konqueror файлдарын ортақтастыру каталогының қасиеттер беті
+Name[km]=ទំព័រ​លក្ខណៈ​សម្បត្តិ​ថត Konqueror សម្រាប់​ការ​ចែក​រំលែក
+Name[lt]=Bylų dalinimosi Konqueror aplanko nustatymų puslapis
+Name[mk]=Страница со параметри за делен именик во Konqueror
+Name[nb]=Fildeler – Side i Konquerors mappegenskaper
+Name[nds]=Konqueror Ornerfreegaav-Egenschappensiet
+Name[ne]=फाइल साझेदारी कन्क्वेरर डाइरेक्टरी विशेषता पृष्ठ
+Name[nl]=Configuratiepagina Konqueror bestanden delen
+Name[nn]=Side for katalogeigenskapar til fildeling i Konqueror
+Name[pa]=ਫਾਇਲ ਸਾਂਝ ਕੋਨਕਿਊਰੋਰ ਡਾਇਰੈਕਟਰੀ ਵਿਸ਼ੇਸ਼ਤਾ ਸਫ਼ਾ
+Name[pl]=Strona współdzielenia we właściwościach katalogu w Konquerorze
+Name[pt]=Página de Propriedades da Pasta de Partilha do Konqueror
+Name[pt_BR]=Página de Propriedades do Diretório de Compartilhamento de Arquivos do Konqueror
+Name[ru]=Страница свойств каталога для общего доступа
+Name[sk]=Nastavenie zdieľania priečinkov pre Konqueror
+Name[sl]=Stran z lastnostmi za souporabo mape
+Name[sr]=Страна Konqueror-а са својствима директоријума за дељење фајлова
+Name[sr@Latn]=Strana Konqueror-a sa svojstvima direktorijuma za deljenje fajlova
+Name[sv]=Konquerors fildelningssida med katalogegenskaper
+Name[ta]=Fileshare Konqueror அடைவு பண்புகளின் பக்கம்
+Name[tg]=Саҳифаи Феҳристи Хусусиятҳо оиди Konqueror Истифодабарии Муштараки Файлҳо
+Name[tr]=Dosya Paylaşımı Konqueror Dizin Özellikleri Sayfası
+Name[uk]=Сторінка властивостей каталогу для спільного доступу
+Name[zh_CN]=文件共享 Konqueror 目录属性页
+Name[zh_HK]=檔案分享 Konqueror 目錄屬性頁
+Name[zh_TW]=Konqueror 檔案分享目錄屬性頁
+Comment=Konqueror properties dialog plugin to share a directory with the local network
+Comment[bg]=Настройка на приставката за браузъра Konqueror за споделяна на директории в локалната мрежа
+Comment[bn]=স্থানীয় নেটওয়ার্কের সঙ্গে একটি ডিরেক্টরী ভাগাভাগি করতে কনকরার বৈশিষ্ট্যাবলী ডায়ালগ প্লাগিন
+Comment[bs]=Dodatak za prozor Konqueror postavki za dijeljenje direktorija u lokalnoj mreži
+Comment[ca]=Diàleg de propietats Konqueror de l'endollable per compartir un directori amb la xarxa local
+Comment[cs]=Modul dialogu vlastností Konqueroru pro sdílení adresářů v lokální síti
+Comment[da]=Konqueror egenskaber-dialog plugin til at dele en mappe med det lokale netværk
+Comment[de]=Konqueror Eigenschaftendialog-Plugin zur Freigabe eines Ordners in einem lokalen Netzwerk
+Comment[el]=Πρόσθετος διάλογος ρυθμίσεων του Konqueror για την κοινή χρήση ενός καταλόγου με το τοπικό δίκτυο
+Comment[en_GB]=Konqueror properties dialogue plugin to share a directory with the local network
+Comment[es]=Complemento de diálogo de propiedades de Konqueror para compartir un directorio con la red local
+Comment[et]=Konquerori omaduste dialoogi plugin kataloogi jagamiseks kohtvõrgus
+Comment[eu]=Konqueror-en propietateen elkarrizketa-koadro plugina direktorio bat sare lokalean partekatzeko
+Comment[fa]=ویژگیهای وصلۀ محاورۀ Konqueror برای اشتراک فهرست راهنما با شبکۀ محلی
+Comment[fi]=Konqueroroin laajennus, jolla voi jakaa kansioita lähiverkossa
+Comment[fr]=Module de Konqueror pour le partage d'un dossier sur le réseau local
+Comment[gl]=Diálogo de propiedades do plugin de Konqueror para compartir coa rede local
+Comment[he]=תוסף מאפייני דו-שיח של Konqueror כדי לשתף סיפריה עם רשת מקומית
+Comment[hu]=Konqueror tulajdonságablak-modul könyvtár megosztásához a helyi hálózaton
+Comment[it]=Plugin delle proprietà di Konqueror per condividere una cartella con la rete locale
+Comment[ja]=ローカルネットワークでディレクトリを共有する Konqueror プロパティダイアログのプラグイン
+Comment[ka]=Konqueror თვისებების დიალოგის მოდული ლოკალურ ქსელთან გასაზიარებლად
+Comment[kk]=Каталогты жергілікті желімен ортақтастыратын Konqueror қасиеттер диалогының плагин модулі
+Comment[km]=ប្រអប់​លក្ខណៈ​សម្បត្តិ Konqueror ដើម្បី​ចែក​រំលែក​ថត​នៅ​ក្នុង​បណ្ដាញ​មូលដ្ឋាន
+Comment[lt]=Konqueror nustatymų dialogo įskiepis, skirtas dalintis aplanku vietiniame tinkle
+Comment[mk]=Приклучок со дијалог за својства во Konqueror за делење на датотеки со локалната мрежа
+Comment[nb]=Programtillegg for Konquerors egenskapsdialog for å dele en mappe på lokalnettet
+Comment[nds]=Moduul för en Konqueror-Egenschappendialoog för't Freegeven vun Ornern in't lokale Nettwark
+Comment[ne]=स्थानीय सञ्जालसँग डाइरेक्टरी साझेदार गर्न कन्क्वेरर विशेषता संवाद प्लगइन
+Comment[nl]=Konqueror-plugin met instellingen om bestanden te delen via het lokale netwerk
+Comment[nn]=Konqueror-vising av eigenskapar til ein delt katalog i det lokale nettverket
+Comment[pl]=Wtyczka właściwości dla Konquerora umożliwiająca współdzielenie katalogu w sieci lokalnej
+Comment[pt]='Plugin' de janela de propriedades do Konqueror para partilhar uma pasta na rede local
+Comment[pt_BR]=Plug-in de diálogo de propriedades do Konqueror para o compartilhamento de uma pasta em uma rede local
+Comment[ru]=Модуль свойств Konqueror для разрешения общего доступа к каталогу из локальной сети
+Comment[sk]=Modul Konquerora pre zdieľanie priečinku v lokálnej sieti
+Comment[sl]=Vstavek za Konqueror s pogovornim oknom za lastnosti za souporabo mape v krajevnem omrežju
+Comment[sr]=Прикључак Konqueror-а за подешавање својстава дељења директоријума у локалној мрежи
+Comment[sr@Latn]=Priključak Konqueror-a za podešavanje svojstava deljenja direktorijuma u lokalnoj mreži
+Comment[sv]=Konqueror-insticksprogram med egenskapsdialogruta för att dela en katalog i det lokala nätverket
+Comment[ta]=Konqueror பண்புகளின் உரையாடல் செருகுகள் அடைவை சம்பா சேவையகத்துடன் பகிரவேண்டிய செருகுகள்
+Comment[tg]=Модули муколамаи хусусиятҳои Konqueror барои истифодабарии муштараки феҳрист бо шабакаи маҳалллӣ
+Comment[tr]=Yerel ağ ile dizin paylaşımı için Konqueror iletişim eklentisi özellikleri
+Comment[uk]=Втулок діалогу властивостей Konqueror для дозволу спільного доступу до каталогу з локальної мережі
+Comment[zh_CN]=可将目录与局域网共享的 Konqueror 属性页对话框插件
+Comment[zh_HK]=用於與本地網絡分享目錄的 Konqueror 屬性對話盒插件
+Comment[zh_TW]=Konqueror 屬性對話框外掛程式,用於在本地端網路上分享目錄
+X-KDE-Library=fileshare_propsdlgplugin
+X-KDE-Protocol=file
+ServiceTypes=KPropsDlg/Plugin,inode/directory
diff --git a/filesharing/advanced/propsdlgplugin/propertiespage.cpp b/filesharing/advanced/propsdlgplugin/propertiespage.cpp
new file mode 100644
index 00000000..e5b349da
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/propertiespage.cpp
@@ -0,0 +1,612 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#include <qcheckbox.h>
+#include <qtooltip.h>
+#include <qbuttongroup.h>
+#include <qfileinfo.h>
+#include <qlabel.h>
+#include <kpushbutton.h>
+#include <qtimer.h>
+
+#include <kfileshare.h>
+#include <knfsshare.h>
+#include <ksambashare.h>
+#include <klocale.h>
+#include <kurl.h>
+#include <kdebug.h>
+#include <kfile.h>
+#include <kurlrequester.h>
+#include <kmessagebox.h>
+#include <klineedit.h>
+#include <kprocio.h>
+#include <ktempfile.h>
+
+// NFS related
+#include "../nfs/nfsfile.h"
+#include "../nfs/nfsentry.h"
+#include "../nfs/nfsdialog.h"
+
+// Samba related
+#include "../kcm_sambaconf/sambafile.h"
+#include "../kcm_sambaconf/sambashare.h"
+#include "../kcm_sambaconf/sharedlgimpl.h"
+
+#include "propertiespage.h"
+
+#define FILESHARE_DEBUG 5009
+
+PropertiesPage::PropertiesPage(QWidget* parent, KFileItemList items,bool enterUrl)
+ : PropertiesPageGUI(parent),
+ m_enterUrl(enterUrl),
+ m_items(items),
+ m_nfsFile(0),
+ m_nfsEntry(0),
+ m_sambaFile(0),
+ m_sambaShare(0),
+ m_sambaChanged(false),
+ m_nfsChanged(false),
+ m_loaded(false)
+{
+ if (m_items.isEmpty()) {
+ shareFrame->setDisabled(true);
+ } else {
+ shareFrame->setEnabled(true);
+ // currently only one dir is allowed
+ m_path = m_items.first()->url().path(1);
+ }
+
+ if (m_enterUrl) {
+ shareChk->hide();
+ urlRq->setMode(KFile::Directory |
+ KFile::ExistingOnly |
+ KFile::LocalOnly );
+ urlRq->setURL(m_path);
+ connect( urlRq, SIGNAL(textChanged(const QString&)),
+ this, SLOT(urlRqTextChanged(const QString&)));
+ } else {
+ urlRq->hide();
+ folderLbl->hide();
+ }
+
+
+ enableSamba(false,i18n("Reading Samba configuration file ..."));
+ enableNFS(false,i18n("Reading NFS configuration file ..."));
+
+
+ //QTimer::singleShot(1, this, SLOT(load));
+ load();
+}
+
+PropertiesPage::~PropertiesPage()
+{
+ delete m_nfsFile;
+ delete m_sambaFile;
+}
+
+void PropertiesPage::urlRqTextChanged(const QString&) {
+ if (!m_enterUrl)
+ return;
+
+ KURL url(urlRq->url());
+ if (url.isLocalFile()) {
+ QFileInfo info(url.path(1));
+ if (info.exists() &&
+ info.isDir())
+ {
+ shareFrame->setEnabled(true);
+ return;
+ }
+ }
+
+ shareFrame->setDisabled(true);
+}
+
+void PropertiesPage::load() {
+ loadNFS();
+ loadSamba();
+
+ bool nfsShared = KNFSShare::instance()->isDirectoryShared(m_path);
+ bool sambaShared = KSambaShare::instance()->isDirectoryShared(m_path);
+
+ nfsChk->setChecked(nfsShared);
+ sambaChk->setChecked(sambaShared);
+
+ if (!m_enterUrl)
+ shareChk->setChecked(nfsShared || sambaShared);
+
+ m_loaded = true;
+}
+
+void PropertiesPage::enableNFS(bool b, const QString & message) {
+ nfsChk->setEnabled(b);
+ nfsGrp->setEnabled(b);
+ QToolTip::add(nfsChk,message);
+ QToolTip::add(nfsGrp,message);
+}
+
+void PropertiesPage::enableSamba(bool b, const QString & message) {
+ sambaChk->setEnabled(b);
+ sambaGrp->setEnabled(b);
+ QToolTip::add(sambaChk,message);
+ QToolTip::add(sambaGrp,message);
+}
+
+
+bool PropertiesPage::save() {
+ if (!hasChanged()) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: nothing changed." << endl;
+ return true;
+ }
+
+ if (!checkURL()) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: url check failed." << endl;
+ return false;
+ }
+
+ updateNFSEntry();
+ if (!updateSambaShare()) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: updateSambaShare failed!" << endl;
+ return false;
+ }
+
+ return save(m_nfsFile, m_sambaFile, m_nfsChanged, m_sambaChanged);
+}
+
+bool PropertiesPage::save(NFSFile* nfsFile, SambaFile* sambaFile, bool nfs, bool samba)
+{
+ QString nfsFileName = KNFSShare::instance()->exportsPath();
+ bool nfsNeedsKDEsu = false;
+
+ if (nfs) {
+ if (QFileInfo(nfsFileName).isWritable()) {
+ nfsFile->saveTo(nfsFileName);
+ } else {
+ nfsNeedsKDEsu = true;
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: nfs needs kdesu." << endl;
+ }
+ } else
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: nfs has not changed." << endl;
+
+
+ QString sambaFileName = KSambaShare::instance()->smbConfPath();
+ bool sambaNeedsKDEsu = false;
+ if (samba) {
+ if (QFileInfo(sambaFileName).isWritable()) {
+ sambaFile->saveTo(sambaFileName);
+ } else {
+ sambaNeedsKDEsu = true;
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: samba needs kdesu." << endl;
+ }
+ } else
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: samba has not changed." << endl;
+
+
+ if (nfsNeedsKDEsu || sambaNeedsKDEsu) {
+ KTempFile nfsTempFile;
+ nfsTempFile.setAutoDelete(true);
+ KTempFile sambaTempFile;
+ sambaTempFile.setAutoDelete(true);
+
+ KProcIO proc;
+
+ QString command;
+
+ if (nfsNeedsKDEsu) {
+ nfsFile->saveTo(nfsTempFile.name());
+ command += QString("cp %1 %2;exportfs -ra;")
+ .arg(KProcess::quote( nfsTempFile.name() ))
+ .arg(KProcess::quote( nfsFileName ));
+ }
+
+ if (sambaNeedsKDEsu) {
+ sambaFile->saveTo(sambaTempFile.name());
+ command += QString("cp %1 %2;")
+ .arg(KProcess::quote( sambaTempFile.name() ))
+ .arg(KProcess::quote( sambaFileName ));
+ }
+
+ proc<<"kdesu" << "-d" << "-c"<<command;
+
+ if (!proc.start(KProcess::Block, true)) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: kdesu command failed" << endl;
+ return false;
+ }
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::save: Saving successfull." << endl;
+ return true;
+}
+
+bool PropertiesPage::saveSamba() {
+ if (!updateSambaShare()) {
+ return false;
+ }
+
+ if (m_sambaChanged) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::saveSamba: saving..." << endl;
+ return m_sambaFile->save();
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::saveSamba: samba has not changed." << endl;
+ return true;
+}
+
+bool PropertiesPage::saveNFS() {
+ updateNFSEntry();
+ if (!m_nfsChanged) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::saveNFS: NFS did not change." << endl;
+ return true;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::saveNFS: saving..." << endl;
+ return m_nfsFile->save();
+}
+
+
+
+
+bool PropertiesPage::checkURL() {
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL" << endl;
+
+ if (!m_enterUrl)
+ return true;
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: enterUrl=true" << endl;
+
+ KURL url(urlRq->url());
+ QString path = url.path(1);
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: m_path='"
+ << m_path << "'" << endl;
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: path='"
+ << path << "'" << endl;
+
+ if (m_path == path) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: paths are equal" << endl;
+ return true;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: different path" << endl;
+
+
+ if (!url.isValid()) {
+ KMessageBox::sorry(this,i18n("Please enter a valid path."));
+ urlRq->setFocus();
+ urlRq->lineEdit()->selectAll();
+ return false;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: url is valid" << endl;
+
+ if (!url.isLocalFile()) {
+ KMessageBox::sorry(this,i18n("Only local folders can be shared."));
+ urlRq->setFocus();
+ urlRq->lineEdit()->selectAll();
+ return false;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: url is local file" << endl;
+
+ QFileInfo info(path);
+
+ if (!info.exists())
+ {
+ KMessageBox::sorry(this,i18n("The folder does not exists."));
+ urlRq->setFocus();
+ urlRq->lineEdit()->selectAll();
+ return false;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: folder exits" << endl;
+
+
+ if (!info.isDir())
+ {
+ KMessageBox::sorry(this,i18n("Only folders can be shared."));
+ urlRq->setFocus();
+ urlRq->lineEdit()->selectAll();
+ return false;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: path is dir" << endl;
+
+ if (KSambaShare::instance()->isDirectoryShared(path) ||
+ KNFSShare::instance()->isDirectoryShared(path))
+ {
+ KMessageBox::sorry(this,i18n("The folder is already shared."));
+ urlRq->setFocus();
+ urlRq->lineEdit()->selectAll();
+ return false;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::checkURL: folder not shared yet" << endl;
+ m_path = path;
+
+ return true;
+}
+
+bool PropertiesPage::loadNFS() {
+ if (!KFileShare::nfsEnabled()) {
+ enableNFS(false,i18n("The administrator does not allow sharing with NFS."));
+ return false;
+ }
+
+ delete m_nfsFile;
+ m_nfsFile = new NFSFile(KNFSShare::instance()->exportsPath());
+
+ if (!m_nfsFile->load()) {
+ enableNFS(false,i18n("Error: could not read NFS configuration file."));
+ return false;
+ }
+
+ enableNFS(true,"");
+
+ loadNFSEntry();
+ return true;
+}
+
+void PropertiesPage::loadNFSEntry() {
+ m_nfsEntry = m_nfsFile->getEntryByPath(m_path);
+ m_nfsChanged = false;
+
+ if (!m_nfsEntry) {
+ nfsChk->setChecked(false);
+ return;
+ }
+
+
+ NFSHost* publicHost = m_nfsEntry->getPublicHost();
+
+ if (publicHost) {
+ publicNFSChk->setChecked(true);
+ writableNFSChk->setChecked(!publicHost->readonly);
+ } else
+ publicNFSChk->setChecked(false);
+}
+
+void PropertiesPage::updateNFSEntry() {
+ if (shareChk->isChecked() &&
+ nfsChk->isChecked())
+ {
+ if (!m_nfsEntry) {
+ m_nfsEntry = new NFSEntry(m_path);
+ m_nfsFile->addEntry(m_nfsEntry);
+ m_nfsChanged = true;
+ }
+
+ NFSHost* publicHost = m_nfsEntry->getPublicHost();
+
+ if (publicNFSChk->isChecked()) {
+ if (!publicHost) {
+ publicHost = new NFSHost("*");
+ publicHost->allSquash=true;
+ m_nfsEntry->addHost(publicHost);
+ m_nfsChanged = true;
+ }
+
+ if (publicHost->readonly != !writableNFSChk->isChecked()) {
+ publicHost->readonly = !writableNFSChk->isChecked();
+ m_nfsChanged = true;
+ }
+ } else {
+ if (publicHost) {
+ m_nfsEntry->removeHost(publicHost);
+ m_nfsChanged = true;
+ }
+ }
+ } else { // unshare
+ if (m_nfsEntry) {
+ m_nfsFile->removeEntry(m_nfsEntry);
+ m_nfsEntry = 0;
+ m_nfsChanged = true;
+ }
+ }
+}
+
+void PropertiesPage::moreNFSBtn_clicked() {
+ updateNFSEntry();
+ NFSDialog* dlg = new NFSDialog(this,m_nfsEntry);
+ if (dlg->exec()==QDialog::Accepted &&
+ dlg->modified())
+ {
+ kdDebug(FILESHARE_DEBUG) << "NFSDialog::ok" << endl;
+ loadNFSEntry();
+ m_nfsChanged = true;
+ emit changed();
+ }
+ delete dlg;
+}
+
+bool PropertiesPage::loadSamba() {
+ if (!KFileShare::sambaEnabled()) {
+ enableSamba(false,i18n("The administrator does not allow sharing with Samba."));
+ return false;
+ }
+
+ delete m_sambaFile;
+ m_sambaFile = new SambaFile(KSambaShare::instance()->smbConfPath(), false);
+ if (! m_sambaFile->load()) {
+ enableSamba(false,i18n("Error: could not read Samba configuration file."));
+ return false;
+ }
+
+ enableSamba(true,"");
+ QString shareName = m_sambaFile->findShareByPath(m_path);
+ if (shareName.isNull()) {
+ sambaChk->setChecked(false);
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::loadSamba: shareName is null!"
+ << endl;
+ return false;
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::loadSamba: shareName="
+ << shareName << endl;
+
+ m_sambaShare = m_sambaFile->getShare(shareName);
+
+ loadSambaShare();
+ return true;
+}
+
+
+void PropertiesPage::loadSambaShare() {
+ if (! m_sambaShare) {
+ sambaChk->setChecked(false);
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::loadSambaShare: no share with name "
+ << m_sambaShare->getName() << endl;
+ return;
+ }
+
+ if (m_sambaShare->getBoolValue("public")) {
+ publicSambaChk->setChecked(true);
+ writableSambaChk->setChecked(m_sambaShare->getBoolValue("writable"));
+ } else
+ publicSambaChk->setChecked(false);
+
+
+ sambaNameEdit->setText(m_sambaShare->getName() );
+}
+
+void PropertiesPage::sambaChkToggled( bool b ) {
+ if (!m_loaded)
+ return;
+
+ if (sambaNameEdit->text().isEmpty())
+ sambaNameEdit->setText(getNewSambaName());
+}
+
+bool PropertiesPage::updateSambaShare() {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::updateSambaShare" << endl;
+
+ if (shareChk->isChecked() &&
+ sambaChk->isChecked())
+ {
+ if (m_enterUrl) {
+ if (m_path != urlRq->url()) {
+ m_path = urlRq->url();
+ }
+ }
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::updateSambaShare: m_path"
+ << m_path << endl;
+
+ if (!m_sambaShare) {
+ createNewSambaShare();
+ m_sambaChanged = true;
+ }
+
+ setSambaShareBoolValue("public", publicSambaChk);
+ setSambaShareBoolValue("writable", writableSambaChk);
+
+ if (sambaNameEdit->text().isEmpty()) {
+ KMessageBox::sorry(this, i18n("You have to enter a name for the Samba share."));
+ sambaNameEdit->setFocus();
+ return false;
+ }
+
+ if (sambaNameEdit->text() != m_sambaShare->getName()) {
+ SambaShare* otherShare = m_sambaFile->getShare(sambaNameEdit->text());
+ if (otherShare && otherShare != m_sambaShare) {
+ // There is another Share with the same name
+ KMessageBox::sorry(this, i18n("<qt>There is already a share with the name <strong>%1</strong>.<br> Please choose another name.</qt>").arg(sambaNameEdit->text()));
+ sambaNameEdit->selectAll();
+ sambaNameEdit->setFocus();
+ return false;
+ }
+ m_sambaShare->setName(sambaNameEdit->text());
+ m_sambaChanged = true;
+ }
+
+ if (m_sambaShare->getValue("path") != m_path) {
+ m_sambaShare->setValue("path", m_path);
+ m_sambaChanged = true;
+ }
+
+ } else {
+ if (m_sambaShare) {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::updateSambaShare: removing share" << endl;
+ m_sambaFile->removeShare(m_sambaShare);
+ m_sambaShare = 0;
+ m_sambaChanged = true;
+ }
+ }
+ return true;
+}
+
+void PropertiesPage::setSambaShareBoolValue(const QString & value,
+ QCheckBox* chk)
+{
+ bool v = m_sambaShare->getBoolValue(value);
+ if (v == chk->isChecked())
+ return;
+
+ m_sambaShare->setValue(value,chk->isChecked());
+ m_sambaChanged = true;
+}
+
+QString PropertiesPage::getNewSambaName() {
+ QString path = m_path;
+ if (path.isNull() && m_enterUrl) {
+ path = urlRq->url();
+ }
+
+ QString shareName = KURL(path).fileName();
+
+ if (!sambaNameEdit->text().isEmpty())
+ shareName = sambaNameEdit->text();
+
+ // Windows could have problems with longer names
+ shareName = shareName.left(12).upper();
+
+ if ( m_sambaFile->getShare(shareName) )
+ shareName = m_sambaFile->getUnusedName(shareName);
+
+ return shareName;
+}
+
+void PropertiesPage::createNewSambaShare() {
+
+ m_sambaShare = m_sambaFile->newShare(getNewSambaName(),m_path);
+
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::createNewSambaShare: "
+ << m_sambaShare->getName() << endl;
+
+}
+
+
+void PropertiesPage::moreSambaBtnClicked() {
+ kdDebug(FILESHARE_DEBUG) << "PropertiesPage::moreSambaBtnClicked()" << endl;
+ updateSambaShare();
+ ShareDlgImpl* dlg = new ShareDlgImpl(this,m_sambaShare);
+ dlg->directoryGrp->hide();
+ dlg->pixmapFrame->hide();
+ if (dlg->exec() == QDialog::Accepted &&
+ dlg->hasChanged()) {
+ m_sambaChanged = true;
+ changedSlot();
+ loadSambaShare();
+ }
+ delete dlg;
+}
+
+#include "propertiespage.moc"
+
diff --git a/filesharing/advanced/propsdlgplugin/propertiespage.h b/filesharing/advanced/propsdlgplugin/propertiespage.h
new file mode 100644
index 00000000..3becf6e7
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/propertiespage.h
@@ -0,0 +1,87 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef PROPERTIESPAGE_H
+#define PROPERTIESPAGE_H
+
+#include <kfileitem.h>
+#include "propertiespagegui.h"
+
+class NFSFile;
+class NFSEntry;
+class SambaFile;
+class SambaShare;
+class QCheckBox;
+
+class PropertiesPage : public PropertiesPageGUI
+{
+Q_OBJECT
+public:
+ PropertiesPage(QWidget* parent, KFileItemList items, bool enterUrl=false);
+ virtual ~PropertiesPage();
+
+ bool save();
+
+ static bool save(NFSFile* nfsFile, SambaFile* sambFile, bool nfs, bool samba);
+public slots:
+ void load();
+
+protected:
+
+ bool m_enterUrl;
+ QString m_path;
+ KFileItemList m_items;
+ NFSFile *m_nfsFile;
+ NFSEntry *m_nfsEntry;
+
+ SambaFile *m_sambaFile;
+ SambaShare *m_sambaShare;
+ bool m_sambaChanged;
+ bool m_nfsChanged;
+ bool m_loaded;
+
+protected slots:
+ // inherited from PropertiesPageGUI
+ virtual void moreNFSBtn_clicked();
+ virtual void moreSambaBtnClicked();
+ virtual void sambaChkToggled( bool b );
+ virtual void urlRqTextChanged(const QString&);
+
+private:
+ bool loadNFS();
+ void loadNFSEntry();
+ void updateNFSEntry();
+ bool saveNFS();
+
+ bool loadSamba();
+ void loadSambaShare();
+ bool updateSambaShare();
+ bool saveSamba();
+
+ bool checkURL();
+ void setSambaShareBoolValue(const QString & value, QCheckBox* chk);
+ void createNewSambaShare();
+ QString getNewSambaName();
+
+ void enableNFS(bool b,const QString & message);
+ void enableSamba(bool b,const QString & message);
+
+};
+
+#endif
diff --git a/filesharing/advanced/propsdlgplugin/propertiespagegui.ui b/filesharing/advanced/propsdlgplugin/propertiespagegui.ui
new file mode 100644
index 00000000..4f756d3b
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/propertiespagegui.ui
@@ -0,0 +1,478 @@
+<!DOCTYPE UI><UI version="3.2" stdsetdef="1">
+<class>PropertiesPageGUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>PropertiesPageGUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>433</width>
+ <height>348</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>folderLbl</cstring>
+ </property>
+ <property name="text">
+ <string>Folder:</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester">
+ <property name="name">
+ <cstring>urlRq</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>shareChk</cstring>
+ </property>
+ <property name="text">
+ <string>S&amp;hare this folder in the local network</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>shareFrame</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>nfsChk</cstring>
+ </property>
+ <property name="text">
+ <string>Share with &amp;NFS (Linux/UNIX)</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>nfsGrp</cstring>
+ </property>
+ <property name="title">
+ <string>NFS Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>publicNFSChk</cstring>
+ </property>
+ <property name="text">
+ <string>Pu&amp;blic</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>writableNFSChk</cstring>
+ </property>
+ <property name="text">
+ <string>W&amp;ritable</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>moreNFSBtn</cstring>
+ </property>
+ <property name="text">
+ <string>More NFS Op&amp;tions</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>156</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>sambaChk</cstring>
+ </property>
+ <property name="text">
+ <string>Share with S&amp;amba (Microsoft(R) Windows(R))</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>sambaGrp</cstring>
+ </property>
+ <property name="title">
+ <string>Samba Options</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>sambaNameEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>publicSambaChk</cstring>
+ </property>
+ <property name="text">
+ <string>P&amp;ublic</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>writableSambaChk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Writable</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>moreSambaBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Mor&amp;e Samba Options</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>1</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>sambaChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>sambaGrp</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>nfsChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>nfsGrp</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>publicSambaChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>writableSambaChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>publicNFSChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>writableNFSChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>shareChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>shareFrame</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>shareChk</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>sambaChk</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>publicSambaChk</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>writableSambaChk</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>nfsChk</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>publicNFSChk</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>writableNFSChk</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>moreNFSBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>moreNFSBtn_clicked()</slot>
+ </connection>
+ <connection>
+ <sender>sambaChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>sambaChkToggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>sambaNameEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>publicSambaChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>publicSambaChkToggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>publicNFSChk</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>publicNFSChkToggled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>moreSambaBtn</sender>
+ <signal>clicked()</signal>
+ <receiver>PropertiesPageGUI</receiver>
+ <slot>moreSambaBtnClicked()</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">propertiespagegui.ui.h</include>
+</includes>
+<variables>
+ <variable>bool m_hasChanged;</variable>
+</variables>
+<signals>
+ <signal>changed()</signal>
+</signals>
+<slots>
+ <slot access="protected">changedSlot()</slot>
+ <slot>moreNFSBtn_clicked()</slot>
+ <slot>sambaChkToggled( bool )</slot>
+ <slot>publicSambaChkToggled( bool b )</slot>
+ <slot>publicNFSChkToggled( bool b )</slot>
+ <slot>moreSambaBtnClicked()</slot>
+</slots>
+<functions>
+ <function returnType="bool">hasChanged()</function>
+</functions>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/advanced/propsdlgplugin/propertiespagegui.ui.h b/filesharing/advanced/propsdlgplugin/propertiespagegui.ui.h
new file mode 100644
index 00000000..89d4a56e
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/propertiespagegui.ui.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+
+void PropertiesPageGUI::changedSlot()
+{
+ m_hasChanged = true;
+ emit changed();
+}
+
+
+void PropertiesPageGUI::moreNFSBtn_clicked()
+{
+
+}
+
+
+bool PropertiesPageGUI::hasChanged()
+{
+ return m_hasChanged;
+}
+
+
+void PropertiesPageGUI::sambaChkToggled( bool )
+{
+
+}
+
+
+void PropertiesPageGUI::publicSambaChkToggled( bool b)
+{
+ if (!b) {
+ writableSambaChk->setChecked(false);
+ }
+}
+
+
+void PropertiesPageGUI::publicNFSChkToggled( bool b)
+{
+ if (!b) {
+ writableNFSChk->setChecked(false);
+ }
+
+}
+
+
+void PropertiesPageGUI::moreSambaBtnClicked()
+{
+
+}
diff --git a/filesharing/advanced/propsdlgplugin/propsdlgshareplugin.cpp b/filesharing/advanced/propsdlgplugin/propsdlgshareplugin.cpp
new file mode 100644
index 00000000..70d94519
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/propsdlgshareplugin.cpp
@@ -0,0 +1,126 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+#include <qstring.h>
+#include <qvbox.h>
+#include <qlayout.h>
+#include <qlabel.h>
+
+#include <kgenericfactory.h>
+#include <kdebug.h>
+#include <kpushbutton.h>
+#include <kfileshare.h>
+#include <kmessagebox.h>
+#include <kprocess.h>
+#include <kstandarddirs.h>
+#include <kdialog.h>
+#include <kglobal.h>
+
+#include "propertiespage.h"
+#include "propsdlgshareplugin.h"
+
+typedef KGenericFactory<PropsDlgSharePlugin, KPropertiesDialog> PropsDlgSharePluginFactory;
+
+K_EXPORT_COMPONENT_FACTORY( fileshare_propsdlgplugin,
+ PropsDlgSharePluginFactory("fileshare_propsdlgplugin") )
+
+class PropsDlgSharePlugin::Private
+{
+ public:
+ PropertiesPage* page;
+};
+
+PropsDlgSharePlugin::PropsDlgSharePlugin( KPropertiesDialog *dlg,
+ const char *, const QStringList & )
+ : KPropsDlgPlugin(dlg), d(0)
+{
+ KGlobal::locale()->insertCatalogue("kfileshare");
+
+ if (KFileShare::shareMode() == KFileShare::Simple) {
+ kdDebug(5009) << "PropsDlgSharePlugin: Sharing mode is simple. Aborting." << endl;
+ return;
+ }
+
+
+ QVBox* vbox = properties->addVBoxPage(i18n("&Share"));
+ properties->setFileSharingPage(vbox);
+
+ if (KFileShare::authorization() == KFileShare::UserNotAllowed) {
+
+ QWidget* widget = new QWidget( vbox );
+ QVBoxLayout * vLayout = new QVBoxLayout( widget );
+ vLayout->setSpacing( KDialog::spacingHint() );
+ vLayout->setMargin( 0 );
+
+
+ if (KFileShare::sharingEnabled()) {
+ vLayout->addWidget(
+ new QLabel( i18n("You need to be authorized to share directories."),
+ widget ));
+ } else {
+ vLayout->addWidget(
+ new QLabel( i18n("File sharing is disabled."), widget));
+ }
+
+ KPushButton* btn = new KPushButton( i18n("Configure File Sharing..."), widget );
+ connect( btn, SIGNAL( clicked() ), SLOT( slotConfigureFileSharing() ) );
+ btn->setDefault(false);
+ QHBoxLayout* hBox = new QHBoxLayout( (QWidget *)0L );
+ hBox->addWidget( btn, 0, Qt::AlignLeft );
+ vLayout->addLayout(hBox);
+ vLayout->addStretch( 10 ); // align items on top
+ return;
+ }
+
+
+ d = new Private();
+
+ d->page = new PropertiesPage(vbox, properties->items(),false);
+ connect(d->page, SIGNAL(changed()),
+ this, SIGNAL(changed()));
+
+ kdDebug(5009) << "Fileshare properties dialog plugin loaded" << endl;
+
+}
+
+void PropsDlgSharePlugin::slotConfigureFileSharing()
+{
+ KProcess proc;
+ proc << KStandardDirs::findExe("kdesu") << locate("exe", "kcmshell") << "fileshare";
+ proc.start( KProcess::DontCare );
+}
+
+
+PropsDlgSharePlugin::~PropsDlgSharePlugin()
+{
+ delete d;
+}
+
+void PropsDlgSharePlugin::applyChanges()
+{
+ if (!d->page->save()) {
+// KMessageBox::sorry(d->page,
+// i18n("Saving the changes failed"));
+
+ properties->abortApplying();
+ }
+}
+
+
+#include "propsdlgshareplugin.moc"
+
diff --git a/filesharing/advanced/propsdlgplugin/propsdlgshareplugin.h b/filesharing/advanced/propsdlgplugin/propsdlgshareplugin.h
new file mode 100644
index 00000000..acf889fa
--- /dev/null
+++ b/filesharing/advanced/propsdlgplugin/propsdlgshareplugin.h
@@ -0,0 +1,44 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef KONQFILESHAREPLUGIN_H
+#define KONQFILESHAREPLUGIN_H
+
+#include <kpropertiesdialog.h>
+
+class PropsDlgSharePlugin : public KPropsDlgPlugin
+{
+Q_OBJECT
+public:
+ PropsDlgSharePlugin( KPropertiesDialog *dlg, const char *, const QStringList & );
+ virtual ~PropsDlgSharePlugin();
+ virtual void applyChanges();
+
+protected slots:
+ void slotConfigureFileSharing();
+
+private:
+ class Private;
+ Private *d;
+
+};
+
+#endif
+
+
diff --git a/filesharing/simple/Makefile.am b/filesharing/simple/Makefile.am
new file mode 100644
index 00000000..7a3e2994
--- /dev/null
+++ b/filesharing/simple/Makefile.am
@@ -0,0 +1,19 @@
+METASOURCES = AUTO
+
+kde_module_LTLIBRARIES = kcm_fileshare.la
+
+kcm_fileshare_la_SOURCES = fileshare.cpp \
+ controlcenter.ui \
+ groupconfiggui.ui \
+ groupconfigdlg.cpp \
+ krichtextlabel.cpp
+
+kcm_fileshare_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined
+kcm_fileshare_la_LIBADD = ../advanced/propsdlgplugin/libpropsdlgplugin_common.la \
+ ../advanced/nfs/libfilesharenfs.la \
+ ../advanced/kcm_sambaconf/libfilesharesamba.la \
+ $(LIB_KIO)
+
+AM_CPPFLAGS = -I$(srcdir)/../advanced/propsdlgplugin -I../advanced/propsdlgplugin $(all_includes)
+
+xdg_apps_DATA = fileshare.desktop
diff --git a/filesharing/simple/controlcenter.ui b/filesharing/simple/controlcenter.ui
new file mode 100644
index 00000000..eea9166e
--- /dev/null
+++ b/filesharing/simple/controlcenter.ui
@@ -0,0 +1,486 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>ControlCenterGUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>ControlCenterGUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>525</width>
+ <height>535</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KRichTextLabel">
+ <property name="name">
+ <cstring>infoLbl</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="text">
+ <string>SMB and NFS servers are not installed on this machine, to enable this module the servers must be installed.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>shareGrp</cstring>
+ </property>
+ <property name="title">
+ <string>Enable Local Networ&amp;k File Sharing</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>simpleRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Si&amp;mple sharing</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame4_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>11</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="KRichTextLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <italic>1</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Enable simple sharing to allow users to share folders from their HOME folder, without knowing the root password.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>advancedRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Advanced sharin&amp;g</string>
+ </property>
+ <property name="buttonGroupId">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>frame4_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>11</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="KRichTextLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <italic>1</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Enable advanced sharing to allow users to share any folders, as long as they have write access to the needed configuration files, or they know the root password.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QFrame" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>frame4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>11</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="1">
+ <property name="name">
+ <cstring>nfsChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Use &amp;NFS (Linux/UNIX)</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="0" column="1">
+ <property name="name">
+ <cstring>sambaChk</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Use Sam&amp;ba (Microsoft(R) Windows(R))</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>allowedUsersBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Allo&amp;wed Users</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>sharedFoldersGroupBox</cstring>
+ </property>
+ <property name="title">
+ <string>Shared Folders</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListView">
+ <column>
+ <property name="text">
+ <string>Path</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Samba</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>NFS</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>listView</cstring>
+ </property>
+ <property name="selectionMode" stdset="0">
+ <enum>NoSelection</enum>
+ </property>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>shareBtnPnl</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Plain</enum>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>addShareBtn</cstring>
+ </property>
+ <property name="text">
+ <string>A&amp;dd...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>changeShareBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Chang&amp;e...</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>removeShareBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Rem&amp;ove</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>advancedRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>nfsChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>advancedRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>sambaChk</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>shareGrp</sender>
+ <signal>clicked(int)</signal>
+ <receiver>ControlCenterGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>simpleRadio</sender>
+ <signal>clicked()</signal>
+ <receiver>ControlCenterGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>advancedRadio</sender>
+ <signal>clicked()</signal>
+ <receiver>ControlCenterGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>sambaChk</sender>
+ <signal>clicked()</signal>
+ <receiver>ControlCenterGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>nfsChk</sender>
+ <signal>clicked()</signal>
+ <receiver>ControlCenterGUI</receiver>
+ <slot>changedSlot()</slot>
+ </connection>
+ <connection>
+ <sender>listView</sender>
+ <signal>selectionChanged()</signal>
+ <receiver>ControlCenterGUI</receiver>
+ <slot>listView_selectionChanged()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>sambaChk</tabstop>
+ <tabstop>nfsChk</tabstop>
+ <tabstop>listView</tabstop>
+</tabstops>
+<includes>
+ <include location="local" impldecl="in implementation">controlcenter.ui.h</include>
+ <include location="local" impldecl="in implementation">krichtextlabel.h</include>
+</includes>
+<signals>
+ <signal>changed()</signal>
+</signals>
+<slots>
+ <slot access="private">changedSlot()</slot>
+ <slot>listView_selectionChanged()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>krichtextlabel.h</includehint>
+ <includehint>klistview.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/filesharing/simple/controlcenter.ui.h b/filesharing/simple/controlcenter.ui.h
new file mode 100644
index 00000000..6fb3f62f
--- /dev/null
+++ b/filesharing/simple/controlcenter.ui.h
@@ -0,0 +1,22 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+
+void ControlCenterGUI::changedSlot()
+{
+ emit changed();
+}
+
+void ControlCenterGUI::listView_selectionChanged()
+{
+ bool empty = listView->selectedItems ().isEmpty();
+ changeShareBtn->setDisabled(empty );
+ removeShareBtn->setDisabled(empty );
+
+}
diff --git a/filesharing/simple/fileshare.cpp b/filesharing/simple/fileshare.cpp
new file mode 100644
index 00000000..a0c5bb06
--- /dev/null
+++ b/filesharing/simple/fileshare.cpp
@@ -0,0 +1,442 @@
+/*
+ Copyright (c) 2002 Laurent Montel <lmontel@mandrakesoft.com>
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+#include <unistd.h>
+
+#include <qlayout.h>
+#include <qvbuttongroup.h>
+#include <qvgroupbox.h>
+#include <qlabel.h>
+#include <qdir.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qtooltip.h>
+#include <qvbox.h>
+
+#include <kpushbutton.h>
+#include <kdebug.h>
+#include <kdialog.h>
+#include <kdialogbase.h>
+#include <kgenericfactory.h>
+#include <klistview.h>
+#include <kiconloader.h>
+#include <knfsshare.h>
+#include <ksambashare.h>
+#include <kfileshare.h>
+#include <kstandarddirs.h>
+#include <ksimpleconfig.h>
+#include <kmessagebox.h>
+#include <kapplication.h>
+#include <kuser.h>
+#include <kurl.h>
+#include <kprocess.h>
+#include <krichtextlabel.h>
+
+#include "../advanced/propsdlgplugin/propertiespage.h"
+#include "../advanced/nfs/nfsfile.h"
+#include "../advanced/kcm_sambaconf/sambafile.h"
+
+#include "controlcenter.h"
+#include "fileshare.h"
+#include "groupconfigdlg.h"
+
+typedef KGenericFactory<KFileShareConfig, QWidget > ShareFactory;
+K_EXPORT_COMPONENT_FACTORY (kcm_fileshare, ShareFactory("kcmfileshare") )
+
+
+#define FILESHARECONF "/etc/security/fileshare.conf"
+#define FILESHARE_DEBUG 5009
+
+KFileShareConfig::KFileShareConfig(QWidget *parent, const char *name, const QStringList &):
+ KCModule(ShareFactory::instance(), parent, name)
+{
+ KGlobal::locale()->insertCatalogue("kfileshare");
+
+ QBoxLayout* layout = new QVBoxLayout(this,0,
+ KDialog::spacingHint());
+
+/*
+ QVButtonGroup *box = new QVButtonGroup( i18n("File Sharing"), this );
+ box->layout()->setSpacing( KDialog::spacingHint() );
+ layout->addWidget(box);
+ noSharing=new QRadioButton( i18n("Do &not allow users to share files"), box );
+ sharing=new QRadioButton( i18n("&Allow users to share files from their HOME folder"), box);
+*/
+ m_ccgui = new ControlCenterGUI(this);
+ connect( m_ccgui, SIGNAL( changed()), this, SLOT(configChanged()));
+ connect( m_ccgui->allowedUsersBtn, SIGNAL( clicked()),
+ this, SLOT(allowedUsersBtnClicked()));
+
+ QString path = QString::fromLocal8Bit( getenv( "PATH" ) );
+ path += QString::fromLatin1(":/usr/sbin");
+ QString sambaExec = KStandardDirs::findExe( QString::fromLatin1("smbd"), path );
+ QString nfsExec = KStandardDirs::findExe( QString::fromLatin1("rpc.nfsd"), path );
+
+ if ( nfsExec.isEmpty() && sambaExec.isEmpty())
+ {
+ m_ccgui->shareGrp->setDisabled(true);
+ m_ccgui->sharedFoldersGroupBox->setDisabled(true);
+ }
+ else
+ {
+ if (nfsExec.isEmpty()) {
+ m_ccgui->nfsChk->setDisabled(true);
+ m_ccgui->nfsChk->setChecked(false);
+ QToolTip::add(m_ccgui->nfsChk,i18n("No NFS server installed on this system"));
+ }
+
+ if (sambaExec.isEmpty()) {
+ m_ccgui->sambaChk->setDisabled(true);
+ m_ccgui->sambaChk->setChecked(false);
+ QToolTip::add(m_ccgui->sambaChk,i18n("No Samba server installed on this system"));
+ }
+
+ m_ccgui->infoLbl->hide();
+ layout->addWidget(m_ccgui);
+ updateShareListView();
+ connect( KNFSShare::instance(), SIGNAL( changed()),
+ this, SLOT(updateShareListView()));
+ connect( KSambaShare::instance(), SIGNAL( changed()),
+ this, SLOT(updateShareListView()));
+
+
+ }
+
+ if((getuid() == 0) ||
+ ((KFileShare::shareMode() == KFileShare::Advanced) &&
+ (KFileShare::authorization() == KFileShare::Authorized)))
+ {
+ connect( m_ccgui->addShareBtn, SIGNAL(clicked()),
+ this, SLOT(addShareBtnClicked()));
+ connect( m_ccgui->changeShareBtn, SIGNAL(clicked()),
+ this, SLOT(changeShareBtnClicked()));
+ connect( m_ccgui->removeShareBtn, SIGNAL(clicked()),
+ this, SLOT(removeShareBtnClicked()));
+ m_ccgui->listView->setSelectionMode(QListView::Extended);
+ m_ccgui->shareBtnPnl->setEnabled(true);
+ }
+
+
+ if (getuid()==0) {
+ setButtons(Help|Apply);
+ } else {
+ setButtons(Help);
+ m_ccgui->shareGrp->setDisabled( true );
+ }
+
+ load();
+}
+
+void KFileShareConfig::updateShareListView()
+{
+ m_ccgui->listView->clear();
+ KNFSShare* nfs = KNFSShare::instance();
+ KSambaShare* samba = KSambaShare::instance();
+
+ QStringList dirs = nfs->sharedDirectories();
+ QStringList sambaDirs = samba->sharedDirectories();
+
+ for ( QStringList::ConstIterator it = sambaDirs.begin(); it != sambaDirs.end(); ++it ) {
+ // Do not insert duplicates
+ if (nfs->isDirectoryShared(*it))
+ continue;
+
+ dirs += *it;
+ }
+
+ QPixmap folderPix = SmallIcon("folder",0,KIcon::ShareOverlay);
+ QPixmap okPix = SmallIcon("button_ok");
+ QPixmap cancelPix = SmallIcon("button_cancel");
+
+ for ( QStringList::Iterator it = dirs.begin(); it != dirs.end(); ++it ) {
+ KListViewItem* item = new KListViewItem(m_ccgui->listView);
+ item->setText(0,*it);
+ item->setPixmap(0, folderPix);
+
+ if (samba->isDirectoryShared(*it))
+ item->setPixmap(1,okPix);
+ else
+ item->setPixmap(1,cancelPix);
+
+ if (nfs->isDirectoryShared(*it))
+ item->setPixmap(2,okPix);
+ else
+ item->setPixmap(2,cancelPix);
+
+ }
+
+}
+
+void KFileShareConfig::allowedUsersBtnClicked() {
+ GroupConfigDlg dlg(this,m_fileShareGroup,m_restricted,m_rootPassNeeded,
+ m_ccgui->simpleRadio->isChecked());
+ if (dlg.exec() == QDialog::Accepted) {
+ m_fileShareGroup = dlg.fileShareGroup().name();
+ m_restricted = dlg.restricted();
+ m_rootPassNeeded = dlg.rootPassNeeded();
+ configChanged();
+ }
+
+}
+
+
+void KFileShareConfig::load()
+{
+ KSimpleConfig config(QString::fromLatin1(FILESHARECONF),true);
+
+ m_ccgui->shareGrp->setChecked( config.readEntry("FILESHARING", "yes") == "yes" );
+
+ m_restricted = config.readEntry("RESTRICT", "yes") == "yes";
+
+ if (config.readEntry("SHARINGMODE", "simple") == "simple")
+ m_ccgui->simpleRadio->setChecked(true);
+ else
+ m_ccgui->advancedRadio->setChecked(true);
+
+ m_fileShareGroup = config.readEntry("FILESHAREGROUP", "fileshare");
+
+ m_ccgui->sambaChk->setChecked(
+ config.readEntry("SAMBA", "yes") == "yes");
+
+ m_ccgui->nfsChk->setChecked(
+ config.readEntry("NFS", "yes") == "yes");
+
+ m_rootPassNeeded = config.readEntry("ROOTPASSNEEDED", "yes") == "yes";
+
+ m_smbConf = KSambaShare::instance()->smbConfPath();
+}
+
+bool KFileShareConfig::addGroupAccessesToFile(const QString & file) {
+ KProcess chgrp;
+ chgrp << "chgrp" << m_fileShareGroup << file;
+ KProcess chmod;
+ chmod << "chmod" << "g=rw" << file;
+
+ if (!chgrp.start(KProcess::Block) && chgrp.normalExit()) {
+ kdDebug(FILESHARE_DEBUG) << "KFileShareConfig::addGroupAccessesToFile: chgrp failed" << endl;
+ return false;
+
+ }
+
+ if(!chmod.start(KProcess::Block) && chmod.normalExit()) {
+ kdDebug(FILESHARE_DEBUG) << "KFileShareConfig::addGroupAccessesToFile: chmod failed" << endl;
+ return false;
+ }
+
+ return true;
+
+}
+
+bool KFileShareConfig::removeGroupAccessesFromFile(const QString & file) {
+ KProcess chgrp;
+ chgrp << "chgrp" << "root" << file;
+ KProcess chmod;
+ chmod << "chmod" << "g=r" << file;
+
+ if (!chgrp.start(KProcess::Block) && chgrp.normalExit()) {
+ kdDebug(FILESHARE_DEBUG) << "KFileShareConfig::removeGroupAccessesFromFile: chgrp failed" << endl;
+ return false;
+
+ }
+
+ if(!chmod.start(KProcess::Block) && chmod.normalExit()) {
+ kdDebug(FILESHARE_DEBUG) << "KFileShareConfig::removeGroupAccessesFromFile: chmod failed" << endl;
+ return false;
+ }
+
+ return true;
+}
+
+
+bool KFileShareConfig::setGroupAccesses() {
+ if (m_rootPassNeeded || ! m_ccgui->sambaChk->isChecked()) {
+ if (!removeGroupAccessesFromFile(KSambaShare::instance()->smbConfPath()))
+ return false;
+ }
+
+ if (m_rootPassNeeded || ! m_ccgui->nfsChk->isChecked()) {
+ if (!removeGroupAccessesFromFile(KNFSShare::instance()->exportsPath()))
+ return false;
+ }
+
+ if (! m_rootPassNeeded && m_ccgui->sambaChk->isChecked()) {
+ if (!addGroupAccessesToFile(KSambaShare::instance()->smbConfPath()))
+ return false;
+ }
+
+ if (! m_rootPassNeeded && m_ccgui->nfsChk->isChecked()) {
+ if (!addGroupAccessesToFile(KNFSShare::instance()->exportsPath()))
+ return false;
+ }
+
+
+ return true;
+}
+
+void KFileShareConfig::save()
+{
+ setGroupAccesses();
+
+ QDir dir("/etc/security");
+ if ( !dir.exists())
+ dir.mkdir("/etc/security");
+
+ QFile file(FILESHARECONF);
+ if ( ! file.open(IO_WriteOnly)) {
+ KMessageBox::detailedError(this,
+ i18n("Could not save settings."),
+ i18n("Could not open file '%1' for writing: %2").arg(FILESHARECONF).arg(
+ file.errorString() ),
+ i18n("Saving Failed"));
+ return;
+ }
+
+
+ QTextStream stream(&file);
+
+ stream << "FILESHARING=";
+ stream << (m_ccgui->shareGrp->isChecked() ? "yes" : "no");
+
+ stream << "\nRESTRICT=";
+ stream << (m_restricted ? "yes" : "no");
+
+ stream << "\nSHARINGMODE=";
+ stream << (m_ccgui->simpleRadio->isChecked() ? "simple" : "advanced");
+
+ stream << "\nFILESHAREGROUP=";
+ stream << m_fileShareGroup;
+
+ stream << "\nSAMBA=";
+ stream << (m_ccgui->sambaChk->isChecked() ? "yes" : "no");
+
+ stream << "\nNFS=";
+ stream << (m_ccgui->nfsChk->isChecked() ? "yes" : "no");
+
+ stream << "\nROOTPASSNEEDED=";
+ stream << (m_rootPassNeeded ? "yes" : "no");
+
+ stream << "\nSMBCONF=";
+ stream << m_smbConf;
+
+ file.close();
+}
+
+void KFileShareConfig::defaults()
+{
+ m_ccgui->shareGrp->setChecked( false );
+}
+
+QString KFileShareConfig::quickHelp() const
+{
+ return i18n("<h1>File Sharing</h1><p>This module can be used "
+ "to enable file sharing over the network using "
+ "the \"Network File System\" (NFS) or SMB in Konqueror. "
+ "The latter enables you to share your files with Windows(R) "
+ "computers on your network.</p>");
+}
+
+void KFileShareConfig::addShareBtnClicked() {
+ showShareDialog(KFileItemList());
+}
+
+
+PropertiesPageDlg::PropertiesPageDlg(QWidget*parent, KFileItemList files)
+ : KDialogBase(parent, "sharedlg", true,
+ i18n("Share Folder"), Ok|Cancel, Ok, true)
+{
+ QVBox* vbox = makeVBoxMainWidget();
+
+ m_page = new PropertiesPage(vbox,files,true);
+}
+
+bool PropertiesPageDlg::hasChanged() {
+ return m_page->hasChanged();
+}
+
+void PropertiesPageDlg::slotOk() {
+ if (hasChanged()) {
+ if (!m_page->save())
+ return;
+ }
+
+ KDialogBase::slotOk();
+}
+
+
+
+void KFileShareConfig::showShareDialog(const KFileItemList & files) {
+ PropertiesPageDlg* dlg = new PropertiesPageDlg(this,files);
+ if (dlg->exec() == QDialog::Accepted) {
+ if ( dlg->hasChanged() ) {
+ updateShareListView();
+ }
+ }
+ delete dlg;
+}
+
+void KFileShareConfig::changeShareBtnClicked() {
+ KFileItemList files;
+ QPtrList<QListViewItem> items = m_ccgui->listView->selectedItems();
+
+ QListViewItem* item;
+ for ( item = items.first(); item; item = items.next() ) {
+ files.append(new KFileItem(KURL::fromPathOrURL(item->text(0)),"",0));
+ }
+
+ showShareDialog(files);
+}
+
+void KFileShareConfig::removeShareBtnClicked() {
+
+ QPtrList<QListViewItem> items = m_ccgui->listView->selectedItems();
+ QListViewItem *item;
+
+ bool nfs = false;
+ bool samba = false;
+
+ for ( item = items.first(); item; item = items.next() ) {
+
+ if (KNFSShare::instance()->isDirectoryShared(item->text(0)))
+ nfs = true;
+
+ if (KSambaShare::instance()->isDirectoryShared(item->text(0)))
+ samba = true;
+ }
+
+ NFSFile nfsFile(KNFSShare::instance()->exportsPath());
+ if (nfs) {
+ kdDebug(FILESHARE_DEBUG) << "KFileShareConfig::removeShareBtnClicked: nfs = true" << endl;
+ nfsFile.load();
+ for ( item = items.first(); item; item = items.next() ) {
+ nfsFile.removeEntryByPath(item->text(0));
+ }
+ }
+
+ SambaFile smbFile(KSambaShare::instance()->smbConfPath(),false);
+ if (samba) {
+ kdDebug(FILESHARE_DEBUG) << "KFileShareConfig::removeShareBtnClicked: samba = true" << endl;
+ smbFile.load();
+ for ( item = items.first(); item; item = items.next() ) {
+ smbFile.removeShareByPath(item->text(0));
+ }
+ }
+
+ PropertiesPage::save(&nfsFile, &smbFile, nfs,samba);
+
+ updateShareListView();
+}
+
+#include "fileshare.moc"
diff --git a/filesharing/simple/fileshare.desktop b/filesharing/simple/fileshare.desktop
new file mode 100644
index 00000000..6ed8dd8b
--- /dev/null
+++ b/filesharing/simple/fileshare.desktop
@@ -0,0 +1,169 @@
+[Desktop Entry]
+Exec=kcmshell fileshare
+Icon=share
+Type=Application
+
+X-KDE-ModuleType=Library
+X-KDE-Library=fileshare
+X-KDE-ParentApp=kcontrol
+X-KDE-RootOnly=true
+
+Name=File Sharing
+Name[be]=Публікацыя файлаў
+Name[bg]=Споделяне на файлове
+Name[bn]=ফাইল ভাগাভাগি
+Name[br]=Rannañ restroù
+Name[bs]=Dijeljenje datoteka
+Name[ca]=Compartició de fitxers
+Name[cs]=Sdílení souborů
+Name[cy]=Rhannu Ffeiliau
+Name[da]=Fildeling
+Name[de]=Dateifreigabe
+Name[el]=Κοινή χρήση αρχείων
+Name[eo]=Dosierkomunigado
+Name[es]=Compartir archivos
+Name[et]=Failijagamine
+Name[eu]=Fitxategi partekatzea
+Name[fa]=اشتراک پرونده
+Name[fi]=Tiedostojen jakaminen
+Name[fr]=Partage de fichiers
+Name[ga]=Roinnt na gComhad
+Name[gl]=Compartición de ficheiros
+Name[he]=שיתוף קבצים
+Name[hu]=Fájlmegosztás
+Name[is]=Deila skrám
+Name[it]=Condivisione di file
+Name[ja]=ファイル共有
+Name[ka]=ფაილთა გაზიარება
+Name[kk]=Файлдарды ортақтастыру
+Name[km]=ការ​ចែក​រំលែក​ឯកសារ
+Name[lt]=Dalinimasis bylomis
+Name[mk]=Делење на датотеки
+Name[nb]=Fildeling
+Name[nds]=Dateifreegaav
+Name[ne]=फाइल साझेदारी
+Name[nl]=Bestanden delen
+Name[nn]=Fildeling
+Name[pa]=ਫਾਇਲ ਸ਼ਾਂਝ
+Name[pl]=Współdzielenie plików
+Name[pt]=Partilha de Ficheiros
+Name[pt_BR]=Compartilhamento de Arquivos
+Name[ro]=Partajare fişiere
+Name[ru]=Совместное использование файлов
+Name[se]=Fiilajuohkkin
+Name[sk]=Zdieľanie súborov
+Name[sl]=Souporaba datotek
+Name[sr]=Дељење фајлова
+Name[sr@Latn]=Deljenje fajlova
+Name[sv]=Filutdelning
+Name[ta]=கோப்பு பகிர்வு
+Name[tg]=Истифодабарии муштараки файлҳо
+Name[tr]=Dosya Paylaşımı
+Name[uk]=Спільний доступ до файлів
+Name[uz]=Fayl bilan boʻlishish
+Name[uz@cyrillic]=Файл билан бўлишиш
+Name[zh_CN]=文件共享
+Name[zh_HK]=檔案分享
+Name[zh_TW]=檔案分享
+
+Comment=Enable or disable file sharing
+Comment[be]=Уключыць/выключыць выкарыстанне агульных рэсурсаў
+Comment[bg]=Настройване споделянето на файлове
+Comment[bn]=ফাইল ভাগাভাগি সক্রিয় অথবা নিষ্ক্রিয় করুন
+Comment[bs]=Uključi ili isključi dijeljenje datoteka
+Comment[ca]=Habilita o deshabilita la compartició de fitxers
+Comment[cs]=Povolit nebo zakázat sdílení souborů
+Comment[da]=Aktivér eller deaktivér fildeling
+Comment[de]=Dateifreigabe aktivieren/deaktivieren
+Comment[el]=Ενεργοποίηση ή απενεργοποίηση της κοινής χρήσης αρχείων
+Comment[eo]=Ŝalti aŭ malŝalti dosierkomunigadon
+Comment[es]=Habilitar o deshabilitar el compartir archivos
+Comment[et]=Failide jagamise lubamine või keelamine
+Comment[eu]=Gaitu edo ezgaitu fitxategi partekatzea
+Comment[fa]=فعال یا غیرفعال‌سازی اشتراک پرونده
+Comment[fi]=Ota tiedostojen jakaminen käyttöön tai pois käytöstä
+Comment[fr]=Activer ou désactiver le partage de fichiers
+Comment[gl]=Habilitar ou deshabilitar a compartición de fichieros
+Comment[he]=אפשר או מנע שיתוף קבצים
+Comment[hu]=A fájlmegosztás ki-be kapcsolása
+Comment[is]=Virkja eða slökkva á skráardeilingu um net
+Comment[it]=Abilita o disabilita la condivisione dei file
+Comment[ja]=ファイル共有を有効または無効にします
+Comment[ka]=ფაილთა გაზიარების ჩართვა ან გამორთვა
+Comment[kk]=Файл ортақтастыруды рұқсат ету/етпеу
+Comment[km]=អនុញ្ញាត ឬ មិន​អនុញ្ញាត​ការ​ចែក​រំ​លែក​ឯកសារ
+Comment[lt]=Įjungti ar išjungti bylų dalinimąsi
+Comment[mk]=Овозможува или оневозможува делење на датотеки
+Comment[nb]=Slå på og av fildeling
+Comment[nds]=Dateifreegaven an- oder utmaken
+Comment[ne]=फाइल साझेदारी सक्षम वा अक्षम पार्नुहोस्
+Comment[nl]=Bestanden delen in- en uitschakelen
+Comment[nn]=Slå på eller av fildeling
+Comment[pl]=Włącza lub wyłącza współdzielenie plików
+Comment[pt]=Activa ou desactiva a partilha de ficheiros
+Comment[pt_BR]=Habilita ou desabilita o compartilhamento de arquivos
+Comment[ro]=Activează sau dezactivează partajarea de fişiere
+Comment[ru]=Включить или выключить общий доступ к файлам
+Comment[se]=Suova dahje ale suova fiilajuohkkima
+Comment[sk]=Povolenie alebo zakázanie zdieľania súborov
+Comment[sl]=Omogoči ali onemogoči souporabo datotek
+Comment[sr]=Укључи или искључи дељење фајлова
+Comment[sr@Latn]=Uključi ili isključi deljenje fajlova
+Comment[sv]=Aktivera eller inaktivera filutdelning
+Comment[ta]=கோப்பு பகிர்வை செயல்படுத்து அல்லது செயல்நீக்கு
+Comment[tg]=Фаъол сохтан ё хомӯш кардани истифобадарии муштараки файлҳо
+Comment[tr]=Dosya paylaşımını etkinleştir/kapat
+Comment[uk]=Увімкнення або вимикання спільного доступу до файлів
+Comment[zh_CN]=启用或禁用文件共享
+Comment[zh_HK]=啟用或停用檔案分享
+Comment[zh_TW]=開啟或關閉檔案分享
+
+Keywords=Share
+Keywords[be]=Агульны рэсурс
+Keywords[bg]=настройки, локална, мрежа, споделяне, share
+Keywords[br]=Rannañ
+Keywords[bs]=dijeljenje
+Keywords[ca]=Compartit
+Keywords[cs]=sdílení
+Keywords[da]=Del
+Keywords[de]=Freigabe
+Keywords[el]=Κοινόχρηστο
+Keywords[eo]=Komunaĵo
+Keywords[es]=Compartir
+Keywords[et]=Jagamine
+Keywords[fa]=مشترک
+Keywords[fi]=Jakaminen,Jako
+Keywords[fr]=partage
+Keywords[gl]=Compartir
+Keywords[he]=שיתוף, share
+Keywords[hu]=Megosztás
+Keywords[is]=Deild
+Keywords[it]=Condivisione
+Keywords[ja]=共有
+Keywords[ka]=საზიარო
+Keywords[km]=ការ​ចែក​រំ​លែក
+Keywords[lt]=Share,dalinimasis,dalintis,pasidalinti
+Keywords[mk]=Делена
+Keywords[nb]=Dele
+Keywords[nds]=Delen,Freegaav,Freegaven
+Keywords[ne]=साझेदार
+Keywords[nl]=delen
+Keywords[nn]=deling
+Keywords[pa]=ਸਾਂਝ
+Keywords[pl]=współdzielenie,pliki
+Keywords[pt]=Partilhar
+Keywords[pt_BR]=compartilhamento de arquivos
+Keywords[ro]=partajare
+Keywords[ru]=Общий ресурс
+Keywords[sk]=zdieľaný disk,share
+Keywords[sl]=Souporaba
+Keywords[sr]=Share,дељење
+Keywords[sr@Latn]=Share,deljenje
+Keywords[sv]=Dela
+Keywords[ta]=பகிர்வு
+Keywords[tg]=Муштаракан доштан
+Keywords[tr]=Paylaş
+Keywords[uk]=Спільний ресурс
+Keywords[zh_CN]=Share,共享
+
+Categories=Qt;KDE;X-KDE-settings-network;Settings;
diff --git a/filesharing/simple/fileshare.h b/filesharing/simple/fileshare.h
new file mode 100644
index 00000000..120b93f6
--- /dev/null
+++ b/filesharing/simple/fileshare.h
@@ -0,0 +1,82 @@
+/*
+ Copyright (c) 2002 Laurent Montel <lmontel@mandrakesoft.com>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef __fileshare_h__
+#define __fileshare_h__
+
+#include <kfileitem.h>
+
+#include "kcmodule.h"
+class QRadioButton;
+class QLabel;
+class QBoxLayout;
+class ControlCenterGUI;
+class QListViewItem;
+
+class KFileShareConfig : public KCModule
+{
+ Q_OBJECT
+
+ public:
+ KFileShareConfig(QWidget *parent, const char *name, const QStringList &);
+
+ virtual void load();
+ virtual void save();
+ virtual void defaults();
+ virtual QString quickHelp() const;
+
+ protected:
+ ControlCenterGUI* m_ccgui;
+ QString m_fileShareGroup;
+ bool m_restricted;
+ bool m_rootPassNeeded;
+ QString m_smbConf;
+ void showShareDialog(const KFileItemList & files);
+ bool addGroupAccessesToFile(const QString & file);
+ bool removeGroupAccessesFromFile(const QString & file);
+ bool setGroupAccesses();
+
+ protected slots:
+ void configChanged() { emit changed( true ); };
+ void updateShareListView();
+ void allowedUsersBtnClicked();
+
+ virtual void addShareBtnClicked();
+ virtual void changeShareBtnClicked();
+ virtual void removeShareBtnClicked();
+
+};
+
+class PropertiesPageDlg : public KDialogBase
+{
+Q_OBJECT
+public:
+ PropertiesPageDlg(QWidget * parent, KFileItemList files);
+ ~PropertiesPageDlg() {};
+ bool hasChanged();
+protected:
+ PropertiesPage* m_page;
+
+protected slots:
+ virtual void slotOk();
+
+};
+
+
+
+#endif
diff --git a/filesharing/simple/groupconfigdlg.cpp b/filesharing/simple/groupconfigdlg.cpp
new file mode 100644
index 00000000..4d62faa9
--- /dev/null
+++ b/filesharing/simple/groupconfigdlg.cpp
@@ -0,0 +1,418 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+
+#include <qradiobutton.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qvbox.h>
+#include <qhbox.h>
+
+#include <klocale.h>
+#include <kuser.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <kinputdialog.h>
+#include <klistbox.h>
+#include <kprocess.h>
+#include <kpushbutton.h>
+#include <kcombobox.h>
+
+#include "groupconfiggui.h"
+#include "groupconfigdlg.h"
+
+
+static QString groupListToString(const QValueList<KUserGroup> & list);
+static QString prettyString(const KUser &user);
+static QString fromPrettyString(const QString & s);
+static void removeList(QValueList<KUser> & from, const QValueList<KUser> & that);
+static bool userMod(const QString & user, const QValueList<KUserGroup> & groups);
+
+
+
+GroupConfigDlg::GroupConfigDlg(QWidget * parent,
+ const QString & fileShareGroup, bool restricted,
+ bool rootPassNeeded, bool simpleSharing)
+ : KDialogBase(parent,"groupconfigdlg", true,
+ i18n("Allowed Users"), Ok|Cancel, Ok, true) ,
+ m_fileShareGroup(fileShareGroup),
+ m_restricted(restricted) ,
+ m_rootPassNeeded(rootPassNeeded),
+ m_simpleSharing(simpleSharing)
+
+{
+ initGUI();
+
+ setFileShareGroup(m_fileShareGroup);
+}
+
+GroupConfigDlg::~GroupConfigDlg() {
+}
+
+void GroupConfigDlg::initUsers() {
+ m_origUsers = m_fileShareGroup.users();
+ m_users = m_origUsers;
+}
+
+void GroupConfigDlg::initGUI() {
+ m_gui = new GroupConfigGUI(this);
+ setMainWidget(m_gui);
+ setFileShareGroup(m_fileShareGroup);
+
+ m_gui->allUsersRadio->setChecked(!m_restricted);
+ m_gui->groupUsersRadio->setChecked(m_restricted);
+ m_gui->writeAccessChk->setChecked(!m_rootPassNeeded);
+
+ connect( m_gui->addBtn, SIGNAL(clicked()),
+ this, SLOT(slotAddUser()));
+ connect( m_gui->removeBtn, SIGNAL(clicked()),
+ this, SLOT(slotRemoveUser()));
+ connect( m_gui->otherGroupBtn, SIGNAL(clicked()),
+ this, SLOT(slotChangeGroup()));
+
+ if (m_simpleSharing) {
+ // if simple sharing users never need the root password
+ m_gui->writeAccessChk->setDisabled(true);
+ }
+}
+
+void GroupConfigDlg::updateListBox() {
+ m_gui->listBox->clear();
+ QValueList<KUser>::iterator it;
+ for ( it = m_users.begin(); it != m_users.end(); ++it ) {
+ m_gui->listBox->insertItem(prettyString(*it));
+ kdDebug(5009) << "GroupConfigDlg::updateListBox: " << (*it).loginName() << endl;
+ }
+}
+
+QString prettyString(const KUser &user) {
+ return user.fullName()+" ("+user.loginName()+")";
+}
+
+QString fromPrettyString(const QString & s) {
+ // Jan Schaefer (jan)
+ // i j
+ int i = s.find('(');
+ int j = s.find(')');
+ QString loginName = s.mid(i+1,j-i-1);
+ return loginName;
+}
+
+bool GroupConfigDlg::restricted() {
+ return m_restricted;
+}
+
+void GroupConfigDlg::slotAddUser() {
+ QValueList<KUser> allUsers = KUser::allUsers();
+
+ removeList(allUsers,m_users);
+
+ if (allUsers.count()==0) {
+ KMessageBox::information(this,
+ i18n("All users are in the %1 group already.")
+ .arg(m_fileShareGroup.name()));
+ return;
+ }
+
+ QStringList stringList;
+
+ QValueList<KUser>::iterator it;
+ for ( it = allUsers.begin(); it != allUsers.end(); ++it ) {
+ QString s = (*it).fullName()+" ("+(*it).loginName()+")";
+ stringList.append(s);
+ }
+
+ stringList.sort();
+
+ bool ok;
+ QString userName = KInputDialog::getItem(
+ i18n("Select User"),
+ i18n("Select a user:"),
+ stringList,
+ 0,
+ false,
+ &ok);
+
+ if (!ok)
+ return;
+
+ QString loginName = fromPrettyString(userName);
+ KUser user(loginName);
+ m_users.append(KUser(loginName));
+ updateListBox();
+}
+
+void removeList(QValueList<KUser> & from, const QValueList<KUser> & that) {
+ QValueList<KUser>::ConstIterator it;
+ for ( it = that.begin(); it != that.end(); ++it ) {
+ from.remove(*it);
+ }
+
+}
+
+bool GroupConfigDlg::addUser(const KUser & user, const KUserGroup & group) {
+ QValueList<KUserGroup> groups = user.groups();
+ groups.append(group);
+ if (!userMod(user.loginName(),groups)) {
+ KMessageBox::sorry(this,i18n("Could not add user '%1' to group '%2'")
+ .arg(user.loginName()).arg(group.name()));
+ return false;
+ }
+ return true;
+}
+
+
+bool GroupConfigDlg::removeUser(const KUser & user, const KUserGroup & group) {
+ QValueList<KUserGroup> groups = user.groups();
+ groups.remove(group);
+ if (!userMod(user.loginName(),groups)) {
+ KMessageBox::sorry(this,i18n("Could not remove user '%1' from group '%2'")
+ .arg(user.loginName()).arg(group.name()));
+ return false;
+ }
+ return true;
+}
+
+bool GroupConfigDlg::rootPassNeeded() {
+ return m_rootPassNeeded;
+}
+
+void GroupConfigDlg::slotOk() {
+ m_restricted = m_gui->groupUsersRadio->isChecked();
+ m_rootPassNeeded = ! m_gui->writeAccessChk->isChecked();
+ if (m_restricted && !m_fileShareGroup.isValid()) {
+ KMessageBox::sorry(this,i18n("You have to choose a valid group."));
+ return;
+ }
+
+ QValueList<KUser> addedUsers = m_users;
+ removeList(addedUsers,m_origUsers);
+ QValueList<KUser> removedUsers = m_origUsers;
+ removeList(removedUsers,m_users);
+
+ QValueList<KUser>::ConstIterator it;
+ for ( it = addedUsers.begin(); it != addedUsers.end(); ++it ) {
+ addUser(*it, m_fileShareGroup);
+ }
+
+ for ( it = removedUsers.begin(); it != removedUsers.end(); ++it ) {
+ removeUser(*it, m_fileShareGroup);
+ }
+
+
+ KDialogBase::slotOk();
+}
+
+bool userMod(const QString & user, const QValueList<KUserGroup> & groups) {
+ KProcess proc;
+ proc << "usermod" << "-G" << groupListToString(groups) << user;
+ return proc.start(KProcess::Block) && proc.normalExit();
+}
+
+void GroupConfigDlg::slotRemoveUser() {
+ QListBoxItem* item = m_gui->listBox->selectedItem();
+ if (!item)
+ return;
+
+ QString loginName = fromPrettyString(item->text());
+ KUser user(loginName);
+ m_users.remove(KUser(loginName));
+ updateListBox();
+ m_gui->removeBtn->setEnabled(false);
+}
+
+QString groupListToString(const QValueList<KUserGroup> & list) {
+ QValueList<KUserGroup>::ConstIterator it;
+ QString result;
+
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ result+=(*it).name()+",";
+ }
+
+ // remove last ,
+ result.truncate(result.length()-1);
+ return result;
+}
+
+void GroupConfigDlg::slotChangeGroup() {
+ QValueList<KUserGroup> allGroups = KUserGroup::allGroups();
+
+ QStringList stringList;
+
+ QValueList<KUserGroup>::iterator it;
+ for ( it = allGroups.begin(); it != allGroups.end(); ++it ) {
+ QString s = (*it).name();
+ stringList.append(s);
+ }
+
+ stringList.sort();
+
+ KDialogBase* dlg = new KDialogBase(this,"groupconfigdlg", true,
+ i18n("Allowed Users"), Ok|Cancel, Ok, true);
+
+ QVBox* vbox = dlg->makeVBoxMainWidget();
+
+ QHBox* hbox = new QHBox(vbox);
+ QLabel* lbl = new QLabel(i18n("New file share group:"),hbox);
+ KComboBox* combo = new KComboBox(hbox);
+ combo->insertStringList(stringList);
+ combo->setEditable(true);
+ combo->setCurrentText(m_fileShareGroup.name());
+
+ QCheckBox* addChk = new QCheckBox(
+ i18n("Add users from the old file share group to the new one"),
+ vbox);
+
+ QCheckBox* removeUsersChk = new QCheckBox(
+ i18n("Remove users from old file share group"),
+ vbox);
+
+ QCheckBox* removeGroupChk = new QCheckBox(
+ i18n("Delete the old file share group"),
+ vbox);
+
+ if (dlg->exec() == QDialog::Accepted) {
+ QString groupName = combo->currentText();
+ if (groupName != m_fileShareGroup.name()) {
+ QString oldGroup = m_fileShareGroup.name();
+ if (allGroups.contains(KUserGroup(groupName)))
+ setFileShareGroup(KUserGroup(groupName));
+ else {
+ if (!createFileShareGroup(groupName)) {
+ delete dlg;
+ return;
+ }
+ }
+
+ if (removeGroupChk->isChecked())
+ deleteGroup(oldGroup);
+ else
+ if (removeUsersChk->isChecked())
+ emptyGroup(oldGroup);
+
+ if (addChk->isChecked()) {
+ addUsersToGroup(m_users,KUserGroup(groupName));
+ // reread the users
+ m_fileShareGroup = KUserGroup(groupName);
+ }
+
+
+ initUsers();
+ updateListBox();
+
+ }
+ }
+
+ delete dlg;
+
+}
+
+void GroupConfigDlg::setFileShareGroup(const KUserGroup & group) {
+ m_fileShareGroup = group;
+
+ if (m_fileShareGroup.isValid()) {
+ initUsers();
+ updateListBox();
+ m_gui->groupUsersRadio->setText(
+ i18n("Only users of the '%1' group are allowed to share folders")
+ .arg(m_fileShareGroup.name()));
+ m_gui->usersGrpBx->setTitle(i18n("Users of '%1' Group")
+ .arg(m_fileShareGroup.name()));
+ m_gui->otherGroupBtn->setText(i18n("Change Group..."));
+ m_gui->usersGrpBx->show();
+ } else {
+ m_gui->groupUsersRadio->setText(i18n("Only users of a certain group are allowed to share folders"));
+ m_gui->otherGroupBtn->setText(i18n("Choose Group..."));
+ m_gui->usersGrpBx->hide();
+ }
+
+
+
+}
+
+bool GroupConfigDlg::addUsersToGroup(QValueList<KUser> users,const KUserGroup & group) {
+ QValueList<KUser>::ConstIterator it;
+ bool result = true;
+ for ( it = users.begin(); it != users.end(); ++it ) {
+ if (!addUser(*it, group))
+ result = false;
+ }
+ return result;
+}
+
+bool GroupConfigDlg::emptyGroup(const QString & s) {
+ if (KMessageBox::No == KMessageBox::questionYesNo(this,
+ i18n("Do you really want to remove all users from group '%1'?").arg(s), QString::null, KStdGuiItem::del(), KStdGuiItem::cancel())) {
+ return false;
+ }
+
+ QValueList<KUser> allUsers = KUser::allUsers();
+ bool result = true;
+ KUserGroup group(s);
+ QValueList<KUser>::ConstIterator it;
+ for ( it = allUsers.begin(); it != allUsers.end(); ++it ) {
+ if (!removeUser(*it, group))
+ result = false;
+ }
+ return result;
+}
+
+bool GroupConfigDlg::deleteGroup(const QString & s) {
+ if (KMessageBox::No == KMessageBox::questionYesNo(this,
+ i18n("Do you really want to delete group '%1'?").arg(s), QString::null, KStdGuiItem::del(), KStdGuiItem::cancel())) {
+ return false;
+ }
+
+ KProcess proc;
+ proc << "groupdel" << s;
+ bool result = proc.start(KProcess::Block) && proc.normalExit();
+ if (!result) {
+ KMessageBox::sorry(this,i18n("Deleting group '%1' failed.").arg(s));
+ }
+
+ return result;
+}
+
+bool GroupConfigDlg::createFileShareGroup(const QString & s) {
+ if (s.isEmpty()) {
+ KMessageBox::sorry(this,i18n("Please choose a valid group."));
+ return false;
+ }
+
+ if (KMessageBox::No == KMessageBox::questionYesNo(this,
+ i18n("This group '%1' does not exist. Should it be created?").arg(s), QString::null, i18n("Create"), i18n("Do Not Create")))
+ return false;
+
+ //debug("CreateFileShareGroup: "+s);
+ KProcess proc;
+ proc << "groupadd" << s;
+ bool result = proc.start(KProcess::Block) && proc.normalExit();
+ if (!result) {
+ KMessageBox::sorry(this,i18n("Creation of group '%1' failed.").arg(s));
+ } else {
+ setFileShareGroup(KUserGroup(s));
+ }
+
+ return result;
+}
+
+
+#include "groupconfigdlg.moc"
diff --git a/filesharing/simple/groupconfigdlg.h b/filesharing/simple/groupconfigdlg.h
new file mode 100644
index 00000000..79df8664
--- /dev/null
+++ b/filesharing/simple/groupconfigdlg.h
@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef GROUPCONFIGDLG_H
+#define GROUPCONFIGDLG_H
+
+#include <kdialogbase.h>
+#include <qvaluelist.h>
+#include <kuser.h>
+
+class GroupConfigGUI;
+
+class GroupConfigDlg : public KDialogBase
+{
+Q_OBJECT
+public:
+ GroupConfigDlg(QWidget * parent, const QString & fileShareGroup, bool restricted,
+ bool rootPassNeeded, bool simpleSharing);
+ ~GroupConfigDlg();
+ KUserGroup fileShareGroup() { return m_fileShareGroup; }
+ bool restricted();
+ bool rootPassNeeded();
+protected:
+ GroupConfigGUI* m_gui;
+
+ void initGUI();
+ void initUsers();
+protected slots:
+ void slotAddUser();
+ void slotRemoveUser();
+ void slotChangeGroup();
+ void updateListBox();
+ virtual void slotOk();
+
+private:
+ bool createFileShareGroup(const QString & s);
+ bool deleteGroup(const QString & s);
+ bool emptyGroup(const QString & s);
+ bool addUser(const KUser & user, const KUserGroup & group);
+ bool removeUser(const KUser & user, const KUserGroup & group);
+ bool addUsersToGroup(QValueList<KUser> users,const KUserGroup & group);
+ void setFileShareGroup(const KUserGroup & group);
+
+ QValueList<KUser> m_origUsers;
+ QValueList<KUser> m_users;
+ KUserGroup m_fileShareGroup;
+ bool m_restricted;
+ bool m_rootPassNeeded;
+ bool m_simpleSharing;
+};
+
+#endif
diff --git a/filesharing/simple/groupconfiggui.ui b/filesharing/simple/groupconfiggui.ui
new file mode 100644
index 00000000..c12e1d2c
--- /dev/null
+++ b/filesharing/simple/groupconfiggui.ui
@@ -0,0 +1,200 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>GroupConfigGUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>GroupConfigGUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>521</width>
+ <height>371</height>
+ </rect>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>allUsersRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Allow all users to share folders</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>groupUsersRadio</cstring>
+ </property>
+ <property name="text">
+ <string>Only users of the '%1' group are allowed to share folders</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>usersGrpBx</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="title">
+ <string>Users of '%1' Group</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KListBox" row="0" column="0" rowspan="3" colspan="1">
+ <property name="name">
+ <cstring>listBox</cstring>
+ </property>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton" row="1" column="1">
+ <property name="name">
+ <cstring>removeBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Remove User</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>addBtn</cstring>
+ </property>
+ <property name="text">
+ <string>Add User</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>writeAccessChk</cstring>
+ </property>
+ <property name="text">
+ <string>Group members can share folders without root password</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>180</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>otherGroupBtn</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Change Group...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>groupUsersRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>usersGrpBx</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>groupUsersRadio</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>otherGroupBtn</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>listBox</sender>
+ <signal>selectionChanged(QListBoxItem*)</signal>
+ <receiver>GroupConfigGUI</receiver>
+ <slot>listBox_selectionChanged(QListBoxItem*)</slot>
+ </connection>
+</connections>
+<includes>
+ <include location="local" impldecl="in implementation">groupconfiggui.ui.h</include>
+</includes>
+<slots>
+ <slot>listBox_selectionChanged( QListBoxItem * i )</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/filesharing/simple/groupconfiggui.ui.h b/filesharing/simple/groupconfiggui.ui.h
new file mode 100644
index 00000000..35e82f7f
--- /dev/null
+++ b/filesharing/simple/groupconfiggui.ui.h
@@ -0,0 +1,14 @@
+/****************************************************************************
+** ui.h extension file, included from the uic-generated form implementation.
+**
+** If you wish to add, delete or rename functions or slots use
+** Qt Designer which will update this file, preserving your code. Create an
+** init() function in place of a constructor, and a destroy() function in
+** place of a destructor.
+*****************************************************************************/
+
+
+void GroupConfigGUI::listBox_selectionChanged( QListBoxItem * i)
+{
+ removeBtn->setEnabled(i);
+}
diff --git a/filesharing/simple/krichtextlabel.cpp b/filesharing/simple/krichtextlabel.cpp
new file mode 100644
index 00000000..0157a8f0
--- /dev/null
+++ b/filesharing/simple/krichtextlabel.cpp
@@ -0,0 +1,112 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2005 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include "krichtextlabel.h"
+
+#include <qtooltip.h>
+#include <qstylesheet.h>
+#include <qsimplerichtext.h>
+
+#include <kglobalsettings.h>
+
+static QString qrichtextify( const QString& text )
+{
+ if ( text.isEmpty() || text[0] == '<' )
+ return text;
+
+ QStringList lines = QStringList::split('\n', text);
+ for(QStringList::Iterator it = lines.begin(); it != lines.end(); ++it)
+ {
+ *it = QStyleSheet::convertFromPlainText( *it, QStyleSheetItem::WhiteSpaceNormal );
+ }
+
+ return lines.join(QString::null);
+}
+
+KRichTextLabel::KRichTextLabel( const QString &text , QWidget *parent, const char *name )
+ : QLabel ( parent, name ) {
+ m_defaultWidth = QMIN(400, KGlobalSettings::desktopGeometry(this).width()*2/5);
+ setAlignment( Qt::WordBreak );
+ setText(text);
+}
+
+KRichTextLabel::KRichTextLabel( QWidget *parent, const char *name )
+ : QLabel ( parent, name ) {
+ m_defaultWidth = QMIN(400, KGlobalSettings::desktopGeometry(this).width()*2/5);
+ setAlignment( Qt::WordBreak );
+}
+
+void KRichTextLabel::setDefaultWidth(int defaultWidth)
+{
+ m_defaultWidth = defaultWidth;
+ updateGeometry();
+}
+
+QSizePolicy KRichTextLabel::sizePolicy() const
+{
+ return QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum, false);
+}
+
+QSize KRichTextLabel::minimumSizeHint() const
+{
+ QString qt_text = qrichtextify( text() );
+ int pref_width = 0;
+ int pref_height = 0;
+ QSimpleRichText rt(qt_text, font());
+ pref_width = m_defaultWidth;
+ rt.setWidth(pref_width);
+ int used_width = rt.widthUsed();
+ if (used_width <= pref_width)
+ {
+ while(true)
+ {
+ int new_width = (used_width * 9) / 10;
+ rt.setWidth(new_width);
+ int new_height = rt.height();
+ if (new_height > pref_height)
+ break;
+ used_width = rt.widthUsed();
+ if (used_width > new_width)
+ break;
+ }
+ pref_width = used_width;
+ }
+ else
+ {
+ if (used_width > (pref_width *2))
+ pref_width = pref_width *2;
+ else
+ pref_width = used_width;
+ }
+
+ return QSize(pref_width, rt.height());
+}
+
+QSize KRichTextLabel::sizeHint() const
+{
+ return minimumSizeHint();
+}
+
+void KRichTextLabel::setText( const QString &text ) {
+ QLabel::setText(text);
+}
+
+void KRichTextLabel::virtual_hook( int, void* )
+{ /*BASE::virtual_hook( id, data );*/ }
+
+#include "krichtextlabel.moc"
diff --git a/filesharing/simple/krichtextlabel.h b/filesharing/simple/krichtextlabel.h
new file mode 100644
index 00000000..35087fac
--- /dev/null
+++ b/filesharing/simple/krichtextlabel.h
@@ -0,0 +1,65 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 2005 Waldo Bastian <bastian@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef KRICHTEXTLABEL_H
+#define KRICHTEXTLABEL_H
+
+#include <qlabel.h>
+
+#include <kdelibs_export.h>
+
+/**
+ * @short A replacement for QLabel that supports richtext and proper layout management
+ *
+ * @author Waldo Bastian <bastian@kde.org>
+ */
+
+/*
+ * QLabel
+ */
+class KDEUI_EXPORT KRichTextLabel : public QLabel {
+ Q_OBJECT
+
+public:
+ /**
+ * Default constructor.
+ */
+ KRichTextLabel( QWidget *parent, const char *name = 0 );
+ KRichTextLabel( const QString &text, QWidget *parent, const char *name = 0 );
+
+ int defaultWidth() const { return m_defaultWidth; }
+ void setDefaultWidth(int defaultWidth);
+
+ virtual QSize minimumSizeHint() const;
+ virtual QSize sizeHint() const;
+ QSizePolicy sizePolicy() const;
+
+public slots:
+ void setText( const QString & );
+
+protected:
+ int m_defaultWidth;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KRichTextLabelPrivate;
+ KRichTextLabelPrivate *d;
+};
+
+#endif // KRICHTEXTLABEL_H