Blame SOURCES/0041-Ensure-that-files-read-in-have-a-trailing-new-line.patch

5e5f7c
From c9fce72e17b7afa389205d946e5ca7bef997be60 Mon Sep 17 00:00:00 2001
5e5f7c
From: Rob Crittenden <rcritten@redhat.com>
5e5f7c
Date: Wed, 29 Apr 2020 13:26:14 -0400
5e5f7c
Subject: [PATCH] Ensure that files read in have a trailing new-line
5e5f7c
5e5f7c
In SCEP when retrieving the CA chain the certificates passed in
5e5f7c
on the command-line (RA agent and CA cert) area printed along with
5e5f7c
the contents of what was retrieved remotely.
5e5f7c
5e5f7c
If one of the filesystem certificates lacks a newline then the
5e5f7c
output will be jumbled like:
5e5f7c
5e5f7c
-----END CERTIFICATE----------BEGIN CERTIFICATE-----\n
5e5f7c
5e5f7c
https://bugzilla.redhat.com/show_bug.cgi?id=1814976
5e5f7c
---
5e5f7c
 src/submit-u.c                  | 11 +++++++
5e5f7c
 tests/039-fromfile/expected.out |  4 +++
5e5f7c
 tests/039-fromfile/run.sh       | 55 +++++++++++++++++++++++++++++++++
5e5f7c
 tests/Makefile.am               | 10 ++++--
5e5f7c
 tests/tools/Makefile.am         |  6 +++-
5e5f7c
 tests/tools/fromfile.c          | 52 +++++++++++++++++++++++++++++++
5e5f7c
 6 files changed, 134 insertions(+), 4 deletions(-)
5e5f7c
 create mode 100644 tests/039-fromfile/expected.out
5e5f7c
 create mode 100755 tests/039-fromfile/run.sh
5e5f7c
 create mode 100644 tests/tools/fromfile.c
5e5f7c
5e5f7c
diff --git a/src/submit-u.c b/src/submit-u.c
5e5f7c
index b0b45ba..dca23a7 100644
5e5f7c
--- a/src/submit-u.c
5e5f7c
+++ b/src/submit-u.c
5e5f7c
@@ -100,6 +100,17 @@ cm_submit_u_from_file(const char *filename)
5e5f7c
 	}
5e5f7c
 	if (csr == NULL) {
5e5f7c
 		csr = strdup("");
5e5f7c
+	} else {
5e5f7c
+		int length = strlen(csr);
5e5f7c
+		if (csr[length-1] != '\n') {
5e5f7c
+			length += 1;
5e5f7c
+			csr = realloc(csr, length + 1);
5e5f7c
+			if (csr == NULL) {
5e5f7c
+				return NULL;
5e5f7c
+			}
5e5f7c
+			csr[length - 1] = '\n';
5e5f7c
+			csr[length] = '\0';
5e5f7c
+		}
5e5f7c
 	}
5e5f7c
 	return csr;
5e5f7c
 }
