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