You need to sign in or sign up before continuing.
Commit 76528555 authored by J. Alexander Treuman's avatar J. Alexander Treuman

If we're going to create the db file, make sure the parent path is a directory

git-svn-id: https://svn.musicpd.org/mpd/trunk@4437 09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent c3bc1e5b
...@@ -1036,6 +1036,21 @@ int checkDirectoryDB() ...@@ -1036,6 +1036,21 @@ int checkDirectoryDB()
dbPath = strdup(dbFile); dbPath = strdup(dbFile);
dirPath = dirname(dbPath); dirPath = dirname(dbPath);
/* Check that the parent part of the path is a directory */
if (stat(dirPath, &st) < 0) {
ERROR("Couldn't stat parent directory of db file "
"\"%s\": %s\n", dbFile, strerror(errno));
free(dbPath);
return -1;
}
if (!S_ISDIR(st.st_mode)) {
ERROR("Couldn't create db file \"%s\" because the "
"parent path is not a directory\n", dbFile);
free(dbPath);
return -1;
}
/* Check if we can write to the directory */ /* Check if we can write to the directory */
if (access(dirPath, R_OK | W_OK)) { if (access(dirPath, R_OK | W_OK)) {
ERROR("Can't create db file in \"%s\": %s\n", dirPath, ERROR("Can't create db file in \"%s\": %s\n", dirPath,
...@@ -1051,7 +1066,7 @@ int checkDirectoryDB() ...@@ -1051,7 +1066,7 @@ int checkDirectoryDB()
/* Path exists, now check if it's a regular file */ /* Path exists, now check if it's a regular file */
if (stat(dbFile, &st) < 0) { if (stat(dbFile, &st) < 0) {
ERROR("Error stat'ing db file \"%s\": %s\n", dbFile, ERROR("Couldn't stat db file \"%s\": %s\n", dbFile,
strerror(errno)); strerror(errno));
return -1; return -1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment