summaryrefslogtreecommitdiff
path: root/src/include/cchecker
diff options
context:
space:
mode:
authorJanusz Kozerski <j.kozerski@samsung.com>2015-05-28 10:41:03 +0200
committerJanusz Kozerski <j.kozerski@samsung.com>2015-06-26 12:36:50 +0200
commita282a131cd809c3f425a44f42e30dfb902bca76e (patch)
tree5542ae81ed7f55803577beed89c91004216c267a /src/include/cchecker
parent0cad75f144c2ef178d2bc7cced6cf4c4b0e57409 (diff)
downloadcert-checker-a282a131cd809c3f425a44f42e30dfb902bca76e.tar.gz
cert-checker-a282a131cd809c3f425a44f42e30dfb902bca76e.tar.bz2
cert-checker-a282a131cd809c3f425a44f42e30dfb902bca76e.zip
Add cert-checker database (+tests). Change include files path.
* Add m_buffer in Logic class. * Load database into buffer in Logic::setup() * Move include to separate folder - this solves problem with app.h file from different package. [Verification] Run cert-checker-tests. All should pass. Change-Id: I809951a17fd44d5258ad91e480b6914e92d1058b
Diffstat (limited to 'src/include/cchecker')
-rw-r--r--src/include/cchecker/app.h55
-rw-r--r--src/include/cchecker/log.h86
-rw-r--r--src/include/cchecker/logic.h88
-rw-r--r--src/include/cchecker/sql_query.h76
4 files changed, 305 insertions, 0 deletions
diff --git a/src/include/cchecker/app.h b/src/include/cchecker/app.h
new file mode 100644
index 0000000..c7dff35
--- /dev/null
+++ b/src/include/cchecker/app.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2015 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 app.h
+ * @author Janusz Kozerski (j.kozerski@samsung.com)
+ * @version 1.0
+ * @brief This file is the implementation of app struct
+ */
+#ifndef CCHECKER_APP_H
+#define CCHECKER_APP_H
+
+#include <string>
+#include <vector>
+#include <sys/types.h>
+
+namespace CCHECKER {
+
+struct app_t {
+ enum class verified_t : int32_t {
+ NO = 0,
+ YES = 1,
+ UNKNOWN = 2
+ };
+
+ int32_t check_id;
+ std::string app_id;
+ std::string pkg_id;
+ uid_t uid;
+ std::vector<std::string> certificates; //TODO: add typedef
+ verified_t verified;
+
+ app_t(void);
+ app_t(const std::string &app_id,
+ const std::string &pkg_id,
+ uid_t uid,
+ const std::vector<std::string> &certificates);
+ std::string str(void) const;
+};
+
+} //CCHECKER
+
+#endif //CCHECKER_APP_H
diff --git a/src/include/cchecker/log.h b/src/include/cchecker/log.h
new file mode 100644
index 0000000..d4efcdc
--- /dev/null
+++ b/src/include/cchecker/log.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2015 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 log.h
+ * @author Janusz Kozerski <j.kozerski@samsung.com>
+ * @brief Project log framework - logs into journal
+ */
+
+#include <sstream>
+#include <systemd/sd-journal.h>
+
+#ifndef CERT_CHECKER_LOG_H
+#define CERT_CHECKER_LOG_H
+
+void JournalLog(int logLevel, const char *message, const char *fileName,
+ int line, const char *function);
+
+/*
+ * Replacement low overhead null logging class
+ */
+class NullStream
+{
+ public:
+ NullStream() {}
+
+ template <typename T>
+ NullStream& operator<<(const T&)
+ {
+ return *this;
+ }
+};
+
+/* avoid warnings about unused variables */
+#define DPL_MACRO_DUMMY_LOGGING(message, level) \
+ do { \
+ NullStream ns; \
+ ns << message; \
+ } while (0)
+
+#define CERT_CHECKER_LOG(message, level) \
+do \
+{ \
+ std::ostringstream platformLog; \
+ platformLog << message; \
+ JournalLog(level, \
+ platformLog.str().c_str(), \
+ __FILE__, \
+ __LINE__, \
+ __FUNCTION__); \
+} while (0)
+
+/* Errors must be always logged. */
+#define LogError(message) \
+ CERT_CHECKER_LOG(message, LOG_ERR)
+
+#ifdef BUILD_TYPE_DEBUG
+ #define LogDebug(message) \
+ CERT_CHECKER_LOG(message, LOG_DEBUG)
+ #define LogInfo(message) \
+ CERT_CHECKER_LOG(message, LOG_INFO)
+ #define LogWarning(message) \
+ CERT_CHECKER_LOG(message, LOG_WARNING)
+#else
+ #define LogDebug(message) \
+ DPL_MACRO_DUMMY_LOGGING(message, LOG_DEBUG)
+ #define LogInfo(message) \
+ DPL_MACRO_DUMMY_LOGGING(message, LOG_INFO)
+ #define LogWarning(message) \
+ DPL_MACRO_DUMMY_LOGGING(message, LOG_WARNING)
+#endif // BUILD_TYPE_DEBUG
+
+#endif //CERT_CHECKER_LOG_H
+
diff --git a/src/include/cchecker/logic.h b/src/include/cchecker/logic.h
new file mode 100644
index 0000000..d80ea51
--- /dev/null
+++ b/src/include/cchecker/logic.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2015 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 logic.h
+ * @author Janusz Kozerski (j.kozerski@samsung.com)
+ * @version 1.0
+ * @brief This file is the implementation of SQL queries
+ */
+
+#ifndef CCHECKER_LOGIC_H
+#define CCHECKER_LOGIC_H
+
+#include <gio/gio.h>
+#include <package_manager.h>
+#include <string>
+#include <vector>
+#include <list>
+
+#include <cchecker/app.h>
+
+namespace CCHECKER {
+
+namespace DB {
+class SqlQuery;
+}
+
+enum error_t {
+ NO_ERROR,
+ REGISTER_CALLBACK_ERROR,
+ DBUS_ERROR,
+ PACKAGE_MANAGER_ERROR,
+ DATABASE_ERROR
+};
+
+class Logic {
+ public:
+ Logic(void);
+ virtual ~Logic(void);
+ error_t setup();
+ static void pkg_manager_callback(
+ const char *type,
+ const char *package,
+ package_manager_event_type_e eventType,
+ package_manager_event_state_e eventState,
+ int progress,
+ package_manager_error_e error,
+ void *logic_ptr);
+ static void connman_callback(GDBusProxy *proxy,
+ gchar *sender_name,
+ gchar *signal_name,
+ GVariant *parameters,
+ void *logic_ptr);
+
+ private:
+ //TODO: implement missing members
+
+ error_t setup_db();
+ void check_ocsp(app_t &app);
+ void add_ocsp_url(const std::string &issuer, const std::string &url, int64_t date);
+ void pkgmanager_uninstall(const app_t &app);
+ void get_certs_from_signature(const std::string &signature, std::vector<std::string> &cert);
+ void load_database_to_buffer();
+ error_t register_connman_signal_handler(void);
+
+ std::list<app_t> m_buffer;
+ DB::SqlQuery *m_sqlquery;
+ bool m_is_online;
+ package_manager_h m_request;
+ GDBusProxy *m_proxy;
+
+};
+
+} // CCHECKER
+
+#endif //CCHECKER_LOGIC_H
diff --git a/src/include/cchecker/sql_query.h b/src/include/cchecker/sql_query.h
new file mode 100644
index 0000000..3996b75
--- /dev/null
+++ b/src/include/cchecker/sql_query.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2015 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 sql_query.h
+ * @author Janusz Kozerski (j.kozerski@samsung.com)
+ * @version 1.0
+ * @brief This file is the implementation of SQL queries
+ */
+
+#include <list>
+#include <string>
+
+#include <dpl/db/sql_connection.h>
+#include <cchecker/app.h>
+
+namespace CCHECKER {
+namespace DB {
+class SqlQuery {
+ public:
+ class Exception {
+ public: DECLARE_EXCEPTION_TYPE(CCHECKER::Exception, Base);
+ public: DECLARE_EXCEPTION_TYPE(Base, InternalError);
+ public: DECLARE_EXCEPTION_TYPE(Base, TransactionError);
+ public: DECLARE_EXCEPTION_TYPE(Base, InvalidArgs);
+ };
+ SqlQuery() :
+ m_connection(NULL),
+ m_inUserTransaction(false)
+ {};
+ explicit SqlQuery(const std::string &path);
+ virtual ~SqlQuery();
+
+ // Connecting outside the constructor
+ bool connect(const std::string& path);
+
+ // OCSP urls
+ /**
+ * Returns true if url has been found in database,
+ * or false in other case.
+ */
+ bool get_url(const std::string &issuer, std::string &url);
+ void set_url(const std::string &issuer, const std::string &url, const int64_t &date);
+
+ // Apps
+ bool add_app_to_check_list(const app_t &app);
+ void remove_app_from_check_list(const app_t &app);
+ void mark_as_verified(const app_t &app, const app_t::verified_t &verified);
+ void get_app_list(std::list<app_t> &apps_buffer); // TODO: typedef std::list<app_t>
+
+ protected:
+ SqlConnection *m_connection;
+
+ private:
+ bool m_inUserTransaction;
+ int getDBVersion(void);
+ void get_apps(std::list<app_t> &apps_buffer);
+ bool check_if_app_exists(const app_t &app);
+ bool get_check_id(const app_t &app, int32_t &check_id);
+ int verified_enum_to_int(const app_t::verified_t &verified);
+ app_t::verified_t verified_int_to_enum(const int &verified);
+};
+} // DB
+} // CCHECKER