Check stub appid by using gdbus connection 35/176135/3
authorJunghoon Park <jh9216.park@samsung.com>
Tue, 17 Apr 2018 04:33:14 +0000 (13:33 +0900)
committerJunghoon Park <jh9216.park@samsung.com>
Tue, 17 Apr 2018 04:39:46 +0000 (13:39 +0900)
- To detect fake stub, checking appid is needed at the proxy side

Change-Id: I3aa4ed676b1ead08948f7159111694374797948c
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
src/fdbroker-internal.cc
src/fdbroker-internal.h
src/proxy-internal.cc
src/proxy-internal.h

index ba991c6..edbd33f 100644 (file)
@@ -514,6 +514,21 @@ void FdBroker::OnNameAppeared(GDBusConnection *connection,
                               const gchar *name_owner,
                               gpointer user_data) {
   FdBroker* broker = static_cast<FdBroker*>(user_data);
+  int pid = broker->GetSenderPid(connection, name_owner);
+  char owner_appid[255] = { 0, };
+
+  if (aul_app_get_appid_bypid(pid, owner_appid, sizeof(owner_appid)) < 0) {
+    LOGE("aul_app_get_appid_bypid failed %d", pid);
+    broker->watcher_->OnPortRejected(owner_appid);
+    return;
+  }
+
+  if (broker->watch_appid_ != owner_appid) {
+    LOGE("invalid appid %s", owner_appid);
+    broker->watcher_->OnPortRejected(owner_appid);
+    return;
+  }
+
   broker->watcher_->OnPortAppeared(broker->watch_appid_,
       broker->watch_port_name_);
 }
index d844064..9237118 100644 (file)
@@ -45,6 +45,7 @@ class FdBroker {
                                 const std::string& port_name) = 0;
     virtual void OnPortVanished(const std::string& appid,
                                 const std::string& port_name) = 0;
+    virtual void OnPortRejected(const std::string& appid) = 0;
   };
 
   FdBroker(bool mock = false) : mock_(mock) {}
index b08074c..93a212e 100644 (file)
@@ -113,6 +113,13 @@ int Proxy::Watch(int fd) {
   return 0;
 }
 
+void Proxy::OnPortRejected(const std::string& appid) {
+  if (listener_ == nullptr)
+    return;
+  listener_->OnRejected(appid);
+  listener_ = nullptr;
+}
+
 void Proxy::OnPortAppeared(const std::string& appid,
                            const std::string& port_name) {
   LOGD("endpoint(%s), port_name(%s)", appid.c_str(), port_name.c_str());
index 2cad82c..3721371 100644 (file)
@@ -63,6 +63,7 @@ class Proxy : public FdBroker::IEventWatcher {
                       const std::string& port_name) override;
   void OnPortVanished(const std::string& appid,
                       const std::string& port_name) override;
+  void OnPortRejected(const std::string& appid) override;
 
  private:
   std::string port_name_;