Blame SOURCES/rsyslog-8.2102.0-rhbz2124934-extra-ca-files.patch

9d9774
--- rsyslog-8.2102.0.ori/runtime/glbl.h	2020-10-03 19:06:47.000000000 +0200
9d9774
+++ rsyslog-8.2102.0/runtime/glbl.h	2022-09-07 13:32:51.623799582 +0200
9d9774
@@ -72,6 +72,7 @@
9d9774
 	SIMP_PROP(DfltNetstrmDrvrCAF, uchar*)
9d9774
 	SIMP_PROP(DfltNetstrmDrvrKeyFile, uchar*)
9d9774
 	SIMP_PROP(DfltNetstrmDrvrCertFile, uchar*)
9d9774
+	SIMP_PROP(NetstrmDrvrCAExtraFiles, uchar*)
9d9774
 	SIMP_PROP(ParserControlCharacterEscapePrefix, uchar)
9d9774
 	SIMP_PROP(ParserDropTrailingLFOnReception, int)
9d9774
 	SIMP_PROP(ParserEscapeControlCharactersOnReceive, int)
9d9774
--- rsyslog-8.2102.0.ori/runtime/glbl.c	2022-09-07 13:17:02.669696053 +0200
9d9774
+++ rsyslog-8.2102.0/runtime/glbl.c	2022-09-07 13:56:37.678966129 +0200
9d9774
@@ -122,6 +122,7 @@
9d9774
 static uchar *pszDfltNetstrmDrvrCAF = NULL; /* default CA file for the netstrm driver */
9d9774
 static uchar *pszDfltNetstrmDrvrKeyFile = NULL; /* default key file for the netstrm driver (server) */
9d9774
 static uchar *pszDfltNetstrmDrvrCertFile = NULL; /* default cert file for the netstrm driver (server) */
9d9774
+static uchar *pszNetstrmDrvrCAExtraFiles = NULL; /* list of additional CAExtraFiles */
9d9774
 int bTerminateInputs = 0;		/* global switch that inputs shall terminate ASAP (1=> terminate) */
9d9774
 static uchar cCCEscapeChar = '#'; /* character to be used to start an escape sequence for control chars */
9d9774
 static int bDropTrailingLF = 1; /* drop trailing LF's on reception? */
9d9774
@@ -176,6 +177,7 @@
9d9774
 	{ "defaultnetstreamdriverkeyfile", eCmdHdlrString, 0 },
9d9774
 	{ "defaultnetstreamdrivercertfile", eCmdHdlrString, 0 },
9d9774
 	{ "defaultnetstreamdriver", eCmdHdlrString, 0 },
9d9774
+	{ "netstreamdrivercaextrafiles", eCmdHdlrString, 0 },
9d9774
 	{ "maxmessagesize", eCmdHdlrSize, 0 },
9d9774
 	{ "oversizemsg.errorfile", eCmdHdlrGetWord, 0 },
9d9774
 	{ "oversizemsg.report", eCmdHdlrBinary, 0 },
9d9774
@@ -307,6 +309,8 @@
9d9774
 /* TODO: use custom function which frees existing value */
9d9774
 SIMP_PROP_SET(DfltNetstrmDrvrCertFile, pszDfltNetstrmDrvrCertFile, uchar*)
9d9774
 /* TODO: use custom function which frees existing value */
9d9774
+SIMP_PROP_SET(NetstrmDrvrCAExtraFiles, pszNetstrmDrvrCAExtraFiles, uchar*)
9d9774
+/* TODO: use custom function which frees existing value */
9d9774
 
9d9774
 #undef SIMP_PROP
9d9774
 #undef SIMP_PROP_SET
9d9774
@@ -838,6 +842,12 @@
9d9774
 	return(pszDfltNetstrmDrvrCAF);
9d9774
 }
9d9774
 
9d9774
+/* return the extra CA Files, if needed */
9d9774
+static uchar*
9d9774
+GetNetstrmDrvrCAExtraFiles(void)
9d9774
+{
9d9774
+      return(pszNetstrmDrvrCAExtraFiles);
9d9774
+}
9d9774
 
9d9774
 /* return the current default netstream driver key File */
9d9774
 static uchar*
9d9774
@@ -925,6 +935,7 @@
9d9774
 	SIMP_PROP(DfltNetstrmDrvrCAF)
9d9774
 	SIMP_PROP(DfltNetstrmDrvrKeyFile)
9d9774
 	SIMP_PROP(DfltNetstrmDrvrCertFile)
9d9774
+	SIMP_PROP(NetstrmDrvrCAExtraFiles)
9d9774
 #ifdef USE_UNLIMITED_SELECT
9d9774
 	SIMP_PROP(FdSetSize)
9d9774
 #endif
9d9774
@@ -941,6 +952,8 @@
9d9774
 	pszDfltNetstrmDrvr = NULL;
9d9774
 	free(pszDfltNetstrmDrvrCAF);
9d9774
 	pszDfltNetstrmDrvrCAF = NULL;
9d9774
+	free(pszNetstrmDrvrCAExtraFiles);
9d9774
+	pszNetstrmDrvrCAExtraFiles = NULL;	
9d9774
 	free(pszDfltNetstrmDrvrKeyFile);
9d9774
 	pszDfltNetstrmDrvrKeyFile = NULL;
