Changeset: 52a24f63a175 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=52a24f63a175
Modified Files:
        tools/merovingian/daemon/argvcmds.c
Branch: Jan2014
Log Message:

Avoid a time-of-check time-of-use race by just trying and checking errors.


diffs (53 lines):

diff --git a/tools/merovingian/daemon/argvcmds.c 
b/tools/merovingian/daemon/argvcmds.c
--- a/tools/merovingian/daemon/argvcmds.c
+++ b/tools/merovingian/daemon/argvcmds.c
@@ -89,7 +89,6 @@ command_create(int argc, char *argv[])
        char path[2048];
        char *p;
        char *dbfarm;
-       struct stat sb;
        confkeyval phrase[2];
 
        if (argc != 2) {
@@ -100,26 +99,23 @@ command_create(int argc, char *argv[])
        dbfarm = argv[1];
 
        /* check if dbfarm actually exists */
-       if (stat(dbfarm, &sb) == -1) {
-               strncpy(path, dbfarm, sizeof(path) - 1);
-               path[sizeof(path) - 1] = '\0';
-               p = path;
-               /* try to create the dbfarm */
-               while ((p = strchr(p + 1, '/')) != NULL) {
-                       *p = '\0';
-                       /* coverity[toctou] */
-                       if (stat(path, &sb) == -1 && mkdir(path, 0755)) {
-                               fprintf(stderr, "unable to create directory 
'%s': %s\n",
-                                               path, strerror(errno));
-                               return(1);
-                       }
-                       *p = '/';
-               }
-               if (mkdir(path, 0755)) {
-                       fprintf(stderr, "unable to create directory '%s': %s\n",
-                                       path, strerror(errno));
+       strncpy(path, dbfarm, sizeof(path) - 1);
+       path[sizeof(path) - 1] = '\0';
+       p = path;
+       while ((p = strchr(p + 1, '/')) != NULL) {
+               *p = '\0';
+               if (mkdir(path, 0755) == -1 && errno != EEXIST) {
+                       fprintf(stderr,
+                               "unable to create directory '%s': %s\n",
+                               path, strerror(errno));
                        return(1);
                }
+               *p = '/';
+       }
+       if (mkdir(dbfarm, 0755) == -1 && errno != EEXIST) {
+               fprintf(stderr, "unable to create directory '%s': %s\n",
+                       dbfarm, strerror(errno));
+               return(1);
        }
 
        phrase[0].key = NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to