Adds error handling when a change of user privilege has failed. 49/95349/1 accepted/tizen/3.0/ivi/20161103.045211 accepted/tizen/3.0/mobile/20161103.045109 accepted/tizen/3.0/tv/20161103.045132 accepted/tizen/3.0/wearable/20161103.045150 submit/tizen_3.0/20161103.025701
authorKim Gunsoo <gunsoo83.kim@samsung.com>
Thu, 20 Oct 2016 04:59:50 +0000 (13:59 +0900)
committerSangJin Kim <sangjin3.kim@samsung.com>
Thu, 3 Nov 2016 02:50:21 +0000 (11:50 +0900)
- When the authority to change the shell and sync service process
  has failed, add the error handling.

Change-Id: I78a5ee314cad9a881a16dc7817ab6c85e11f0d57
Signed-off-by: Kim Gunsoo <gunsoo83.kim@samsung.com>
src/file_sync_service.c
src/sdb.c
src/services.c

index 5fc6642..bd0bf98 100644 (file)
@@ -685,7 +685,10 @@ void file_sync_service(int fd, void *cookie)
             D("sync: '%s' '%s'\n", (char*) &msg.req, name);
 
             if (should_drop_privileges() && !verify_sync_rule(name)) {
-                set_sdk_user_privileges();
+                if (getuid() != g_sdk_user_id && set_sdk_user_privileges() < 0) {
+                    fail_message(fd, "failed to set SDK user privileges.");
+                    goto fail;
+                }
             }
 
             switch(msg.req.id) {
index f257a0f..d421ba7 100644 (file)
--- a/src/sdb.c
+++ b/src/sdb.c
@@ -1538,14 +1538,17 @@ int set_sdk_user_privileges() {
 
     if (sdbd_set_groups() < 0) {
         D("set groups failed (errno: %d)\n", errno);
+        return -1;
     }
 
     if (setgid(g_sdk_group_id) != 0) {
         D("set group id failed (errno: %d)\n", errno);
+        return -1;
     }
 
     if (setuid(g_sdk_user_id) != 0) {
         D("set user id failed (errno: %d)\n", errno);
+        return -1;
     }
 
     if (chdir(g_sdk_home_dir) < 0) {
index b6d960a..2478680 100644 (file)
@@ -493,7 +493,10 @@ static int create_subprocess(const char *cmd, pid_t *pid, char * const argv[], c
                 // do nothing
                 D("sdb: executes root commands!!:%s\n", argv[2]);
             } else {
-                set_sdk_user_privileges();
+                if (getuid() != g_sdk_user_id && set_sdk_user_privileges() < 0) {
+                    fprintf(stderr, "failed to set SDK user privileges\n");
+                    exit(-1);
+                }
             }
         }
         redirect_and_exec(pts, cmd, argv, envp);