Change the way to create credentials object
authorDaeheyon Jung <darrenh.jung@samsung.com>
Mon, 17 Sep 2018 05:56:58 +0000 (14:56 +0900)
committer정대현/Tizen Platform Lab(SR)/Staff Engineer/삼성전자 <darrenh.jung@samsung.com>
Thu, 11 Oct 2018 08:53:05 +0000 (17:53 +0900)
Change-Id: Ic8f014732bf9a40945b63ba10ae34adaf42bd82b

src/common/dbus_service.cc
src/common/security_manager.cc
src/common/security_manager.h

index 24a88ce78bb6fffcd6ac913b68194f5a9360c64a..daf3ed5c93c69944d06e9fb1aae3b80e66517a04 100755 (executable)
@@ -86,34 +86,6 @@ std::map<std::string, SendFileHandle*> file_map_;
 
 namespace capmgr {
 
-struct GDBusCredentials : public SecurityManager::Credentials {
- public:
-  GDBusCredentials() { init_ = false; }
-  GDBusCredentials(int pid, const char* user, const char* smack_label);
-  ~GDBusCredentials();
-  bool Init(const gchar* sender, GDBusConnection* conn);
- private:
-  gchar* sender_;
-  GDBusConnection* conn_;
-};
-
-GDBusCredentials::GDBusCredentials(int pid, const char* user,
-    const char* smack_label) {
-  pid_ = pid;
-  init_ = false;
-  smack_label_ = strdup(smack_label);
-  if (!smack_label_) {
-    return;
-  }
-
-  user_ = strdup(user);
-  if (!user_) {
-    free(smack_label_);
-    smack_label_ = nullptr;
-    return;
-  }
-}
-
 SecurityManager::Credentials GetCredentials(
     GDBusConnection* conn, const gchar* sender) {
   int ret = 0;
@@ -124,54 +96,23 @@ SecurityManager::Credentials GetCredentials(
   ret = cynara_creds_gdbus_get_user(conn, sender, USER_METHOD_DEFAULT, &user);
   if (ret != CYNARA_API_SUCCESS) {
     LOG(ERROR) << "cynara_creds_gdbus_get_user() failed: " << ret;
-    return GDBusCredentials();
+    return SecurityManager::Credentials();
   }
 
   ret = cynara_creds_gdbus_get_client(conn, sender, CLIENT_METHOD_DEFAULT,
           &client);
   if (ret != CYNARA_API_SUCCESS) {
     LOG(ERROR) << "cynara_creds_gdbus_get_client() failed: " << ret;
-    return GDBusCredentials();
+    return SecurityManager::Credentials();
   }
 
   ret = cynara_creds_gdbus_get_pid(conn, sender, &pid);
   if (ret != CYNARA_API_SUCCESS) {
     LOG(ERROR) << "cynara_creds_gdbus_get_pid() failed: " << ret;
-    return GDBusCredentials();
+    return SecurityManager::Credentials();
   }
 
-  GDBusCredentials c = GDBusCredentials(pid, client, user);
-  if (!c.Init(sender, conn))
-    return GDBusCredentials();
-
-  return c;
-}
-
-GDBusCredentials::~GDBusCredentials() {
-  if (smack_label_)
-    free(smack_label_);
-
-  if (user_)
-    free(user_);
-
-  if (sender_)
-    g_free(sender_);
-
-  if (conn_)
-    g_object_unref(conn_);
-}
-
-bool GDBusCredentials::Init(const gchar* sender, GDBusConnection* conn) {
-  sender_ = g_strdup(sender);
-  if (!sender_) {
-    init_ = false;
-    return false;
-  }
-
-  conn_ = reinterpret_cast<GDBusConnection*>(g_object_ref(conn));
-  init_ = true;
-
-  return true;
+  return SecurityManager::Credentials(pid, client, user);
 }
 
 DBusService::DBusService() {
@@ -355,6 +296,11 @@ bool DBusService::HandleSendFile(GVariant* params,
   }
 
   SecurityManager::Credentials c = GetCredentials(connection, sender);
+  if (!c.IsInit()) {
+    LOG(ERROR) << "Failed to create credentials";
+    return false;
+  }
+
   if (!SecurityManager::CheckFilePermission(file_path_str, c)) {
     LOG(ERROR) << "File permission error: " << file_path_str;
     g_dbus_method_invocation_return_value(invocation, g_variant_new("(i)", -1));
index 6e504284f82e5ab984d1cafb05a96761b02632b1..ca2fbeec2f39225452a2148191539619187bf813 100755 (executable)
 \r
 namespace capmgr {\r
 \r
+\r
+SecurityManager::Credentials::Credentials():  init_(false) {}\r
+\r
+SecurityManager::Credentials::Credentials(int pid, const char* user,\r
+    const char* smack_label) {\r
+  pid_ = pid;\r
+  init_ = false;\r
+  smack_label_ = strdup(smack_label);\r
+  if (!smack_label_) {\r
+    return;\r
+  }\r
+\r
+  user_ = strdup(user);\r
+  if (!user_) {\r
+    free(smack_label_);\r
+    smack_label_ = nullptr;\r
+    return;\r
+  }\r
+\r
+  init_ = true;\r
+}\r
+\r
+SecurityManager::Credentials::~Credentials() {\r
+  if (smack_label_)\r
+    free(smack_label_);\r
+\r
+  if (user_)\r
+    free(user_);\r
+}\r
+\r
 bool SecurityManager::Credentials::IsInit() {\r
   return this->init_;\r
 }\r
index 88e5c56157bd7c0421dda424c5b458b95b5b488e..542bbc32d37e389814a989720ffb83e1f60025cf 100755 (executable)
@@ -13,10 +13,15 @@ class SecurityManager {
  public:
   struct Credentials {
    public:
+    Credentials();
+    Credentials(int pid, const char* user, const char* smack_label);
+    ~Credentials();
+
     int GetPid();
     const char* GetUser();
     const char* GetSmackLabel();
     bool IsInit();
+
    protected:
     bool init_;
     int pid_;