Modify mode of data folder in msg-service 11/56111/4 submit/tizen/20160106.022529
authorhhk86.heo <hhk86.heo@samsung.com>
Mon, 4 Jan 2016 11:10:12 +0000 (20:10 +0900)
committerhhk86.heo <hhk86.heo@samsung.com>
Wed, 6 Jan 2016 01:29:31 +0000 (10:29 +0900)
Fix bug memset 0 issue

Change-Id: I87928fe91b28ffe2d39965ab185cb65aab80e08f

framework/main.cpp
include/utils/MsgUtilFile.h
mapi/msg_storage.cpp
packaging/msg-service.spec
utils/CMakeLists.txt
utils/MsgUtilFile.cpp

index e3163ad..628d1ce 100755 (executable)
@@ -61,6 +61,11 @@ void* InitMsgServer(void*)
        MsgInitCallStatusManager();
 
        try {
+               /* ipc data folder set acl for priv_read and priv_write */
+               if (!MsgAclInit()) {
+                       MSG_ERR("FAIL TO INITIALIZE ACL [%d]", err);
+               }
+
                /* storage handler initialize */
                err = MsgStoInitDB(false);
                if (err != MSG_SUCCESS) {
index ca3f3d6..6b345ee 100755 (executable)
@@ -65,5 +65,6 @@ int MsgCheckFilepathSmack(const char *app_smack_label, char *file_path);
 
 bool MsgScanFile(char *filePath);
 void MsgGetMimeType(char *filePath, char *mimeType, int size);
+bool MsgAclInit();
 #endif /* MSG_UTIL_FILE_H */
 
index ed679f6..5accc3f 100755 (executable)
@@ -2480,6 +2480,7 @@ int msg_list_condition_set_str(void *condition_info, int field, const char *valu
                                cond->pAddressVal = NULL;
                        }
                        cond->pAddressVal = (char *)new char[size+1];
+                       memset(cond->pAddressVal, 0x00, sizeof(char)*(size+1));
                        if (cond->pAddressVal)
                                memcpy(cond->pAddressVal, value, sizeof(char)*size);
                        else
@@ -2493,6 +2494,7 @@ int msg_list_condition_set_str(void *condition_info, int field, const char *valu
                                cond->pTextVal = NULL;
                        }
                        cond->pTextVal = (char *)new char[size+1];
+                       memset(cond->pTextVal, 0x00, sizeof(char)*(size+1));
                        if (cond->pTextVal)
                                memcpy(cond->pTextVal, value, sizeof(char)*size);
                        else
index 5e90165..64838a1 100755 (executable)
@@ -18,6 +18,7 @@ Requires(postun): /sbin/ldconfig
 Requires(post): systemd
 Requires(postun): systemd
 BuildRequires: cmake
+BuildRequires: libacl-devel
 BuildRequires: pkgconfig(alarm-service)
 BuildRequires: pkgconfig(aul)
 BuildRequires: pkgconfig(badge)
@@ -155,18 +156,28 @@ rm %{buildroot}/usr/share/msg-service/msg-service-db.sql
 %post tools
 /sbin/ldconfig
 
-chmod 660 /usr/dbspace/.msg_service.db
+chmod 640 /usr/dbspace/.msg_service.db
 chmod 660 /usr/dbspace/.msg_service.db-journal
 
+mkdir -p -m 775 /opt/usr/data/msg-service
+mkdir -p -m 770 /opt/usr/data/msg-service/msgdata
+mkdir -p -m 770 /opt/usr/data/msg-service/smildata
+mkdir -p -m 770 /opt/usr/data/msg-service/ipcdata
+mkdir -p -m 770 /opt/usr/data/msg-service/msgdata/thumbnails
+
+
 chgrp priv_message_read /usr/dbspace/.msg_service.db
-chmod o= /usr/dbspace/.msg_service.db
-chsmack -a "*" /usr/dbspace/.msg_service.db
+chgrp priv_message_read /opt/usr/data/msg-service/msgdata
+chgrp priv_message_read /opt/usr/data/msg-service/smildata
+chgrp priv_message_write /opt/usr/data/msg-service/ipcdata
+chgrp priv_message_read /opt/usr/data/msg-service/msgdata/thumbnails
 
-mkdir -p -m 775 /opt/usr/data/msg-service
-mkdir -p -m 775 /opt/usr/data/msg-service/msgdata
-mkdir -p -m 775 /opt/usr/data/msg-service/smildata
-mkdir -p -m 775 /opt/usr/data/msg-service/ipcdata
-mkdir -p -m 775 /opt/usr/data/msg-service/msgdata/thumbnails
+
+chsmack -a "*" /usr/dbspace/.msg_service.db
+chsmack -a "System::Shared" /opt/usr/data/msg-service/msgdata -t
+chsmack -a "System::Shared" /opt/usr/data/msg-service/smildata -t
+chsmack -a "System::Run" /opt/usr/data/msg-service/ipcdata -t
+chsmack -a "System::Shared" /opt/usr/data/msg-service/msgdata/thumbnails -t
 
 %post -n sms-plugin -p /sbin/ldconfig
 %post -n mms-plugin -p /sbin/ldconfig
index 5e6b222..bd3a173 100755 (executable)
@@ -61,7 +61,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS}")
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
 
 ADD_LIBRARY(${UTILS-LIB} SHARED ${UTILS-SRCS})
-TARGET_LINK_LIBRARIES(${UTILS-LIB} ${utils_pkgs_LDFLAGS} rt ${VOBJECT-LIB})
+TARGET_LINK_LIBRARIES(${UTILS-LIB} ${utils_pkgs_LDFLAGS} rt ${VOBJECT-LIB} acl)
 
 INSTALL(TARGETS ${UTILS-LIB} DESTINATION ${LIBDIR} COMPONENT RuntimeLibraries)
 
index a502ce5..acd6d85 100755 (executable)
@@ -26,6 +26,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <libgen.h>
+#include <acl/libacl.h>
 
 #include <media_content.h>
 #include <thumbnail_util.h>
@@ -1257,3 +1258,48 @@ void MsgGetMimeType(char *filePath, char *mimeType, int size)
 {
        aul_get_mime_from_file(filePath, mimeType, size);
 }
+
+
+bool MsgAclInit()
+{
+       /* ACL */
+       /* In msg-service.spec file use libacl-devel. Because acl get not process open API */
+       /* So have to set TARGET_LINK_LIBRARIES(acl) in makefile */
+       /* After GPL-3.0, not supply shell commend (setfacl, getfacl) by license issue, use the API */
+       MSG_BEGIN();
+
+       const char *priv_read =
+                       "user::rwx\n"
+                       "group::rwx\n"
+                       "group:priv_message_read:rwx\n"
+                       "mask::rwx\n"
+                       "other::---";
+       acl_t acl = NULL;
+       int ret = 0;
+
+       acl = acl_from_text(priv_read);
+       if (!acl) {
+               MSG_ERR("%s: `%s': %s\n", MSG_IPC_DATA_PATH, priv_read, strerror(errno));
+               return false;
+       }
+
+       ret = acl_check(acl, NULL);
+       if (ret != 0) {
+               acl_free(acl);
+               if (ret == ACL_DUPLICATE_ERROR) {
+                       MSG_DEBUG("Already Set ACL");
+                       return true;
+               }
+               MSG_ERR("acl_check Fail : [%d],[%s]", ret, acl_error(ret));
+               return false;
+       }
+
+       ret = acl_set_file((const char *)MSG_IPC_DATA_PATH, ACL_TYPE_ACCESS, acl);
+       if (ret != 0) {
+               MSG_ERR("acl_set_file Fail : [%d][%s]", ret, strerror(errno));
+       }
+       acl_free(acl);
+
+       MSG_END();
+       return true;
+}