Blame SOURCES/0006-Display-not_before-in-getcert-output.patch

2c4167
From 84d575da7516cae1ee94099317cf0f8fae2c7ea1 Mon Sep 17 00:00:00 2001
2c4167
From: Rob Crittenden <rcritten@redhat.com>
2c4167
Date: Thu, 8 Apr 2021 14:07:22 -0400
2c4167
Subject: [PATCH] Display not_before in getcert output
2c4167
2c4167
Including not_before can help with troubleshooting
2c4167
renewal problems and if time needs to be reversed
2c4167
helping identify the maximum one can go back.
2c4167
2c4167
https://bugzilla.redhat.com/show_bug.cgi?id=1940261
2c4167
2c4167
Signed-off-by: Rob Crittenden <rcritten@redhat.com>
2c4167
---
2c4167
 src/getcert.c               |  21 ++++-
2c4167
 src/tdbush.c                |  10 ++-
2c4167
 src/tdbusm-check.c          |  32 ++++++++
2c4167
 src/tdbusm.c                | 150 ++++++++++++++++++++++++++++++++++++
2c4167
 src/tdbusm.h                |   9 +++
2c4167
 tests/028-dbus/expected.out |   4 +-
2c4167
 tests/028-dbus/run.sh       |   1 +
2c4167
 7 files changed, 220 insertions(+), 7 deletions(-)
2c4167
2c4167
diff --git a/src/getcert.c b/src/getcert.c
2c4167
index 078f5aa1..4afafcb1 100644
2c4167
--- a/src/getcert.c
2c4167
+++ b/src/getcert.c
2c4167
@@ -3389,7 +3389,7 @@ list(const char *argv0, int argc, const char **argv)
2c4167
 	const char *capath, *request;
2c4167
 	dbus_bool_t b;
2c4167
 	char *s1, *s2, *s3, *s4, *s5, *s6;
2c4167
-	long n1, n2;
2c4167
+	long n1, n2, n3;
2c4167
 	char **as, **as1, **as2, **as3, **as4, **as5, t[25];
2c4167
 	int requests_only = 0, tracking_only = 0, verbose = 0, c, i, j;
2c4167
 	unsigned int k;
2c4167
@@ -3754,10 +3754,10 @@ list(const char *argv0, int argc, const char **argv)
2c4167
 		/* Information from the certificate. */
2c4167
 		rep = query_rep(bus, requests[i], CM_DBUS_REQUEST_INTERFACE,
2c4167
 				"get_cert_info", verbose);
