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 ba991c64a0065178952059acb9526b41a1b1627b..edbd33f7566792d2f455aa5285529614bbdd4291 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 d844064c5ba7f9a78b4400ddc89915775512c371..9237118292d34a9de2ffe82603e08e07ccac1d1e 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 b08074c0cfd2086b7144e058e264423c7783ba5f..93a212ef09ebbfbb153281afa98eb18b0807d2a2 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 2cad82c49563156c6657331cd5ca97d178c001f2..37213712457c3e0fd703002f0aa18384826a2466 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_;