mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
agent/
* protect-tool.c (get_passphrase): New arg OPT_CHECK. (get_new_passphrase): Enable OTP_CHECK on the first call. * command.c (cmd_get_passphrase): Implement option --check. * gpg-agent.c (MIN_PASSPHRASE_LEN): New (parse_rereadable_options): New option --min-passphrase-len. * genkey.c (check_passphrase_constraints): New. (agent_genkey, agent_protect_and_store): Call new function. Fix memory leak. * call-pinentry.c (agent_askpin): Allow translation of the displayed error message. (agent_popup_message_start): Remove arg CANCEL_BTN. (popup_message_thread): Use --one-button option. * command.c (cmd_passwd): Now that we don't distinguish between assuan and regular error codes we can jump to the end on error. common/ * simple-pwquery.c (simple_pwquery): New arg OPT_CHECK.
This commit is contained in:
parent
09bc5abc92
commit
6cee3e66c2
5
NEWS
5
NEWS
@ -8,6 +8,11 @@ Noteworthy changes in version 2.0.2 (unreleased)
|
|||||||
prompt for a new passphrase to be repeated. This is useful to help
|
prompt for a new passphrase to be repeated. This is useful to help
|
||||||
memorize a new passphrase. The default is 1 repetition.
|
memorize a new passphrase. The default is 1 repetition.
|
||||||
|
|
||||||
|
* Using a PIN pad does now also for for the signing key.
|
||||||
|
|
||||||
|
* A warning is displayed if a new passphrase is too short. New
|
||||||
|
option --min-passphrase-len defaults to 8.
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 2.0.1 (2006-11-28)
|
Noteworthy changes in version 2.0.1 (2006-11-28)
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
5
TODO
5
TODO
@ -118,3 +118,8 @@
|
|||||||
|
|
||||||
* Cleanup m4/ on next gettext update
|
* Cleanup m4/ on next gettext update
|
||||||
There is at least one couple of duplicate files: inttype[_-]h.m4.
|
There is at least one couple of duplicate files: inttype[_-]h.m4.
|
||||||
|
|
||||||
|
* UTF-8
|
||||||
|
** we need a function to count characters.
|
||||||
|
Something like utf8_strlen. This is needed to correclty count the
|
||||||
|
lengtgh of a passphrase.
|
||||||
|
@ -1,3 +1,25 @@
|
|||||||
|
2007-01-25 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* protect-tool.c (get_passphrase): New arg OPT_CHECK.
|
||||||
|
(get_new_passphrase): Enable OTP_CHECK on the first call.
|
||||||
|
* command.c (cmd_get_passphrase): Implement option --check.
|
||||||
|
|
||||||
|
2007-01-24 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* gpg-agent.c (MIN_PASSPHRASE_LEN): New
|
||||||
|
(parse_rereadable_options): New option --min-passphrase-len.
|
||||||
|
* genkey.c (check_passphrase_constraints): New.
|
||||||
|
(agent_genkey, agent_protect_and_store): Call new function. Fix
|
||||||
|
memory leak.
|
||||||
|
|
||||||
|
* call-pinentry.c (agent_askpin): Allow translation of the displayed
|
||||||
|
error message.
|
||||||
|
(agent_popup_message_start): Remove arg CANCEL_BTN.
|
||||||
|
(popup_message_thread): Use --one-button option.
|
||||||
|
|
||||||
|
* command.c (cmd_passwd): Now that we don't distinguish between
|
||||||
|
assuan and regular error codes we can jump to the end on error.
|
||||||
|
|
||||||
2006-12-07 David Shaw <dshaw@jabberwocky.com>
|
2006-12-07 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* Makefile.am: Link to iconv for jnlib dependency.
|
* Makefile.am: Link to iconv for jnlib dependency.
|
||||||
|
@ -78,6 +78,8 @@ struct
|
|||||||
unsigned long max_cache_ttl; /* Default. */
|
unsigned long max_cache_ttl; /* Default. */
|
||||||
unsigned long max_cache_ttl_ssh; /* for SSH. */
|
unsigned long max_cache_ttl_ssh; /* for SSH. */
|
||||||
|
|
||||||
|
/* The require minmum length of a passphrase. */
|
||||||
|
unsigned int min_passphrase_len;
|
||||||
|
|
||||||
int running_detached; /* We are running detached from the tty. */
|
int running_detached; /* We are running detached from the tty. */
|
||||||
|
|
||||||
@ -222,8 +224,8 @@ int agent_get_passphrase (ctrl_t ctrl, char **retpass,
|
|||||||
const char *errtext);
|
const char *errtext);
|
||||||
int agent_get_confirmation (ctrl_t ctrl, const char *desc, const char *ok,
|
int agent_get_confirmation (ctrl_t ctrl, const char *desc, const char *ok,
|
||||||
const char *cancel);
|
const char *cancel);
|
||||||
int agent_popup_message_start (ctrl_t ctrl, const char *desc,
|
int agent_popup_message_start (ctrl_t ctrl,
|
||||||
const char *ok_btn, const char *cancel_btn);
|
const char *desc, const char *ok_btn);
|
||||||
void agent_popup_message_stop (ctrl_t ctrl);
|
void agent_popup_message_stop (ctrl_t ctrl);
|
||||||
|
|
||||||
|
|
||||||
@ -249,6 +251,7 @@ int agent_pkdecrypt (ctrl_t ctrl, const char *desc_text,
|
|||||||
membuf_t *outbuf);
|
membuf_t *outbuf);
|
||||||
|
|
||||||
/*-- genkey.c --*/
|
/*-- genkey.c --*/
|
||||||
|
int check_passphrase_constraints (ctrl_t ctrl, const char *pw);
|
||||||
int agent_genkey (ctrl_t ctrl,
|
int agent_genkey (ctrl_t ctrl,
|
||||||
const char *keyparam, size_t keyparmlen, membuf_t *outbuf);
|
const char *keyparam, size_t keyparmlen, membuf_t *outbuf);
|
||||||
int agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey);
|
int agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey);
|
||||||
|
@ -434,8 +434,10 @@ agent_askpin (ctrl_t ctrl,
|
|||||||
|
|
||||||
if (errtext)
|
if (errtext)
|
||||||
{
|
{
|
||||||
/* fixme: should we show the try count? It must be translated */
|
/* TRANLATORS: The string is appended to an error message in
|
||||||
snprintf (line, DIM(line)-1, "SETERROR %s (try %d of %d)",
|
the pinentry. The %s is the actual error message, the
|
||||||
|
two %d give the current and maximum number of tries. */
|
||||||
|
snprintf (line, DIM(line)-1, _("SETERROR %s (try %d of %d)"),
|
||||||
errtext, pininfo->failed_tries+1, pininfo->max_tries);
|
errtext, pininfo->failed_tries+1, pininfo->max_tries);
|
||||||
line[DIM(line)-1] = 0;
|
line[DIM(line)-1] = 0;
|
||||||
rc = assuan_transact (entry_ctx, line,
|
rc = assuan_transact (entry_ctx, line,
|
||||||
@ -627,7 +629,12 @@ agent_get_confirmation (ctrl_t ctrl,
|
|||||||
static void *
|
static void *
|
||||||
popup_message_thread (void *arg)
|
popup_message_thread (void *arg)
|
||||||
{
|
{
|
||||||
assuan_transact (entry_ctx, "CONFIRM", NULL, NULL, NULL, NULL, NULL, NULL);
|
/* We use the --one-button hack instead of the MESSAGE command to
|
||||||
|
allow the use of old Pinentries. Those old Pinentries will then
|
||||||
|
show an additional Cancel button but that is mostly a visual
|
||||||
|
annoyance. */
|
||||||
|
assuan_transact (entry_ctx, "CONFIRM --one-button",
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
popup_finished = 1;
|
popup_finished = 1;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -640,8 +647,7 @@ popup_message_thread (void *arg)
|
|||||||
system modal and all other attempts to use the pinentry will fail
|
system modal and all other attempts to use the pinentry will fail
|
||||||
(after a timeout). */
|
(after a timeout). */
|
||||||
int
|
int
|
||||||
agent_popup_message_start (ctrl_t ctrl, const char *desc,
|
agent_popup_message_start (ctrl_t ctrl, const char *desc, const char *ok_btn)
|
||||||
const char *ok_btn, const char *cancel_btn)
|
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
char line[ASSUAN_LINELENGTH];
|
char line[ASSUAN_LINELENGTH];
|
||||||
@ -668,14 +674,6 @@ agent_popup_message_start (ctrl_t ctrl, const char *desc,
|
|||||||
if (rc)
|
if (rc)
|
||||||
return unlock_pinentry (rc);
|
return unlock_pinentry (rc);
|
||||||
}
|
}
|
||||||
if (cancel_btn)
|
|
||||||
{
|
|
||||||
snprintf (line, DIM(line)-1, "SETCANCEL %s", cancel_btn);
|
|
||||||
line[DIM(line)-1] = 0;
|
|
||||||
rc = assuan_transact (entry_ctx, line, NULL,NULL,NULL,NULL,NULL,NULL);
|
|
||||||
if (rc)
|
|
||||||
return unlock_pinentry (rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
tattr = pth_attr_new();
|
tattr = pth_attr_new();
|
||||||
pth_attr_set (tattr, PTH_ATTR_JOINABLE, 1);
|
pth_attr_set (tattr, PTH_ATTR_JOINABLE, 1);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* command.c - gpg-agent command handler
|
/* command.c - gpg-agent command handler
|
||||||
* Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
* Copyright (C) 2001, 2002, 2003, 2004, 2005,
|
||||||
|
* 2006 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -804,7 +805,8 @@ send_back_passphrase (assuan_context_t ctx, int via_data, const char *pw)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* GET_PASSPHRASE [--data] <cache_id> [<error_message> <prompt> <description>]
|
/* GET_PASSPHRASE [--data] [--check] <cache_id>
|
||||||
|
[<error_message> <prompt> <description>]
|
||||||
|
|
||||||
This function is usually used to ask for a passphrase to be used
|
This function is usually used to ask for a passphrase to be used
|
||||||
for conventional encryption, but may also be used by programs which
|
for conventional encryption, but may also be used by programs which
|
||||||
@ -816,6 +818,10 @@ send_back_passphrase (assuan_context_t ctx, int via_data, const char *pw)
|
|||||||
|
|
||||||
If the option "--data" is used the passphrase is returned by usual
|
If the option "--data" is used the passphrase is returned by usual
|
||||||
data lines and not on the okay line.
|
data lines and not on the okay line.
|
||||||
|
|
||||||
|
If the option "--check" is used the passphrase constraints checks as
|
||||||
|
implemented by gpg-agent are applied. A check is not done if the
|
||||||
|
passphrase has been found in the cache.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -828,9 +834,10 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
|
|||||||
char *cacheid = NULL, *desc = NULL, *prompt = NULL, *errtext = NULL;
|
char *cacheid = NULL, *desc = NULL, *prompt = NULL, *errtext = NULL;
|
||||||
char *p;
|
char *p;
|
||||||
void *cache_marker;
|
void *cache_marker;
|
||||||
int opt_data;
|
int opt_data, opt_check;
|
||||||
|
|
||||||
opt_data = has_option (line, "--data");
|
opt_data = has_option (line, "--data");
|
||||||
|
opt_check = has_option (line, "--check");
|
||||||
line = skip_options (line);
|
line = skip_options (line);
|
||||||
|
|
||||||
cacheid = line;
|
cacheid = line;
|
||||||
@ -857,7 +864,7 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
|
|||||||
desc = p;
|
desc = p;
|
||||||
p = strchr (desc, ' ');
|
p = strchr (desc, ' ');
|
||||||
if (p)
|
if (p)
|
||||||
*p = 0; /* ignore garbage */
|
*p = 0; /* Ignore trailing garbage. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -895,7 +902,16 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
|
|||||||
if (desc)
|
if (desc)
|
||||||
plus_to_blank (desc);
|
plus_to_blank (desc);
|
||||||
|
|
||||||
rc = agent_get_passphrase (ctrl, &response, desc, prompt, errtext);
|
response = NULL;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
xfree (response);
|
||||||
|
rc = agent_get_passphrase (ctrl, &response, desc, prompt, errtext);
|
||||||
|
}
|
||||||
|
while (!rc
|
||||||
|
&& opt_check
|
||||||
|
&& check_passphrase_constraints (ctrl, response));
|
||||||
|
|
||||||
if (!rc)
|
if (!rc)
|
||||||
{
|
{
|
||||||
if (cacheid)
|
if (cacheid)
|
||||||
@ -1019,8 +1035,7 @@ cmd_passwd (assuan_context_t ctx, char *line)
|
|||||||
|
|
||||||
rc = parse_keygrip (ctx, line, grip);
|
rc = parse_keygrip (ctx, line, grip);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc; /* we can't jump to leave because this is already an
|
goto leave;
|
||||||
Assuan error code. */
|
|
||||||
|
|
||||||
rc = agent_key_from_file (ctrl, ctrl->server_local->keydesc,
|
rc = agent_key_from_file (ctrl, ctrl->server_local->keydesc,
|
||||||
grip, &shadow_info, CACHE_MODE_IGNORE, &s_skey);
|
grip, &shadow_info, CACHE_MODE_IGNORE, &s_skey);
|
||||||
@ -1036,6 +1051,8 @@ cmd_passwd (assuan_context_t ctx, char *line)
|
|||||||
|
|
||||||
xfree (ctrl->server_local->keydesc);
|
xfree (ctrl->server_local->keydesc);
|
||||||
ctrl->server_local->keydesc = NULL;
|
ctrl->server_local->keydesc = NULL;
|
||||||
|
|
||||||
|
leave:
|
||||||
gcry_sexp_release (s_skey);
|
gcry_sexp_release (s_skey);
|
||||||
xfree (shadow_info);
|
xfree (shadow_info);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
@ -237,7 +237,7 @@ getpin_cb (void *opaque, const char *info, char *buf, size_t maxbuf)
|
|||||||
}
|
}
|
||||||
else if (maxbuf == 1) /* Open the pinentry. */
|
else if (maxbuf == 1) /* Open the pinentry. */
|
||||||
{
|
{
|
||||||
rc = agent_popup_message_start (ctrl, info, NULL, NULL);
|
rc = agent_popup_message_start (ctrl, info, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
rc = gpg_error (GPG_ERR_INV_VALUE);
|
rc = gpg_error (GPG_ERR_INV_VALUE);
|
||||||
|
@ -71,6 +71,43 @@ store_key (gcry_sexp_t private, const char *passphrase, int force)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Check whether the passphrase PW is suitable. Returns 0 if the
|
||||||
|
passphrase is suitable and true if it is not and the user should be
|
||||||
|
asked to provide a different one. */
|
||||||
|
int
|
||||||
|
check_passphrase_constraints (ctrl_t ctrl, const char *pw)
|
||||||
|
{
|
||||||
|
gpg_error_t err;
|
||||||
|
unsigned int minlen = opt.min_passphrase_len;
|
||||||
|
|
||||||
|
if (!pw)
|
||||||
|
pw = "";
|
||||||
|
|
||||||
|
if (strlen (pw) < minlen ) /* FIXME: should be an utf-8 length. */
|
||||||
|
{
|
||||||
|
char *desc = xtryasprintf
|
||||||
|
( ngettext (_("Warning: You have entered a passphrase that%%0A"
|
||||||
|
"is obviously not secure. A passphrase should%%0A"
|
||||||
|
"be at least %u character long."),
|
||||||
|
_("Warning: You have entered a passphrase that%%0A"
|
||||||
|
"is obviously not secure. A passphrase should%%0A"
|
||||||
|
"be at least %u characters long."), minlen), minlen );
|
||||||
|
if (!desc)
|
||||||
|
return gpg_error_from_syserror ();
|
||||||
|
|
||||||
|
err = agent_get_confirmation (ctrl, desc,
|
||||||
|
_("Take this one anyway"),
|
||||||
|
_("Enter new passphrase"));
|
||||||
|
xfree (desc);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Callback function to compare the first entered PIN with the one
|
/* Callback function to compare the first entered PIN with the one
|
||||||
currently being entered. */
|
currently being entered. */
|
||||||
static int
|
static int
|
||||||
@ -125,6 +162,12 @@ agent_genkey (ctrl_t ctrl, const char *keyparam, size_t keyparamlen,
|
|||||||
initial_errtext = NULL;
|
initial_errtext = NULL;
|
||||||
if (!rc)
|
if (!rc)
|
||||||
{
|
{
|
||||||
|
if (check_passphrase_constraints (ctrl, pi->pin))
|
||||||
|
{
|
||||||
|
pi->failed_tries = 0;
|
||||||
|
pi2->failed_tries = 0;
|
||||||
|
goto next_try;
|
||||||
|
}
|
||||||
rc = agent_askpin (ctrl, text2, NULL, NULL, pi2);
|
rc = agent_askpin (ctrl, text2, NULL, NULL, pi2);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
{ /* The re-entered one did not match and the user did not
|
{ /* The re-entered one did not match and the user did not
|
||||||
@ -134,7 +177,11 @@ agent_genkey (ctrl_t ctrl, const char *keyparam, size_t keyparamlen,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
{
|
||||||
|
xfree (pi);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
if (!*pi->pin)
|
if (!*pi->pin)
|
||||||
{
|
{
|
||||||
xfree (pi);
|
xfree (pi);
|
||||||
@ -230,8 +277,15 @@ agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey)
|
|||||||
|
|
||||||
next_try:
|
next_try:
|
||||||
rc = agent_askpin (ctrl, text1, NULL, initial_errtext, pi);
|
rc = agent_askpin (ctrl, text1, NULL, initial_errtext, pi);
|
||||||
|
initial_errtext = NULL;
|
||||||
if (!rc)
|
if (!rc)
|
||||||
{
|
{
|
||||||
|
if (check_passphrase_constraints (ctrl, pi->pin))
|
||||||
|
{
|
||||||
|
pi->failed_tries = 0;
|
||||||
|
pi2->failed_tries = 0;
|
||||||
|
goto next_try;
|
||||||
|
}
|
||||||
rc = agent_askpin (ctrl, text2, NULL, NULL, pi2);
|
rc = agent_askpin (ctrl, text2, NULL, NULL, pi2);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
{ /* The re-entered one did not match and the user did not
|
{ /* The re-entered one did not match and the user did not
|
||||||
@ -241,7 +295,11 @@ agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
{
|
||||||
|
xfree (pi);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
if (!*pi->pin)
|
if (!*pi->pin)
|
||||||
{
|
{
|
||||||
xfree (pi);
|
xfree (pi);
|
||||||
|
@ -88,6 +88,7 @@ enum cmd_and_opt_values
|
|||||||
oDefCacheTTLSSH,
|
oDefCacheTTLSSH,
|
||||||
oMaxCacheTTL,
|
oMaxCacheTTL,
|
||||||
oMaxCacheTTLSSH,
|
oMaxCacheTTLSSH,
|
||||||
|
oMinPassphraseLen,
|
||||||
oUseStandardSocket,
|
oUseStandardSocket,
|
||||||
oNoUseStandardSocket,
|
oNoUseStandardSocket,
|
||||||
|
|
||||||
@ -148,6 +149,7 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
{ oDefCacheTTLSSH, "default-cache-ttl-ssh", 4, "@" },
|
{ oDefCacheTTLSSH, "default-cache-ttl-ssh", 4, "@" },
|
||||||
{ oMaxCacheTTL, "max-cache-ttl", 4, "@" },
|
{ oMaxCacheTTL, "max-cache-ttl", 4, "@" },
|
||||||
{ oMaxCacheTTLSSH, "max-cache-ttl-ssh", 4, "@" },
|
{ oMaxCacheTTLSSH, "max-cache-ttl-ssh", 4, "@" },
|
||||||
|
{ oMinPassphraseLen, "min-passphrase-len", 4, "@" },
|
||||||
{ oIgnoreCacheForSigning, "ignore-cache-for-signing", 0,
|
{ oIgnoreCacheForSigning, "ignore-cache-for-signing", 0,
|
||||||
N_("do not use the PIN cache when signing")},
|
N_("do not use the PIN cache when signing")},
|
||||||
{ oAllowMarkTrusted, "allow-mark-trusted", 0,
|
{ oAllowMarkTrusted, "allow-mark-trusted", 0,
|
||||||
@ -164,6 +166,7 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
#define DEFAULT_CACHE_TTL (10*60) /* 10 minutes */
|
#define DEFAULT_CACHE_TTL (10*60) /* 10 minutes */
|
||||||
#define DEFAULT_CACHE_TTL_SSH (30*60) /* 30 minutes */
|
#define DEFAULT_CACHE_TTL_SSH (30*60) /* 30 minutes */
|
||||||
#define MAX_CACHE_TTL (120*60) /* 2 hours */
|
#define MAX_CACHE_TTL (120*60) /* 2 hours */
|
||||||
|
#define MIN_PASSPHRASE_LEN (8)
|
||||||
|
|
||||||
|
|
||||||
/* flag to indicate that a shutdown was requested */
|
/* flag to indicate that a shutdown was requested */
|
||||||
@ -403,6 +406,7 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread)
|
|||||||
opt.def_cache_ttl_ssh = DEFAULT_CACHE_TTL_SSH;
|
opt.def_cache_ttl_ssh = DEFAULT_CACHE_TTL_SSH;
|
||||||
opt.max_cache_ttl = MAX_CACHE_TTL;
|
opt.max_cache_ttl = MAX_CACHE_TTL;
|
||||||
opt.max_cache_ttl_ssh = MAX_CACHE_TTL;
|
opt.max_cache_ttl_ssh = MAX_CACHE_TTL;
|
||||||
|
opt.min_passphrase_len = MIN_PASSPHRASE_LEN;
|
||||||
opt.ignore_cache_for_signing = 0;
|
opt.ignore_cache_for_signing = 0;
|
||||||
opt.allow_mark_trusted = 0;
|
opt.allow_mark_trusted = 0;
|
||||||
opt.disable_scdaemon = 0;
|
opt.disable_scdaemon = 0;
|
||||||
@ -441,6 +445,8 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread)
|
|||||||
case oMaxCacheTTL: opt.max_cache_ttl = pargs->r.ret_ulong; break;
|
case oMaxCacheTTL: opt.max_cache_ttl = pargs->r.ret_ulong; break;
|
||||||
case oMaxCacheTTLSSH: opt.max_cache_ttl_ssh = pargs->r.ret_ulong; break;
|
case oMaxCacheTTLSSH: opt.max_cache_ttl_ssh = pargs->r.ret_ulong; break;
|
||||||
|
|
||||||
|
case oMinPassphraseLen: opt.min_passphrase_len = pargs->r.ret_ulong; break;
|
||||||
|
|
||||||
case oIgnoreCacheForSigning: opt.ignore_cache_for_signing = 1; break;
|
case oIgnoreCacheForSigning: opt.ignore_cache_for_signing = 1; break;
|
||||||
|
|
||||||
case oAllowMarkTrusted: opt.allow_mark_trusted = 1; break;
|
case oAllowMarkTrusted: opt.allow_mark_trusted = 1; break;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* protect-tool.c - A tool to test the secret key protection
|
/* protect-tool.c - A tool to test the secret key protection
|
||||||
* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -97,7 +97,7 @@ static const char *opt_passphrase;
|
|||||||
static char *opt_prompt;
|
static char *opt_prompt;
|
||||||
static int opt_status_msg;
|
static int opt_status_msg;
|
||||||
|
|
||||||
static char *get_passphrase (int promptno);
|
static char *get_passphrase (int promptno, int opt_check);
|
||||||
static char *get_new_passphrase (int promptno);
|
static char *get_new_passphrase (int promptno);
|
||||||
static void release_passphrase (char *pw);
|
static void release_passphrase (char *pw);
|
||||||
static int store_private_key (const unsigned char *grip,
|
static int store_private_key (const unsigned char *grip,
|
||||||
@ -363,7 +363,7 @@ read_and_protect (const char *fname)
|
|||||||
if (!key)
|
if (!key)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pw = get_passphrase (1);
|
pw = get_passphrase (1, 0);
|
||||||
rc = agent_protect (key, pw, &result, &resultlen);
|
rc = agent_protect (key, pw, &result, &resultlen);
|
||||||
release_passphrase (pw);
|
release_passphrase (pw);
|
||||||
xfree (key);
|
xfree (key);
|
||||||
@ -401,7 +401,7 @@ read_and_unprotect (const char *fname)
|
|||||||
if (!key)
|
if (!key)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rc = agent_unprotect (key, (pw=get_passphrase (1)), &result, &resultlen);
|
rc = agent_unprotect (key, (pw=get_passphrase (1, 0)), &result, &resultlen);
|
||||||
release_passphrase (pw);
|
release_passphrase (pw);
|
||||||
xfree (key);
|
xfree (key);
|
||||||
if (rc)
|
if (rc)
|
||||||
@ -684,7 +684,7 @@ import_p12_file (const char *fname)
|
|||||||
if (!buf)
|
if (!buf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
kparms = p12_parse ((unsigned char*)buf, buflen, (pw=get_passphrase (2)),
|
kparms = p12_parse ((unsigned char*)buf, buflen, (pw=get_passphrase (2, 0)),
|
||||||
import_p12_cert_cb, NULL);
|
import_p12_cert_cb, NULL);
|
||||||
release_passphrase (pw);
|
release_passphrase (pw);
|
||||||
xfree (buf);
|
xfree (buf);
|
||||||
@ -898,7 +898,7 @@ export_p12_file (const char *fname)
|
|||||||
unsigned char *tmpkey;
|
unsigned char *tmpkey;
|
||||||
size_t tmplen;
|
size_t tmplen;
|
||||||
|
|
||||||
rc = agent_unprotect (key, (pw=get_passphrase (1)), &tmpkey, &tmplen);
|
rc = agent_unprotect (key, (pw=get_passphrase (1, 0)), &tmpkey, &tmplen);
|
||||||
release_passphrase (pw);
|
release_passphrase (pw);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
@ -1162,10 +1162,11 @@ agent_exit (int rc)
|
|||||||
3 = for protecting a new pkcs#12 object
|
3 = for protecting a new pkcs#12 object
|
||||||
4 = for protecting an imported pkcs#12 in our system
|
4 = for protecting an imported pkcs#12 in our system
|
||||||
5 = reenter the passphrase
|
5 = reenter the passphrase
|
||||||
When adding 100 to the values, a "does not match - try again" errro message is shown.
|
When adding 100 to the values, a "does not match - try again" error
|
||||||
|
message is shown.
|
||||||
*/
|
*/
|
||||||
static char *
|
static char *
|
||||||
get_passphrase (int promptno)
|
get_passphrase (int promptno, int opt_check)
|
||||||
{
|
{
|
||||||
char *pw;
|
char *pw;
|
||||||
int err;
|
int err;
|
||||||
@ -1219,7 +1220,7 @@ get_passphrase (int promptno)
|
|||||||
|
|
||||||
pw = simple_pwquery (NULL,
|
pw = simple_pwquery (NULL,
|
||||||
error_msgno == 1? _("does not match - try again"):NULL,
|
error_msgno == 1? _("does not match - try again"):NULL,
|
||||||
_("Passphrase:"), desc, &err);
|
_("Passphrase:"), desc, opt_check, &err);
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
#ifdef ENABLE_NLS
|
||||||
if (orig_codeset)
|
if (orig_codeset)
|
||||||
@ -1251,16 +1252,16 @@ get_new_passphrase (int promptno)
|
|||||||
char *pw;
|
char *pw;
|
||||||
int i, secondpromptno;
|
int i, secondpromptno;
|
||||||
|
|
||||||
pw = get_passphrase (promptno);
|
pw = get_passphrase (promptno, 1);
|
||||||
if (!pw)
|
if (!pw)
|
||||||
return NULL; /* Canceled. */
|
return NULL; /* Canceled. */
|
||||||
if (!*pw)
|
if (!*pw)
|
||||||
return pw; /* Empty passphrase - no need to as for repeating it. */
|
return pw; /* Empty passphrase - no need to ask for repeating it. */
|
||||||
|
|
||||||
secondpromptno = 5;
|
secondpromptno = 5;
|
||||||
for (i=0; i < 3; i++)
|
for (i=0; i < 3; i++)
|
||||||
{
|
{
|
||||||
char *pw2 = get_passphrase (secondpromptno);
|
char *pw2 = get_passphrase (secondpromptno, 0);
|
||||||
if (!pw2)
|
if (!pw2)
|
||||||
{
|
{
|
||||||
xfree (pw);
|
xfree (pw);
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2007-01-25 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* simple-pwquery.c (simple_pwquery): New arg OPT_CHECK.
|
||||||
|
|
||||||
2006-12-13 David Shaw <dshaw@jabberwocky.com>
|
2006-12-13 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* Makefile.am (AM_CPPFLAGS): Include intl/ so we can reference the
|
* Makefile.am (AM_CPPFLAGS): Include intl/ so we can reference the
|
||||||
|
@ -334,6 +334,11 @@ Set the maximum time a cache entry used for SSH keys is valid to @var{n}
|
|||||||
seconds. After this time a cache entry will get expired even if it has
|
seconds. After this time a cache entry will get expired even if it has
|
||||||
been accessed recently. The default are 2 hours (7200 seconds).
|
been accessed recently. The default are 2 hours (7200 seconds).
|
||||||
|
|
||||||
|
@item --min-passphrase-len @var{n}
|
||||||
|
@opindex min-passphrase-len
|
||||||
|
Set the minimal length of a passphrase. When entereing a new passphrase
|
||||||
|
shorter than this value a warning will be displayed. Defaults to 8.
|
||||||
|
|
||||||
@item --pinentry-program @var{filename}
|
@item --pinentry-program @var{filename}
|
||||||
@opindex pinentry-program
|
@opindex pinentry-program
|
||||||
Use program @var{filename} as the PIN entry. The default is installation
|
Use program @var{filename} as the PIN entry. The default is installation
|
||||||
@ -972,7 +977,7 @@ special handling of passphrases. This command uses a syntax which helps
|
|||||||
clients to use the agent with minimum effort.
|
clients to use the agent with minimum effort.
|
||||||
|
|
||||||
@example
|
@example
|
||||||
GET_PASSPHRASE [--data] @var{cache_id} [@var{error_message} @var{prompt} @var{description}]
|
GET_PASSPHRASE [--data] [--check] @var{cache_id} [@var{error_message} @var{prompt} @var{description}]
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@var{cache_id} is expected to be a string used to identify a cached
|
@var{cache_id} is expected to be a string used to identify a cached
|
||||||
@ -999,6 +1004,10 @@ limited by the maximum length of a command. If the option
|
|||||||
@option{--data} is used, the passphrase is not returned on the OK line
|
@option{--data} is used, the passphrase is not returned on the OK line
|
||||||
but by regular data lines; this is the preferred method.
|
but by regular data lines; this is the preferred method.
|
||||||
|
|
||||||
|
If the option @option{--check} is used, the standard passphrase
|
||||||
|
constraints checks are applied. A check is not done if the passphrase
|
||||||
|
has been found in the cache.
|
||||||
|
|
||||||
@example
|
@example
|
||||||
CLEAR_PASSPHRASE @var{cache_id}
|
CLEAR_PASSPHRASE @var{cache_id}
|
||||||
@end example
|
@end example
|
||||||
|
@ -491,7 +491,7 @@ pincb (void *arg, const char *prompt, char **pinvalue)
|
|||||||
|
|
||||||
/* pin = simple_pwquery (NULL, NULL, prompt, */
|
/* pin = simple_pwquery (NULL, NULL, prompt, */
|
||||||
/* "We need the admin's PIN to store the key on the card", */
|
/* "We need the admin's PIN to store the key on the card", */
|
||||||
/* NULL); */
|
/* 0, NULL); */
|
||||||
/* if (!pin) */
|
/* if (!pin) */
|
||||||
/* return gpg_error (GPG_ERR_CANCELED); */
|
/* return gpg_error (GPG_ERR_CANCELED); */
|
||||||
|
|
||||||
|
@ -449,7 +449,7 @@ main (int argc, char **argv)
|
|||||||
" entire line to it as arguments.\n"
|
" entire line to it as arguments.\n"
|
||||||
"/showdef Print all definitions.\n"
|
"/showdef Print all definitions.\n"
|
||||||
"/cleardef Delete all definitions.\n"
|
"/cleardef Delete all definitions.\n"
|
||||||
"/sendfd FILE MODE Open FILE and pass descripor to server.\n"
|
"/sendfd FILE MODE Open FILE and pass descriptor to server.\n"
|
||||||
"/recvfd Receive FD from server and print. \n"
|
"/recvfd Receive FD from server and print. \n"
|
||||||
"/help Print this help.");
|
"/help Print this help.");
|
||||||
}
|
}
|
||||||
|
@ -485,7 +485,7 @@ confucius_get_pass (const char *cacheid, int again, int *canceled)
|
|||||||
|
|
||||||
pw = simple_pwquery (cacheid,
|
pw = simple_pwquery (cacheid,
|
||||||
again ? _("does not match - try again"):NULL,
|
again ? _("does not match - try again"):NULL,
|
||||||
_("Passphrase:"), NULL, &err);
|
_("Passphrase:"), NULL, 0, &err);
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
#ifdef ENABLE_NLS
|
||||||
if (orig_codeset)
|
if (orig_codeset)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user