Blame SOURCES/0005-Add-utility-function-to-get-the-internal-token-name.patch

d4b2f2
From f396b19b2c222fa0a50e9bb9704059af4578e678 Mon Sep 17 00:00:00 2001
d4b2f2
From: Rob Crittenden <rcritten@redhat.com>
d4b2f2
Date: Fri, 31 Aug 2018 12:08:35 -0400
d4b2f2
Subject: [PATCH 3/7] Add utility function to get the internal token name
d4b2f2
d4b2f2
The NSS internal token is the default if no token is specified for
d4b2f2
the cert or the key.
d4b2f2
---
d4b2f2
 src/certread-n.c | 6 +++++-
d4b2f2
 src/certsave-n.c | 3 +++
d4b2f2
 src/keygen-n.c   | 3 +++
d4b2f2
 src/keyiread-n.c | 3 +++
d4b2f2
 src/submit-n.c   | 5 ++++-
d4b2f2
 src/util-n.c     | 6 ++++++
d4b2f2
 src/util-n.h     | 1 +
d4b2f2
 7 files changed, 25 insertions(+), 2 deletions(-)
d4b2f2
d4b2f2
diff --git a/src/certread-n.c b/src/certread-n.c
d4b2f2
index 57a38dcf..1d9217c6 100644
d4b2f2
--- a/src/certread-n.c
d4b2f2
+++ b/src/certread-n.c
d4b2f2
@@ -190,6 +190,9 @@ cm_certread_n_main(int fd, struct cm_store_ca *ca, struct cm_store_entry *entry,
d4b2f2
 		cm_log(1, "Error reading PIN for cert db.\n");
d4b2f2
 		_exit(CM_SUB_STATUS_ERROR_AUTH);
d4b2f2
 	}
d4b2f2
+	if (entry->cm_cert_token == NULL) {
d4b2f2
+		entry->cm_cert_token = util_internal_token_name();
d4b2f2
+	}
d4b2f2
 	PK11_SetPasswordFunc(&cm_pin_read_for_cert_nss_cb);
