mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
* keylist.c (list_internal_keys): Return error codes.
(list_external_keys, gpgsm_list_keys): Ditto. * server.c (do_listkeys): Ditto. * gpgsm.c (main): Display a key description for --passwd. * call-agent.c (gpgsm_agent_passwd): New arg DESC.
This commit is contained in:
parent
a425334f48
commit
0c224cadf3
@ -1,3 +1,12 @@
|
|||||||
|
2004-02-21 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* keylist.c (list_internal_keys): Return error codes.
|
||||||
|
(list_external_keys, gpgsm_list_keys): Ditto.
|
||||||
|
* server.c (do_listkeys): Ditto.
|
||||||
|
|
||||||
|
* gpgsm.c (main): Display a key description for --passwd.
|
||||||
|
* call-agent.c (gpgsm_agent_passwd): New arg DESC.
|
||||||
|
|
||||||
2004-02-20 Werner Koch <wk@gnupg.org>
|
2004-02-20 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* gpgsm.c (main): New option --debug-ignore-expiration.
|
* gpgsm.c (main): New option --debug-ignore-expiration.
|
||||||
|
@ -710,9 +710,11 @@ gpgsm_agent_learn ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Ask the agent to change the passphrase of the key identified by HEXKEYGRIP. */
|
/* Ask the agent to change the passphrase of the key identified by
|
||||||
|
HEXKEYGRIP. If DESC is not NULL, display instead of the default
|
||||||
|
description message. */
|
||||||
int
|
int
|
||||||
gpgsm_agent_passwd (const char *hexkeygrip)
|
gpgsm_agent_passwd (const char *hexkeygrip, const char *desc)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
char line[ASSUAN_LINELENGTH];
|
char line[ASSUAN_LINELENGTH];
|
||||||
@ -724,6 +726,16 @@ gpgsm_agent_passwd (const char *hexkeygrip)
|
|||||||
if (!hexkeygrip || strlen (hexkeygrip) != 40)
|
if (!hexkeygrip || strlen (hexkeygrip) != 40)
|
||||||
return gpg_error (GPG_ERR_INV_VALUE);
|
return gpg_error (GPG_ERR_INV_VALUE);
|
||||||
|
|
||||||
|
if (desc)
|
||||||
|
{
|
||||||
|
snprintf (line, DIM(line)-1, "SETKEYDESC %s", desc);
|
||||||
|
line[DIM(line)-1] = 0;
|
||||||
|
rc = assuan_transact (agent_ctx, line,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
|
if (rc)
|
||||||
|
return map_assuan_err (rc);
|
||||||
|
}
|
||||||
|
|
||||||
snprintf (line, DIM(line)-1, "PASSWD %s", hexkeygrip);
|
snprintf (line, DIM(line)-1, "PASSWD %s", hexkeygrip);
|
||||||
line[DIM(line)-1] = 0;
|
line[DIM(line)-1] = 0;
|
||||||
|
|
||||||
|
@ -1452,7 +1452,11 @@ main ( int argc, char **argv)
|
|||||||
else if (!(grip = gpgsm_get_keygrip_hexstring (cert)))
|
else if (!(grip = gpgsm_get_keygrip_hexstring (cert)))
|
||||||
rc = gpg_error (GPG_ERR_BUG);
|
rc = gpg_error (GPG_ERR_BUG);
|
||||||
else
|
else
|
||||||
rc = gpgsm_agent_passwd (grip);
|
{
|
||||||
|
char *desc = gpgsm_format_keydesc (cert);
|
||||||
|
rc = gpgsm_agent_passwd (grip, desc);
|
||||||
|
xfree (desc);
|
||||||
|
}
|
||||||
if (rc)
|
if (rc)
|
||||||
log_error ("error changing passphrase: %s\n", gpg_strerror (rc));
|
log_error ("error changing passphrase: %s\n", gpg_strerror (rc));
|
||||||
xfree (grip);
|
xfree (grip);
|
||||||
|
@ -239,7 +239,8 @@ void gpgsm_release_certlist (certlist_t list);
|
|||||||
int gpgsm_find_cert (const char *name, ksba_cert_t *r_cert);
|
int gpgsm_find_cert (const char *name, ksba_cert_t *r_cert);
|
||||||
|
|
||||||
/*-- keylist.c --*/
|
/*-- keylist.c --*/
|
||||||
void gpgsm_list_keys (ctrl_t ctrl, STRLIST names, FILE *fp, unsigned int mode);
|
gpg_error_t gpgsm_list_keys (ctrl_t ctrl, STRLIST names,
|
||||||
|
FILE *fp, unsigned int mode);
|
||||||
|
|
||||||
/*-- import.c --*/
|
/*-- import.c --*/
|
||||||
int gpgsm_import (ctrl_t ctrl, int in_fd);
|
int gpgsm_import (ctrl_t ctrl, int in_fd);
|
||||||
@ -284,7 +285,7 @@ int gpgsm_agent_istrusted (ksba_cert_t cert);
|
|||||||
int gpgsm_agent_havekey (const char *hexkeygrip);
|
int gpgsm_agent_havekey (const char *hexkeygrip);
|
||||||
int gpgsm_agent_marktrusted (ksba_cert_t cert);
|
int gpgsm_agent_marktrusted (ksba_cert_t cert);
|
||||||
int gpgsm_agent_learn (void);
|
int gpgsm_agent_learn (void);
|
||||||
int gpgsm_agent_passwd (const char *hexkeygrip);
|
int gpgsm_agent_passwd (const char *hexkeygrip, const char *desc);
|
||||||
|
|
||||||
/*-- call-dirmngr.c --*/
|
/*-- call-dirmngr.c --*/
|
||||||
int gpgsm_dirmngr_isvalid (ksba_cert_t cert, int use_ocsp);
|
int gpgsm_dirmngr_isvalid (ksba_cert_t cert, int use_ocsp);
|
||||||
|
31
sm/keylist.c
31
sm/keylist.c
@ -496,7 +496,7 @@ list_cert_chain (ctrl_t ctrl, ksba_cert_t cert, FILE *fp, int with_validation)
|
|||||||
|
|
||||||
/* List all internal keys or just the key given as NAMES.
|
/* List all internal keys or just the key given as NAMES.
|
||||||
*/
|
*/
|
||||||
static void
|
static gpg_error_t
|
||||||
list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
||||||
{
|
{
|
||||||
KEYDB_HANDLE hd;
|
KEYDB_HANDLE hd;
|
||||||
@ -504,7 +504,7 @@ list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
|||||||
STRLIST sl;
|
STRLIST sl;
|
||||||
int ndesc;
|
int ndesc;
|
||||||
ksba_cert_t cert = NULL;
|
ksba_cert_t cert = NULL;
|
||||||
int rc=0;
|
gpg_error_t rc = 0;
|
||||||
const char *lastresname, *resname;
|
const char *lastresname, *resname;
|
||||||
int have_secret;
|
int have_secret;
|
||||||
|
|
||||||
@ -512,6 +512,7 @@ list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
|||||||
if (!hd)
|
if (!hd)
|
||||||
{
|
{
|
||||||
log_error ("keydb_new failed\n");
|
log_error ("keydb_new failed\n");
|
||||||
|
rc = gpg_error (GPG_ERR_GENERAL);
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,6 +527,7 @@ list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
|||||||
desc = xtrycalloc (ndesc, sizeof *desc);
|
desc = xtrycalloc (ndesc, sizeof *desc);
|
||||||
if (!ndesc)
|
if (!ndesc)
|
||||||
{
|
{
|
||||||
|
rc = gpg_error_from_errno (errno);
|
||||||
log_error ("out of core\n");
|
log_error ("out of core\n");
|
||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
@ -599,8 +601,12 @@ list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
|||||||
char *p = gpgsm_get_keygrip_hexstring (cert);
|
char *p = gpgsm_get_keygrip_hexstring (cert);
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
if (!gpgsm_agent_havekey (p))
|
rc = gpgsm_agent_havekey (p);
|
||||||
|
if (!rc)
|
||||||
have_secret = 1;
|
have_secret = 1;
|
||||||
|
else if ( gpg_err_code (rc) != GPG_ERR_NO_SECKEY)
|
||||||
|
goto leave;
|
||||||
|
rc = 0;
|
||||||
xfree (p);
|
xfree (p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -623,13 +629,16 @@ list_internal_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
|||||||
ksba_cert_release (cert);
|
ksba_cert_release (cert);
|
||||||
cert = NULL;
|
cert = NULL;
|
||||||
}
|
}
|
||||||
if (rc && rc != -1)
|
if (gpg_err_code (rc) == GPG_ERR_EOF || rc == -1 )
|
||||||
|
rc = 0;
|
||||||
|
if (rc)
|
||||||
log_error ("keydb_search failed: %s\n", gpg_strerror (rc));
|
log_error ("keydb_search failed: %s\n", gpg_strerror (rc));
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
ksba_cert_release (cert);
|
ksba_cert_release (cert);
|
||||||
xfree (desc);
|
xfree (desc);
|
||||||
keydb_release (hd);
|
keydb_release (hd);
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -669,7 +678,7 @@ list_external_cb (void *cb_value, ksba_cert_t cert)
|
|||||||
/* List external keys similar to internal one. Note: mode does not
|
/* List external keys similar to internal one. Note: mode does not
|
||||||
make sense here because it would be unwise to list external secret
|
make sense here because it would be unwise to list external secret
|
||||||
keys */
|
keys */
|
||||||
static void
|
static gpg_error_t
|
||||||
list_external_keys (CTRL ctrl, STRLIST names, FILE *fp)
|
list_external_keys (CTRL ctrl, STRLIST names, FILE *fp)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@ -684,6 +693,7 @@ list_external_keys (CTRL ctrl, STRLIST names, FILE *fp)
|
|||||||
rc = gpgsm_dirmngr_lookup (ctrl, names, list_external_cb, &parm);
|
rc = gpgsm_dirmngr_lookup (ctrl, names, list_external_cb, &parm);
|
||||||
if (rc)
|
if (rc)
|
||||||
log_error ("listing external keys failed: %s\n", gpg_strerror (rc));
|
log_error ("listing external keys failed: %s\n", gpg_strerror (rc));
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* List all keys or just the key given as NAMES.
|
/* List all keys or just the key given as NAMES.
|
||||||
@ -696,11 +706,14 @@ list_external_keys (CTRL ctrl, STRLIST names, FILE *fp)
|
|||||||
Bit 6: list internal keys
|
Bit 6: list internal keys
|
||||||
Bit 7: list external keys
|
Bit 7: list external keys
|
||||||
*/
|
*/
|
||||||
void
|
gpg_error_t
|
||||||
gpgsm_list_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
gpgsm_list_keys (CTRL ctrl, STRLIST names, FILE *fp, unsigned int mode)
|
||||||
{
|
{
|
||||||
|
gpg_error_t err = 0;
|
||||||
|
|
||||||
if ((mode & (1<<6)))
|
if ((mode & (1<<6)))
|
||||||
list_internal_keys (ctrl, names, fp, (mode & 3));
|
err = list_internal_keys (ctrl, names, fp, (mode & 3));
|
||||||
if ((mode & (1<<7)))
|
if (!err && (mode & (1<<7)))
|
||||||
list_external_keys (ctrl, names, fp);
|
err = list_external_keys (ctrl, names, fp);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -651,6 +651,7 @@ do_listkeys (ASSUAN_CONTEXT ctx, char *line, int mode)
|
|||||||
char *p;
|
char *p;
|
||||||
STRLIST list, sl;
|
STRLIST list, sl;
|
||||||
unsigned int listmode;
|
unsigned int listmode;
|
||||||
|
gpg_error_t err;
|
||||||
|
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return set_error (General_Error, "no data stream");
|
return set_error (General_Error, "no data stream");
|
||||||
@ -684,9 +685,9 @@ do_listkeys (ASSUAN_CONTEXT ctx, char *line, int mode)
|
|||||||
listmode |= (1<<6);
|
listmode |= (1<<6);
|
||||||
if (ctrl->server_local->list_external)
|
if (ctrl->server_local->list_external)
|
||||||
listmode |= (1<<7);
|
listmode |= (1<<7);
|
||||||
gpgsm_list_keys (assuan_get_pointer (ctx), list, fp, listmode);
|
err = gpgsm_list_keys (assuan_get_pointer (ctx), list, fp, listmode);
|
||||||
free_strlist (list);
|
free_strlist (list);
|
||||||
return 0;
|
return map_to_assuan_status (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user