• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

KIO

  • sources
  • kde-4.14
  • kdelibs
  • kio
  • kio
ksambashare.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2  Copyright (c) 2004 Jan Schaefer <j_schaef@informatik.uni-kl.de>
3  Copyright 2010 Rodrigo Belem <rclbelem@gmail.com>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License version 2 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #include "ksambashare.h"
21 #include "ksambashare_p.h"
22 #include "ksambasharedata.h"
23 #include "ksambasharedata_p.h"
24 
25 #include <QtCore/QMap>
26 #include <QtCore/QMutableMapIterator>
27 #include <QtCore/QFile>
28 #include <QtCore/QRegExp>
29 #include <QtCore/QFileInfo>
30 #include <QtCore/QTextStream>
31 #include <QtCore/QStringList>
32 
33 #include <kdirwatch.h>
34 #include <kdebug.h>
35 #include <kglobal.h>
36 #include <kprocess.h>
37 #include <kuser.h>
38 
39 // Default smb.conf locations
40 // sorted by priority, most priority first
41 static const char * const DefaultSambaConfigFilePathList[] =
42 {
43  "/etc/samba/smb.conf",
44  "/etc/smb.conf",
45  "/usr/local/etc/smb.conf",
46  "/usr/local/samba/lib/smb.conf",
47  "/usr/samba/lib/smb.conf",
48  "/usr/lib/smb.conf",
49  "/usr/local/lib/smb.conf"
50 };
51 static const int DefaultSambaConfigFilePathListSize = sizeof(DefaultSambaConfigFilePathList)
52  / sizeof(char*);
53 
54 KSambaSharePrivate::KSambaSharePrivate(KSambaShare *parent)
55  : q_ptr(parent)
56  , data()
57  , smbConf()
58  , userSharePath()
59  , skipUserShare(false)
60 {
61  setUserSharePath();
62  findSmbConf();
63  sync();
64 }
65 
66 KSambaSharePrivate::~KSambaSharePrivate()
67 {
68 }
69 
70 bool KSambaSharePrivate::isSambaInstalled()
71 {
72  if (QFile::exists("/usr/sbin/smbd")
73  || QFile::exists("/usr/local/sbin/smbd")) {
74  return true;
75  }
76 
77  kDebug() << "Samba is not installed!";
78 
79  return false;
80 }
81 
82 // Try to find the samba config file path
83 // in several well-known paths
84 bool KSambaSharePrivate::findSmbConf()
85 {
86  for (int i = 0; i < DefaultSambaConfigFilePathListSize; ++i) {
87  const QString filePath(DefaultSambaConfigFilePathList[i]);
88  if (QFile::exists(filePath)) {
89  smbConf = filePath;
90  return true;
91  }
92  }
93 
94  kWarning() << "KSambaShare: Could not find smb.conf!";
95 
96  return false;
97 }
98 
99 void KSambaSharePrivate::setUserSharePath()
100 {
101  const QString rawString = testparmParamValue(QLatin1String("usershare path"));
102  const QFileInfo fileInfo(rawString);
103  if (fileInfo.isDir()) {
104  userSharePath = rawString;
105  }
106 }
107 
108 int KSambaSharePrivate::runProcess(const QString &progName, const QStringList &args,
109  QByteArray &stdOut, QByteArray &stdErr)
110 {
111  KProcess process;
112 
113  process.setProgram(progName, args);
114  process.setOutputChannelMode(KProcess::SeparateChannels);
115  process.start();
116  //TODO: make it async in future
117  process.waitForFinished();
118 
119  stdOut = process.readAllStandardOutput();
120  stdErr = process.readAllStandardError();
121  return process.exitCode();
122 }
123 
124 QString KSambaSharePrivate::testparmParamValue(const QString &parameterName)
125 {
126  if (!isSambaInstalled()) {
127  return QString();
128  }
129 
130  QStringList args;
131  QByteArray stdErr;
132  QByteArray stdOut;
133 
134  args << QLatin1String("-d0") << QLatin1String("-s") << QLatin1String("--parameter-name")
135  << parameterName;
136 
137  runProcess(QLatin1String("testparm"), args, stdOut, stdErr);
138 
139  //TODO: parse and process error messages.
140  // create a parser for the error output and
141  // send error message somewhere
142  if (!stdErr.isEmpty()) {
143  QList<QByteArray> err;
144  err << stdErr.trimmed().split('\n');
145  if ((err.count() == 2)
146  && err.at(0).startsWith("Load smb config files from")
147  && err.at(1).startsWith("Loaded services file OK.")) {
148  kDebug() << "Running testparm" << args;
149  } else {
150  kWarning() << "We got some errors while running testparm" << stdErr;
151  }
152  }
153 
154  if (!stdOut.isEmpty()) {
155  return QString::fromLocal8Bit(stdOut.trimmed());
156  }
157 
158  return QString();
159 }
160 
161 QByteArray KSambaSharePrivate::getNetUserShareInfo()
162 {
163  if (skipUserShare || !isSambaInstalled()) {
164  return QByteArray();
165  }
166 
167  QStringList args;
168  QByteArray stdOut;
169  QByteArray stdErr;
170 
171  args << QLatin1String("usershare") << QLatin1String("info");
172 
173  runProcess(QLatin1String("net"), args, stdOut, stdErr);
174 
175  if (!stdErr.isEmpty()) {
176  if (stdErr.contains("You do not have permission to create a usershare")) {
177  skipUserShare = true;
178  } else if (stdErr.contains("usershares are currently disabled")) {
179  skipUserShare = true;
180  } else {
181  //TODO: parse and process other error messages.
182  // create a parser for the error output and
183  // send error message somewhere
184  kWarning() << "We got some errors while running 'net usershare info'";
185  kWarning() << stdErr;
186  }
187  }
188 
189  return stdOut;
190 }
191 
192 QStringList KSambaSharePrivate::shareNames() const
193 {
194  return data.keys();
195 }
196 
197 QStringList KSambaSharePrivate::sharedDirs() const
198 {
199  QStringList dirs;
200 
201  QMap<QString, KSambaShareData>::ConstIterator i;
202  for (i = data.constBegin(); i != data.constEnd(); ++i) {
203  if (!dirs.contains(i.value().path())) {
204  dirs << i.value().path();
205  }
206  }
207 
208  return dirs;
209 }
210 
211 KSambaShareData KSambaSharePrivate::getShareByName(const QString &shareName) const
212 {
213  return data.value(shareName);
214 }
215 
216 QList<KSambaShareData> KSambaSharePrivate::getSharesByPath(const QString &path) const
217 {
218  QList<KSambaShareData> shares;
219 
220  QMap<QString, KSambaShareData>::ConstIterator i;
221  for (i = data.constBegin(); i != data.constEnd(); ++i) {
222  if (i.value().path() == path) {
223  shares << i.value();
224  }
225  }
226 
227  return shares;
228 }
229 
230 bool KSambaSharePrivate::isShareNameValid(const QString &name) const
231 {
232  // Samba forbidden chars
233  const QRegExp notToMatchRx(QLatin1String("[%<>*\?|/\\+=;:\",]"));
234  return (notToMatchRx.indexIn(name) == -1);
235 }
236 
237 bool KSambaSharePrivate::isDirectoryShared(const QString &path) const
238 {
239  QMap<QString, KSambaShareData>::ConstIterator i;
240  for (i = data.constBegin(); i != data.constEnd(); ++i) {
241  if (i.value().path() == path) {
242  return true;
243  }
244  }
245 
246  return false;
247 }
248 
249 bool KSambaSharePrivate::isShareNameAvailable(const QString &name) const
250 {
251  // Samba does not allow to name a share with a user name registered in the system
252  return (!KUser::allUserNames().contains(name) || !data.keys().contains(name));
253 }
254 
255 KSambaShareData::UserShareError KSambaSharePrivate::isPathValid(const QString &path) const
256 {
257  QFileInfo pathInfo = path;
258 
259  if (!pathInfo.exists()) {
260  return KSambaShareData::UserSharePathNotExists;
261  }
262 
263  if (!pathInfo.isDir()) {
264  return KSambaShareData::UserSharePathNotDirectory;
265  }
266 
267  if (pathInfo.isRelative()) {
268  if (pathInfo.makeAbsolute()) {
269  return KSambaShareData::UserSharePathNotAbsolute;
270  }
271  }
272 
273  // TODO: check if the user is root
274  if (KSambaSharePrivate::testparmParamValue(QLatin1String("usershare owner only"))
275  == QLatin1String("Yes")) {
276  if (!pathInfo.permission(QFile::ReadUser | QFile::WriteUser)) {
277  return KSambaShareData::UserSharePathNotAllowed;
278  }
279  }
280 
281  return KSambaShareData::UserSharePathOk;
282 }
283 
284 KSambaShareData::UserShareError KSambaSharePrivate::isAclValid(const QString &acl) const
285 {
286  const QRegExp aclRx("(?:(?:(\\w+\\s*)\\\\|)(\\w+\\s*):([fFrRd]{1})(?:,|))*");
287  // TODO: check if user is a valid smb user
288  return aclRx.exactMatch(acl) ? KSambaShareData::UserShareAclOk
289  : KSambaShareData::UserShareAclInvalid;
290 }
291 
292 KSambaShareData::UserShareError KSambaSharePrivate::guestsAllowed(const
293  KSambaShareData::GuestPermission &guestok) const
294 {
295  if (guestok == KSambaShareData::GuestsAllowed) {
296  if (KSambaSharePrivate::testparmParamValue("usershare allow guests")
297  == QLatin1String("No")) {
298  return KSambaShareData::UserShareGuestsNotAllowed;
299  }
300  }
301 
302  return KSambaShareData::UserShareGuestsOk;
303 }
304 
305 KSambaShareData::UserShareError KSambaSharePrivate::add(const KSambaShareData &shareData)
306 {
307  // TODO:
308  // * check for usershare max shares
309 
310  if (!isSambaInstalled()) {
311  return KSambaShareData::UserShareSystemError;
312  }
313 
314  QStringList args;
315  QByteArray stdOut;
316  QByteArray stdErr;
317 
318  if (data.contains(shareData.name())) {
319  if (data.value(shareData.name()).path() != shareData.path()) {
320  return KSambaShareData::UserShareNameInUse;
321  }
322  } else {
323  // It needs to be added here, otherwise another instance of KSambaShareDataPrivate
324  // will be created and added to data.
325  data.insert(shareData.name(), shareData);
326  }
327 
328  QString guestok = QString("guest_ok=%1").arg(
329  (shareData.guestPermission() == KSambaShareData::GuestsNotAllowed)
330  ? QLatin1String("n") : QLatin1String("y"));
331 
332  args << QLatin1String("usershare") << QLatin1String("add") << shareData.name()
333  << shareData.path() << shareData.comment() << shareData.acl() << guestok;
334 
335  int ret = runProcess(QLatin1String("net"), args, stdOut, stdErr);
336 
337  //TODO: parse and process error messages.
338  if (!stdErr.isEmpty()) {
339  // create a parser for the error output and
340  // send error message somewhere
341  kWarning() << "We got some errors while running 'net usershare add'" << args;
342  kWarning() << stdErr;
343  }
344 
345  return (ret == 0) ? KSambaShareData::UserShareOk : KSambaShareData::UserShareSystemError;
346 }
347 
348 KSambaShareData::UserShareError KSambaSharePrivate::remove(const KSambaShareData &shareData) const
349 {
350  if (!isSambaInstalled()) {
351  return KSambaShareData::UserShareSystemError;
352  }
353 
354  QStringList args;
355 
356  if (!data.contains(shareData.name())) {
357  return KSambaShareData::UserShareNameInvalid;
358  }
359 
360  args << QLatin1String("usershare") << QLatin1String("delete") << shareData.name();
361 
362  int result = KProcess::execute(QLatin1String("net"), args);
363  return (result == 0) ? KSambaShareData::UserShareOk : KSambaShareData::UserShareSystemError;
364 }
365 
366 bool KSambaSharePrivate::sync()
367 {
368  const QRegExp headerRx(QLatin1String("^\\s*\\["
369  "([^%<>*\?|/\\+=;:\",]+)"
370  "\\]"));
371 
372  const QRegExp OptValRx(QLatin1String("^\\s*([\\w\\d\\s]+)"
373  "="
374  "(.*)$"));
375 
376  QTextStream stream(getNetUserShareInfo());
377  QString currentShare;
378  QStringList shareList;
379 
380  while (!stream.atEnd()) {
381  const QString line = stream.readLine().trimmed();
382 
383  if (headerRx.exactMatch(line)) {
384  currentShare = headerRx.cap(1).trimmed();
385  shareList << currentShare;
386 
387  if (!data.contains(currentShare)) {
388  KSambaShareData shareData;
389  shareData.dd->name = currentShare;
390  data.insert(currentShare, shareData);
391  }
392  } else if (OptValRx.exactMatch(line)) {
393  const QString key = OptValRx.cap(1).trimmed();
394  const QString value = OptValRx.cap(2).trimmed();
395  KSambaShareData shareData = getShareByName(currentShare);
396 
397  if (key == QLatin1String("path")) {
398  shareData.dd->path = value;
399  } else if (key == QLatin1String("comment")) {
400  shareData.dd->comment = value;
401  } else if (key == QLatin1String("usershare_acl")) {
402  shareData.dd->acl = value;
403  } else if (key == QLatin1String("guest_ok")) {
404  shareData.dd->guestPermission = value;
405  } else {
406  kWarning() << "Something nasty happen while parsing 'net usershare info'"
407  << "share:" << currentShare << "key:" << key;
408  }
409  } else if (line.trimmed().isEmpty()) {
410  continue;
411  } else {
412  return false;
413  }
414  }
415 
416  QMutableMapIterator<QString, KSambaShareData> i(data);
417  while (i.hasNext()) {
418  i.next();
419  if (!shareList.contains(i.key())) {
420  i.remove();
421  }
422  }
423 
424  return true;
425 }
426 
427 void KSambaSharePrivate::_k_slotFileChange(const QString &path)
428 {
429  sync();
430  kDebug() << "path changed:" << path;
431  Q_Q(KSambaShare);
432  emit q->changed();
433 }
434 
435 KSambaShare::KSambaShare()
436  : QObject(0)
437  , d_ptr(new KSambaSharePrivate(this))
438 {
439  Q_D(const KSambaShare);
440  if (QFile::exists(d->userSharePath)) {
441  KDirWatch::self()->addDir(d->userSharePath, KDirWatch::WatchFiles);
442  connect(KDirWatch::self(), SIGNAL(dirty(QString)), this,
443  SLOT(_k_slotFileChange(QString)));
444  }
445 }
446 
447 KSambaShare::~KSambaShare()
448 {
449  Q_D(const KSambaShare);
450  if (KDirWatch::exists() && KDirWatch::self()->contains(d->userSharePath)) {
451  KDirWatch::self()->removeDir(d->userSharePath);
452  }
453  delete d_ptr;
454 }
455 
456 QString KSambaShare::smbConfPath() const
457 {
458  Q_D(const KSambaShare);
459  return d->smbConf;
460 }
461 
462 bool KSambaShare::isDirectoryShared(const QString &path) const
463 {
464  Q_D(const KSambaShare);
465  return d->isDirectoryShared(path);
466 }
467 
468 bool KSambaShare::isShareNameAvailable(const QString &name) const
469 {
470  Q_D(const KSambaShare);
471  return d->isShareNameValid(name) && d->isShareNameAvailable(name);
472 }
473 
474 QStringList KSambaShare::shareNames() const
475 {
476  Q_D(const KSambaShare);
477  return d->shareNames();
478 }
479 
480 QStringList KSambaShare::sharedDirectories() const
481 {
482  Q_D(const KSambaShare);
483  return d->sharedDirs();
484 }
485 
486 KSambaShareData KSambaShare::getShareByName(const QString &name) const
487 {
488  Q_D(const KSambaShare);
489  return d->getShareByName(name);
490 }
491 
492 QList<KSambaShareData> KSambaShare::getSharesByPath(const QString &path) const
493 {
494  Q_D(const KSambaShare);
495  return d->getSharesByPath(path);
496 }
497 
498 KSambaShare *KSambaShare::instance()
499 {
500  K_GLOBAL_STATIC(KSambaShare, _instance)
501  return _instance;
502 }
503 
504 #include "moc_ksambashare.cpp"
KSambaShare::shareNames
QStringList shareNames() const
Returns the list of available shares.
Definition: ksambashare.cpp:474
KSambaShareData::UserSharePathOk
Definition: ksambasharedata.h:54
QMutableMapIterator
ksambashare.h
QFileInfo::makeAbsolute
bool makeAbsolute()
QRegExp::cap
QString cap(int nth) const
kuser.h
KProcess
KSambaShareData::GuestsAllowed
Definition: ksambasharedata.h:45
KDirWatch::self
static KDirWatch * self()
KSambaSharePrivate::~KSambaSharePrivate
~KSambaSharePrivate()
Definition: ksambashare.cpp:66
QMap::contains
bool contains(const Key &key) const
QMutableMapIterator::key
const Key & key() const
kdebug.h
KSambaShare::isDirectoryShared
bool isDirectoryShared(const QString &path) const
Whether or not the given path is shared by Samba.
Definition: ksambashare.cpp:462
QByteArray::split
QList< QByteArray > split(char sep) const
KSambaSharePrivate::sync
bool sync()
Definition: ksambashare.cpp:366
QTextStream::readLine
QString readLine(qint64 maxlen)
QByteArray::trimmed
QByteArray trimmed() const
KSambaSharePrivate::_k_slotFileChange
void _k_slotFileChange(const QString &path)
Definition: ksambashare.cpp:427
QByteArray
KSambaSharePrivate::KSambaSharePrivate
KSambaSharePrivate(KSambaShare *parent)
Definition: ksambashare.cpp:54
kdirwatch.h
K_GLOBAL_STATIC
#define K_GLOBAL_STATIC(TYPE, NAME)
KSambaShareData::path
QString path() const
Definition: ksambasharedata.cpp:58
QMap::constBegin
const_iterator constBegin() const
QList::at
const T & at(int i) const
QMap
Definition: netaccess.h:36
KSambaSharePrivate::isShareNameAvailable
bool isShareNameAvailable(const QString &name) const
Definition: ksambashare.cpp:249
dirs
KStandardDirs * dirs()
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
QByteArray::isEmpty
bool isEmpty() const
QFileInfo::permission
bool permission(QFlags< QFile::Permission > permissions) const
KSambaShareData
This class represents a Samba user share.
Definition: ksambasharedata.h:39
KSambaShare::instance
static KSambaShare * instance()
Definition: ksambashare.cpp:498
KProcess::setOutputChannelMode
void setOutputChannelMode(OutputChannelMode mode)
QFile::exists
bool exists() const
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
QTextStream
KSambaShareData::UserShareSystemError
Definition: ksambasharedata.h:67
QMap::keys
QList< Key > keys() const
KSambaShareData::UserShareNameInvalid
Definition: ksambasharedata.h:52
KSambaShareData::UserShareError
UserShareError
Definition: ksambasharedata.h:48
QRegExp::indexIn
int indexIn(const QString &str, int offset, CaretMode caretMode) const
QRegExp
kglobal.h
kprocess.h
QList::count
int count(const T &value) const
QString::fromLocal8Bit
QString fromLocal8Bit(const char *str, int size)
KSambaShareData::UserSharePathNotAllowed
Definition: ksambasharedata.h:59
QTextStream::atEnd
bool atEnd() const
KSambaShareData::UserSharePathNotAbsolute
Definition: ksambasharedata.h:58
KUser::allUserNames
static QStringList allUserNames()
QFileInfo::isDir
bool isDir() const
KSambaSharePrivate
Definition: ksambashare_p.h:31
KSambaShareData::UserShareGuestsOk
Definition: ksambasharedata.h:64
QObject
KSambaShare::isShareNameAvailable
bool isShareNameAvailable(const QString &name) const
Tests that a share name is valid and does not conflict with system users names or shares...
Definition: ksambashare.cpp:468
QString::isEmpty
bool isEmpty() const
QString::trimmed
QString trimmed() const
QMap::constEnd
const_iterator constEnd() const
KSambaShareData::UserShareNameInUse
Definition: ksambasharedata.h:53
ksambasharedata_p.h
KSambaShare::~KSambaShare
virtual ~KSambaShare()
Definition: ksambashare.cpp:447
ksambashare_p.h
KSambaSharePrivate::isAclValid
KSambaShareData::UserShareError isAclValid(const QString &acl) const
Definition: ksambashare.cpp:284
KSambaSharePrivate::testparmParamValue
static QString testparmParamValue(const QString &parameterName)
Definition: ksambashare.cpp:124
KSambaSharePrivate::getSharesByPath
QList< KSambaShareData > getSharesByPath(const QString &path) const
Definition: ksambashare.cpp:216
QString
QList< QByteArray >
KSambaSharePrivate::isSambaInstalled
static bool isSambaInstalled()
Definition: ksambashare.cpp:70
QStringList
KProcess::start
void start()
QFileInfo
KSambaSharePrivate::findSmbConf
bool findSmbConf()
Definition: ksambashare.cpp:84
KSambaShareData::UserSharePathNotDirectory
Definition: ksambasharedata.h:57
QFileInfo::exists
bool exists() const
KSambaSharePrivate::setUserSharePath
void setUserSharePath()
Definition: ksambashare.cpp:99
KSambaSharePrivate::isDirectoryShared
bool isDirectoryShared(const QString &path) const
Definition: ksambashare.cpp:237
KSambaShareData::UserShareOk
Definition: ksambasharedata.h:49
QMutableMapIterator::hasNext
bool hasNext() const
KSambaSharePrivate::remove
KSambaShareData::UserShareError remove(const KSambaShareData &shareName) const
Definition: ksambashare.cpp:348
KSambaShareData::guestPermission
KSambaShareData::GuestPermission guestPermission() const
Definition: ksambasharedata.cpp:73
QMutableMapIterator::next
Item next()
KDirWatch::WatchFiles
KSambaShareData::GuestsNotAllowed
Definition: ksambasharedata.h:44
ksambasharedata.h
KSambaSharePrivate::isPathValid
KSambaShareData::UserShareError isPathValid(const QString &path) const
Definition: ksambashare.cpp:255
KSambaShareData::UserShareGuestsNotAllowed
Definition: ksambasharedata.h:66
DefaultSambaConfigFilePathListSize
static const int DefaultSambaConfigFilePathListSize
Definition: ksambashare.cpp:51
KSambaSharePrivate::isShareNameValid
bool isShareNameValid(const QString &name) const
Definition: ksambashare.cpp:230
KSambaShare::getSharesByPath
QList< KSambaShareData > getSharesByPath(const QString &path) const
Returns a list of KSambaShareData matching the path.
Definition: ksambashare.cpp:492
KSambaShareData::UserSharePathNotExists
Definition: ksambasharedata.h:56
QFileInfo::isRelative
bool isRelative() const
QLatin1String
KSambaShareData::UserShareAclOk
Definition: ksambasharedata.h:60
KProcess::SeparateChannels
QMutableMapIterator::remove
void remove()
KSambaSharePrivate::getNetUserShareInfo
QByteArray getNetUserShareInfo()
Definition: ksambashare.cpp:161
KSambaShareData::name
QString name() const
Definition: ksambasharedata.cpp:53
KSambaSharePrivate::shareNames
QStringList shareNames() const
Definition: ksambashare.cpp:192
KSambaSharePrivate::sharedDirs
QStringList sharedDirs() const
Definition: ksambashare.cpp:197
QByteArray::contains
bool contains(char ch) const
KSambaShareData::comment
QString comment() const
Definition: ksambasharedata.cpp:63
KProcess::execute
int execute(int msecs=-1)
KSambaSharePrivate::runProcess
static int runProcess(const QString &progName, const QStringList &args, QByteArray &stdOut, QByteArray &stdErr)
Definition: ksambashare.cpp:108
kWarning
static QDebug kWarning(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
KDirWatch::removeDir
void removeDir(const QString &path)
KDirWatch::addDir
void addDir(const QString &path, WatchModes watchModes=WatchDirOnly)
QMap::insert
iterator insert(const Key &key, const T &value)
KSambaShare::sharedDirectories
QStringList sharedDirectories() const
Returns a list of all directories shared by local users in Samba.
Definition: ksambashare.cpp:480
KDirWatch::exists
static bool exists()
KSambaSharePrivate::add
KSambaShareData::UserShareError add(const KSambaShareData &shareData)
Definition: ksambashare.cpp:305
KSambaShare::smbConfPath
QString smbConfPath() const
Returns the path to the used smb.conf file or empty string if no file was found.
Definition: ksambashare.cpp:456
KSambaShareData::acl
QString acl() const
Returns a containing a string describing the permission added to the users, such as "[DOMAIN\]usernam...
Definition: ksambasharedata.cpp:68
QRegExp::exactMatch
bool exactMatch(const QString &str) const
KSambaShareData::UserShareAclInvalid
Definition: ksambasharedata.h:61
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
KSambaShare::getShareByName
KSambaShareData getShareByName(const QString &name) const
Returns the KSambaShareData object of the share name.
Definition: ksambashare.cpp:486
DefaultSambaConfigFilePathList
static const char *const DefaultSambaConfigFilePathList[]
Definition: ksambashare.cpp:41
KSambaSharePrivate::getShareByName
KSambaShareData getShareByName(const QString &shareName) const
Definition: ksambashare.cpp:211
QProcess::readAllStandardOutput
QByteArray readAllStandardOutput()
QProcess::exitCode
int exitCode() const
QProcess::readAllStandardError
QByteArray readAllStandardError()
KSambaShare
This class lists Samba user shares and monitors them for addition, update and removal.
Definition: ksambashare.h:33
KSambaSharePrivate::guestsAllowed
KSambaShareData::UserShareError guestsAllowed(const KSambaShareData::GuestPermission &guestok) const
Definition: ksambashare.cpp:292
KSambaShareData::GuestPermission
GuestPermission
Definition: ksambasharedata.h:43
QMap::value
const T value(const Key &key) const
KProcess::setProgram
void setProgram(const QString &exe, const QStringList &args=QStringList())
QProcess::waitForFinished
bool waitForFinished(int msecs)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:24:53 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KIO

Skip menu "KIO"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal