summaryrefslogtreecommitdiffstats
path: root/filesharing/advanced/kcm_sambaconf/sambashare.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filesharing/advanced/kcm_sambaconf/sambashare.cpp')
-rw-r--r--filesharing/advanced/kcm_sambaconf/sambashare.cpp334
1 files changed, 334 insertions, 0 deletions
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 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 <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;
+}