Blame SOURCES/opencryptoki-3.15.1-error_message_handling_for_p11sak_remove-key_command.patch

c7a3b7
diff -up opencryptoki-3.15.1/usr/sbin/p11sak/p11sak.c.orig opencryptoki-3.15.1/usr/sbin/p11sak/p11sak.c
c7a3b7
--- opencryptoki-3.15.1/usr/sbin/p11sak/p11sak.c.orig	2020-11-26 13:25:41.679655774 +0100
c7a3b7
+++ opencryptoki-3.15.1/usr/sbin/p11sak/p11sak.c	2020-11-26 13:26:00.170892352 +0100
c7a3b7
@@ -2192,10 +2192,8 @@ static CK_RV confirm_destroy(char **user
c7a3b7
     while (1){
c7a3b7
         nread = getline(user_input, &buflen, stdin);
c7a3b7
         if (nread == -1) {
c7a3b7
-            printf("User input failed (error code 0x%lX: %s)\n",
c7a3b7
-                    rc, p11_get_ckr(rc));
c7a3b7
-            rc = -1;
c7a3b7
-            return rc;
c7a3b7
+            printf("User input: EOF\n");
c7a3b7
+            return CKR_CANCEL;
c7a3b7
         }
c7a3b7
 
c7a3b7
         if (user_input_ok(*user_input)) {
c7a3b7
@@ -2210,17 +2208,16 @@ static CK_RV confirm_destroy(char **user
c7a3b7
     return rc;
c7a3b7
 }
c7a3b7
 
c7a3b7
-
c7a3b7
 static CK_RV finalize_destroy_object(char *label, CK_SESSION_HANDLE *session,
c7a3b7
-                                   CK_OBJECT_HANDLE *hkey)
c7a3b7
+                                   CK_OBJECT_HANDLE *hkey, CK_BBOOL *boolDestroyFlag)
c7a3b7
 {
c7a3b7
     char *user_input = NULL;
c7a3b7
     CK_RV rc = CKR_OK;
c7a3b7
 
c7a3b7
     rc = confirm_destroy(&user_input, label);
c7a3b7
     if (rc != CKR_OK) {
c7a3b7
-        printf("User input failed (error code 0x%lX: %s)\n",
c7a3b7
-                rc, p11_get_ckr(rc));
c7a3b7
+        printf("Skip deleting Key. User input %s\n", p11_get_ckr(rc));
c7a3b7
+        rc = CKR_CANCEL;
c7a3b7
         goto done;
c7a3b7
     }
c7a3b7
 
c7a3b7
@@ -2232,9 +2229,11 @@ static CK_RV finalize_destroy_object(cha
c7a3b7
                    label, rc, p11_get_ckr(rc));
c7a3b7
             goto done;
c7a3b7
         }
c7a3b7
+        *boolDestroyFlag = CK_TRUE;
c7a3b7
         printf("DONE - Destroy Object with Label: %s\n", label);
c7a3b7
     } else if (strncmp(user_input, "n", 1) == 0) {
c7a3b7
         printf("Skip deleting Key\n");
c7a3b7
+        *boolDestroyFlag = CK_FALSE;
c7a3b7
     } else {
c7a3b7
         printf("Please just enter (y) for yes or (n) for no.\n");
c7a3b7
     }
c7a3b7
@@ -2254,6 +2253,8 @@ static CK_RV delete_key(CK_SESSION_HANDL
c7a3b7
     CK_OBJECT_HANDLE hkey;
c7a3b7
     char *keytype = NULL;
c7a3b7
     char *label = NULL;
c7a3b7
+    CK_BBOOL boolDestroyFlag = CK_FALSE;
c7a3b7
+    CK_BBOOL boolSkipFlag = CK_FALSE;
c7a3b7
     CK_RV rc = CKR_OK;
c7a3b7
 
c7a3b7
     rc = tok_key_list_init(session, kt, label);
c7a3b7
@@ -2290,6 +2291,7 @@ static CK_RV delete_key(CK_SESSION_HANDL
c7a3b7
         if (*forceAll) {
c7a3b7
             if ((strcmp(rm_label, "") == 0) || (strcmp(rm_label, label) == 0)) {
c7a3b7
                 printf("Destroy Object with Label: %s\n", label);
c7a3b7
+
c7a3b7
                 rc = funcs->C_DestroyObject(session, hkey);
c7a3b7
                 if (rc != CKR_OK) {
c7a3b7
                     printf(
c7a3b7
@@ -2297,14 +2299,18 @@ static CK_RV delete_key(CK_SESSION_HANDL
c7a3b7
                             label, rc, p11_get_ckr(rc));
c7a3b7
                     goto done;
c7a3b7
                 }
c7a3b7
-                printf("DONE - Destroy Object with Label: %s\n", label);
c7a3b7
+                boolDestroyFlag = CK_TRUE;
c7a3b7
             }
c7a3b7
         } else {
c7a3b7
             if ((strcmp(rm_label, "") == 0) || (strcmp(rm_label, label) == 0)) {
c7a3b7
-                rc = finalize_destroy_object(label, &session, &hkey);
c7a3b7
+                rc = finalize_destroy_object(label, &session, &hkey, &boolDestroyFlag);
c7a3b7
                 if (rc != CKR_OK) {
c7a3b7
                     goto done;
c7a3b7
                 }
c7a3b7
+
c7a3b7
+                if (!boolDestroyFlag) {
c7a3b7
+                    boolSkipFlag = CK_TRUE;
c7a3b7
+                }
c7a3b7
             }
c7a3b7
         }
c7a3b7
 
c7a3b7
@@ -2321,6 +2327,16 @@ static CK_RV delete_key(CK_SESSION_HANDL
c7a3b7
 
c7a3b7
 done:
c7a3b7
 
c7a3b7
+    if (strlen(rm_label) > 0) {
c7a3b7
+        if (boolDestroyFlag) {
c7a3b7
+            printf("Object with Label: %s found and destroyed \n", rm_label);
c7a3b7
+        } else if (boolSkipFlag) {
c7a3b7
+            printf("Object with Label: %s not deleted\n", rm_label);
c7a3b7
+        } else if (rc == CKR_OK) {
c7a3b7
+            printf("Object with Label: %s not found\n", rm_label);
c7a3b7
+        }
c7a3b7
+    }
c7a3b7
+
c7a3b7
     if (rc != CKR_OK) {
c7a3b7
         free(label);
c7a3b7
         free(keytype);
c7a3b7
@@ -2494,8 +2510,11 @@ int main(int argc, char *argv[])
c7a3b7
     /* Execute command */
c7a3b7
     rc = execute_cmd(session, slot, cmd, kt, keylength, exponent, ECcurve,
c7a3b7
             label, attr_string, long_print, &forceAll);
c7a3b7
-    if (rc != CKR_OK) {
c7a3b7
-        printf("Failed to execute p11sak command (error code 0x%lX: %s)\n", rc,
c7a3b7
+    if (rc == CKR_CANCEL) {
c7a3b7
+        printf("Cancel execution: p11sak %s command (error code 0x%lX: %s)\n", cmd2str(cmd), rc,
c7a3b7
+                p11_get_ckr(rc));
c7a3b7
+    } else if (rc != CKR_OK) {
c7a3b7
+        printf("Failed to execute p11sak %s command (error code 0x%lX: %s)\n", cmd2str(cmd), rc,
c7a3b7
                 p11_get_ckr(rc));
c7a3b7
         goto done;
c7a3b7
     }