diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7250858
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+SOURCES/rsyslog-8.1911.0.tar.gz
+SOURCES/rsyslog-doc-8.1911.0.tar.gz
diff --git a/.rsyslog.metadata b/.rsyslog.metadata
new file mode 100644
index 0000000..6d4863f
--- /dev/null
+++ b/.rsyslog.metadata
@@ -0,0 +1,2 @@
+30dfc2b99d73598788e2bd0d0ac45e16e7c3a3d5 SOURCES/rsyslog-8.1911.0.tar.gz
+8bcb23571ab8011b712ccf52acee20f8940b7f03 SOURCES/rsyslog-doc-8.1911.0.tar.gz
diff --git a/SOURCES/rsyslog-8.1911.0-rhbz1659383-config-enabled-error.patch b/SOURCES/rsyslog-8.1911.0-rhbz1659383-config-enabled-error.patch
new file mode 100644
index 0000000..cfc0115
--- /dev/null
+++ b/SOURCES/rsyslog-8.1911.0-rhbz1659383-config-enabled-error.patch
@@ -0,0 +1,28 @@
+From fec4535f1c407f39d35ed4f3921662f94710a10e Mon Sep 17 00:00:00 2001
+From: Rainer Gerhards <rgerhards@adiscon.com>
+Date: Mon, 9 Dec 2019 08:46:27 +0100
+Subject: [PATCH] core/config bugfix: false error msg when config.enabled="on"
+ is used
+
+When the 'config.enabled="on"' config parameter an invalid error message
+was emitted that this parameter is not supported. However, it was still
+applied properly. This commit removes the invalid error message.
+
+closes https://github.com/rsyslog/rsyslog/issues/4011
+---
+ grammar/rainerscript.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c
+index 1b8581b537..fd55360472 100644
+--- a/grammar/rainerscript.c
++++ b/grammar/rainerscript.c
+@@ -1219,6 +1219,8 @@ nvlstGetParams(struct nvlst *lst, struct cnfparamblk *params,
+ 			for(val = lst; val != NULL ; val = val->next) {
+ 				val->bUsed = 1;
+ 			}
++		} else {
++			valnode->bUsed = 1;
+ 		}
+ 	}
+ 
diff --git a/SOURCES/rsyslog-8.1911.0-rhbz1659898-imjournal-default-tag.patch b/SOURCES/rsyslog-8.1911.0-rhbz1659898-imjournal-default-tag.patch
new file mode 100644
index 0000000..e9a188d
--- /dev/null
+++ b/SOURCES/rsyslog-8.1911.0-rhbz1659898-imjournal-default-tag.patch
@@ -0,0 +1,93 @@
+diff -up ./plugins/imjournal/imjournal.c.default-tag ./plugins/imjournal/imjournal.c
+--- ./plugins/imjournal/imjournal.c.default-tag	2018-05-17 08:50:11.416418022 -0400
++++ ./plugins/imjournal/imjournal.c	2018-05-17 08:53:02.884418022 -0400
+@@ -78,6 +78,7 @@ static struct configSettings_s {
+ 	int bWorkAroundJournalBug; /* deprecated, left for backwards compatibility only */
+ 	int bFsync;
+ 	int bRemote;
++	char *dfltTag;
+ } cs;
+ 
+ static rsRetVal facilityHdlr(uchar **pp, void *pVal);
+@@ -93,7 +94,8 @@ static struct cnfparamdescr modpdescr[]
+ 	{ "usepid", eCmdHdlrString, 0 },
+ 	{ "workaroundjournalbug", eCmdHdlrBinary, 0 },
+ 	{ "fsync", eCmdHdlrBinary, 0 },
+-	{ "remote", eCmdHdlrBinary, 0 }
++	{ "remote", eCmdHdlrBinary, 0 },
++	{ "defaulttag", eCmdHdlrGetWord, 0 }
+ };
+ static struct cnfparamblk modpblk =
+ 	{ CNFPARAMBLK_VERSION,
+@@ -104,6 +106,7 @@ static struct cnfparamblk modpblk =
+ #define DFLT_persiststateinterval 10
+ #define DFLT_SEVERITY pri2sev(LOG_NOTICE)
+ #define DFLT_FACILITY pri2fac(LOG_USER)
++#define DFLT_TAG "journal"
+ 
+ static int bLegacyCnfModGlobalsPermitted = 1;/* are legacy module-global config parameters permitted? */
+ 
+@@ -268,7 +271,7 @@ readjournal(void)
+ 
+ 	/* Information from messages */
+ 	char *message = NULL;
+-	char *sys_iden;
++	char *sys_iden = NULL;
+ 	char *sys_iden_help = NULL;
+ 
+ 	const void *get;
+@@ -331,7 +334,7 @@ readjournal(void)
+ 	if (journalGetData("SYSLOG_IDENTIFIER", &get, &length) >= 0) {
+ 		CHKiRet(sanitizeValue(((const char *)get) + 18, length - 18, &sys_iden));
+ 	} else {
+-		CHKmalloc(sys_iden = strdup("journal"));
++		CHKmalloc(sys_iden = strdup(cs.dfltTag));
+ 	}
+ 
+ 	/* trying to get PID, default is "SYSLOG_PID" property */
+@@ -654,6 +657,11 @@ CODESTARTrunInput
+ 			"\"usepidfromsystem\" is depricated, use \"usepid\" instead");
+ 	}
+ 
++	if (cs.dfltTag == NULL) {
++		cs.dfltTag = strdup(DFLT_TAG);
++	}
++
++
+ 	if (cs.usePid && (strcmp(cs.usePid, "system") == 0)) {
+ 		pidFieldName = "_PID";
+ 		bPidFallBack = 0;
+@@ -732,6 +740,7 @@ CODESTARTbeginCnfLoad
+ 	cs.bWorkAroundJournalBug = 1;
+ 	cs.bFsync = 0;
+ 	cs.bRemote = 0;
++	cs.dfltTag = NULL;
+ ENDbeginCnfLoad
+ 
+ 
+@@ -754,6 +763,7 @@ BEGINfreeCnf
+ CODESTARTfreeCnf
+ 	free(cs.stateFile);
+ 	free(cs.usePid);
++	free(cs.dfltTag);
+ 	free(journalContext.cursor);
+ 	statsobj.Destruct(&(statsCounter.stats));
+ ENDfreeCnf
+@@ -832,6 +842,8 @@ CODESTARTsetModCnf
+ 			cs.bFsync = (int) pvals[i].val.d.n;
+ 		} else if (!strcmp(modpblk.descr[i].name, "remote")) {
+ 			cs.bRemote = (int) pvals[i].val.d.n;
++		} else if (!strcmp(modpblk.descr[i].name, "defaulttag")) {
++			cs.dfltTag = (char *)es_str2cstr(pvals[i].val.d.estr, NULL);
+ 		} else {
+ 			dbgprintf("imjournal: program error, non-handled "
+ 				"param '%s' in beginCnfLoad\n", modpblk.descr[i].name);
+@@ -799,6 +820,8 @@ CODEmodInit_QueryRegCFSLineHdlr
+ 		facilityHdlr, &cs.iDfltFacility, STD_LOADABLE_MODULE_ID));
+ 	CHKiRet(omsdRegCFSLineHdlr((uchar *)"imjournalusepidfromsystem", 0, eCmdHdlrBinary,
+ 		NULL, &cs.bUseJnlPID, STD_LOADABLE_MODULE_ID));
++	CHKiRet(omsdRegCFSLineHdlr((uchar *)"imjournaldefaulttag", 0, eCmdHdlrGetWord,
++		NULL, &cs.dfltTag, STD_LOADABLE_MODULE_ID));
+ ENDmodInit
+ /* vim:set ai:
+  */
diff --git a/SOURCES/rsyslog-8.1911.0-rhbz1763757-imfile-statefiles.patch b/SOURCES/rsyslog-8.1911.0-rhbz1763757-imfile-statefiles.patch
new file mode 100644
index 0000000..6e18e63
--- /dev/null
+++ b/SOURCES/rsyslog-8.1911.0-rhbz1763757-imfile-statefiles.patch
@@ -0,0 +1,142 @@
+From ac30968b7858d4ca3743d2b4d296eca543864fe2 Mon Sep 17 00:00:00 2001
+From: Jiri Vymazal <jvymazal@redhat.com>
+Date: Fri, 22 Nov 2019 14:25:59 +0100
+Subject: [PATCH] Thorougher state-file renaming and cleaning
+
+Now checking if file-id changes and reanming - cleaning state file
+accordingly and always checking and cleaning old inode-only style
+state files.
+---
+ plugins/imfile/imfile.c | 66 +++++++++++++++++++++++++++--------------
+ 1 file changed, 43 insertions(+), 23 deletions(-)
+
+diff --git a/plugins/imfile/imfile.c b/plugins/imfile/imfile.c
+index d9bf0fbb6d..9db2b47ac9 100644
+--- a/plugins/imfile/imfile.c
++++ b/plugins/imfile/imfile.c
+@@ -182,6 +182,7 @@ struct act_obj_s {
+ 	time_t timeoutBase; /* what time to calculate the timeout against? */
+ 	/* file dynamic data */
+ 	char file_id[FILE_ID_HASH_SIZE]; /* file id for this entry, once we could obtain it */
++	char file_id_prev[FILE_ID_HASH_SIZE]; /* previous file id for this entry, set if changed */
+ 	int in_move;	/* workaround for inotify move: if set, state file must not be deleted */
+ 	ino_t ino;	/* current inode nbr */
+ 	int fd;		/* fd to file in order to obtain file_id (needs to be preserved across move) */
+@@ -711,7 +712,7 @@ act_obj_add(fs_edge_t *const edge, const char *const name, const int is_file,
+ 		if (is_file) {
+ 			LogError(errno, RS_RET_ERR, "imfile: error accessing file '%s'", name);
+ 		} else { /* reporting only in debug for dirs as higher lvl paths are likely blocked by selinux */
+-			DBGPRINTF("imfile: error accessing file '%s'", name);
++			DBGPRINTF("imfile: error accessing directory '%s'", name);
+ 		}
+ 		FINALIZE;
+ 	}
+@@ -727,6 +728,7 @@ act_obj_add(fs_edge_t *const edge, const char *const name, const int is_file,
+ 	act->ino = ino;
+ 	act->fd = fd;
+ 	act->file_id[0] = '\0';
++	act->file_id_prev[0] = '\0';
+ 	act->is_symlink = is_symlink;
+ 	if (source) { /* we are target of symlink */
+ 		CHKmalloc(act->source_name = strdup(source));
+@@ -1256,17 +1258,15 @@ get_file_id_hash(const char *data, size_t lendata,
+ static void ATTR_NONNULL(1)
+ getFileID(act_obj_t *const act)
+ {
+-	if(act->file_id[0] != '\0') {
+-		return; /* everything already done */
+-	}
++	/* save the old id for cleaning purposes */
++	strncpy(act->file_id_prev, (const char*)act->file_id, FILE_ID_HASH_SIZE);
++	act->file_id[0] = '\0';
+ 	assert(act->fd >= 0); /* fd must have been opened at act_obj_t creation! */
+ 	char filedata[FILE_ID_SIZE];
++	lseek(act->fd, 0, SEEK_SET); /* Seek to beginning of file so we have correct id */
+ 	const int r = read(act->fd, filedata, FILE_ID_SIZE);
+ 	if(r == FILE_ID_SIZE) {
+ 		get_file_id_hash(filedata, sizeof(filedata), act->file_id, sizeof(act->file_id));
+-		dbgprintf("file_id '%s' obtained, closing monitoring file handle\n", act->file_id);
+-		close(act->fd); /* we will never go here! */
+-		act->fd = -1;
+ 	} else {
+ 		DBGPRINTF("getFileID partial or error read, ret %d\n", r);
+ 	}
+@@ -1378,28 +1378,13 @@ openFileWithStateFile(act_obj_t *const act)
+ 	if(fd < 0) {
+ 		if(errno == ENOENT) {
+ 			if(act->file_id[0] != '\0') {
+-				const char *pszSFNamHash = strdup((const char*)pszSFNam);
+-				CHKmalloc(pszSFNamHash);
+ 				DBGPRINTF("state file %s for %s does not exist - trying to see if "
+ 					"inode-only file exists\n", pszSFNam, act->name);
+ 				getFullStateFileName(statefn, "", pszSFNam, sizeof(pszSFNam));
+ 				fd = open((char*)pszSFNam, O_CLOEXEC | O_NOCTTY | O_RDONLY, 0600);
+ 				if(fd >= 0) {
+-					dbgprintf("found inode-only state file, renaming it now that we "
+-						"know the file_id, new name: %s\n", pszSFNamHash);
+-					/* we now can use identify the file, so let's rename it */
+-					if(rename((const char*)pszSFNam, pszSFNamHash) != 0) {
+-						LogError(errno, RS_RET_IO_ERROR,
+-							"imfile error trying to rename state file for '%s' - "
+-							"ignoring this error, usually this means a file no "
+-							"longer file is left over, but this may also cause "
+-							"some real trouble. Still the best we can do ",
+-							act->name);
+-						free((void*) pszSFNamHash);
+-						ABORT_FINALIZE(RS_RET_IO_ERROR);
+-					}
++					dbgprintf("found inode-only state file, will be renamed at next persist\n");
+ 				}
+-				free((void*) pszSFNamHash);
+ 			}
+ 			if(fd < 0) {
+ 				DBGPRINTF("state file %s for %s does not exist - trying to see if "
+@@ -2609,6 +2594,36 @@ atomicWriteStateFile(const char *fn, const char *content)
+ 	RETiRet;
+ }
+ 
++/* This function should be called after any file ID change - that is if
++ * file grown from hash-only statefile, or was truncated, this will ensure
++ * we delete the old file so we do not make garbage in our working dir and
++ * there are no leftover statefiles which can in theory later bind to something
++ * and cause data loss.
++ * jvymazal 2019-11-27
++ */
++static void
++removeOldStatefile(const uchar *statefn, const char *hashToDelete)
++{
++	int ret;
++	uchar statefname[MAXFNAME];
++
++	getFullStateFileName(statefn, hashToDelete, statefname, sizeof(statefname));
++	DBGPRINTF("removing old state file: '%s'\n", statefname);
++	ret = unlink((const char*)statefname);
++	if(ret != 0) {
++		if (errno != ENOENT) {
++			LogError(errno, RS_RET_IO_ERROR,
++				"imfile error trying to delete old state file: '%s' - ignoring this "
++				"error, usually this means a file no longer file is left over, but "
++				"this may also cause some real trouble. Still the best we can do ",
++				statefname);
++		} else {
++			DBGPRINTF("trying to delete no longer valid statefile '%s' which no "
++					  "longer exists (probably already deleted)\n", statefname);
++		}
++	}
++}
++
+ 
+ /* This function persists information for a specific file being monitored.
+  * To do so, it simply persists the stream object. We do NOT abort on error
+@@ -2660,6 +2675,11 @@ persistStrmState(act_obj_t *const act)
+ 	CHKiRet(atomicWriteStateFile((const char*)statefname, jstr));
+ 	json_object_put(json);
+ 
++	/* file-id changed remove the old statefile */
++	if (strncmp((const char *)act->file_id_prev, (const char *)act->file_id, FILE_ID_HASH_SIZE)) {
++		removeOldStatefile(statefn, act->file_id_prev);
++	}
++
+ finalize_it:
+ 	if(iRet != RS_RET_OK) {
+ 		LogError(0, iRet, "imfile: could not persist state "
diff --git a/SOURCES/rsyslog-8.1911.0-rhbz1782353-deny-expired-by-default.patch b/SOURCES/rsyslog-8.1911.0-rhbz1782353-deny-expired-by-default.patch
new file mode 100644
index 0000000..8700dff
--- /dev/null
+++ b/SOURCES/rsyslog-8.1911.0-rhbz1782353-deny-expired-by-default.patch
@@ -0,0 +1,58 @@
+From 0de93c9e1597b20f71bb61d5375ded546cfd2fa8 Mon Sep 17 00:00:00 2001
+From: Jiri Vymazal <jvymazal@redhat.com>
+Date: Wed, 11 Dec 2019 15:35:26 +0100
+Subject: [PATCH] Changed default for permitExpiredCerts to "off"
+
+This is to be conssitent with rsyslog's prior behavior where
+expired certs were automatically rejected
+---
+ runtime/nsd_gtls.c | 10 +++++-----
+ runtime/nsd_ossl.c |  8 ++++----
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/runtime/nsd_gtls.c b/runtime/nsd_gtls.c
+index 5df12994d1..2be0ca9c92 100644
+--- a/runtime/nsd_gtls.c
++++ b/runtime/nsd_gtls.c
+@@ -1461,16 +1461,16 @@ SetPermitExpiredCerts(nsd_t *pNsd, uchar *mode)
+ 	nsd_gtls_t *pThis = (nsd_gtls_t*) pNsd;
+ 
+ 	ISOBJ_TYPE_assert((pThis), nsd_gtls);
+-	/* default is set to warn! */
+-	if(mode == NULL || !strcasecmp((char*)mode, "warn")) {
+-		pThis->permitExpiredCerts = GTLS_EXPIRED_WARN;
+-	} else if(!strcasecmp((char*) mode, "off")) {
++	/* default is set to off! */
++	if(mode == NULL || !strcasecmp((char*)mode, "off")) {
+ 		pThis->permitExpiredCerts = GTLS_EXPIRED_DENY;
++	} else if(!strcasecmp((char*) mode, "warn")) {
++		pThis->permitExpiredCerts = GTLS_EXPIRED_WARN;
+ 	} else if(!strcasecmp((char*) mode, "on")) {
+ 		pThis->permitExpiredCerts = GTLS_EXPIRED_PERMIT;
+ 	} else {
+ 		LogError(0, RS_RET_VALUE_NOT_SUPPORTED, "error: permitexpiredcerts mode '%s' not supported by "
+-				"ossl netstream driver", mode);
++				"gtls netstream driver", mode);
+ 		ABORT_FINALIZE(RS_RET_VALUE_NOT_SUPPORTED);
+ 	}
+ 
+diff --git a/runtime/nsd_ossl.c b/runtime/nsd_ossl.c
+index 4f8dd845ab..ebb2537d72 100644
+--- a/runtime/nsd_ossl.c
++++ b/runtime/nsd_ossl.c
+@@ -1130,11 +1130,11 @@ SetPermitExpiredCerts(nsd_t *pNsd, uchar *mode)
+ 	nsd_ossl_t *pThis = (nsd_ossl_t*) pNsd;
+ 
+ 	ISOBJ_TYPE_assert((pThis), nsd_ossl);
+-	/* default is set to warn! */
+-	if(mode == NULL || !strcasecmp((char*)mode, "warn")) {
+-		pThis->permitExpiredCerts = OSSL_EXPIRED_WARN;
+-	} else if(!strcasecmp((char*) mode, "off")) {
++	/* default is set to off! */
++	if(mode == NULL || !strcasecmp((char*)mode, "off")) {
+ 		pThis->permitExpiredCerts = OSSL_EXPIRED_DENY;
++	} else if(!strcasecmp((char*) mode, "warn")) {
++		pThis->permitExpiredCerts = OSSL_EXPIRED_WARN;
+ 	} else if(!strcasecmp((char*) mode, "on")) {
+ 		pThis->permitExpiredCerts = OSSL_EXPIRED_PERMIT;
+ 	} else {
diff --git a/SOURCES/rsyslog-8.1911.0-service.patch b/SOURCES/rsyslog-8.1911.0-service.patch
new file mode 100644
index 0000000..338a871
--- /dev/null
+++ b/SOURCES/rsyslog-8.1911.0-service.patch
@@ -0,0 +1,21 @@
+diff -up ./rsyslog.service.in.service ./rsyslog.service.in
+--- ./rsyslog.service.in.service	2018-03-01 13:58:11.480598935 +0100
++++ ./rsyslog.service.in	2018-03-01 13:58:25.433518607 +0100
+@@ -1,12 +1,16 @@
+ [Unit]
+ Description=System Logging Service
+ Requires=syslog.socket
++Wants=network.target network-online.target
++After=network.target network-online.target
+ Documentation=man:rsyslogd(8)
+ Documentation=https://www.rsyslog.com/doc/
+ 
+ [Service]
+ Type=notify
+-ExecStart=@sbindir@/rsyslogd -n -iNONE
++EnvironmentFile=-/etc/sysconfig/rsyslog
++ExecStart=@sbindir@/rsyslogd -n $SYSLOGD_OPTIONS
++UMask=0066
+ StandardOutput=null
+ Restart=on-failure
+ 
diff --git a/SOURCES/rsyslog.conf b/SOURCES/rsyslog.conf
new file mode 100644
index 0000000..c4ac740
--- /dev/null
+++ b/SOURCES/rsyslog.conf
@@ -0,0 +1,79 @@
+# rsyslog configuration file
+
+# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
+# or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html 
+# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
+
+#### MODULES ####
+
+module(load="imuxsock" 	  # provides support for local system logging (e.g. via logger command)
+       SysSock.Use="off") # Turn off message reception via local log socket; 
+			  # local messages are retrieved through imjournal now.
+module(load="imjournal" 	    # provides access to the systemd journal
+       StateFile="imjournal.state") # File to store the position in the journal
+#module(load="imklog") # reads kernel messages (the same are read from journald)
+#module(load"immark") # provides --MARK-- message capability
+
+# Provides UDP syslog reception
+# for parameters see http://www.rsyslog.com/doc/imudp.html
+#module(load="imudp") # needs to be done just once
+#input(type="imudp" port="514")
+
+# Provides TCP syslog reception
+# for parameters see http://www.rsyslog.com/doc/imtcp.html
+#module(load="imtcp") # needs to be done just once
+#input(type="imtcp" port="514")
+
+#### GLOBAL DIRECTIVES ####
+
+# Where to place auxiliary files
+global(workDirectory="/var/lib/rsyslog")
+
+# Use default timestamp format
+module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
+
+# Include all config files in /etc/rsyslog.d/
+include(file="/etc/rsyslog.d/*.conf" mode="optional")
+
+#### RULES ####
+
+# Log all kernel messages to the console.
+# Logging much else clutters up the screen.
+#kern.*                                                 /dev/console
+
+# Log anything (except mail) of level info or higher.
+# Don't log private authentication messages!
+*.info;mail.none;authpriv.none;cron.none                /var/log/messages
+
+# The authpriv file has restricted access.
+authpriv.*                                              /var/log/secure
+
+# Log all the mail messages in one place.
+mail.*                                                  -/var/log/maillog
+
+
+# Log cron stuff
+cron.*                                                  /var/log/cron
+
+# Everybody gets emergency messages
+*.emerg                                                 :omusrmsg:*
+
+# Save news errors of level crit and higher in a special file.
+uucp,news.crit                                          /var/log/spooler
+
+# Save boot messages also to boot.log
+local7.*                                                /var/log/boot.log
+
+
+# ### sample forwarding rule ###
+#action(type="omfwd"  
+# An on-disk queue is created for this action. If the remote host is
+# down, messages are spooled to disk and sent when it is up again.
+#queue.filename="fwdRule1"       # unique name prefix for spool files
+#queue.maxdiskspace="1g"         # 1gb space limit (use as much as possible)
+#queue.saveonshutdown="on"       # save messages to disk on shutdown
+#queue.type="LinkedList"         # run asynchronously
+#action.resumeRetryCount="-1"    # infinite retries if host is down
+# Remote Logging (we use TCP for reliable delivery)
+# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
+#Target="remote_host" Port="XXX" Protocol="tcp")
diff --git a/SOURCES/rsyslog.log b/SOURCES/rsyslog.log
new file mode 100644
index 0000000..b101e32
--- /dev/null
+++ b/SOURCES/rsyslog.log
@@ -0,0 +1,12 @@
+/var/log/cron
+/var/log/maillog
+/var/log/messages
+/var/log/secure
+/var/log/spooler
+{
+    missingok
+    sharedscripts
+    postrotate
+        /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
+    endscript
+}
diff --git a/SOURCES/rsyslog.sysconfig b/SOURCES/rsyslog.sysconfig
new file mode 100644
index 0000000..bc65731
--- /dev/null
+++ b/SOURCES/rsyslog.sysconfig
@@ -0,0 +1,5 @@
+# Options for rsyslogd
+# Syslogd options are deprecated since rsyslog v3.
+# If you want to use them, switch to compatibility mode 2 by "-c 2"
+# See rsyslogd(8) for more details
+SYSLOGD_OPTIONS=""
diff --git a/SPECS/rsyslog.spec b/SPECS/rsyslog.spec
new file mode 100644
index 0000000..5c5629c
--- /dev/null
+++ b/SPECS/rsyslog.spec
@@ -0,0 +1,593 @@
+%define rsyslog_statedir %{_sharedstatedir}/%{name}
+%define rsyslog_pkidir %{_sysconfdir}/pki/%{name}
+%define rsyslog_docdir %{_docdir}/%{name}
+
+
+Summary: Enhanced system logging and kernel message trapping daemon
+Name: rsyslog
+Version: 8.1911.0
+Release: 3%{?dist}
+License: (GPLv3+ and ASL 2.0)
+Group: System Environment/Daemons
+ExcludeArch: i686
+URL: http://www.rsyslog.com/
+Source0: http://www.rsyslog.com/files/download/rsyslog/%{name}-%{version}.tar.gz
+Source1: http://www.rsyslog.com/files/download/rsyslog/%{name}-doc-%{version}.tar.gz
+Source2: rsyslog.conf
+Source3: rsyslog.sysconfig
+Source4: rsyslog.log
+
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: bison
+BuildRequires: flex
+BuildRequires: libcurl-devel
+BuildRequires: libgcrypt-devel 
+BuildRequires: libfastjson-devel >= 0.99.8
+BuildRequires: libestr-devel >= 0.1.9
+BuildRequires: libtool
+BuildRequires: libuuid-devel
+BuildRequires: pkgconfig
+BuildRequires: python3-docutils
+# it depens on rhbz#1419228
+BuildRequires: systemd-devel >= 219-39
+BuildRequires: zlib-devel
+
+Requires: logrotate >= 3.5.2
+Requires: bash >= 2.0
+Requires: libestr >= 0.1.9
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+
+Provides: syslog
+Obsoletes: sysklogd < 1.5-11
+
+# tweak the upstream service file to honour configuration from /etc/sysconfig/rsyslog
+Patch0: rsyslog-8.1911.0-service.patch
+# imjournal: adds "journal" when tag/process name is missing
+Patch1: rsyslog-8.1911.0-rhbz1659898-imjournal-default-tag.patch
+Patch2: rsyslog-8.1911.0-rhbz1763757-imfile-statefiles.patch
+Patch3: rsyslog-8.1911.0-rhbz1782353-deny-expired-by-default.patch
+Patch4: rsyslog-8.1911.0-rhbz1659383-config-enabled-error.patch
+
+%package crypto
+Summary: Encryption support
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+
+%package doc
+Summary: HTML Documentation for rsyslog
+Group: Documentation
+#no reason to have arched documentation
+BuildArch: noarch
+
+%package elasticsearch
+Summary: ElasticSearch output module for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+
+%package gnutls
+Summary: TLS protocol support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+BuildRequires: gnutls-devel
+
+%package gssapi
+Summary: GSSAPI authentication and encryption support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+BuildRequires: krb5-devel
+
+%package kafka
+Summary: Provides kafka support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+BuildRequires: librdkafka-devel
+
+%package mmaudit
+Summary: Message modification module supporting Linux audit format
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+
+%package mmjsonparse
+Summary: JSON enhanced logging support
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+
+%package mmkubernetes
+Summary: Provides the mmkubernetes module
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+
+%package mmnormalize
+Summary: Log normalization support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+BuildRequires: liblognorm-devel
+
+%package mmsnmptrapd
+Summary: Message modification module for snmptrapd generated messages
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+
+%package mysql
+Summary: MySQL support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+BuildRequires: mariadb-connector-c-devel
+
+%package pgsql
+Summary: PostgresSQL support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+BuildRequires: postgresql-devel
+
+%package relp
+Summary: RELP protocol support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+Requires: librelp >= 1.0.3
+BuildRequires: librelp-devel >= 1.2.16
+
+%package snmp
+Summary: SNMP protocol support for rsyslog
+Group: System Environment/Daemons
+Requires: %name = %version-%release
+BuildRequires: net-snmp-devel
+
+%description
+Rsyslog is an enhanced, multi-threaded syslog daemon. It supports MySQL,
+syslog/TCP, RFC 3195, permitted sender lists, filtering on any message part,
+and fine grain output format control. It is compatible with stock sysklogd
+and can be used as a drop-in replacement. Rsyslog is simple to set up, with
+advanced features suitable for enterprise-class, encryption-protected syslog
+relay chains.
+
+%description crypto
+This package contains a module providing log file encryption and a
+command line tool to process encrypted logs.
+
+%description doc
+This subpackage contains documentation for rsyslog.
+
+%description elasticsearch
+This module provides the capability for rsyslog to feed logs directly into
+Elasticsearch.
+
+%description gnutls
+The rsyslog-gnutls package contains the rsyslog plugins that provide the
+ability to send and receive syslog messages via TCP or RELP using TLS
+encryption. For details refer to rsyslog doc on imtcp and omfwd modules.
+
+%description gssapi
+The rsyslog-gssapi package contains the rsyslog plugins which support GSSAPI
+authentication and secure connections. GSSAPI is commonly used for Kerberos
+authentication.
+
+%description kafka
+The rsyslog-kafka package provides modules for Apache Kafka input and output. 
+
+%description mmaudit
+This module provides message modification supporting Linux audit format
+in various settings.
+
+%description mmjsonparse
+This module provides the capability to recognize and parse JSON enhanced
+syslog messages.
+
+%description mmkubernetes
+The rsyslog-mmkubernetes package provides module for adding kubernetes
+container metadata.
+
+%description mmnormalize
+This module provides the capability to normalize log messages via liblognorm.
+
+%description mmsnmptrapd
+This message modification module takes messages generated from snmptrapd and
+modifies them so that they look like they originated from the read originator.
+
+%description mysql
+The rsyslog-mysql package contains a dynamic shared object that will add
+MySQL database support to rsyslog.
+
+%description pgsql
+The rsyslog-pgsql package contains a dynamic shared object that will add
+PostgreSQL database support to rsyslog.
+
+%description relp
+The rsyslog-relp package contains the rsyslog plugins that provide
+the ability to receive syslog messages via the reliable RELP
+protocol.
+
+%description snmp
+The rsyslog-snmp package contains the rsyslog plugin that provides the
+ability to send syslog messages as SNMPv1 and SNMPv2c traps.
+
+%prep
+# set up rsyslog-doc sources
+%setup -q -a 1 -T -c
+
+#regenerate the docs
+
+#mv build/searchindex.js searchindex_backup.js
+#sphinx-build -b html source build
+#clean up
+#mv searchindex_backup.js build/searchindex.js
+
+rm -r LICENSE README.md source build/objects.inv
+mv build doc
+
+# set up rsyslog sources
+%setup -q -D
+
+%patch0 -p1 -b .service
+%patch1 -p1 -b .default-tag
+%patch2 -p1 -b .imfile-statefiles
+%patch3 -p1 -b .deny-expired-certs
+%patch4 -p1 -b .config-enabled-on
+
+%build
+%ifarch sparc64
+#sparc64 need big PIE
+export CFLAGS="$RPM_OPT_FLAGS -fPIE"
+%else
+export CFLAGS="$RPM_OPT_FLAGS -fpie"
+%endif
+export LDFLAGS="-pie -Wl,-z,relro -Wl,-z,now"
+
+sed -i 's/%{version}/%{version}-%{release}/g' configure.ac
+autoreconf -if
+%configure \
+	--prefix=/usr \
+	--disable-static \
+	--disable-testbench \
+	--enable-elasticsearch \
+	--enable-generate-man-pages \
+	--enable-gnutls \
+	--enable-gssapi-krb5 \
+	--enable-imdiag \
+	--enable-imfile \
+	--enable-imjournal \
+	--enable-imkafka \
+	--enable-impstats \
+	--enable-imptcp \
+	--enable-mail \
+	--enable-mmanon \
+	--enable-mmaudit \
+	--enable-mmcount \
+	--enable-mmjsonparse \
+	--enable-mmkubernetes \
+	--enable-mmnormalize \
+	--enable-mmsnmptrapd \
+	--enable-mmutf8fix \
+	--enable-mysql \
+	--enable-omhttp \
+	--enable-omjournal \
+	--enable-omkafka \
+	--enable-omprog \
+	--enable-omstdout \
+	--enable-omuxsock \
+	--enable-pgsql \
+	--enable-pmaixforwardedfrom \
+	--enable-pmcisconames \
+	--enable-pmlastmsg \
+	--enable-pmsnare \
+	--enable-relp \
+	--enable-snmp \
+	--enable-unlimited-select \
+	--enable-usertools 
+
+make
+
+%install
+make DESTDIR=%{buildroot} install
+
+install -d -m 755 %{buildroot}%{_sysconfdir}/sysconfig
+install -d -m 755 %{buildroot}%{_sysconfdir}/logrotate.d
+install -d -m 755 %{buildroot}%{_sysconfdir}/rsyslog.d
+install -d -m 700 %{buildroot}%{rsyslog_statedir}
+install -d -m 700 %{buildroot}%{rsyslog_pkidir}
+install -d -m 755 %{buildroot}%{rsyslog_docdir}/html
+
+install -p -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/rsyslog.conf
+install -p -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/rsyslog
+install -p -m 644 %{SOURCE4} %{buildroot}%{_sysconfdir}/logrotate.d/syslog
+install -p -m 644 plugins/ommysql/createDB.sql %{buildroot}%{rsyslog_docdir}/mysql-createDB.sql
+install -p -m 644 plugins/ompgsql/createDB.sql %{buildroot}%{rsyslog_docdir}/pgsql-createDB.sql
+install -p -m 644 contrib/mmkubernetes/*.rulebase %{buildroot}%{rsyslog_docdir}
+# extract documentation
+cp -r doc/* %{buildroot}%{rsyslog_docdir}/html
+# get rid of libtool libraries
+rm -f %{buildroot}%{_libdir}/rsyslog/*.la
+# get rid of socket activation by default
+sed -i '/^Alias/s/^/;/;/^Requires=syslog.socket/s/^/;/' %{buildroot}%{_unitdir}/rsyslog.service
+
+# convert line endings from "\r\n" to "\n"
+cat tools/recover_qi.pl | tr -d '\r' > %{buildroot}%{_bindir}/rsyslog-recover-qi.pl
+
+%post
+for n in /var/log/{messages,secure,maillog,spooler}
+do
+	[ -f $n ] && continue
+	umask 066 && touch $n
+done
+%systemd_post rsyslog.service
+
+%preun
+%systemd_preun rsyslog.service
+
+%postun
+%systemd_postun_with_restart rsyslog.service
+
+%files
+%doc AUTHORS COPYING* ChangeLog
+%exclude %{rsyslog_docdir}/html
+%exclude %{rsyslog_docdir}/mysql-createDB.sql
+%exclude %{rsyslog_docdir}/pgsql-createDB.sql
+%dir %{_libdir}/rsyslog
+%dir %{_sysconfdir}/rsyslog.d
+%dir %{rsyslog_statedir}
+%dir %{rsyslog_pkidir}
+%{_sbindir}/rsyslogd
+%attr(755,root,root) %{_bindir}/rsyslog-recover-qi.pl
+%{_mandir}/man5/rsyslog.conf.5.gz
+%{_mandir}/man8/rsyslogd.8.gz
+%{_unitdir}/rsyslog.service
+%config(noreplace) %{_sysconfdir}/rsyslog.conf
+%config(noreplace) %{_sysconfdir}/sysconfig/rsyslog
+%config(noreplace) %{_sysconfdir}/logrotate.d/syslog
+# plugins
+%{_libdir}/rsyslog/fmhash.so
+%{_libdir}/rsyslog/fmhttp.so
+%{_libdir}/rsyslog/imdiag.so
+%{_libdir}/rsyslog/imfile.so
+%{_libdir}/rsyslog/imjournal.so
+%{_libdir}/rsyslog/imklog.so
+%{_libdir}/rsyslog/immark.so
+%{_libdir}/rsyslog/impstats.so
+%{_libdir}/rsyslog/imptcp.so
+%{_libdir}/rsyslog/imtcp.so
+%{_libdir}/rsyslog/imudp.so
+%{_libdir}/rsyslog/imuxsock.so
+%{_libdir}/rsyslog/lmnet.so
+%{_libdir}/rsyslog/lmnetstrms.so
+%{_libdir}/rsyslog/lmnsd_ptcp.so
+%{_libdir}/rsyslog/lmregexp.so
+%{_libdir}/rsyslog/lmtcpclt.so
+%{_libdir}/rsyslog/lmtcpsrv.so
+%{_libdir}/rsyslog/lmzlibw.so
+%{_libdir}/rsyslog/mmanon.so
+%{_libdir}/rsyslog/mmcount.so
+%{_libdir}/rsyslog/mmexternal.so
+%{_libdir}/rsyslog/mmutf8fix.so
+%{_libdir}/rsyslog/omhttp.so
+%{_libdir}/rsyslog/omjournal.so
+%{_libdir}/rsyslog/ommail.so
+%{_libdir}/rsyslog/omprog.so
+%{_libdir}/rsyslog/omstdout.so
+%{_libdir}/rsyslog/omtesting.so
+%{_libdir}/rsyslog/omuxsock.so
+%{_libdir}/rsyslog/pmaixforwardedfrom.so
+%{_libdir}/rsyslog/pmcisconames.so
+%{_libdir}/rsyslog/pmlastmsg.so
+%{_libdir}/rsyslog/pmsnare.so
+
+%files crypto
+%{_bindir}/rscryutil
+%{_mandir}/man1/rscryutil.1.gz
+%{_libdir}/rsyslog/lmcry_gcry.so
+
+%files doc
+%doc %{rsyslog_docdir}/html
+
+%files elasticsearch
+%{_libdir}/rsyslog/omelasticsearch.so
+
+%files gssapi
+%{_libdir}/rsyslog/lmgssutil.so
+%{_libdir}/rsyslog/imgssapi.so
+%{_libdir}/rsyslog/omgssapi.so
+
+%files gnutls
+%{_libdir}/rsyslog/lmnsd_gtls.so
+
+%files kafka
+%{_libdir}/rsyslog/imkafka.so
+%{_libdir}/rsyslog/omkafka.so
+
+%files mmaudit
+%{_libdir}/rsyslog/mmaudit.so
+
+%files mmjsonparse
+%{_libdir}/rsyslog/mmjsonparse.so
+
+%files mmkubernetes
+%{_libdir}/rsyslog/mmkubernetes.so
+%doc %{rsyslog_docdir}/k8s_filename.rulebase
+%doc %{rsyslog_docdir}/k8s_container_name.rulebase
+
+%files mmnormalize
+%{_libdir}/rsyslog/mmnormalize.so
+
+%files mmsnmptrapd
+%{_libdir}/rsyslog/mmsnmptrapd.so
+
+%files mysql
+%doc %{rsyslog_docdir}/mysql-createDB.sql
+%{_libdir}/rsyslog/ommysql.so
+
+%files pgsql
+%doc %{rsyslog_docdir}/pgsql-createDB.sql
+%{_libdir}/rsyslog/ompgsql.so
+
+%files relp
+%{_libdir}/rsyslog/imrelp.so
+%{_libdir}/rsyslog/omrelp.so
+
+%files snmp
+%{_libdir}/rsyslog/omsnmp.so
+
+
+%changelog
+* Wed Dec 11 2019 Jiri Vymazal <jvymazal@redhat.com> - 8.1911.0-3
+  RHEL 8.2.0 ERRATUM
+- added patch reverting rejecting expired certs by default
+  resolves: rhbz#1782353
+- added patch silencing false errors on config.enabled statement
+  resolves: rhbz#1659383
+
+* Tue Dec 03 2019 Jiri Vymazal <jvymazal@redhat.com> - 8.1911.0-2
+  RHEL 8.2.0 ERRATUM
+- cleaned old patches, fixed patch names
+  resolves: rhbz#1740683
+
+* Mon Dec 02 2019 Jiri Vymazal <jvymazal@redhat.com> - 8.1911.0-1
+  RHEL 8.2.0 ERRATUM
+- rebased to 8.1911.0 upstream version, removed, previously
+  upstreamed patches
+  resolves: rhbz#1740683
+  resolves: rhbz#1659383
+  resolves: rhbz#1746876
+  resolves: rhbz#1676559
+  resolves: rhbz#1692072
+  resolves: rhbz#1692073
+  resolves: rhbz#1692074
+  resolves: rhbz#1699242
+  resolves: rhbz#1738213
+  resolves: rhbz#1744691
+  resolves: rhbz#1755218
+  resolves: rhbz#1768321
+  resolves: rhbz#1768324
+- added patch fixing imfile stefiles naming
+  resolves: rhbz#1763757
+
+* Fri Aug 30 2019 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-13
+  RHEL 8.1.0 ERRATUM
+- added patch enabling stricter TLS certs checking conforming to 
+  common criteria requirements
+  resolves: rhbz#1733244
+
+* Mon Jul 22 2019 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-12
+  RHEL 8.1.0 ERRATUM
+- edited imjournal memleak patch to not cause double-free crash
+  resolves: rhbz#1729995
+- added patch calling journald API only when there are no
+  preceeding errors
+  resolves: rhbz#1722165
+- added patch fixing imrelp module when invoked with old syntax
+  resolves: rhbz#1724218
+
+* Wed Jun 05 2019 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-11
+  RHEL 8.1.0 ERRATUM
+- fixed memory leak in imjournal by proper cursor releasing
+  resolves: rhbz#1716867
+
+* Fri May 10 2019 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-10
+  RHEL 8.1.0 ERRATUM
+- added option for imfile endmsg.regex
+  resolves: rhbz#1627941
+- added patch enhancing imfile rotation detection
+  resolves: rhbz#1674471
+- added patch fixing msgOffset datatype preventing crash on
+  message with too long other fields
+  resolves: rhbz#1677037
+- added patch introducing "preservecase" option for imudp/imtcp
+  resolves: rhbz#1614181
+
+* Mon Dec 17 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-9
+  RHEL 8.0.0 ERRATUM
+- added back legacy option for imjournal default tag
+  resolves: rhbz#1659898
+
+* Fri Dec 14 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-8
+  RHEL 8.0.0 ERRATUM
+- fixes mmkubenetes handling 404 and 429 errors
+  resolves: rhbz#1622768
+
+* Fri Oct 19 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-7
+- removed version from docdir macro
+  resolves: rhbz#1638023
+
+* Mon Aug 27 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-6
+- updated patch for enhanced imfile symlink support
+  resolves: rhbz#1614179
+
+* Fri Aug 10 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-5
+- rebuild for rebased dependencies
+- dependency cleanup and sorted sub-packages in spec
+  resolves: rhbz#1613880
+
+* Fri Aug 10 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-4
+- enabled mmkubernetes module
+  resolves: rhbz#1614432
+  resolves: rhbz#1614441
+
+* Thu Aug 09 2018 Josef Ridky <jridky@redhat.com> - 8.37.0-3
+- Rebuild for Net-SNMP
+
+* Thu Aug 09 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-2
+- added patch for enhanced imfile symlink support
+  resolves: rhbz#1614179
+
+* Wed Aug 08 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.37.0-1
+- rebase to 8.37.0
+  resolves: rhbz#1613880
+  resolves: rhbz#1564054
+  resolves: rhbz#1598218
+  - dropped invalid statefile patch - upstreamed
+  - dropped imjournal duplicates patch - upstreamed
+  resolves: rhbz#1544394
+- renumbered default tag patch and fitted onto rebased version
+
+* Fri Aug 03 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.36.0-4
+- removed dependency on libee
+  resolves: rhbz#1612032
+
+* Wed Aug 01 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.36.0-3
+- dropped json_nonoverwrite patch as there is no reason for
+  keeping it
+- renumbered rest of patches
+- added release number to AC_INIT to have it in package error logs
+
+* Mon Jul 16 2018 Charalampos Stratakis <cstratak@redhat.com> - 8.36.0-2
+- Depend on python3-docutils
+
+* Mon Jul 02 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.36.0-1
+- changed PID file name to follow upstream
+- removed config option to disable stdlog as it is now 
+  disabled by default
+
+* Thu Jun 28 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.36.0-1
+- rebase to 8.36
+- removed hiredis module
+- removed omudpspoof module
+  resolves: rhbz#1593762
+- finished converting config to new-style syntax
+
+* Mon May 21 2018 Jiri Vymazal <jvymazal@redhat.com> - 8.35.0-1
+- spec file cleanup
+- enabled kafka and hiredis modules
+  resolves: rhbz#1542497
+  resolves: rhbz#1542504
+- renamed patch fixing imjournal duplicating messages
+  resolves: rhbz#1544394
+
+* Thu May 17 2018 Marek Tamaskovic <mtamasko@redhat.com> - 8.35.0-1
+- rebase to 8.35
+- rebased patches from 8.32 to 8.35
+  - fixed imjournal-duplicates
+  - fixed imjournal-default-tag
+  - fixed service patch
+  - fixed in upstream deserialize-property-name
+
+* Fri Mar 23 2018 Radovan Sroka <rsroka@redhat.com> - 8.32.0-2
+- rebuild, bumped release number
+
+* Tue Feb 06 2018 Radovan Sroka <rsroka@redhat.com> - 8.32.0-1
+- initial clean build with plugins from rhel7
+- removed plugins:
+  - libdbi
+  - omruleset
+  - pmrfc3164sd
+- imported from fedora26