9d9774
 	free(pszDfltNetstrmDrvrCertFile);
9d9774
@@ -1350,6 +1363,9 @@
9d9774
 			free(pszDfltNetstrmDrvr);
9d9774
 			pszDfltNetstrmDrvr = (uchar*)
9d9774
 				es_str2cstr(cnfparamvals[i].val.d.estr, NULL);
9d9774
+		} else if(!strcmp(paramblk.descr[i].name, "netstreamdrivercaextrafiles")) {
9d9774
+			free(pszNetstrmDrvrCAExtraFiles);
9d9774
+			pszNetstrmDrvrCAExtraFiles = (uchar*) es_str2cstr(cnfparamvals[i].val.d.estr, NULL);
9d9774
 		} else if(!strcmp(paramblk.descr[i].name, "preservefqdn")) {
9d9774
 			bPreserveFQDN = (int) cnfparamvals[i].val.d.n;
9d9774
 		} else if(!strcmp(paramblk.descr[i].name,
9d9774
@@ -1546,6 +1562,8 @@
9d9774
 	&pszDfltNetstrmDrvrKeyFile, NULL));
9d9774
 	CHKiRet(regCfSysLineHdlr((uchar *)"defaultnetstreamdrivercertfile", 0, eCmdHdlrGetWord, NULL,
9d9774
 	&pszDfltNetstrmDrvrCertFile, NULL));
9d9774
+	CHKiRet(regCfSysLineHdlr((uchar *)"netstreamdrivercaextrafiles", 0, eCmdHdlrGetWord, NULL,
9d9774
+	&pszNetstrmDrvrCAExtraFiles, NULL));
9d9774
 	CHKiRet(regCfSysLineHdlr((uchar *)"localhostname", 0, eCmdHdlrGetWord, NULL, &LocalHostNameOverride, NULL));
9d9774
 	CHKiRet(regCfSysLineHdlr((uchar *)"localhostipif", 0, eCmdHdlrGetWord, setLocalHostIPIF, NULL, NULL));
9d9774
 	CHKiRet(regCfSysLineHdlr((uchar *)"optimizeforuniprocessor", 0, eCmdHdlrGoneAway, NULL, NULL, NULL));
9d9774
--- rsyslog-8.2102.0.ori/runtime/nsd_ossl.c	2022-09-07 13:17:02.705696208 +0200
9d9774
+++ rsyslog-8.2102.0/runtime/nsd_ossl.c	2022-09-07 14:09:18.697256943 +0200
9d9774
@@ -88,6 +88,7 @@
9d9774
 static short bHaveCA;
9d9774
 static short bHaveCert;
9d9774
 static short bHaveKey;
9d9774
+static short bHaveExtraCAFiles;
9d9774
 static int bAnonInit;
9d9774
 static MUTEX_TYPE anonInit_mut = PTHREAD_MUTEX_INITIALIZER;
9d9774
 
9d9774
@@ -414,7 +415,8 @@
9d9774
 {
9d9774
 	DEFiRet;
9d9774
 	DBGPRINTF("openssl: entering osslGlblInit\n");
9d9774
-	const char *caFile, *certFile, *keyFile;
9d9774
+	const char *caFile, *certFile, *keyFile, *extraCaFile;
9d9774
+	char *extraCaFiles;
9d9774
 
9d9774
 	/* Setup OpenSSL library */
9d9774
 	if((opensslh_THREAD_setup() == 0) || !SSL_library_init()) {
9d9774
@@ -451,9 +453,27 @@
9d9774
 	} else {
9d9774
 		bHaveKey = 1;
9d9774
 	}
9d9774
+	extraCaFiles = (char*) glbl.GetNetstrmDrvrCAExtraFiles();
9d9774
+	if(extraCaFiles == NULL) {
9d9774
+		bHaveExtraCAFiles = 0;
9d9774
+	} else {
9d9774
+		bHaveExtraCAFiles = 1;
9d9774
+	}
9d9774
 
9d9774
 	/* Create main CTX Object */
9d9774
 	ctx = SSL_CTX_new(SSLv23_method());
9d9774
+	if(bHaveExtraCAFiles == 1) {
9d9774
+		while((extraCaFile = strsep(&extraCaFiles, ","))) {
9d9774
+			if(SSL_CTX_load_verify_locations(ctx, extraCaFile, NULL) != 1) {
9d9774
+				LogError(0, RS_RET_TLS_CERT_ERR, "Error: Extra Certificate file could not be accessed. "
9d9774
+					"Check at least: 1) file path is correct, 2) file exist, "
9d9774
+					"3) permissions are correct, 4) file content is correct. "
9d9774
+					"Open ssl error info may follow in next messages");
9d9774
+				osslLastSSLErrorMsg(0, NULL, LOG_ERR, "osslGlblInit");
9d9774
+				ABORT_FINALIZE(RS_RET_TLS_CERT_ERR);
9d9774
+			}
9d9774
+		}
9d9774
+	}
9d9774
 	if(bHaveCA == 1 && SSL_CTX_load_verify_locations(ctx, caFile, NULL) != 1) {
9d9774
 		LogError(0, RS_RET_TLS_CERT_ERR, "Error: CA certificate could not be accessed. "
9d9774
 				"Check at least: 1) file path is correct, 2) file exist, "