d4b2f2
 	for (sle = slotlist->head;
d4b2f2
 	     ((sle != NULL) && (sle->slot != NULL));
d4b2f2
@@ -253,7 +256,8 @@ cm_certread_n_main(int fd, struct cm_store_ca *ca, struct cm_store_entry *entry,
d4b2f2
 			}
d4b2f2
 			error = PK11_Authenticate(sle->slot, PR_TRUE, &cb_data);
d4b2f2
 			if (error != SECSuccess) {
d4b2f2
-				cm_log(1, "Error authenticating to cert db.\n");
d4b2f2
+				cm_log(1, "certread-n: Error authenticating to cert db "
d4b2f2
+					   "slot %s.\n", PK11_GetTokenName(sle->slot));
d4b2f2
 				goto next_slot;
d4b2f2
 			}
d4b2f2
 			if ((pin != NULL) &&
d4b2f2
diff --git a/src/certsave-n.c b/src/certsave-n.c
d4b2f2
index af176ce5..193309c5 100644
d4b2f2
--- a/src/certsave-n.c
d4b2f2
+++ b/src/certsave-n.c
d4b2f2
@@ -214,6 +214,9 @@ cm_certsave_n_main(int fd, struct cm_store_ca *ca, struct cm_store_entry *entry,
d4b2f2
 			_exit(CM_SUB_STATUS_ERROR_AUTH);
d4b2f2
 		}
d4b2f2
 		PK11_SetPasswordFunc(&cm_pin_read_for_cert_nss_cb);
d4b2f2
+		if (entry->cm_cert_token == NULL) {
d4b2f2
+			entry->cm_cert_token = util_internal_token_name();
d4b2f2
+		}
d4b2f2
 		for (sle = slotlist->head;
d4b2f2
 		     ((sle != NULL) && (sle->slot != NULL));
d4b2f2
 		     sle = sle->next)
d4b2f2
diff --git a/src/keygen-n.c b/src/keygen-n.c
d4b2f2
index 84b0bbd3..f7fdf6c0 100644
d4b2f2
--- a/src/keygen-n.c
d4b2f2
+++ b/src/keygen-n.c
d4b2f2
@@ -272,6 +272,9 @@ cm_keygen_n_main(int fd, struct cm_store_ca *ca, struct cm_store_entry *entry,
d4b2f2
 		cm_log(1, "Error locating token for key generation.\n");
d4b2f2
 		_exit(CM_SUB_STATUS_ERROR_NO_TOKEN);
d4b2f2
 	}
d4b2f2
+	if (entry->cm_cert_token == NULL) {
d4b2f2
+		entry->cm_cert_token = util_internal_token_name();
d4b2f2
+	}
d4b2f2
 	/* Walk the list looking for the requested slot, or the first one if
d4b2f2
 	 * none was requested. */
d4b2f2
 	slot = NULL;
d4b2f2
diff --git a/src/keyiread-n.c b/src/keyiread-n.c
d4b2f2
index 89913aa2..b8408bf1 100644
d4b2f2
--- a/src/keyiread-n.c
d4b2f2
+++ b/src/keyiread-n.c
d4b2f2
@@ -152,6 +152,9 @@ cm_keyiread_n_get_keys(struct cm_store_entry *entry, int readwrite)
d4b2f2
 		_exit(CM_SUB_STATUS_ERROR_AUTH);
d4b2f2
 	}
d4b2f2
 	PK11_SetPasswordFunc(&cm_pin_read_for_cert_nss_cb);
d4b2f2
+	if (entry->cm_key_token == NULL) {
d4b2f2
+		entry->cm_key_token = util_internal_token_name();
d4b2f2
+	}
d4b2f2
 	n_tokens = 0;
d4b2f2
 	pubkey = NULL;
d4b2f2
 	/* In practice, the internal slot is either a non-storage slot (in
d4b2f2
diff --git a/src/submit-n.c b/src/submit-n.c
d4b2f2
index 872153ea..da07d253 100644
d4b2f2
--- a/src/submit-n.c
d4b2f2
+++ b/src/submit-n.c
d4b2f2
@@ -346,6 +346,9 @@ cm_submit_n_decrypt_envelope(const unsigned char *envelope,
d4b2f2
 		cm_log(1, "Error reading PIN for key storage.\n");
d4b2f2
 		goto done;
d4b2f2
 	}
d4b2f2
+	if (args->entry->cm_key_token == NULL) {
d4b2f2
+		args->entry->cm_key_token = util_internal_token_name();
d4b2f2
+	}
d4b2f2
 	PK11_SetPasswordFunc(&cm_pin_read_for_cert_nss_cb);
d4b2f2
 	n_tokens = 0;
d4b2f2
 	/* In practice, the internal slot is either a non-storage slot (in
d4b2f2
@@ -402,7 +405,7 @@ cm_submit_n_decrypt_envelope(const unsigned char *envelope,
d4b2f2
 		}
d4b2f2
 		error = PK11_Authenticate(slot, PR_TRUE, &cb_data);
d4b2f2
 		if (error != SECSuccess) {
d4b2f2
-			cm_log(1, "Error authenticating to token "
d4b2f2
+			cm_log(1, "submit-n: Error authenticating to token "
d4b2f2
 			       "\"%s\".\n", token);
d4b2f2
 			goto done;
d4b2f2
 		}
d4b2f2
diff --git a/src/util-n.c b/src/util-n.c
d4b2f2
index 7805e58e..293e2583 100644
d4b2f2
--- a/src/util-n.c
d4b2f2
+++ b/src/util-n.c
d4b2f2
@@ -287,3 +287,9 @@ util_set_db_entry_cert_owner(const char *dbdir, struct cm_store_entry *entry)
d4b2f2
 	util_set_db_owner_perms(dbdir, secmoddb, entry->cm_cert_owner,
d4b2f2
 				entry->cm_cert_perms);
d4b2f2
 }
d4b2f2
+
d4b2f2
+char *
d4b2f2
+util_internal_token_name()
d4b2f2
+{
d4b2f2
+	return strdup(PK11_GetTokenName(PK11_GetInternalKeySlot()));
d4b2f2
+}
d4b2f2
diff --git a/src/util-n.h b/src/util-n.h
d4b2f2
index 8a918d5c..637fd4b1 100644
d4b2f2
--- a/src/util-n.h
d4b2f2
+++ b/src/util-n.h
d4b2f2
@@ -29,5 +29,6 @@ void util_set_db_entry_key_owner(const char *dbdir,
d4b2f2
 				 struct cm_store_entry *entry);
d4b2f2
 void util_set_db_entry_cert_owner(const char *dbdir,
d4b2f2
 				  struct cm_store_entry *entry);
d4b2f2
+char * util_internal_token_name();
d4b2f2
 
d4b2f2
 #endif
d4b2f2
-- 
d4b2f2
2.14.4
d4b2f2