summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2012-12-15 19:56:33 +0100
committerJakub Hrozek <jhrozek@redhat.com>2013-05-16 18:55:57 +0200
commitb2de843cc076f60c884d51842cafbf47e1191f41 (patch)
tree8428d2e1bc6c6631ba5a82bd45aad3f130e73216
parente57b8a6b0d7dbb0e336ba236841b27320bc3f886 (diff)
downloadsssd-b2de843cc076f60c884d51842cafbf47e1191f41.tar.gz
sssd-b2de843cc076f60c884d51842cafbf47e1191f41.tar.xz
sssd-b2de843cc076f60c884d51842cafbf47e1191f41.zip
Set cloexec flag for log files
https://fedorahosted.org/sssd/ticket/1708 The services kept the fd to /var/log/sssd/sssd.log open. I don't think there's any point in keeping the logfiles open after exec-ing for the child, so I set the CLOEXEC flag.
-rw-r--r--src/util/debug.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/util/debug.c b/src/util/debug.c
index 1b78ebaef..ee25d3120 100644
--- a/src/util/debug.c
+++ b/src/util/debug.c
@@ -23,6 +23,7 @@
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
+#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -117,6 +118,8 @@ int open_debug_file_ex(const char *filename, FILE **filep)
const char *log_file;
mode_t old_umask;
int ret;
+ int debug_fd;
+ int flags;
if (filename == NULL) {
log_file = debug_log_file;
@@ -142,6 +145,14 @@ int open_debug_file_ex(const char *filename, FILE **filep)
}
umask(old_umask);
+ debug_fd = fileno(f);
+ if (debug_fd == -1) {
+ return EIO;
+ }
+
+ flags = fcntl(debug_fd, F_GETFD, 0);
+ (void) fcntl(debug_fd, F_SETFD, flags | FD_CLOEXEC);
+
if (filep == NULL) {
debug_file = f;
} else {