mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
agent: Add strings for use by future Pinentry versions.
* agent/call-pinentry.c (start_pinentry): Add more strings. -- We do this so that translations of these strings will be available at the time a pinentry implements features which require these strings. Signed-off-by: Werner Koch <wk@gnupg.org> This is a backport from master commit 02d5e1205489aa5027a87a64552eaf15984dc22d without the mode flag in the table.
This commit is contained in:
parent
78e0a30fb1
commit
3d3a58b796
@ -147,7 +147,7 @@ agent_reset_query (ctrl_t ctrl)
|
|||||||
disconnect that pinentry - we do this after the unlock so that a
|
disconnect that pinentry - we do this after the unlock so that a
|
||||||
stalled pinentry does not block other threads. Fixme: We should
|
stalled pinentry does not block other threads. Fixme: We should
|
||||||
have a timeout in Assuan for the disconnect operation. */
|
have a timeout in Assuan for the disconnect operation. */
|
||||||
static int
|
static int
|
||||||
unlock_pinentry (int rc)
|
unlock_pinentry (int rc)
|
||||||
{
|
{
|
||||||
assuan_context_t ctx = entry_ctx;
|
assuan_context_t ctx = entry_ctx;
|
||||||
@ -185,7 +185,7 @@ atfork_cb (void *opaque, int where)
|
|||||||
{
|
{
|
||||||
int iterator = 0;
|
int iterator = 0;
|
||||||
const char *name, *assname, *value;
|
const char *name, *assname, *value;
|
||||||
|
|
||||||
gcry_control (GCRYCTL_TERM_SECMEM);
|
gcry_control (GCRYCTL_TERM_SECMEM);
|
||||||
|
|
||||||
while ((name = session_env_list_stdenvnames (&iterator, &assname)))
|
while ((name = session_env_list_stdenvnames (&iterator, &assname)))
|
||||||
@ -194,7 +194,7 @@ atfork_cb (void *opaque, int where)
|
|||||||
ones which do have an assuan name but are conveyed using
|
ones which do have an assuan name but are conveyed using
|
||||||
environment variables, update the environment of the
|
environment variables, update the environment of the
|
||||||
forked process. */
|
forked process. */
|
||||||
if (!assname
|
if (!assname
|
||||||
|| !strcmp (name, "XAUTHORITY")
|
|| !strcmp (name, "XAUTHORITY")
|
||||||
|| !strcmp (name, "PINENTRY_USER_DATA"))
|
|| !strcmp (name, "PINENTRY_USER_DATA"))
|
||||||
{
|
{
|
||||||
@ -260,12 +260,12 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
entry_owner = ctrl;
|
entry_owner = ctrl;
|
||||||
|
|
||||||
if (entry_ctx)
|
if (entry_ctx)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (opt.verbose)
|
if (opt.verbose)
|
||||||
log_info ("starting a new PIN Entry\n");
|
log_info ("starting a new PIN Entry\n");
|
||||||
|
|
||||||
#ifdef HAVE_W32_SYSTEM
|
#ifdef HAVE_W32_SYSTEM
|
||||||
fflush (stdout);
|
fflush (stdout);
|
||||||
fflush (stderr);
|
fflush (stderr);
|
||||||
#endif
|
#endif
|
||||||
@ -310,7 +310,7 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
argv[1] = NULL;
|
argv[1] = NULL;
|
||||||
|
|
||||||
i=0;
|
i=0;
|
||||||
if (!opt.running_detached)
|
if (!opt.running_detached)
|
||||||
{
|
{
|
||||||
@ -346,7 +346,7 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
if (DBG_ASSUAN)
|
if (DBG_ASSUAN)
|
||||||
log_debug ("connection to PIN entry established\n");
|
log_debug ("connection to PIN entry established\n");
|
||||||
|
|
||||||
rc = assuan_transact (entry_ctx,
|
rc = assuan_transact (entry_ctx,
|
||||||
opt.no_grab? "OPTION no-grab":"OPTION grab",
|
opt.no_grab? "OPTION no-grab":"OPTION grab",
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
if (rc)
|
if (rc)
|
||||||
@ -431,7 +431,7 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
{
|
{
|
||||||
/* Provide a few default strings for use by the pinentries. This
|
/* Provide a few default strings for use by the pinentries. This
|
||||||
may help a pinentry to avoid implementing localization code. */
|
may help a pinentry to avoid implementing localization code. */
|
||||||
static struct { const char *key, *value; } tbl[] = {
|
static struct { const char *key, *value; int mode; } tbl[] = {
|
||||||
/* TRANSLATORS: These are labels for buttons etc used in
|
/* TRANSLATORS: These are labels for buttons etc used in
|
||||||
Pinentries. An underscore indicates that the next letter
|
Pinentries. An underscore indicates that the next letter
|
||||||
should be used as an accelerator. Double the underscore for
|
should be used as an accelerator. Double the underscore for
|
||||||
@ -439,8 +439,14 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
the second vertical bar. */
|
the second vertical bar. */
|
||||||
{ "ok", N_("|pinentry-label|_OK") },
|
{ "ok", N_("|pinentry-label|_OK") },
|
||||||
{ "cancel", N_("|pinentry-label|_Cancel") },
|
{ "cancel", N_("|pinentry-label|_Cancel") },
|
||||||
|
{ "yes", N_("|pinentry-label|_Yes") },
|
||||||
|
{ "no", N_("|pinentry-label|_No") },
|
||||||
{ "prompt", N_("|pinentry-label|PIN:") },
|
{ "prompt", N_("|pinentry-label|PIN:") },
|
||||||
{ "pwmngr", N_("|pinentry-label|_Save in password manager") },
|
{ "pwmngr", N_("|pinentry-label|_Save in password manager") },
|
||||||
|
{ "cf-visi",N_("Do you really want to make your "
|
||||||
|
"passphrase visible on the screen?") },
|
||||||
|
{ "tt-visi",N_("|pinentry-tt|Make passphrase visible") },
|
||||||
|
{ "tt-hide",N_("|pinentry-tt|Hide passphrase") },
|
||||||
{ NULL, NULL}
|
{ NULL, NULL}
|
||||||
};
|
};
|
||||||
char *optstr;
|
char *optstr;
|
||||||
@ -460,7 +466,7 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Tell the pinentry the name of a file it shall touch after having
|
/* Tell the pinentry the name of a file it shall touch after having
|
||||||
messed with the tty. This is optional and only supported by
|
messed with the tty. This is optional and only supported by
|
||||||
newer pinentries and thus we do no error checking. */
|
newer pinentries and thus we do no error checking. */
|
||||||
@ -472,7 +478,7 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
if (tmpstr)
|
if (tmpstr)
|
||||||
{
|
{
|
||||||
char *optstr;
|
char *optstr;
|
||||||
|
|
||||||
if (asprintf (&optstr, "OPTION touch-file=%s", tmpstr ) < 0 )
|
if (asprintf (&optstr, "OPTION touch-file=%s", tmpstr ) < 0 )
|
||||||
;
|
;
|
||||||
else
|
else
|
||||||
@ -488,7 +494,7 @@ start_pinentry (ctrl_t ctrl)
|
|||||||
it will send the pid back and we will use an inquire to notify
|
it will send the pid back and we will use an inquire to notify
|
||||||
our client. The client may answer the inquiry either with END or
|
our client. The client may answer the inquiry either with END or
|
||||||
with CAN to cancel the pinentry. */
|
with CAN to cancel the pinentry. */
|
||||||
rc = assuan_transact (entry_ctx, "GETINFO pid",
|
rc = assuan_transact (entry_ctx, "GETINFO pid",
|
||||||
getinfo_pid_cb, &pinentry_pid,
|
getinfo_pid_cb, &pinentry_pid,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
if (rc)
|
if (rc)
|
||||||
@ -574,7 +580,7 @@ all_digitsp( const char *s)
|
|||||||
for (; *s && *s >= '0' && *s <= '9'; s++)
|
for (; *s && *s >= '0' && *s <= '9'; s++)
|
||||||
;
|
;
|
||||||
return !*s;
|
return !*s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return a new malloced string by unescaping the string S. Escaping
|
/* Return a new malloced string by unescaping the string S. Escaping
|
||||||
@ -593,7 +599,7 @@ unescape_passphrase_string (const unsigned char *s)
|
|||||||
while (*s && !spacep (s))
|
while (*s && !spacep (s))
|
||||||
{
|
{
|
||||||
if (*s == '%' && s[1] && s[2])
|
if (*s == '%' && s[1] && s[2])
|
||||||
{
|
{
|
||||||
s++;
|
s++;
|
||||||
*d = xtoi_2 (s);
|
*d = xtoi_2 (s);
|
||||||
if (!*d)
|
if (!*d)
|
||||||
@ -609,7 +615,7 @@ unescape_passphrase_string (const unsigned char *s)
|
|||||||
else
|
else
|
||||||
*d++ = *s++;
|
*d++ = *s++;
|
||||||
}
|
}
|
||||||
*d = 0;
|
*d = 0;
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -651,7 +657,7 @@ inq_quality (void *opaque, const char *line)
|
|||||||
line += 7;
|
line += 7;
|
||||||
while (*line == ' ')
|
while (*line == ' ')
|
||||||
line++;
|
line++;
|
||||||
|
|
||||||
pin = unescape_passphrase_string (line);
|
pin = unescape_passphrase_string (line);
|
||||||
if (!pin)
|
if (!pin)
|
||||||
rc = gpg_error_from_syserror ();
|
rc = gpg_error_from_syserror ();
|
||||||
@ -683,7 +689,7 @@ setup_qualitybar (void)
|
|||||||
char line[ASSUAN_LINELENGTH];
|
char line[ASSUAN_LINELENGTH];
|
||||||
char *tmpstr, *tmpstr2;
|
char *tmpstr, *tmpstr2;
|
||||||
const char *tooltip;
|
const char *tooltip;
|
||||||
|
|
||||||
/* TRANSLATORS: This string is displayed by Pinentry as the label
|
/* TRANSLATORS: This string is displayed by Pinentry as the label
|
||||||
for the quality bar. */
|
for the quality bar. */
|
||||||
tmpstr = try_percent_escape (_("Quality:"), "\t\r\n\f\v");
|
tmpstr = try_percent_escape (_("Quality:"), "\t\r\n\f\v");
|
||||||
@ -696,7 +702,7 @@ setup_qualitybar (void)
|
|||||||
; /* Ignore Unknown Command from old Pinentry versions. */
|
; /* Ignore Unknown Command from old Pinentry versions. */
|
||||||
else if (rc)
|
else if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
tmpstr2 = gnupg_get_help_string ("pinentry.qualitybar.tooltip", 0);
|
tmpstr2 = gnupg_get_help_string ("pinentry.qualitybar.tooltip", 0);
|
||||||
if (tmpstr2)
|
if (tmpstr2)
|
||||||
tooltip = tmpstr2;
|
tooltip = tmpstr2;
|
||||||
@ -833,7 +839,7 @@ agent_askpin (ctrl_t ctrl,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (initial_errtext)
|
if (initial_errtext)
|
||||||
{
|
{
|
||||||
snprintf (line, DIM(line)-1, "SETERROR %s", initial_errtext);
|
snprintf (line, DIM(line)-1, "SETERROR %s", initial_errtext);
|
||||||
line[DIM(line)-1] = 0;
|
line[DIM(line)-1] = 0;
|
||||||
rc = assuan_transact (entry_ctx, line,
|
rc = assuan_transact (entry_ctx, line,
|
||||||
@ -850,7 +856,7 @@ agent_askpin (ctrl_t ctrl,
|
|||||||
parm.buffer = (unsigned char*)pininfo->pin;
|
parm.buffer = (unsigned char*)pininfo->pin;
|
||||||
|
|
||||||
if (errtext)
|
if (errtext)
|
||||||
{
|
{
|
||||||
/* TRANSLATORS: The string is appended to an error message in
|
/* TRANSLATORS: The string is appended to an error message in
|
||||||
the pinentry. The %s is the actual error message, the
|
the pinentry. The %s is the actual error message, the
|
||||||
two %d give the current and maximum number of tries. */
|
two %d give the current and maximum number of tries. */
|
||||||
@ -928,7 +934,7 @@ agent_askpin (ctrl_t ctrl,
|
|||||||
|
|
||||||
/* Ask for the passphrase using the supplied arguments. The returned
|
/* Ask for the passphrase using the supplied arguments. The returned
|
||||||
passphrase needs to be freed by the caller. */
|
passphrase needs to be freed by the caller. */
|
||||||
int
|
int
|
||||||
agent_get_passphrase (ctrl_t ctrl,
|
agent_get_passphrase (ctrl_t ctrl,
|
||||||
char **retpass, const char *desc, const char *prompt,
|
char **retpass, const char *desc, const char *prompt,
|
||||||
const char *errtext, int with_qualitybar,
|
const char *errtext, int with_qualitybar,
|
||||||
@ -942,7 +948,7 @@ agent_get_passphrase (ctrl_t ctrl,
|
|||||||
|
|
||||||
*retpass = NULL;
|
*retpass = NULL;
|
||||||
if (opt.batch)
|
if (opt.batch)
|
||||||
return gpg_error (GPG_ERR_BAD_PASSPHRASE);
|
return gpg_error (GPG_ERR_BAD_PASSPHRASE);
|
||||||
|
|
||||||
rc = start_pinentry (ctrl);
|
rc = start_pinentry (ctrl);
|
||||||
if (rc)
|
if (rc)
|
||||||
@ -1035,9 +1041,9 @@ agent_get_passphrase (ctrl_t ctrl,
|
|||||||
displayed to allow the user to easily return a GPG_ERR_CANCELED.
|
displayed to allow the user to easily return a GPG_ERR_CANCELED.
|
||||||
if the Pinentry does not support this, the user can still cancel by
|
if the Pinentry does not support this, the user can still cancel by
|
||||||
closing the Pinentry window. */
|
closing the Pinentry window. */
|
||||||
int
|
int
|
||||||
agent_get_confirmation (ctrl_t ctrl,
|
agent_get_confirmation (ctrl_t ctrl,
|
||||||
const char *desc, const char *ok,
|
const char *desc, const char *ok,
|
||||||
const char *notok, int with_cancel)
|
const char *notok, int with_cancel)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@ -1111,7 +1117,7 @@ agent_get_confirmation (ctrl_t ctrl,
|
|||||||
text OK_BTN (which may be NULL to use the default of "OK") and waut
|
text OK_BTN (which may be NULL to use the default of "OK") and waut
|
||||||
for the user to hit this button. The return value is not
|
for the user to hit this button. The return value is not
|
||||||
relevant. */
|
relevant. */
|
||||||
int
|
int
|
||||||
agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn)
|
agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@ -1145,7 +1151,7 @@ agent_show_message (ctrl_t ctrl, const char *desc, const char *ok_btn)
|
|||||||
if (rc)
|
if (rc)
|
||||||
return unlock_pinentry (rc);
|
return unlock_pinentry (rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = assuan_transact (entry_ctx, "CONFIRM --one-button", NULL, NULL, NULL,
|
rc = assuan_transact (entry_ctx, "CONFIRM --one-button", NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL);
|
NULL, NULL, NULL);
|
||||||
if (rc && gpg_err_source (rc) && gpg_err_code (rc) == GPG_ERR_ASS_CANCELED)
|
if (rc && gpg_err_source (rc) && gpg_err_code (rc) == GPG_ERR_ASS_CANCELED)
|
||||||
@ -1165,7 +1171,7 @@ popup_message_thread (void *arg)
|
|||||||
allow the use of old Pinentries. Those old Pinentries will then
|
allow the use of old Pinentries. Those old Pinentries will then
|
||||||
show an additional Cancel button but that is mostly a visual
|
show an additional Cancel button but that is mostly a visual
|
||||||
annoyance. */
|
annoyance. */
|
||||||
assuan_transact (entry_ctx, "CONFIRM --one-button",
|
assuan_transact (entry_ctx, "CONFIRM --one-button",
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
popup_finished = 1;
|
popup_finished = 1;
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1178,7 +1184,7 @@ popup_message_thread (void *arg)
|
|||||||
as the message is not anymore required because the message is
|
as the message is not anymore required because the message is
|
||||||
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, const char *ok_btn)
|
agent_popup_message_start (ctrl_t ctrl, const char *desc, const char *ok_btn)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
@ -1239,7 +1245,7 @@ agent_popup_message_stop (ctrl_t ctrl)
|
|||||||
if (!popup_tid || !entry_ctx)
|
if (!popup_tid || !entry_ctx)
|
||||||
{
|
{
|
||||||
log_debug ("agent_popup_message_stop called with no active popup\n");
|
log_debug ("agent_popup_message_stop called with no active popup\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pid = assuan_get_pid (entry_ctx);
|
pid = assuan_get_pid (entry_ctx);
|
||||||
@ -1254,7 +1260,7 @@ agent_popup_message_stop (ctrl_t ctrl)
|
|||||||
&& pid != 0)
|
&& pid != 0)
|
||||||
{
|
{
|
||||||
HANDLE process = (HANDLE) pid;
|
HANDLE process = (HANDLE) pid;
|
||||||
|
|
||||||
/* Arbitrary error code. */
|
/* Arbitrary error code. */
|
||||||
TerminateProcess (process, 1);
|
TerminateProcess (process, 1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user