5e5f7c
diff --git a/tests/039-fromfile/expected.out b/tests/039-fromfile/expected.out
5e5f7c
new file mode 100644
5e5f7c
index 0000000..9191a57
5e5f7c
--- /dev/null
5e5f7c
+++ b/tests/039-fromfile/expected.out
5e5f7c
@@ -0,0 +1,4 @@
5e5f7c
+[trailing_nl]
5e5f7c
+Ok
5e5f7c
+[no_trailing_nl]
5e5f7c
+Ok
5e5f7c
diff --git a/tests/039-fromfile/run.sh b/tests/039-fromfile/run.sh
5e5f7c
new file mode 100755
5e5f7c
index 0000000..8bae773
5e5f7c
--- /dev/null
5e5f7c
+++ b/tests/039-fromfile/run.sh
5e5f7c
@@ -0,0 +1,55 @@
5e5f7c
+#!/bin/bash -e
5e5f7c
+
5e5f7c
+cd $tmpdir
5e5f7c
+
5e5f7c
+cat > $tmpdir/trailing_nl <<- EOF
5e5f7c
+-----BEGIN CERTIFICATE-----
5e5f7c
+MIIDjjCCAnagAwIBAgIRAO1VmyXYM0f7pbXVdEGtRPMwDQYJKoZIhvcNAQELBQAw
5e5f7c
+UDEgMB4GA1UEAwwXTG9jYWwgU2lnbmluZyBBdXRob3JpdHkxLDAqBgNVBAMMI2Vk
5e5f7c
+NTU5YjI1LWQ4MzM0N2ZiLWE1YjVkNTc0LTQxYWQ0NGYzMB4XDTE1MDQyODE3MDk0
5e5f7c
+OFoXDTE2MDQyODE3MDk0OFowUDEgMB4GA1UEAwwXTG9jYWwgU2lnbmluZyBBdXRo
5e5f7c
+b3JpdHkxLDAqBgNVBAMMI2VkNTU5YjI1LWQ4MzM0N2ZiLWE1YjVkNTc0LTQxYWQ0
5e5f7c
+NGYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5c/LhlyBs0UUiDSy
5e5f7c
+nrC+Q0WJkWZeQ/kqwniru+GlXgb3g+7VvyAfdZ45NiBdo/6xXyCLphK0g8oZLyi8
5e5f7c
+OwQQoUyVMn9gsGXbjlwSzjXKx3wdUM+lFpenx8iQS9aCfVQJ4tzFgM1pQBQ2AiHs
5e5f7c
+jvU18xSFSZApjT5UIK35kyH22D8LhCGGYLaU3xFEfHvd0AOuXwm5Nsiu/HTsSV4N
5e5f7c
+peUdFEmFzQwUEUdV2jKOPcXnOArV82vfpdp1nSCX3kruEb9G93VsmQ+9ebKXQRQE
5e5f7c
+Ltd65e/EYtXvihuTtElLYuyYZlYJdbTZeLXB4YLvElgNkS9JK7RKHlCm0KYQmcmd
5e5f7c
+GZSh8QIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQEBMB0GA1UdDgQWBBRLxeFy3+RS
5e5f7c
+FloygyjlXa6YEv8ltzAfBgNVHSMEGDAWgBRLxeFy3+RSFloygyjlXa6YEv8ltzAO
5e5f7c
+BgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggEBAH9A9ePIqZGF4VEo5D4j
5e5f7c
+MuOJ1J4uTRxHoEGXCDRcuCn3RvT0civWEPpRNo1YVgAWFODpt/HSi3lCVtTb7FwJ
5e5f7c
+hfHkxCpAuHmv3sfT8jcCwTTAXL1BLpCO6d0zz0RrFMNK+vGyZu/7LXhaYVu590Q5
5e5f7c
+1DMybHmln7i+Tw/eYb4Avk1FWGOEpNdf3ZjUazcDlkO4EwA6BnZUC8gFvz0OI73D
5e5f7c
+AJsGq/UsJvMH30ga1rZ/9LiHEMSEys5amk98yMRvi/R1qI02kjANdZ0ID/7cJSw2
5e5f7c
+rVCCs61jgYppWv3JHVKYmm6+cVPAUcuRdsUzDpAQDdvGAaZJENE6suulRVEaBEdS
5e5f7c
+8gM=
5e5f7c
+-----END CERTIFICATE-----
5e5f7c
+EOF
5e5f7c
+cat > $tmpdir/no_trailing_nl <<- EOF
5e5f7c
+-----BEGIN CERTIFICATE-----
5e5f7c
+MIIDjjCCAnagAwIBAgIRAO1VmyXYM0f7pbXVdEGtRPMwDQYJKoZIhvcNAQELBQAw
5e5f7c
+UDEgMB4GA1UEAwwXTG9jYWwgU2lnbmluZyBBdXRob3JpdHkxLDAqBgNVBAMMI2Vk
5e5f7c
+NTU5YjI1LWQ4MzM0N2ZiLWE1YjVkNTc0LTQxYWQ0NGYzMB4XDTE1MDQyODE3MDk0
5e5f7c
+OFoXDTE2MDQyODE3MDk0OFowUDEgMB4GA1UEAwwXTG9jYWwgU2lnbmluZyBBdXRo
5e5f7c
+b3JpdHkxLDAqBgNVBAMMI2VkNTU5YjI1LWQ4MzM0N2ZiLWE1YjVkNTc0LTQxYWQ0
5e5f7c
+NGYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5c/LhlyBs0UUiDSy
5e5f7c
+nrC+Q0WJkWZeQ/kqwniru+GlXgb3g+7VvyAfdZ45NiBdo/6xXyCLphK0g8oZLyi8
5e5f7c
+OwQQoUyVMn9gsGXbjlwSzjXKx3wdUM+lFpenx8iQS9aCfVQJ4tzFgM1pQBQ2AiHs
5e5f7c
+jvU18xSFSZApjT5UIK35kyH22D8LhCGGYLaU3xFEfHvd0AOuXwm5Nsiu/HTsSV4N
5e5f7c
+peUdFEmFzQwUEUdV2jKOPcXnOArV82vfpdp1nSCX3kruEb9G93VsmQ+9ebKXQRQE
5e5f7c
+Ltd65e/EYtXvihuTtElLYuyYZlYJdbTZeLXB4YLvElgNkS9JK7RKHlCm0KYQmcmd
5e5f7c
+GZSh8QIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQEBMB0GA1UdDgQWBBRLxeFy3+RS
5e5f7c
+FloygyjlXa6YEv8ltzAfBgNVHSMEGDAWgBRLxeFy3+RSFloygyjlXa6YEv8ltzAO
5e5f7c
+BgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggEBAH9A9ePIqZGF4VEo5D4j
5e5f7c
+MuOJ1J4uTRxHoEGXCDRcuCn3RvT0civWEPpRNo1YVgAWFODpt/HSi3lCVtTb7FwJ
5e5f7c
+hfHkxCpAuHmv3sfT8jcCwTTAXL1BLpCO6d0zz0RrFMNK+vGyZu/7LXhaYVu590Q5
5e5f7c
+1DMybHmln7i+Tw/eYb4Avk1FWGOEpNdf3ZjUazcDlkO4EwA6BnZUC8gFvz0OI73D
5e5f7c
+AJsGq/UsJvMH30ga1rZ/9LiHEMSEys5amk98yMRvi/R1qI02kjANdZ0ID/7cJSw2
5e5f7c
+rVCCs61jgYppWv3JHVKYmm6+cVPAUcuRdsUzDpAQDdvGAaZJENE6suulRVEaBEdS
5e5f7c
+8gM=
5e5f7c
+EOF
5e5f7c
+echo -n "-----END CERTIFICATE-----" >> $tmpdir/no_trailing_nl
5e5f7c
+
5e5f7c
+$toolsdir/fromfile trailing_nl
5e5f7c
+$toolsdir/fromfile no_trailing_nl
5e5f7c
diff --git a/tests/Makefile.am b/tests/Makefile.am
5e5f7c
index fe368dc..1552c48 100644
5e5f7c
--- a/tests/Makefile.am
5e5f7c
+++ b/tests/Makefile.am
5e5f7c
@@ -127,7 +127,9 @@ CLEANFILES = \
5e5f7c
 	037-rekey2/actual.out \
5e5f7c
 	037-rekey2/actual.err \
5e5f7c
 	038-ms-v2-template/actual.out \
5e5f7c
-	038-ms-v2-template/actual.err
5e5f7c
+	038-ms-v2-template/actual.err \
5e5f7c
+	039-fromfile/actual.out \
5e5f7c
+	039-fromfile/actual.err
5e5f7c
 EXTRA_DIST = \
5e5f7c
 	run-tests.sh functions certmonger.conf tools/cachain.sh \
5e5f7c
 	001-keyiread/run.sh \
5e5f7c
@@ -349,7 +351,8 @@ EXTRA_DIST = \
5e5f7c
 	037-rekey2/run.sh \
5e5f7c
 	038-ms-v2-template/expected.out \
5e5f7c
 	038-ms-v2-template/extract-extdata.py \
5e5f7c
-	038-ms-v2-template/run.sh
5e5f7c
+	038-ms-v2-template/run.sh \
5e5f7c
+	039-fromfile/run.sh
5e5f7c
 
5e5f7c
 subdirs = \
5e5f7c
 	001-keyiread \
5e5f7c
@@ -392,7 +395,8 @@ subdirs = \
5e5f7c
 	035-json \
5e5f7c
 	036-getcert \
5e5f7c
 	037-rekey2 \
5e5f7c
-	038-ms-v2-template
5e5f7c
+	038-ms-v2-template \
5e5f7c
+	039-fromfile
5e5f7c
 
5e5f7c
 if HAVE_DBM_NSSDB
5e5f7c
 subdirs += \
5e5f7c
diff --git a/tests/tools/Makefile.am b/tests/tools/Makefile.am
5e5f7c
index 39fa954..e0d2f08 100644
5e5f7c
--- a/tests/tools/Makefile.am
5e5f7c
+++ b/tests/tools/Makefile.am
5e5f7c
@@ -16,7 +16,7 @@ endif
5e5f7c
 noinst_PROGRAMS = keyiread keygen csrgen submit certread certsave oid2name \
5e5f7c
 		  name2oid iterate prefs dates listnicks pem2base base2pem \
5e5f7c
 		  dparse payload checksig base64 cadata citerate casave hooks \
5e5f7c
-		  libexecdir canon srv addcinfo ls json json-utf8 printenv
5e5f7c
+		  libexecdir canon srv addcinfo ls json json-utf8 printenv fromfile
5e5f7c
 noinst_LIBRARIES = libtools.a
5e5f7c
 if HAVE_OPENSSL
5e5f7c
 noinst_PROGRAMS += pk7parse pk7env scepgen pk7verify pk7decrypt
5e5f7c
@@ -38,3 +38,7 @@ citerate_LDADD = $(top_srcdir)/src/store-gen.c $(LDADD)
5e5f7c
 
5e5f7c
 srv_SOURCES = srv.c
5e5f7c
 srv_LDADD = $(top_srcdir)/src/srvloc.c $(LDADD)
5e5f7c
+
5e5f7c
+fromfile_CFLAGS = $(AM_CFLAGS) $(CURL_CFLAGS)
5e5f7c
+fromfile_SOURCES = fromfile.c
5e5f7c
+fromfile_LDADD = $(LDADD) $(UUID_LIBS) $(CURL_LIBS)
5e5f7c
diff --git a/tests/tools/fromfile.c b/tests/tools/fromfile.c
5e5f7c
new file mode 100644
5e5f7c
index 0000000..bb70507
5e5f7c
--- /dev/null
5e5f7c
+++ b/tests/tools/fromfile.c
5e5f7c
@@ -0,0 +1,52 @@
5e5f7c
+/*
5e5f7c
+ * Copyright (C) 2020 Red Hat, Inc.
5e5f7c
+ * 
5e5f7c
+ * This program is free software: you can redistribute it and/or modify
5e5f7c
+ * it under the terms of the GNU General Public License as published by
5e5f7c
+ * the Free Software Foundation, either version 3 of the License, or
5e5f7c
+ * (at your option) any later version.
5e5f7c
+ *
5e5f7c
+ * This program is distributed in the hope that it will be useful,
5e5f7c
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
5e5f7c
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5e5f7c
+ * GNU General Public License for more details.
5e5f7c
+ *
5e5f7c
+ * You should have received a copy of the GNU General Public License
5e5f7c
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
5e5f7c
+ */
5e5f7c
+
5e5f7c
+#include "../../src/config.h"
5e5f7c
+
5e5f7c
+#include <sys/types.h>
5e5f7c
+#include <errno.h>
5e5f7c
+#include <stdlib.h>
5e5f7c
+#include <stdio.h>
5e5f7c
+
5e5f7c
+#include <krb5.h>
5e5f7c
+
5e5f7c
+#include "../../src/submit-u.h"
5e5f7c
+#include "../../src/submit-u.c"
5e5f7c
+
5e5f7c
+int
5e5f7c
+main(int argc, char **argv)
5e5f7c
+{
5e5f7c
+	int i, result = 0;
5e5f7c
+	char *cert;
5e5f7c
+
5e5f7c
+	for (i = 1; i < argc; i++) {
5e5f7c
+		printf("[%s]\n", argv[i]);
5e5f7c
+		cert = cm_submit_u_from_file(argv[i]);
5e5f7c
+		if (cert == NULL) {
5e5f7c
+			printf("OOM error\n");
5e5f7c
+			result = 1;
5e5f7c
+		}
5e5f7c
+		else if (cert[strlen(cert) - 1] != '\n') {
5e5f7c
+			printf("Missing trailing newline\n");
5e5f7c
+			result = 1;
5e5f7c
+		} else {
5e5f7c
+			printf("Ok\n");
5e5f7c
+		}
5e5f7c
+		free(cert);
5e5f7c
+	}
5e5f7c
+	return result;
5e5f7c
+}
5e5f7c
-- 
5e5f7c
2.18.4
5e5f7c