summaryrefslogtreecommitdiff
path: root/src/include
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
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')
-rw-r--r--src/include/cchecker/app.h (renamed from src/include/app.h)8
-rw-r--r--src/include/cchecker/log.h86
-rw-r--r--src/include/cchecker/logic.h (renamed from src/include/logic.h)22
-rw-r--r--src/include/cchecker/sql_query.h76
4 files changed, 183 insertions, 9 deletions
diff --git a/src/include/app.h b/src/include/cchecker/app.h
index 7452714..c7dff35 100644
--- a/src/include/app.h
+++ b/src/include/cchecker/app.h
@@ -29,7 +29,7 @@
namespace CCHECKER {
struct app_t {
- enum class verified_t : int {
+ enum class verified_t : int32_t {
NO = 0,
YES = 1,
UNKNOWN = 2
@@ -39,10 +39,14 @@ struct app_t {
std::string app_id;
std::string pkg_id;
uid_t uid;
- std::vector<std::string> certificates;
+ 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;
};
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/logic.h b/src/include/cchecker/logic.h
index c2b793d..d80ea51 100644
--- a/src/include/logic.h
+++ b/src/include/cchecker/logic.h
@@ -27,23 +27,29 @@
#include <package_manager.h>
#include <string>
#include <vector>
+#include <list>
-#include <app.h>
+#include <cchecker/app.h>
namespace CCHECKER {
+namespace DB {
+class SqlQuery;
+}
+
enum error_t {
NO_ERROR,
REGISTER_CALLBACK_ERROR,
DBUS_ERROR,
- PACKAGE_MANAGER_ERROR
+ PACKAGE_MANAGER_ERROR,
+ DATABASE_ERROR
};
class Logic {
public:
Logic(void);
virtual ~Logic(void);
- int setup();
+ error_t setup();
static void pkg_manager_callback(
const char *type,
const char *package,
@@ -61,14 +67,16 @@ class Logic {
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);
+ 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);
- error_t load_database_to_buffer();
-
- error_t register_connman_signal_handler ();
+ 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;
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