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

KDECore

  • sources
  • kde-4.14
  • kdelibs
  • kdecore
  • auth
  • policy-gen
policy-gen.cpp
Go to the documentation of this file.
1 /*
2 * Copyright (C) 2008 Nicola Gigante <nicola.gigante@gmail.com>
3 * Copyright (C) 2009 Dario Freddi <drf@kde.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published by
7 * the Free Software Foundation; either version 2.1 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public License
16 * along with this program; if not, write to the
17 * Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA .
19 */
20 
21 #include "policy-gen.h"
22 #include <QFile>
23 
24 #include <QCoreApplication>
25 #include <QSettings>
26 #include <QRegExp>
27 #include <QStringList>
28 #include <QDebug>
29 
30 using namespace std;
31 
32 QList<Action> parse(QSettings &ini);
33 QHash<QString, QString> parseDomain(QSettings &ini);
34 
35 int main(int argc, char **argv)
36 {
37  QCoreApplication app(argc, argv);
38 
39  if (argc < 2) {
40  qCritical("Too few arguments");
41  return 1;
42  }
43 
44  QSettings ini(QFile::decodeName(argv[1]), QSettings::IniFormat);
45  ini.setIniCodec("UTF-8");
46  if (ini.status()) {
47  qCritical("Error loading file: %s", argv[1]);
48  return 1;
49  }
50 
51  output(parse(ini), parseDomain(ini));
52 }
53 
54 QList<Action> parse(QSettings &ini)
55 {
56  QList<Action> actions;
57  QRegExp actionExp(QLatin1String("[0-9a-z]+(\\.[0-9a-z]+)*"));
58  QRegExp descriptionExp(QLatin1String("description(?:\\[(\\w+)\\])?"));
59  QRegExp nameExp(QLatin1String("name(?:\\[(\\w+)\\])?"));
60  QRegExp policyExp(QLatin1String("yes|no|auth_self|auth_admin"));
61 
62  descriptionExp.setCaseSensitivity(Qt::CaseInsensitive);
63  nameExp.setCaseSensitivity(Qt::CaseInsensitive);
64 
65  foreach(const QString &name, ini.childGroups()) {
66  Action action;
67 
68  if (name == QLatin1String("Domain")) {
69  continue;
70  }
71 
72  if (!actionExp.exactMatch(name)) {
73  qCritical("Wrong action syntax: %s\n", name.toLatin1().data());
74  exit(1);
75  }
76 
77  action.name = name;
78  ini.beginGroup(name);
79 
80  foreach(const QString &key, ini.childKeys()) {
81  if (descriptionExp.exactMatch(key)) {
82  QString lang = descriptionExp.capturedTexts().at(1);
83 
84  if (lang.isEmpty())
85  lang = QString::fromLatin1("en");
86 
87  action.descriptions.insert(lang, ini.value(key).toString());
88 
89  } else if (nameExp.exactMatch(key)) {
90  QString lang = nameExp.capturedTexts().at(1);
91 
92  if (lang.isEmpty())
93  lang = QString::fromLatin1("en");
94 
95  action.messages.insert(lang, ini.value(key).toString());
96 
97  } else if (key.toLower() == QLatin1String("policy")) {
98  QString policy = ini.value(key).toString();
99  if (!policyExp.exactMatch(policy)) {
100  qCritical("Wrong policy: %s", policy.toLatin1().data());
101  exit(1);
102  }
103  action.policy = policy;
104 
105  } else if (key.toLower() == QLatin1String("policyinactive")) {
106  QString policyInactive = ini.value(key).toString();
107  if (!policyExp.exactMatch(policyInactive)) {
108  qCritical("Wrong policy: %s", policyInactive.toLatin1().data());
109  exit(1);
110  }
111  action.policyInactive = policyInactive;
112 
113  } else if (key.toLower() == QLatin1String("persistence")) {
114  QString persistence = ini.value(key).toString();
115  if (persistence != QLatin1String("session") && persistence != QLatin1String("always")) {
116  qCritical("Wrong persistence: %s", persistence.toLatin1().data());
117  exit(1);
118  }
119  action.persistence = persistence;
120  }
121  }
122 
123  if (action.policy.isEmpty() || action.messages.isEmpty() || action.descriptions.isEmpty()) {
124  qCritical("Missing option in action: %s", name.toLatin1().data());
125  exit(1);
126  }
127  ini.endGroup();
128 
129  actions.append(action);
130  }
131 
132  return actions;
133 }
134 
135 
136 QHash<QString, QString> parseDomain(QSettings& ini)
137 {
138  QHash<QString, QString> rethash;
139 
140  if (ini.childGroups().contains(QString::fromLatin1("Domain"))) {
141  if (ini.contains(QString::fromLatin1("Domain/Name"))) {
142  rethash[QString::fromLatin1("vendor")] = ini.value(QString::fromLatin1("Domain/Name")).toString();
143  }
144  if (ini.contains(QString::fromLatin1("Domain/URL"))) {
145  rethash[QString::fromLatin1("vendorurl")] = ini.value(QString::fromLatin1("Domain/URL")).toString();
146  }
147  if (ini.contains(QString::fromLatin1("Domain/Icon"))) {
148  rethash[QString::fromLatin1("icon")] = ini.value(QString::fromLatin1("Domain/Icon")).toString();
149  }
150  }
151 
152  return rethash;
153 }
154 
155 
Action::name
QString name
Definition: policy-gen.h:29
Action::descriptions
QHash< QString, QString > descriptions
Definition: policy-gen.h:31
QHash::insert
iterator insert(const Key &key, const T &value)
QSettings::childKeys
QStringList childKeys() const
parseDomain
QHash< QString, QString > parseDomain(QSettings &ini)
Definition: policy-gen.cpp:136
QSettings::endGroup
void endGroup()
QCoreApplication
main
int main(int argc, char **argv)
Definition: policy-gen.cpp:35
QList::at
const T & at(int i) const
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
Action::persistence
QString persistence
Definition: policy-gen.h:36
QRegExp
QList::append
void append(const T &value)
QHash< QString, QString >
policy-gen.h
QRegExp::capturedTexts
QStringList capturedTexts() const
QSettings::contains
bool contains(const QString &key) const
QString::isEmpty
bool isEmpty() const
QSettings::childGroups
QStringList childGroups() const
QString
QList
Definition: kaboutdata.h:33
Action::policy
QString policy
Definition: policy-gen.h:34
Action
Definition: policy-gen.h:28
QString::toLower
QString toLower() const
QRegExp::setCaseSensitivity
void setCaseSensitivity(Qt::CaseSensitivity cs)
QSettings
QSettings::status
Status status() const
QSettings::value
QVariant value(const QString &key, const QVariant &defaultValue) const
QString::toLatin1
QByteArray toLatin1() const
output
void output(QList< Action > actions, QHash< QString, QString > domain)
Definition: fake/kauth-policy-gen-polkit.cpp:41
QLatin1String
QHash::isEmpty
bool isEmpty() const
Action::policyInactive
QString policyInactive
Definition: policy-gen.h:35
QByteArray::data
char * data()
QString::fromLatin1
QString fromLatin1(const char *str, int size)
QSettings::setIniCodec
void setIniCodec(QTextCodec *codec)
QRegExp::exactMatch
bool exactMatch(const QString &str) const
QVariant::toString
QString toString() const
parse
QList< Action > parse(QSettings &ini)
Definition: policy-gen.cpp:54
Action::messages
QHash< QString, QString > messages
Definition: policy-gen.h:32
QSettings::beginGroup
void beginGroup(const QString &prefix)
QFile::decodeName
QString decodeName(const QByteArray &localFileName)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:22:12 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDECore

Skip menu "KDECore"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • 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