From d22c678999200c7d8ca093c7b17c287c91c040f3 Mon Sep 17 00:00:00 2001 From: Sean Bright Date: Mon, 27 Mar 2017 09:58:17 -0400 Subject: [PATCH] res_musiconhold: Don't chdir() when scanning MoH files 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 | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c index 5ee1ac30ba..992737b15d 100644 --- a/res/res_musiconhold.c +++ b/res/res_musiconhold.c @@ -1112,16 +1112,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)); } @@ -1137,16 +1134,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)) @@ -1183,10 +1170,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;