From 79eb245962f6a2d86feda18db20c84e7af7271e5 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher <tilghman@meg.abyt.es> Date: Thu, 22 Jan 2009 21:25:46 +0000 Subject: [PATCH] Create logfile safely. (closes issue #14160) Reported by: tzafrir Patches: 20090104__bug14160.diff.txt uploaded by Corydon76 (license 14) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@170307 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/abstract_jb.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/main/abstract_jb.c b/main/abstract_jb.c index d5a4c7ffd1..440d381861 100644 --- a/main/abstract_jb.c +++ b/main/abstract_jb.c @@ -484,6 +484,8 @@ static int create_jb(struct ast_channel *chan, struct ast_frame *frr) /* Create a frame log file */ if (ast_test_flag(jbconf, AST_JB_LOG)) { + char safe_logfile[30] = "/tmp/logfile-XXXXXX"; + int safe_fd; snprintf(name2, sizeof(name2), "%s", chan->name); tmp = strchr(name2, '/'); if (tmp) @@ -497,14 +499,17 @@ static int create_jb(struct ast_channel *chan, struct ast_frame *frr) tmp = strchr(name1, '/'); if (tmp) *tmp = '#'; - + snprintf(logfile_pathname, sizeof(logfile_pathname), "/tmp/ast_%s_jb_%s--%s.log", jbimpl->name, name1, name2); - jb->logfile = fopen(logfile_pathname, "w+b"); - - if (!jb->logfile) - ast_log(LOG_ERROR, "Failed to create frame log file with pathname '%s'\n", logfile_pathname); - + if (!(safe_fd = mkstemp(safe_logfile)) > -1 || unlink(logfile_pathname) || link(safe_logfile, logfile_pathname) || unlink(safe_logfile) || !(jb->logfile = fdopen(safe_fd, "w+b"))) { + jb->logfile = NULL; + if (safe_fd > -1) { + close(safe_fd); + } + ast_log(LOG_ERROR, "Failed to create frame log file with pathname '%s': %s\n", logfile_pathname, strerror(errno)); + } + if (res == JB_IMPL_OK) jb_framelog("JB_PUT_FIRST {now=%ld}: Queued frame with ts=%ld and len=%ld\n", now, frr->ts, frr->len); -- GitLab