]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_musiconhold: Don't chdir() when scanning MoH files
authorSean Bright <sean.bright@gmail.com>
Mon, 27 Mar 2017 13:58:17 +0000 (09:58 -0400)
committerSean Bright <sean.bright@gmail.com>
Mon, 27 Mar 2017 14:00:50 +0000 (08:00 -0600)
There doesn't appear to be any reason that we are chdir'ing in
moh_scan_files, and in the event of an Asterisk crash, the core files
may not get written because we have changed into a read-only directory.

ASTERISK-23996 #close
Reported by: Walter Doekes

Change-Id: Iac806dce01b3335963fbd62d4b4da9a65c614354

res/res_musiconhold.c

index 8fed3190a0610d413c0b8e4fccd954b707469dc4..b831083ce3a242805cc08a29850f92cf7c926c2a 100644 (file)
@@ -1114,16 +1114,13 @@ static int moh_scan_files(struct mohclass *class) {
        DIR *files_DIR;
        struct dirent *files_dirent;
        char dir_path[PATH_MAX];
-       char path[PATH_MAX];
        char filepath[PATH_MAX];
        char *ext;
        struct stat statbuf;
        int i;
 
        if (class->dir[0] != '/') {
-               ast_copy_string(dir_path, ast_config_AST_DATA_DIR, sizeof(dir_path));
-               strncat(dir_path, "/", sizeof(dir_path) - 1);
-               strncat(dir_path, class->dir, sizeof(dir_path) - 1);
+               snprintf(dir_path, sizeof(dir_path), "%s/%s", ast_config_AST_DATA_DIR, class->dir);
        } else {
                ast_copy_string(dir_path, class->dir, sizeof(dir_path));
        }
@@ -1139,16 +1136,6 @@ static int moh_scan_files(struct mohclass *class) {
        }
        class->total_files = 0;
 
-       if (!getcwd(path, sizeof(path))) {
-               ast_log(LOG_WARNING, "getcwd() failed: %s\n", strerror(errno));
-               closedir(files_DIR);
-               return -1;
-       }
-       if (chdir(dir_path) < 0) {
-               ast_log(LOG_WARNING, "chdir() failed: %s\n", strerror(errno));
-               closedir(files_DIR);
-               return -1;
-       }
        while ((files_dirent = readdir(files_DIR))) {
                /* The file name must be at least long enough to have the file type extension */
                if ((strlen(files_dirent->d_name) < 4))
@@ -1185,10 +1172,6 @@ static int moh_scan_files(struct mohclass *class) {
        }
 
        closedir(files_DIR);
-       if (chdir(path) < 0) {
-               ast_log(LOG_WARNING, "chdir() failed: %s\n", strerror(errno));
-               return -1;
-       }
        if (ast_test_flag(class, MOH_SORTALPHA))
                qsort(&class->filearray[0], class->total_files, sizeof(char *), moh_sort_compare);
        return class->total_files;