summaryrefslogtreecommitdiff
path: root/logsrvd/logsrvd_journal.c
diff options
context:
space:
mode:
Diffstat (limited to 'logsrvd/logsrvd_journal.c')
-rw-r--r--logsrvd/logsrvd_journal.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/logsrvd/logsrvd_journal.c b/logsrvd/logsrvd_journal.c
index 664f1ae9a..831610cfa 100644
--- a/logsrvd/logsrvd_journal.c
+++ b/logsrvd/logsrvd_journal.c
@@ -16,7 +16,12 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include "config.h"
+/*
+ * This is an open source non-commercial project. Dear PVS-Studio, please check it.
+ * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
+ */
+
+#include <config.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -84,8 +89,9 @@ journal_fdopen(int fd, const char *journal_path,
static int
journal_mkstemp(const char *parent_dir, char *pathbuf, int pathlen)
{
- int len, fd = -1;
+ int len, dfd = -1, fd = -1;
mode_t dirmode, oldmask;
+ char *template;
debug_decl(journal_mkstemp, SUDO_DEBUG_UTIL);
/* umask must not be more restrictive than the file modes. */
@@ -104,19 +110,23 @@ journal_mkstemp(const char *parent_dir, char *pathbuf, int pathlen)
RELAY_TEMPLATE);
goto done;
}
- if (!sudo_mkdir_parents(pathbuf, logsrvd_conf_iolog_uid(),
- logsrvd_conf_iolog_gid(), S_IRWXU|S_IXGRP|S_IXOTH, false)) {
+ dfd = sudo_open_parent_dir(pathbuf, logsrvd_conf_iolog_uid(),
+ logsrvd_conf_iolog_gid(), S_IRWXU|S_IXGRP|S_IXOTH, false);
+ if (dfd == -1) {
sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO,
"unable to create parent dir for %s", pathbuf);
goto done;
}
- if ((fd = mkstemp(pathbuf)) == -1) {
+ template = pathbuf + (len - strlen(RELAY_TEMPLATE));
+ if ((fd = mkostempsat(dfd, template, 0, 0)) == -1) {
sudo_warn(U_("%s: %s"), "mkstemp", pathbuf);
goto done;
}
done:
umask(oldmask);
+ if (dfd != -1)
+ close(dfd);
debug_return_int(fd);
}