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

KDECore

  • 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
30using namespace std;
31
32QList<Action> parse(QSettings &ini);
33QHash<QString, QString> parseDomain(QSettings &ini);
34
35int 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
54QList<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
136QHash<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
QHash
Definition: ksycocafactory.h:28
QList
Definition: kaboutdata.h:33
QString
output
void output(QList< Action > actions, QHash< QString, QString > domain)
Definition: fake/kauth-policy-gen-polkit.cpp:41
parse
QList< Action > parse(QSettings &ini)
Definition: policy-gen.cpp:54
main
int main(int argc, char **argv)
Definition: policy-gen.cpp:35
parseDomain
QHash< QString, QString > parseDomain(QSettings &ini)
Definition: policy-gen.cpp:136
policy-gen.h
Action
Definition: policy-gen.h:28
Action::policyInactive
QString policyInactive
Definition: policy-gen.h:35
Action::name
QString name
Definition: policy-gen.h:29
Action::messages
QHash< QString, QString > messages
Definition: policy-gen.h:32
Action::policy
QString policy
Definition: policy-gen.h:34
Action::persistence
QString persistence
Definition: policy-gen.h:36
Action::descriptions
QHash< QString, QString > descriptions
Definition: policy-gen.h:31
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 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-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 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
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