2c4167
-		if (cm_tdbusm_get_sssnasasasnas(rep, globals.tctx,
2c4167
+		if (cm_tdbusm_get_sssnasasasnasn(rep, globals.tctx,
2c4167
 						&s1, &s2, &s3, &n1,
2c4167
 						&as1, &as2, &as3,
2c4167
-						&n2, &as4) != 0) {
2c4167
+						&n2, &as4, &n3) != 0) {
2c4167
 			printf(_("Error parsing server response.\n"));
2c4167
 			exit(1);
2c4167
 		}
2c4167
@@ -3768,6 +3768,21 @@ list(const char *argv0, int argc, const char **argv)
2c4167
 		printf(_("\tissuer: %s\n"), s1);
2c4167
 		printf(_("\tsubject: %s\n"), s3);
2c4167
 		when = _("unknown");
2c4167
+		if (n3 != 0) {
2c4167
+			if (force_utc) {
2c4167
+				when = cm_store_timestamp_from_time_for_display(n3, t);
2c4167
+				printf(_("\tissued: %s\n"), when);
2c4167
+			} else {
2c4167
+				when = cm_store_local_timestamp_from_time_for_display(n3);
2c4167
+				if (when != NULL) {
2c4167
+					printf(_("\tissued: %s\n"), when);
2c4167
+					free(when);
2c4167
+				}
2c4167
+			}
2c4167
+		} else {
2c4167
+			printf(_("\tissued: %s\n"), when);
2c4167
+		}
2c4167
+		when = _("unknown");
2c4167
 		if (n1 != 0) {
2c4167
 			if (force_utc) {
2c4167
 				when = cm_store_timestamp_from_time_for_display(n1, t);
2c4167
diff --git a/src/tdbush.c b/src/tdbush.c
2c4167
index 3587f84f..6fc1b4be 100644
2c4167
--- a/src/tdbush.c
2c4167
+++ b/src/tdbush.c
2c4167
@@ -2701,7 +2701,7 @@ request_get_cert_info(DBusConnection *conn, DBusMessage *msg,
2c4167
 	rep = dbus_message_new_method_return(msg);
2c4167
 	if (rep != NULL) {
2c4167
 		eku = eku_splitv(entry, entry->cm_cert_eku);
2c4167
-		cm_tdbusm_set_sssnasasasnas(rep,
2c4167
+		cm_tdbusm_set_sssnasasasnasn(rep,
2c4167
 					    entry->cm_cert_issuer,
2c4167
 					    entry->cm_cert_serial,
2c4167
 					    entry->cm_cert_subject,
2c4167
@@ -2710,7 +2710,8 @@ request_get_cert_info(DBusConnection *conn, DBusMessage *msg,
2c4167
 					    (const char **) entry->cm_cert_hostname,
2c4167
 					    (const char **) entry->cm_cert_principal,
2c4167
 					    ku_from_string(entry->cm_cert_ku),
2c4167
-					    (const char **) eku);
2c4167
+					    (const char **) eku,
2c4167
+					    entry->cm_cert_not_before);
2c4167
 		dbus_connection_send(conn, rep, NULL);
2c4167
 		dbus_message_unref(rep);
2c4167
 		talloc_free(eku);
2c4167
@@ -6563,7 +6564,10 @@ cm_tdbush_iface_request(void)
2c4167
 										     DBUS_TYPE_ARRAY_AS_STRING
2c4167
 										     DBUS_TYPE_STRING_AS_STRING,
2c4167
 										     cm_tdbush_method_arg_out,
2c4167
-										     NULL))))))))),
2c4167
+								     make_method_arg("not_before",
2c4167
+										     DBUS_TYPE_INT64_AS_STRING,
2c4167
+										     cm_tdbush_method_arg_out,
2c4167
+										     NULL)))))))))),
2c4167
 								     NULL),
