]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
monitor: prevent attempts to move/remove recordings skipped with 'i' and 'o'.
authorJonathan Rose <jrose@digium.com>
Fri, 16 Nov 2012 19:41:55 +0000 (19:41 +0000)
committerJonathan Rose <jrose@digium.com>
Fri, 16 Nov 2012 19:41:55 +0000 (19:41 +0000)
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

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@376390 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_monitor.c

index 1c0565cee524283310c3e9e19bae86eba615c6a0..711a54b9156b0b54d13ee3f6a76725b560043999 100644 (file)
@@ -451,24 +451,28 @@ int AST_OPTIONAL_API_NAME(ast_monitor_stop)(struct ast_channel *chan, int need_l
                }
 
                if (chan->monitor->filename_changed && !ast_strlen_zero(chan->monitor->filename_base)) {
-                       if (ast_fileexists(chan->monitor->read_filename,NULL,NULL) > 0) {
-                               snprintf(filename, FILENAME_MAX, "%s-in", chan->monitor->filename_base);
-                               if (ast_fileexists(filename, NULL, NULL) > 0) {
-                                       ast_filedelete(filename, NULL);
+                       if (chan->monitor->read_stream) {
+                               if (ast_fileexists(chan->monitor->read_filename,NULL,NULL) > 0) {
+                                       snprintf(filename, FILENAME_MAX, "%s-in", chan->monitor->filename_base);
+                                       if (ast_fileexists(filename, NULL, NULL) > 0) {
+                                               ast_filedelete(filename, NULL);
+                                       }
+                                       ast_filerename(chan->monitor->read_filename, filename, chan->monitor->format);
+                               } else {
+                                       ast_log(LOG_WARNING, "File %s not found\n", chan->monitor->read_filename);
                                }
-                               ast_filerename(chan->monitor->read_filename, filename, chan->monitor->format);
-                       } else {
-                               ast_log(LOG_WARNING, "File %s not found\n", chan->monitor->read_filename);
                        }
 
-                       if (ast_fileexists(chan->monitor->write_filename,NULL,NULL) > 0) {
-                               snprintf(filename, FILENAME_MAX, "%s-out", chan->monitor->filename_base);
-                               if (ast_fileexists(filename, NULL, NULL) > 0) {
-                                       ast_filedelete(filename, NULL);
+                       if (chan->monitor->write_stream) {
+                               if (ast_fileexists(chan->monitor->write_filename,NULL,NULL) > 0) {
+                                       snprintf(filename, FILENAME_MAX, "%s-out", chan->monitor->filename_base);
+                                       if (ast_fileexists(filename, NULL, NULL) > 0) {
+                                               ast_filedelete(filename, NULL);
+                                       }
+                                       ast_filerename(chan->monitor->write_filename, filename, chan->monitor->format);
+                               } else {
+                                       ast_log(LOG_WARNING, "File %s not found\n", chan->monitor->write_filename);
                                }
-                               ast_filerename(chan->monitor->write_filename, filename, chan->monitor->format);
-                       } else {
-                               ast_log(LOG_WARNING, "File %s not found\n", chan->monitor->write_filename);
                        }
                }