From bda39552b64f688e669f60d2717a985b34c039d8 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Thu, 21 Mar 2019 17:05:10 +0900 Subject: [PATCH 01/16] Check file descriptor Change-Id: Ib85fc88e9ea048db18ab2992f3c528ebdfc6ad3d Signed-off-by: Hwankyu Jhun --- src/port-internal.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/port-internal.cc b/src/port-internal.cc index daa11ce..264fa16 100644 --- a/src/port-internal.cc +++ b/src/port-internal.cc @@ -68,6 +68,11 @@ int Port::Read(void* buf, unsigned int size) { int max_timeout = MAX_CNT * MAX_SLEEP; /* 10 sec */ std::lock_guard lock(mutex_); + if (fd_ < 0 || fd_ >= sysconf(_SC_OPEN_MAX)) { + LOGE("Invalid fd(%d)", fd_); + return RPC_PORT_ERROR_IO_ERROR; + } + while (left) { nb = read(fd_, buffer, left); if (nb == 0) { @@ -114,6 +119,11 @@ int Port::Write(const void* buf, unsigned int size) { struct timespec end_time = { 0, }; std::lock_guard lock(mutex_); + if (fd_ < 0 || fd_ >= sysconf(_SC_OPEN_MAX)) { + LOGE("Invalid fd(%d)", fd_); + return RPC_PORT_ERROR_IO_ERROR; + } + fds[0].fd = fd_; fds[0].events = POLLOUT; fds[0].revents = 0; -- 2.7.4 From f7adaf8d4d5eca7a53ba89124d571c6cb6e30e49 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Fri, 22 Mar 2019 11:10:57 +0900 Subject: [PATCH 02/16] Release version 1.3.9 Changes: - Check file descriptor Change-Id: I81c2e120f36d707626a4737facecb067b3685f1d Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index 762f3b5..10b7806 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -1,6 +1,6 @@ Name: rpc-port Summary: RPC Port library -Version: 1.3.8 +Version: 1.3.9 Release: 0 Group: Application Framework/Libraries License: Apache-2.0 -- 2.7.4 From 4b891b7a243af66cc85a9eac7642619ef1682891 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 27 May 2019 07:20:45 +0900 Subject: [PATCH 03/16] Fix OnSocketDisconnected event handling To call the OnDisconnectedEvent callback function, checking the type of the socket is removed. Change-Id: I2c08a08068960cc5217128ed738c8ccec6785b8c Signed-off-by: Hwankyu Jhun --- src/stub-internal.cc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/stub-internal.cc b/src/stub-internal.cc index d6c85a0..2630364 100644 --- a/src/stub-internal.cc +++ b/src/stub-internal.cc @@ -141,11 +141,9 @@ gboolean Stub::OnSocketDisconnected(GIOChannel *gio, GIOCondition cond, LOGW("Socket was disconnected. fd(%d)", fd); for (auto& p : stub->ports_) { if (p->GetFd() == fd) { - if (!p->IsDelegate()) { - stub->listener_->OnDisconnected(p->GetId(), p->GetInstance()); - if (aul_rpc_port_notify_rpc_finished() != AUL_R_OK) - LOGW("Failed to notify rpc finished"); - } + stub->listener_->OnDisconnected(p->GetId(), p->GetInstance()); + if (aul_rpc_port_notify_rpc_finished() != AUL_R_OK) + LOGW("Failed to notify rpc finished"); stub->RemoveAcceptedPorts(p->GetInstance()); break; } -- 2.7.4 From bfdd22603edabffa9eeef792e021bbf4db34a6d6 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 27 May 2019 09:04:40 +0900 Subject: [PATCH 04/16] Release version 1.3.10 Changes: - Fix OnSocketDisconnected event handling Change-Id: I2a03f5a0c955e349c72bdb0321359f0d22382ff5 Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index 10b7806..ee56dd0 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -1,6 +1,6 @@ Name: rpc-port Summary: RPC Port library -Version: 1.3.9 +Version: 1.3.10 Release: 0 Group: Application Framework/Libraries License: Apache-2.0 -- 2.7.4 From 335bec249ce842db7e1b0651a4506dae626ad437 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 12 Jun 2019 07:59:23 +0900 Subject: [PATCH 05/16] Fix Send Method of FDBroker class - Uses g_dbus_connection_send_message_with_reply() instead of g_dbus_connection_send_message_with_reply_sync() Change-Id: I1cdc81b0a7875e035ab2090f9bb400e5e3bd198f Signed-off-by: Hwankyu Jhun --- src/fdbroker-internal.cc | 72 +++++++++++++++++++++++++++--------------------- src/fdbroker-internal.h | 5 ++++ src/proxy-internal.cc | 9 +++++- src/proxy-internal.h | 2 ++ 4 files changed, 56 insertions(+), 32 deletions(-) diff --git a/src/fdbroker-internal.cc b/src/fdbroker-internal.cc index ad14b96..46eb58a 100644 --- a/src/fdbroker-internal.cc +++ b/src/fdbroker-internal.cc @@ -230,14 +230,10 @@ int FdBroker::Send(const std::string& target_appid, int (*fds)[2]) { std::string interface_name = GetInterfaceName(target_appid, port_name); GDBusMessage *msg; - GDBusMessage *reply; - GError *err = nullptr; - GVariant *reply_body; SocketPair main_sock_pair(mock_); SocketPair delegate_sock_pair(mock_); FdList fd_list; char sender_appid[255]; - int ret; if (!mock_ && aul_app_get_appid_bypid(getpid(), sender_appid, sizeof(sender_appid)) < 0) { @@ -277,37 +273,14 @@ int FdBroker::Send(const std::string& target_appid, } g_dbus_message_set_unix_fd_list(msg, fd_list.GetRaw()); - reply = g_dbus_connection_send_message_with_reply_sync( + g_dbus_connection_send_message_with_reply( DBusConnectionManager::GetInst().GetConnection(), - msg, G_DBUS_SEND_MESSAGE_FLAGS_NONE, 5000, nullptr, nullptr, &err); - if (reply == nullptr) { - LOGE("No reply. error = %s", err->message); - g_error_free(err); - g_object_unref(msg); - return -1; - } - - reply_body = g_dbus_message_get_body(reply); - if (reply_body == nullptr) { - LOGE("g_dbus_message_get_body() is failed"); - g_object_unref(msg); - return -1; - } - - g_variant_get(reply_body, "(i)", &ret); - - if (ret != 0) { - LOGE("Access Denied[sender_appid : %s]", sender_appid); - g_object_unref(msg); - g_object_unref(reply); - return -EILLEGALACCESS; - } - - LOGD("[Reply : %d]", ret); + msg, G_DBUS_SEND_MESSAGE_FLAGS_NONE, + 5000, NULL, NULL, OnResultReceived, this); + g_object_unref(msg); (*fds)[0] = main_sock_pair.Detach(SocketPair::SENDER); (*fds)[1] = delegate_sock_pair.Detach(SocketPair::SENDER); - g_object_unref(msg); return (*fds)[0]; } @@ -616,5 +589,42 @@ int FdBroker::Watch(IEventWatcher* ev, const std::string& target_appid, return 0; } +void FdBroker::OnResultReceived(GObject* source_object, + GAsyncResult* res, + gpointer user_data) { + FdBroker* broker = static_cast(user_data); + IEventWatcher* watcher = broker->watcher_; + GDBusConnection* conn = reinterpret_cast(source_object); + GError *err = nullptr; + GDBusMessage* reply = g_dbus_connection_send_message_with_reply_finish(conn, + res, &err); + if (reply == nullptr) { + LOGE("No reply. err(%s)", err ? err->message : "Unknown"); + watcher->OnPortRejected(broker->watch_appid_); + g_error_free(err); + return; + } + + GVariant* reply_body = g_dbus_message_get_body(reply); + if (reply_body == nullptr) { + LOGE("g_dbus_message_get_body() is failed"); + watcher->OnPortRejected(broker->watch_appid_); + g_object_unref(reply); + return; + } + + int ret; + g_variant_get(reply_body, "(i)", &ret); + g_object_unref(reply); + if (ret != 0) { + LOGE("Access Denied[sender_appid : %s]", broker->watch_appid_.c_str()); + watcher->OnPortRejected(broker->watch_appid_); + return; + } + + watcher->OnPortConnected(broker->watch_appid_, broker->watch_port_name_); + LOGD("[Reply : %d]", ret); +} + } // namespace internal } // namespace rpc_port diff --git a/src/fdbroker-internal.h b/src/fdbroker-internal.h index 510c992..86944d9 100644 --- a/src/fdbroker-internal.h +++ b/src/fdbroker-internal.h @@ -46,6 +46,8 @@ class FdBroker { virtual void OnPortVanished(const std::string& appid, const std::string& port_name) = 0; virtual void OnPortRejected(const std::string& appid) = 0; + virtual void OnPortConnected(const std::string& appid, + const std::string& port_name) = 0; }; explicit FdBroker(bool mock = false) : mock_(mock) {} @@ -159,6 +161,9 @@ class FdBroker { static void OnNameVanished(GDBusConnection *connection, const gchar *name, gpointer user_data); + static void OnResultReceived(GObject* source_object, + GAsyncResult* res, + gpointer user_data); private: IEventListener* listener_ = nullptr; diff --git a/src/proxy-internal.cc b/src/proxy-internal.cc index 262634b..86da798 100644 --- a/src/proxy-internal.cc +++ b/src/proxy-internal.cc @@ -115,7 +115,6 @@ void Proxy::OnPortAppeared(const std::string& appid, LOGW("[__OnPortAppeared__] fds[0]: %d, fds[1]: %d", fds[0], fds[1]); main_port_.reset(new ProxyPort(this, fds[0], appid, false)); delegate_port_.reset(new ProxyPort(this, fds[1], appid)); - listener_->OnConnected(appid, main_port_.get()); } void Proxy::OnPortVanished(const std::string& appid, @@ -124,6 +123,14 @@ void Proxy::OnPortVanished(const std::string& appid, appid.c_str(), port_name.c_str()); } +void Proxy::OnPortConnected(const std::string& appid, + const std::string& port_name) { + LOGW("[__OnPortConnected__] endpoint(%s), port_name(%s)", + appid.c_str(), port_name.c_str()); + + listener_->OnConnected(appid, main_port_.get()); +} + int Proxy::Connect(std::string appid, std::string port_name, IEventListener* ev) { if (ev == nullptr) diff --git a/src/proxy-internal.h b/src/proxy-internal.h index 8584ca2..76fc462 100644 --- a/src/proxy-internal.h +++ b/src/proxy-internal.h @@ -85,6 +85,8 @@ class Proxy : public FdBroker::IEventWatcher { void OnPortVanished(const std::string& appid, const std::string& port_name) override; void OnPortRejected(const std::string& appid) override; + void OnPortConnected(const std::string& appid, + const std::string& port_name) override; private: std::string port_name_; -- 2.7.4 From a22379a64b332249d8c210bcb9dc7ea727574538 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Tue, 18 Jun 2019 07:24:20 +0900 Subject: [PATCH 06/16] Release version 1.3.11 Changes: - Fix Send Method of FDBroker class Change-Id: Idadd489716db1387bcaed766df333e7460a1abc6 Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index ee56dd0..440b78d 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -1,6 +1,6 @@ Name: rpc-port Summary: RPC Port library -Version: 1.3.10 +Version: 1.3.11 Release: 0 Group: Application Framework/Libraries License: Apache-2.0 -- 2.7.4 From 900f838800e394c3f3f59781b3349ac3000fd95c Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 19 Jun 2019 08:43:38 +0900 Subject: [PATCH 07/16] Fix a bug about access control The ports should be set after a proxy is connected to a stub. Change-Id: I54ffc48bb28e1dc2f85c95464120dec98b6271e9 Signed-off-by: Hwankyu Jhun --- src/fdbroker-internal.cc | 4 ++-- src/fdbroker-internal.h | 2 ++ src/proxy-internal.cc | 21 ++++++++++++++++----- src/proxy-internal.h | 3 +++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/fdbroker-internal.cc b/src/fdbroker-internal.cc index 46eb58a..1993d71 100644 --- a/src/fdbroker-internal.cc +++ b/src/fdbroker-internal.cc @@ -600,7 +600,7 @@ void FdBroker::OnResultReceived(GObject* source_object, res, &err); if (reply == nullptr) { LOGE("No reply. err(%s)", err ? err->message : "Unknown"); - watcher->OnPortRejected(broker->watch_appid_); + watcher->OnPortDisconnected(broker->watch_appid_, broker->watch_port_name_); g_error_free(err); return; } @@ -608,7 +608,7 @@ void FdBroker::OnResultReceived(GObject* source_object, GVariant* reply_body = g_dbus_message_get_body(reply); if (reply_body == nullptr) { LOGE("g_dbus_message_get_body() is failed"); - watcher->OnPortRejected(broker->watch_appid_); + watcher->OnPortDisconnected(broker->watch_appid_, broker->watch_port_name_); g_object_unref(reply); return; } diff --git a/src/fdbroker-internal.h b/src/fdbroker-internal.h index 86944d9..cfd5bbd 100644 --- a/src/fdbroker-internal.h +++ b/src/fdbroker-internal.h @@ -48,6 +48,8 @@ class FdBroker { virtual void OnPortRejected(const std::string& appid) = 0; virtual void OnPortConnected(const std::string& appid, const std::string& port_name) = 0; + virtual void OnPortDisconnected(const std::string& appid, + const std::string& port_name) = 0; }; explicit FdBroker(bool mock = false) : mock_(mock) {} diff --git a/src/proxy-internal.cc b/src/proxy-internal.cc index 86da798..04deef8 100644 --- a/src/proxy-internal.cc +++ b/src/proxy-internal.cc @@ -100,8 +100,9 @@ void Proxy::OnPortAppeared(const std::string& appid, if (listener_ == nullptr) return; - int fds[2] = { 0, }; - int r = fd_broker_.Send(appid, port_name, &fds); + fds_[0] = 0; + fds_[1] = 0; + int r = fd_broker_.Send(appid, port_name, &fds_); if (r <= 0) { IEventListener* listener = listener_; listener_ = nullptr; @@ -112,9 +113,7 @@ void Proxy::OnPortAppeared(const std::string& appid, return; } - LOGW("[__OnPortAppeared__] fds[0]: %d, fds[1]: %d", fds[0], fds[1]); - main_port_.reset(new ProxyPort(this, fds[0], appid, false)); - delegate_port_.reset(new ProxyPort(this, fds[1], appid)); + LOGW("[__OnPortAppeared__] fds[0]: %d, fds[1]: %d", fds_[0], fds_[1]); } void Proxy::OnPortVanished(const std::string& appid, @@ -128,9 +127,21 @@ void Proxy::OnPortConnected(const std::string& appid, LOGW("[__OnPortConnected__] endpoint(%s), port_name(%s)", appid.c_str(), port_name.c_str()); + main_port_.reset(new ProxyPort(this, fds_[0], appid, false)); + delegate_port_.reset(new ProxyPort(this, fds_[1], appid)); listener_->OnConnected(appid, main_port_.get()); } +void Proxy::OnPortDisconnected(const std::string& appid, + const std::string& port_name) { + LOGW("[__OnPortDisconnected__] endporint(%s), port_name(%s)", + appid.c_str(), port_name.c_str()); + + IEventListener* listener = listener_; + listener_ = nullptr; + listener->OnDisconnected(appid); +} + int Proxy::Connect(std::string appid, std::string port_name, IEventListener* ev) { if (ev == nullptr) diff --git a/src/proxy-internal.h b/src/proxy-internal.h index 76fc462..642be5b 100644 --- a/src/proxy-internal.h +++ b/src/proxy-internal.h @@ -87,6 +87,8 @@ class Proxy : public FdBroker::IEventWatcher { void OnPortRejected(const std::string& appid) override; void OnPortConnected(const std::string& appid, const std::string& port_name) override; + void OnPortDisconnected(const std::string& appid, + const std::string& port_name) override; private: std::string port_name_; @@ -95,6 +97,7 @@ class Proxy : public FdBroker::IEventWatcher { IEventListener* listener_ = nullptr; FdBroker fd_broker_; std::string target_appid_; + int fds_[2]; }; } // namespace internal -- 2.7.4 From c1647f6faa84b7f223be632afe11c1755af5cb6d Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 19 Jun 2019 10:13:00 +0900 Subject: [PATCH 08/16] Release version 1.3.12 Changes: - Fix a bug about access control Change-Id: Ib828c54600cec1b6b87a117b8df998164ec06a24 Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index 440b78d..55877d2 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -1,6 +1,6 @@ Name: rpc-port Summary: RPC Port library -Version: 1.3.11 +Version: 1.3.12 Release: 0 Group: Application Framework/Libraries License: Apache-2.0 -- 2.7.4 From b9ff42fddcbfd7a5d419c776c15c44ece42c1f48 Mon Sep 17 00:00:00 2001 From: Junghoon Park Date: Mon, 1 Jul 2019 10:55:03 +0900 Subject: [PATCH 09/16] Change const string& to string - It is better to moving value type in case of adding elements to internal container Change-Id: I31faa20c4fc49b8342183efba8c5809365c8d18b Signed-off-by: Junghoon Park --- src/ac-internal.cc | 4 ++-- src/ac-internal.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ac-internal.cc b/src/ac-internal.cc index 89138ca..a8c0f85 100644 --- a/src/ac-internal.cc +++ b/src/ac-internal.cc @@ -37,8 +37,8 @@ namespace internal { AccessController::~AccessController() {} -void AccessController::AddPrivilege(const std::string& privilege) { - privileges_.push_back(privilege); +void AccessController::AddPrivilege(std::string privilege) { + privileges_.push_back(std::move(privilege)); } void AccessController::SetTrusted(const bool trusted) { diff --git a/src/ac-internal.h b/src/ac-internal.h index d11d33b..88bc8be 100644 --- a/src/ac-internal.h +++ b/src/ac-internal.h @@ -34,7 +34,7 @@ class AccessController { explicit AccessController(bool trusted = false) : trusted_(trusted) {} virtual ~AccessController(); - void AddPrivilege(const std::string& privilege); + void AddPrivilege(std::string privilege); void SetTrusted(const bool trusted); int Check(GDBusConnection *connection, const char *sender, const char* sender_appid); -- 2.7.4 From c0933adc774c48b3a1f291a520859847c3062cfe Mon Sep 17 00:00:00 2001 From: Junghoon Park Date: Mon, 1 Jul 2019 11:25:04 +0900 Subject: [PATCH 10/16] Use RAII idiom - Change raw pointers to smart pointers Change-Id: Ia81462b077d447763a73cd9584ad160b0c411170 Signed-off-by: Junghoon Park --- src/ac-internal.cc | 51 +++++++++++++++++---------------------------------- src/ac-internal.h | 9 ++++----- 2 files changed, 21 insertions(+), 39 deletions(-) diff --git a/src/ac-internal.cc b/src/ac-internal.cc index a8c0f85..f8be409 100644 --- a/src/ac-internal.cc +++ b/src/ac-internal.cc @@ -35,8 +35,6 @@ namespace rpc_port { namespace internal { -AccessController::~AccessController() {} - void AccessController::AddPrivilege(std::string privilege) { privileges_.push_back(std::move(privilege)); } @@ -106,61 +104,46 @@ int AccessController::SetCache(const std::string& sender) { return -1; } -AccessController::Cynara::Cynara() { - cynara_ = nullptr; - client_ = nullptr; - user_ = nullptr; +AccessController::Cynara::Cynara() + : cynara_(nullptr, cynara_finish), client_(nullptr, std::free), + user_(nullptr, std::free) { + cynara* cynara_inst = nullptr; - if (cynara_initialize(&cynara_, NULL) != CYNARA_API_SUCCESS) { + if (cynara_initialize(&cynara_inst, NULL) != CYNARA_API_SUCCESS) { LOGE("cynara_initialize() is failed"); + } else { + cynara_.reset(cynara_inst); } } -AccessController::Cynara::~Cynara() { - if (client_) - free(client_); - if (user_) - free(user_); - if (cynara_) - cynara_finish(cynara_); -} - int AccessController::Cynara::FetchCredsFromDBus(GDBusConnection* connection, const char* sender) { - int ret; - - if (client_) { - free(client_); - client_ = nullptr; - } - - if (user_) { - free(user_); - user_ = nullptr; - } - - ret = cynara_creds_gdbus_get_user(connection, sender, USER_METHOD_DEFAULT, - &user_); + char* user = nullptr; + int ret = cynara_creds_gdbus_get_user(connection, sender, USER_METHOD_DEFAULT, + &user); if (ret != CYNARA_API_SUCCESS) { LOGE("cynara_creds_gdbus_get_user() is failed : %d", ret); return -1; } + user_.reset(user); + char* client = nullptr; ret = cynara_creds_gdbus_get_client(connection, sender, CLIENT_METHOD_DEFAULT, - &client_); + &client); if (ret != CYNARA_API_SUCCESS) { LOGE("cynara_creds_gdbus_get_client() is failed : %d", ret); return -1; } + client_.reset(client); - LOGD("cred client : %s, cred user : %s", client_, user_); + LOGD("cred client : %s, cred user : %s", client_.get(), user_.get()); return 0; } int AccessController::Cynara::Check(const std::string& privilege) const { LOGD("check privilege %s", privilege.c_str()); - if (cynara_check(cynara_, client_, "", user_, privilege.c_str()) != - CYNARA_API_ACCESS_ALLOWED) { + if (cynara_check(cynara_.get(), client_.get(), "", user_.get(), + privilege.c_str()) != CYNARA_API_ACCESS_ALLOWED) { LOGE("cynara_check() is not allowed : %s", privilege.c_str()); return -1; } diff --git a/src/ac-internal.h b/src/ac-internal.h index 88bc8be..174f231 100644 --- a/src/ac-internal.h +++ b/src/ac-internal.h @@ -25,6 +25,7 @@ #include #include #include +#include namespace rpc_port { namespace internal { @@ -32,7 +33,6 @@ namespace internal { class AccessController { public: explicit AccessController(bool trusted = false) : trusted_(trusted) {} - virtual ~AccessController(); void AddPrivilege(std::string privilege); void SetTrusted(const bool trusted); @@ -43,15 +43,14 @@ class AccessController { class Cynara { public: Cynara(); - ~Cynara(); int FetchCredsFromDBus(GDBusConnection *connection, const char *sender); int Check(const std::string& privilege) const; private: - cynara *cynara_; - char *client_; - char *user_; + std::unique_ptr cynara_; + std::unique_ptr client_; + std::unique_ptr user_; }; int SetCache(const std::string& sender); -- 2.7.4 From 9c8a7134f0bd389effd3033c28e3d400a2a9a569 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 1 Jul 2019 11:47:14 +0900 Subject: [PATCH 11/16] Fix unit tests - Fixes mockup code - Runs the unit tests automatically Change-Id: I154dc6513205e0446336a5cb1fb4e8dba913d691 Signed-off-by: Hwankyu Jhun --- CMakeLists.txt | 8 ++++++++ packaging/rpc-port.spec | 16 +++++++++++++++- src/fdbroker-internal.cc | 1 + unit_tests/CMakeLists.txt | 3 +++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index af6b846..bdc8943 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,4 +56,12 @@ INSTALL(TARGETS ${this_target} DESTINATION ${LIB_INSTALL_DIR}) INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION include/rpc-port FILES_MATCHING PATTERN "*.h") INSTALL(DIRECTORY ${LIBRARY_OUTPUT_PATH}/ DESTINATION ${LIB_INSTALL_DIR} FILES_MATCHING PATTERN "*.so*") +IF(NOT DEFINED MINIMUM_BUILD) +ENABLE_TESTING() +SET(RPC_PORT_UNITTESTS rpc-port_unittests) +ADD_TEST(NAME ${RPC_PORT_UNITTESTS} COMMAND ${RPC_PORT_UNITTESTS} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/unit_tests) + ADD_SUBDIRECTORY(unit_tests) +ADD_DEPENDENCIES(${RPC_PORT_UNITTESTS} rpc-port) +ENDIF(NOT DEFINED MINIMUM_BUILD) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index 55877d2..b450277 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -18,6 +18,11 @@ BuildRequires: pkgconfig(cynara-client) BuildRequires: pkgconfig(cynara-creds-gdbus) BuildRequires: pkgconfig(uuid) +%if 0%{?gcov:1} +BuildRequires: lcov +BuildRequires: zip +%endif + Requires(post): /sbin/ldconfig Requires(post): coreutils Requires(postun): /sbin/ldconfig @@ -90,6 +95,15 @@ mkdir -p %{buildroot}%{_datadir}/gcov/obj install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj %endif +%check +ctest --output-on-failure %{?_smp_mflags} +%if 0%{?gcov:1} +lcov -c --ignore-errors graph --no-external -q -d . -o rpc-port.info +genhtml rpc-port.info -o rpc-port.out +zip -r rpc-port.zip rpc-port.out rpc-port.info +install -m 0644 rpc-port.zip %{buildroot}%{_datadir}/gcov/ +%endif + %post -p /sbin/ldconfig @@ -121,5 +135,5 @@ install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj ################################################# %if 0%{?gcov:1} %files gcov -%{_datadir}/gcov/obj/* +%{_datadir}/gcov/* %endif diff --git a/src/fdbroker-internal.cc b/src/fdbroker-internal.cc index 1993d71..7509e93 100644 --- a/src/fdbroker-internal.cc +++ b/src/fdbroker-internal.cc @@ -256,6 +256,7 @@ int FdBroker::Send(const std::string& target_appid, (*fds)[0] = main_sock_pair.Detach(SocketPair::SENDER); (*fds)[1] = delegate_sock_pair.Detach(SocketPair::SENDER); + watcher_->OnPortConnected(watch_appid_, watch_port_name_); return (*fds)[0]; } diff --git a/unit_tests/CMakeLists.txt b/unit_tests/CMakeLists.txt index a3b19c4..dac0b21 100644 --- a/unit_tests/CMakeLists.txt +++ b/unit_tests/CMakeLists.txt @@ -19,9 +19,12 @@ SET(CMAKE_CXX_FLAGS_RELEASE "-O2") SET(SOURCES "") INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../src) AUX_SOURCE_DIRECTORY(src SOURCES) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../src RPC_PORT_SOURCES) ADD_EXECUTABLE(${PROJECT_NAME} + ${RPC_PORT_SOURCES} ${SOURCES} ) -- 2.7.4 From 2b8fa2d6c0a89c1a91c2d3466291d8b448050029 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Tue, 2 Jul 2019 08:19:59 +0900 Subject: [PATCH 12/16] Release version 1.3.13 Changes: - Change const string& to string - Use RAII idiom - Fix unit tests Change-Id: I6d519a50dd8ebca1365481fe916f67e35146f4e7 Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index b450277..832e650 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -1,6 +1,6 @@ Name: rpc-port Summary: RPC Port library -Version: 1.3.12 +Version: 1.3.13 Release: 0 Group: Application Framework/Libraries License: Apache-2.0 -- 2.7.4 From b95a73c09394aa0d2cf71737f9ee4fa462435564 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 10 Jul 2019 07:58:28 +0900 Subject: [PATCH 13/16] Check IEventWatcher ptr before calling the method This patch add exceptions to check whether the watcher variable is nullptr or not. Change-Id: I846cc3181be4907fc4b6a8178625fe4da34ea45c Signed-off-by: Hwankyu Jhun --- src/fdbroker-internal.cc | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/fdbroker-internal.cc b/src/fdbroker-internal.cc index 7509e93..a059c92 100644 --- a/src/fdbroker-internal.cc +++ b/src/fdbroker-internal.cc @@ -601,7 +601,10 @@ void FdBroker::OnResultReceived(GObject* source_object, res, &err); if (reply == nullptr) { LOGE("No reply. err(%s)", err ? err->message : "Unknown"); - watcher->OnPortDisconnected(broker->watch_appid_, broker->watch_port_name_); + if (watcher) { + watcher->OnPortDisconnected(broker->watch_appid_, + broker->watch_port_name_); + } g_error_free(err); return; } @@ -609,7 +612,10 @@ void FdBroker::OnResultReceived(GObject* source_object, GVariant* reply_body = g_dbus_message_get_body(reply); if (reply_body == nullptr) { LOGE("g_dbus_message_get_body() is failed"); - watcher->OnPortDisconnected(broker->watch_appid_, broker->watch_port_name_); + if (watcher) { + watcher->OnPortDisconnected(broker->watch_appid_, + broker->watch_port_name_); + } g_object_unref(reply); return; } @@ -619,11 +625,13 @@ void FdBroker::OnResultReceived(GObject* source_object, g_object_unref(reply); if (ret != 0) { LOGE("Access Denied[sender_appid : %s]", broker->watch_appid_.c_str()); - watcher->OnPortRejected(broker->watch_appid_); + if (watcher) + watcher->OnPortRejected(broker->watch_appid_); return; } - watcher->OnPortConnected(broker->watch_appid_, broker->watch_port_name_); + if (watcher) + watcher->OnPortConnected(broker->watch_appid_, broker->watch_port_name_); LOGD("[Reply : %d]", ret); } -- 2.7.4 From c198ecfec3aff95bc3909feaa0bc079804d81969 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 10 Jul 2019 08:17:00 +0900 Subject: [PATCH 14/16] Release version 1.3.14 Changes: - Check IEventWatcher ptr before calling the method Change-Id: Idc1bec9abd6ebab3e57d450058b8fe7353379323 Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index 832e650..fa30a14 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -1,6 +1,6 @@ Name: rpc-port Summary: RPC Port library -Version: 1.3.13 +Version: 1.3.14 Release: 0 Group: Application Framework/Libraries License: Apache-2.0 -- 2.7.4 From 4f3db6e235818610f2fb9992ae11e79e52bbdd74 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 15 Jul 2019 08:49:13 +0900 Subject: [PATCH 15/16] Adjust check section position Some profile doesn't support %check section. It causes the build error issue. To solve the issue, this patch adjusts %check section position. Change-Id: I7f3e0f66691cb8e062d7d1a2ebd12cbbba5bca6b Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index fa30a14..ec1da35 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -85,16 +85,6 @@ mkdir -p gcov-obj find . -name '*.gcno' -exec cp '{}' gcov-obj ';' %endif -%install -rm -rf %{buildroot} - -%make_install - -%if 0%{?gcov:1} -mkdir -p %{buildroot}%{_datadir}/gcov/obj -install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj -%endif - %check ctest --output-on-failure %{?_smp_mflags} %if 0%{?gcov:1} @@ -104,6 +94,15 @@ zip -r rpc-port.zip rpc-port.out rpc-port.info install -m 0644 rpc-port.zip %{buildroot}%{_datadir}/gcov/ %endif +%install +rm -rf %{buildroot} + +%make_install + +%if 0%{?gcov:1} +mkdir -p %{buildroot}%{_datadir}/gcov/obj +install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj +%endif %post -p /sbin/ldconfig -- 2.7.4 From 52dcb2cd87793a85f6fd06506d47e6c755641d9b Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 15 Jul 2019 14:02:37 +0900 Subject: [PATCH 16/16] Release version 1.3.15 Changes: - Adjust check section position Change-Id: I346af2b7814834b4fdb70420a19fcbdf6255f297 Signed-off-by: Hwankyu Jhun --- packaging/rpc-port.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/rpc-port.spec b/packaging/rpc-port.spec index ec1da35..f52ae77 100755 --- a/packaging/rpc-port.spec +++ b/packaging/rpc-port.spec @@ -1,6 +1,6 @@ Name: rpc-port Summary: RPC Port library -Version: 1.3.14 +Version: 1.3.15 Release: 0 Group: Application Framework/Libraries License: Apache-2.0 -- 2.7.4