mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-09 11:28:25 +00:00
monitor: prevent attempts to move/remove recordings skipped with 'i' and 'o'.
The i and o options for monitor skip the input and output sides of a recording respectively. This patch addresses a problem in those options when monitor is called without specifying a specific filename where monitor will try to move the recording that was skipped. Since this usually doesn't exist when these options are used, it would produce a warning when it does this in most cases, but it is conceivable that there are use cases where this could result in moving/removing a file unintentionally. (closes issue ASTERISK-20641) Reported by: Jonathan Rose Review: https://reviewboard.asterisk.org/r/2190/ ........ Merged revisions 376389 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 376390 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@376391 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -451,24 +451,28 @@ int AST_OPTIONAL_API_NAME(ast_monitor_stop)(struct ast_channel *chan, int need_l
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ast_channel_monitor(chan)->filename_changed && !ast_strlen_zero(ast_channel_monitor(chan)->filename_base)) {
|
if (ast_channel_monitor(chan)->filename_changed && !ast_strlen_zero(ast_channel_monitor(chan)->filename_base)) {
|
||||||
if (ast_fileexists(ast_channel_monitor(chan)->read_filename,NULL,NULL) > 0) {
|
if (ast_channel_monitor(chan)->read_stream) {
|
||||||
snprintf(filename, FILENAME_MAX, "%s-in", ast_channel_monitor(chan)->filename_base);
|
if (ast_fileexists(ast_channel_monitor(chan)->read_filename,NULL,NULL) > 0) {
|
||||||
if (ast_fileexists(filename, NULL, NULL) > 0) {
|
snprintf(filename, FILENAME_MAX, "%s-in", ast_channel_monitor(chan)->filename_base);
|
||||||
ast_filedelete(filename, NULL);
|
if (ast_fileexists(filename, NULL, NULL) > 0) {
|
||||||
|
ast_filedelete(filename, NULL);
|
||||||
|
}
|
||||||
|
ast_filerename(ast_channel_monitor(chan)->read_filename, filename, ast_channel_monitor(chan)->format);
|
||||||
|
} else {
|
||||||
|
ast_log(LOG_WARNING, "File %s not found\n", ast_channel_monitor(chan)->read_filename);
|
||||||
}
|
}
|
||||||
ast_filerename(ast_channel_monitor(chan)->read_filename, filename, ast_channel_monitor(chan)->format);
|
|
||||||
} else {
|
|
||||||
ast_log(LOG_WARNING, "File %s not found\n", ast_channel_monitor(chan)->read_filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ast_fileexists(ast_channel_monitor(chan)->write_filename,NULL,NULL) > 0) {
|
if (ast_channel_monitor(chan)->write_stream) {
|
||||||
snprintf(filename, FILENAME_MAX, "%s-out", ast_channel_monitor(chan)->filename_base);
|
if (ast_fileexists(ast_channel_monitor(chan)->write_filename,NULL,NULL) > 0) {
|
||||||
if (ast_fileexists(filename, NULL, NULL) > 0) {
|
snprintf(filename, FILENAME_MAX, "%s-out", ast_channel_monitor(chan)->filename_base);
|
||||||
ast_filedelete(filename, NULL);
|
if (ast_fileexists(filename, NULL, NULL) > 0) {
|
||||||
|
ast_filedelete(filename, NULL);
|
||||||
|
}
|
||||||
|
ast_filerename(ast_channel_monitor(chan)->write_filename, filename, ast_channel_monitor(chan)->format);
|
||||||
|
} else {
|
||||||
|
ast_log(LOG_WARNING, "File %s not found\n", ast_channel_monitor(chan)->write_filename);
|
||||||
}
|
}
|
||||||
ast_filerename(ast_channel_monitor(chan)->write_filename, filename, ast_channel_monitor(chan)->format);
|
|
||||||
} else {
|
|
||||||
ast_log(LOG_WARNING, "File %s not found\n", ast_channel_monitor(chan)->write_filename);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user