BuildRequires: zip
BuildRequires: pkgconfig(libsystemd-daemon)
BuildRequires: pkgconfig(libsystemd-journal)
+BuildRequires: pkgconfig(libsmack)
%{?systemd_requires}
%global user_name %{name}
%cmake . \
-DBUILD_TESTS=ON \
-DCMAKE_BUILD_TYPE=%{?build_type} \
- -DCMAKE_VERBOSE_MAKEFILE=ON
+ -DCMAKE_VERBOSE_MAKEFILE=ON \
+ -DDB_FILES_SMACK_LABEL="System"
make %{?jobs:-j%jobs}
%install
SET(LIB_CYNARA_ADMIN_VERSION_MAJOR 0)
SET(LIB_CYNARA_ADMIN_VERSION ${LIB_CYNARA_ADMIN_VERSION_MAJOR}.6.0)
+IF (DB_FILES_SMACK_LABEL)
+ SET(SMACK "smack")
+ SET(LIBSMACK "libsmack")
+ ADD_DEFINITIONS("-DDB_FILES_SMACK_LABEL=\"${DB_FILES_SMACK_LABEL}\"")
+ENDIF (DB_FILES_SMACK_LABEL)
+
+PKG_CHECK_MODULES(CYNARA_ADMIN_API_DEP
+ REQUIRED
+ ${LIBSMACK}
+ )
+
SET(CYNARA_LIB_CYNARA_ADMIN_PATH ${CYNARA_PATH}/admin)
SET(LIB_CYNARA_ADMIN_SOURCES
${CYNARA_DEP_LIBRARIES}
${TARGET_CYNARA_COMMON}
${TARGET_LIB_CYNARA_STORAGE}
+ ${SMACK}
)
INSTALL(TARGETS ${TARGET_LIB_CYNARA_ADMIN} DESTINATION ${LIB_INSTALL_DIR})
* @version 1.0
* @brief This file contains implementation of OfflineLogic class
*/
+#ifdef DB_FILES_SMACK_LABEL
+#include <dirent.h>
+#include <linux/xattr.h>
+#include <sys/smack.h>
+#endif
#include <common.h>
#include <config/PathConfig.h>
#include <exceptions/DefaultBucketSetNoneException.h>
#include <exceptions/InvalidBucketIdException.h>
#include <exceptions/UnknownPolicyTypeException.h>
+#include <log/log.h>
#include <plugin/PluginManager.h>
#include <types/PolicyDescription.h>
return CYNARA_API_SUCCESS;
}
+
+void OfflineLogic::labelDatabaseFiles(void)
+{
+#ifdef DB_FILES_SMACK_LABEL
+ DIR *dbDirectory;
+ struct dirent *directoryEntry;
+
+ dbDirectory = opendir(PathConfig::StoragePath::dbDir.c_str());
+ if (dbDirectory) {
+ while ((directoryEntry = readdir(dbDirectory)) != NULL) {
+ std::string f = PathConfig::StoragePath::dbDir + directoryEntry->d_name;
+ if (smack_set_label_for_path(f.c_str(), XATTR_NAME_SMACK, 1, DB_FILES_SMACK_LABEL) < 0) {
+ LOGE("Failed to set label for database file: " << f);
+ }
+ }
+ closedir(dbDirectory);
+ }
+#endif
+}
+
void OfflineLogic::onPoliciesChanged(void) {
m_storage->save();
+ labelDatabaseFiles();
}
} /* namespace Cynara */
typedef std::unique_ptr<StorageBackend> StorageBackendUniquePtr;
typedef std::unique_ptr<PluginManager> PluginManagerUniquePtr;
+ void labelDatabaseFiles(void);
+
StorageUniquePtr m_storage;
StorageBackendUniquePtr m_storageBackend;
PluginManagerUniquePtr m_pluginManager;