Aborting installation when failed to get admin user info 90/246790/2
authorSangyoon Jang <jeremy.jang@samsung.com>
Wed, 4 Nov 2020 07:19:45 +0000 (16:19 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Fri, 6 Nov 2020 09:14:17 +0000 (09:14 +0000)
Change-Id: Id1317cca5055590f708b00170c2b62e6c46bc4f8
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/common/pkgmgr_interface.cc
src/common/utils/user_util.cc
src/common/utils/user_util.h

index 0267569..ed46880 100644 (file)
@@ -104,8 +104,15 @@ int PkgMgrInterface::InitInternal(int argc, char** argv) {
     return -1;
   }
 
+  boost::optional<bool> is_admin_user =
+      IsAdminUser(pkgmgr_installer_get_uid(pi_));
+  if (!is_admin_user) {
+    LOG(ERROR) << "Cannot get admin user info. Aborting.";
+    return -1;
+  }
+
   // Set target uid as tizenglobalapp if admin user's request
-  if (IsAdminUser(pkgmgr_installer_get_uid(pi_))) {
+  if (*is_admin_user) {
     result = pkgmgr_installer_set_uid(pi_, kGlobalUserUid);
     if (result) {
       LOG(ERROR) << "Failed to set global uid";
index 47858ef..da41147 100644 (file)
@@ -94,7 +94,7 @@ UserList GetUserList() {
   return list;
 }
 
-bool IsAdminUser(uid_t uid) {
+boost::optional<bool> IsAdminUser(uid_t uid) {
   GumUser* guser;
   int count = 0;
   bool is_offline = getuid() == 0;
@@ -112,7 +112,7 @@ bool IsAdminUser(uid_t uid) {
     usleep(kRetryDelay);
   } while (count < kRetryMax);
   if (!guser)
-    return false;
+    return {};
   GumUserType ut;
   g_object_get(G_OBJECT(guser), "usertype", &ut, NULL);
   bool is_admin;
index bae9392..051c0af 100644 (file)
@@ -21,7 +21,7 @@ namespace common_installer {
 typedef std::vector<std::tuple<uid_t, gid_t, bf::path>> UserList;
 
 UserList GetUserList();
-bool IsAdminUser(uid_t uid);
+boost::optional<bool> IsAdminUser(uid_t uid);
 boost::optional<gid_t> GetGidByUid(uid_t uid);
 std::string GetGroupNameByGid(gid_t gid);
 std::string GetUsernameByUid(uid_t user);