2c4167
 				     make_interface_item(cm_tdbush_interface_property,
2c4167
 							 make_property(CM_DBUS_PROP_CERT_ISSUER,
2c4167
diff --git a/src/tdbusm-check.c b/src/tdbusm-check.c
2c4167
index 385b1849..31880732 100644
2c4167
--- a/src/tdbusm-check.c
2c4167
+++ b/src/tdbusm-check.c
2c4167
@@ -539,6 +539,38 @@ get_sssnasasasnas(DBusMessage *rep, int msgid)
2c4167
 	return ret;
2c4167
 }
2c4167
 static int
2c4167
+get_sssnasasasnasn(DBusMessage *rep, int msgid)
2c4167
+{
2c4167
+	int ret, i;
2c4167
+	long n1, n2, n3;
2c4167
+	char *s1, *s2, *s3, **as1, **as2, **as3, **as4;
2c4167
+
2c4167
+	ret = cm_tdbusm_get_sssnasasasnasn(rep, NULL,
2c4167
+					  &s1, &s2, &s3, &n1,
2c4167
+					  &as1, &as2, &as3, &n2, &as4, &n3;;
2c4167
+	if (ret == 0) {
2c4167
+		printf("Message %d - s:%s,s:%s,s:%s," "n:%ld,[",
2c4167
+		       msgid, s1, s2, s3, n1);
2c4167
+		for (i = 0; (as1 != NULL) && (as1[i] != NULL); i++) {
2c4167
+			printf("%ss:%s", i > 0 ? "," : "", as1[i]);
2c4167
+		}
2c4167
+		printf("],[");
2c4167
+		for (i = 0; (as2 != NULL) && (as2[i] != NULL); i++) {
2c4167
+			printf("%ss:%s", i > 0 ? "," : "", as2[i]);
2c4167
+		}
2c4167
+		printf("],[");
2c4167
+		for (i = 0; (as3 != NULL) && (as3[i] != NULL); i++) {
2c4167
+			printf("%ss:%s", i > 0 ? "," : "", as3[i]);
2c4167
+		}
2c4167
+		printf("],n:%ld,n:%ld,[", n2, n3);
2c4167
+		for (i = 0; (as4 != NULL) && (as4[i] != NULL); i++) {
2c4167
+			printf("%ss:%s", i > 0 ? "," : "", as4[i]);
2c4167
+		}
2c4167
+		printf("]\n");
2c4167
+	}
2c4167
+	return ret;
2c4167
+}
2c4167
+static int
2c4167
 get_sasasasnas(DBusMessage *rep, int msgid)
2c4167
 {
2c4167
 	int ret, i;
2c4167
diff --git a/src/tdbusm.c b/src/tdbusm.c
2c4167
index bc39e1d4..24e03e4c 100644
2c4167
--- a/src/tdbusm.c
2c4167
+++ b/src/tdbusm.c
2c4167
@@ -935,6 +935,105 @@ cm_tdbusm_get_sssnasasasnas(DBusMessage *msg, void *parent,
2c4167
 	return 0;
2c4167
 }
2c4167
 
2c4167
+int
2c4167
+cm_tdbusm_get_sssnasasasnasn(DBusMessage *msg, void *parent,
2c4167
+			    char **s1, char **s2, char **s3, long *n1,
2c4167
+			    char ***as1, char ***as2, char ***as3,
2c4167
+			    long *n2, char ***as4, long *n3)
2c4167
+{
2c4167
+	DBusError err;
2c4167
+	char **tmp1, **tmp2, **tmp3, **tmp4;
2c4167
+	int64_t i641, i642, i643;
2c4167
+	int32_t i321, i322, i323;
2c4167
+	int16_t i161, i162, i163;
2c4167
+	int i, j, k, l;
2c4167
+	*s1 = NULL;
2c4167
+	*s2 = NULL;
2c4167
+	*s3 = NULL;
2c4167
+	*as1 = NULL;
2c4167
+	*as2 = NULL;
2c4167
+	*as3 = NULL;
2c4167
+	*as4 = NULL;
2c4167
+	dbus_error_init(&err;;
2c4167
+	if (!dbus_message_get_args(msg, &err,
2c4167
+				   DBUS_TYPE_STRING, s1,
2c4167
+				   DBUS_TYPE_STRING, s2,
2c4167
+				   DBUS_TYPE_STRING, s3,
2c4167
+				   DBUS_TYPE_INT64, &i641,
2c4167
+				   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &tmp1, &i,
2c4167
+				   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &tmp2, &j,
2c4167
+				   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &tmp3, &k,
2c4167
+				   DBUS_TYPE_INT64, &i642,
2c4167
+				   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &tmp4, &l,
2c4167
+				   DBUS_TYPE_INT64, &i643,
2c4167
+				   DBUS_TYPE_INVALID)) {
2c4167
+		if (dbus_error_is_set(&err)) {
2c4167
+			dbus_error_free(&err;;
2c4167
+			dbus_error_init(&err;;
2c4167
+		}
2c4167
+		if (!dbus_message_get_args(msg, &err,
2c4167
+					   DBUS_TYPE_STRING, s1,
2c4167
+					   DBUS_TYPE_STRING, s2,
2c4167
+					   DBUS_TYPE_STRING, s3,
2c4167
+					   DBUS_TYPE_INT32, &i321,
2c4167
+					   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+					   &tmp1, &i,
2c4167
+					   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+					   &tmp2, &j,
2c4167
+					   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+					   &tmp3, &k,
2c4167
+					   DBUS_TYPE_INT32, &i322,
2c4167
+					   DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+					   &tmp4, &l,
2c4167
+					   DBUS_TYPE_INT32, &i323,
2c4167
+					   DBUS_TYPE_INVALID)) {
2c4167
+			if (dbus_error_is_set(&err)) {
2c4167
+				dbus_error_free(&err;;
2c4167
+				dbus_error_init(&err;;
2c4167
+			}
2c4167
+			if (!dbus_message_get_args(msg, &err,
2c4167
+						   DBUS_TYPE_STRING, s1,
2c4167
+						   DBUS_TYPE_STRING, s2,
2c4167
+						   DBUS_TYPE_STRING, s3,
2c4167
+						   DBUS_TYPE_INT16, &i161,
2c4167
+						   DBUS_TYPE_ARRAY,
2c4167
+						   DBUS_TYPE_STRING, &tmp1, &i,
2c4167
+						   DBUS_TYPE_ARRAY,
2c4167
+						   DBUS_TYPE_STRING, &tmp2, &j,
2c4167
+						   DBUS_TYPE_ARRAY,
2c4167
+						   DBUS_TYPE_STRING, &tmp3, &k,
2c4167
+						   DBUS_TYPE_INT16, &i162,
2c4167
+						   DBUS_TYPE_ARRAY,
2c4167
+						   DBUS_TYPE_STRING, &tmp4, &l,
2c4167
+						   DBUS_TYPE_INT16, &i163,
2c4167
+						   DBUS_TYPE_INVALID)) {
2c4167
+				if (dbus_error_is_set(&err)) {
2c4167
+					dbus_error_free(&err;;
2c4167
+					dbus_error_init(&err;;
2c4167
+				}
2c4167
+				return -1;
2c4167
+			}
2c4167
+			i321 = i161;
2c4167
+			i322 = i162;
2c4167
+			i323 = i163;
2c4167
+		}
2c4167
+		i641 = i321;
2c4167
+		i642 = i322;
2c4167
+		i643 = i323;
2c4167
+	}
2c4167
+	*s1 = *s1 ? talloc_strdup(parent, *s1) : NULL;
2c4167
+	*s2 = *s2 ? talloc_strdup(parent, *s2) : NULL;
2c4167
+	*s3 = *s3 ? talloc_strdup(parent, *s3) : NULL;
2c4167
+	*n1 = i641;
2c4167
+	*n2 = i642;
2c4167
+	*n3 = i643;
2c4167
+	*as1 = cm_tdbusm_take_dbus_string_array(parent, tmp1, i);
2c4167
+	*as2 = cm_tdbusm_take_dbus_string_array(parent, tmp2, j);
2c4167
+	*as3 = cm_tdbusm_take_dbus_string_array(parent, tmp3, k);
2c4167
+	*as4 = cm_tdbusm_take_dbus_string_array(parent, tmp4, l);
2c4167
+	return 0;
2c4167
+}
2c4167
+
2c4167
 int
2c4167
 cm_tdbusm_get_sasasasnas(DBusMessage *msg, void *parent, char **s,
2c4167
 			 char ***as1, char ***as2, char ***as3,
2c4167
@@ -1856,6 +1955,57 @@ cm_tdbusm_set_sssnasasasnas(DBusMessage *msg,
2c4167
 	}
2c4167
 }
2c4167
 
2c4167
+int
2c4167
+cm_tdbusm_set_sssnasasasnasn(DBusMessage *msg,
2c4167
+			    const char *s1, const char *s2, const char *s3,
2c4167
+			    long n1, const char **as1, const char **as2,
2c4167
+			    const char **as3, long n2, const char **as4,
2c4167
+			    long n3)
2c4167
+{
2c4167
+	int64_t i1 = n1, i2 = n2, i3 = n3;
2c4167
+	if (s1 == NULL) {
2c4167
+		s1 = empty_string;
2c4167
+	}
2c4167
+	if (s2 == NULL) {
2c4167
+		s2 = empty_string;
2c4167
+	}
2c4167
+	if (s3 == NULL) {
2c4167
+		s3 = empty_string;
2c4167
+	}
2c4167
+	if (as1 == NULL) {
2c4167
+		as1 = empty_string_array;
2c4167
+	}
2c4167
+	if (as2 == NULL) {
2c4167
+		as2 = empty_string_array;
2c4167
+	}
2c4167
+	if (as3 == NULL) {
2c4167
+		as3 = empty_string_array;
2c4167
+	}
2c4167
+	if (as4 == NULL) {
2c4167
+		as4 = empty_string_array;
2c4167
+	}
2c4167
+	if (dbus_message_append_args(msg,
2c4167
+				     DBUS_TYPE_STRING, &s1,
2c4167
+				     DBUS_TYPE_STRING, &s2,
2c4167
+				     DBUS_TYPE_STRING, &s3,
2c4167
+				     DBUS_TYPE_INT64, &i1,
2c4167
+				     DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+				     &as1, cm_tdbusm_array_length(as1),
2c4167
+				     DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+				     &as2, cm_tdbusm_array_length(as2),
2c4167
+				     DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+				     &as3, cm_tdbusm_array_length(as3),
2c4167
+				     DBUS_TYPE_INT64, &i2,
2c4167
+				     DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
2c4167
+				     &as4, cm_tdbusm_array_length(as4),
2c4167
+				     DBUS_TYPE_INT64, &i3,
2c4167
+				     DBUS_TYPE_INVALID)) {
2c4167
+		return 0;
2c4167
+	} else {
2c4167
+		return -1;
2c4167
+	}
2c4167
+}
2c4167
+
2c4167
 int
2c4167
 cm_tdbusm_set_sasasasnas(DBusMessage *msg, const char *s,
2c4167
 			 const char **as1, const char **as2,
2c4167
diff --git a/src/tdbusm.h b/src/tdbusm.h
2c4167
index fe021eff..250a9b0a 100644
2c4167
--- a/src/tdbusm.h
2c4167
+++ b/src/tdbusm.h
2c4167
@@ -55,6 +55,10 @@ int cm_tdbusm_get_sssnasasasnas(DBusMessage *msg, void *parent,
2c4167
 			        char **s1, char **s2, char **s3, long *n1,
2c4167
 			        char ***as1, char ***as2,
2c4167
 			        char ***as3, long *n2, char ***as4);
2c4167
+int cm_tdbusm_get_sssnasasasnasn(DBusMessage *msg, void *parent,
2c4167
+			        char **s1, char **s2, char **s3, long *n1,
2c4167
+			        char ***as1, char ***as2,
2c4167
+			        char ***as3, long *n2, char ***as4, long *n3);
2c4167
 int cm_tdbusm_get_sasasasnas(DBusMessage *msg, void *parent,
2c4167
 			     char **s,
2c4167
 			     char ***as1, char ***as2,
2c4167
@@ -124,6 +128,11 @@ int cm_tdbusm_set_sssnasasasnas(DBusMessage *msg,
2c4167
 			        const char *s3, long n1,
2c4167
 			        const char **as1, const char **as2,
2c4167
 			        const char **as3, long n2, const char **as4);
2c4167
+int cm_tdbusm_set_sssnasasasnasn(DBusMessage *msg,
2c4167
+			        const char *s1, const char *s2,
2c4167
+			        const char *s3, long n1,
2c4167
+			        const char **as1, const char **as2,
2c4167
+			        const char **as3, long n2, const char **as4, long n3);
2c4167
 int cm_tdbusm_set_sasasasnas(DBusMessage *msg,
2c4167
 			     const char *s,
2c4167
 			     const char **as1, const char **as2,
2c4167
diff --git a/tests/028-dbus/expected.out b/tests/028-dbus/expected.out
2c4167
index ca7de34f..4cecbe15 100644
2c4167
--- a/tests/028-dbus/expected.out
2c4167
+++ b/tests/028-dbus/expected.out
2c4167
@@ -11,6 +11,7 @@ Request ID 'Buddy':
2c4167
 	CA: local
2c4167
 	issuer: CN=$UUID,CN=Local Signing Authority
2c4167
 	subject: CN=localhost
2c4167
+	issued: sometime
2c4167
 	expires: sometime
2c4167
 	dns: localhost
2c4167
 	principal name: host/localhost@LOCALHOST
2c4167
@@ -269,6 +270,7 @@ OK
2c4167
    <arg name="principal_names" type="as" direction="out"/>
2c4167
    <arg name="key_usage" type="x" direction="out"/>
2c4167
    <arg name="extended_key_usage" type="as" direction="out"/>
2c4167
+   <arg name="not_before" type="x" direction="out"/>
2c4167
   </method>
2c4167
   <property name="issuer" type="s" access="read"/>
2c4167
   <property name="serial" type="s" access="read"/>
2c4167
@@ -430,7 +432,7 @@ Buddy
2c4167
 
2c4167
 
2c4167
 [ /org/fedorahosted/certmonger/requests/Request2: org.fedorahosted.certmonger.request.get_cert_info ]
2c4167
-(dbus.String('CN=$UUID,CN=Local Signing Authority'), dbus.String('$UUID'), dbus.String('CN=localhost'), dbus.Int64(tomorrow), dbus.Array([], signature=dbus.Signature('s')), dbus.Array([dbus.String('localhost')], signature=dbus.Signature('s')), dbus.Array([dbus.String('host/localhost@LOCALHOST')], signature=dbus.Signature('s')), dbus.Int64(9), dbus.Array([dbus.String('1.3.6.1.5.5.7.3.1')], signature=dbus.Signature('s')))
2c4167
+(dbus.String('CN=$UUID,CN=Local Signing Authority'), dbus.String('$UUID'), dbus.String('CN=localhost'), dbus.Int64(tomorrow), dbus.Array([], signature=dbus.Signature('s')), dbus.Array([dbus.String('localhost')], signature=dbus.Signature('s')), dbus.Array([dbus.String('host/localhost@LOCALHOST')], signature=dbus.Signature('s')), dbus.Int64(9), dbus.Array([dbus.String('1.3.6.1.5.5.7.3.1')], signature=dbus.Signature('s')), dbus.Int64(recently))
2c4167
 
2c4167
 [ /org/fedorahosted/certmonger/requests/Request2: org.fedorahosted.certmonger.request.get_cert_last_checked ]
2c4167
 recently
2c4167
diff --git a/tests/028-dbus/run.sh b/tests/028-dbus/run.sh
2c4167
index d0be6ad8..a457834f 100755
2c4167
--- a/tests/028-dbus/run.sh
2c4167
+++ b/tests/028-dbus/run.sh
2c4167
@@ -42,5 +42,6 @@ sed -r -e 's,CN=........-........-........-........,CN=$UUID,g' \
2c4167
        -e '/^-----BEGIN/,/^-----END/d' \
2c4167
        -e "s|$libexecdir|\$libexecdir|g" \
2c4167
        -e "s|$tmpdir|\$tmpdir|g" \
2c4167
+       -e "s|issued:.*|issued: sometime|g" \
2c4167
        -e "s|expires:.*|expires: sometime|g" \
2c4167
        -e "s|'(00)?[0-9a-fA-F]{32}|'"'$UUID|g' \
2c4167
-- 
2c4167
2.31.1
2c4167