src/libdbuspolicy1-private.h \
src/libdbuspolicy1.cpp \
src/kdbus.cpp \
- src/internal/internal.cpp \
src/internal/naive_policy_checker.cpp \
src/internal/policy.cpp \
src/internal/own_tree.cpp \
+++ /dev/null
-/*
- * Copyright (c) 2015-2019 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-/**
- * \file
- * \ingroup Implementation
- */
-#include "internal.h"
-#include "naive_policy_checker.hpp"
-#include "policy.hpp"
-#include "tslog.hpp"
-#include "xml_parser.hpp"
-#include <cassert>
-#include <dbuspolicy1/libdbuspolicy1.h>
-#include <iostream>
-#include <string>
-
-using namespace ldp_xml_parser;
-
-int __internal_init_serialized(BusType bus_type, const char *config_name, const char *serialized_filename)
-{
- assert(config_name);
- assert(config_name[0]);
-
- auto ok = policy_checker(bus_type).initDb(config_name, serialized_filename);
- if (tslog::enabled())
- policy_checker(bus_type).printContent();
- return ok ? 0 : -1;
-}
-
-int __internal_init(BusType bus_type, const char* const config_name)
-{
- return __internal_init_serialized(bus_type, config_name, nullptr);
-}
-
-int __internal_init_auto_serialized(BusType bus_type, const char *config_name)
-{
- return __internal_init_serialized(bus_type, config_name, std::string(config_name).append(".serialized").c_str());
-}
#ifndef _LIBDBUSPOLICY1_INTERNAL_H_
#define _LIBDBUSPOLICY1_INTERNAL_H_
-#include "bus_names_array.hpp"
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <sys/types.h>
-
typedef enum {
SYSTEM_BUS = 0,
SESSION_BUS = 1
} BusType;
-/** Initializes policies from given policy configuration file name
- * \param[in] bus_type Bus type (system/session)
- * \param[in] config_name Configuration file name
- */
-int __internal_init(BusType bus_type, const char* const config_name);
-
-/** Initializes policies from given serialized policy configuration file name
- * but in case of failure uses provided XML policy configuration file name
- * \param[in] bus_type Bus type (system/session)
- * \param[in] config_name Configuration file name
- * \param[in] serialized_filename Serialized policy file name
- */
-int __internal_init_serialized(BusType bus_type,
- const char* const config_name,
- const char *serialized_filename);
-
-/** Tries to initialize policy from serialized policy file name made up from
- * standard XML policy file name by adding ".serialized" suffix to it.
- * In case of failure initializes policy from given XML policy file name
- * \param[in] bus_type Bus type (system/session)
- * \param[in] config_name XML configuration file name
- */
-int __internal_init_auto_serialized(BusType bus_type, const char* const config_name);
-
#endif
bool NaivePolicyChecker::initDb(const char *config_name, const char *serialized_filename)
{
+ assert(config_name);
+ assert(config_name[0]);
+
+ bool result = false;
m_bus_db.release();
if (serialized_filename) {
if (m_bus_db.init(serialized_filename))
- return true;
+ result = true;
}
- tslog::logWarning(std::string(serialized_filename?:"<no_serialized_filename>").append(": serialized policy file not found, using XML policy file"));
+ if (!result) {
+ tslog::logWarning(std::string(serialized_filename?:"<no_serialized_filename>")
+ .append(": serialized policy file not found, using XML policy file"));
+
+ // fallback - we have only XML files
+ result = m_bus_db.initFromXML(config_name);
+ }
+
+ if (result && tslog::enabled()) {
+ printContent();
+ }
- // fallback - we have only XML files
- return m_bus_db.initFromXML(config_name);
+ return result;
}
void NaivePolicyChecker::printContent()
}
uint8_t* Serializer::serialize(const std::string config_path, size_t &size) {
- // SYSTEM_BUS here because something had to be choosen
tslog::init();
ldp_xml::StorageBackendXML xmlStorage;
if (!xmlStorage.init(config_path.c_str())) {
- std::cout << "internal_init error" << std::endl;
+ std::cout << "xmlStorage init error" << std::endl;
return nullptr;
}
*/
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/tslog.hpp"
#include "kdbus.h"
static void init_common_locked(BusType bus_type)
{
- int ret = __internal_init_auto_serialized(bus_type, primary_conf_file(bus_type));
- if (ret < 0)
- ret = __internal_init(bus_type, secondary_conf_file(bus_type));
+ auto primary_file_name = primary_conf_file(bus_type);
+ std::string primary_file_name_serialized = primary_file_name;
+ primary_file_name_serialized.append(".serialized");
- assert(ret >= 0 && "failed __internal_init");
+ auto &checker = policy_checker(bus_type);
- if (ret >= 0)
- policy_checker(bus_type).updateGroupDb(g_udesc.uid, g_udesc.gid);
+ auto ok = checker.initDb(primary_file_name, primary_file_name_serialized.c_str());
+ if (!ok)
+ ok = checker.initDb(secondary_conf_file(bus_type));
+
+ assert(ok && "failed database initialization");
+
+ checker.updateGroupDb(g_udesc.uid, g_udesc.gid);
}
static void init_global_conn_locked(BusType bus_type, std::shared_ptr<const char> resolved_path)
#include "internal/include/fb_generated.h"
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/policy.hpp"
#include "internal/serializer.hpp"
}
bool run_xml(const char *conf_file) {
- return __internal_init(SYSTEM_BUS, conf_file) == 0;
+ return policy_checker_system().initDb(conf_file);
}
bool run_xml_plus_fb(const char *conf_file, bool verify) {
const auto& system_bus_setup = access_test.first;
const auto& session_bus_setup = access_test.second;
- __internal_init(SYSTEM_BUS, system_bus_setup.first.c_str());
+ policy_checker_system().initDb(system_bus_setup.first.c_str());
if (session_bus_setup.first != "") {
- __internal_init(SESSION_BUS, session_bus_setup.first.c_str());
+ policy_checker_session().initDb(session_bus_setup.first.c_str());
}
auto *sys_db = &policy_checker_system().getPolicyDb();
const auto& session_bus_setup = test_setup.second;
// first initialize both, then perform tests to account for potential (re)initialization bugs
- __internal_init(SYSTEM_BUS, system_bus_setup.first.c_str());
+ policy_checker_system().initDb(system_bus_setup.first.c_str());
if (session_bus_setup.first != "") {
- __internal_init(SESSION_BUS, session_bus_setup.first.c_str());
+ policy_checker_session().initDb(session_bus_setup.first.c_str());
}
run_tests_for_bus(SYSTEM_BUS, system_bus_setup.second, i, passed);
#include "internal/include/fb_generated.h"
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/policy.hpp"
#include "internal/serializer.hpp"
}
bool run_policy_db() {
- __internal_init(SYSTEM_BUS, "tests/default_allow/system.conf");
+ policy_checker_system().initDb("tests/default_allow/system.conf");
auto &db = policy_checker_system().getPolicyDb();
printf("POLICY_DB:\n");
return method_test(db);
#include <string>
#include <sys/types.h>
#include <dbuspolicy1/libdbuspolicy1.h>
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/policy.hpp"
#include "internal/tslog.hpp"
bool method_test() {
unsigned i = 0;
bool flag = true;
- __internal_init(SYSTEM_BUS, "tests/default_allow/system.conf");
+ policy_checker_system().initDb("tests/default_allow/system.conf");
for (i = 0; i < sizeof(method_tests)/sizeof(struct MethodTest); i++) {
KdbusBusNames bus_names;
bus_names.addSpaceSeparatedNames(method_tests[i].name);
}
bool run_policy_db() {
- __internal_init(SYSTEM_BUS, "tests/default_deny/system.conf");
+ policy_checker_system().initDb("tests/default_deny/system.conf");
auto &db = policy_checker_system().getPolicyDb();
printf("POLICY_DB:\n");
return ownership_test(db);
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/tslog.hpp"
bool ownership_test() {
unsigned i = 0;
bool flag = true;
- __internal_init(SYSTEM_BUS, "tests/default_deny/system.conf");
+ policy_checker_system().initDb("tests/default_deny/system.conf");
for (i = 0; i < sizeof(ownership_tests)/sizeof(struct OwnershipTest); i++) {
auto decision = policy_checker_system().check(ownership_tests[i].user,
ownership_tests[i].group,
-#include "internal/include/fb_generated.h"
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/policy.hpp"
#include "internal/serializer.hpp"
}
bool run_policy_db() {
- __internal_init(SYSTEM_BUS, "tests/default_allow/system.conf");
+ policy_checker_system().initDb("tests/default_allow/system.conf");
auto &db = policy_checker_system().getPolicyDb();
printf("POLICY DB:\n");
return ownership_test(db);
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/tslog.hpp"
bool ownership_test() {
unsigned i = 0;
bool flag = true;
- __internal_init(SYSTEM_BUS, "tests/default_allow/system.conf");
+ policy_checker_system().initDb("tests/default_allow/system.conf");
for (i = 0; i < sizeof(ownership_tests)/sizeof(struct OwnershipTest); i++) {
auto decision = policy_checker_system().check(ownership_tests[i].user,
ownership_tests[i].group,
#include "internal/include/fb_generated.h"
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/policy.hpp"
#include "internal/serializer.hpp"
}
bool run_policy_db() {
- __internal_init(SYSTEM_BUS, "tests/default_deny/system.conf");
+ policy_checker_system().initDb("tests/default_deny/system.conf");
auto &db = policy_checker_system().getPolicyDb();
printf("POLICY_DB:\n");
return send_prefix_test(db);
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/policy.hpp"
#include "internal/tslog.hpp"
-#include "libdbuspolicy1-private.h"
-#include <dbuspolicy1/libdbuspolicy1.h>
-#include <string>
using ldp_xml_parser::MatchItemSend;
using ldp_xml_parser::DecisionResult;
unsigned i = 0;
bool flag = true;
- __internal_init(SYSTEM_BUS, "tests/default_deny/system.conf");
+ policy_checker_system().initDb("tests/default_deny/system.conf");
for (i = 0; i < sizeof(tests)/sizeof(struct Test); i++) {
KdbusBusNames names;
#include "internal/include/fb_generated.h"
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/policy.hpp"
#include "internal/serializer.hpp"
}
bool run_policy_db() {
- __internal_init(SYSTEM_BUS, "tests/default_allow/system.conf");
+ policy_checker_system().initDb("tests/default_allow/system.conf");
auto &db = policy_checker_system().getPolicyDb();
printf("POLICY_DB:\n");
-#include "internal/internal.h"
#include "internal/naive_policy_checker.hpp"
#include "internal/tslog.hpp"
bool signal_test() {
unsigned i = 0;
bool flag = true;
- __internal_init(SYSTEM_BUS, "tests/default_allow/system.conf");
+ policy_checker_system().initDb("tests/default_allow/system.conf");
for (i = 0; i < sizeof(signal_tests)/sizeof(struct SignalTest); i++) {
KdbusBusNames names;
MatchItemSend itemSend(signal_tests[i].interface,