diff options
Diffstat (limited to 'usr/src/cmd/cmd-crypto/pktool/delete.c')
-rw-r--r-- | usr/src/cmd/cmd-crypto/pktool/delete.c | 633 |
1 files changed, 460 insertions, 173 deletions
diff --git a/usr/src/cmd/cmd-crypto/pktool/delete.c b/usr/src/cmd/cmd-crypto/pktool/delete.c index f2dcfbd8d2..b1a1bcb96b 100644 --- a/usr/src/cmd/cmd-crypto/pktool/delete.c +++ b/usr/src/cmd/cmd-crypto/pktool/delete.c @@ -39,71 +39,143 @@ #include <kmfapi.h> static KMF_RETURN -pk_destroy_keys(void *handle, KMF_KEY_HANDLE *keys, - KMF_FINDKEY_PARAMS *fkparams, uint32_t numkeys) +pk_destroy_keys(void *handle, KMF_ATTRIBUTE *attrlist, int numattr) { int i; KMF_RETURN rv = KMF_OK; - KMF_DELETEKEY_PARAMS dkparams; + uint32_t *numkeys; + KMF_KEY_HANDLE *keys = NULL; + int del_num = 0; + KMF_ATTRIBUTE delete_attlist[16]; + KMF_KEYSTORE_TYPE kstype; + uint32_t len; + boolean_t destroy = B_TRUE; + KMF_CREDENTIAL cred; + char *slotlabel = NULL; + + len = sizeof (kstype); + rv = kmf_get_attr(KMF_KEYSTORE_TYPE_ATTR, attrlist, numattr, + &kstype, &len); + if (rv != KMF_OK) + return (rv); + + kmf_set_attr_at_index(delete_attlist, del_num, + KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype)); + del_num++; - (void) memset(&dkparams, 0, sizeof (dkparams)); - dkparams.kstype = fkparams->kstype; + /* "destroy" is optional. Default is TRUE */ + (void) kmf_get_attr(KMF_DESTROY_BOOL_ATTR, attrlist, numattr, + (void *)&destroy, NULL); - switch (fkparams->kstype) { + kmf_set_attr_at_index(delete_attlist, del_num, + KMF_DESTROY_BOOL_ATTR, &destroy, sizeof (boolean_t)); + del_num++; + + switch (kstype) { case KMF_KEYSTORE_NSS: - dkparams.nssparms = fkparams->nssparms; - dkparams.cred = fkparams->cred; + rv = kmf_get_attr(KMF_CREDENTIAL_ATTR, attrlist, numattr, + (void *)&cred, NULL); + if (rv == KMF_OK) { + if (cred.credlen > 0) { + kmf_set_attr_at_index(delete_attlist, del_num, + KMF_CREDENTIAL_ATTR, &cred, + sizeof (KMF_CREDENTIAL)); + del_num++; + } + } + + slotlabel = kmf_get_attr_ptr(KMF_TOKEN_LABEL_ATTR, attrlist, + numattr); + if (slotlabel != NULL) { + kmf_set_attr_at_index(delete_attlist, del_num, + KMF_TOKEN_LABEL_ATTR, slotlabel, + strlen(slotlabel)); + del_num++; + } break; case KMF_KEYSTORE_OPENSSL: break; case KMF_KEYSTORE_PK11TOKEN: - dkparams.cred = fkparams->cred; + rv = kmf_get_attr(KMF_CREDENTIAL_ATTR, attrlist, numattr, + (void *)&cred, NULL); + if (rv == KMF_OK) { + if (cred.credlen > 0) { + kmf_set_attr_at_index(delete_attlist, del_num, + KMF_CREDENTIAL_ATTR, &cred, + sizeof (KMF_CREDENTIAL)); + del_num++; + } + } break; default: return (PK_ERR_USAGE); } - for (i = 0; rv == KMF_OK && i < numkeys; i++) { - rv = KMF_DeleteKeyFromKeystore(handle, &dkparams, &keys[i]); + numkeys = kmf_get_attr_ptr(KMF_COUNT_ATTR, attrlist, numattr); + if (numkeys == NULL) + return (PK_ERR_USAGE); + + keys = kmf_get_attr_ptr(KMF_KEY_HANDLE_ATTR, attrlist, numattr); + if (keys == NULL) + return (PK_ERR_USAGE); + + for (i = 0; rv == KMF_OK && i < *numkeys; i++) { + int num = del_num; + + kmf_set_attr_at_index(delete_attlist, num, + KMF_KEY_HANDLE_ATTR, &keys[i], sizeof (KMF_KEY_HANDLE)); + num++; + + rv = kmf_delete_key_from_keystore(handle, num, delete_attlist); } return (rv); } static KMF_RETURN -pk_delete_keys(KMF_HANDLE_T kmfhandle, KMF_FINDKEY_PARAMS *parms, char *desc, - int *keysdeleted) +pk_delete_keys(KMF_HANDLE_T kmfhandle, KMF_ATTRIBUTE *attlist, int numattr, + char *desc, int *keysdeleted) { KMF_RETURN rv = KMF_OK; uint32_t numkeys = 0; + int num = numattr; *keysdeleted = 0; numkeys = 0; - rv = KMF_FindKey(kmfhandle, parms, NULL, &numkeys); + + kmf_set_attr_at_index(attlist, num, + KMF_COUNT_ATTR, &numkeys, sizeof (uint32_t)); + num++; + + rv = kmf_find_key(kmfhandle, num, attlist); + if (rv == KMF_OK && numkeys > 0) { KMF_KEY_HANDLE *keys = NULL; char prompt[1024]; (void) snprintf(prompt, sizeof (prompt), - gettext("%d %s key(s) found, do you want " - "to delete them (y/N) ?"), numkeys, - (desc != NULL ? desc : "")); + gettext("%d %s key(s) found, do you want " + "to delete them (y/N) ?"), numkeys, + (desc != NULL ? desc : "")); if (!yesno(prompt, - gettext("Respond with yes or no.\n"), - B_FALSE)) { + gettext("Respond with yes or no.\n"), + B_FALSE)) { return (KMF_OK); } keys = (KMF_KEY_HANDLE *)malloc(numkeys * - sizeof (KMF_KEY_HANDLE)); + sizeof (KMF_KEY_HANDLE)); if (keys == NULL) return (KMF_ERR_MEMORY); (void) memset(keys, 0, numkeys * - sizeof (KMF_KEY_HANDLE)); + sizeof (KMF_KEY_HANDLE)); + + kmf_set_attr_at_index(attlist, num, + KMF_KEY_HANDLE_ATTR, keys, sizeof (KMF_KEY_HANDLE)); + num++; - rv = KMF_FindKey(kmfhandle, parms, keys, &numkeys); + rv = kmf_find_key(kmfhandle, num, attlist); if (rv == KMF_OK) { - rv = pk_destroy_keys(kmfhandle, keys, - parms, numkeys); + rv = pk_destroy_keys(kmfhandle, attlist, num); } free(keys); @@ -118,26 +190,34 @@ pk_delete_keys(KMF_HANDLE_T kmfhandle, KMF_FINDKEY_PARAMS *parms, char *desc, } static KMF_RETURN -pk_delete_certs(KMF_HANDLE_T kmfhandle, KMF_FINDCERT_PARAMS *fcparms, - KMF_DELETECERT_PARAMS *dcparms) +pk_delete_certs(KMF_HANDLE_T kmfhandle, KMF_ATTRIBUTE *attlist, int numattr) { KMF_RETURN rv = KMF_OK; uint32_t numcerts = 0; + int num = numattr; + + kmf_set_attr_at_index(attlist, num, + KMF_COUNT_ATTR, &numcerts, sizeof (uint32_t)); + num++; - rv = KMF_FindCert(kmfhandle, fcparms, NULL, &numcerts); + rv = kmf_find_cert(kmfhandle, num, attlist); if (rv == KMF_OK && numcerts > 0) { char prompt[1024]; (void) snprintf(prompt, sizeof (prompt), - gettext("%d certificate(s) found, do you want " - "to delete them (y/N) ?"), numcerts); + gettext("%d certificate(s) found, do you want " + "to delete them (y/N) ?"), numcerts); if (!yesno(prompt, - gettext("Respond with yes or no.\n"), - B_FALSE)) { + gettext("Respond with yes or no.\n"), + B_FALSE)) { return (KMF_OK); } - rv = KMF_DeleteCertFromKeystore(kmfhandle, dcparms); + /* + * Use numattr because delete cert does not require + * KMF_COUNT_ATTR attribute. + */ + rv = kmf_delete_cert_from_keystore(kmfhandle, numattr, attlist); } else if (rv == KMF_ERR_CERT_NOT_FOUND) { rv = KMF_OK; @@ -152,36 +232,73 @@ delete_nss_keys(KMF_HANDLE_T kmfhandle, char *dir, char *prefix, KMF_CREDENTIAL *tokencred) { KMF_RETURN rv = KMF_OK; - KMF_FINDKEY_PARAMS parms; char *keytype = NULL; int nk, numkeys = 0; + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS; + int numattr = 0; + KMF_ATTRIBUTE attrlist[16]; + KMF_KEY_CLASS keyclass; rv = configure_nss(kmfhandle, dir, prefix); if (rv != KMF_OK) return (rv); - (void) memset(&parms, 0, sizeof (parms)); - parms.kstype = KMF_KEYSTORE_NSS; - parms.findLabel = objlabel; - parms.cred = *tokencred; - parms.nssparms.slotlabel = token; + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; + + if (objlabel != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR, + objlabel, strlen(objlabel)); + numattr++; + } + + if (tokencred->credlen > 0) { + kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR, + tokencred, sizeof (KMF_CREDENTIAL)); + numattr++; + } + + if (token && strlen(token)) { + kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR, + token, strlen(token)); + numattr++; + } if (oclass & PK_PRIKEY_OBJ) { - parms.keyclass = KMF_ASYM_PRI; + int num = numattr; + + keyclass = KMF_ASYM_PRI; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + keytype = "private"; - rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk); + rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk); numkeys += nk; } if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) { - parms.keyclass = KMF_SYMMETRIC; + int num = numattr; + + keyclass = KMF_SYMMETRIC; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + keytype = "symmetric"; - rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk); + rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk); numkeys += nk; } if (rv == KMF_OK && (oclass & PK_PUBKEY_OBJ)) { - parms.keyclass = KMF_ASYM_PUB; + int num = numattr; + + keyclass = KMF_ASYM_PUB; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + keytype = "public"; - rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk); + rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk); numkeys += nk; } if (rv == KMF_OK && numkeys == 0) @@ -199,32 +316,59 @@ delete_nss_certs(KMF_HANDLE_T kmfhandle, KMF_CERT_VALIDITY find_criteria_flag) { KMF_RETURN rv = KMF_OK; - KMF_DELETECERT_PARAMS dcparms; - KMF_FINDCERT_PARAMS fcargs; + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS; + int numattr = 0; + KMF_ATTRIBUTE attrlist[16]; rv = configure_nss(kmfhandle, dir, prefix); if (rv != KMF_OK) return (rv); - (void) memset(&dcparms, 0, sizeof (dcparms)); - dcparms.kstype = KMF_KEYSTORE_NSS; - dcparms.certLabel = objlabel; - dcparms.issuer = issuer; - dcparms.subject = subject; - dcparms.serial = serno; - dcparms.find_cert_validity = find_criteria_flag; - dcparms.nssparms.slotlabel = token; - - (void) memset(&fcargs, 0, sizeof (fcargs)); - fcargs.kstype = KMF_KEYSTORE_NSS; - fcargs.certLabel = objlabel; - fcargs.issuer = issuer; - fcargs.subject = subject; - fcargs.serial = serno; - fcargs.find_cert_validity = find_criteria_flag; - fcargs.nssparms.slotlabel = token; - - rv = pk_delete_certs(kmfhandle, &fcargs, &dcparms); + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; + + if (objlabel != NULL) { + kmf_set_attr_at_index(attrlist, numattr, + KMF_CERT_LABEL_ATTR, objlabel, + strlen(objlabel)); + numattr++; + } + + if (issuer != NULL) { + kmf_set_attr_at_index(attrlist, numattr, + KMF_ISSUER_NAME_ATTR, issuer, + strlen(issuer)); + numattr++; + } + + if (subject != NULL) { + kmf_set_attr_at_index(attrlist, numattr, + KMF_SUBJECT_NAME_ATTR, subject, + strlen(subject)); + numattr++; + } + + if (serno != NULL) { + kmf_set_attr_at_index(attrlist, numattr, + KMF_BIGINT_ATTR, serno, + sizeof (KMF_BIGINT)); + numattr++; + } + + kmf_set_attr_at_index(attrlist, numattr, + KMF_CERT_VALIDITY_ATTR, &find_criteria_flag, + sizeof (KMF_CERT_VALIDITY)); + numattr++; + + if (token != NULL) { + kmf_set_attr_at_index(attrlist, numattr, + KMF_TOKEN_LABEL_ATTR, token, + strlen(token)); + numattr++; + } + + rv = pk_delete_certs(kmfhandle, attrlist, numattr); return (rv); } @@ -232,23 +376,38 @@ delete_nss_certs(KMF_HANDLE_T kmfhandle, static KMF_RETURN delete_nss_crl(void *kmfhandle, char *dir, char *prefix, char *token, - char *issuernickname, char *subject) + char *issuer, char *subject) { KMF_RETURN rv = KMF_OK; - KMF_DELETECRL_PARAMS dcrlparms; + int numattr = 0; + KMF_ATTRIBUTE attrlist[8]; + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS; rv = configure_nss(kmfhandle, dir, prefix); if (rv != KMF_OK) return (rv); - (void) memset(&dcrlparms, 0, sizeof (dcrlparms)); + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; - dcrlparms.kstype = KMF_KEYSTORE_NSS; - dcrlparms.nssparms.slotlabel = token; - dcrlparms.nssparms.crl_issuerName = issuernickname; - dcrlparms.nssparms.crl_subjName = subject; + if (token != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR, + token, strlen(token)); + numattr++; + } + if (issuer != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_ISSUER_NAME_ATTR, + issuer, strlen(issuer)); + numattr++; + } + if (subject != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_SUBJECT_NAME_ATTR, + subject, strlen(subject)); + numattr++; + } - rv = KMF_DeleteCRL(kmfhandle, &dcrlparms); + rv = kmf_delete_crl(kmfhandle, numattr, attrlist); return (rv); } @@ -259,9 +418,14 @@ delete_pk11_keys(KMF_HANDLE_T kmfhandle, KMF_CREDENTIAL *tokencred) { KMF_RETURN rv = KMF_OK; - KMF_FINDKEY_PARAMS parms; int nk, numkeys = 0; - + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN; + int numattr = 0; + KMF_ATTRIBUTE attrlist[16]; + KMF_KEY_CLASS keyclass; + boolean_t token_bool = B_TRUE; + KMF_KEY_ALG keytype = 0; + boolean_t private; /* * Symmetric keys and RSA/DSA private keys are always * created with the "CKA_PRIVATE" field == TRUE, so @@ -275,30 +439,69 @@ delete_pk11_keys(KMF_HANDLE_T kmfhandle, return (rv); } - (void) memset(&parms, 0, sizeof (parms)); - parms.kstype = KMF_KEYSTORE_PK11TOKEN; - parms.findLabel = (char *)objlabel; - parms.keytype = 0; - parms.pkcs11parms.private = ((oclass & PK_PRIVATE_OBJ) > 0); - parms.pkcs11parms.token = 1; - parms.cred.cred = tokencred->cred; - parms.cred.credlen = tokencred->credlen; + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; + + if (objlabel != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR, + objlabel, strlen(objlabel)); + numattr++; + } + + if (tokencred != NULL && tokencred->credlen > 0) { + kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR, + tokencred, sizeof (KMF_CREDENTIAL)); + numattr++; + } + + private = ((oclass & PK_PRIVATE_OBJ) > 0); + + kmf_set_attr_at_index(attrlist, numattr, KMF_PRIVATE_BOOL_ATTR, + &private, sizeof (private)); + numattr++; + + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYALG_ATTR, + &keytype, sizeof (keytype)); + numattr++; + + kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_BOOL_ATTR, + &token_bool, sizeof (token_bool)); + numattr++; if (oclass & PK_PRIKEY_OBJ) { - parms.keyclass = KMF_ASYM_PRI; - rv = pk_delete_keys(kmfhandle, &parms, "private", &nk); + int num = numattr; + + keyclass = KMF_ASYM_PRI; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + + rv = pk_delete_keys(kmfhandle, attrlist, num, "private", &nk); numkeys += nk; } if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) { - parms.keyclass = KMF_SYMMETRIC; - rv = pk_delete_keys(kmfhandle, &parms, "symmetric", &nk); + int num = numattr; + + keyclass = KMF_SYMMETRIC; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + + rv = pk_delete_keys(kmfhandle, attrlist, num, "symmetric", &nk); numkeys += nk; } if (rv == KMF_OK && (oclass & PK_PUBKEY_OBJ)) { - parms.keyclass = KMF_ASYM_PUB; - rv = pk_delete_keys(kmfhandle, &parms, "public", &nk); + int num = numattr; + + keyclass = KMF_ASYM_PUB; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + + rv = pk_delete_keys(kmfhandle, attrlist, num, "public", &nk); numkeys += nk; } if (rv == KMF_OK && numkeys == 0) @@ -314,8 +517,9 @@ delete_pk11_certs(KMF_HANDLE_T kmfhandle, KMF_CERT_VALIDITY find_criteria_flag) { KMF_RETURN kmfrv; - KMF_DELETECERT_PARAMS dparms; - KMF_FINDCERT_PARAMS fcargs; + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN; + int numattr = 0; + KMF_ATTRIBUTE attrlist[16]; kmfrv = select_token(kmfhandle, token, FALSE); @@ -323,16 +527,39 @@ delete_pk11_certs(KMF_HANDLE_T kmfhandle, return (kmfrv); } - (void) memset(&dparms, 0, sizeof (dparms)); - dparms.kstype = KMF_KEYSTORE_PK11TOKEN; - dparms.certLabel = objlabel; - dparms.issuer = issuer; - dparms.subject = subject; - dparms.serial = serno; - dparms.find_cert_validity = find_criteria_flag; + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; + + if (objlabel != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_LABEL_ATTR, + objlabel, strlen(objlabel)); + numattr++; + } + + if (issuer != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_ISSUER_NAME_ATTR, + issuer, strlen(issuer)); + numattr++; + } + + if (subject != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_SUBJECT_NAME_ATTR, + subject, strlen(subject)); + numattr++; + } + + if (serno != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_BIGINT_ATTR, + serno, sizeof (KMF_BIGINT)); + numattr++; + } + + kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_VALIDITY_ATTR, + &find_criteria_flag, sizeof (KMF_CERT_VALIDITY)); + numattr++; - fcargs = dparms; - kmfrv = pk_delete_certs(kmfhandle, &fcargs, &dparms); + kmfrv = pk_delete_certs(kmfhandle, attrlist, numattr); return (kmfrv); } @@ -343,24 +570,49 @@ delete_file_certs(KMF_HANDLE_T kmfhandle, char *subject, KMF_CERT_VALIDITY find_criteria_flag) { KMF_RETURN rv; - KMF_DELETECERT_PARAMS dparms; - KMF_FINDCERT_PARAMS fcargs; + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL; + int numattr = 0; + KMF_ATTRIBUTE attrlist[16]; + + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; + + if (issuer != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_ISSUER_NAME_ATTR, + issuer, strlen(issuer)); + numattr++; + } - (void *)memset(&dparms, 0, sizeof (dparms)); - (void *)memset(&fcargs, 0, sizeof (fcargs)); - fcargs.kstype = KMF_KEYSTORE_OPENSSL; - fcargs.certLabel = NULL; - fcargs.issuer = issuer; - fcargs.subject = subject; - fcargs.serial = serial; - fcargs.sslparms.dirpath = dir; - fcargs.sslparms.certfile = filename; - fcargs.find_cert_validity = find_criteria_flag; + if (subject != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_SUBJECT_NAME_ATTR, + subject, strlen(subject)); + numattr++; + } + + if (serial != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_BIGINT_ATTR, + serial, sizeof (KMF_BIGINT)); + numattr++; + } - /* For now, delete parameters and find parameters are the same */ - dparms = fcargs; + if (dir != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_DIRPATH_ATTR, + dir, strlen(dir)); + numattr++; + } + + if (filename != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_FILENAME_ATTR, + filename, strlen(filename)); + numattr++; + } - rv = pk_delete_certs(kmfhandle, &fcargs, &dparms); + kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_VALIDITY_ATTR, + &find_criteria_flag, sizeof (KMF_CERT_VALIDITY)); + numattr++; + + rv = pk_delete_certs(kmfhandle, attrlist, numattr); return (rv); } @@ -370,25 +622,51 @@ delete_file_keys(KMF_HANDLE_T kmfhandle, int oclass, char *dir, char *infile) { KMF_RETURN rv = KMF_OK; - KMF_FINDKEY_PARAMS parms; char *keytype = ""; int nk, numkeys = 0; + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL; + int numattr = 0; + KMF_ATTRIBUTE attrlist[16]; + KMF_KEY_CLASS keyclass; + + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; + + if (dir != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_DIRPATH_ATTR, + dir, strlen(dir)); + numattr++; + } - (void) memset(&parms, 0, sizeof (parms)); - parms.kstype = KMF_KEYSTORE_OPENSSL; - parms.sslparms.dirpath = dir; - parms.sslparms.keyfile = infile; + if (infile != NULL) { + kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_FILENAME_ATTR, + infile, strlen(infile)); + numattr++; + } if (oclass & (PK_PUBKEY_OBJ | PK_PRIKEY_OBJ)) { - parms.keyclass = KMF_ASYM_PRI; + int num = numattr; + + keyclass = KMF_ASYM_PRI; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + keytype = "Asymmetric"; - rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk); + rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk); numkeys += nk; } if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) { - parms.keyclass = KMF_SYMMETRIC; + int num = numattr; + + keyclass = KMF_SYMMETRIC; + kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR, + &keyclass, sizeof (keyclass)); + num++; + keytype = "symmetric"; - rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk); + rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk); numkeys += nk; } if (rv == KMF_OK && numkeys == 0) @@ -401,15 +679,26 @@ static KMF_RETURN delete_file_crl(void *kmfhandle, char *dir, char *filename) { KMF_RETURN rv; - KMF_DELETECRL_PARAMS dcrlparms; - - (void) memset(&dcrlparms, 0, sizeof (dcrlparms)); - - dcrlparms.kstype = KMF_KEYSTORE_OPENSSL; - dcrlparms.sslparms.dirpath = dir; - dcrlparms.sslparms.crlfile = filename; + int numattr = 0; + KMF_ATTRIBUTE attrlist[4]; + KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL; + + kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR, + &kstype, sizeof (kstype)); + numattr++; + + if (dir) { + kmf_set_attr_at_index(attrlist, numattr, KMF_DIRPATH_ATTR, + dir, strlen(dir)); + numattr++; + } + if (filename) { + kmf_set_attr_at_index(attrlist, numattr, KMF_CRL_FILENAME_ATTR, + filename, strlen(filename)); + numattr++; + } - rv = KMF_DeleteCRL(kmfhandle, &dcrlparms); + rv = kmf_delete_crl(kmfhandle, numattr, attrlist); return (rv); } @@ -444,11 +733,11 @@ pk_delete(int argc, char *argv[]) /* Parse command line options. Do NOT i18n/l10n. */ while ((opt = getopt_av(argc, argv, - "T:(token)y:(objtype)l:(label)" - "k:(keystore)s:(subject)n:(nickname)" - "d:(dir)p:(prefix)S:(serial)i:(issuer)" - "c:(criteria)" - "f:(infile)")) != EOF) { + "T:(token)y:(objtype)l:(label)" + "k:(keystore)s:(subject)n:(nickname)" + "d:(dir)p:(prefix)S:(serial)i:(issuer)" + "c:(criteria)" + "f:(infile)")) != EOF) { if (EMPTYSTRING(optarg_av)) return (PK_ERR_USAGE); @@ -498,7 +787,7 @@ pk_delete(int argc, char *argv[]) find_criteria = optarg_av; if (!strcasecmp(find_criteria, "valid")) find_criteria_flag = - KMF_NONEXPIRED_CERTS; + KMF_NONEXPIRED_CERTS; else if (!strcasecmp(find_criteria, "expired")) find_criteria_flag = KMF_EXPIRED_CERTS; else if (!strcasecmp(find_criteria, "both")) @@ -518,17 +807,17 @@ pk_delete(int argc, char *argv[]) /* if PUBLIC or PRIVATE obj was given, the old syntax was used. */ if ((oclass & (PK_PUBLIC_OBJ | PK_PRIVATE_OBJ)) && - kstype != KMF_KEYSTORE_PK11TOKEN) { + kstype != KMF_KEYSTORE_PK11TOKEN) { (void) fprintf(stderr, gettext("The objtype parameter " - "is only relevant if keystore=pkcs11\n")); + "is only relevant if keystore=pkcs11\n")); return (PK_ERR_USAGE); } /* If no object class specified, delete everything but CRLs */ if (oclass == 0) oclass = PK_CERT_OBJ | PK_PUBKEY_OBJ | PK_PRIKEY_OBJ | - PK_SYMKEY_OBJ; + PK_SYMKEY_OBJ; /* No additional args allowed. */ argc -= optind_av; @@ -547,11 +836,11 @@ pk_delete(int argc, char *argv[]) uchar_t *bytes = NULL; size_t bytelen; - rv = KMF_HexString2Bytes((uchar_t *)serstr, &bytes, &bytelen); + rv = kmf_hexstr_to_bytes((uchar_t *)serstr, &bytes, &bytelen); if (rv != KMF_OK || bytes == NULL) { (void) fprintf(stderr, gettext("serial number " - "must be specified as a hex number " - "(ex: 0x0102030405ffeeddee)\n")); + "must be specified as a hex number " + "(ex: 0x0102030405ffeeddee)\n")); return (PK_ERR_USAGE); } serial.val = bytes; @@ -559,94 +848,92 @@ pk_delete(int argc, char *argv[]) } if ((kstype == KMF_KEYSTORE_PK11TOKEN || - kstype == KMF_KEYSTORE_NSS) && - (oclass & (PK_KEY_OBJ | PK_PRIVATE_OBJ))) { + kstype == KMF_KEYSTORE_NSS) && + (oclass & (PK_KEY_OBJ | PK_PRIVATE_OBJ))) { (void) get_token_password(kstype, token_spec, - &tokencred); + &tokencred); } - if ((kmfrv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) + if ((kmfrv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) return (kmfrv); switch (kstype) { case KMF_KEYSTORE_PK11TOKEN: if (oclass & PK_KEY_OBJ) { kmfrv = delete_pk11_keys(kmfhandle, - token_spec, oclass, - object_label, - &tokencred); + token_spec, oclass, + object_label, &tokencred); /* * If deleting groups of objects, it is OK * to ignore the "key not found" case so that * we can continue to find other objects. */ if (kmfrv == KMF_ERR_KEY_NOT_FOUND && - (oclass != PK_KEY_OBJ)) + (oclass != PK_KEY_OBJ)) kmfrv = KMF_OK; if (kmfrv != KMF_OK) break; } if (oclass & (PK_CERT_OBJ | PK_PUBLIC_OBJ)) { kmfrv = delete_pk11_certs(kmfhandle, - token_spec, - object_label, - &serial, issuer, - subject, find_criteria_flag); + token_spec, object_label, + &serial, issuer, + subject, find_criteria_flag); /* * If cert delete failed, but we are looking at * other objects, then it is OK. */ if (kmfrv == KMF_ERR_CERT_NOT_FOUND && - (oclass & (PK_CRL_OBJ | PK_KEY_OBJ))) + (oclass & (PK_CRL_OBJ | PK_KEY_OBJ))) kmfrv = KMF_OK; if (kmfrv != KMF_OK) break; } if (oclass & PK_CRL_OBJ) kmfrv = delete_file_crl(kmfhandle, - dir, infile); + dir, infile); break; case KMF_KEYSTORE_NSS: if (oclass & PK_KEY_OBJ) { kmfrv = delete_nss_keys(kmfhandle, - dir, prefix, token_spec, - oclass, (char *)object_label, - &tokencred); + dir, prefix, token_spec, + oclass, (char *)object_label, + &tokencred); if (kmfrv != KMF_OK) break; } if (oclass & PK_CERT_OBJ) { kmfrv = delete_nss_certs(kmfhandle, - dir, prefix, token_spec, - (char *)object_label, - &serial, issuer, subject, - find_criteria_flag); + dir, prefix, token_spec, + (char *)object_label, + &serial, issuer, subject, + find_criteria_flag); if (kmfrv != KMF_OK) break; } if (oclass & PK_CRL_OBJ) kmfrv = delete_nss_crl(kmfhandle, - dir, prefix, token_spec, - (char *)object_label, subject); + dir, prefix, token_spec, + (char *)object_label, subject); break; case KMF_KEYSTORE_OPENSSL: if (oclass & PK_KEY_OBJ) { kmfrv = delete_file_keys(kmfhandle, oclass, - dir, infile); + dir, infile); if (kmfrv != KMF_OK) break; } if (oclass & (PK_CERT_OBJ)) { kmfrv = delete_file_certs(kmfhandle, - dir, infile, &serial, issuer, - subject, find_criteria_flag); + dir, infile, &serial, issuer, + subject, find_criteria_flag); if (kmfrv != KMF_OK) break; } if (oclass & PK_CRL_OBJ) kmfrv = delete_file_crl(kmfhandle, - dir, infile); + dir, infile); break; default: rv = PK_ERR_USAGE; @@ -655,11 +942,11 @@ pk_delete(int argc, char *argv[]) if (kmfrv != KMF_OK) { display_error(kmfhandle, kmfrv, - gettext("Error deleting objects")); + gettext("Error deleting objects")); } if (serial.val != NULL) free(serial.val); - (void) KMF_Finalize(kmfhandle); + (void) kmf_finalize(kmfhandle); return (kmfrv); } |