1
0
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:
Werner Koch 2015-05-11 10:25:09 +02:00
parent 78e0a30fb1
commit 3d3a58b796
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B

View File

@ -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);
} }