Changeset View
Changeset View
Standalone View
Standalone View
b/g10/getkey.c
Context not available. | |||||
return 0; | return 0; | ||||
} | } | ||||
static const char * | |||||
parse_def_secret_key (ctrl_t ctrl) | |||||
{ | |||||
KEYDB_HANDLE hd = NULL; | |||||
strlist_t t; | |||||
for (t = opt.def_secret_key; t; t = t->next) | |||||
{ | |||||
gpg_error_t err; | |||||
KEYDB_SEARCH_DESC desc; | |||||
KBNODE kb; | |||||
err = classify_user_id (t->d, &desc, 1); | |||||
if (err) | |||||
{ | |||||
log_error (_("Invalid value ('%s') for --default-key.\n"), | |||||
t->d); | |||||
continue; | |||||
} | |||||
if (! (desc.mode == KEYDB_SEARCH_MODE_LONG_KID | |||||
|| desc.mode == KEYDB_SEARCH_MODE_FPR16 | |||||
|| desc.mode == KEYDB_SEARCH_MODE_FPR20 | |||||
|| desc.mode == KEYDB_SEARCH_MODE_FPR)) | |||||
{ | |||||
log_error (_("Invalid value ('%s') for --default-key:" | |||||
" value must be a long keyid or a fingerprint.\n"), | |||||
t->d); | |||||
continue; | |||||
} | |||||
if (! hd) | |||||
hd = keydb_new (); | |||||
else | |||||
keydb_search_reset (hd); | |||||
err = keydb_search (hd, &desc, 1, NULL); | |||||
if (gpg_err_code (err) == GPG_ERR_NOT_FOUND) | |||||
continue; | |||||
if (err) | |||||
{ | |||||
log_error (_("Error reading from keyring: %s.\n"), | |||||
gpg_strerror (err)); | |||||
t = NULL; | |||||
break; | |||||
} | |||||
err = keydb_get_keyblock (hd, &kb); | |||||
if (err) | |||||
{ | |||||
log_error (_("error reading keyblock: %s\n"), | |||||
gpg_strerror (err)); | |||||
continue; | |||||
} | |||||
err = agent_probe_secret_key (ctrl, kb->pkt->pkt.public_key); | |||||
release_kbnode (kb); | |||||
if (! err) | |||||
{ | |||||
log_debug (_("Using %s as default secret key.\n"), t->d); | |||||
break; | |||||
} | |||||
} | |||||
if (hd) | |||||
keydb_release (hd); | |||||
if (t) | |||||
return t->d; | |||||
return NULL; | |||||
} | |||||
/* For documentation see keydb.h. */ | /* For documentation see keydb.h. */ | ||||
gpg_error_t | gpg_error_t | ||||
get_seckey_default (PKT_public_key *pk) | get_seckey_default (ctrl_t ctrl, PKT_public_key *pk) | ||||
{ | { | ||||
gpg_error_t err; | gpg_error_t err; | ||||
strlist_t namelist = NULL; | strlist_t namelist = NULL; | ||||
int include_unusable = 1; | int include_unusable = 1; | ||||
if (opt.def_secret_key && *opt.def_secret_key) | |||||
add_to_strlist (&namelist, opt.def_secret_key); | const char *def_secret_key = parse_def_secret_key (ctrl); | ||||
if (def_secret_key) | |||||
add_to_strlist (&namelist, def_secret_key); | |||||
else | else | ||||
include_unusable = 0; | include_unusable = 0; | ||||
Context not available. | |||||
/* For documentation see keydb.h. */ | /* For documentation see keydb.h. */ | ||||
gpg_error_t | gpg_error_t | ||||
getkey_byname (getkey_ctx_t *retctx, PKT_public_key *pk, | getkey_byname (ctrl_t ctrl, getkey_ctx_t *retctx, PKT_public_key *pk, | ||||
const char *name, int want_secret, kbnode_t *ret_keyblock) | const char *name, int want_secret, kbnode_t *ret_keyblock) | ||||
{ | { | ||||
gpg_error_t err; | gpg_error_t err; | ||||
strlist_t namelist = NULL; | strlist_t namelist = NULL; | ||||
int with_unusable = 1; | int with_unusable = 1; | ||||
const char *def_secret_key = NULL; | |||||
if (want_secret && !name) | |||||
def_secret_key = parse_def_secret_key (ctrl); | |||||
if (want_secret && !name && opt.def_secret_key && *opt.def_secret_key) | if (want_secret && !name && def_secret_key) | ||||
add_to_strlist (&namelist, opt.def_secret_key); | add_to_strlist (&namelist, def_secret_key); | ||||
else if (name) | else if (name) | ||||
add_to_strlist (&namelist, name); | add_to_strlist (&namelist, name); | ||||
else | else | ||||
Context not available. | |||||
/* For documentation see keydb.h. */ | /* For documentation see keydb.h. */ | ||||
gpg_error_t | gpg_error_t | ||||
enum_secret_keys (void **context, PKT_public_key *sk) | enum_secret_keys (ctrl_t ctrl, void **context, PKT_public_key *sk) | ||||
{ | { | ||||
gpg_error_t err = 0; | gpg_error_t err = 0; | ||||
const char *name; | const char *name; | ||||
Context not available. | |||||
switch (c->state) | switch (c->state) | ||||
{ | { | ||||
case 0: /* First try to use the --default-key. */ | case 0: /* First try to use the --default-key. */ | ||||
if (opt.def_secret_key && *opt.def_secret_key) | name = parse_def_secret_key (ctrl); | ||||
name = opt.def_secret_key; | |||||
c->state = 1; | c->state = 1; | ||||
break; | break; | ||||
Context not available. | |||||
} | } | ||||
while (!name || !*name); | while (!name || !*name); | ||||
err = getkey_byname (NULL, NULL, name, 1, &c->keyblock); | err = getkey_byname (ctrl, NULL, NULL, name, 1, &c->keyblock); | ||||
if (err) | if (err) | ||||
{ | { | ||||
/* getkey_byname might return a keyblock even in the | /* getkey_byname might return a keyblock even in the | ||||
Context not available. |