Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
icinga.33763
icinga-CVE-2016-9566.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File icinga-CVE-2016-9566.patch of Package icinga.33763
Index: icinga-1.13.3/base/logging.c =================================================================== --- icinga-1.13.3.orig/base/logging.c +++ icinga-1.13.3/base/logging.c @@ -217,11 +217,18 @@ static void write_to_all_logs_with_times FILE *open_log_file(void) { + int fh; + struct stat st; if (log_fp) /* keep it open unless we rotate */ return log_fp; - log_fp = fopen(log_file, "a+"); + if ((fh = open(log_file, O_RDWR|O_APPEND|O_CREAT|O_NOFOLLOW, S_IRUSR|S_IWUSR)) == -1) { + if (daemon_mode == FALSE) + printf("Warning: Cannot open log file '%s' for writing\n", log_file); + return NULL; + } + log_fp = fdopen(fh, "a+"); if (log_fp == NULL) { if (daemon_mode == FALSE) { @@ -230,6 +237,21 @@ FILE *open_log_file(void) { return NULL; } + if ((fstat(fh, &st)) == -1) { + log_fp = NULL; + close(fh); + if (daemon_mode == FALSE) + printf("Warning: Cannot fstat log file '%s'\n", log_file); + return NULL; + } + if (st.st_nlink != 1 || (st.st_mode & S_IFMT) != S_IFREG) { + log_fp = NULL; + close(fh); + if (daemon_mode == FALSE) + printf("Warning: log file '%s' has an invalid mode\n", log_file); + return NULL; + } + (void)fcntl(fileno(log_fp), F_SETFD, FD_CLOEXEC); return log_fp; @@ -617,6 +639,9 @@ int write_log_file_info(time_t *timestam /* opens the debug log for writing */ int open_debug_log(void) { + int fh; + struct stat st; + /* don't do anything if we're not actually running... */ if (verify_config == TRUE || test_scheduling == TRUE) return OK; @@ -625,10 +650,23 @@ int open_debug_log(void) { if (debug_level == DEBUGL_NONE) return OK; - if ((debug_file_fp = fopen(debug_file, "a+")) == NULL) + if ((fh = open(debug_file, O_RDWR|O_APPEND|O_CREAT|O_NOFOLLOW, S_IRUSR|S_IWUSR)) == -1) + return ERROR; + if((debug_file_fp = fdopen(fh, "a+")) == NULL) + return ERROR; + + if ((fstat(fh, &st)) == -1) { + debug_file_fp = NULL; + close(fh); return ERROR; + } + if (st.st_nlink != 1 || (st.st_mode & S_IFMT) != S_IFREG) { + debug_file_fp = NULL; + close(fh); + return ERROR; + } - (void)fcntl(fileno(debug_file_fp), F_SETFD, FD_CLOEXEC); + (void)fcntl(fh, F_SETFD, FD_CLOEXEC); return OK; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor