Add robustness to mkdir 58/28358/2
authorSabera Djelti (sdi2) <sabera.djelti@open.eurogiciel.org>
Fri, 3 Oct 2014 13:34:59 +0000 (15:34 +0200)
committerSabera Djelti <sabera.djelti@open.eurogiciel.org>
Fri, 3 Oct 2014 13:55:11 +0000 (06:55 -0700)
Change-Id: I9a988e447446332374fb2922b89739d834c95da7
Signed-off-by: Sabera Djelti (sdi2) <sabera.djelti@open.eurogiciel.org>
src/pkgmgr-info.c

index e48b474..fa5e248 100755 (executable)
@@ -537,16 +537,17 @@ API char *getIconPath(uid_t uid)
                result = tzplatform_mkpath(TZ_SYS_RW_ICONS, "/");
        }
 
-       int ret;
-       mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
-       if (getuid() == OWNER_ROOT) {
-               ret = chown(result, uid, ((grpinfo)?grpinfo->gr_gid:0));
-               if (ret == -1) {
-                       char buf[BUFSIZE];
-                       strerror_r(errno, buf, sizeof(buf));
-                       _LOGE("FAIL : chown %s %d.%d, because %s", result, uid, ((grpinfo)?grpinfo->gr_gid:0), buf);
+               int ret = mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
+               if (ret == -1 && errno != EEXIST) {
+                       _LOGE("FAIL : to create directory %s %d", result, errno);
+               } else if (getuid() == OWNER_ROOT) {
+                       ret = chown(result, uid, ((grpinfo)?grpinfo->gr_gid:0));
+                       if (ret == -1) {
+                               char buf[BUFSIZE];
+                               strerror_r(errno, buf, sizeof(buf));
+                               _LOGE("FAIL : chown %s %d.%d, because %s", result, uid, ((grpinfo)?grpinfo->gr_gid:0), buf);
+                       }
                }
-       }
        return result;
 }
 
@@ -597,9 +598,10 @@ API char *getUserPkgParserDBPathUID(uid_t uid)
        }
        *dir = 0;
 
-       int ret;
-       mkdir(temp, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
-       if (getuid() == OWNER_ROOT) {
+       int ret = mkdir(temp, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
+       if (ret == -1 && errno != EEXIST) {
+                       _LOGE("FAIL : to create directory %s %d", temp, errno);
+       } else if (getuid() == OWNER_ROOT) {
                ret = chown(temp, uid, ((grpinfo)?grpinfo->gr_gid:0));
                if (ret == -1) {
                        char buf[BUFSIZE];
@@ -658,16 +660,17 @@ API char *getUserPkgCertDBPathUID(uid_t uid)
        }
        *dir = 0;
 
-       int ret;
-       mkdir(temp, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
-       if (getuid() == OWNER_ROOT) {
+       int ret = mkdir(temp, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
+       if (ret == -1 && errno != EEXIST) {
+                       _LOGE("FAIL : to create directory %s %d", temp, errno);
+       } else if (getuid() == OWNER_ROOT) {
                ret = chown(temp, uid, ((grpinfo)?grpinfo->gr_gid:0));
                if (ret == -1) {
                        char buf[BUFSIZE];
                        strerror_r(errno, buf, sizeof(buf));
                        _LOGE("FAIL : chown %s %d.%d, because %s", temp, uid, ((grpinfo)?grpinfo->gr_gid:0), buf);
                }
-       }
+               }
        free(temp);
        return result;
 }
@@ -703,16 +706,17 @@ API const char* getUserDesktopPath(uid_t uid)
                        result = tzplatform_mkpath(TZ_SYS_RW_DESKTOP_APP, "/");
        }
 
-       int ret;
-       mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
-       if (getuid() == OWNER_ROOT) {
+       int ret = mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
+       if (ret == -1 && errno != EEXIST) {
+                       _LOGE("FAIL : to create directory %s %d", result, errno);
+       } else if (getuid() == OWNER_ROOT) {
                ret = chown(result, uid,((grpinfo)?grpinfo->gr_gid:0));
                if (ret == -1) {
                        char buf[BUFSIZE];
                        strerror_r(errno, buf, sizeof(buf));
                        _LOGE("FAIL : chown %s %d.%d, because %s", result, uid, ((grpinfo)?grpinfo->gr_gid:0), buf);
                }
-       }
+               }
        return result;
 }
 
@@ -747,16 +751,17 @@ API const char* getUserManifestPath(uid_t uid)
                        result = tzplatform_mkpath(TZ_SYS_RW_PACKAGES, "/");
        }
 
-       int ret;
-       mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
-       if (getuid() == OWNER_ROOT) {
+       int ret = mkdir(result, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH);
+       if (ret == -1 && errno != EEXIST) {
+                       _LOGE("FAIL : to create directory %s %d", result, errno);
+       } else if (getuid() == OWNER_ROOT) {
                ret = chown(result, uid, ((grpinfo)?grpinfo->gr_gid:0));
                if (ret == -1) {
                        char buf[BUFSIZE];
                        strerror_r(errno, buf, sizeof(buf));
                        _LOGE("FAIL : chown %s %d.%d, because %s", result, uid, ((grpinfo)?grpinfo->gr_gid:0), buf);
                }
-       }
+               }
 
        return result;
 }