diff options
| author | David Faure <faure@kde.org> | 2013-12-18 09:53:59 +0100 | 
|---|---|---|
| committer | David Faure <faure@kde.org> | 2013-12-18 09:53:59 +0100 | 
| commit | 159963832457e6307282308455330acc7b5bd153 (patch) | |
| tree | ce1cc0234d37e9afc75bc86d734beb963ed57d02 /src/core/kdesktopfile.cpp | |
| parent | 867e7a50e6396338ab4fe9aa22ad141e4cd344d2 (diff) | |
| download | kconfig-159963832457e6307282308455330acc7b5bd153.tar.gz kconfig-159963832457e6307282308455330acc7b5bd153.tar.bz2 | |
Code reformatted using kde-dev-scripts/astyle-kdelibs.
Use git blame -w 867e7a5 to show authorship as it was before this commit.
Diffstat (limited to 'src/core/kdesktopfile.cpp')
| -rw-r--r-- | src/core/kdesktopfile.cpp | 261 | 
1 files changed, 136 insertions, 125 deletions
| diff --git a/src/core/kdesktopfile.cpp b/src/core/kdesktopfile.cpp index 0ebbb4b0..9fa3654d 100644 --- a/src/core/kdesktopfile.cpp +++ b/src/core/kdesktopfile.cpp @@ -40,7 +40,7 @@  class KDesktopFilePrivate : public KConfigPrivate  { - public: +public:      KDesktopFilePrivate(QStandardPaths::StandardLocation resourceType, const QString &fileName);      KConfigGroup desktopGroup;  }; @@ -83,129 +83,137 @@ QString KDesktopFile::locateLocal(const QString &path)  {      QString relativePath;      // Relative to config? (e.g. for autostart) -    Q_FOREACH(const QString& dir, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { +    Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) {          if (path.startsWith(dir) + '/') {              relativePath = dir.mid(path.length() + 1);              return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + relativePath;          }      }      // Relative to xdg data dir? (much more common) -    Q_FOREACH(const QString& dir, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { -        if (path.startsWith(dir) + '/') +    Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { +        if (path.startsWith(dir) + '/') {              relativePath = dir.mid(path.length() + 1); +        }      }      if (relativePath.isEmpty()) {          // What now? The desktop file doesn't come from XDG_DATA_DIRS. Use filename only and hope for the best. -        relativePath = path.mid(path.lastIndexOf(QLatin1Char('/'))+1); +        relativePath = path.mid(path.lastIndexOf(QLatin1Char('/')) + 1);      }      return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + relativePath;  } -bool KDesktopFile::isDesktopFile(const QString& path) +bool KDesktopFile::isDesktopFile(const QString &path)  { -  return (path.length() > 8 -          && path.endsWith(QLatin1String(".desktop"))); +    return (path.length() > 8 +            && path.endsWith(QLatin1String(".desktop")));  } -bool KDesktopFile::isAuthorizedDesktopFile(const QString& path) +bool KDesktopFile::isAuthorizedDesktopFile(const QString &path)  { -  if (path.isEmpty()) -     return false; // Empty paths are not ok. +    if (path.isEmpty()) { +        return false;    // Empty paths are not ok. +    } -  if (QDir::isRelativePath(path)) -     return true; // Relative paths are ok. +    if (QDir::isRelativePath(path)) { +        return true;    // Relative paths are ok. +    } -  const QString realPath = QFileInfo(path).canonicalFilePath(); -  if (realPath.isEmpty()) -      return false; // File doesn't exist. +    const QString realPath = QFileInfo(path).canonicalFilePath(); +    if (realPath.isEmpty()) { +        return false;    // File doesn't exist. +    }  #ifndef Q_OS_WIN -  const Qt::CaseSensitivity sensitivity = Qt::CaseSensitive; +    const Qt::CaseSensitivity sensitivity = Qt::CaseSensitive;  #else -  const Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive; +    const Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive;  #endif -  // Check if the .desktop file is installed as part of KDE or XDG. -  const QStringList appsDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation); -  Q_FOREACH (const QString &prefix, appsDirs) { -      if (QDir(prefix).exists() && realPath.startsWith(QFileInfo(prefix).canonicalFilePath(), sensitivity)) -          return true; -  } -  const QString servicesDir = QLatin1String("kde5/services/"); // KGlobal::dirs()->xdgDataRelativePath("services") -  Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { -      if (QDir(xdgDataPrefix).exists()) { -          const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); -          if (realPath.startsWith(prefix + QLatin1Char('/') + servicesDir, sensitivity)) -              return true; -      } -  } -  const QString autostartDir = QLatin1String("autostart/"); -  Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { -      if (QDir(xdgDataPrefix).exists()) { -          const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); -          if (realPath.startsWith(prefix + QLatin1Char('/') + autostartDir, sensitivity)) -              return true; -      } -  } - -  // Forbid desktop files outside of standard locations if kiosk is set so -  if (!KAuthorized::authorize(QLatin1String("run_desktop_files"))) { -     qWarning() << "Access to '" << path << "' denied because of 'run_desktop_files' restriction." << endl; -     return false; -  } - -  // Not otherwise permitted, so only allow if the file is executable, or if -  // owned by root (uid == 0) -  QFileInfo entryInfo( path ); -  if (entryInfo.isExecutable() || entryInfo.ownerId() == 0) -      return true; - -  qWarning() << "Access to '" << path << "' denied, not owned by root, executable flag not set." << endl; -  return false; +    // Check if the .desktop file is installed as part of KDE or XDG. +    const QStringList appsDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation); +    Q_FOREACH (const QString &prefix, appsDirs) { +        if (QDir(prefix).exists() && realPath.startsWith(QFileInfo(prefix).canonicalFilePath(), sensitivity)) { +            return true; +        } +    } +    const QString servicesDir = QLatin1String("kde5/services/"); // KGlobal::dirs()->xdgDataRelativePath("services") +    Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { +        if (QDir(xdgDataPrefix).exists()) { +            const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); +            if (realPath.startsWith(prefix + QLatin1Char('/') + servicesDir, sensitivity)) { +                return true; +            } +        } +    } +    const QString autostartDir = QLatin1String("autostart/"); +    Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) { +        if (QDir(xdgDataPrefix).exists()) { +            const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); +            if (realPath.startsWith(prefix + QLatin1Char('/') + autostartDir, sensitivity)) { +                return true; +            } +        } +    } + +    // Forbid desktop files outside of standard locations if kiosk is set so +    if (!KAuthorized::authorize(QLatin1String("run_desktop_files"))) { +        qWarning() << "Access to '" << path << "' denied because of 'run_desktop_files' restriction." << endl; +        return false; +    } + +    // Not otherwise permitted, so only allow if the file is executable, or if +    // owned by root (uid == 0) +    QFileInfo entryInfo(path); +    if (entryInfo.isExecutable() || entryInfo.ownerId() == 0) { +        return true; +    } + +    qWarning() << "Access to '" << path << "' denied, not owned by root, executable flag not set." << endl; +    return false;  }  QString KDesktopFile::readType() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Type", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Type", QString());  }  QString KDesktopFile::readIcon() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Icon", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Icon", QString());  }  QString KDesktopFile::readName() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Name", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Name", QString());  }  QString KDesktopFile::readComment() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Comment", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Comment", QString());  }  QString KDesktopFile::readGenericName() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("GenericName", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("GenericName", QString());  }  QString KDesktopFile::readPath() const  { -  Q_D(const KDesktopFile); -  // NOT readPathEntry, it is not XDG-compliant. Path entries written by -  // KDE4 will be still treated as such, though. -  return d->desktopGroup.readEntry("Path", QString()); +    Q_D(const KDesktopFile); +    // NOT readPathEntry, it is not XDG-compliant. Path entries written by +    // KDE4 will be still treated as such, though. +    return d->desktopGroup.readEntry("Path", QString());  }  QString KDesktopFile::readDevice() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("Dev", QString()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("Dev", QString());  }  QString KDesktopFile::readUrl() const @@ -216,8 +224,7 @@ QString KDesktopFile::readUrl() const      } else {          // NOT readPathEntry (see readPath())          QString url = d->desktopGroup.readEntry("URL", QString()); -        if ( !url.isEmpty() && !QDir::isRelativePath(url) ) -        { +        if (!url.isEmpty() && !QDir::isRelativePath(url)) {              // Handle absolute paths as such (i.e. we need to escape them)              return QUrl::fromLocalFile(url).toString();          } @@ -236,67 +243,68 @@ KConfigGroup KDesktopFile::actionGroup(const QString &group)      return KConfigGroup(this, QLatin1String("Desktop Action ") + group);  } -const KConfigGroup KDesktopFile::actionGroup(const QString& group) const +const KConfigGroup KDesktopFile::actionGroup(const QString &group) const  { -    return const_cast<KDesktopFile*>(this)->actionGroup(group); +    return const_cast<KDesktopFile *>(this)->actionGroup(group);  }  bool KDesktopFile::hasActionGroup(const QString &group) const  { -  return hasGroup(QString(QLatin1String("Desktop Action ") + group).toUtf8().constData()); +    return hasGroup(QString(QLatin1String("Desktop Action ") + group).toUtf8().constData());  }  bool KDesktopFile::hasLinkType() const  { -  return readType() == QLatin1String("Link"); +    return readType() == QLatin1String("Link");  }  bool KDesktopFile::hasApplicationType() const  { -  return readType() == QLatin1String("Application"); +    return readType() == QLatin1String("Application");  }  bool KDesktopFile::hasDeviceType() const  { -  return readType() == QLatin1String("FSDevice"); +    return readType() == QLatin1String("FSDevice");  }  bool KDesktopFile::tryExec() const  { -  Q_D(const KDesktopFile); -  // Test for TryExec and "X-KDE-AuthorizeAction" -  // NOT readPathEntry (see readPath()) -  QString te = d->desktopGroup.readEntry("TryExec", QString()); - -  if (!te.isEmpty()) { -    return !QStandardPaths::findExecutable(te).isEmpty(); -  } -  const QStringList list = d->desktopGroup.readEntry("X-KDE-AuthorizeAction", QStringList()); -  if (!list.isEmpty()) -  { -     for(QStringList::ConstIterator it = list.begin(); -         it != list.end(); -         ++it) -     { -        if (!KAuthorized::authorize((*it).trimmed())) -           return false; -     } -  } - -  // See also KService::username() -  bool su = d->desktopGroup.readEntry("X-KDE-SubstituteUID", false); -  if (su) -  { -      QString user = d->desktopGroup.readEntry("X-KDE-Username", QString()); -      if (user.isEmpty()) -        user = QString::fromLocal8Bit(qgetenv("ADMIN_ACCOUNT")); -      if (user.isEmpty()) -        user = QString::fromLatin1("root"); -      if (!KAuthorized::authorize(QString::fromLatin1("user/")+user)) -        return false; -  } +    Q_D(const KDesktopFile); +    // Test for TryExec and "X-KDE-AuthorizeAction" +    // NOT readPathEntry (see readPath()) +    QString te = d->desktopGroup.readEntry("TryExec", QString()); + +    if (!te.isEmpty()) { +        return !QStandardPaths::findExecutable(te).isEmpty(); +    } +    const QStringList list = d->desktopGroup.readEntry("X-KDE-AuthorizeAction", QStringList()); +    if (!list.isEmpty()) { +        for (QStringList::ConstIterator it = list.begin(); +                it != list.end(); +                ++it) { +            if (!KAuthorized::authorize((*it).trimmed())) { +                return false; +            } +        } +    } -  return true; +    // See also KService::username() +    bool su = d->desktopGroup.readEntry("X-KDE-SubstituteUID", false); +    if (su) { +        QString user = d->desktopGroup.readEntry("X-KDE-Username", QString()); +        if (user.isEmpty()) { +            user = QString::fromLocal8Bit(qgetenv("ADMIN_ACCOUNT")); +        } +        if (user.isEmpty()) { +            user = QString::fromLatin1("root"); +        } +        if (!KAuthorized::authorize(QString::fromLatin1("user/") + user)) { +            return false; +        } +    } + +    return true;  }  /** @@ -313,8 +321,8 @@ bool KDesktopFile::tryExec() const  QStringList  KDesktopFile::sortOrder() const  { -  Q_D(const KDesktopFile); -  return d->desktopGroup.readEntry("SortOrder", QStringList()); +    Q_D(const KDesktopFile); +    return d->desktopGroup.readEntry("SortOrder", QStringList());  }  //void KDesktopFile::virtual_hook( int id, void* data ) @@ -322,19 +330,20 @@ KDesktopFile::sortOrder() const  QString KDesktopFile::readDocPath() const  { -  Q_D(const KDesktopFile); -  //legacy entry in kde3 apps -  if(d->desktopGroup.hasKey( "DocPath" )) -    return d->desktopGroup.readPathEntry( "DocPath", QString() ); -  return d->desktopGroup.readPathEntry( "X-DocPath", QString() ); +    Q_D(const KDesktopFile); +    //legacy entry in kde3 apps +    if (d->desktopGroup.hasKey("DocPath")) { +        return d->desktopGroup.readPathEntry("DocPath", QString()); +    } +    return d->desktopGroup.readPathEntry("X-DocPath", QString());  } -KDesktopFile* KDesktopFile::copyTo(const QString &file) const +KDesktopFile *KDesktopFile::copyTo(const QString &file) const  { -  KDesktopFile *config = new KDesktopFile(QString()); -  this->KConfig::copyTo(file, config); +    KDesktopFile *config = new KDesktopFile(QString()); +    this->KConfig::copyTo(file, config);  //  config->setDesktopGroup(); -  return config; +    return config;  }  QStandardPaths::StandardLocation KDesktopFile::resource() const @@ -355,12 +364,14 @@ bool KDesktopFile::noDisplay() const          return true;      }      if (d->desktopGroup.hasKey("OnlyShowIn")) { -        if (!d->desktopGroup.readXdgListEntry("OnlyShowIn").contains(QLatin1String("KDE"))) +        if (!d->desktopGroup.readXdgListEntry("OnlyShowIn").contains(QLatin1String("KDE"))) {              return true; +        }      }      if (d->desktopGroup.hasKey("NotShowIn")) { -        if (d->desktopGroup.readXdgListEntry("NotShowIn").contains(QLatin1String("KDE"))) +        if (d->desktopGroup.readXdgListEntry("NotShowIn").contains(QLatin1String("KDE"))) {              return true; +        }      }      return false;  } | 
