File icinga-1.14.2_-_improve_error_handling.patch of Package icinga

From 342e35c0b867713e5c1eb5724c3f258b61c2fbd0 Mon Sep 17 00:00:00 2001
From: Jia Zhouyang <jiazhouyang@nudt.edu.cn>
Date: Thu, 1 Mar 2018 15:17:58 +0800
Subject: [PATCH 1/3] Add error handling for external APIs

Add error handling code for chdir and pipe. When those APIs fail, print error message and return.
---
 base/utils.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/base/utils.c b/base/utils.c
index 606e682e3..976a225f4 100644
--- a/base/utils.c
+++ b/base/utils.c
@@ -480,7 +480,10 @@ int my_system_r(icinga_macros *mac, char *cmd, int timeout, int *early_timeout,
 #endif
 
 	/* create a pipe */
-	pipe(fd);
+	if (pipe(fd) < 0) {
+		logit(NSLOG_RUNTIME_WARNING, TRUE, "Warning: pipe() in my_system_r() failed for command \"%s\"\n", cmd);
+		return STATE_UNKNOWN;
+	}
 
 	/* make the pipe non-blocking */
 	fcntl(fd[0], F_SETFL, O_NONBLOCK);
@@ -2507,9 +2510,14 @@ int daemon_init(void) {
 	/* change working directory. scuttle home if we're dumping core */
 	homedir = getenv("HOME");
 	if (daemon_dumps_core == TRUE && homedir != NULL)
-		chdir(homedir);
+		val = chdir(homedir);
 	else
-		chdir("/");
+		val = chdir("/");
+	if (val < 0) {
+		logit(NSLOG_RUNTIME_ERROR, TRUE, "Failed to change dir: %s\n", strerror(errno));
+		cleanup();
+		exit(ERROR);
+	}
 
 	umask(S_IWGRP | S_IWOTH);
 

From c723ba0ecd820a8a803257bfeaad67fd50a7b24f Mon Sep 17 00:00:00 2001
From: Jia Zhouyang <jiazhouyang@nudt.edu.cn>
Date: Thu, 1 Mar 2018 15:23:32 +0800
Subject: [PATCH 2/3] Add error handling for chown

When chown fails, print error message and return.
---
 base/logging.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/base/logging.c b/base/logging.c
index cc0245086..a222415aa 100644
--- a/base/logging.c
+++ b/base/logging.c
@@ -606,7 +606,10 @@ int rotate_log_file(time_t rotation_time) {
 
 	if (stat_result == 0) {
 		chmod(log_file, log_file_stat.st_mode);
-		chown(log_file, log_file_stat.st_uid, log_file_stat.st_gid);
+		if (chown(log_file, log_file_stat.st_uid, log_file_stat.st_gid) < 0) {
+			perror("chown failed");
+			return ERROR;
+		}
 	}
 
 	/* log current host and service state if activated*/

From 3beb2ed1c6fef73c81653809f44c938f7b7d1300 Mon Sep 17 00:00:00 2001
From: Jia Zhouyang <jiazhouyang@nudt.edu.cn>
Date: Thu, 1 Mar 2018 15:28:32 +0800
Subject: [PATCH 3/3] Add error handling for chown

When chown fails, print error message and return.
---
 cgi/cgiutils.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/cgi/cgiutils.c b/cgi/cgiutils.c
index 694ba383b..bc8765601 100644
--- a/cgi/cgiutils.c
+++ b/cgi/cgiutils.c
@@ -3047,7 +3047,10 @@ int rotate_cgi_log_file() {
 
 	if (stat_result == 0) {
 		chmod(cgi_log_file, log_file_stat.st_mode);
-		chown(cgi_log_file, log_file_stat.st_uid, log_file_stat.st_gid);
+		if (chown(cgi_log_file, log_file_stat.st_uid, log_file_stat.st_gid) < 0) {
+			perror("chown failed");
+			return ERROR;
+		}
 	}
 
 	my_free(log_archive);
openSUSE Build Service is sponsored by