summaryrefslogtreecommitdiffstats
path: root/filesharing/advanced/kcm_sambaconf/smbpasswdfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filesharing/advanced/kcm_sambaconf/smbpasswdfile.cpp')
-rw-r--r--filesharing/advanced/kcm_sambaconf/smbpasswdfile.cpp229
1 files changed, 229 insertions, 0 deletions
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 Schäfer
+ 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"