Blame SOURCES/0018-show-which-db-we-re-checking.patch

793dd5
From 01b89fb7a191f4639a93c5a7c47a80752118ba95 Mon Sep 17 00:00:00 2001
793dd5
From: Peter Jones <pjones@redhat.com>
793dd5
Date: Tue, 25 Apr 2017 16:58:50 -0400
793dd5
Subject: [PATCH 18/29] show which db we're checking
793dd5
793dd5
---
793dd5
 src/certdb.c             | 35 ++++++++++++++++++++++++++++++++++-
793dd5
 src/pesigcheck_context.c |  2 ++
793dd5
 src/pesigcheck_context.h |  1 +
793dd5
 3 files changed, 37 insertions(+), 1 deletion(-)
793dd5
793dd5
diff --git a/src/certdb.c b/src/certdb.c
793dd5
index 1a4baf1..673e074 100644
793dd5
--- a/src/certdb.c
793dd5
+++ b/src/certdb.c
793dd5
@@ -18,6 +18,7 @@
793dd5
  */
793dd5
 
793dd5
 #include <fcntl.h>
793dd5
+#include <libgen.h>
793dd5
 #include <sys/mman.h>
793dd5
 #include <sys/types.h>
793dd5
 #include <sys/stat.h>
793dd5
@@ -42,17 +43,33 @@ add_db_file(pesigcheck_context *ctx, db_specifier which, const char *dbfile,
793dd5
 		return -1;
793dd5
 
793dd5
 	db->type = type;
793dd5
-
793dd5
 	db->fd = open(dbfile, O_RDONLY);
793dd5
 	if (db->fd < 0) {
793dd5
 		save_errno(free(db));
793dd5
 		return -1;
793dd5
 	}
793dd5
 
793dd5
+	char *path = strdup(dbfile);
793dd5
+	if (!path) {
793dd5
+		save_errno(close(db->fd);
793dd5
+			   free(db));
793dd5
+		return -1;
793dd5
+	}
793dd5
+
793dd5
+	db->path = basename(path);
793dd5
+	db->path = strdup(db->path);
793dd5
+	free(path);
793dd5
+	if (!db->path) {
793dd5
+		save_errno(close(db->fd);
793dd5
+			   free(db));
793dd5
+		return -1;
793dd5
+	}
793dd5
+
793dd5
 	struct stat sb;
793dd5
 	int rc = fstat(db->fd, &sb);
793dd5
 	if (rc < 0) {
793dd5
 		save_errno(close(db->fd);
793dd5
+			   free(db->path);
793dd5
 			   free(db));
793dd5
 		return -1;
793dd5
 	}
793dd5
@@ -65,6 +82,7 @@ add_db_file(pesigcheck_context *ctx, db_specifier which, const char *dbfile,
793dd5
 		rc = read_file(db->fd, (char **)&db->map, &sz);
793dd5
 		if (rc < 0) {
793dd5
 			save_errno(close(db->fd);
793dd5
+				   free(db->path);
793dd5
 				   free(db));
793dd5
 			return -1;
793dd5
 		}
793dd5
@@ -133,6 +151,7 @@ add_cert_file(pesigcheck_context *ctx, const char *filename)
793dd5
 #define DB_PATH "/sys/firmware/efi/efivars/db-d719b2cb-3d3a-4596-a3bc-dad00e67656f"
793dd5
 #define MOK_PATH "/sys/firmware/efi/efivars/MokListRT-605dab50-e046-4300-abb6-3dd810dd8b23"
793dd5
 #define DBX_PATH "/sys/firmware/efi/efivars/dbx-d719b2cb-3d3a-4596-a3bc-dad00e67656f"
793dd5
+#define MOKX_PATH "/sys/firmware/efi/efivars/MokListXRT-605dab50-e046-4300-abb6-3dd810dd8b23"
793dd5
 
793dd5
 void
793dd5
 init_cert_db(pesigcheck_context *ctx, int use_system_dbs)
793dd5
@@ -167,6 +186,18 @@ init_cert_db(pesigcheck_context *ctx, int use_system_dbs)
793dd5
 			"database \"%s\": %m\n", DBX_PATH);
793dd5
 		exit(1);
793dd5
 	}
793dd5
+
793dd5
+	rc = add_db_file(ctx, DBX, MOKX_PATH, DB_EFIVAR);
793dd5
+	if (rc < 0 && errno != ENOENT) {
793dd5
+		fprintf(stderr, "pesigcheck: Could not add key database "
793dd5
+			"\"%s\": %m\n", MOKX_PATH);
793dd5
+		exit(1);
793dd5
+	}
793dd5
+
793dd5
+	if (ctx->dbx == NULL) {
793dd5
+		fprintf(stderr, "pesigcheck: warning: "
793dd5
+			"No key recovation database available\n");
793dd5
+	}
793dd5
 }
793dd5
 
793dd5
 typedef db_status (*checkfn)(pesigcheck_context *ctx, SECItem *sig,
793dd5
@@ -187,6 +218,8 @@ check_db(db_specifier which, pesigcheck_context *ctx, checkfn check,
793dd5
 	sig.type = siBuffer;
793dd5
 
793dd5
 	while (dbl) {
793dd5
+		printf("Searching %s %s\n", which == DB ? "db" : "dbx",
793dd5
+		       dbl->path);
793dd5
 		EFI_SIGNATURE_LIST *certlist;
793dd5
 		EFI_SIGNATURE_DATA *cert;
793dd5
 		size_t dbsize = dbl->datalen;
793dd5
diff --git a/src/pesigcheck_context.c b/src/pesigcheck_context.c
793dd5
index b934cbe..5a355b1 100644
793dd5
--- a/src/pesigcheck_context.c
793dd5
+++ b/src/pesigcheck_context.c
793dd5
@@ -87,6 +87,7 @@ pesigcheck_context_fini(pesigcheck_context *ctx)
793dd5
 		munmap(db->map, db->size);
793dd5
 		close(db->fd);
793dd5
 		ctx->db = db->next;
793dd5
+		free(db->path);
793dd5
 		free(db);
793dd5
 	}
793dd5
 	while (ctx->dbx) {
793dd5
@@ -95,6 +96,7 @@ pesigcheck_context_fini(pesigcheck_context *ctx)
793dd5
 		if (db->type == DB_CERT)
793dd5
 			free(db->data);
793dd5
 		munmap(db->map, db->size);
793dd5
+		free(db->path);
793dd5
 		close(db->fd);
793dd5
 		ctx->dbx = db->next;
793dd5
 		free(db);
793dd5
diff --git a/src/pesigcheck_context.h b/src/pesigcheck_context.h
793dd5
index 1b916e3..7b5cc89 100644
793dd5
--- a/src/pesigcheck_context.h
793dd5
+++ b/src/pesigcheck_context.h
793dd5
@@ -34,6 +34,7 @@ typedef enum {
793dd5
 
793dd5
 struct dblist {
793dd5
 	db_f_type type;
793dd5
+	char *path;
793dd5
 	int fd;
793dd5
 	struct dblist *next;
793dd5
 	size_t size;
793dd5
-- 
793dd5
2.13.4
793dd5