Support platform privilege for camera device 80/243380/1 accepted/tizen/unified/20200909.155604 submit/tizen/20200908.053247
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 7 Sep 2020 07:09:28 +0000 (16:09 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Mon, 7 Sep 2020 07:09:28 +0000 (16:09 +0900)
[Version] 0.3.36
[Issue Type] New feature

Change-Id: Id6535ffb0b9197550468941576f43104140dfd6c
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
legacy/include/legacy_camera.h
legacy/src/legacy_camera.c
muse/include/muse_camera_internal.h
muse/src/muse_camera_dispatcher.c
packaging/mmsvc-camera.spec

index 0beeec5..9ab72c5 100644 (file)
@@ -3814,6 +3814,7 @@ bool legacy_camera_is_used(camera_h camera);
 bool legacy_camera_wait(camera_h camera, unsigned int timeout);
 void legacy_camera_lock(camera_h camera, bool is_lock);
 void legacy_camera_send_signal(camera_h camera);
+int legacy_camera_get_platform_privilege(camera_h camera, const char **platform_privilege);
 
 
 /**
index 0e17054..55dae7b 100644 (file)
@@ -4139,3 +4139,23 @@ int legacy_camera_set_user_buffer(camera_h camera, int *fds, int number)
 
        return __convert_camera_error_code(__func__, ret);
 }
+
+
+int legacy_camera_get_platform_privilege(camera_h camera, const char **platform_privilege)
+{
+       int ret = MM_ERROR_NONE;
+       int size = 0;
+       camera_s *handle = (camera_s *)camera;
+
+       camera_return_val_if_fail(handle, CAMERA_ERROR_INVALID_PARAMETER);
+       camera_return_val_if_fail(platform_privilege, CAMERA_ERROR_INVALID_PARAMETER);
+
+       ret = mm_camcorder_get_attributes(handle->mm_handle, NULL,
+               MMCAM_PLATFORM_PRIVILEGE_CAMERA, platform_privilege, &size,
+               NULL);
+
+       if (ret == MM_ERROR_NONE)
+               LOGD("platform privilege [%s]", *platform_privilege);
+
+       return __convert_camera_error_code(__func__, ret);
+}
index 68546d2..8e9a8c0 100644 (file)
@@ -79,6 +79,7 @@ typedef struct {
        gboolean is_shutting_down;
        int fds[MUSE_NUM_FD];
        int fd_number;
+       const char *platform_privilege;
 } muse_camera_handle_s;
 
 
index 1dd4cf6..f5e431c 100644 (file)
@@ -1394,6 +1394,11 @@ int camera_dispatcher_create(muse_module_h module)
                goto _CREATE_ERROR;
        }
 
+       /* get platform privilege name */
+       if (legacy_camera_get_platform_privilege(muse_camera->camera_handle,
+               &muse_camera->platform_privilege) != CAMERA_ERROR_NONE)
+               LOGE("failed to get platform privilege");
+
        muse_camera->task_run = true;
        muse_camera->task_thread = g_thread_try_new("camera_task_thread",
                _camera_dispatcher_task_func, (gpointer)muse_camera, NULL);
@@ -1557,9 +1562,19 @@ int camera_dispatcher_start_preview(muse_module_h module)
                return MUSE_CAMERA_ERROR_INVALID;
        }
 
+       /* public privilege for camera */
        if (!muse_server_security_check_cynara(client_fd, CAMERA_PRIVILEGE_NAME)) {
                ret = CAMERA_ERROR_PERMISSION_DENIED;
-               LOGE("security check failed 0x%x", ret);
+               LOGE("privilege[%s] failed 0x%x", CAMERA_PRIVILEGE_NAME, ret);
+               muse_camera_msg_return(api, class, ret, module);
+               return MUSE_CAMERA_ERROR_INVALID;
+       }
+
+       /* platform privilege for camera */
+       if (muse_camera->platform_privilege &&
+               !muse_server_security_check_cynara(client_fd, muse_camera->platform_privilege)) {
+               ret = CAMERA_ERROR_PERMISSION_DENIED;
+               LOGE("privilege[%s] failed 0x%x", muse_camera->platform_privilege, ret);
                muse_camera_msg_return(api, class, ret, module);
                return MUSE_CAMERA_ERROR_INVALID;
        }
index 08a3d99..c91e8e6 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mmsvc-camera
 Summary:    A Camera module for muse server
-Version:    0.3.35
+Version:    0.3.36
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0