summaryrefslogtreecommitdiffstats
path: root/kcontrol/kio/smbrodlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/kio/smbrodlg.cpp')
-rw-r--r--kcontrol/kio/smbrodlg.cpp191
1 files changed, 191 insertions, 0 deletions
diff --git a/kcontrol/kio/smbrodlg.cpp b/kcontrol/kio/smbrodlg.cpp
new file mode 100644
index 000000000..dc075c793
--- /dev/null
+++ b/kcontrol/kio/smbrodlg.cpp
@@ -0,0 +1,191 @@
+/* This file is part of the KDE project
+
+ Copyright (C) 2000 Alexander Neundorf <neundorf@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 as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qtextcodec.h>
+
+#include <klocale.h>
+#include <kconfig.h>
+#include <kglobal.h>
+#include <kcharsets.h>
+#include <kcombobox.h>
+#include <kdialog.h>
+
+#include "smbrodlg.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+
+SMBRoOptions::SMBRoOptions(QWidget *parent)
+ : KCModule(parent, "kcmkio")
+{
+ QGridLayout *layout = new QGridLayout(this,2,-1,KDialog::marginHint(),
+ KDialog::spacingHint());
+ QLabel *label=new QLabel(i18n("This is the configuration for the samba client only, not the server."),this);
+ layout->addMultiCellWidget(label,0,0,0,1);
+
+ m_userLe=new QLineEdit(this);
+ label=new QLabel(m_userLe,i18n("Default user name:"),this);
+ layout->addWidget(label,1,0);
+ layout->addWidget(m_userLe,1,1);
+
+ m_passwordLe=new QLineEdit(this);
+ m_passwordLe->setEchoMode(QLineEdit::Password);
+ label=new QLabel(m_passwordLe,i18n("Default password:"),this);
+ layout->addWidget(label,2,0);
+ layout->addWidget(m_passwordLe,2,1);
+
+/* m_workgroupLe=new QLineEdit(this);
+ label=new QLabel(m_workgroupLe,i18n("Workgroup:"),this);
+ layout->addWidget(label,3,0);
+ layout->addWidget(m_workgroupLe,3,1);
+
+ m_showHiddenShares=new QCheckBox(i18n("Show hidden shares"),this);
+ layout->addMultiCellWidget(m_showHiddenShares,4,4,0,1);
+
+ m_encodingList = new KComboBox( false, this );
+ QStringList _strList = KGlobal::charsets()->availableEncodingNames();
+ m_encodingList->insertStringList( _strList );
+
+ label = new QLabel( m_encodingList, i18n( "MS Windows encoding:" ), this );
+ layout->addWidget( label, 3, 0 );
+ layout->addWidget( m_encodingList, 3, 1 );
+ */
+
+ layout->addWidget(new QWidget(this),4,0);
+
+// connect(m_showHiddenShares, SIGNAL(toggled(bool)), this, SLOT(changed()));
+ connect(m_userLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed()));
+ connect(m_passwordLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed()));
+// connect(m_workgroupLe, SIGNAL(textChanged(const QString&)), this, SLOT(changed()));
+// connect( m_encodingList, SIGNAL( activated( const QString & ) ), this , SLOT( changed() ) );
+
+ layout->setRowStretch(4, 1);
+
+ // finaly read the options
+ load();
+}
+
+SMBRoOptions::~SMBRoOptions()
+{
+}
+
+void SMBRoOptions::load()
+{
+ KConfig *cfg = new KConfig("kioslaverc");
+
+ QString tmp;
+ cfg->setGroup( "Browser Settings/SMBro" );
+ m_userLe->setText(cfg->readEntry("User"));
+// m_workgroupLe->setText(cfg->readEntry("Workgroup"));
+// m_showHiddenShares->setChecked(cfg->readBoolEntry("ShowHiddenShares",false));
+
+// QStringList _strList = KGlobal::charsets()->availableEncodingNames();
+// QString m_encoding = QTextCodec::codecForLocale()->name();
+// m_encodingList->setCurrentItem( _strList.findIndex( cfg->readEntry( "Encoding", m_encoding.lower() ) ) );
+
+ // unscramble
+ QString scrambled = cfg->readEntry( "Password" );
+ QString password = "";
+ for (uint i=0; i<scrambled.length()/3; i++)
+ {
+ QChar qc1 = scrambled[i*3];
+ QChar qc2 = scrambled[i*3+1];
+ QChar qc3 = scrambled[i*3+2];
+ unsigned int a1 = qc1.latin1() - '0';
+ unsigned int a2 = qc2.latin1() - 'A';
+ unsigned int a3 = qc3.latin1() - '0';
+ unsigned int num = ((a1 & 0x3F) << 10) | ((a2& 0x1F) << 5) | (a3 & 0x1F);
+ password[i] = QChar((uchar)((num - 17) ^ 173)); // restore
+ }
+ m_passwordLe->setText(password);
+
+ delete cfg;
+}
+
+void SMBRoOptions::save()
+{
+ KConfig *cfg = new KConfig("kioslaverc");
+
+ cfg->setGroup( "Browser Settings/SMBro" );
+ cfg->writeEntry( "User", m_userLe->text());
+// cfg->writeEntry( "Workgroup", m_workgroupLe->text());
+// cfg->writeEntry( "ShowHiddenShares", m_showHiddenShares->isChecked());
+// cfg->writeEntry( "Encoding", m_encodingList->currentText() );
+
+ //taken from Nicola Brodu's smb ioslave
+ //it's not really secure, but at
+ //least better than storing the plain password
+ QString password(m_passwordLe->text());
+ QString scrambled;
+ for (uint i=0; i<password.length(); i++)
+ {
+ QChar c = password[i];
+ unsigned int num = (c.unicode() ^ 173) + 17;
+ unsigned int a1 = (num & 0xFC00) >> 10;
+ unsigned int a2 = (num & 0x3E0) >> 5;
+ unsigned int a3 = (num & 0x1F);
+ scrambled += (char)(a1+'0');
+ scrambled += (char)(a2+'A');
+ scrambled += (char)(a3+'0');
+ }
+ cfg->writeEntry( "Password", scrambled);
+
+ delete cfg;
+}
+
+void SMBRoOptions::defaults()
+{
+ m_userLe->setText("");
+ m_passwordLe->setText("");
+// m_workgroupLe->setText("");
+// m_showHiddenShares->setChecked(false);
+}
+
+void SMBRoOptions::changed()
+{
+ emit KCModule::changed(true);
+}
+
+QString SMBRoOptions::quickHelp() const
+{
+ return i18n("<h1>Windows Shares</h1>Konqueror is able to access shared "
+ "windows filesystems if properly configured. If there is a "
+ "specific computer from which you want to browse, fill in "
+ "the <em>Browse server</em> field. This is mandatory if you "
+ "do not run Samba locally. The <em>Broadcast address</em> "
+ "and <em>WINS address</em> fields will also be available, if you "
+ "use the native code, or the location of the 'smb.conf' file "
+ "from which the options are read, when using Samba. In any case, the "
+ "broadcast address (interfaces in smb.conf) must be set up if it "
+ "is guessed incorrectly or you have multiple cards. A WINS server "
+ "usually improves performance, and reduces the network load a lot.<p>"
+ "The bindings are used to assign a default user for a given server, "
+ "possibly with the corresponding password, or for accessing specific "
+ "shares. If you choose to, new bindings will be created for logins and "
+ "shares accessed during browsing. You can edit all of them from here. "
+ "Passwords will be stored locally, and scrambled so as to render them "
+ "unreadable to the human eye. For security reasons, you may not want to "
+ "do that, as entries with passwords are clearly indicated as such.<p>");
+}
+
+#include "smbrodlg.moc"