diff options
Diffstat (limited to 'g10/delkey.c')
-rw-r--r-- | g10/delkey.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/g10/delkey.c b/g10/delkey.c index 593e195c6..0b51ea899 100644 --- a/g10/delkey.c +++ b/g10/delkey.c @@ -168,24 +168,33 @@ do_delete_key( const char *username, int secret, int *r_sec_avail ) * Delete a public or secret key from a keyring. */ int -delete_key( const char *username, int secret, int allow_both ) +delete_keys( STRLIST names, int secret, int allow_both ) { int rc, avail; - rc = do_delete_key (username, secret, &avail ); - if ( rc && avail ) { - if ( allow_both ) { - rc = do_delete_key (username, 1, &avail ); - if ( !rc ) - rc = do_delete_key (username, 0, &avail ); - } - else { - log_error(_( - "there is a secret key for this public key!\n")); - log_info(_( - "use option \"--delete-secret-key\" to delete it first.\n")); - write_status_text( STATUS_DELETE_PROBLEM, "2" ); - } + for(;names;names=names->next) { + rc = do_delete_key (names->d, secret, &avail ); + if ( rc && avail ) { + if ( allow_both ) { + rc = do_delete_key (names->d, 1, &avail ); + if ( !rc ) + rc = do_delete_key (names->d, 0, &avail ); + } + else { + log_error(_( + "there is a secret key for public key \"%s\"!\n"),names->d); + log_info(_( + "use option \"--delete-secret-keys\" to delete it first.\n")); + write_status_text( STATUS_DELETE_PROBLEM, "2" ); + return rc; + } + } + + if(rc) { + log_error("%s: delete key failed: %s\n", names->d, g10_errstr(rc) ); + return rc; + } } - return rc; + + return 0; } |