Initial code for adding rules to Cynara 48/23848/6
authorRafal Krypa <r.krypa@samsung.com>
Thu, 3 Jul 2014 18:34:41 +0000 (20:34 +0200)
committerRafał Krypa <rafal@krypa.net>
Sun, 13 Jul 2014 21:11:50 +0000 (23:11 +0200)
Adding new class for interface to cynara-admin. No operations implemented
yet, only initialize and destroy.

Change-Id: I1337ae9586c9767fa51c5ffc30671d6b7a758e4c
Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
packaging/security-manager.spec
src/server/CMakeLists.txt
src/server/service/cynara.cpp [new file with mode: 0644]
src/server/service/include/cynara.h [new file with mode: 0644]

index e9ebbd2..bf84cfc 100644 (file)
@@ -20,6 +20,7 @@ BuildRequires: pkgconfig(libsystemd-journal)
 BuildRequires: pkgconfig(libtzplatform-config)
 BuildRequires: pkgconfig(sqlite3)
 BuildRequires: pkgconfig(db-util)
+BuildRequires: pkgconfig(cynara-admin)
 BuildRequires: boost-devel
 %{?systemd_requires}
 
index 3894888..89b21a6 100644 (file)
@@ -7,6 +7,7 @@ PKG_CHECK_MODULES(SERVER_DEP
     libtzplatform-config
     sqlite3
     db-util
+    cynara-admin
     )
 
 FIND_PACKAGE(
@@ -40,6 +41,7 @@ SET(SERVER_SOURCES
     ${SERVER_PATH}/service/smack-rules.cpp
     ${SERVER_PATH}/service/smack-labels.cpp
     ${SERVER_PATH}/service/installer.cpp
+    ${SERVER_PATH}/service/cynara.cpp
     ${SERVER_PATH}/db/privilege_db.cpp
     ${DPL_PATH}/core/src/errno_string.cpp
     ${DPL_PATH}/core/src/string.cpp
diff --git a/src/server/service/cynara.cpp b/src/server/service/cynara.cpp
new file mode 100644 (file)
index 0000000..ab760ef
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ *  Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Contact: Rafal Krypa <r.krypa@samsung.com>
+ *
+ *  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        cynara.cpp
+ * @author      Rafal Krypa <r.krypa@samsung.com>
+ * @brief       Wrapper class for Cynara interface
+ */
+
+#include <string>
+#include "cynara.h"
+
+namespace SecurityManager {
+
+static void checkCynaraAdminError(int result, const std::string &msg)
+{
+    switch (result) {
+        case CYNARA_ADMIN_API_SUCCESS:
+            return;
+        case CYNARA_ADMIN_API_OUT_OF_MEMORY:
+            ThrowMsg(CynaraException::OutOfMemory, msg);
+        case CYNARA_ADMIN_API_INVALID_PARAM:
+            ThrowMsg(CynaraException::InvalidParam, msg);
+        case CYNARA_ADMIN_API_SERVICE_NOT_AVAILABLE:
+            ThrowMsg(CynaraException::ServiceNotAvailable, msg);
+        default:
+            ThrowMsg(CynaraException::UnknownError, msg);
+    }
+}
+
+CynaraAdmin::CynaraAdmin()
+{
+    checkCynaraAdminError(
+        cynara_admin_initialize(&m_CynaraAdmin),
+        "Cannot connect to Cynara administrative interface.");
+}
+
+CynaraAdmin::~CynaraAdmin()
+{
+    cynara_admin_finish(m_CynaraAdmin);
+}
+
+} // namespace SecurityManager
diff --git a/src/server/service/include/cynara.h b/src/server/service/include/cynara.h
new file mode 100644 (file)
index 0000000..e11b133
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ *  Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Contact: Rafal Krypa <r.krypa@samsung.com>
+ *
+ *  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        cynara.h
+ * @author      Rafal Krypa <r.krypa@samsung.com>
+ * @brief       Wrapper class for Cynara interface
+ */
+
+#ifndef _SECURITY_MANAGER_CYNARA_
+#define _SECURITY_MANAGER_CYNARA_
+
+#include <cynara-admin.h>
+#include <dpl/exception.h>
+
+namespace SecurityManager {
+
+class CynaraException
+{
+public:
+    DECLARE_EXCEPTION_TYPE(SecurityManager::Exception, Base)
+    DECLARE_EXCEPTION_TYPE(Base, OutOfMemory)
+    DECLARE_EXCEPTION_TYPE(Base, InvalidParam)
+    DECLARE_EXCEPTION_TYPE(Base, ServiceNotAvailable)
+    DECLARE_EXCEPTION_TYPE(Base, UnknownError)
+};
+
+class CynaraAdmin
+{
+public:
+    CynaraAdmin();
+    virtual ~CynaraAdmin();
+
+private:
+    struct cynara_admin *m_CynaraAdmin;
+};
+
+} // namespace SecurityManager
+
+#endif // _SECURITY_MANAGER_CYNARA_