From 482e000b8a7e336f342a7fac3b7379257e944b6e Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 18 Dec 2017 17:46:05 +0100 Subject: [PATCH 01/20] conf: New option --status-fd. * tools/gpgconf.c (oStatusFD): New const. (opts): New option --status-fd. (statusfp): New var. (set_status_fd): New. (gpgconf_write_status): New. (gpgconf_failure): New. (main): Set status fd and replace exit by gpgconf_failure. * tools/gpgconf-comp.c: Repalce exit by gpgconf_failure. (gc_process_gpgconf_conf): Print a few warning status messages. Signed-off-by: Werner Koch --- doc/tools.texi | 8 +++ tools/applygnupgdefaults | 2 +- tools/gpgconf-comp.c | 29 +++++++++- tools/gpgconf.c | 112 +++++++++++++++++++++++++++++++++------ tools/gpgconf.h | 4 ++ 5 files changed, 137 insertions(+), 18 deletions(-) diff --git a/doc/tools.texi b/doc/tools.texi index 5104beaa5..9301334c7 100644 --- a/doc/tools.texi +++ b/doc/tools.texi @@ -407,6 +407,14 @@ changing. This means that the changes will take effect at run-time, as far as this is possible. Otherwise, they will take effect at the next start of the respective backend programs. + +@item --status-fd @var{n} +@opindex status-fd +Write special status strings to the file descriptor @var{n}. This +program returns the status messages SUCCESS or FAILURE which are +helpful when the caller uses a double fork approach and can't easily +get the return code of the process. + @manpause @end table diff --git a/tools/applygnupgdefaults b/tools/applygnupgdefaults index 54365ce34..316509faf 100755 --- a/tools/applygnupgdefaults +++ b/tools/applygnupgdefaults @@ -1,5 +1,5 @@ #!/bin/sh -# Apply defaults from /etc/gnupg/gpg.conf to all users -*- sh -*- +# Apply defaults from /etc/gnupg/gpgconf.conf to all users -*- sh -*- # # Copyright 2007 Free Software Foundation, Inc. # diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c index b74ee04fd..f705f3ab5 100644 --- a/tools/gpgconf-comp.c +++ b/tools/gpgconf-comp.c @@ -48,6 +48,7 @@ #include "../common/i18n.h" #include "../common/exechelp.h" #include "../common/sysutils.h" +#include "../common/status.h" #include "../common/gc-opt-flags.h" #include "gpgconf.h" @@ -99,7 +100,7 @@ gc_error (int status, int errnum, const char *fmt, ...) { log_printf (NULL); log_printf ("fatal error (exit status %i)\n", status); - exit (status); + gpgconf_failure (gpg_error_from_errno (errnum)); } } @@ -1310,7 +1311,7 @@ gc_component_launch (int component) { es_fputs (_("Component not suitable for launching"), es_stderr); es_putc ('\n', es_stderr); - exit (1); + gpgconf_failure (0); } pgmname = gnupg_module_name (GNUPG_MODULE_NAME_CONNECT_AGENT); @@ -3757,6 +3758,10 @@ gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, { gc_error (0, 0, "missing rule at '%s', line %d", fname, lineno); result = -1; + gpgconf_write_status (STATUS_WARNING, + "gpgconf.conf %d file '%s' line %d " + "missing rule", + GPG_ERR_SYNTAX, fname, lineno); continue; } *p++ = 0; @@ -3786,6 +3791,10 @@ gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, { gc_error (0, 0, "missing component at '%s', line %d", fname, lineno); + gpgconf_write_status (STATUS_WARNING, + "gpgconf.conf %d file '%s' line %d " + " missing component", + GPG_ERR_NO_NAME, fname, lineno); result = -1; continue; } @@ -3797,6 +3806,10 @@ gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, { gc_error (0, 0, "unknown component at '%s', line %d", fname, lineno); + gpgconf_write_status (STATUS_WARNING, + "gpgconf.conf %d file '%s' line %d " + "unknown component", + GPG_ERR_UNKNOWN_NAME, fname, lineno); result = -1; } @@ -3809,6 +3822,10 @@ gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, { gc_error (0, 0, "missing option at '%s', line %d", fname, lineno); + gpgconf_write_status (STATUS_WARNING, + "gpgconf.conf %d file '%s' line %d " + "missing option", + GPG_ERR_INV_NAME, fname, lineno); result = -1; continue; } @@ -3821,6 +3838,10 @@ gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, { gc_error (0, 0, "unknown option at '%s', line %d", fname, lineno); + gpgconf_write_status (STATUS_WARNING, + "gpgconf.conf %d file '%s' line %d " + "unknown option", + GPG_ERR_UNKNOWN_OPTION, fname, lineno); result = -1; } } @@ -3837,6 +3858,10 @@ gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, { gc_error (0, 0, "syntax error in rule at '%s', line %d", fname, lineno); + gpgconf_write_status (STATUS_WARNING, + "gpgconf.conf %d file '%s' line %d " + "syntax error in rule", + GPG_ERR_SYNTAX, fname, lineno); result = -1; continue; } diff --git a/tools/gpgconf.c b/tools/gpgconf.c index 09b2a76e9..59085d8b5 100644 --- a/tools/gpgconf.c +++ b/tools/gpgconf.c @@ -29,6 +29,7 @@ #include "../common/i18n.h" #include "../common/sysutils.h" #include "../common/init.h" +#include "../common/status.h" /* Constants to identify the commands and options. */ @@ -45,6 +46,7 @@ enum cmd_and_opt_values oNoVerbose = 500, oHomedir, oBuilddir, + oStatusFD, aListComponents, aCheckPrograms, @@ -100,6 +102,7 @@ static ARGPARSE_OPTS opts[] = { oQuiet, "quiet", 0, N_("quiet") }, { oDryRun, "dry-run", 0, N_("do not make any changes") }, { oRuntime, "runtime", 0, N_("activate changes at runtime, if possible") }, + ARGPARSE_s_i (oStatusFD, "status-fd", N_("|FD|write status info to this FD")), /* hidden options */ { oHomedir, "homedir", 2, "@" }, { oBuilddir, "build-prefix", 2, "@" }, @@ -110,6 +113,11 @@ static ARGPARSE_OPTS opts[] = }; +/* The stream to output the status information. Status Output is disabled if + * this is NULL. */ +static estream_t statusfp; + + /* Print usage information and provide strings for help. */ static const char * my_strusage( int level ) @@ -159,6 +167,60 @@ get_outfp (estream_t *fp) } +/* Set the status FD. */ +static void +set_status_fd (int fd) +{ + static int last_fd = -1; + + if (fd != -1 && last_fd == fd) + return; + + if (statusfp && statusfp != es_stdout && statusfp != es_stderr) + es_fclose (statusfp); + statusfp = NULL; + if (fd == -1) + return; + + if (fd == 1) + statusfp = es_stdout; + else if (fd == 2) + statusfp = es_stderr; + else + statusfp = es_fdopen (fd, "w"); + if (!statusfp) + { + log_fatal ("can't open fd %d for status output: %s\n", + fd, gpg_strerror (gpg_error_from_syserror ())); + } + last_fd = fd; +} + + +/* Write a status line with code NO followed by the output of the + * printf style FORMAT. The caller needs to make sure that LFs and + * CRs are not printed. */ +void +gpgconf_write_status (int no, const char *format, ...) +{ + va_list arg_ptr; + + if (!statusfp) + return; /* Not enabled. */ + + es_fputs ("[GNUPG:] ", statusfp); + es_fputs (get_status_string (no), statusfp); + if (format) + { + es_putc (' ', statusfp); + va_start (arg_ptr, format); + es_vfprintf (statusfp, format, arg_ptr); + va_end (arg_ptr); + } + es_putc ('\n', statusfp); +} + + static void list_dirs (estream_t fp, char **names) { @@ -493,6 +555,9 @@ main (int argc, char **argv) case oHomedir: gnupg_set_homedir (pargs.r.ret_str); break; case oBuilddir: gnupg_set_builddir (pargs.r.ret_str); break; case oNull: opt.null = 1; break; + case oStatusFD: + set_status_fd (translate_sys2libc_fd_int (pargs.r.ret_int, 1)); + break; case aListDirs: case aListComponents: @@ -518,7 +583,7 @@ main (int argc, char **argv) } if (log_get_errorcount (0)) - exit (2); + gpgconf_failure (GPG_ERR_USER_2); /* Print a warning if an argument looks like an option. */ if (!opt.quiet && !(pargs.flags & ARGPARSE_FLAG_STOP_SEEN)) @@ -554,7 +619,7 @@ main (int argc, char **argv) es_putc ('\n', es_stderr); es_fputs (_("Need one component argument"), es_stderr); es_putc ('\n', es_stderr); - exit (2); + gpgconf_failure (GPG_ERR_USER_2); } else { @@ -563,7 +628,7 @@ main (int argc, char **argv) { es_fputs (_("Component not found"), es_stderr); es_putc ('\n', es_stderr); - exit (1); + gpgconf_failure (0); } if (cmd == aCheckOptions) gc_component_check_options (idx, get_outfp (&outfp), NULL); @@ -571,7 +636,7 @@ main (int argc, char **argv) { gc_component_retrieve_options (idx); if (gc_process_gpgconf_conf (NULL, 1, 0, NULL)) - exit (1); + gpgconf_failure (0); if (cmd == aListOptions) gc_component_list_options (idx, get_outfp (&outfp)); else if (cmd == aChangeOptions) @@ -589,14 +654,14 @@ main (int argc, char **argv) es_putc ('\n', es_stderr); es_fputs (_("Need one component argument"), es_stderr); es_putc ('\n', es_stderr); - exit (2); + gpgconf_failure (GPG_ERR_USER_2); } else if (!strcmp (fname, "all")) { if (cmd == aLaunch) { if (gc_component_launch (-1)) - exit (1); + gpgconf_failure (0); } else { @@ -613,12 +678,12 @@ main (int argc, char **argv) { es_fputs (_("Component not found"), es_stderr); es_putc ('\n', es_stderr); - exit (1); + gpgconf_failure (0); } else if (cmd == aLaunch) { if (gc_component_launch (idx)) - exit (1); + gpgconf_failure (0); } else { @@ -646,7 +711,7 @@ main (int argc, char **argv) { es_fputs (_("Component not found"), es_stderr); es_putc ('\n', es_stderr); - exit (1); + gpgconf_failure (0); } else { @@ -657,12 +722,12 @@ main (int argc, char **argv) case aListConfig: if (gc_process_gpgconf_conf (fname, 0, 0, get_outfp (&outfp))) - exit (1); + gpgconf_failure (0); break; case aCheckConfig: if (gc_process_gpgconf_conf (fname, 0, 0, NULL)) - exit (1); + gpgconf_failure (0); break; case aApplyDefaults: @@ -672,17 +737,17 @@ main (int argc, char **argv) es_putc ('\n', es_stderr); es_fputs (_("No argument allowed"), es_stderr); es_putc ('\n', es_stderr); - exit (2); + gpgconf_failure (GPG_ERR_USER_2); } gc_component_retrieve_options (-1); if (gc_process_gpgconf_conf (NULL, 1, 1, NULL)) - exit (1); + gpgconf_failure (0); break; case aApplyProfile: gc_component_retrieve_options (-1); if (gc_apply_profile (fname)) - exit (1); + gpgconf_failure (0); break; case aListDirs: @@ -697,7 +762,7 @@ main (int argc, char **argv) { es_fprintf (es_stderr, "usage: %s --query-swdb NAME [VERSION]\n", GPGCONF_NAME); - exit (2); + gpgconf_failure (GPG_ERR_USER_2); } get_outfp (&outfp); query_swdb (outfp, fname, argc > 1? argv[1] : NULL); @@ -804,5 +869,22 @@ main (int argc, char **argv) if (es_fclose (outfp)) gc_error (1, errno, "error closing '%s'", opt.outfile); + + if (log_get_errorcount (0)) + gpgconf_failure (0); + else + gpgconf_write_status (STATUS_SUCCESS, NULL); return 0; } + + +void +gpgconf_failure (gpg_error_t err) +{ + if (!err) + err = gpg_error (GPG_ERR_GENERAL); + gpgconf_write_status + (STATUS_FAILURE, "- %u", + gpg_err_code (err) == GPG_ERR_USER_2? GPG_ERR_EINVAL : err); + exit (gpg_err_code (err) == GPG_ERR_USER_2? 2 : 1); +} diff --git a/tools/gpgconf.h b/tools/gpgconf.h index d6d7627aa..8a061ef68 100644 --- a/tools/gpgconf.h +++ b/tools/gpgconf.h @@ -36,6 +36,10 @@ struct } opt; +/*-- gpgconf.c --*/ +void gpgconf_write_status (int no, const char *format, + ...) GPGRT_ATTR_PRINTF(2,3); +void gpgconf_failure (gpg_error_t err) GPGRT_ATTR_NORETURN; /*-- gpgconf-comp.c --*/ From 3a48455b0baec6e516e16370a63b1175af89e7af Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 19 Dec 2017 12:36:49 +0100 Subject: [PATCH 02/20] po: Fix a string in de and nl. Mark a string in ro and sk fuzzy. -- These wrong translations are propably due to accidently removing a fuzzy mark. A German translation (gpgsm audit feature) was actually reversed. A Dutch translation has an unused ": %s" at the end. I am not 100% of the Romanian and Slovak strings, thus I marked them as fuzzy. GnuPG-bug-id: 3619 Signed-off-by: Werner Koch --- po/de.po | 4 ++-- po/nl.po | 4 ++-- po/ro.po | 5 +++-- po/sk.po | 1 + 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/po/de.po b/po/de.po index e974ddcd7..540865066 100644 --- a/po/de.po +++ b/po/de.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg-2.1.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-11-02 17:36+0100\n" +"PO-Revision-Date: 2017-12-19 12:28+0100\n" "Last-Translator: Werner Koch \n" "Language-Team: German \n" "Language: de\n" @@ -955,7 +955,7 @@ msgid "Data decryption succeeded" msgstr "Entschlüsselung der Daten erfolgreich" msgid "Encryption algorithm supported" -msgstr "Verschlüsselungsverfahren %d%s wird nicht unterstützt" +msgstr "Verschlüsselungsverfahren wird unterstützt" msgid "Data verification succeeded" msgstr "Prüfung der Signatur erfolgreich" diff --git a/po/nl.po b/po/nl.po index 6c447ec51..f8a53e88a 100644 --- a/po/nl.po +++ b/po/nl.po @@ -30,7 +30,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 2.0.28\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2015-06-07 16:56+0200\n" +"PO-Revision-Date: 2017-12-19 12:28+0100\n" "Last-Translator: Frans Spiesschaert \n" "Language-Team: Debian Dutch l10n Team \n" "Language: nl\n" @@ -6501,7 +6501,7 @@ msgid "keybox `%s' created\n" msgstr "sleuteldoosje `%s' is aangemaakt\n" msgid "failed to get the fingerprint\n" -msgstr "opvragen van de vingerafdruk is mislukt: %s\n" +msgstr "opvragen van de vingerafdruk is mislukt\n" #, c-format msgid "problem looking for existing certificate: %s\n" diff --git a/po/ro.po b/po/ro.po index 30a99249d..fc061dc87 100644 --- a/po/ro.po +++ b/po/ro.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.2rc1\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2005-05-31 22:00-0500\n" +"PO-Revision-Date: 2017-12-19 12:30+0100\n" "Last-Translator: Laurentiu Buzdugan \n" "Language-Team: Romanian \n" "Language: ro\n" @@ -3078,8 +3078,9 @@ msgstr "" msgid "User ID \"%s\" is revoked." msgstr "ID utilizator \"%s\" a fost revocat." +#, fuzzy msgid "Are you sure you still want to sign it? (y/N) " -msgstr "Sunteţi sigur(ă) că doriţi să ştergeţi permanent \"%s\"? (d/N)" +msgstr "Sunteţi sigur(ă) că doriţi să ştergeţi permanent? (d/N)" msgid " Unable to sign.\n" msgstr " Nu pot semna.\n" diff --git a/po/sk.po b/po/sk.po index 6880122c0..9c1239689 100644 --- a/po/sk.po +++ b/po/sk.po @@ -4951,6 +4951,7 @@ msgstr "\"%s\" nie je súbor JPEG\n" msgid "Is this photo correct (y/N/q)? " msgstr "Je táto fotografia správna (a/N/u)? " +#, fuzzy msgid "unable to display photo ID!\n" msgstr "nemožno nastaviť exec-path na %s\n" From faecaf80f0b5f0dd50d4ff20a8ba3bd6a592fe1f Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 19 Dec 2017 12:39:25 +0100 Subject: [PATCH 03/20] po: Auto-update -- Mainly due to removed translations in debug messages. --- po/ca.po | 8 ++++---- po/cs.po | 7 +++---- po/da.po | 7 +++---- po/de.po | 7 +++---- po/el.po | 8 ++++---- po/eo.po | 8 ++++---- po/es.po | 7 +++---- po/et.po | 8 ++++---- po/fi.po | 8 ++++---- po/fr.po | 7 +++---- po/gl.po | 8 ++++---- po/hu.po | 8 ++++---- po/id.po | 8 ++++---- po/it.po | 8 ++++---- po/ja.po | 10 +++++----- po/nb.po | 7 +++---- po/pl.po | 7 +++---- po/pt.po | 8 ++++---- po/ro.po | 8 ++++---- po/ru.po | 7 +++---- po/sk.po | 8 ++++---- po/sv.po | 7 +++---- po/tr.po | 7 +++---- po/uk.po | 7 +++---- po/zh_CN.po | 8 ++++---- po/zh_TW.po | 7 +++---- 26 files changed, 93 insertions(+), 105 deletions(-) diff --git a/po/ca.po b/po/ca.po index 4d9ce668f..a65380cb6 100644 --- a/po/ca.po +++ b/po/ca.po @@ -495,10 +495,6 @@ msgstr "error mentre s'enviava a «%s»: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "AVÍS: els permissos són insegurs en %s «%s»\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "ha fallat l'actualització: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "s'està escrivint la clau secreta a «%s»\n" @@ -9153,6 +9149,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "ha fallat l'actualització: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/cs.po b/po/cs.po index 24d54c7c9..0a59a3374 100644 --- a/po/cs.po +++ b/po/cs.po @@ -470,10 +470,6 @@ msgstr "chyba při přilepování socketu na „%s“: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Varování: přístupová práva %s „%s“ nejsou bezpečná\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "volání listen() selhalo: %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "naslouchá se na socketu „%s“\n" @@ -8710,6 +8706,9 @@ msgstr "" "Syntaxe: gpg-check-pattern [volby] soubor_se_vzorem\n" "Prověří heslo zadané na vstupu proti souboru se vzory\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "volání listen() selhalo: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "neuzurpovat si klávesnici a myš" diff --git a/po/da.po b/po/da.po index abc12577e..e30e3b617 100644 --- a/po/da.po +++ b/po/da.po @@ -505,10 +505,6 @@ msgstr "fejl ved binding af sokkel til »%s«: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Advarsel: usikre rettigheder på %s »%s«\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "listen() mislykkedes: %s\n" - #, fuzzy, c-format #| msgid "listening on socket `%s'\n" msgid "listening on socket '%s'\n" @@ -9213,6 +9209,9 @@ msgstr "" "Syntaks: gpg-check-pattern [tilvalg] mønsterfil\n" "Kontroller en adgangsfrase angivet på stdin mod mønsterfilen\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "listen() mislykkedes: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "fang ikke tastatur og mus" diff --git a/po/de.po b/po/de.po index 540865066..4351d32bd 100644 --- a/po/de.po +++ b/po/de.po @@ -452,10 +452,6 @@ msgstr "Der Socket kann nicht an `%s' gebunden werden: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Zugriffsrechte für '%s' können nicht gesetzt werden: %s\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "Der listen()-Aufruf ist fehlgeschlagen: %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "Es wird auf Socket `%s' gehört\n" @@ -8759,6 +8755,9 @@ msgstr "" "Syntax: gpg-check-pattern [optionen] Musterdatei\n" "Die von stdin gelesene Passphrase gegen die Musterdatei prüfen\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "Der listen()-Aufruf ist fehlgeschlagen: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "Tastatur und Maus nicht \"grabben\"" diff --git a/po/el.po b/po/el.po index cc9439ecf..749b333ee 100644 --- a/po/el.po +++ b/po/el.po @@ -466,10 +466,6 @@ msgstr "σφάλμα στη αποστολή προς το `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: μη ασφαλείς άδειες στο %s \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "η ενημέρωση απέτυχε: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "εγγραφή του μυστικού κλειδιού στο `%s'\n" @@ -8979,6 +8975,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "η ενημέρωση απέτυχε: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/eo.po b/po/eo.po index 611b987ae..002e2dc17 100644 --- a/po/eo.po +++ b/po/eo.po @@ -466,10 +466,6 @@ msgstr "eraro dum sendo al '%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "aktualigo malsukcesis: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "skribas sekretan ŝlosilon al '%s'\n" @@ -8920,6 +8916,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "aktualigo malsukcesis: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/es.po b/po/es.po index 76d3952e5..a631ced9f 100644 --- a/po/es.po +++ b/po/es.po @@ -521,10 +521,6 @@ msgstr "error enlazando el socket con `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Aviso: permisos inseguros en %s \"%s\"\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "listen() falló: %s\n" - #, fuzzy, c-format #| msgid "listening on socket `%s'\n" msgid "listening on socket '%s'\n" @@ -9252,6 +9248,9 @@ msgstr "" "Compara frase contraseña dada en entrada estándar con un fichero de " "patrones\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "listen() falló: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "no acaparar teclado y ratón" diff --git a/po/et.po b/po/et.po index 66e905b5f..b6a12e4d4 100644 --- a/po/et.po +++ b/po/et.po @@ -463,10 +463,6 @@ msgstr "viga teate saatmisel serverile `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "HOIATUS: ebaturvalised õigused %s \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "uuendamine ebaõnnestus: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "kirjutan salajase võtme faili `%s'\n" @@ -8895,6 +8891,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "uuendamine ebaõnnestus: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/fi.po b/po/fi.po index 15f7ce7ce..96ed7355e 100644 --- a/po/fi.po +++ b/po/fi.po @@ -480,10 +480,6 @@ msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "VAROITUS: oikeudet kohteessa %s \"%s\" eivät ole turvallisia\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "päivitys epäonnistui: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" @@ -8957,6 +8953,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "päivitys epäonnistui: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/fr.po b/po/fr.po index fa1e87f2b..30f61bb59 100644 --- a/po/fr.po +++ b/po/fr.po @@ -467,10 +467,6 @@ msgstr "erreur de lien de la socket à « %s » : %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Avertissement : les droits de %s ne sont pas sûrs « %s »\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "échec de listen() : %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "écoute sur la socket « %s »\n" @@ -8935,6 +8931,9 @@ msgstr "" "Vérifier une phrase secrète donnée sur l'entrée standard par rapport à " "ficmotif\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "échec de listen() : %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "ne pas capturer le clavier et la souris" diff --git a/po/gl.po b/po/gl.po index 3b1870296..ac878c6df 100644 --- a/po/gl.po +++ b/po/gl.po @@ -467,10 +467,6 @@ msgstr "erro ao enviar a `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "AVISO: permisos inseguros en %s \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "a actualización fallou: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "gravando a chave secreta en `%s'\n" @@ -8986,6 +8982,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "a actualización fallou: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/hu.po b/po/hu.po index f18609df0..4afd8ef08 100644 --- a/po/hu.po +++ b/po/hu.po @@ -463,10 +463,6 @@ msgstr "Hiba %s-ra/-re küldéskor: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "FIGYELEM: nem biztonságos engedélyek: %s \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "Frissítés sikertelen: %s.\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "Írom a titkos kulcsot a %s állományba.\n" @@ -8925,6 +8921,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "Frissítés sikertelen: %s.\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/id.po b/po/id.po index 635ed7d55..e3f4b504c 100644 --- a/po/id.po +++ b/po/id.po @@ -468,10 +468,6 @@ msgstr "kesalahan mengirim ke `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Peringatan: permisi tidak aman pada %s \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "gagal memperbarui: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "menulis kunci rahasia ke `%s'\n" @@ -8918,6 +8914,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "gagal memperbarui: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/it.po b/po/it.po index fc4324447..1eb3a79c5 100644 --- a/po/it.po +++ b/po/it.po @@ -463,10 +463,6 @@ msgstr "errore leggendo `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "aggiornamento fallito: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "scrittura della chiave segreta in `%s'\n" @@ -8959,6 +8955,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "aggiornamento fallito: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/ja.po b/po/ja.po index a3e8ab86b..ac4ad784a 100644 --- a/po/ja.po +++ b/po/ja.po @@ -433,10 +433,6 @@ msgstr "'%s'でソケットのバインドのエラー: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "'%s'の許可が設定できません: %s\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "listen() に失敗しました: %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "ソケット'%s'でlisten\n" @@ -1342,7 +1338,8 @@ msgstr "認証鍵の鍵長は? (%u) " #, c-format msgid "The card will now be re-configured to generate a key of type: %s\n" -msgstr "カードは、今、こちらのタイプの鍵を生成するように再コンフィグされました: %s\n" +msgstr "" +"カードは、今、こちらのタイプの鍵を生成するように再コンフィグされました: %s\n" #, c-format msgid "rounded up to %u bits\n" @@ -8322,6 +8319,9 @@ msgstr "" "形式: gpg-check-pattern [オプション] パターンファイル\n" "パターンファイルに対して標準入力のパスフレーズを確認する\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "listen() に失敗しました: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "キーボードとマウスを占有しない" diff --git a/po/nb.po b/po/nb.po index 8be672407..eea3fd793 100644 --- a/po/nb.po +++ b/po/nb.po @@ -437,10 +437,6 @@ msgstr "feil under knytning av sokkel til «%s»: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "klarte ikke å endre tillatelser til «%s»: %s\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "listen() mislyktes: %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "lytter på sokkel «%s»\n" @@ -8440,6 +8436,9 @@ msgstr "" "Syntaks: gpg-check-pattern [valg] mønsterfil\n" "Kontroller passordfrase oppgitt på standard innkanal mot valgt mønsterfil\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "listen() mislyktes: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "ikke bruk tastatur og mus" diff --git a/po/pl.po b/po/pl.po index ef392ac41..74ade4fb5 100644 --- a/po/pl.po +++ b/po/pl.po @@ -494,10 +494,6 @@ msgstr "błąd podczas przypisywania gniazda do ,,%s'': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Ostrzeżenie: niebezpieczne prawa dostępu do %s ,,%s''\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "listen() nie powiodło się: %s\n" - #, fuzzy, c-format #| msgid "listening on socket `%s'\n" msgid "listening on socket '%s'\n" @@ -9281,6 +9277,9 @@ msgstr "" "Składnia: gpg-check-pattern [opcje] plik-wzorców\n" "Sprawdzanie hasła ze standardowego wejścia względem pliku wzorców\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "listen() nie powiodło się: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "nie przechwytywanie klawiatury i myszy" diff --git a/po/pt.po b/po/pt.po index 3caa5cab2..dab31d82c 100644 --- a/po/pt.po +++ b/po/pt.po @@ -468,10 +468,6 @@ msgstr "erro ao enviar para `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "AVISO: permissões pouco seguras em %s \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "actualização falhou: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "a escrever chave privada para `%s'\n" @@ -8927,6 +8923,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "actualização falhou: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/ro.po b/po/ro.po index fc061dc87..bf4daec45 100644 --- a/po/ro.po +++ b/po/ro.po @@ -478,10 +478,6 @@ msgstr "eroare trimitere la `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "AVERTISMENT: permisiuni nesigure (unsafe) pentru extensia `%s'\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "actualizarea a eşuat: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "scriu cheia secretă în `%s'\n" @@ -9003,6 +8999,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "actualizarea a eşuat: %s\n" + #~ msgid "Error: URL too long (limit is %d characters).\n" #~ msgstr "Eroare: URL prea lung (limita este de %d caractere).\n" diff --git a/po/ru.po b/po/ru.po index a2d038352..4bc3f09b1 100644 --- a/po/ru.po +++ b/po/ru.po @@ -444,10 +444,6 @@ msgstr "ошибка связывания сокета с '%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "не удалось задать права доступа для '%s': %s\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "сбой listen(): %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "слушаем сокет '%s'\n" @@ -8583,6 +8579,9 @@ msgstr "" "Синтаксис: gpg-check-pattern [параметры] файл_образцов\n" "Проверить фразу-пароль, поступающую из stdin, по файлу образцов\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "сбой listen(): %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "не захватывать клавиатуру и мышь" diff --git a/po/sk.po b/po/sk.po index 9c1239689..cb0a41fc3 100644 --- a/po/sk.po +++ b/po/sk.po @@ -468,10 +468,6 @@ msgstr "chyba pri posielaní na `%s': %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "VAROVANIE: prístupové práva pre %s nie sú nastavené bezpečne \"%s\"\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "aktualizácia zlyhala: %s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "zapisujem tajný kľúč do `%s'\n" @@ -8950,6 +8946,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "aktualizácia zlyhala: %s\n" + #, fuzzy #~ msgid "" #~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" diff --git a/po/sv.po b/po/sv.po index 8d94c9a89..d5da7cabe 100644 --- a/po/sv.po +++ b/po/sv.po @@ -523,10 +523,6 @@ msgstr "fel när \"%s\" bands till uttag: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "Varning: osäkra rättigheter på %s \"%s\"\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "listen() misslyckades: %s\n" - #, fuzzy, c-format #| msgid "listening on socket `%s'\n" msgid "listening on socket '%s'\n" @@ -9359,6 +9355,9 @@ msgstr "" "Syntax: gpg-check-pattern [flaggor] mönsterfil\n" "Kontrollera en lösenfras angiven på standard in mot mönsterfilen\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "listen() misslyckades: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "fånga inte tangentbord och mus" diff --git a/po/tr.po b/po/tr.po index cc77eb919..f5e08ebd3 100644 --- a/po/tr.po +++ b/po/tr.po @@ -489,10 +489,6 @@ msgstr "soket `%s'e bağlanırken hata: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "UYARI: %s üzerinde izinler güvensiz: \"%s\"\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "soket dinleme başarısız: %s\n" - #, fuzzy, c-format #| msgid "listening on socket `%s'\n" msgid "listening on socket '%s'\n" @@ -9265,6 +9261,9 @@ msgstr "" "Standart girdiden verilen anahtar parolasını örüntü dosyasıyla " "karşılaştırır\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "soket dinleme başarısız: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "klavye ve fare gaspedilmez" diff --git a/po/uk.po b/po/uk.po index 9316d8156..2881bb217 100644 --- a/po/uk.po +++ b/po/uk.po @@ -439,10 +439,6 @@ msgstr "помилка під час спроби прив’язування с msgid "can't set permissions of '%s': %s\n" msgstr "не вдалося встановити права доступу до «%s»: %s\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "помилка listen(): %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "очікування даних на сокеті «%s»\n" @@ -8693,6 +8689,9 @@ msgstr "" "Синтаксис: gpg-check-pattern [параметри] файл_шаблонів\n" "Перевірити пароль, вказаний у stdin, за допомогою файла_шаблонів\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "помилка listen(): %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "не захоплювати керування клавіатурою і мишею" diff --git a/po/zh_CN.po b/po/zh_CN.po index 4b3954c6b..9caeaef29 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -476,10 +476,6 @@ msgstr "在‘%s’中寻找信任度记录时出错:%s\n" msgid "can't set permissions of '%s': %s\n" msgstr "警告:扩展模块‘%s’权限不安全\n" -#, fuzzy, c-format -msgid "listen() failed: %s\n" -msgstr "更新失败:%s\n" - #, fuzzy, c-format msgid "listening on socket '%s'\n" msgstr "正在将私钥写至`%s'\n" @@ -8826,6 +8822,10 @@ msgid "" "Check a passphrase given on stdin against the patternfile\n" msgstr "" +#, fuzzy +#~ msgid "listen() failed: %s\n" +#~ msgstr "更新失败:%s\n" + #~ msgid "Error: URL too long (limit is %d characters).\n" #~ msgstr "错误:URL 太长(至多 %d 个字符)\n" diff --git a/po/zh_TW.po b/po/zh_TW.po index f997fa1b2..51b3798a8 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -446,10 +446,6 @@ msgstr "綁定 socket 至 '%s' 時出錯: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "警告: %s 的權限 \"%s\" 並不安全\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "listen() 失敗: %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "正在候聽 socket '%s'\n" @@ -8476,6 +8472,9 @@ msgstr "" "語法: gpg-check-pattern [選項] 樣式檔案\n" "用樣式檔案來檢查由標準輸入給定的密語\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "listen() 失敗: %s\n" + #~ msgid "do not grab keyboard and mouse" #~ msgstr "不要奪取鍵盤及滑鼠" From 7449063b1af2eef73d621a69cdb2fb713ab1ae6c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 19 Dec 2017 17:42:10 +0100 Subject: [PATCH 04/20] wks: New server options --check, --with-dir, with-file. * tools/gpg-wks-server.c (aCheck, oWithDir, oWithFile): New const. (opts): New options --check, --with-dir, and --with-file. (main): Call command_check_key. (command_list_domains): Implement option --with-dir. (fname_from_userid): New. (command_check_key): New. (command_remove_key): Implement existsing command. (command_revoke_key): Call command_remove_key as a simple implementation. Signed-off-by: Werner Koch --- doc/wks.texi | 37 +++++++- tools/gpg-wks-server.c | 195 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 215 insertions(+), 17 deletions(-) diff --git a/doc/wks.texi b/doc/wks.texi index 029dbf0c0..7f7d515b7 100644 --- a/doc/wks.texi +++ b/doc/wks.texi @@ -174,18 +174,23 @@ Display a brief help page and exit. .br .B gpg-wks-server .RI [ options ] +.B \-\-check-key +.I user-id +.br +.B gpg-wks-server +.RI [ options ] .B \-\-install-key .I file .br .B gpg-wks-server .RI [ options ] .B \-\-remove-key -.I mailaddr +.I user-id .br .B gpg-wks-server .RI [ options ] .B \-\-revoke-key -.I mailaddr +.I user-id @end ifset @mansect description @@ -208,8 +213,22 @@ The command @option{--list-domains} prints all configured domains. Further it creates missing directories for the configuration and prints warnings pertaining to problems in the configuration. -The commands @option{--install-key}, @option{--remove-key}, and -@option{--revoke-key} are not yet functional. +The command @option{--check-key} (or just @option{--check}) checks +whether a key with the given user-id is installed. The process return +success in this case; to also print a diagnostic, use option +@option{-v}. If the key is not installed a diagnostics is printed and +the process returns failure; to suppress the diagnostic, use option +@option{-q}. More than one user-id can be given; see also option +@option{with-file}. + +The command @option{--remove-key} uninstalls a key from the WKD. The +process return success in this case; to also print a diagnostic, use +option @option{-v}. If the key is not installed a diagnostics is +printed and the process returns failure; to suppress the diagnostic, +use option @option{-q}. + +The commands @option{--install-key} and @option{--revoke-key} are not +yet functional. @mansect options @@ -237,6 +256,16 @@ Requires installation of that command. Write the created mail also to @var{file}. Note that the value @code{-} for @var{file} would write it to stdout. +@item --with-dir +@opindex with-dir +Also print the directory name for each domain listed by command +@option{--list-domains}. + +@item --with-file +@opindex with-file +With command @option{--check-key} print for each user-id, the address, +'i' for installed key or 'n' for not installed key, and the filename. + @item --verbose @opindex verbose Enable extra informational output. diff --git a/tools/gpg-wks-server.c b/tools/gpg-wks-server.c index 7e3f05017..0b1d64261 100644 --- a/tools/gpg-wks-server.c +++ b/tools/gpg-wks-server.c @@ -66,11 +66,14 @@ enum cmd_and_opt_values aInstallKey, aRevokeKey, aRemoveKey, + aCheck, oGpgProgram, oSend, oFrom, oHeader, + oWithDir, + oWithFile, oDummy }; @@ -86,12 +89,15 @@ static ARGPARSE_OPTS opts[] = { ("run regular jobs")), ARGPARSE_c (aListDomains, "list-domains", ("list configured domains")), + ARGPARSE_c (aCheck, "check", + ("check whether a key is installed")), + ARGPARSE_c (aCheck, "check-key", "@"), ARGPARSE_c (aInstallKey, "install-key", - "|FILE|install a key from FILE into the WKD"), + "install a key from FILE into the WKD"), ARGPARSE_c (aRemoveKey, "remove-key", - "|ADDR|remove the key ADDR from the WKD"), + "remove a key from the WKD"), ARGPARSE_c (aRevokeKey, "revoke-key", - "|ADDR|mark the key ADDR in the WKD as revoked"), + "mark a key as revoked"), ARGPARSE_group (301, ("@\nOptions:\n ")), @@ -104,6 +110,8 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_s_s (oFrom, "from", "|ADDR|use ADDR as the default sender"), ARGPARSE_s_s (oHeader, "header" , "|NAME=VALUE|add \"NAME: VALUE\" as header to all mails"), + ARGPARSE_s_n (oWithDir, "with-dir", "@"), + ARGPARSE_s_n (oWithFile, "with-file", "@"), ARGPARSE_end () }; @@ -132,6 +140,13 @@ struct server_ctx_s }; typedef struct server_ctx_s *server_ctx_t; + +/* Flag for --with-dir. */ +static int opt_with_dir; +/* Flag for --with-file. */ +static int opt_with_file; + + /* Prototypes. */ static gpg_error_t get_domain_list (strlist_t *r_list); @@ -142,6 +157,7 @@ static gpg_error_t command_list_domains (void); static gpg_error_t command_install_key (const char *fname); static gpg_error_t command_remove_key (const char *mailaddr); static gpg_error_t command_revoke_key (const char *mailaddr); +static gpg_error_t command_check_key (const char *mailaddr); static gpg_error_t command_cron (void); @@ -220,10 +236,17 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts) case oOutput: opt.output = pargs->r.ret_str; break; + case oWithDir: + opt_with_dir = 1; + break; + case oWithFile: + opt_with_file = 1; + break; case aReceive: case aCron: case aListDomains: + case aCheck: case aInstallKey: case aRemoveKey: case aRevokeKey: @@ -243,7 +266,7 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts) int main (int argc, char **argv) { - gpg_error_t err; + gpg_error_t err, firsterr; ARGPARSE_ARGS pargs; enum cmd_and_opt_values cmd; @@ -360,16 +383,29 @@ main (int argc, char **argv) case aRemoveKey: if (argc != 1) - wrong_args ("--remove-key MAILADDR"); + wrong_args ("--remove-key USER-ID"); err = command_remove_key (*argv); break; case aRevokeKey: if (argc != 1) - wrong_args ("--revoke-key MAILADDR"); + wrong_args ("--revoke-key USER-ID"); err = command_revoke_key (*argv); break; + case aCheck: + if (!argc) + wrong_args ("--check USER-IDs"); + firsterr = 0; + for (; argc; argc--, argv++) + { + err = command_check_key (*argv); + if (!firsterr) + firsterr = err; + } + err = firsterr; + break; + default: usage (1); err = gpg_error (GPG_ERR_BUG); @@ -1776,7 +1812,11 @@ command_list_domains (void) domain = strrchr (sl->d, '/'); log_assert (domain); domain++; - es_printf ("%s\n", domain); + if (opt_with_dir) + es_printf ("%s %s\n", domain, sl->d); + else + es_printf ("%s\n", domain); + /* Check that the required directories are there. */ for (i=0; i < DIM (requireddirs); i++) @@ -1900,12 +1940,140 @@ command_install_key (const char *fname) } -/* Remove the key with mail address MAILADDR. */ +/* Return the filename and optioanlly the addrspec for USERID at + * R_FNAME and R_ADDRSPEC. R_ADDRSPEC might also be set on error. */ static gpg_error_t -command_remove_key (const char *mailaddr) +fname_from_userid (const char *userid, char **r_fname, char **r_addrspec) { - (void)mailaddr; - return gpg_error (GPG_ERR_NOT_IMPLEMENTED); + gpg_error_t err; + char *addrspec = NULL; + const char *domain; + char *hash = NULL; + const char *s; + char shaxbuf[32]; /* Used for SHA-1 and SHA-256 */ + + *r_fname = NULL; + if (r_addrspec) + *r_addrspec = NULL; + + addrspec = mailbox_from_userid (userid); + if (!addrspec) + { + if (opt.verbose) + log_info ("\"%s\" is not a proper mail address\n", userid); + err = gpg_error (GPG_ERR_INV_USER_ID); + goto leave; + } + + domain = strchr (addrspec, '@'); + log_assert (domain); + domain++; + + /* Hash user ID and create filename. */ + s = strchr (addrspec, '@'); + log_assert (s); + gcry_md_hash_buffer (GCRY_MD_SHA1, shaxbuf, addrspec, s - addrspec); + hash = zb32_encode (shaxbuf, 8*20); + if (!hash) + { + err = gpg_error_from_syserror (); + goto leave; + } + + *r_fname = make_filename_try (opt.directory, domain, "hu", hash, NULL); + if (!*r_fname) + err = gpg_error_from_syserror (); + else + err = 0; + + leave: + if (r_addrspec && addrspec) + *r_addrspec = addrspec; + else + xfree (addrspec); + xfree (hash); + return err; +} + + +/* Check whether the key with USER_ID is installed. */ +static gpg_error_t +command_check_key (const char *userid) +{ + gpg_error_t err; + char *addrspec = NULL; + char *fname = NULL; + + err = fname_from_userid (userid, &fname, &addrspec); + if (err) + goto leave; + + if (access (fname, R_OK)) + { + err = gpg_error_from_syserror (); + if (opt_with_file) + es_printf ("%s n %s\n", addrspec, fname); + if (gpg_err_code (err) == GPG_ERR_ENOENT) + { + if (!opt.quiet) + log_info ("key for '%s' is NOT installed\n", addrspec); + log_inc_errorcount (); + err = 0; + } + else + log_error ("error stating '%s': %s\n", fname, gpg_strerror (err)); + goto leave; + } + + if (opt_with_file) + es_printf ("%s i %s\n", addrspec, fname); + + if (opt.verbose) + log_info ("key for '%s' is installed\n", addrspec); + err = 0; + + leave: + xfree (fname); + xfree (addrspec); + return err; +} + + +/* Remove the key with mail address in USERID. */ +static gpg_error_t +command_remove_key (const char *userid) +{ + gpg_error_t err; + char *addrspec = NULL; + char *fname = NULL; + + err = fname_from_userid (userid, &fname, &addrspec); + if (err) + goto leave; + + if (gnupg_remove (fname)) + { + err = gpg_error_from_syserror (); + if (gpg_err_code (err) == GPG_ERR_ENOENT) + { + if (!opt.quiet) + log_info ("key for '%s' is not installed\n", addrspec); + log_inc_errorcount (); + err = 0; + } + else + log_error ("error removing '%s': %s\n", fname, gpg_strerror (err)); + goto leave; + } + + if (opt.verbose) + log_info ("key for '%s' removed\n", addrspec); + err = 0; + + leave: + xfree (fname); + xfree (addrspec); + return err; } @@ -1913,6 +2081,7 @@ command_remove_key (const char *mailaddr) static gpg_error_t command_revoke_key (const char *mailaddr) { - (void)mailaddr; - return gpg_error (GPG_ERR_NOT_IMPLEMENTED); + /* Remove should be different from removing but we have not yet + * defined a suitable way to do this. */ + return command_remove_key (mailaddr); } From c7b8ec6c8e57797f0b77dbf7fca85fb600323328 Mon Sep 17 00:00:00 2001 From: Ineiev Date: Wed, 13 Dec 2017 13:40:02 +0000 Subject: [PATCH 05/20] po: Update Russian translation --- po/ru.po | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/po/ru.po b/po/ru.po index 4bc3f09b1..793bb0b72 100644 --- a/po/ru.po +++ b/po/ru.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: GnuPG 2.2.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-11-02 17:41+0100\n" +"PO-Revision-Date: 2017-12-13 17:41+0100\n" "Last-Translator: Ineiev \n" "Language-Team: Russian \n" "Language: ru\n" @@ -1345,10 +1345,9 @@ msgstr "Какой Вам нужен размер ключа для шифров msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Какой Вам нужен размер ключа для удостоверения личности? (%u) " -#, fuzzy, c-format -#| msgid "The card will now be re-configured to generate a key of %u bits\n" +#, c-format msgid "The card will now be re-configured to generate a key of type: %s\n" -msgstr "Теперь карта будет перенастроена на генерацию ключа длиной %u бит\n" +msgstr "Теперь карта будет перенастроена на генерацию ключа типа %s\n" #, c-format msgid "rounded up to %u bits\n" From 43aaf60449036e870cc25b77fbb7312cf3fb534c Mon Sep 17 00:00:00 2001 From: Petr Pisar Date: Tue, 19 Dec 2017 19:50:30 +0100 Subject: [PATCH 06/20] po: Update Czech translation Signed-off-by: Werner Koch --- po/cs.po | 1339 +++++++++++++++++++++++------------------------------- 1 file changed, 562 insertions(+), 777 deletions(-) diff --git a/po/cs.po b/po/cs.po index 0a59a3374..cbf02cdba 100644 --- a/po/cs.po +++ b/po/cs.po @@ -3,7 +3,8 @@ # 2005 Free Software Foundation, Inc. # Magda Procházková 2001, # Roman Pavlik 2001, 2002, 2003, 2004, 2005. -# Petr Pisar , 2009, 2010, 2011, 2013, 2014, 2015. +# Petr Pisar , 2009, 2010, 2011, 2013, 2014, 2015, 2016. +# Petr Pisar , 2017. # # A "%%0A" is used by Pinentry to insert a line break. The double percent # sign is actually needed because it is also a printf format string. If you @@ -24,6 +25,7 @@ # zákon o elektronickém podpisu, : # kvalifikovaný certifikát/podpis # +# administrator → správce # cache → keš # distribution point → místo distribuce # DP (distribution point (of CRL)) → DP @@ -33,9 +35,9 @@ # msgid "" msgstr "" -"Project-Id-Version: gnupg2 2.1.10\n" +"Project-Id-Version: gnupg2 2.2.1\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2017-11-02 17:38+0100\n" +"PO-Revision-Date: 2017-11-17 10:33+01:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -174,10 +176,9 @@ msgstr "na kartě není autentizační klíč pro SSH: %s\n" msgid "no suitable card key found: %s\n" msgstr "nenalezen žádný vhodný klíč karty: %s\n" -#, fuzzy, c-format -#| msgid "error getting stored flags: %s\n" +#, c-format msgid "error getting list of cards: %s\n" -msgstr "chyba při získání uložených příznaků: %s\n" +msgstr "chyba při získávání seznamu karet: %s\n" #, c-format msgid "" @@ -329,10 +330,8 @@ msgstr "poběží v režimu démona (na pozadí)" msgid "run in server mode (foreground)" msgstr "poběží v režimu serveru (na popředí)" -#, fuzzy -#| msgid "run in server mode" msgid "run in supervised mode" -msgstr "pracovat v režimu serveru" +msgstr "poběží v režimu dohledu" msgid "verbose" msgstr "upovídaný režim" @@ -388,10 +387,8 @@ msgstr "nedovolit klientům označovat klíče za „důvěryhodné“" msgid "allow presetting passphrase" msgstr "umožnit přednastavení hesla" -#, fuzzy -#| msgid "allow caller to override the pinentry" msgid "disallow caller to override the pinentry" -msgstr "umožnit volajícímu přebít pinentry" +msgstr "zmemožnit volajícímu přebít pinentry" msgid "allow passphrase to be prompted through Emacs" msgstr "umožnit zadání hesla skrze Emacs" @@ -400,7 +397,7 @@ msgid "enable ssh support" msgstr "zapnout podporu pro OpenSSH" msgid "|ALGO|use ALGO to show ssh fingerprints" -msgstr "" +msgstr "|ALGORITMUS|ukazovat otkisky SSH pomocí ALGORITMU" msgid "enable putty support" msgstr "zapnout podporu pro PuTTY" @@ -464,11 +461,13 @@ msgstr "chyba při získávání soli pro socket\n" msgid "error binding socket to '%s': %s\n" msgstr "chyba při přilepování socketu na „%s“: %s\n" -# TODO: i18n of first %s -#, fuzzy, c-format -#| msgid "Warning: unsafe permissions on %s \"%s\"\n" +#, c-format msgid "can't set permissions of '%s': %s\n" -msgstr "Varování: přístupová práva %s „%s“ nejsou bezpečná\n" +msgstr "přístupová práva „%s“ nelze nastavit: %s\n" + +#, c-format +msgid "listen() failed: %s\n" +msgstr "volání listen() selhalo: %s\n" #, c-format msgid "listening on socket '%s'\n" @@ -752,10 +751,9 @@ msgstr "chyba v běhu „%s“: návratový kód %d\n" msgid "error running '%s': terminated\n" msgstr "chyba v běhu „%s“: násilně ukončeno\n" -#, fuzzy, c-format -#| msgid "waiting for process %d to terminate failed: %s\n" +#, c-format msgid "waiting for processes to terminate failed: %s\n" -msgstr "čekání na konec procesu %d se nezdařilo: %s\n" +msgstr "čekání na ukončení procesu se nezdařilo: %s\n" #, c-format msgid "error getting exit code of process %d: %s\n" @@ -782,10 +780,9 @@ msgstr "Varování: vlastnictví %s „%s“ není nastaveno bezpečně\n" msgid "Warning: unsafe permissions on %s \"%s\"\n" msgstr "Varování: přístupová práva %s „%s“ nejsou bezpečná\n" -#, fuzzy, c-format -#| msgid "waiting for the agent to come up ... (%ds)\n" +#, c-format msgid "waiting for file '%s' to become accessible ...\n" -msgstr "čeká se na agenta… (%d s)\n" +msgstr "čekání, až se soubor „%s“ stane přístupným…\n" #, c-format msgid "renaming '%s' to '%s' failed: %s\n" @@ -1186,10 +1183,10 @@ msgstr "" "neplatný znak (quoted-printable) v ASCII kódování – pravděpodobně byl použit " "špatný MTA\n" -#, fuzzy, c-format -#| msgid "not human readable" +# TODO: Pluralize +#, c-format msgid "[ not human readable (%zu bytes: %s%s) ]" -msgstr "není v přímo čitelném formátu" +msgstr "[ nečitelné pro lidi (%zu bajtů: %s%s) ]" msgid "" "a notation name must have only printable characters or spaces, and end with " @@ -1207,19 +1204,11 @@ msgstr "jméno uživatele nesmí obsahovat více než jeden znak „@“\n" msgid "a notation value must not use any control characters\n" msgstr "hodnota nemůže obsahovat žádné kontrolní znaky\n" -#, fuzzy -#| msgid "a notation name must not contain more than one '@' character\n" msgid "a notation name may not contain an '=' character\n" -msgstr "jméno uživatele nesmí obsahovat více než jeden znak „@“\n" +msgstr "jméno uživatele nesmí obsahovat znak „=“\n" -#, fuzzy -#| msgid "" -#| "a notation name must have only printable characters or spaces, and end " -#| "with an '='\n" msgid "a notation name must have only printable characters or spaces\n" -msgstr "" -"symbolické jméno smí obsahovat pouze písmena, číslice, tečky nebo podtržítka " -"a musí končit znakem „=“\n" +msgstr "jméno uživatele musí obsahovat pouze tisknutelné znaky nebo mezery\n" msgid "WARNING: invalid notation data found\n" msgstr "VAROVÁNÍ: nalezen neplatný formát zápisu data\n" @@ -1231,32 +1220,29 @@ msgstr "předání dotazu %s klientovi se nezdařilo\n" msgid "Enter passphrase: " msgstr "Vložte heslo: " -#, fuzzy, c-format -#| msgid "error creating keyring '%s': %s\n" +#, c-format msgid "error getting version from '%s': %s\n" -msgstr "chyba při vytváření souboru klíčů (keyring) „%s“: %s\n" +msgstr "chyba při získávání verze z „%s“: %s\n" #, c-format msgid "server '%s' is older than us (%s < %s)" -msgstr "" +msgstr "server „%s“ je starší než my (%s < %s)" -#, fuzzy, c-format -#| msgid "WARNING: " +#, c-format msgid "WARNING: %s\n" -msgstr "VAROVÁNÍ: " +msgstr "VAROVÁNÍ: %s\n" msgid "Note: Outdated servers may lack important security fixes.\n" msgstr "" +"Poznámka: Zastaralé servery mohou postrádat důležité bezpečnostní opravy.\n" -#, fuzzy, c-format -#| msgid "Please use the command \"toggle\" first.\n" +#, c-format msgid "Note: Use the command \"%s\" to restart them.\n" -msgstr "Prosím, nejdříve použijte příkaz „toggle“ (přepnout).\n" +msgstr "Poznámka: Restartovat je můžete příkazem „%s“.\n" -#, fuzzy, c-format -#| msgid "%s does not yet work with %s\n" +#, c-format msgid "%s is not compliant with %s mode\n" -msgstr "%s dosud není funkční s %s\n" +msgstr "%s není v souladu s režimem %s\n" #, c-format msgid "OpenPGP card not available: %s\n" @@ -1267,7 +1253,7 @@ msgid "OpenPGP card no. %s detected\n" msgstr "Nalezena OpenPGP karta číslo %s\n" msgid "can't do this in batch mode\n" -msgstr "nelze provést v dávkovém módu\n" +msgstr "nelze provést v dávkovém režimu\n" msgid "This command is only available for version 2 cards\n" msgstr "Tento příkaz je dostupný pouze pro karty verze 2\n" @@ -1279,7 +1265,7 @@ msgid "Your selection? " msgstr "Váš výběr? " msgid "[not set]" -msgstr "[není nastaven]" +msgstr "[není nastaveno]" msgid "male" msgstr "muž" @@ -1389,11 +1375,6 @@ msgstr "Jakou délku klíče pro šifrování si přejete? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Jakou délku klíče pro autentizaci si přejete? (%u) " -#, fuzzy, c-format -#| msgid "The card will now be re-configured to generate a key of %u bits\n" -msgid "The card will now be re-configured to generate a key of type: %s\n" -msgstr "Karta bude nyní přenastavena na generování klíče dlouhého %u bitů\n" - #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrouhleno na %u bitů\n" @@ -1426,7 +1407,7 @@ msgid "" "You should change them using the command --change-pin\n" msgstr "" "Prosím nezapomeňte, že tovární nastavení PINů je\n" -" PIN = „%s“ PIN administrátora = „%s“\n" +" PIN = „%s“ PIN správce = „%s“\n" "Měli byste je změnit příkazem --change-pin\n" msgid "Please select the type of key to generate:\n" @@ -1445,7 +1426,7 @@ msgid "Invalid selection.\n" msgstr "Neplatný výběr.\n" msgid "Please select where to store the key:\n" -msgstr "Prosím vyberte místo pro uchování klíče:\n" +msgstr "Prosím vyberte, kam uložit klíč:\n" #, c-format msgid "KEYTOCARD failed: %s\n" @@ -1468,7 +1449,7 @@ msgid "quit this menu" msgstr "ukončit toto menu" msgid "show admin commands" -msgstr "zobraz administrátorské příkazy" +msgstr "zobraz příkazy správce" msgid "show this help" msgstr "ukázat tuto pomoc" @@ -1519,13 +1500,13 @@ msgid "gpg/card> " msgstr "gpg/karta> " msgid "Admin-only command\n" -msgstr "pouze administrátorské příkazy\n" +msgstr "pouze příkazy správce\n" msgid "Admin commands are allowed\n" -msgstr "administrátorské příkazy jsou povoleny\n" +msgstr "příkazy správce jsou povoleny\n" msgid "Admin commands are not allowed\n" -msgstr "administrátorské příkazy nejsou povoleny\n" +msgstr "příkazy správce nejsou povoleny\n" msgid "Invalid command (try \"help\")\n" msgstr "Neplatný příkaz (zkuste „help“)\n" @@ -1553,7 +1534,7 @@ msgid "(unless you specify the key by fingerprint)\n" msgstr "(dokud neurčíte klíč jeho otiskem)\n" msgid "can't do this in batch mode without \"--yes\"\n" -msgstr "bez parametru „--yes“ to nemohu v dávkovém módu provést\n" +msgstr "bez parametru „--yes“ to nelze v dávkovém režimu provést\n" msgid "Delete this key from the keyring? (y/N) " msgstr "Smazat tento klíč ze souboru klíčů? (a/N) " @@ -1594,7 +1575,7 @@ msgid "error creating passphrase: %s\n" msgstr "chyba při vytváření hesla: %s\n" msgid "can't use a symmetric ESK packet due to the S2K mode\n" -msgstr "v módu S2K nelze použít symetrický ESK paket\n" +msgstr "v režimu S2K nelze použít symetrický ESK paket\n" #, c-format msgid "using cipher %s\n" @@ -1618,15 +1599,13 @@ msgid "" msgstr "" "VAROVÁNÍ: vyžádaná symetrická šifra %s (%d) nevyhovuje předvolbám příjemce\n" -#, fuzzy, c-format -#| msgid "you may not use cipher algorithm '%s' while in %s mode\n" +#, c-format msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "použití šifrovacího algoritmu „%s“ v módu %s není dovoleno\n" +msgstr "šifrovací algoritmus „%s“ se nesmí používat v režimu %s\n" -#, fuzzy, c-format -#| msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n" +#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" -msgstr "VAROVÁNÍ: „%s%s“ je zastaralý parametr – neúčinkuje\n" +msgstr "VAROVÁNÍ: klíč %s není vhodný pro šifrování v režimu %s\n" #, c-format msgid "" @@ -1644,10 +1623,9 @@ msgstr "vyžádaná symetrická šifra %s (%d) nevyhovuje předvolbám příjemc msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s zašifrovaný pro: „%s“\n" -#, fuzzy, c-format -#| msgid "you may not use %s while in %s mode\n" +#, c-format msgid "option '%s' may not be used in %s mode\n" -msgstr "použití %s není v módu %s dovoleno\n" +msgstr "volba „%s“ se nesmí používat v režimu %s\n" #, c-format msgid "%s encrypted data\n" @@ -1724,7 +1702,7 @@ msgid "remove as much as possible from key during export" msgstr "odstranit při exportu z klíče vše, co lze" msgid "use the GnuPG key backup format" -msgstr "" +msgstr "použít záložní formát klíče GnuPG" msgid " - skipped" msgstr " – přeskočeno" @@ -1759,24 +1737,17 @@ msgstr "[ID uživatele nenalezeno]" msgid "(check argument of option '%s')\n" msgstr "(zkontrolujte argument volby „%s“)\n" -#, fuzzy, c-format -#| msgid "" -#| "Warning: value '%s' for option '%s' should be a long key ID or a " -#| "fingerprint\n" +#, c-format msgid "Warning: '%s' should be a long key ID or a fingerprint\n" -msgstr "" -"Pozor: hodnota „%s“ volby „%s“ by měla být\n" -"dlouhý identifikátor klíče nebo jeho otisk\n" +msgstr "Pozor: „%s“ by měl být dlouhý identifikátor klíče nebo jeho otisk\n" -#, fuzzy, c-format -#| msgid "error closing %s: %s\n" +#, c-format msgid "error looking up: %s\n" -msgstr "chyba při zavírání chyba %s: %s\n" +msgstr "chyba při vyhledávání: %s\n" -#, fuzzy, c-format -#| msgid "error searching the keyring: %s\n" +#, c-format msgid "Warning: %s appears in the keyring %d times\n" -msgstr "chyba při prohledávání souboru klíčů (keyring): %s\n" +msgstr "Pozor: %s se nachází v souboru klíčů (keyring) %dkrát\n" #, c-format msgid "automatically retrieved '%s' via %s\n" @@ -1793,19 +1764,17 @@ msgstr "Chybí otisk" msgid "secret key \"%s\" not found: %s\n" msgstr "tajný klíč „%s“ nenalezen: %s\n" -#, fuzzy, c-format -#| msgid "using \"%s\" as default secret key\n" +#, c-format msgid "Warning: not using '%s' as default key: %s\n" -msgstr "jako výchozí tajný klíč se použije „%s“\n" +msgstr "Pozor: jako výchozí klíč se nepoužije „%s“: %s\n" -#, fuzzy, c-format -#| msgid "using \"%s\" as default secret key\n" +#, c-format msgid "using \"%s\" as default secret key for signing\n" -msgstr "jako výchozí tajný klíč se použije „%s“\n" +msgstr "jako výchozí tajný klíč pro podepisování se použije „%s“\n" #, c-format msgid "all values passed to '%s' ignored\n" -msgstr "" +msgstr "všechny hodnoty předány „%s“ se ignorují\n" # c-format #, c-format @@ -1816,10 +1785,9 @@ msgstr "Neplatný klíč %s změněn na platný pomocí --always-non-selfsigned- msgid "using subkey %s instead of primary key %s\n" msgstr "používám podklíč %s místo primárního klíče %s\n" -#, fuzzy, c-format -#| msgid "invalid argument for option \"%.50s\"\n" +#, c-format msgid "valid values for option '%s':\n" -msgstr "neplatný argument u volby „%.50s“\n" +msgstr "platné hodnoty pro volbu „%s“:\n" msgid "make a signature" msgstr "vytvořit podpis" @@ -1866,15 +1834,11 @@ msgstr "rychle vytvořit nový pár klíčů" msgid "quickly add a new user-id" msgstr "rychle přidat novou identitu uživatele" -#, fuzzy -#| msgid "quickly add a new user-id" msgid "quickly revoke a user-id" -msgstr "rychle přidat novou identitu uživatele" +msgstr "rychle odvolat identitu uživatele" -#, fuzzy -#| msgid "quickly generate a new key pair" msgid "quickly set a new expiration date" -msgstr "rychle vytvořit nový pár klíčů" +msgstr "rychle nastavit nové datum konce platnosti" msgid "full featured key pair generation" msgstr "komplexní vytvoření páru klíčů" @@ -1942,15 +1906,11 @@ msgstr "vypsat hash zprávy" msgid "run in server mode" msgstr "pracovat v režimu serveru" -#, fuzzy -#| msgid "|VALUE|set the TOFU policy for a key (good, unknown, bad, ask, auto)" msgid "|VALUE|set the TOFU policy for a key" -msgstr "" -"|HODNOTA|nastavit TOFU politiku klíči (good [dobrý], unknown [neznámý], bad " -"[špatný], ask [zeptat se], auto)" +msgstr "|HODNOTA|nastavit TOFU politiku klíči" msgid "create ascii armored output" -msgstr "vytvoř výstup zakódovaný pomocí ASCII" +msgstr "vytvořit výstup zapsaný v ASCII" msgid "|USER-ID|encrypt for USER-ID" msgstr "|ID_UŽIVATELE|šifrovat pro ID_UŽIVATELE" @@ -1962,7 +1922,7 @@ msgid "|N|set compress level to N (0 disables)" msgstr "|N|nastavit úroveň komprese na N (0 – žádná)" msgid "use canonical text mode" -msgstr "použít kanonický textový mód" +msgstr "použít kanonický textový režim" msgid "|FILE|write output to FILE" msgstr "|SOUBOR|zapsat výstup do SOUBORU" @@ -1981,18 +1941,8 @@ msgid "" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" -"(Pro kompletní seznam všech příkazů a možností použijte manuálové stránky.)\n" +"(Pro úplný seznam všech příkazů a voleb nahlédněte do manuálové stránky.)\n" -#, fuzzy -#| msgid "" -#| "@\n" -#| "Examples:\n" -#| "\n" -#| " -se -r Bob [file] sign and encrypt for user Bob\n" -#| " --clear-sign [file] make a clear text signature\n" -#| " --detach-sign [file] make a detached signature\n" -#| " --list-keys [names] show keys\n" -#| " --fingerprint [names] show fingerprints\n" msgid "" "@\n" "Examples:\n" @@ -2004,11 +1954,13 @@ msgid "" " --fingerprint [names] show fingerprints\n" msgstr "" "@\n" +"Příklady:\n" +"\n" " -se -r Bob [soubor] podepsat a zašifrovat pro uživatele Bob\n" -" --clear-sign [soubor] vytvořit podpis čitelného dokumentu\n" +" --clearsign [soubor] vytvořit podpis čitelného dokumentu\n" " --detach-sign [soubor] vytvořit podpis oddělený od dokumentu\n" -" --list-keys [jména] vypsat klíče\n" -" --fingerprint [jména] vypsat otisky\n" +" --list-keys [jména] ukázat klíče\n" +" --fingerprint [jména] ukázat otisky\n" msgid "Usage: @GPG@ [options] [files] (-h for help)" msgstr "Použití: @GPG@ [možnosti] [soubory] (-h pro nápovědu)" @@ -2178,10 +2130,9 @@ msgstr "Poznámka: %s není pro normální použití!\n" msgid "'%s' is not a valid signature expiration\n" msgstr "„%s“ není platná doba expirace podpisu\n" -#, fuzzy, c-format -#| msgid "line %d: not a valid email address\n" +#, c-format msgid "\"%s\" is not a proper mail address\n" -msgstr "řádek %d: neplatná e-mailová adresa\n" +msgstr "„%s“ není správná e-mailová adresa\n" #, c-format msgid "invalid pinentry mode '%s'\n" @@ -2208,10 +2159,9 @@ msgstr "%s:%d: neplatný parametr pro import\n" msgid "invalid import options\n" msgstr "neplatný parametr pro import\n" -#, fuzzy, c-format -#| msgid "invalid list options\n" +#, c-format msgid "invalid filter option: %s\n" -msgstr "neplatný parametr pro výpis\n" +msgstr "neplatná volba filtru: %s\n" #, c-format msgid "%s:%d: invalid export options\n" @@ -2329,10 +2279,10 @@ msgstr "" "nebo 3\n" msgid "Note: simple S2K mode (0) is strongly discouraged\n" -msgstr "Poznámka: jednoduchý mód S2K (0) je důrazně nedoporučován\n" +msgstr "Poznámka: jednoduchý režim S2K (0) je důrazně nedoporučován\n" msgid "invalid S2K mode; must be 0, 1 or 3\n" -msgstr "neplatný mód S2K; musí být 0, 1 nebo 3\n" +msgstr "neplatný režim S2K; musí být 0, 1 nebo 3\n" msgid "invalid default preferences\n" msgstr "neplatné implicitní předvolby\n" @@ -2350,15 +2300,13 @@ msgstr "neplatné uživatelské předvolby pro komprimaci\n" msgid "%s does not yet work with %s\n" msgstr "%s dosud není funkční s %s\n" -#, fuzzy, c-format -#| msgid "you may not use digest algorithm '%s' while in %s mode\n" +#, c-format msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "použití hashovacího algoritmu „%s“ v módu %s není dovoleno\n" +msgstr "hashovací algoritmus „%s“ se nesmí používat v režimu %s\n" -#, fuzzy, c-format -#| msgid "you may not use compression algorithm '%s' while in %s mode\n" +#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" -msgstr "použití kompresního algoritmu „%s“ v módu %s není dovoleno\n" +msgstr "kompresní algoritmus „%s“ se nesmí používat v režimu %s\n" #, c-format msgid "failed to initialize the TrustDB: %s\n" @@ -2375,18 +2323,16 @@ msgstr "symetrické šifrování „%s“ se nepovedlo: %s\n" msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "nelze použít --symmetric --encrypt s příkazem --s2k-mode 0\n" -#, fuzzy, c-format -#| msgid "you cannot use --symmetric --encrypt while in %s mode\n" +#, c-format msgid "you cannot use --symmetric --encrypt in %s mode\n" -msgstr "nelze použít --symmetric --encrypt v módu %s\n" +msgstr "nelze použít --symmetric --encrypt v režimu %s\n" msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "nelze použít --symmetric --sign --encrypt s příkazem --s2k-mode 0\n" -#, fuzzy, c-format -#| msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" +#, c-format msgid "you cannot use --symmetric --sign --encrypt in %s mode\n" -msgstr "nelze použít --symmetric --sign --encrypt v módu %s\n" +msgstr "nelze použít --symmetric --sign --encrypt v režimu %s\n" #, c-format msgid "keyserver send failed: %s\n" @@ -2400,10 +2346,9 @@ msgstr "získání dat z serveru klíčů se nezdařilo: %s\n" msgid "key export failed: %s\n" msgstr "export klíče se nepodařil: %s\n" -#, fuzzy, c-format -#| msgid "key export failed: %s\n" +#, c-format msgid "export as ssh key failed: %s\n" -msgstr "export klíče se nepodařil: %s\n" +msgstr "export jako SSH klíč se nepodařil: %s\n" #, c-format msgid "keyserver search failed: %s\n" @@ -2434,7 +2379,7 @@ msgid "'%s' does not appear to be a valid key ID, fingerprint or keygrip\n" msgstr "„%s“ nevypadá jako platné ID klíče, otisk klíče nebo keygrip\n" msgid "WARNING: no command supplied. Trying to guess what you mean ...\n" -msgstr "" +msgstr "POZOR: nezadán žádný příkaz. Váš záměr bude odhadnut…\n" msgid "Go ahead and type your message ...\n" msgstr "Začněte psát svou zprávu…\n" @@ -2458,7 +2403,7 @@ msgid "|FD|write status info to this FD" msgstr "|FD|zapsat informace o stavu do tohoto FD" msgid "|ALGO|reject signatures made with ALGO" -msgstr "" +msgstr "|ALGORITMUS|zamítnout podpisy založené na ALGORITMU" msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Použití: gpg [volby] [soubory] (-h pro pomoc)" @@ -2489,10 +2434,8 @@ msgstr "nemazat údaje o důvěře během importu" msgid "do not update the trustdb after import" msgstr "neaktualizovat databázi důvěry po importu" -#, fuzzy -#| msgid "show key fingerprint" msgid "show key during import" -msgstr "vypsat otisk klíče" +msgstr "při importu ukázat klíč" msgid "only accept updates to existing keys" msgstr "přijímat aktualizace pouze u existujících klíčů" @@ -2504,17 +2447,13 @@ msgid "remove as much as possible from key after import" msgstr "odstranit po importu z klíče vše, co lze" msgid "run import filters and export key immediately" -msgstr "" +msgstr "spustit importní filtry a exportovat klíč okamžitě" -#, fuzzy -#| msgid "assume input is in binary format" msgid "assume the GnuPG key backup format" -msgstr "předpokládat vstup v binárním formátu" +msgstr "předpokládat vstup ve formátu zálohy klíčů GnuPG" -#, fuzzy -#| msgid "show key fingerprint" msgid "repair keys on import" -msgstr "vypsat otisk klíče" +msgstr "při importu opravit klíče" #, c-format msgid "skipping block of type %d\n" @@ -2670,6 +2609,14 @@ msgstr "klíč %s: veřejný klíč „%s“ importován\n" msgid "key %s: doesn't match our copy\n" msgstr "klíč %s: neodpovídá naší kopii\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "klíč %s: nemohu najít originální blok klíče: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "klíč %s: nemohu číst originální blok klíče: %s\n" + #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "klíč %s: „%s“ 1 nový identifikátor uživatele\n" @@ -2755,14 +2702,6 @@ msgstr "Pro migraci „%s“ u každé karty spusťte: %s\n" msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "klíč %s: chybí veřejný klíč – nemohu aplikovat revokační certifikát\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "klíč %s: nemohu najít originální blok klíče: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "klíč %s: nemohu číst originální blok klíče: %s\n" - #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "klíč %s: neplatný revokační certifikát: %s – zamítnuto\n" @@ -2806,15 +2745,15 @@ msgstr "klíč %s: smazána vícenásobná vazba podklíče\n" #, c-format msgid "key %s: no subkey for key revocation\n" -msgstr "klíč %s: neexistuje podklíč pro revokaci klíče\n" +msgstr "klíč %s: neexistuje podklíč pro odvolání klíče\n" #, c-format msgid "key %s: invalid subkey revocation\n" -msgstr "klíč %s: neplatný revokační podklíč\n" +msgstr "klíč %s: neplatný odvolací podklíč\n" #, c-format msgid "key %s: removed multiple subkey revocation\n" -msgstr "klíč %s: smazána vícenásobná revokace podklíče\n" +msgstr "klíč %s: vícenásobná odvolání podklíče smazáno\n" #, c-format msgid "key %s: skipped user ID \"%s\"\n" @@ -2850,12 +2789,11 @@ msgstr "klíč %s: objeven duplikovaný identifikátor uživatele - sloučen\n" #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" -msgstr "" -"VAROVÁNÍ: klíč %s může být revokován: zkouším získat revokační klíč %s\n" +msgstr "VAROVÁNÍ: klíč %s může být odvolán: zkouším získat revokační klíč %s\n" #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" -msgstr "VAROVÁNÍ: klíč %s může být revokován: revokační klíč %s nenalezen.\n" +msgstr "VAROVÁNÍ: klíč %s může být odvolán: revokační klíč %s nenalezen.\n" #, c-format msgid "key %s: \"%s\" revocation certificate added\n" @@ -2894,7 +2832,7 @@ msgid "failed to rebuild keyring cache: %s\n" msgstr "selhalo obnovení vyrovnávací paměti klíčů: %s\n" msgid "[revocation]" -msgstr "[revokace]" +msgstr "[odvolání]" msgid "[self-signature]" msgstr "[podpis klíče jím samým]" @@ -2938,7 +2876,7 @@ msgstr "Přeskakuje se ID uživatele „%s“, což není textové ID.\n" #, c-format msgid "User ID \"%s\" is revoked." -msgstr "Uživatelské ID „%s“ je revokováno." +msgstr "Uživatelské ID „%s“ je odvoláno." msgid "Are you sure you still want to sign it? (y/N) " msgstr "Jste si jistý(á), že stále chcete podepsat tento klíč? (a/N) " @@ -3215,11 +3153,6 @@ msgstr "směstnat nepoužitelná ID uživatelů a odstranit z klíče všechny msgid "Secret key is available.\n" msgstr "Tajný klíč je dostupný.\n" -#, fuzzy -#| msgid "Secret key is available.\n" -msgid "Secret subkeys are available.\n" -msgstr "Tajný klíč je dostupný.\n" - msgid "Need the secret key to do this.\n" msgstr "Pro provedení této operace je potřeba tajný klíč.\n" @@ -3234,7 +3167,7 @@ msgstr "" " podpis (nrsign) nebo libovolnou jejich kombinací (ltsign, tnrsign, atd.).\n" msgid "Key is revoked." -msgstr "Klíč revokován." +msgstr "Klíč je odvolán." msgid "Really sign all user IDs? (y/N) " msgstr "Opravdu podepsat všechny id uživatele? (a/N) " @@ -3251,7 +3184,7 @@ msgstr "Neznámý typ podpisu „%s“\n" #, c-format msgid "This command is not allowed while in %s mode.\n" -msgstr "Tento příkaz není v módů %s dovolený.\n" +msgstr "Tento příkaz není v režimu %s dovolen.\n" msgid "You must select at least one user ID.\n" msgstr "Musíte vybrat alespoň jeden id uživatele.\n" @@ -3298,19 +3231,19 @@ msgid "Do you really want to delete this key? (y/N) " msgstr "Opravdu chcete smazat tento klíč? (a/N) " msgid "Really revoke all selected user IDs? (y/N) " -msgstr "Opravdu revokovat všechny vybrané id uživatele? (a/N) " +msgstr "Opravdu odvolat všechna vybraná ID uživatele? (a/N) " msgid "Really revoke this user ID? (y/N) " -msgstr "Opravdu revokovat tento id uživatele? (a/N) " +msgstr "Opravdu odvolat toto ID uživatele? (a/N) " msgid "Do you really want to revoke the entire key? (y/N) " -msgstr "Opravdu chcete revokovat celý klíč? (a/N) " +msgstr "Opravdu chcete odvolat celý klíč? (a/N) " msgid "Do you really want to revoke the selected subkeys? (y/N) " -msgstr "Opravdu chcete revokovat vybrané podklíče? (a/N) " +msgstr "Opravdu chcete odvolat vybrané podklíče? (a/N) " msgid "Do you really want to revoke this subkey? (y/N) " -msgstr "Opravdu chcete revokovat tento podklíč? (a/N) " +msgstr "Opravdu chcete odvolat tento podklíč? (a/N) " msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" @@ -3339,20 +3272,16 @@ msgstr "aktualizace selhala: %s\n" msgid "Key not changed so no update needed.\n" msgstr "Klíč nebyl změněn, takže není potřeba jej aktualizovat.\n" -#, fuzzy -#| msgid "You can't delete the last user ID!\n" msgid "cannot revoke the last valid user ID.\n" -msgstr "Nemůžete smazat poslední id uživatele!\n" +msgstr "poslední platné ID uživatele nelze odvolat.\n" -#, fuzzy, c-format -#| msgid "checking the trust list failed: %s\n" +#, c-format msgid "revoking the user ID failed: %s\n" -msgstr "kontrola seznamu důvěry se nepodařila: %s\n" +msgstr "odvolání ID uživatele se nepodařilo: %s\n" -#, fuzzy, c-format -#| msgid "checking the trust list failed: %s\n" +#, c-format msgid "setting the primary user ID failed: %s\n" -msgstr "kontrola seznamu důvěry se nepodařila: %s\n" +msgstr "nastavení primárního ID uživatele se nepodařilo: %s\n" #, c-format msgid "\"%s\" is not a fingerprint\n" @@ -3362,10 +3291,9 @@ msgstr "„%s“ není otisk\n" msgid "\"%s\" is not the primary fingerprint\n" msgstr "„%s“ není primární otisk\n" -#, fuzzy, c-format -#| msgid "read error in '%s': %s\n" +#, c-format msgid "Invalid user ID '%s': %s\n" -msgstr "chyba při čtení v „%s“: %s\n" +msgstr "Neplatné ID uživatele „%s“: %s\n" msgid "No matching user IDs." msgstr "Žádný identifikátor uživatele neodpovídá." @@ -3373,20 +3301,17 @@ msgstr "Žádný identifikátor uživatele neodpovídá." msgid "Nothing to sign.\n" msgstr "Nic na podepsání.\n" -#, fuzzy, c-format -#| msgid "'%s' is not a valid signature expiration\n" +#, c-format msgid "'%s' is not a valid expiration time\n" -msgstr "„%s“ není platná doba expirace podpisu\n" +msgstr "„%s“ není platná doba expirace\n" -#, fuzzy, c-format -#| msgid "\"%s\" is not a fingerprint\n" +#, c-format msgid "\"%s\" is not a proper fingerprint\n" -msgstr "„%s“ není otisk\n" +msgstr "„%s“ není řádný otisk\n" -#, fuzzy, c-format -#| msgid "key \"%s\" not found\n" +#, c-format msgid "subkey \"%s\" not found\n" -msgstr "klíč „%s“ nenalezen\n" +msgstr "podklíč „%s“ nenalezen\n" msgid "Digest: " msgstr "Hash: " @@ -3408,11 +3333,11 @@ msgstr "Uživatelský ID formátu PGP 2.x nemá žádné předvolby\n" #, c-format msgid "The following key was revoked on %s by %s key %s\n" -msgstr "V %s byl následující klíč revokován %s klíčem %s\n" +msgstr "V %s byl následující klíč odvolán %s klíčem %s\n" #, c-format msgid "This key may be revoked by %s key %s" -msgstr "Tento klíč může být revokován %s klíčem %s " +msgstr "Tento klíč může být odvolán %s klíčem %s " msgid "(sensitive)" msgstr "(citlivá informace)" @@ -3423,7 +3348,7 @@ msgstr "vytvořen: %s" #, c-format msgid "revoked: %s" -msgstr "revokován: %s" +msgstr "odvolán: %s" #, c-format msgid "expired: %s" @@ -3507,13 +3432,12 @@ msgstr "Smazat tento neznámý podpis? (a/N/u)" msgid "Really delete this self-signature? (y/N)" msgstr "Opravdu smazat tento podpis podepsaný sebou samým? (a/N)" -#, fuzzy, c-format -#| msgid "Deleted %d signature.\n" +#, c-format msgid "Deleted %d signature.\n" msgid_plural "Deleted %d signatures.\n" msgstr[0] "Smazán %d podpis.\n" -msgstr[1] "Smazán %d podpis.\n" -msgstr[2] "Smazán %d podpis.\n" +msgstr[1] "Smazány %d podpisy.\n" +msgstr[2] "Smazáno %d podpisů.\n" msgid "Nothing deleted.\n" msgstr "Nic nebylo smazáno.\n" @@ -3525,13 +3449,12 @@ msgstr "neplatný" msgid "User ID \"%s\" compacted: %s\n" msgstr "Uživatelské ID „%s“ směstnáno: %s\n" -#, fuzzy, c-format -#| msgid "User ID \"%s\": %d signature removed\n" +#, c-format msgid "User ID \"%s\": %d signature removed\n" msgid_plural "User ID \"%s\": %d signatures removed\n" -msgstr[0] "Uživatelské ID „%s“: %d podpisů odstraněno\n" -msgstr[1] "Uživatelské ID „%s“: %d podpisů odstraněno\n" -msgstr[2] "Uživatelské ID „%s“: %d podpisů odstraněno\n" +msgstr[0] "Uživatelské ID „%s“: odstraněn %d podpis\n" +msgstr[1] "Uživatelské ID „%s“: odstraněny %d podpisy\n" +msgstr[2] "Uživatelské ID „%s“: odstraněno %d podpisů\n" #, c-format msgid "User ID \"%s\": already minimized\n" @@ -3546,31 +3469,31 @@ msgid "" "cause\n" " some versions of PGP to reject this key.\n" msgstr "" -"VAROVÁNÍ: Toto je PGP2 klíč. Přidání 'pověření revokace' může v některých\n" +"VAROVÁNÍ: Toto je PGP2 klíč. Přidání pověřeého odvolatele může v některých\n" " verzích PGP vést k odmítnutí tohoto klíče.\n" msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" -msgstr "Neměli by jste přidávat 'pověření revokace' k PGP2 klíči.\n" +msgstr "K PGP2 klíči byste neměli přidávat pověřeného odvolatele.\n" msgid "Enter the user ID of the designated revoker: " -msgstr "Vložte identifikátor uživatele pověřeného revokací: " +msgstr "Vložte identifikátor pověřeného odvolatele: " msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" -msgstr "klíč formátu PGP 2.x nelze pověřit revokací\n" +msgstr "klíč formátu PGP 2.x nelze pověřit odvoláním\n" msgid "you cannot appoint a key as its own designated revoker\n" -msgstr "klíč nelze pověřit revokací jím samým\n" +msgstr "klíč nelze pověřit odvoláním sama sebe\n" msgid "this key has already been designated as a revoker\n" -msgstr "tento klíč již byl pověřen revokací\n" +msgstr "tento klíč již byl určen jako odvolatel\n" msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" -"VAROVÁNÍ: ustanovení klíče „pověřeným odvolatelem“ je nevratná operace!\n" +"VAROVÁNÍ: ustanovení klíče pověřeným odvolatelem je nevratná operace!\n" msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " -msgstr "Jste si jistí, že tento klíč chcete pověřit revokací? (a/N) " +msgstr "Jste si jistí, že tento klíč chcete pověřit odvoláním? (a/N) " msgid "" "Are you sure you want to change the expiration time for multiple subkeys? (y/" @@ -3648,10 +3571,10 @@ msgid "This signature expired on %s.\n" msgstr "Platnost podpisu vyprší %s.\n" msgid "Are you sure you still want to revoke it? (y/N) " -msgstr "Jste si jistý, že jej chcete stále revokovat? (a/N) " +msgstr "Jste si jisti, že jej chcete stále odvolat? (a/N) " msgid "Create a revocation certificate for this signature? (y/N) " -msgstr "Vytvořit pro tento podpis revokační certifikát? (a/N)" +msgstr "Vytvořit pro tento podpis odvolací certifikát? (a/N)" msgid "Not signed by you.\n" msgstr "Nepodepsáno vámi.\n" @@ -3665,50 +3588,47 @@ msgstr " (neodvolatelné)" #, c-format msgid "revoked by your key %s on %s\n" -msgstr "revokováno vaším klíčem %s v %s\n" +msgstr "odvoláno vaším klíčem %s v %s\n" msgid "You are about to revoke these signatures:\n" -msgstr "Chystáte se revokovat tyto podpisy:\n" +msgstr "Chystáte se odvolat tyto podpisy:\n" msgid "Really create the revocation certificates? (y/N) " -msgstr "Opravdu vytvořit revokační certifikáty? (a/N) " +msgstr "Opravdu vytvořit odvolací certifikáty? (a/N) " msgid "no secret key\n" msgstr "neexistuje tajný klíč\n" #, c-format msgid "tried to revoke a non-user ID: %s\n" -msgstr "" +msgstr "pokud odvolat ID neuživatele: %s\n" #, c-format msgid "user ID \"%s\" is already revoked\n" -msgstr "uživatelské ID „%s“ je již revokováno\n" +msgstr "uživatelské ID „%s“ je již odvoláno\n" #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "VAROVÁNÍ: podpis ID uživatele je datován %d sekund v budoucnosti\n" -#, fuzzy -#| msgid "You can't delete the last user ID!\n" msgid "Cannot revoke the last valid user ID.\n" -msgstr "Nemůžete smazat poslední id uživatele!\n" +msgstr "Poslední platné ID uživatele nelze odvolat.\n" #, c-format msgid "Key %s is already revoked.\n" -msgstr "Klíč %s je již revokován.\n" +msgstr "Klíč %s je již odvolán.\n" #, c-format msgid "Subkey %s is already revoked.\n" -msgstr "Podklíč %s je již revokován.\n" +msgstr "Podklíč %s je již odvolán.\n" #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Zobrazuji %s fotografický ID o velikosti %ld pro klíč %s (uid %d)\n" -#, fuzzy, c-format -#| msgid "invalid argument for option \"%.50s\"\n" +#, c-format msgid "invalid value for option '%s'\n" -msgstr "neplatný argument u volby „%.50s“\n" +msgstr "neplatný argument u volby „%s“\n" #, c-format msgid "preference '%s' duplicated\n" @@ -3916,7 +3836,7 @@ msgstr "" " y = doba platnosti podpisu skončí za n let\n" msgid "Key is valid for? (0) " -msgstr "Klíč je platný pro? (0) " +msgstr "Klíč je platný po? (0) " #, c-format msgid "Signature is valid for? (%s) " @@ -4174,45 +4094,40 @@ msgstr "Kritická podepisovací notace: " msgid "Signature notation: " msgstr "Podepisovací notace: " -#, fuzzy, c-format -#| msgid "%d good signatures\n" +#, c-format msgid "%d good signature\n" msgid_plural "%d good signatures\n" -msgstr[0] "%d dobrých podpisů\n" -msgstr[1] "%d dobrých podpisů\n" +msgstr[0] "%d dobrý podpis\n" +msgstr[1] "%d dobré podpisy\n" msgstr[2] "%d dobrých podpisů\n" -#, fuzzy, c-format -#| msgid "%d bad signatures\n" +#, c-format msgid "%d bad signature\n" msgid_plural "%d bad signatures\n" -msgstr[0] "%d špatných podpisů\n" -msgstr[1] "%d špatných podpisů\n" +msgstr[0] "%d špatný podpis\n" +msgstr[1] "%d špatné podpisy\n" msgstr[2] "%d špatných podpisů\n" -#, fuzzy, c-format -#| msgid "1 signature not checked due to a missing key\n" +#, c-format msgid "%d signature not checked due to a missing key\n" msgid_plural "%d signatures not checked due to missing keys\n" -msgstr[0] "1 podpis neověřen, protože chybí klíč\n" -msgstr[1] "1 podpis neověřen, protože chybí klíč\n" -msgstr[2] "1 podpis neověřen, protože chybí klíč\n" +msgstr[0] "%d podpis neověřen, protože chybí klíč\n" +msgstr[1] "%d podpisy neověřeny, protože chybí klíče\n" +msgstr[2] "%d podpisů neověřeno, protože chybí klíče\n" -#, fuzzy, c-format -#| msgid "1 signature not checked due to an error\n" +#, c-format msgid "%d signature not checked due to an error\n" msgid_plural "%d signatures not checked due to errors\n" -msgstr[0] "1 podpis neověřen, protože vznikla chyba\n" -msgstr[1] "1 podpis neověřen, protože vznikla chyba\n" -msgstr[2] "1 podpis neověřen, protože vznikla chyba\n" +msgstr[0] "%d podpis neověřen, protože došlo k chybě\n" +msgstr[1] "%d podpisy neověřeny, protože došlo k chybám\n" +msgstr[2] "%d podpisů neověřeno, protože došlo k chybám\n" -#, fuzzy, c-format -#| msgid "Warning: %lu key(s) skipped due to their large size\n" +#, c-format msgid "Warning: %lu key skipped due to its large size\n" msgid_plural "Warning: %lu keys skipped due to their large sizes\n" -msgstr[0] "Pozor: %lu klíč(ů) přeskočen(o) kvůli jejich přílišné velikosti\n" -msgstr[1] "Pozor: %lu klíč(ů) přeskočen(o) kvůli jejich přílišné velikosti\n" -msgstr[2] "Pozor: %lu klíč(ů) přeskočen(o) kvůli jejich přílišné velikosti\n" +msgstr[0] "Pozor: %lu klíč přeskočen kvůli jeho přílišné velikosti\n" +msgstr[1] "Pozor: %lu klíče přeskočeny kvůli jejich přílišné velikosti\n" +msgstr[2] "Pozor: %lu klíčů přeskočeno kvůli jejich přílišné velikosti\n" msgid "Keyring" msgstr "Soubor klíčů (keyring)" @@ -4241,29 +4156,26 @@ msgstr " Sériové číslo karty =" msgid "caching keyring '%s'\n" msgstr "zapamatovává se soubor klíčů „%s“\n" -#, fuzzy, c-format -#| msgid "%lu keys cached so far (%lu signatures)\n" +#, c-format msgid "%lu keys cached so far (%lu signature)\n" msgid_plural "%lu keys cached so far (%lu signatures)\n" -msgstr[0] "%lu klíčů již uloženo v keši (%lu podpisů)\n" -msgstr[1] "%lu klíčů již uloženo v keši (%lu podpisů)\n" +msgstr[0] "%lu klíčů již uloženo v keši (%lu podpis)\n" +msgstr[1] "%lu klíčů již uloženo v keši (%lu podpisy)\n" msgstr[2] "%lu klíčů již uloženo v keši (%lu podpisů)\n" -#, fuzzy, c-format -#| msgid "flush the cache" +#, c-format msgid "%lu key cached" msgid_plural "%lu keys cached" -msgstr[0] "vyprázdní keš" -msgstr[1] "vyprázdní keš" -msgstr[2] "vyprázdní keš" +msgstr[0] "%lu klíč uložen v keši" +msgstr[1] "%lu klíče uloženy v keši" +msgstr[2] "%lu klíčů uloženo v keši" -#, fuzzy, c-format -#| msgid "1 bad signature\n" +#, c-format msgid " (%lu signature)\n" msgid_plural " (%lu signatures)\n" -msgstr[0] "1 špatný podpis\n" -msgstr[1] "1 špatný podpis\n" -msgstr[2] "1 špatný podpis\n" +msgstr[0] " (%lu podpis)\n" +msgstr[1] " (%lu podpisy)\n" +msgstr[2] " (%lu podpisů)\n" #, c-format msgid "%s: keyring created\n" @@ -4304,13 +4216,12 @@ msgstr "neplatný protokol serveru klíčů (naše %d!=obsluha %d)\n" msgid "\"%s\" not a key ID: skipping\n" msgstr "„%s“ není ID klíče: přeskočeno\n" -#, fuzzy, c-format -#| msgid "refreshing %d keys from %s\n" +#, c-format msgid "refreshing %d key from %s\n" msgid_plural "refreshing %d keys from %s\n" -msgstr[0] "aktualizuji %d klíčů z %s\n" -msgstr[1] "aktualizuji %d klíčů z %s\n" -msgstr[2] "aktualizuji %d klíčů z %s\n" +msgstr[0] "aktualizuje se %d klíč z %s\n" +msgstr[1] "aktualizují se %d klíče z %s\n" +msgstr[2] "aktualizuje se %d klíčů z %s\n" #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" @@ -4328,16 +4239,14 @@ msgstr "žádný server klíčů není znám (použijte volbu --keyserver)\n" #, c-format msgid "requesting key %s from %s server %s\n" -msgstr "požaduji klíč %s ze %s server %s\n" +msgstr "požaduji klíč %s z %s serveru %s\n" #, c-format msgid "requesting key %s from %s\n" msgstr "požaduji klíč %s z %s\n" -#, fuzzy -#| msgid "no keyserver action!\n" msgid "no keyserver known\n" -msgstr "žádná operace se serverem klíčů!\n" +msgstr "není znám žádný server s klíči\n" #, c-format msgid "skipped \"%s\": %s\n" @@ -4472,10 +4381,9 @@ msgstr " použití %s klíče %s\n" msgid "Signature made %s using %s key ID %s\n" msgstr "Podpis vytvořen %s pomocí klíče %s s ID uživatele %s\n" -#, fuzzy, c-format -#| msgid " aka \"%s\"" +#, c-format msgid " issuer \"%s\"\n" -msgstr " alias „%s“" +msgstr " vydavatel „%s“\n" msgid "Key available at: " msgstr "Klíč k dispozici na: " @@ -4487,10 +4395,9 @@ msgstr "[nejistý]" msgid " aka \"%s\"" msgstr " alias „%s“" -#, fuzzy, c-format -#| msgid "WARNING: This key is not certified with a trusted signature!\n" +#, c-format msgid "WARNING: This key is not suitable for signing in %s mode\n" -msgstr "VAROVÁNÍ: Tento klíč není certifikován důvěryhodným podpisem!\n" +msgstr "POZOR: Tento klíč se nehodí na podepisování v režimu %s\n" #, c-format msgid "Signature expired %s\n" @@ -4569,18 +4476,16 @@ msgstr "VAROVÁNÍ: vyžádaný algoritmus %s není doporučen\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "Poznámka: podpisy používající algoritmus %s jsou zamítány\n" -#, fuzzy, c-format -#| msgid "%s:%u: read error: %s\n" +#, c-format msgid "(reported error: %s)\n" -msgstr "%s:%u: chyba čtení: %s\n" +msgstr "(nahlášená chyba: %s)\n" -#, fuzzy, c-format -#| msgid "read error in '%s': %s\n" +#, c-format msgid "(reported error: %s <%s>)\n" -msgstr "chyba při čtení v „%s“: %s\n" +msgstr "(nahlášená chyba: %s <%s>)\n" msgid "(further info: " -msgstr "" +msgstr "(podrobnosti: " #, c-format msgid "%s:%d: deprecated option \"%s\"\n" @@ -4847,25 +4752,18 @@ msgstr "Tento klíč pravděpodobně náleží uvedenému uživateli\n" msgid "This key belongs to us\n" msgstr "Tento klíč náleží nám (máme odpovídající tajný klíč)\n" -#, fuzzy, c-format -#| msgid "root certificate has now been marked as trusted\n" +#, c-format msgid "%s: This key is bad! It has been marked as untrusted!\n" -msgstr "kořenový certifikát byl nyní označen za důvěryhodný\n" +msgstr "%s: Tento klíč je špatný! Byl označen jako nedůvěryhodný!\n" -#, fuzzy -#| msgid "" -#| "It is NOT certain that the key belongs to the person named\n" -#| "in the user ID. If you *really* know what you are doing,\n" -#| "you may answer the next question with yes.\n" msgid "" "This key is bad! It has been marked as untrusted! If you\n" "*really* know what you are doing, you may answer the next\n" "question with yes.\n" msgstr "" -"NENÍ jisté, zda tento klíč patří osobě, jejíž jméno je uvedeno\n" -"v uživatelském ID. Pokud *skutečně* víte, co děláte, můžete na\n" -"následující otázku odpovědět ano\n" -"\n" +"Tento klíč je špatný! Byl označen jako nedůvěryhodný!\n" +"Pokud *skutečně* víte, co děláte, můžete na\n" +"následující otázku odpovědět ano.\n" msgid "" "It is NOT certain that the key belongs to the person named\n" @@ -4874,8 +4772,7 @@ msgid "" msgstr "" "NENÍ jisté, zda tento klíč patří osobě, jejíž jméno je uvedeno\n" "v uživatelském ID. Pokud *skutečně* víte, co děláte, můžete na\n" -"následující otázku odpovědět ano\n" -"\n" +"následující otázku odpovědět ano.\n" msgid "Use this key anyway? (y/N) " msgstr "Použít přesto tento klíč? (a/N) " @@ -4952,10 +4849,9 @@ msgstr "%s: přeskočeno: veřejný klíč je neplatný (disabled)\n" msgid "%s: skipped: public key already present\n" msgstr "%s: přeskočeno: veřejný klíč je již obsažen v databázi\n" -#, fuzzy, c-format -#| msgid "can't connect to '%s': %s\n" +#, c-format msgid "can't encrypt to '%s'\n" -msgstr "nelze se připojit k „%s“: %s\n" +msgstr "nelze zašifrovat pro „%s“\n" #, c-format msgid "option '%s' given, but no valid default keys given\n" @@ -4966,8 +4862,7 @@ msgid "option '%s' given, but option '%s' not given\n" msgstr "zadána volba „%s“, ale chybí volba „%s“\n" msgid "You did not specify a user ID. (you may use \"-r\")\n" -msgstr "" -"Nespecifikoval jste identifikátor uživatele (user ID). Můžete použít \"-r\"\n" +msgstr "Nezadali jste identifikátor uživatele (můžete použít \"-r\")\n" msgid "Current recipients:\n" msgstr "Aktuální příjemci:\n" @@ -5030,17 +4925,16 @@ msgstr "nelze otevřít podepsaná data „%s“\n" msgid "can't open signed data fd=%d: %s\n" msgstr "nelze otevřít podepsaná data na deskriptoru=%d: %s\n" -#, fuzzy, c-format -#| msgid "certificate is not usable for encryption\n" +#, c-format msgid "key %s is not suitable for decryption in %s mode\n" -msgstr "certifikát není použitelný pro šifrování\n" +msgstr "klíč %s se nehodí na rozšifrování v režimu %s\n" #, c-format msgid "anonymous recipient; trying secret key %s ...\n" -msgstr "anonymní adresát; zkouším tajný klíč %s…\n" +msgstr "anonymní adresát; zkusí se tajný klíč %s…\n" msgid "okay, we are the anonymous recipient.\n" -msgstr "o.k., my jsme anonymní adresát.\n" +msgstr "dobrá, my jsme anonymní adresát.\n" msgid "old encoding of the DEK is not supported\n" msgstr "staré kódování DEK není podporováno\n" @@ -5102,13 +4996,10 @@ msgid "" "declare that a key shall not anymore be used. It is not possible\n" "to retract such a revocation certificate once it has been published." msgstr "" +"Odovolací certifikát je svým způsoben „bezpečnostní vypínač“, který\n" +"veřejně prohlašuje, že klíč by se již neměl používat. Jednou zveřejněný\n" +"odvolací certifikát již nelze vzít zpět." -#, fuzzy -#| msgid "" -#| "Use it to revoke this key in case of a compromise or loss of\n" -#| "the secret key. However, if the secret key is still accessible,\n" -#| "it is better to generate a new revocation certificate and give\n" -#| "a reason for the revocation." msgid "" "Use it to revoke this key in case of a compromise or loss of\n" "the secret key. However, if the secret key is still accessible,\n" @@ -5118,26 +5009,24 @@ msgid "" msgstr "" "Použijte jej pro odvolání tohoto klíče v případě zneužití nebo ztráty\n" "soukromého klíče. Avšak bude-li soukromý klíč stále přístupný, bude\n" -"lepší vytvořit nový revokační certifikát s vysvětlením odvolání." +"lepší vytvořit nový odvolací certifikát s odůvodněním odvolání.\n" +"Podrobnosti naleznete v manuálu GnuPG u popisu příkazu\n" +"„gpg --generate-revocation“." -#, fuzzy -#| msgid "" -#| "To avoid an accidental use of this file, a colon has been inserted\n" -#| "before the 5 dashes below. Remove this colon with a text editor\n" -#| "before making use of this revocation certificate." msgid "" "To avoid an accidental use of this file, a colon has been inserted\n" "before the 5 dashes below. Remove this colon with a text editor\n" "before importing and publishing this revocation certificate." msgstr "" -"Aby se zabránilo nechtěnému použití tohoto souboru, před 5 pomlček byla\n" -"vložena dvojtečka. Před použitím tohoto revokačního certifikátu odstraňte\n" -"tuto dvojtečku textovým editorem." +"Aby se zabránilo nechtěnému použití tohoto souboru, níže před 5 pomlček " +"byla\n" +"vložena dvojtečka. Před importem a zveřejněním tohoto odvolacího " +"certifikátu\n" +"odstraňte tuto dvojtečku textovým editorem." -#, fuzzy, c-format -#| msgid "Revocation certificate created.\n" +#, c-format msgid "revocation certificate stored as '%s.rev'\n" -msgstr "Revokační certifikát vytvořen.\n" +msgstr "odvolací certifikát uložen jako „%s.rev“\n" #, c-format msgid "secret key \"%s\" not found\n" @@ -5218,10 +5107,9 @@ msgstr "%s klíč %s vyžaduje hash o délce %zu nebo více bitů (hash je %s)\ msgid "WARNING: signature digest conflict in message\n" msgstr "VAROVÁNÍ: konflikt hashe podpisu ve zprávě\n" -#, fuzzy, c-format -#| msgid "you may not use %s while in %s mode\n" +#, c-format msgid "key %s may not be used for signing in %s mode\n" -msgstr "použití %s není v módu %s dovoleno\n" +msgstr "klíč %s se nesmí používat v režimu %s\n" #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" @@ -5235,54 +5123,48 @@ msgstr "více informací naleznete na adrese %s\n" msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "VAROVÁNÍ: podepisovací podklíč %s má neplatnou křížovou certifikaci\n" -#, fuzzy, c-format -#| msgid "public key %s is %lu second newer than the signature\n" +#, c-format msgid "public key %s is %lu second newer than the signature\n" msgid_plural "public key %s is %lu seconds newer than the signature\n" -msgstr[0] "veřejný klíč %s je o %lu sekund novější než podpis\n" -msgstr[1] "veřejný klíč %s je o %lu sekund novější než podpis\n" +msgstr[0] "veřejný klíč %s je o %lu sekundu novější než podpis\n" +msgstr[1] "veřejný klíč %s je o %lu sekundy novější než podpis\n" msgstr[2] "veřejný klíč %s je o %lu sekund novější než podpis\n" -#, fuzzy, c-format -#| msgid "public key %s is %lu second newer than the signature\n" +#, c-format msgid "public key %s is %lu day newer than the signature\n" msgid_plural "public key %s is %lu days newer than the signature\n" -msgstr[0] "veřejný klíč %s je o %lu sekund novější než podpis\n" -msgstr[1] "veřejný klíč %s je o %lu sekund novější než podpis\n" -msgstr[2] "veřejný klíč %s je o %lu sekund novější než podpis\n" +msgstr[0] "veřejný klíč %s je o %lu den novější než podpis\n" +msgstr[1] "veřejný klíč %s je o %lu dny novější než podpis\n" +msgstr[2] "veřejný klíč %s je o %lu dnů novější než podpis\n" -#, fuzzy, c-format -#| msgid "" -#| "key %s was created %lu second in the future (time warp or clock problem)\n" +#, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgid_plural "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr[0] "" -"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" -"je problém se systémovým časem)\n" +"klíč %s byl vytvořen %lu sekundu v budoucnosti (došlo ke změně času nebo\n" +"je problém s hodinami)\n" msgstr[1] "" -"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" -"je problém se systémovým časem)\n" +"klíč %s byl vytvořen %lu sekundy v budoucnosti (došlo ke změně času nebo\n" +"je problém s hodinami)\n" msgstr[2] "" "klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" -"je problém se systémovým časem)\n" +"je problém s hodinami)\n" -#, fuzzy, c-format -#| msgid "" -#| "key %s was created %lu second in the future (time warp or clock problem)\n" +#, c-format msgid "key %s was created %lu day in the future (time warp or clock problem)\n" msgid_plural "" "key %s was created %lu days in the future (time warp or clock problem)\n" msgstr[0] "" -"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" -"je problém se systémovým časem)\n" +"klíč %s byl vytvořen %lu den v budoucnosti (došlo ke změně času nebo\n" +"je problém s hodinami)\n" msgstr[1] "" -"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" -"je problém se systémovým časem)\n" +"klíč %s byl vytvořen %lu dny v budoucnosti (došlo ke změně času nebo\n" +"je problém s hodinami)\n" msgstr[2] "" -"klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" -"je problém se systémovým časem)\n" +"klíč %s byl vytvořen %lu dnů v budoucnosti (došlo ke změně času nebo\n" +"je problém s hodinami)\n" #, c-format msgid "Note: signature key %s expired %s\n" @@ -5511,339 +5393,320 @@ msgstr "nemohu pracovat s řádky delšími než %d znaků\n" msgid "input line longer than %d characters\n" msgstr "vstupní řádek je delší než %d znaků\n" -#, fuzzy, c-format -#| msgid "error sending standard options: %s\n" +#, c-format msgid "error beginning transaction on TOFU database: %s\n" -msgstr "chyba při odesílání standardního parametru: %s\n" +msgstr "chyba při zahájení transakce v databázi TOFU: %s\n" #, c-format msgid "error committing transaction on TOFU database: %s\n" -msgstr "" +msgstr "chyba při potvrzování transakce v datázi TOFU: %s\n" #, c-format msgid "error rolling back transaction on TOFU database: %s\n" -msgstr "" - -#, fuzzy, c-format -#| msgid "unsupported algorithm: %s" -msgid "unsupported TOFU database version: %s\n" -msgstr "nepodporovaný algoritmus: %s" - -#, fuzzy, c-format -#| msgid "error creating temporary file: %s\n" -msgid "error creating 'ultimately_trusted_keys' TOFU table: %s\n" -msgstr "chyba při vytváření dočasného souboru: %s\n" - -msgid "TOFU DB error" -msgstr "" - -#, fuzzy, c-format -#| msgid "error sending data: %s\n" -msgid "error reading TOFU database: %s\n" -msgstr "chyba při odesílání dat: %s\n" - -#, fuzzy, c-format -#| msgid "error writing base64 encoding: %s\n" -msgid "error determining TOFU database's version: %s\n" -msgstr "chyba při zápisu kódování base64: %s\n" - -#, fuzzy, c-format -#| msgid "error initializing reader object: %s\n" -msgid "error initializing TOFU database: %s\n" -msgstr "chyba při inicializaci čtecího objektu: %s\n" - -#, fuzzy, c-format -#| msgid "error sending data: %s\n" -msgid "error creating 'encryptions' TOFU table: %s\n" -msgstr "chyba při odesílání dat: %s\n" +msgstr "chyba při odvolávání transakce v databázi TOFU: %s\n" +#, c-format +msgid "unsupported TOFU database version: %s\n" +msgstr "nepodporovaná verze databáze TOFU: %s\n" + +#, c-format +msgid "error creating 'ultimately_trusted_keys' TOFU table: %s\n" +msgstr "chyba při vytváření TOFU tabulky „ultimately_trusted_keys“: %s\n" + +msgid "TOFU DB error" +msgstr "Chyba databáze TOFU" + +#, c-format +msgid "error reading TOFU database: %s\n" +msgstr "chyba při čtení databáze TOFU: %s\n" + +#, c-format +msgid "error determining TOFU database's version: %s\n" +msgstr "chyba při zjišťování databáze TOFU: %s\n" + +#, c-format +msgid "error initializing TOFU database: %s\n" +msgstr "chyba při inicializaci databáze TOFU: %s\n" + +#, c-format +msgid "error creating 'encryptions' TOFU table: %s\n" +msgstr "chyba při vytváření TOFU tabulky „encryptions“: %s\n" + +# ??? Typo: error adding #, c-format msgid "adding column effective_policy to bindings DB: %s\n" -msgstr "" +msgstr "přidávání sloupce effective_policy do vazeb databáze: %s\n" -#, fuzzy, c-format -#| msgid "error opening '%s': %s\n" +#, c-format msgid "error opening TOFU database '%s': %s\n" -msgstr "chyba při otevírání „%s“: %s\n" +msgstr "chyba při otevírání databáze TOFU „%s“: %s\n" -#, fuzzy, c-format -#| msgid "error sending data: %s\n" +#, c-format msgid "error updating TOFU database: %s\n" -msgstr "chyba při odesílání dat: %s\n" +msgstr "chyba při aktualizaci databáze TOFU: %s\n" #, c-format msgid "" "This is the first time the email address \"%s\" is being used with key %s." -msgstr "" +msgstr "Toto je poprvé, co se e-mailová adresa „%s“ používá s klíčem %s." #, c-format msgid "The email address \"%s\" is associated with %d key!" msgid_plural "The email address \"%s\" is associated with %d keys!" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "E-mailová adresa „%s“ je přidružena k %d klíči!" +msgstr[1] "E-mailová adresa „%s“ je přidružena k %d klíčům!" +msgstr[2] "E-mailová adresa „%s“ je přidružena k %d klíčům!" msgid " Since this binding's policy was 'auto', it has been changed to 'ask'." msgstr "" +" Protože pravidlo této vazby bylo „auto“, bylo změněno na „ask“ (zeptat se)." #, c-format msgid "" "Please indicate whether this email address should be associated with key %s " "or whether you think someone is impersonating \"%s\"." msgstr "" +"Prosím naznačte, jestli tato e-mailová adresa má být spojována s klíčem %s " +"nebo jestli si mylíste, že někdo se vydává za „%s“\n" +"." -#, fuzzy, c-format -#| msgid "error getting responder ID: %s\n" +#, c-format msgid "error gathering other user IDs: %s\n" -msgstr "chyba při zjišťování ID odpovídače: %s\n" +msgstr "chyba při sběru dalších ID uživetele: %s\n" -#, fuzzy -#| msgid "list key and user IDs" msgid "This key's user IDs:\n" -msgstr "vypsat seznam klíčů a id uživatelů" +msgstr "ID uživatelů tohoto klíče:\n" -#, fuzzy, c-format -#| msgid "validity: %s" +#, c-format msgid "policy: %s" -msgstr "platnost: %s" +msgstr "politika: %s" -#, fuzzy, c-format -#| msgid "error getting stored flags: %s\n" +#, c-format msgid "error gathering signature stats: %s\n" -msgstr "chyba při získání uložených příznaků: %s\n" +msgstr "chyba při sběru údajů o podpisech: %s\n" #, c-format msgid "The email address \"%s\" is associated with %d key:\n" msgid_plural "The email address \"%s\" is associated with %d keys:\n" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "E-mailová adresa „%s“ je spojena s %d klíčem:\n" +msgstr[1] "E-mailová adresa „%s“ je spojena s %d klíči:\n" +msgstr[2] "E-mailová adresa „%s“ je spojena s %d klíči:\n" #, c-format msgid "Statistics for keys with the email address \"%s\":\n" -msgstr "" +msgstr "Statistika pro klíče s e-mailovou adresou „%s“:\n" -#, fuzzy -#| msgid "list keys" msgid "this key" -msgstr "vypsat seznam klíčů" +msgstr "tento klíč" -#, fuzzy, c-format -#| msgid "print message digests" +#, c-format msgid "Verified %d message." msgid_plural "Verified %d messages." -msgstr[0] "vypsat hash zprávy" -msgstr[1] "vypsat hash zprávy" -msgstr[2] "vypsat hash zprávy" +msgstr[0] "%d zpráva ověřena." +msgstr[1] "%d zprávy ověřeny." +msgstr[2] "%d zpráv ověřeno." -#, fuzzy, c-format -#| msgid "encrypted with %lu passphrases\n" +#, c-format msgid "Encrypted %d message." msgid_plural "Encrypted %d messages." -msgstr[0] "zašifrováno s heslem %lu\n" -msgstr[1] "zašifrováno s heslem %lu\n" -msgstr[2] "zašifrováno s heslem %lu\n" +msgstr[0] "%d zpráva zašifrována." +msgstr[1] "%d zprávy zašifrovýny." +msgstr[2] "%d zpráv zašifrováno." -#, fuzzy, c-format -#| msgid "print message digests" +#, c-format msgid "Verified %d message in the future." msgid_plural "Verified %d messages in the future." -msgstr[0] "vypsat hash zprávy" -msgstr[1] "vypsat hash zprávy" -msgstr[2] "vypsat hash zprávy" +msgstr[0] "Ověřena %d zpráva v budoucnosti." +msgstr[1] "Ověřeny %d zprávy v budoucnosti." +msgstr[2] "Ověřeno %d zpráv v budoucnosti." -#, fuzzy, c-format -#| msgid "print message digests" +#, c-format msgid "Encrypted %d message in the future." msgid_plural "Encrypted %d messages in the future." -msgstr[0] "vypsat hash zprávy" -msgstr[1] "vypsat hash zprávy" -msgstr[2] "vypsat hash zprávy" +msgstr[0] "Zašifrována %d zpráva v budoucnosti." +msgstr[1] "Zašifrovány %d zprávy v budoucnosti." +msgstr[2] "Zašifrováno %d zpráv v budoucnosti." #, c-format msgid "Messages verified over the past %d day: %d." msgid_plural "Messages verified over the past %d days: %d." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Ověřeno zpráv za poslední %d den: %d." +msgstr[1] "Ověřeno zpráv za poslední %d dny: %d." +msgstr[2] "Ověřeno zpráv za posledních %d dnů: %d." #, c-format msgid "Messages encrypted over the past %d day: %d." msgid_plural "Messages encrypted over the past %d days: %d." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Zašifrováno zpráv za poslední %d den: %d." +msgstr[1] "Zašifrováno zpráv za poslední %d dny: %d." +msgstr[2] "Zašifrováno zpráv za posledních %d dnů: %d." #, c-format msgid "Messages verified over the past %d month: %d." msgid_plural "Messages verified over the past %d months: %d." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Ověřeno zpráv za poslední %d měsíc: %d." +msgstr[1] "Ověřeno zpráv za poslední %d měsíce: %d." +msgstr[2] "Ověřeno zpráv za posledních %d měsíců: %d." #, c-format msgid "Messages encrypted over the past %d month: %d." msgid_plural "Messages encrypted over the past %d months: %d." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Zašifrováno zpráv za poslední %d měsíc: %d." +msgstr[1] "Zašifrováno zpráv za poslední %d měsíce: %d." +msgstr[2] "Zašifrováno zpráv za posledních %d měsíců: %d." #, c-format msgid "Messages verified over the past %d year: %d." msgid_plural "Messages verified over the past %d years: %d." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Zpráv ověřeno za poslední %d rok: %d." +msgstr[1] "Zpráv ověřeno za poslední %d roky: %d." +msgstr[2] "Zpráv ověřeno za posledních %d roků: %d." #, c-format msgid "Messages encrypted over the past %d year: %d." msgid_plural "Messages encrypted over the past %d years: %d." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Ověřeno zpráv za poslední %d rok: %d." +msgstr[1] "Ověřeno zpráv za poslední %d roky: %d." +msgstr[2] "Ověřeno zpráv za posledních %d roků: %d." #, c-format msgid "Messages verified in the past: %d." -msgstr "" +msgstr "Zpráv ověřeno v minulosti: %d." -#, fuzzy, c-format -#| msgid "print message digests" +#, c-format msgid "Messages encrypted in the past: %d." -msgstr "vypsat hash zprávy" +msgstr "Zpráv zašifrovno v minulosti: %d." #. TRANSLATORS: Please translate the text found in the source #. * file below. We don't directly internationalize that text so #. * that we can tweak it without breaking translations. msgid "TOFU detected a binding conflict" -msgstr "" +msgstr "TOFU objevilo konflikt ve vazbě" #. TRANSLATORS: Two letters (normally the lower and upper case #. * version of the hotkey) for each of the five choices. If #. * there is only one choice in your language, repeat it. msgid "gGaAuUrRbB" -msgstr "" +msgstr "gGaAuUrRbB" msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? " -msgstr "" +msgstr "(D)obrý, (P)řijmout jednou, (N)eznámý, (O)dmítnout jednou, špa(T)ný? " msgid "Defaulting to unknown.\n" -msgstr "" +msgstr "Použíje se výchozí volba neznýmý.\n" msgid "TOFU db corruption detected.\n" -msgstr "" +msgstr "Zjistěno poškození databýze TOFU.\n" -#, fuzzy, c-format -#| msgid "error writing key: %s\n" +#, c-format msgid "resetting keydb: %s\n" -msgstr "chyba při zápisu klíče: %s\n" +msgstr "databáze klíčů se resetuje: %s\n" -#, fuzzy, c-format -#| msgid "error setting OCSP target: %s\n" +#, c-format msgid "error setting TOFU binding's policy to %s\n" -msgstr "chyba při nastavování cíle OCSP: %s\n" +msgstr "chyba při nastavování politiky vazby TOFU na %s\n" -#, fuzzy, c-format -#| msgid "error creating a pipe: %s\n" +#, c-format msgid "error changing TOFU policy: %s\n" -msgstr "chyba při vytváření roury: %s\n" +msgstr "chyba při měnění politiky TOFU: %s\n" +# These strings are used as an argument in "Verified 2 signatures in past %s." #, c-format msgid "%lld~year" msgid_plural "%lld~years" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%lld~roku" +msgstr[1] "%lld~roků" +msgstr[2] "%lld~roků" #, c-format msgid "%lld~month" msgid_plural "%lld~months" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%lld~měsíce" +msgstr[1] "%lld~měsíců" +msgstr[2] "%lld~měsíců" #, c-format msgid "%lld~week" msgid_plural "%lld~weeks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%lld~týdne" +msgstr[1] "%lld~týdnů" +msgstr[2] "%lld~týdnů" #, c-format msgid "%lld~day" msgid_plural "%lld~days" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%lld~dne" +msgstr[1] "%lld~dnů" +msgstr[2] "%lld~dnů" #, c-format msgid "%lld~hour" msgid_plural "%lld~hours" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%lld~hodiny" +msgstr[1] "%lld~hodin" +msgstr[2] "%lld~hodin" #, c-format msgid "%lld~minute" msgid_plural "%lld~minutes" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%lld~minuty" +msgstr[1] "%lld~minut" +msgstr[2] "%lld~minut" #, c-format msgid "%lld~second" msgid_plural "%lld~seconds" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "%lld~sekundy" +msgstr[1] "%lld~sekund" +msgstr[2] "%lld~sekund" #, c-format msgid "%s: Verified 0~signatures and encrypted 0~messages." -msgstr "" +msgstr "%s: Ověřeno 0~podpisů a zašifrováno 0~zpráv." -#, fuzzy, c-format -#| msgid "Deleted %d signatures.\n" +#, c-format msgid "%s: Verified 0 signatures." -msgstr "Smazáno %d podpisů.\n" +msgstr "%s: Ověřeno 0 podpisů." -#, fuzzy, c-format -#| msgid "print message digests" +# The final %s is replaced by a string like "7~months". +#, c-format msgid "%s: Verified %ld~signature in the past %s." msgid_plural "%s: Verified %ld~signatures in the past %s." -msgstr[0] "vypsat hash zprávy" -msgstr[1] "vypsat hash zprávy" -msgstr[2] "vypsat hash zprávy" +msgstr[0] "%s: Ověřen %ld~podpis za poslední období %s." +msgstr[1] "%s: Ověřeny %ld~podpisy za poslední období %s." +msgstr[2] "%s: Ověřeno %ld~podpisů za poslední období %s." -#, fuzzy -#| msgid "encrypted with %lu passphrases\n" msgid "Encrypted 0 messages." -msgstr "zašifrováno s heslem %lu\n" +msgstr "Zašifrováno 0 zpráv." -#, fuzzy, c-format -#| msgid "print message digests" +#, c-format msgid "Encrypted %ld~message in the past %s." msgid_plural "Encrypted %ld~messages in the past %s." -msgstr[0] "vypsat hash zprávy" -msgstr[1] "vypsat hash zprávy" -msgstr[2] "vypsat hash zprávy" +msgstr[0] "Zašifrována %ld~zpráva za poslední období %s." +msgstr[1] "Zašifrovány %ld~zprávy za poslední období %s." +msgstr[2] "Zašifrováno %ld~zpráv za poslední období %s." -#, fuzzy, c-format -#| msgid "validity: %s" +#, c-format msgid "(policy: %s)" -msgstr "platnost: %s" +msgstr "(politika: %s)" msgid "" "Warning: we have yet to see a message signed using this key and user id!\n" msgstr "" +"Pozor: ještě musíme vidět zprávu podepsanou tímto klíčem a idenitou " +"uživatele!\n" msgid "" "Warning: we've only seen one message signed using this key and user id!\n" msgstr "" +"Pozor: viděli jsme pouze jednu zprávu podepsanou tímto klíčem a idenitou\n" +"uživatele!\n" msgid "Warning: you have yet to encrypt a message to this key!\n" -msgstr "" +msgstr "Pozor: ješte je třeba zašifrovat zprávu tímto klíčem!\n" msgid "Warning: you have only encrypted one message to this key!\n" -msgstr "" +msgstr "Pozor: tímto klíčem jste zašifrovali pouze jednu zprávu!\n" #, c-format msgid "" @@ -5859,22 +5722,37 @@ msgid_plural "" " %s\n" "to mark it as being bad.\n" msgstr[0] "" +"Pozor: Pokud si myslíte, že jste viděli více podpisů tímto klíčem a " +"identitou uživatele, pak tento klíč může být podvrh! Pečlivě prozkoumejte e-" +"mailovou adresu. Jestliže je klíč podezřelý, použijte příkaz\n" +" %s\n" +"k označení, že je špatný.\n" msgstr[1] "" +"Pozor: Pokud si myslíte, že jste viděli více podpisů tímto klíčem a s těmito " +"identitami uživatele, pak tento klíč může být podvrh! Pečlivě prozkoumejte e-" +"mailové adresy. Jestliže je klíč podezřelý, použijte příkaz\n" +" %s\n" +"k označení, že je špatný.\n" msgstr[2] "" +"Pozor: Pokud si myslíte, že jste viděli více podpisů tímto klíčem a s těmito " +"identitami uživatele, pak tento klíč může být podvrh! Pečlivě prozkoumejte e-" +"mailové adresy. Jestliže je klíč podezřelý, použijte příkaz\n" +" %s\n" +"k označení, že je špatný.\n" -#, fuzzy, c-format -#| msgid "error sending data: %s\n" +#, c-format msgid "error opening TOFU database: %s\n" -msgstr "chyba při odesílání dat: %s\n" +msgstr "chyba při otevírání databáze TOFU: %s\n" #, c-format msgid "WARNING: Encrypting to %s, which has no non-revoked user ids\n" msgstr "" +"POZOR: Šifruje se pro %s, kterýžto nemá neodvolané identity uživatele\n" -#, fuzzy, c-format -#| msgid "error writing public keyring '%s': %s\n" +#, c-format msgid "error setting policy for key %s, user id \"%s\": %s" -msgstr "chyba při zápisu do souboru veřejných klíčů „%s“: %s\n" +msgstr "" +"chyba při nastavování politiky pro klíč %s a identitu uživatele „%s“: %s" #, c-format msgid "'%s' is not a valid long keyID\n" @@ -5944,21 +5822,19 @@ msgstr "prosím proveďte --check-trustdb\n" msgid "checking the trustdb\n" msgstr "kontroluji databázi důvěry\n" -#, fuzzy, c-format -#| msgid "%lu keys processed so far\n" +#, c-format msgid "%d key processed" msgid_plural "%d keys processed" -msgstr[0] "%lu klíče byly doposud zpracovány\n" -msgstr[1] "%lu klíče byly doposud zpracovány\n" -msgstr[2] "%lu klíče byly doposud zpracovány\n" +msgstr[0] "zpracován %d klíč" +msgstr[1] "zpracovány %d klíče" +msgstr[2] "zpracováno %d klíčů" -#, fuzzy, c-format -#| msgid "%d keys processed (%d validity counts cleared)\n" +#, c-format msgid " (%d validity count cleared)\n" msgid_plural " (%d validity counts cleared)\n" -msgstr[0] "zpracováno %d klíčů (%d validit vymazáno)\n" -msgstr[1] "zpracováno %d klíčů (%d validit vymazáno)\n" -msgstr[2] "zpracováno %d klíčů (%d validit vymazáno)\n" +msgstr[0] " (vymazáno %d počítadlo platnosti)\n" +msgstr[1] " (vymazána %d počítadla platnosti)\n" +msgstr[2] " (vymazáno %d počítadel platnosti)\n" msgid "no ultimately trusted keys found\n" msgstr "žádný absolutně důvěryhodný klíč nebyl nalezen\n" @@ -6017,10 +5893,8 @@ msgstr "[ neznámá ]" msgid "[ undef ]" msgstr "[nedefinovaná]" -#, fuzzy -#| msgid "never" msgid "[ never ]" -msgstr "žádná" +msgstr "[ nikdy ]" msgid "[marginal]" msgstr "[ částečná ]" @@ -6131,15 +6005,13 @@ msgid "error retrieving CHV status from card\n" msgstr "chyba při získání CHV z karty\n" msgid "response does not contain the RSA modulus\n" -msgstr "odpověď neobsahuje RSA modulus\n" +msgstr "odpověď neobsahuje modulus RSA\n" msgid "response does not contain the RSA public exponent\n" -msgstr "odpověď neobsahuje veřejný RSA exponent\n" +msgstr "odpověď neobsahuje veřejný exponent RSA\n" -#, fuzzy -#| msgid "response does not contain the EC public point\n" msgid "response does not contain the EC public key\n" -msgstr "odpověď neobsahuje veřejný bod EC\n" +msgstr "odpověď neobsahuje veřejný klíč EC\n" msgid "response does not contain the public key data\n" msgstr "odpověď neobsahuje veřejný klíč\n" @@ -6153,32 +6025,29 @@ msgstr "čtení veřejného klíče se nezdařilo: %s\n" #. * the %s at the start and end of the string. #, c-format msgid "%sNumber: %s%%0AHolder: %s%%0ACounter: %lu%s" -msgstr "" +msgstr "%sČíslo: %s%%0ADržitel: %s%%0APočítadlo: %lu%s" #, c-format msgid "%sNumber: %s%%0AHolder: %s%s" -msgstr "" +msgstr "%sČíslo: %s%%0ADržitel: %s%s" #. TRANSLATORS: This is the number of remaining attempts to #. * enter a PIN. Use %%0A (double-percent,0A) for a linefeed. #, c-format msgid "Remaining attempts: %d" -msgstr "" +msgstr "Zbývá pokusů: %d" #, c-format msgid "using default PIN as %s\n" -msgstr "používám implicitní PIN jako %s\n" +msgstr "použije se výchozí PIN jako %s\n" #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" -"použití implicitního PINu jako %s selhalo: %s – vypínám jeho budoucí " -"použití\n" +"použití výchozího PINu jako %s selhalo: %s – vypínám jeho budoucí použití\n" -#, fuzzy -#| msgid "||Please enter the PIN" msgid "||Please unlock the card" -msgstr "||Prosím vložte PIN" +msgstr "||Prosím, odemkněte kartu" #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" @@ -6191,17 +6060,16 @@ msgstr "ověření CHV%d se nezdařilo: %s\n" msgid "card is permanently locked!\n" msgstr "karta je trvale uzamčena!\n" -#, fuzzy, c-format -#| msgid "%d Admin PIN attempts remaining before card is permanently locked\n" +#, c-format msgid "%d Admin PIN attempt remaining before card is permanently locked\n" msgid_plural "" "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr[0] "" -"Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora\n" +"Do trvalého uzamčení karty zůstává %d pokus na zadání PINu správce\n" msgstr[1] "" -"Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora\n" +"Do trvalého uzamčení karty zůstávají %d pokusy na zadání PINu správce\n" msgstr[2] "" -"Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora\n" +"Do trvalého uzamčení karty zůstává %d pokusů na zadání PINu správce\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %0A (single percent) for a linefeed. @@ -6209,7 +6077,7 @@ msgid "|A|Please enter the Admin PIN" msgstr "|A|Prosím, zadejte PIN správce" msgid "access to admin commands is not configured\n" -msgstr "přístup k administrátorským příkazům není nakonfigurován\n" +msgstr "přístup k příkazům správce není nakonfigurován\n" msgid "||Please enter the PIN" msgstr "||Prosím vložte PIN" @@ -6277,12 +6145,11 @@ msgstr "prosím počkejte než bude klíč vygenerován…\n" msgid "generating key failed\n" msgstr "generování klíče se nezdařilo\n" -#, fuzzy, c-format -#| msgid "key generation completed (%d seconds)\n" +#, c-format msgid "key generation completed (%d second)\n" msgid_plural "key generation completed (%d seconds)\n" -msgstr[0] "generování klíče dokončeno (%d sekund)\n" -msgstr[1] "generování klíče dokončeno (%d sekund)\n" +msgstr[0] "generování klíče dokončeno (%d sekunda)\n" +msgstr[1] "generování klíče dokončeno (%d sekundy)\n" msgstr[2] "generování klíče dokončeno (%d sekund)\n" msgid "invalid structure of OpenPGP card (DO 0x93)\n" @@ -7145,10 +7012,9 @@ msgid " runtime cached certificates: %u\n" msgstr "za běhu nakešovaných certifikátů: %u\n" # XXX: Align with msgid "permanently loaded certificates:" -#, fuzzy, c-format -#| msgid " runtime cached certificates: %u\n" +#, c-format msgid " trusted certificates: %u (%u,%u,%u,%u)\n" -msgstr "za běhu nakešovaných certifikátů: %u\n" +msgstr " důvěryhodných certifikátů: %u (%u,%u,%u,%u)\n" msgid "certificate already cached\n" msgstr "certifikát již v keši\n" @@ -7732,7 +7598,7 @@ msgid "allow sending OCSP requests" msgstr "povolí odesílání OCSP dotazů" msgid "allow online software version check" -msgstr "" +msgstr "povolí kontrolu verze softwaru po síti" msgid "inhibit the use of HTTP" msgstr "zakáže použití HTTP" @@ -8367,7 +8233,7 @@ msgid "Options enforcing a passphrase policy" msgstr "Volby vynucující politiku hesel" msgid "do not allow bypassing the passphrase policy" -msgstr "nedovolit obejít politiku hesel" +msgstr "nedovolit obejití politiky hesel" msgid "|N|set minimal required length for new passphrases to N" msgstr "|N|nastavit minimální vyžadovanou délku nových hesel na N" @@ -8384,10 +8250,8 @@ msgstr "|N|omezit platnost hesla na N dnů" msgid "do not allow the reuse of old passphrases" msgstr "nedovolit opakovat stará hesla" -#, fuzzy -#| msgid "|N|set LDAP timeout to N seconds" msgid "|N|set the Pinentry timeout to N seconds" -msgstr "|N|nastaví časový limit pro LDAP na N sekund" +msgstr "|N|nastavit časový limit pro Pinentry na N sekund" msgid "|NAME|use NAME as default secret key" msgstr "|NÁZEV|použít NÁZEV jako implicitní tajný klíč" @@ -8443,33 +8307,23 @@ msgstr "Seznam LDAP serverů" msgid "Configuration for OCSP" msgstr "Nastavení OCSP" -#, fuzzy -#| msgid "GPG for OpenPGP" msgid "OpenPGP" -msgstr "GPG pro OpenPGP" +msgstr "OpenPGP" msgid "Private Keys" -msgstr "" +msgstr "Soukromé klíče" -#, fuzzy -#| msgid "Smartcard Daemon" msgid "Smartcards" -msgstr "Démon pro čipové karty" +msgstr "Čipové karty" -#, fuzzy -#| msgid "GPG for S/MIME" msgid "S/MIME" -msgstr "GPG pro S/MIME" +msgstr "S/MIME" -#, fuzzy -#| msgid "network error" msgid "Network" -msgstr "chyba sítě" +msgstr "Síť" -#, fuzzy -#| msgid "PIN and Passphrase Entry" msgid "Passphrase Entry" -msgstr "Zadávání kódu PIN a hesla" +msgstr "Pole pro heslo" msgid "Component not suitable for launching" msgstr "Komponenta není vhodná pro spuštění" @@ -8481,15 +8335,13 @@ msgstr "Selhalo externí ověření komponenty %s" msgid "Note that group specifications are ignored\n" msgstr "Vezměte na vědomí, že určení skupiny se ignoruje\n" -#, fuzzy, c-format -#| msgid "error closing '%s': %s\n" +#, c-format msgid "error closing '%s'\n" -msgstr "chyba při uzavírání „%s“: %s\n" +msgstr "chyba při uzavírání „%s“\n" -#, fuzzy, c-format -#| msgid "error hashing '%s': %s\n" +#, c-format msgid "error parsing '%s'\n" -msgstr "chyba při výpočtu haše „%s“: %s\n" +msgstr "chyba při rozboru „%s“\n" msgid "list all components" msgstr "vypsat všechny komponenty" @@ -8509,10 +8361,8 @@ msgstr "|KOMPONENTA|zkontrolovat volby" msgid "apply global default values" msgstr "aplikovat globální implicitní hodnoty" -#, fuzzy -#| msgid "|FILE|take policy information from FILE" msgid "|FILE|update configuration files using FILE" -msgstr "|SOUBOR|vzít politiky ze SOUBORU" +msgstr "|SOUBOR|aktualizovat konfigurační soubory pomocí SOUBORU" msgid "get the configuration directories for @GPGCONF@" msgstr "získat adresáře s nastavením @GPGCONF@" @@ -8523,10 +8373,8 @@ msgstr "vypsat globální konfigurační soubor" msgid "check global configuration file" msgstr "zkontrolovat globální konfigurační soubor" -#, fuzzy -#| msgid "update the trust database" msgid "query the software version database" -msgstr "aktualizovat databázi důvěry" +msgstr "dotázat se databázi verzí softwaru" msgid "reload all or a given component" msgstr "znovu načíst všechny nebo zadané komponenty" @@ -8706,12 +8554,24 @@ msgstr "" "Syntaxe: gpg-check-pattern [volby] soubor_se_vzorem\n" "Prověří heslo zadané na vstupu proti souboru se vzory\n" -#~ msgid "listen() failed: %s\n" -#~ msgstr "volání listen() selhalo: %s\n" +#~ msgid "shadowing the key failed: %s\n" +#~ msgstr "výroba stínového klíče se nezdařila: %s\n" #~ msgid "do not grab keyboard and mouse" #~ msgstr "neuzurpovat si klávesnici a myš" +#~ msgid "communication problem with gpg-agent\n" +#~ msgstr "problémy v komunikaci s gpg-agentem\n" + +#~ msgid "canceled by user\n" +#~ msgstr "zrušeno uživatelem\n" + +#~ msgid "problem with the agent\n" +#~ msgstr "problém s agentem\n" + +#~ msgid "you found a bug ... (%s:%d)\n" +#~ msgstr "našli jste chybu… (%s:%d)\n" + #~ msgid "Error: URL too long (limit is %d characters).\n" #~ msgstr "Chyba: URL je příliš dlouhé (limit je %d znaků).\n" @@ -8721,64 +8581,20 @@ msgstr "" #~ msgid "Error: Private DO too long (limit is %d characters).\n" #~ msgstr "Chyba: Privátní DO je příliš dlouhé (limit je %d znaků).\n" -#, fuzzy -#~| msgid "key %s: unsupported public key algorithm\n" -#~ msgid "" -#~ "can't check signature with unsupported public-key algorithm (%d): %s.\n" -#~ msgstr "klíč %s: nepodporovaný algoritmus veřejného klíče\n" +#~ msgid "available TOFU policies:\n" +#~ msgstr "dostupné politiky TOFU:\n" -#, fuzzy -#~| msgid "card does not support digest algorithm %s\n" -#~ msgid "" -#~ "can't check signature with unsupported message-digest algorithm %d: %s.\n" -#~ msgstr "karta nepodporuje hashovací algoritmus %s\n" +#~ msgid "unknown TOFU DB format '%s'\n" +#~ msgstr "neznámý formát „%s“ databáze TOFU\n" -#, fuzzy -#~| msgid "Good signature from" -#~ msgid " (reordered signatures follow)" -#~ msgstr "Dobrý podpis od" +#~ msgid "key specification '%s' is ambiguous\n" +#~ msgstr "výběr klíče pomocí „%s“ není jednoznačné\n" -#, fuzzy -#~| msgid "key %s: %s\n" -#~ msgid "key %s:\n" -#~ msgstr "klíč %s: %s\n" +#~ msgid "'%s' matches at least:\n" +#~ msgstr "„%s“ odpovídá přinejmenším:\n" -#, fuzzy -#~| msgid "User ID \"%s\": %d signature removed\n" -#~ msgid "%d duplicate signature removed\n" -#~ msgid_plural "%d duplicate signatures removed\n" -#~ msgstr[0] "Uživatelské ID „%s“: %d podpisů odstraněno\n" -#~ msgstr[1] "Uživatelské ID „%s“: %d podpisů odstraněno\n" -#~ msgstr[2] "Uživatelské ID „%s“: %d podpisů odstraněno\n" - -#, fuzzy -#~| msgid "Good signature from" -#~ msgid "%d signature reordered\n" -#~ msgid_plural "%d signatures reordered\n" -#~ msgstr[0] "Dobrý podpis od" -#~ msgstr[1] "Dobrý podpis od" -#~ msgstr[2] "Dobrý podpis od" - -#~ msgid "new configuration file '%s' created\n" -#~ msgstr "vytvořen nový konfigurační soubor „%s“\n" - -#~ msgid "WARNING: options in '%s' are not yet active during this run\n" -#~ msgstr "" -#~ "VAROVÁNÍ: nastavení z „%s“ nejsou při tomto spuštění zatím aktivní\n" - -#, fuzzy -#~| msgid "Key generation failed: %s\n" -#~ msgid "User ID revocation failed: %s\n" -#~ msgstr "Vytvoření klíče se nepodařilo: %s\n" - -#~ msgid "||Please enter the PIN%%0A[sigs done: %lu]" -#~ msgstr "||Prosím vložte PIN%%0A[podpis hotov: %lu]" - -#~ msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" -#~ msgstr "|A|Prosím, zadejte PIN správce%%0A[zbývá pokusů: %d]" - -#~ msgid "DSA requires the use of a 160 bit hash algorithm\n" -#~ msgstr "DSA požaduje použití 160bitového hašovacího algoritmu\n" +#~ msgid "libgcrypt is too old (need %s, have %s)\n" +#~ msgstr "libgcrypt je příliš stará (potřebuji %s, mám %s)\n" #~ msgid "--store [filename]" #~ msgstr "--store [jméno souboru]" @@ -8804,8 +8620,8 @@ msgstr "" #~ msgid "--sign --symmetric [filename]" #~ msgstr "--sign --symmetric [jméno souboru]" -#~ msgid "--clear-sign [filename]" -#~ msgstr "--clear-sign [jméno souboru]" +#~ msgid "--clearsign [filename]" +#~ msgstr "--clearsign [jméno souboru]" #~ msgid "--decrypt [filename]" #~ msgstr "--decrypt [jméno souboru]" @@ -8825,104 +8641,6 @@ msgstr "" #~ msgid "[filename]" #~ msgstr "[jméno souboru]" -#~ msgid "shadowing the key failed: %s\n" -#~ msgstr "výroba stínového klíče se nezdařila: %s\n" - -#~ msgid "available TOFU policies:\n" -#~ msgstr "dostupné politiky TOFU:\n" - -#, fuzzy -#~| msgid "print message digests" -#~ msgid "%ld message signed" -#~ msgid_plural "%ld messages signed" -#~ msgstr[0] "vypsat hash zprávy" -#~ msgstr[1] "vypsat hash zprávy" -#~ msgstr[2] "vypsat hash zprávy" - -#~ msgid "GPG Agent" -#~ msgstr "Agent GPG" - -#~ msgid "Key Acquirer" -#~ msgstr "Stahovač klíčů" - -#~ msgid "communication problem with gpg-agent\n" -#~ msgstr "problémy v komunikaci s gpg-agentem\n" - -#~ msgid "canceled by user\n" -#~ msgstr "zrušeno uživatelem\n" - -#~ msgid "problem with the agent\n" -#~ msgstr "problém s agentem\n" - -#, fuzzy -#~| msgid "problem with the agent: %s\n" -#~ msgid "problem with the agent (unexpected response \"%s\")\n" -#~ msgstr "problém s agentem: %s\n" - -#~ msgid "unknown TOFU DB format '%s'\n" -#~ msgstr "neznámý formát „%s“ databáze TOFU\n" - -#~ msgid "libgcrypt is too old (need %s, have %s)\n" -#~ msgstr "libgcrypt je příliš stará (potřebuji %s, mám %s)\n" - -#~ msgid "" -#~ "Please enter the passphrase to unlock the secret key for the OpenPGP " -#~ "certificate:\n" -#~ "\"%.*s\"\n" -#~ "%u-bit %s key, ID %s,\n" -#~ "created %s%s.\n" -#~ msgstr "" -#~ "Prosím, zadejte heslo, abyste odemkli tajný klíč příslušející OpenPGP " -#~ "certifikátu:\n" -#~ "„%.*s“\n" -#~ "Klíč o délce %u bitů, typ %s, ID %s\n" -#~ "vytvořený %s%s.\n" - -#~ msgid "" -#~ "You need a passphrase to unlock the secret key for\n" -#~ "user: \"%s\"\n" -#~ msgstr "" -#~ "Musíte znát heslo, abyste odemkli tajný klíč pro\n" -#~ "uživatele: „%s“\n" - -#~ msgid "%u-bit %s key, ID %s, created %s" -#~ msgstr "délka %u bitů, typ %s, klíč %s, vytvořený %s" - -#~ msgid " (subkey on main key ID %s)" -#~ msgstr " (podklíč na hlavním klíči ID %s)" - -#~ msgid "can't access directory '%s': %s\n" -#~ msgstr "k adresáři „%s“ nelze přistoupit: %s\n" - -#~ msgid "run as windows service (background)" -#~ msgstr "poběží jako služba Windows (na pozadí)" - -#~ msgid "running in compatibility mode - certificate chain not checked!\n" -#~ msgstr "provoz v režimu kompatibility – řetěz certifikátů nezkontrolován!\n" - -#~ msgid "you found a bug ... (%s:%d)\n" -#~ msgstr "našli jste chybu… (%s:%d)\n" - -#, fuzzy -#~| msgid "%d user IDs without valid self-signatures detected\n" -#~ msgid "%d user ID without valid self-signature detected\n" -#~ msgid_plural "%d user IDs without valid self-signatures detected\n" -#~ msgstr[0] "" -#~ "objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n" -#~ msgstr[1] "" -#~ "objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n" -#~ msgstr[2] "" -#~ "objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n" - -#~ msgid "moving a key signature to the correct place\n" -#~ msgstr "přesunuji podpis klíče na správné místo\n" - -#~ msgid "key specification '%s' is ambiguous\n" -#~ msgstr "výběr klíče pomocí „%s“ není jednoznačné\n" - -#~ msgid "'%s' matches at least:\n" -#~ msgstr "„%s“ odpovídá přinejmenším:\n" - #~ msgid "%d signatures not checked due to missing keys\n" #~ msgstr "%d podpisů neověřených, protože chybí klíč\n" @@ -8932,6 +8650,16 @@ msgstr "" #~ msgid "1 user ID without valid self-signature detected\n" #~ msgstr "objeven 1 identifikátor uživatele bez platného podpisu jím samým\n" +#~ msgid "%d user IDs without valid self-signatures detected\n" +#~ msgstr "" +#~ "objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n" + +#~ msgid "moving a key signature to the correct place\n" +#~ msgstr "přesunuji podpis klíče na správné místo\n" + +#~ msgid "Deleted %d signatures.\n" +#~ msgstr "Smazáno %d podpisů.\n" + #~ msgid "User ID \"%s\": %d signatures removed\n" #~ msgstr "Uživatelské ID „%s“: %d podpisů odstraněno\n" @@ -8981,6 +8709,39 @@ msgstr "" #~ msgid "sending key %s to %s server %s\n" #~ msgstr "posílám klíč %s na %s server %s\n" +#~ msgid "new configuration file '%s' created\n" +#~ msgstr "vytvořen nový konfigurační soubor „%s“\n" + +#~ msgid "WARNING: options in '%s' are not yet active during this run\n" +#~ msgstr "" +#~ "VAROVÁNÍ: nastavení z „%s“ nejsou při tomto spuštění zatím aktivní\n" + +#~ msgid "" +#~ "Please enter the passphrase to unlock the secret key for the OpenPGP " +#~ "certificate:\n" +#~ "\"%.*s\"\n" +#~ "%u-bit %s key, ID %s,\n" +#~ "created %s%s.\n" +#~ msgstr "" +#~ "Prosím, zadejte heslo, abyste odemkli tajný klíč příslušející OpenPGP " +#~ "certifikátu:\n" +#~ "„%.*s“\n" +#~ "Klíč o délce %u bitů, typ %s, ID %s\n" +#~ "vytvořený %s%s.\n" + +#~ msgid "" +#~ "You need a passphrase to unlock the secret key for\n" +#~ "user: \"%s\"\n" +#~ msgstr "" +#~ "Musíte znát heslo, abyste odemkli tajný klíč pro\n" +#~ "uživatele: „%s“\n" + +#~ msgid "%u-bit %s key, ID %s, created %s" +#~ msgstr "délka %u bitů, typ %s, klíč %s, vytvořený %s" + +#~ msgid " (subkey on main key ID %s)" +#~ msgstr " (podklíč na hlavním klíči ID %s)" + #~ msgid "public key %s is %lu seconds newer than the signature\n" #~ msgstr "veřejný klíč %s je o %lu sekund novější než podpis\n" @@ -8994,6 +8755,30 @@ msgstr "" #~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" #~ msgstr "požadováno %d částečné důvěry a %d úplné důvěry, model %s\n" +#~ msgid "||Please enter the PIN%%0A[sigs done: %lu]" +#~ msgstr "||Prosím vložte PIN%%0A[podpis hotov: %lu]" + +#~ msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" +#~ msgstr "|A|Prosím, zadejte PIN správce%%0A[zbývá pokusů: %d]" + +#~ msgid "can't access directory '%s': %s\n" +#~ msgstr "k adresáři „%s“ nelze přistoupit: %s\n" + +#~ msgid "run as windows service (background)" +#~ msgstr "poběží jako služba Windows (na pozadí)" + +#~ msgid "running in compatibility mode - certificate chain not checked!\n" +#~ msgstr "provoz v režimu kompatibility – řetěz certifikátů nezkontrolován!\n" + +#~ msgid "DSA requires the use of a 160 bit hash algorithm\n" +#~ msgstr "DSA požaduje použití 160bitového hašovacího algoritmu\n" + +#~ msgid "GPG Agent" +#~ msgstr "Agent GPG" + +#~ msgid "Key Acquirer" +#~ msgstr "Stahovač klíčů" + #~ msgid "Passphrase" #~ msgstr "Heslo" @@ -9996,7 +9781,7 @@ msgstr "" #~ "na aktuální seznam předvoleb. Časová razítka všech dotčených podpisů\n" #~ "klíčů jimi samotnými budou posunuty o jednu vteřinu dopředu.\n" -#~ msgid "Please enter the passphrase; this is a secret sentence \n" +#~ msgid "Please enter the passhrase; this is a secret sentence \n" #~ msgstr "Prosím, vložte heslo; toto je tajná věta \n" #~ msgid "" From b4975788143b5cbab75534d7274c635986f15e0b Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 20 Dec 2017 08:30:40 +0100 Subject: [PATCH 07/20] po: Auto-update -- --- po/cs.po | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/po/cs.po b/po/cs.po index cbf02cdba..4693f7308 100644 --- a/po/cs.po +++ b/po/cs.po @@ -465,10 +465,6 @@ msgstr "chyba při přilepování socketu na „%s“: %s\n" msgid "can't set permissions of '%s': %s\n" msgstr "přístupová práva „%s“ nelze nastavit: %s\n" -#, c-format -msgid "listen() failed: %s\n" -msgstr "volání listen() selhalo: %s\n" - #, c-format msgid "listening on socket '%s'\n" msgstr "naslouchá se na socketu „%s“\n" @@ -1375,6 +1371,11 @@ msgstr "Jakou délku klíče pro šifrování si přejete? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Jakou délku klíče pro autentizaci si přejete? (%u) " +#, fuzzy, c-format +#| msgid "The card will now be re-configured to generate a key of %u bits\n" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Karta bude nyní přenastavena na generování klíče dlouhého %u bitů\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrouhleno na %u bitů\n" @@ -2609,14 +2610,6 @@ msgstr "klíč %s: veřejný klíč „%s“ importován\n" msgid "key %s: doesn't match our copy\n" msgstr "klíč %s: neodpovídá naší kopii\n" -#, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "klíč %s: nemohu najít originální blok klíče: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "klíč %s: nemohu číst originální blok klíče: %s\n" - #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "klíč %s: „%s“ 1 nový identifikátor uživatele\n" @@ -2702,6 +2695,14 @@ msgstr "Pro migraci „%s“ u každé karty spusťte: %s\n" msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "klíč %s: chybí veřejný klíč – nemohu aplikovat revokační certifikát\n" +#, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "klíč %s: nemohu najít originální blok klíče: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "klíč %s: nemohu číst originální blok klíče: %s\n" + #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "klíč %s: neplatný revokační certifikát: %s – zamítnuto\n" @@ -3153,6 +3154,11 @@ msgstr "směstnat nepoužitelná ID uživatelů a odstranit z klíče všechny msgid "Secret key is available.\n" msgstr "Tajný klíč je dostupný.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Tajný klíč je dostupný.\n" + msgid "Need the secret key to do this.\n" msgstr "Pro provedení této operace je potřeba tajný klíč.\n" @@ -8554,6 +8560,9 @@ msgstr "" "Syntaxe: gpg-check-pattern [volby] soubor_se_vzorem\n" "Prověří heslo zadané na vstupu proti souboru se vzory\n" +#~ msgid "listen() failed: %s\n" +#~ msgstr "volání listen() selhalo: %s\n" + #~ msgid "shadowing the key failed: %s\n" #~ msgstr "výroba stínového klíče se nezdařila: %s\n" From 558b17593ae97b8a07d06bf0d6af1a626b304501 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 20 Dec 2017 08:31:22 +0100 Subject: [PATCH 08/20] Release 2.2.4 --- NEWS | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index f59b9cd70..59b2a456b 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,33 @@ -Noteworthy changes in version 2.2.4 (unreleased) +Noteworthy changes in version 2.2.4 (2017-12-20) ------------------------------------------------ + * gpg: Change default preferences to prefer SHA512. + + * gpg: Print a warning when more than 150 MiB are encrypted using a + cipher with 64 bit block size. + + * gpg: Print a warning if the MDC feature has not been used for a + message. + + * gpg: Fix regular expression of domain addresses in trust + signatures. [#2923] + + * agent: New option --auto-expand-secmem to help with high numbers + of concurrent connections. Requires libgcrypt 1.8.2 for having + an effect. [#3530] + + * dirmngr: Cache responses of WKD queries. + + * gpgconf: Add option --status-fd. + + * wks: Add commands --check and --remove-key to gpg-wks-server. + + * Increase the backlog parameter of the daemons to 64 and add + option --listen-backlog. + + * New configure option --enable-run-gnupg-user-socket to first try a + socket directory which is not removed by systemd at session end. + Noteworthy changes in version 2.2.3 (2017-11-20) ------------------------------------------------ @@ -20,6 +47,8 @@ Noteworthy changes in version 2.2.3 (2017-11-20) * agent: Improve robustness of the shutdown pending state. [Git#7ffedfab89] + See-also: gnupg-announce/2017q4/000417.html + Noteworthy changes in version 2.2.2 (2017-11-07) ------------------------------------------------ From 84555d53720cc9240535ed9b57f1efcc9927f6dc Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 20 Dec 2017 10:13:54 +0100 Subject: [PATCH 09/20] Post release updates -- --- NEWS | 4 ++++ configure.ac | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 59b2a456b..f924176ab 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +Noteworthy changes in version 2.2.5 (unreleased) +------------------------------------------------ + + Noteworthy changes in version 2.2.4 (2017-12-20) ------------------------------------------------ diff --git a/configure.ac b/configure.ac index 382ef1df5..33148b4c2 100644 --- a/configure.ac +++ b/configure.ac @@ -28,7 +28,7 @@ min_automake_version="1.14" m4_define([mym4_package],[gnupg]) m4_define([mym4_major], [2]) m4_define([mym4_minor], [2]) -m4_define([mym4_micro], [4]) +m4_define([mym4_micro], [5]) # To start a new development series, i.e a new major or minor number # you need to mark an arbitrary commit before the first beta release From 290348e349e8d56a856f187a08e913f2ed525b3c Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 20 Dec 2017 15:37:29 +0100 Subject: [PATCH 10/20] common: Use larger buffer for homedir in case of 64 bit UIDs. * common/homedir.c (_gnupg_socketdir_internal): Enlarge PREFIX by 6 bytes for "/gnupg". -- The temporary buffer was to short for the extra "/gnupg". However the 20 bytes for the UID is large enough for all 32 bit UIDs and would only fail (detected) if a 64 bit UID is used. Fixes-commit: 17efcd2a2acdc3b7f00711272aa51e5be2476921 Reported-by: Rainer Perske. Signed-off-by: Werner Koch --- common/homedir.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/homedir.c b/common/homedir.c index a598900b9..65cf50fe7 100644 --- a/common/homedir.c +++ b/common/homedir.c @@ -554,7 +554,7 @@ _gnupg_socketdir_internal (int skip_checks, unsigned *r_info) }; int i; struct stat sb; - char prefix[13 + 1 + 20 + 6 + 1]; + char prefix[19 + 1 + 20 + 6 + 1]; const char *s; char *name = NULL; From f3ba66781a07af2e32f5887e6e15acdd4822a431 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 22 Dec 2017 12:55:32 +0100 Subject: [PATCH 11/20] kbx: Simplify by removing custom memory functions. * kbx/keybox-util.c (keybox_set_malloc_hooks): Remove. (_keybox_malloc, _keybox_calloc, keybox_realloc) (_keybox_free): Remove. (keybox_file_rename): Remove. Was not used. * sm/gpgsm.c (main): Remove call to keybox_set_malloc_hooks. * kbx/kbxutil.c (main): Ditto. * kbx/keybox-defs.h: Remove all separate includes. Include util.h. remove convenience macros. * common/logging.h (return_if_fail): New. Originally from keybox-defs.h but now using log_debug. (return_null_if_fail): Ditto. (return_val_if_fail): Ditto. (never_reached): Ditto. -- Originally the KBX code was written to allow standalone use. However this required lot of ugliness like separate memory allocators and such. It also precludes the use of some standard functions from common due to their use of the common gnupg malloc functions. Dropping all that makes things easier. Minor disadvantages: the kbx call done for gpg will now use gcry malloc fucntions and not the standard malloc functions. This might be a bit slower but removing them even fixes a possible bug in keybox_tmp_names which is used in gpg and uses gpg's xfree which is actually gcry_free. Signed-off-by: Werner Koch --- common/logging.h | 26 ++++++++++++++++++ kbx/kbxutil.c | 1 - kbx/keybox-defs.h | 69 +++-------------------------------------------- kbx/keybox-util.c | 53 ------------------------------------ kbx/keybox.h | 4 --- sm/gpgsm.c | 2 -- 6 files changed, 29 insertions(+), 126 deletions(-) diff --git a/common/logging.h b/common/logging.h index e1bf56b17..2225100cb 100644 --- a/common/logging.h +++ b/common/logging.h @@ -112,4 +112,30 @@ void log_printhex (const char *text, const void *buffer, size_t length); void log_clock (const char *string); +/* Some handy assertion macros which don't abort. */ + +#define return_if_fail(expr) do { \ + if (!(expr)) { \ + log_debug ("%s:%d: assertion '%s' failed\n", \ + __FILE__, __LINE__, #expr ); \ + return; \ + } } while (0) +#define return_null_if_fail(expr) do { \ + if (!(expr)) { \ + log_debug ("%s:%d: assertion '%s' failed\n", \ + __FILE__, __LINE__, #expr ); \ + return NULL; \ + } } while (0) +#define return_val_if_fail(expr,val) do { \ + if (!(expr)) { \ + log_debug ("%s:%d: assertion '%s' failed\n", \ + __FILE__, __LINE__, #expr ); \ + return (val); \ + } } while (0) +#define never_reached() do { \ + log_debug ("%s:%d: oops - should never get here\n", \ + __FILE__, __LINE__ ); \ + } while (0) + + #endif /*GNUPG_COMMON_LOGGING_H*/ diff --git a/kbx/kbxutil.c b/kbx/kbxutil.c index 9b43584a6..07774f2d9 100644 --- a/kbx/kbxutil.c +++ b/kbx/kbxutil.c @@ -464,7 +464,6 @@ main( int argc, char **argv ) /*create_dotlock(NULL); register locking cleanup */ /* We need to use the gcry malloc function because jnlib uses them. */ - keybox_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free); ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free ); diff --git a/kbx/keybox-defs.h b/kbx/keybox-defs.h index fd331f12b..be2dd721f 100644 --- a/kbx/keybox-defs.h +++ b/kbx/keybox-defs.h @@ -33,16 +33,7 @@ #include /* off_t */ -/* We include the type definitions from jnlib instead of defining our - owns here. This will not allow us build KBX in a standalone way - but there is currently no need for it anyway. Same goes for - stringhelp.h which for example provides a replacement for stpcpy - - fixme: Better use the LIBOBJ mechnism. */ -#include "../common/types.h" -#include "../common/stringhelp.h" -#include "../common/dotlock.h" -#include "../common/logging.h" - +#include "../common/util.h" #include "keybox.h" @@ -209,64 +200,10 @@ int _keybox_dump_cut_records (const char *filename, unsigned long from, /*-- keybox-util.c --*/ -void *_keybox_malloc (size_t n); -void *_keybox_calloc (size_t n, size_t m); -void *_keybox_realloc (void *p, size_t n); -void _keybox_free (void *p); - -#define xtrymalloc(a) _keybox_malloc ((a)) -#define xtrycalloc(a,b) _keybox_calloc ((a),(b)) -#define xtryrealloc(a,b) _keybox_realloc((a),(b)) -#define xfree(a) _keybox_free ((a)) - - -#define DIM(v) (sizeof(v)/sizeof((v)[0])) -#define DIMof(type,member) DIM(((type *)0)->member) -#ifndef STR -# define STR(v) #v -#endif -#define STR2(v) STR(v) /* - a couple of handy macros -*/ - -#define return_if_fail(expr) do { \ - if (!(expr)) { \ - fprintf (stderr, "%s:%d: assertion '%s' failed\n", \ - __FILE__, __LINE__, #expr ); \ - return; \ - } } while (0) -#define return_null_if_fail(expr) do { \ - if (!(expr)) { \ - fprintf (stderr, "%s:%d: assertion '%s' failed\n", \ - __FILE__, __LINE__, #expr ); \ - return NULL; \ - } } while (0) -#define return_val_if_fail(expr,val) do { \ - if (!(expr)) { \ - fprintf (stderr, "%s:%d: assertion '%s' failed\n", \ - __FILE__, __LINE__, #expr ); \ - return (val); \ - } } while (0) -#define never_reached() do { \ - fprintf (stderr, "%s:%d: oops; should never get here\n", \ - __FILE__, __LINE__ ); \ - } while (0) - - -/* some macros to replace ctype ones and avoid locale problems */ -#define digitp(p) (*(p) >= '0' && *(p) <= '9') -#define hexdigitp(a) (digitp (a) \ - || (*(a) >= 'A' && *(a) <= 'F') \ - || (*(a) >= 'a' && *(a) <= 'f')) -/* the atoi macros assume that the buffer has only valid digits */ -#define atoi_1(p) (*(p) - '0' ) -#define atoi_2(p) ((atoi_1(p) * 10) + atoi_1((p)+1)) -#define atoi_4(p) ((atoi_2(p) * 100) + atoi_2((p)+2)) -#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \ - *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10)) -#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1)) + * A couple of handy macros + */ #endif /*KEYBOX_DEFS_H*/ diff --git a/kbx/keybox-util.c b/kbx/keybox-util.c index b71335b7d..3ce5162cc 100644 --- a/kbx/keybox-util.c +++ b/kbx/keybox-util.c @@ -27,52 +27,6 @@ #endif #include "keybox-defs.h" -#include "../common/utilproto.h" - - -static void *(*alloc_func)(size_t n) = malloc; -static void *(*realloc_func)(void *p, size_t n) = realloc; -static void (*free_func)(void*) = free; - - - -void -keybox_set_malloc_hooks ( void *(*new_alloc_func)(size_t n), - void *(*new_realloc_func)(void *p, size_t n), - void (*new_free_func)(void*) ) -{ - alloc_func = new_alloc_func; - realloc_func = new_realloc_func; - free_func = new_free_func; -} - -void * -_keybox_malloc (size_t n) -{ - return alloc_func (n); -} - -void * -_keybox_realloc (void *a, size_t n) -{ - return realloc_func (a, n); -} - -void * -_keybox_calloc (size_t n, size_t m) -{ - void *p = _keybox_malloc (n*m); - if (p) - memset (p, 0, n* m); - return p; -} - -void -_keybox_free (void *p) -{ - if (p) - free_func (p); -} /* Store the two malloced temporary file names used for keybox updates @@ -146,10 +100,3 @@ keybox_tmp_names (const char *filename, int for_keyring, *r_tmpname = tmp_name; return 0; } - -gpg_error_t -keybox_file_rename (const char *oldname, const char *newname, - int *block_signals) -{ - return gnupg_rename_file (oldname, newname, block_signals); -} diff --git a/kbx/keybox.h b/kbx/keybox.h index 29884b05f..665b05fc0 100644 --- a/kbx/keybox.h +++ b/kbx/keybox.h @@ -127,10 +127,6 @@ int keybox_rebuild_cache (void *); /*-- keybox-util.c --*/ -void keybox_set_malloc_hooks ( void *(*new_alloc_func)(size_t n), - void *(*new_realloc_func)(void *p, size_t n), - void (*new_free_func)(void*) ); - gpg_error_t keybox_tmp_names (const char *filename, int for_keyring, char **r_bakname, char **r_tmpname); diff --git a/sm/gpgsm.c b/sm/gpgsm.c index b505be154..ab08a52f0 100644 --- a/sm/gpgsm.c +++ b/sm/gpgsm.c @@ -1007,8 +1007,6 @@ main ( int argc, char **argv) assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); setup_libassuan_logging (&opt.debug, NULL); - keybox_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free); - /* Setup a default control structure for command line mode */ memset (&ctrl, 0, sizeof ctrl); gpgsm_init_default_ctrl (&ctrl); From a6849888295f0e0872c948cd72a59374bb867777 Mon Sep 17 00:00:00 2001 From: Kristian Fiskerstrand Date: Wed, 20 Dec 2017 21:12:01 +0100 Subject: [PATCH 12/20] build: Increase libassuan min version to 2.5.0 -- assuan_sock_set_system_hooks is used unconditionally in gnupg since commit 9f641430dcdecbd7ee205d407cb19bb4262aa95d, and as such it requires libassuan 2.5.0 (function introduced in commit 90dc81682b13a7cf716a8a26b891051cbd4b0caf) For a detailed description see: https://lists.gnupg.org/pipermail/gnupg-devel/2017-December/033323.html --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 33148b4c2..c3fce317d 100644 --- a/configure.ac +++ b/configure.ac @@ -59,7 +59,7 @@ NEED_LIBGCRYPT_API=1 NEED_LIBGCRYPT_VERSION=1.7.0 NEED_LIBASSUAN_API=2 -NEED_LIBASSUAN_VERSION=2.4.3 +NEED_LIBASSUAN_VERSION=2.5.0 NEED_KSBA_API=1 NEED_KSBA_VERSION=1.3.4 From 4f88b0f56134af2ce56d434b7acd47fcf9b6f7cf Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Wed, 27 Dec 2017 17:20:03 +0900 Subject: [PATCH 13/20] scd: Fix for inactive card at start by internal CCID driver. * scd/ccid-driver.c (do_close_reader): Set NULL on close. (bulk_in): Move DEBUGOUT and check by EP_INTR. (ccid_get_atr): Clear powered_off flag after initial status check. -- Many card readers automatically turn on inserted card, but some defaults to turning off at start. GnuPG-bug-id: 3508 Signed-off-by: NIIBE Yutaka --- scd/ccid-driver.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index 4f4a32dfc..5046da555 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -1778,6 +1778,7 @@ do_close_reader (ccid_driver_t handle) } libusb_free_transfer (handle->transfer); + handle->transfer = NULL; } libusb_release_interface (handle->idev, handle->ifc_no); --ccid_usb_thread_is_alive; @@ -2038,10 +2039,14 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length, /* * Communication failure by device side. * Possibly, it was forcibly suspended and resumed. + * + * Only detect this kind of failure when interrupt transfer is + * not supported. For card reader with interrupt transfer + * support removal is detected by intr_cb. */ - DEBUGOUT ("CCID: card inactive/removed\n"); - if (handle->transfer == NULL) + if (handle->ep_intr < 0) { + DEBUGOUT ("CCID: card inactive/removed\n"); handle->powered_off = 1; scd_kick_the_loop (); } @@ -2539,6 +2544,14 @@ ccid_get_atr (ccid_driver_t handle, if (statusbits == 2) return CCID_DRIVER_ERR_NO_CARD; + /* + * In the first invocation of ccid_slot_status, card reader may + * return CCID_DRIVER_ERR_CARD_INACTIVE and handle->powered_off may + * become 1. Because inactive card is no problem (we are turning it + * ON here), clear the flag. + */ + handle->powered_off = 0; + /* For an inactive and also for an active card, issue the PowerOn command to get the ATR. */ again: From 412bb7a801f242d47a82712080cce6ddbb843166 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 29 Dec 2017 20:18:20 +0100 Subject: [PATCH 14/20] gpg: Allow the use of "cv25519" and "ed25519" in the keygen parms. * g10/keygen.c (gen_ecc): Map curve names. -- See https://lists.gnupg.org/pipermail/gnupg-users/2017-December/059619.html Signed-off-by: Werner Koch --- g10/keygen.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/g10/keygen.c b/g10/keygen.c index b42afa858..a79b4fb09 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -1581,6 +1581,13 @@ gen_ecc (int algo, const char *curve, kbnode_t pub_root, if (!curve || !*curve) return gpg_error (GPG_ERR_UNKNOWN_CURVE); + /* Map the displayed short forms of some curves to their canonical + * names. */ + if (!ascii_strcasecmp (curve, "cv25519")) + curve = "Curve25519"; + else if (!ascii_strcasecmp (curve, "ed25519")) + curve = "Ed25519"; + /* Note that we use the "comp" flag with EdDSA to request the use of a 0x40 compression prefix octet. */ if (algo == PUBKEY_ALGO_EDDSA) From 4d3c500f4793eb263940ff5ef87ec4ead63c9b4b Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 1 Jan 2018 14:59:30 +0100 Subject: [PATCH 15/20] gpg: Allow "futuredefault" as alias for "future-default". * g10/keygen.c (parse_key_parameter_string): Allow "futuredefault" and use case-insensitive matching (quick_generate_keypair): Ditto. (parse_algo_usage_expire): Ditto. -- The man page is sometimes rendered in a way that the hyphen may be not be considered as part of the string. And while at it we also allow case-insensitivity. GnuPG-bug-id: 3655 Signed-off-by: Werner Koch --- g10/keygen.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/g10/keygen.c b/g10/keygen.c index a79b4fb09..01f3de081 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -3153,9 +3153,10 @@ parse_key_parameter_string (const char *string, int part, *r_subcurve = NULL; if (!string || !*string - || !strcmp (string, "default") || !strcmp (string, "-")) + || !ascii_strcasecmp (string, "default") || !strcmp (string, "-")) string = get_default_pubkey_algo (); - else if (!strcmp (string, "future-default")) + else if (!ascii_strcasecmp (string, "future-default") + || !ascii_strcasecmp (string, "futuredefault")) string = FUTURE_STD_KEY_PARAM; primary = xstrdup (string); @@ -3984,9 +3985,10 @@ quick_generate_keypair (ctrl_t ctrl, const char *uid, const char *algostr, if (!*expirestr || strcmp (expirestr, "-") == 0) expirestr = default_expiration_interval; - if ((!*algostr || !strcmp (algostr, "default") - || !strcmp (algostr, "future-default")) - && (!*usagestr || !strcmp (usagestr, "default") + if ((!*algostr || !ascii_strcasecmp (algostr, "default") + || !ascii_strcasecmp (algostr, "future-default") + || !ascii_strcasecmp (algostr, "futuredefault")) + && (!*usagestr || !ascii_strcasecmp (usagestr, "default") || !strcmp (usagestr, "-"))) { /* Use default key parameters. */ @@ -4928,7 +4930,7 @@ parse_algo_usage_expire (ctrl_t ctrl, int for_subkey, /* Parse the usage string. */ if (!usagestr || !*usagestr - || !strcmp (usagestr, "default") || !strcmp (usagestr, "-")) + || !ascii_strcasecmp (usagestr, "default") || !strcmp (usagestr, "-")) ; /* Keep usage from parse_key_parameter_string. */ else if ((wantuse = parse_usagestr (usagestr)) != -1) use = wantuse; From 339b3301ee8410fe3bbdebb66a6e83801d79d40d Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 8 Jan 2018 09:30:31 +0100 Subject: [PATCH 16/20] gpg: Print all keys with --decrypt --list-only. * g10/mainproc.c (proc_pubkey_enc): Use dedicated error code for list-only and put the key into PKENC_LIST. (print_pkenc_list): Take care of the new error code. -- If the secret keys exist in --list-only mode it was not printed in --list-only mode. GnuPG-bug-id: 3718 Signed-off-by: Werner Koch --- g10/mainproc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/g10/mainproc.c b/g10/mainproc.c index b712e6048..512d33c59 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -422,7 +422,7 @@ proc_pubkey_enc (ctrl_t ctrl, CTX c, PACKET *pkt) || have_secret_key_with_kid (enc->keyid))) { if(opt.list_only) - result = -1; + result = GPG_ERR_MISSING_ACTION; /* fixme: Use better error code. */ else { c->dek = xmalloc_secure_clear (sizeof *c->dek); @@ -440,9 +440,7 @@ proc_pubkey_enc (ctrl_t ctrl, CTX c, PACKET *pkt) else result = GPG_ERR_PUBKEY_ALGO; - if (result == -1) - ; - else + if (1) { /* Store it for later display. */ struct kidlist_item *x = xmalloc (sizeof *x); @@ -510,6 +508,10 @@ print_pkenc_list (ctrl_t ctrl, struct kidlist_item *list, int failed) write_status_text (STATUS_NO_SECKEY, buf); } } + else if (gpg_err_code (list->reason) == GPG_ERR_MISSING_ACTION) + { + /* Not tested for secret key due to --list-only mode. */ + } else if (list->reason) { log_info (_("public key decryption failed: %s\n"), From 6fb5713f4a6976900cc70c140e61043b6ef688d1 Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Mon, 8 Jan 2018 19:09:28 +0100 Subject: [PATCH 17/20] doc: Note pinentry-mode for passphrase opts * doc/gpg.texi (--passphrase, --passphrase-file, --passphrase-fd): Note that pinentry-mode needs to be loopback. Signed-off-by: Andre Heinecke --- doc/gpg.texi | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/doc/gpg.texi b/doc/gpg.texi index 35bb9a810..9776a3b05 100644 --- a/doc/gpg.texi +++ b/doc/gpg.texi @@ -3082,8 +3082,9 @@ will be read from file descriptor @var{n}. If you use 0 for @var{n}, the passphrase will be read from STDIN. This can only be used if only one passphrase is supplied. -Note that this passphrase is only used if the option @option{--batch} -has also been given. This is different from GnuPG version 1.x. +Note that since Version 2.0 this passphrase is only used if the +option @option{--batch} has also been given. Since Version 2.1 +the @option{--pinentry-mode} also needs to be set to @code{loopback}. @item --passphrase-file @var{file} @opindex passphrase-file @@ -3092,8 +3093,10 @@ be read from file @var{file}. This can only be used if only one passphrase is supplied. Obviously, a passphrase stored in a file is of questionable security if other users can read this file. Don't use this option if you can avoid it. -Note that this passphrase is only used if the option @option{--batch} -has also been given. This is different from GnuPG version 1.x. + +Note that since Version 2.0 this passphrase is only used if the +option @option{--batch} has also been given. Since Version 2.1 +the @option{--pinentry-mode} also needs to be set to @code{loopback}. @item --passphrase @var{string} @opindex passphrase @@ -3101,8 +3104,10 @@ Use @var{string} as the passphrase. This can only be used if only one passphrase is supplied. Obviously, this is of very questionable security on a multi-user system. Don't use this option if you can avoid it. -Note that this passphrase is only used if the option @option{--batch} -has also been given. This is different from GnuPG version 1.x. + +Note that since Version 2.0 this passphrase is only used if the +option @option{--batch} has also been given. Since Version 2.1 +the @option{--pinentry-mode} also needs to be set to @code{loopback}. @item --pinentry-mode @var{mode} @opindex pinentry-mode From e1e35db510c9222e7a7dc208c2e49df556954170 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 18 Jan 2018 13:38:23 +0100 Subject: [PATCH 18/20] gpg: Fix the use of future-default with --quick-add-key. * g10/keygen.c (parse_key_parameter_part): Add arg clear_cert. (parse_key_parameter_string): Add arg suggested_use and implement fallback. Change callers to pass 0 for new arg. (parse_algo_usage_expire): Pass the parsed USAGESTR to parse_key_parameter_string so that it can use it in case a subkey is to be created. -- The problem here was that future-default gives the primary and subkey algorithm. However, when using future-default for adding a key, the second part was always used which is for encryption. If the caller now wanted to create a signing subkey using the future-default parameters this did not worked. gpg --batch --passphrase "" --quick-add-key FPR future-default encr aready worked as did gpg --batch --passphrase "" --quick-add-key FPR ed25519 sign but gpg --batch --passphrase "" --quick-add-key FPR future-default sign does only work with this fix. GnuPG-bug-id: 3747 Signed-off-by: Werner Koch --- g10/keygen.c | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/g10/keygen.c b/g10/keygen.c index 01f3de081..8de6538ca 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -2895,9 +2895,11 @@ generate_user_id (KBNODE keyblock, const char *uidstr) * success is returned. On error an error code is returned. Note * that STRING may be modified by this function. NULL may be passed * for any parameter. FOR_SUBKEY shall be true if this is used as a + * subkey. If CLEAR_CERT is set a default CERT usage will be cleared; + * this is useful if for example the default algorithm is used for a * subkey. */ static gpg_error_t -parse_key_parameter_part (char *string, int for_subkey, +parse_key_parameter_part (char *string, int for_subkey, int clear_cert, int *r_algo, unsigned int *r_size, unsigned int *r_keyuse, char const **r_curve) @@ -3048,6 +3050,10 @@ parse_key_parameter_part (char *string, int for_subkey, if (!for_subkey) keyuse |= PUBKEY_USAGE_CERT; + /* But if requested remove th cert usage. */ + if (clear_cert) + keyuse &= ~PUBKEY_USAGE_CERT; + /* Check that usage is actually possible. */ if (/**/((keyuse & (PUBKEY_USAGE_SIG|PUBKEY_USAGE_AUTH|PUBKEY_USAGE_CERT)) && !pubkey_get_nsig (algo)) @@ -3119,14 +3125,16 @@ parse_key_parameter_part (char *string, int for_subkey, * -1 := Both parts * 0 := Only the part of the primary key * 1 := If there is one part parse that one, if there are - * two parts parse the second part. Always return - * in the args for the primary key (R_ALGO,....). + * two parts parse the part which best matches the + * SUGGESTED_USE or in case that can't be evaluated the second part. + * Always return using the args for the primary key (R_ALGO,....). * */ gpg_error_t parse_key_parameter_string (const char *string, int part, + unsigned int suggested_use, int *r_algo, unsigned int *r_size, - unsigned *r_keyuse, + unsigned int *r_keyuse, char const **r_curve, int *r_subalgo, unsigned int *r_subsize, unsigned *r_subkeyuse, @@ -3165,18 +3173,31 @@ parse_key_parameter_string (const char *string, int part, *secondary++ = 0; if (part == -1 || part == 0) { - err = parse_key_parameter_part (primary, 0, r_algo, r_size, + err = parse_key_parameter_part (primary, 0, 0, r_algo, r_size, r_keyuse, r_curve); if (!err && part == -1) - err = parse_key_parameter_part (secondary, 1, r_subalgo, r_subsize, + err = parse_key_parameter_part (secondary, 1, 0, r_subalgo, r_subsize, r_subkeyuse, r_subcurve); } else if (part == 1) { /* If we have SECONDARY, use that part. If there is only one - * part consider this to be the subkey algo. */ - err = parse_key_parameter_part (secondary? secondary : primary, 1, - r_algo, r_size, r_keyuse, r_curve); + * part consider this to be the subkey algo. In case a + * SUGGESTED_USE has been given and the usage of the secondary + * part does not match SUGGESTED_USE try again using the primary + * part. Noet thar when falling back to the primary key we need + * to force clearing the cert usage. */ + if (secondary) + { + err = parse_key_parameter_part (secondary, 1, 0, + r_algo, r_size, r_keyuse, r_curve); + if (!err && suggested_use && r_keyuse && !(suggested_use & *r_keyuse)) + err = parse_key_parameter_part (primary, 1, 1 /*(clear cert)*/, + r_algo, r_size, r_keyuse, r_curve); + } + else + err = parse_key_parameter_part (primary, 1, 0, + r_algo, r_size, r_keyuse, r_curve); } xfree (primary); @@ -3263,7 +3284,7 @@ get_parameter_algo( struct para_data_s *para, enum para_name key, * for the curve etc. That is a ugly but demanded for backward * compatibility with the batch key generation. It would be * better to make full use of parse_key_parameter_string. */ - parse_key_parameter_string (NULL, 0, + parse_key_parameter_string (NULL, 0, 0, &i, NULL, NULL, NULL, NULL, NULL, NULL, NULL); @@ -3997,7 +4018,7 @@ quick_generate_keypair (ctrl_t ctrl, const char *uid, const char *algostr, unsigned int keyuse, subkeyuse; const char *curve, *subcurve; - err = parse_key_parameter_string (algostr, -1, + err = parse_key_parameter_string (algostr, -1, 0, &algo, &size, &keyuse, &curve, &subalgo, &subsize, &subkeyuse, &subcurve); @@ -4376,7 +4397,7 @@ generate_keypair (ctrl_t ctrl, int full, const char *fname, #endif , "--full-generate-key" ); - err = parse_key_parameter_string (NULL, -1, + err = parse_key_parameter_string (NULL, -1, 0, &algo, &size, &keyuse, &curve, &subalgo, &subsize, &subkeyuse, &subcurve); @@ -4923,6 +4944,7 @@ parse_algo_usage_expire (ctrl_t ctrl, int for_subkey, } err = parse_key_parameter_string (algostr, for_subkey? 1 : 0, + usagestr? parse_usagestr (usagestr):0, &algo, &nbits, &use, &curve, NULL, NULL, NULL, NULL); if (err) From 91303b7df9c3e810cfcd4920f78bac6f8b7df2b2 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Mon, 22 Jan 2018 19:46:14 +0900 Subject: [PATCH 19/20] scd: Support KDF Data Object of OpenPGPcard V3.3. * scd/app-openpgp.c (do_getattr, do_setattr): Add KDF support. (pin2hash_if_kdf): New. (verify_a_chv): Add PINLEN arg. Use pin2hash_if_kdf. (verify_chv2, do_sign): Follow the change of verify_a_chv. (verify_chv3, do_change_pin): Use pin2hash_if_kdf. -- GnuPG-bug-id: 3152 Signed-off-by: NIIBE Yutaka --- scd/app-openpgp.c | 119 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 94 insertions(+), 25 deletions(-) diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 6fcec3e4e..c9f2840e6 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -121,6 +121,7 @@ static struct { /* V3.0 */ { 0x7F74, 0, 0, 1, 0, 0, 0, 0, "General Feature Management"}, { 0x00D5, 0, 0, 1, 0, 0, 0, 0, "AES key data"}, + { 0x00F9, 0, 0, 1, 0, 0, 0, 0, "KDF data object"}, { 0 } }; @@ -199,7 +200,7 @@ struct app_local_s { unsigned int private_dos:1; unsigned int algo_attr_change:1; /* Algorithm attributes changeable. */ unsigned int has_decrypt:1; /* Support symmetric decryption. */ - unsigned int kdf_do:1; /* Support KDF DOs. */ + unsigned int kdf_do:1; /* Support KDF DO. */ unsigned int sm_algo:2; /* Symmetric crypto algo for SM. */ unsigned int pin_blk2:1; /* PIN block 2 format supported. */ @@ -980,6 +981,7 @@ do_getattr (app_t app, ctrl_t ctrl, const char *name) { "PRIVATE-DO-4", 0x0104 }, { "$AUTHKEYID", 0x0000, -3 }, { "$DISPSERIALNO",0x0000, -4 }, + { "KDF", 0x00F9 }, { NULL, 0 } }; int idx, i, rc; @@ -2054,6 +2056,47 @@ get_prompt_info (app_t app, int chvno, unsigned long sigcount, int remaining) return result; } +/* Compute hash if KDF-DO is available. CHVNO must be 0 for reset + code, 1 or 2 for user pin and 3 for admin pin. + */ +static gpg_error_t +pin2hash_if_kdf (app_t app, int chvno, char *pinvalue, int *r_pinlen) +{ + gpg_error_t err = 0; + void *relptr; + unsigned char *buffer; + size_t buflen; + + if (app->app_local->extcap.kdf_do + && (relptr = get_one_do (app, 0x00F9, &buffer, &buflen, NULL))) + { + char *salt; + unsigned long s2k_count; + char dek[32]; + + salt = &buffer[(chvno==3 ? 34 : (chvno==0 ? 24 : 14))]; + s2k_count = (((unsigned int)buffer[8] << 24) + | (buffer[9] << 16) | (buffer[10] << 8) | buffer[11]); + err = gcry_kdf_derive (pinvalue, strlen (pinvalue), + GCRY_KDF_ITERSALTED_S2K, + DIGEST_ALGO_SHA256, salt, 8, + s2k_count, sizeof (dek), dek); + if (!err) + { + /* pinvalue has a buffer of MAXLEN_PIN+1, 32 is OK. */ + *r_pinlen = 32; + memcpy (pinvalue, dek, *r_pinlen); + wipememory (dek, *r_pinlen); + } + + xfree (relptr); + } + else + *r_pinlen = strlen (pinvalue); + + return err; +} + /* Verify a CHV either using the pinentry or if possible by using a pinpad. PINCB and PINCB_ARG describe the usual callback @@ -2068,8 +2111,8 @@ get_prompt_info (app_t app, int chvno, unsigned long sigcount, int remaining) static gpg_error_t verify_a_chv (app_t app, gpg_error_t (*pincb)(void*, const char *, char **), - void *pincb_arg, - int chvno, unsigned long sigcount, char **pinvalue) + void *pincb_arg, int chvno, unsigned long sigcount, + char **pinvalue, int *pinlen) { int rc = 0; char *prompt_buffer = NULL; @@ -2081,6 +2124,7 @@ verify_a_chv (app_t app, log_assert (chvno == 1 || chvno == 2); *pinvalue = NULL; + *pinlen = 0; remaining = get_remaining_tries (app, 0); if (remaining == -1) @@ -2169,8 +2213,9 @@ verify_a_chv (app_t app, return gpg_error (GPG_ERR_BAD_PIN); } - rc = iso7816_verify (app->slot, 0x80+chvno, - *pinvalue, strlen (*pinvalue)); + rc = pin2hash_if_kdf (app, chvno, *pinvalue, pinlen); + if (!rc) + rc = iso7816_verify (app->slot, 0x80+chvno, *pinvalue, *pinlen); } if (rc) @@ -2194,11 +2239,12 @@ verify_chv2 (app_t app, { int rc; char *pinvalue; + int pinlen; if (app->did_chv2) return 0; /* We already verified CHV2. */ - rc = verify_a_chv (app, pincb, pincb_arg, 2, 0, &pinvalue); + rc = verify_a_chv (app, pincb, pincb_arg, 2, 0, &pinvalue, &pinlen); if (rc) return rc; app->did_chv2 = 1; @@ -2209,7 +2255,7 @@ verify_chv2 (app_t app, the card is not configured to require a verification before each CHV1 controlled operation (force_chv1) and if we are not using the pinpad (PINVALUE == NULL). */ - rc = iso7816_verify (app->slot, 0x81, pinvalue, strlen (pinvalue)); + rc = iso7816_verify (app->slot, 0x81, pinvalue, pinlen); if (gpg_err_code (rc) == GPG_ERR_BAD_PIN) rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED); if (rc) @@ -2319,6 +2365,7 @@ verify_chv3 (app_t app, else { char *pinvalue; + int pinlen; rc = pincb (pincb_arg, prompt, &pinvalue); xfree (prompt); @@ -2338,7 +2385,9 @@ verify_chv3 (app_t app, return gpg_error (GPG_ERR_BAD_PIN); } - rc = iso7816_verify (app->slot, 0x83, pinvalue, strlen (pinvalue)); + rc = pin2hash_if_kdf (app, 3, pinvalue, &pinlen); + if (!rc) + rc = iso7816_verify (app->slot, 0x83, pinvalue, pinlen); xfree (pinvalue); } @@ -2389,6 +2438,7 @@ do_setattr (app_t app, const char *name, { "SM-KEY-MAC", 0x00D2, 3, 0, 1 }, { "KEY-ATTR", 0, 0, 3, 1 }, { "AESKEY", 0x00D5, 3, 0, 1 }, + { "KDF", 0x00F9, 3, 0, 1 }, { NULL, 0 } }; int exmode; @@ -2501,6 +2551,8 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, pininfo_t pininfo; int use_pinpad = 0; int minlen = 6; + int pinlen0 = 0; + int pinlen = 0; (void)ctrl; memset (&pininfo, 0, sizeof pininfo); @@ -2685,10 +2737,17 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, rc = gpg_error_from_syserror (); else { - strcpy (stpcpy (buffer, resetcode), pinvalue); - rc = iso7816_reset_retry_counter_with_rc (app->slot, 0x81, - buffer, strlen (buffer)); - wipememory (buffer, strlen (buffer)); + strcpy (buffer, resetcode); + rc = pin2hash_if_kdf (app, 0, buffer, &pinlen0); + if (!rc) + { + strcpy (buffer+pinlen0, pinvalue); + rc = pin2hash_if_kdf (app, 0, buffer+pinlen0, &pinlen); + } + if (!rc) + rc = iso7816_reset_retry_counter_with_rc (app->slot, 0x81, + buffer, pinlen0+pinlen); + wipememory (buffer, pinlen0 + pinlen); xfree (buffer); } } @@ -2700,16 +2759,19 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, rc = gpg_error (GPG_ERR_BAD_PIN); } else - rc = iso7816_put_data (app->slot, 0, 0xD3, - pinvalue, strlen (pinvalue)); + { + rc = pin2hash_if_kdf (app, 0, pinvalue, &pinlen); + if (!rc) + rc = iso7816_put_data (app->slot, 0, 0xD3, pinvalue, pinlen); + } } else if (reset_mode) { - rc = iso7816_reset_retry_counter (app->slot, 0x81, - pinvalue, strlen (pinvalue)); + rc = pin2hash_if_kdf (app, 1, pinvalue, &pinlen); + if (!rc) + rc = iso7816_reset_retry_counter (app->slot, 0x81, pinvalue, pinlen); if (!rc && !app->app_local->extcap.is_v2) - rc = iso7816_reset_retry_counter (app->slot, 0x82, - pinvalue, strlen (pinvalue)); + rc = iso7816_reset_retry_counter (app->slot, 0x82, pinvalue, pinlen); } else if (!app->app_local->extcap.is_v2) { @@ -2750,14 +2812,20 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, pincb (pincb_arg, NULL, NULL); /* Dismiss the prompt. */ } else - rc = iso7816_change_reference_data (app->slot, 0x80 + chvno, - oldpinvalue, strlen (oldpinvalue), - pinvalue, strlen (pinvalue)); + { + rc = pin2hash_if_kdf (app, chvno, oldpinvalue, &pinlen0); + if (!rc) + rc = pin2hash_if_kdf (app, chvno, pinvalue, &pinlen); + if (!rc) + rc = iso7816_change_reference_data (app->slot, 0x80 + chvno, + oldpinvalue, pinlen0, + pinvalue, pinlen); + } } if (pinvalue) { - wipememory (pinvalue, strlen (pinvalue)); + wipememory (pinvalue, pinlen); xfree (pinvalue); } if (rc) @@ -2771,7 +2839,7 @@ do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, } if (oldpinvalue) { - wipememory (oldpinvalue, strlen (oldpinvalue)); + wipememory (oldpinvalue, pinlen0); xfree (oldpinvalue); } return rc; @@ -4277,8 +4345,9 @@ do_sign (app_t app, const char *keyidstr, int hashalgo, if (!app->did_chv1 || app->force_chv1 ) { char *pinvalue; + int pinlen; - rc = verify_a_chv (app, pincb, pincb_arg, 1, sigcount, &pinvalue); + rc = verify_a_chv (app, pincb, pincb_arg, 1, sigcount, &pinvalue, &pinlen); if (rc) return rc; @@ -4291,7 +4360,7 @@ do_sign (app_t app, const char *keyidstr, int hashalgo, pinpad has been used. */ if (!app->did_chv2 && pinvalue && !app->app_local->extcap.is_v2) { - rc = iso7816_verify (app->slot, 0x82, pinvalue, strlen (pinvalue)); + rc = iso7816_verify (app->slot, 0x82, pinvalue, pinlen); if (gpg_err_code (rc) == GPG_ERR_BAD_PIN) rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED); if (rc) From 91a3d15cee32f82a8422e76655a605c5048eaad8 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Thu, 25 Jan 2018 15:14:37 +0100 Subject: [PATCH 20/20] doc: Note --quick-gen-key as an alias for --quick-generate-key -- --- doc/gpg.texi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/gpg.texi b/doc/gpg.texi index 9776a3b05..927d77d35 100644 --- a/doc/gpg.texi +++ b/doc/gpg.texi @@ -622,7 +622,9 @@ This section explains the main commands for key management. @table @gnupgtabopt @item --quick-generate-key @var{user-id} [@var{algo} [@var{usage} [@var{expire}]]] +@itemx --quick-gen-key @opindex quick-generate-key +@opindex quick-gen-key This is a simple command to generate a standard key with one user id. In contrast to @option{--generate-key} the key is generated directly without the need to answer a bunch of prompts. Unless the option