fix the issue __media_get_media_DB failed 83/92083/1
authorbeibei.zhao <beibei.zhao@samsung.com>
Thu, 13 Oct 2016 06:52:14 +0000 (14:52 +0800)
committerbeibei.zhao <beibei.zhao@samsung.com>
Thu, 13 Oct 2016 07:26:06 +0000 (15:26 +0800)
Change-Id: Ia4777e329112d63305f899bb1e0175c563341529

lib/media-util-db.c
packaging/media-server.spec

index e98296c..1b58050 100755 (executable)
@@ -69,36 +69,80 @@ static char* __media_get_media_DB(uid_t uid)
 {
        int len = 0;
        char *result_passwd = NULL;
-       struct group *grpinfo = NULL;
+
+       struct group grpinfo;
+       struct group* grpresult = NULL;
+       char* grpbuf;
+       size_t grpbufsize;
+       int ret = -1;
+
+       grpbufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
+       if (grpbufsize == -1)           /* Value was indeterminate */
+               grpbufsize = 16384;             /* Should be more than enough (16*1024) */
+
+       grpbuf = malloc(grpbufsize);
+       if (grpbuf == NULL) {
+               MSAPI_DBG_ERR("malloc grpbuf grpbufsize[%d] failed", grpbufsize);
+               return NULL;
+       }
+
+       ret = getgrnam_r("users", &grpinfo, grpbuf, grpbufsize, &grpresult);
+       if((ret == 0) && (grpresult != NULL)) {
+               MSAPI_DBG_ERR("getgrnam_r users success...\n");
+       } else {
+               MSAPI_DBG_ERR("getgrnam_r users failed ret[%d]", ret);
+               goto END;
+       }
+
        if (uid == getuid()) {
-               grpinfo = getgrnam("users");
-               if (grpinfo == NULL) {
-                       MSAPI_DBG_ERR("getgrnam(users) returns NULL !");
-                       return NULL;
-               }
-               if (MS_STRING_VALID(MEDIA_DB_NAME))
+               if (MS_STRING_VALID(MEDIA_DB_NAME)) {
+                       MSAPI_DBG_ERR("MS_STRING_VALID MEDIA_DB_NAME valid...\n");
                        result_passwd = strdup(MEDIA_DB_NAME);
+               } else {
+                       MSAPI_DBG_ERR("MS_STRING_VALID MEDIA_DB_NAME invalid...\n");
+                       goto END;
+               }
        } else {
                char passwd_str[MAX_FILEPATH_LEN] = {0, };
-               struct passwd *userinfo = getpwuid(uid);
-               if (userinfo == NULL) {
-                       MSAPI_DBG_ERR("getpwuid(%d) returns NULL !", uid);
-                       return NULL;
+               struct passwd pwdinfo;
+               struct passwd* pwdresult = NULL;
+               char* pwdbuf;
+               size_t pwdbufsize;
+
+               pwdbufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
+               if (pwdbufsize == -1)           /* Value was indeterminate */
+                       pwdbufsize = 16384;             /* Should be more than enough (16*1024) */
+
+               pwdbuf = malloc(pwdbufsize);
+               if (pwdbuf == NULL) {
+                       MSAPI_DBG_ERR("malloc pwdbuf pwdbufsize[%d] failed", pwdbufsize);
+                       goto END;
                }
-               grpinfo = getgrnam("users");
-               if (grpinfo == NULL) {
-                       MSAPI_DBG_ERR("getgrnam(users) returns NULL !");
-                       return NULL;
+
+               ret = getpwuid_r(uid, &pwdinfo, pwdbuf, pwdbufsize, &pwdresult);
+               if((ret == 0) && (pwdresult != NULL)) {
+                       MSAPI_DBG_ERR("getpwuid uid[%d] success\n", uid);
+               } else {
+                       MSAPI_DBG_ERR("getpwuid uid[%d] failed ret[%d]", uid, ret);
+                       MS_SAFE_FREE(pwdbuf);
+                       goto END;
                }
-               // Compare git_t type and not group name
-               if (grpinfo->gr_gid != userinfo->pw_gid) {
-                       MSAPI_DBG_ERR("UID [%d] does not belong to 'users' group!", uid);
-                       return NULL;
+
+               MSAPI_DBG_ERR("grpinfo.gr_gid[%d], pwdinfo.pw_gid[%d]", grpinfo.gr_gid, pwdinfo.pw_gid);
+               if(grpinfo.gr_gid != pwdinfo.pw_gid) {
+                       MSAPI_DBG_ERR("UID [%d] does not belong to 'users' group![%d][%d]", uid, grpinfo.gr_gid, pwdinfo.pw_gid);
+                       MS_SAFE_FREE(pwdbuf);
+                       goto END;
                }
-               len = snprintf(passwd_str, sizeof(passwd_str), "%s/.applications/dbspace/.media.db", userinfo->pw_dir);
+
+               len = snprintf(passwd_str, sizeof(passwd_str), "%s/.applications/dbspace/.media.db", pwdinfo.pw_dir);
                if (len > 0)
                        result_passwd = strndup(passwd_str, len);
+
+               MS_SAFE_FREE(pwdbuf);
        }
+END:
+       MS_SAFE_FREE(grpbuf);
 
        return result_passwd;
 }
index 03f90cc..b9ad65d 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       media-server
 Summary:    A server for media content management
-Version:    0.3.2
+Version:    0.3.3
 Release:    0
 Group:      Multimedia/Service
 License:    Apache-2.0