diff options
-rw-r--r-- | agent/gpg-agent.c | 37 | ||||
-rw-r--r-- | dirmngr/Makefile.am | 4 | ||||
-rw-r--r-- | dirmngr/dirmngr.c | 17 | ||||
-rw-r--r-- | dirmngr/dirmngr.h | 25 | ||||
-rw-r--r-- | dirmngr/domaininfo.c | 291 | ||||
-rw-r--r-- | dirmngr/ks-action.c | 3 | ||||
-rw-r--r-- | dirmngr/misc.c | 7 | ||||
-rw-r--r-- | dirmngr/server.c | 186 | ||||
-rw-r--r-- | dirmngr/workqueue.c | 214 | ||||
-rw-r--r-- | doc/DETAILS | 16 | ||||
-rw-r--r-- | doc/Makefile.am | 4 | ||||
-rw-r--r-- | doc/tools.texi | 136 | ||||
-rw-r--r-- | g10/card-util.c | 13 | ||||
-rw-r--r-- | g10/getkey.c | 5 | ||||
-rw-r--r-- | g10/trustdb.c | 6 | ||||
-rw-r--r-- | po/ca.po | 25 | ||||
-rw-r--r-- | po/cs.po | 28 | ||||
-rw-r--r-- | po/da.po | 35 | ||||
-rw-r--r-- | po/de.po | 27 | ||||
-rw-r--r-- | po/el.po | 25 | ||||
-rw-r--r-- | po/eo.po | 25 | ||||
-rw-r--r-- | po/es.po | 33 | ||||
-rw-r--r-- | po/et.po | 25 | ||||
-rw-r--r-- | po/fi.po | 25 | ||||
-rw-r--r-- | po/fr.po | 29 | ||||
-rw-r--r-- | po/gl.po | 33 | ||||
-rw-r--r-- | po/hu.po | 25 | ||||
-rw-r--r-- | po/id.po | 25 | ||||
-rw-r--r-- | po/it.po | 25 | ||||
-rw-r--r-- | po/ja.po | 28 | ||||
-rw-r--r-- | po/nb.po | 28 | ||||
-rw-r--r-- | po/pl.po | 33 | ||||
-rw-r--r-- | po/pt.po | 25 | ||||
-rw-r--r-- | po/ro.po | 25 | ||||
-rw-r--r-- | po/ru.po | 233 | ||||
-rw-r--r-- | po/sk.po | 25 | ||||
-rw-r--r-- | po/sv.po | 35 | ||||
-rw-r--r-- | po/tr.po | 25 | ||||
-rw-r--r-- | po/uk.po | 29 | ||||
-rw-r--r-- | po/zh_CN.po | 25 | ||||
-rw-r--r-- | po/zh_TW.po | 28 | ||||
-rw-r--r-- | scd/app-openpgp.c | 2 | ||||
-rw-r--r-- | sm/keydb.c | 2 | ||||
-rw-r--r-- | tests/openpgp/Makefile.am | 11 | ||||
-rw-r--r-- | tests/openpgp/all-tests.scm | 2 | ||||
-rw-r--r-- | tools/gpgtar-extract.c | 12 |
46 files changed, 1448 insertions, 469 deletions
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 2e19d19c1..0b2b98212 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -3000,27 +3000,34 @@ handle_connections (gnupg_fd_t listen_fd, next timeout. */ continue; + /* The inotify fds are set even when a shutdown is pending (see + * above). So we must handle them in any case. To avoid that + * they trigger a second time we close them immediately. */ + if (sock_inotify_fd != -1 + && FD_ISSET (sock_inotify_fd, &read_fdset) + && gnupg_inotify_has_name (sock_inotify_fd, GPG_AGENT_SOCK_NAME)) + { + shutdown_pending = 1; + close (sock_inotify_fd); + sock_inotify_fd = -1; + log_info ("socket file has been removed - shutting down\n"); + } + + if (home_inotify_fd != -1 + && FD_ISSET (home_inotify_fd, &read_fdset)) + { + shutdown_pending = 1; + close (home_inotify_fd); + home_inotify_fd = -1; + log_info ("homedir has been removed - shutting down\n"); + } + if (!shutdown_pending) { int idx; ctrl_t ctrl; npth_t thread; - if (sock_inotify_fd != -1 - && FD_ISSET (sock_inotify_fd, &read_fdset) - && gnupg_inotify_has_name (sock_inotify_fd, GPG_AGENT_SOCK_NAME)) - { - shutdown_pending = 1; - log_info ("socket file has been removed - shutting down\n"); - } - - if (home_inotify_fd != -1 - && FD_ISSET (home_inotify_fd, &read_fdset)) - { - shutdown_pending = 1; - log_info ("homedir has been removed - shutting down\n"); - } - for (idx=0; idx < DIM(listentbl); idx++) { if (listentbl[idx].l_fd == GNUPG_INVALID_FD) diff --git a/dirmngr/Makefile.am b/dirmngr/Makefile.am index b404165ed..43f59bd45 100644 --- a/dirmngr/Makefile.am +++ b/dirmngr/Makefile.am @@ -16,6 +16,8 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. +# +# SPDX-License-Identifier: GPL-3.0+ ## Process this file with automake to produce Makefile.in @@ -57,6 +59,8 @@ noinst_HEADERS = dirmngr.h crlcache.h crlfetch.h misc.h dirmngr_SOURCES = dirmngr.c dirmngr.h server.c crlcache.c crlfetch.c \ certcache.c certcache.h \ + domaininfo.c \ + workqueue.c \ loadswdb.c \ cdb.h cdblib.c misc.c dirmngr-err.h \ ocsp.c ocsp.h validate.c validate.h \ diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c index 5317c214a..9cb02036e 100644 --- a/dirmngr/dirmngr.c +++ b/dirmngr/dirmngr.c @@ -17,6 +17,8 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, see <https://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0+ */ #include <config.h> @@ -1132,7 +1134,7 @@ main (int argc, char **argv) cert_cache_init (hkp_cacert_filenames); crl_cache_init (); http_register_netactivity_cb (netactivity_action); - start_command_handler (ASSUAN_INVALID_FD); + start_command_handler (ASSUAN_INVALID_FD, 0); shutdown_reaper (); } #ifndef HAVE_W32_SYSTEM @@ -1871,6 +1873,7 @@ handle_signal (int signo) case SIGUSR1: cert_cache_print_stats (); + domaininfo_print_stats (); break; case SIGUSR2: @@ -1936,7 +1939,10 @@ housekeeping_thread (void *arg) network_activity_seen = 0; if (opt.allow_version_check) dirmngr_load_swdb (&ctrlbuf, 0); + workqueue_run_global_tasks (&ctrlbuf, 1); } + else + workqueue_run_global_tasks (&ctrlbuf, 0); dirmngr_deinit_default_ctrl (&ctrlbuf); @@ -2031,6 +2037,8 @@ check_nonce (assuan_fd_t fd, assuan_sock_nonce_t *nonce) static void * start_connection_thread (void *arg) { + static unsigned int last_session_id; + unsigned int session_id; union int_and_ptr_u argval; gnupg_fd_t fd; @@ -2052,12 +2060,17 @@ start_connection_thread (void *arg) if (opt.verbose) log_info (_("handler for fd %d started\n"), FD2INT (fd)); - start_command_handler (fd); + session_id = ++last_session_id; + if (!session_id) + session_id = ++last_session_id; + start_command_handler (fd, session_id); if (opt.verbose) log_info (_("handler for fd %d terminated\n"), FD2INT (fd)); active_connections--; + workqueue_run_post_session_tasks (session_id); + #ifndef HAVE_W32_SYSTEM argval.afd = ASSUAN_INVALID_FD; npth_setspecific (my_tlskey_current_fd, argval.aptr); diff --git a/dirmngr/dirmngr.h b/dirmngr/dirmngr.h index 1f660de10..5189f93b1 100644 --- a/dirmngr/dirmngr.h +++ b/dirmngr/dirmngr.h @@ -17,6 +17,8 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, see <https://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0+ */ #ifndef DIRMNGR_H @@ -226,9 +228,11 @@ ksba_cert_t get_cert_local_ski (ctrl_t ctrl, gpg_error_t get_istrusted_from_client (ctrl_t ctrl, const char *hexfpr); int dirmngr_assuan_log_monitor (assuan_context_t ctx, unsigned int cat, const char *msg); -void start_command_handler (gnupg_fd_t fd); +void start_command_handler (gnupg_fd_t fd, unsigned int session_id); gpg_error_t dirmngr_status (ctrl_t ctrl, const char *keyword, ...); gpg_error_t dirmngr_status_help (ctrl_t ctrl, const char *text); +gpg_error_t dirmngr_status_helpf (ctrl_t ctrl, const char *format, + ...) GPGRT_ATTR_PRINTF(2,3); gpg_error_t dirmngr_status_printf (ctrl_t ctrl, const char *keyword, const char *format, ...) GPGRT_ATTR_PRINTF(3,4); @@ -248,4 +252,23 @@ gpg_error_t gnupg_http_tls_verify_cb (void *opaque, gpg_error_t dirmngr_load_swdb (ctrl_t ctrl, int force); +/*-- domaininfo.c --*/ +void domaininfo_print_stats (void); +int domaininfo_is_wkd_not_supported (const char *domain); +void domaininfo_set_no_name (const char *domain); +void domaininfo_set_wkd_supported (const char *domain); +void domaininfo_set_wkd_not_supported (const char *domain); +void domaininfo_set_wkd_not_found (const char *domain); + +/*-- workqueue.c --*/ +typedef const char *(*wqtask_t)(ctrl_t ctrl, const char *args); + +void workqueue_dump_queue (ctrl_t ctrl); +gpg_error_t workqueue_add_task (wqtask_t func, const char *args, + unsigned int session_id, int need_network); +void workqueue_run_global_tasks (ctrl_t ctrl, int with_network); +void workqueue_run_post_session_tasks (unsigned int session_id); + + + #endif /*DIRMNGR_H*/ diff --git a/dirmngr/domaininfo.c b/dirmngr/domaininfo.c new file mode 100644 index 000000000..a2effffef --- /dev/null +++ b/dirmngr/domaininfo.c @@ -0,0 +1,291 @@ +/* domaininfo.c - Gather statistics about accessed domains + * Copyright (C) 2017 Werner Koch + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0+ + */ + +#include <config.h> +#include <stdlib.h> +#include <string.h> + +#include "dirmngr.h" + + +/* Number of bucket for the hash array and limit for the length of a + * bucket chain. For debugging values of 13 and 10 are more suitable + * and a command like + * for j in a b c d e f g h i j k l m n o p q r s t u v w z y z; do \ + * for i in a b c d e f g h i j k l m n o p q r s t u v w z y z; do \ + * gpg-connect-agent --dirmngr "wkd_get foo@$i.$j.gnupg.net" /bye \ + * >/dev/null ; done; done + * will quickly add a couple of domains. + */ +#define NO_OF_DOMAINBUCKETS 103 +#define MAX_DOMAINBUCKET_LEN 20 + + +/* Object to keep track of a domain name. */ +struct domaininfo_s +{ + struct domaininfo_s *next; + unsigned int no_name:1; /* Domain name not found. */ + unsigned int wkd_not_found:1; /* A WKD query failed. */ + unsigned int wkd_supported:1; /* One WKD entry was found. */ + unsigned int wkd_not_supported:1; /* Definitely does not support WKD. */ + char name[1]; +}; +typedef struct domaininfo_s *domaininfo_t; + +/* And the hashed array. */ +static domaininfo_t domainbuckets[NO_OF_DOMAINBUCKETS]; + + +/* The hash function we use. Must not call a system function. */ +static inline u32 +hash_domain (const char *domain) +{ + const unsigned char *s = (const unsigned char*)domain; + u32 hashval = 0; + u32 carry; + + for (; *s; s++) + { + if (*s == '.') + continue; + hashval = (hashval << 4) + *s; + if ((carry = (hashval & 0xf0000000))) + { + hashval ^= (carry >> 24); + hashval ^= carry; + } + } + + return hashval % NO_OF_DOMAINBUCKETS; +} + + +void +domaininfo_print_stats (void) +{ + int bidx; + domaininfo_t di; + int count, no_name, wkd_not_found, wkd_supported, wkd_not_supported; + int len, minlen, maxlen; + + count = no_name = wkd_not_found = wkd_supported = wkd_not_supported = 0; + maxlen = 0; + minlen = -1; + for (bidx = 0; bidx < NO_OF_DOMAINBUCKETS; bidx++) + { + len = 0; + for (di = domainbuckets[bidx]; di; di = di->next) + { + count++; + len++; + if (di->no_name) + no_name++; + if (di->wkd_not_found) + wkd_not_found++; + if (di->wkd_supported) + wkd_supported++; + if (di->wkd_not_supported) + wkd_not_supported++; + } + if (len > maxlen) + maxlen = len; + if (minlen == -1 || len < minlen) + minlen = len; + } + log_info ("domaininfo: items=%d chainlen=%d..%d nn=%d nf=%d ns=%d s=%d\n", + count, + minlen > 0? minlen : 0, + maxlen, + no_name, wkd_not_found, wkd_not_supported, wkd_supported); +} + + +/* Return true if DOMAIN definitely does not support WKD. Noet that + * DOMAIN is expected to be lowercase. */ +int +domaininfo_is_wkd_not_supported (const char *domain) +{ + domaininfo_t di; + + for (di = domainbuckets[hash_domain (domain)]; di; di = di->next) + if (!strcmp (di->name, domain)) + return !!di->wkd_not_supported; + + return 0; /* We don't know. */ +} + + +/* Core update function. DOMAIN is expected to be lowercase. + * CALLBACK is called to update the existing or the newly inserted + * item. */ +static void +insert_or_update (const char *domain, + void (*callback)(domaininfo_t di, int insert_mode)) +{ + domaininfo_t di; + domaininfo_t di_new; + domaininfo_t di_cut; + u32 hash; + int count; + + hash = hash_domain (domain); + for (di = domainbuckets[hash]; di; di = di->next) + if (!strcmp (di->name, domain)) + { + callback (di, 0); /* Update */ + return; + } + + di_new = xtrycalloc (1, sizeof *di + strlen (domain)); + if (!di_new) + return; /* Out of core - we ignore this. */ + strcpy (di_new->name, domain); + + /* Need to do another lookup because the malloc is a system call and + * thus the hash array may have been changed by another thread. */ + di_cut = NULL; + for (count=0, di = domainbuckets[hash]; di; di = di->next, count++) + if (!strcmp (di->name, domain)) + { + callback (di, 0); /* Update */ + xfree (di_new); + return; + } + + /* Before we insert we need to check whether the chain gets too long. */ + di_cut = NULL; + if (count >= MAX_DOMAINBUCKET_LEN) + { + for (count=0, di = domainbuckets[hash]; di; di = di->next, count++) + if (count >= MAX_DOMAINBUCKET_LEN/2) + { + di_cut = di->next; + di->next = NULL; + break; + } + } + + /* Insert */ + callback (di_new, 1); + di = di_new; + di->next = domainbuckets[hash]; + domainbuckets[hash] = di; + + /* Remove the rest of the cutted chain. */ + while (di_cut) + { + di = di_cut->next; + xfree (di_cut); + di_cut = di; + } +} + + +/* Helper for domaininfo_set_no_name. */ +static void +set_no_name_cb (domaininfo_t di, int insert_mode) +{ + (void)insert_mode; + + di->no_name = 1; + /* Obviously the domain is in this case also not supported. */ + di->wkd_not_supported = 1; + + /* The next should already be 0 but we clear it anyway in the case + * of a temporary DNS failure. */ + di->wkd_supported = 0; +} + + +/* Mark DOMAIN as not existent. */ +void +domaininfo_set_no_name (const char *domain) +{ + insert_or_update (domain, set_no_name_cb); +} + + +/* Helper for domaininfo_set_wkd_supported. */ +static void +set_wkd_supported_cb (domaininfo_t di, int insert_mode) +{ + (void)insert_mode; + + di->wkd_supported = 1; + /* The next will already be set unless the domain enabled WKD in the + * meantime. Thus we need to clear it. */ + di->wkd_not_supported = 0; +} + + +/* Mark DOMAIN as supporting WKD. */ +void +domaininfo_set_wkd_supported (const char *domain) +{ + insert_or_update (domain, set_wkd_supported_cb); +} + + +/* Helper for domaininfo_set_wkd_not_supported. */ +static void +set_wkd_not_supported_cb (domaininfo_t di, int insert_mode) +{ + (void)insert_mode; + + di->wkd_not_supported = 1; + di->wkd_supported = 0; +} + + +/* Mark DOMAIN as not supporting WKD queries (e.g. no policy file). */ +void +domaininfo_set_wkd_not_supported (const char *domain) +{ + insert_or_update (domain, set_wkd_not_supported_cb); +} + + + +/* Helper for domaininfo_set_wkd_not_found. */ +static void +set_wkd_not_found_cb (domaininfo_t di, int insert_mode) +{ + /* Set the not found flag but there is no need to do this if we + * already know that the domain either does not support WKD or we + * know that it supports WKD. */ + if (insert_mode) + di->wkd_not_found = 1; + else if (!di->wkd_not_supported && !di->wkd_supported) + di->wkd_not_found = 1; + + /* Better clear this flag in case we had a DNS failure in the + * past. */ + di->no_name = 0; +} + + +/* Update a counter for DOMAIN to keep track of failed WKD queries. */ +void +domaininfo_set_wkd_not_found (const char *domain) +{ + insert_or_update (domain, set_wkd_not_found_cb); +} diff --git a/dirmngr/ks-action.c b/dirmngr/ks-action.c index 857aab166..38cd02feb 100644 --- a/dirmngr/ks-action.c +++ b/dirmngr/ks-action.c @@ -296,7 +296,8 @@ ks_action_get (ctrl_t ctrl, uri_item_t keyservers, /* Retrieve keys from URL and write the result to the provided output - stream OUTFP. */ + * stream OUTFP. If OUTFP is NULL the data is written to the bit + * bucket. */ gpg_error_t ks_action_fetch (ctrl_t ctrl, const char *url, estream_t outfp) { diff --git a/dirmngr/misc.c b/dirmngr/misc.c index 1716141a6..6291a9a35 100644 --- a/dirmngr/misc.c +++ b/dirmngr/misc.c @@ -636,7 +636,9 @@ armor_data (char **r_string, const void *data, size_t datalen) return 0; } -/* Copy all data from IN to OUT. */ + +/* Copy all data from IN to OUT. OUT may be NULL to use this fucntion + * as a dummy reader. */ gpg_error_t copy_stream (estream_t in, estream_t out) { @@ -647,9 +649,8 @@ copy_stream (estream_t in, estream_t out) { if (!nread) return 0; /* EOF */ - if (es_write (out, buffer, nread, NULL)) + if (out && es_write (out, buffer, nread, NULL)) break; - } return gpg_error_from_syserror (); } diff --git a/dirmngr/server.c b/dirmngr/server.c index 7ed6cde15..3d0768b2a 100644 --- a/dirmngr/server.c +++ b/dirmngr/server.c @@ -18,6 +18,8 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, see <https://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0+ */ #include <config.h> @@ -78,7 +80,8 @@ #define PARM_ERROR(t) assuan_set_error (ctx, \ gpg_error (GPG_ERR_ASS_PARAMETER), (t)) -#define set_error(e,t) assuan_set_error (ctx, gpg_error (e), (t)) +#define set_error(e,t) (ctx ? assuan_set_error (ctx, gpg_error (e), (t)) \ + /**/: gpg_error (e)) @@ -88,6 +91,9 @@ struct server_local_s /* Data used to associate an Assuan context with local server data */ assuan_context_t assuan_ctx; + /* The session id (a counter). */ + unsigned int session_id; + /* Per-session LDAP servers. */ ldap_server_t ldapservers; @@ -123,6 +129,9 @@ static es_cookie_io_functions_t data_line_cookie_functions = }; +/* Local prototypes */ +static const char *task_check_wkd_support (ctrl_t ctrl, const char *domain); + @@ -820,24 +829,22 @@ cmd_dns_cert (assuan_context_t ctx, char *line) -static const char hlp_wkd_get[] = - "WKD_GET [--submission-address|--policy-flags] <user_id>\n" - "\n" - "Return the key or other info for <user_id>\n" - "from the Web Key Directory."; +/* Core of cmd_wkd_get and task_check_wkd_support. If CTX is NULL + * this function will not write anything to the assuan output. */ static gpg_error_t -cmd_wkd_get (assuan_context_t ctx, char *line) +proc_wkd_get (ctrl_t ctrl, assuan_context_t ctx, char *line) { - ctrl_t ctrl = assuan_get_pointer (ctx); gpg_error_t err = 0; char *mbox = NULL; char *domainbuf = NULL; char *domain; /* Points to mbox or domainbuf. */ + char *domain_orig;/* Points to mbox. */ char sha1buf[20]; char *uri = NULL; char *encodedhash = NULL; int opt_submission_addr; int opt_policy_flags; + int is_wkd_query; /* True if this is a real WKD query. */ int no_log = 0; char portstr[20] = { 0 }; @@ -846,6 +853,7 @@ cmd_wkd_get (assuan_context_t ctx, char *line) if (has_option (line, "--quick")) ctrl->timeout = opt.connect_quick_timeout; line = skip_options (line); + is_wkd_query = !(opt_policy_flags || opt_submission_addr); mbox = mailbox_from_userid (line); if (!mbox || !(domain = strchr (mbox, '@'))) @@ -854,6 +862,18 @@ cmd_wkd_get (assuan_context_t ctx, char *line) goto leave; } *domain++ = 0; + domain_orig = domain; + + /* First check whether we already know that the domain does not + * support WKD. */ + if (is_wkd_query) + { + if (domaininfo_is_wkd_not_supported (domain_orig)) + { + err = gpg_error (GPG_ERR_NO_DATA); + goto leave; + } + } /* Check for SRV records. */ if (1) @@ -872,7 +892,8 @@ cmd_wkd_get (assuan_context_t ctx, char *line) domainlen = strlen (domain); for (i = 0; i < srvscount; i++) { - log_debug ("srv: trying '%s:%hu'\n", srvs[i].target, srvs[i].port); + if (DBG_DNS) + log_debug ("srv: trying '%s:%hu'\n", srvs[i].target, srvs[i].port); targetlen = strlen (srvs[i].target); if ((targetlen > domainlen + 1 && srvs[i].target[targetlen - domainlen - 1] == '.' @@ -949,19 +970,52 @@ cmd_wkd_get (assuan_context_t ctx, char *line) { estream_t outfp; - outfp = es_fopencookie (ctx, "w", data_line_cookie_functions); - if (!outfp) + outfp = ctx? es_fopencookie (ctx, "w", data_line_cookie_functions) : NULL; + if (!outfp && ctx) err = set_error (GPG_ERR_ASS_GENERAL, "error setting up a data stream"); else { - if (no_log) - ctrl->server_local->inhibit_data_logging = 1; - ctrl->server_local->inhibit_data_logging_now = 0; - ctrl->server_local->inhibit_data_logging_count = 0; + if (ctrl->server_local) + { + if (no_log) + ctrl->server_local->inhibit_data_logging = 1; + ctrl->server_local->inhibit_data_logging_now = 0; + ctrl->server_local->inhibit_data_logging_count = 0; + } err = ks_action_fetch (ctrl, uri, outfp); es_fclose (outfp); - ctrl->server_local->inhibit_data_logging = 0; + if (ctrl->server_local) + ctrl->server_local->inhibit_data_logging = 0; + + /* Register the result under the domain name of MBOX. */ + switch (gpg_err_code (err)) + { + case 0: + domaininfo_set_wkd_supported (domain_orig); + break; + + case GPG_ERR_NO_NAME: + /* There is no such domain. */ + domaininfo_set_no_name (domain_orig); + break; + + case GPG_ERR_NO_DATA: + if (is_wkd_query && ctrl->server_local) + { + /* Mark that and schedule a check. */ + domaininfo_set_wkd_not_found (domain_orig); + workqueue_add_task (task_check_wkd_support, domain_orig, + ctrl->server_local->session_id, 1); + } + else if (opt_policy_flags) /* No policy file - no support. */ + domaininfo_set_wkd_not_supported (domain_orig); + break; + + default: + /* Don't register other errors. */ + break; + } } } @@ -970,10 +1024,50 @@ cmd_wkd_get (assuan_context_t ctx, char *line) xfree (encodedhash); xfree (mbox); xfree (domainbuf); + return err; +} + + +static const char hlp_wkd_get[] = + "WKD_GET [--submission-address|--policy-flags] <user_id>\n" + "\n" + "Return the key or other info for <user_id>\n" + "from the Web Key Directory."; +static gpg_error_t +cmd_wkd_get (assuan_context_t ctx, char *line) +{ + ctrl_t ctrl = assuan_get_pointer (ctx); + gpg_error_t err; + + err = proc_wkd_get (ctrl, ctx, line); + return leave_cmd (ctx, err); } +/* A task to check whether DOMAIN supports WKD. This is done by + * checking whether the policy flags file can be read. */ +static const char * +task_check_wkd_support (ctrl_t ctrl, const char *domain) +{ + char *string; + + if (!ctrl || !domain) + return "check_wkd_support"; + + string = strconcat ("--policy-flags foo@", domain, NULL); + if (!string) + log_error ("%s: %s\n", __func__, gpg_strerror (gpg_error_from_syserror ())); + else + { + proc_wkd_get (ctrl, NULL, string); + xfree (string); + } + + return NULL; +} + + static const char hlp_ldapserver[] = "LDAPSERVER <data>\n" @@ -2388,12 +2482,15 @@ static const char hlp_getinfo[] = "pid - Return the process id of the server.\n" "tor - Return OK if running in Tor mode\n" "dnsinfo - Return info about the DNS resolver\n" - "socket_name - Return the name of the socket.\n"; + "socket_name - Return the name of the socket.\n" + "session_id - Return the current session_id.\n" + "workqueue - Inspect the work queue\n"; static gpg_error_t cmd_getinfo (assuan_context_t ctx, char *line) { ctrl_t ctrl = assuan_get_pointer (ctx); gpg_error_t err; + char numbuf[50]; if (!strcmp (line, "version")) { @@ -2402,8 +2499,6 @@ cmd_getinfo (assuan_context_t ctx, char *line) } else if (!strcmp (line, "pid")) { - char numbuf[50]; - snprintf (numbuf, sizeof numbuf, "%lu", (unsigned long)getpid ()); err = assuan_send_data (ctx, numbuf, strlen (numbuf)); } @@ -2412,6 +2507,11 @@ cmd_getinfo (assuan_context_t ctx, char *line) const char *s = dirmngr_get_current_socket_name (); err = assuan_send_data (ctx, s, strlen (s)); } + else if (!strcmp (line, "session_id")) + { + snprintf (numbuf, sizeof numbuf, "%u", ctrl->server_local->session_id); + err = assuan_send_data (ctx, numbuf, strlen (numbuf)); + } else if (!strcmp (line, "tor")) { int use_tor; @@ -2447,6 +2547,11 @@ cmd_getinfo (assuan_context_t ctx, char *line) } err = 0; } + else if (!strcmp (line, "workqueue")) + { + workqueue_dump_queue (ctrl); + err = 0; + } else err = set_error (GPG_ERR_ASS_PARAMETER, "unknown value for WHAT"); @@ -2574,9 +2679,10 @@ dirmngr_assuan_log_monitor (assuan_context_t ctx, unsigned int cat, /* Startup the server and run the main command loop. With FD = -1, - use stdin/stdout. */ + * use stdin/stdout. SESSION_ID is either 0 or a unique number + * identifying a session. */ void -start_command_handler (assuan_fd_t fd) +start_command_handler (assuan_fd_t fd, unsigned int session_id) { static const char hello[] = "Dirmngr " VERSION " at your service"; static char *hello_line; @@ -2653,6 +2759,8 @@ start_command_handler (assuan_fd_t fd) assuan_register_option_handler (ctx, option_handler); assuan_register_reset_notify (ctx, reset_notify); + ctrl->server_local->session_id = session_id; + for (;;) { rc = assuan_accept (ctx); @@ -2722,12 +2830,12 @@ dirmngr_status (ctrl_t ctrl, const char *keyword, ...) gpg_error_t err = 0; va_list arg_ptr; const char *text; + assuan_context_t ctx; va_start (arg_ptr, keyword); - if (ctrl->server_local) + if (ctrl->server_local && (ctx = ctrl->server_local->assuan_ctx)) { - assuan_context_t ctx = ctrl->server_local->assuan_ctx; char buf[950], *p; size_t n; @@ -2752,16 +2860,15 @@ dirmngr_status (ctrl_t ctrl, const char *keyword, ...) } -/* Print a help status line. TEXTLEN gives the length of the text - from TEXT to be printed. The function splits text at LFs. */ +/* Print a help status line. The function splits text at LFs. */ gpg_error_t dirmngr_status_help (ctrl_t ctrl, const char *text) { gpg_error_t err = 0; + assuan_context_t ctx; - if (ctrl->server_local) + if (ctrl->server_local && (ctx = ctrl->server_local->assuan_ctx)) { - assuan_context_t ctx = ctrl->server_local->assuan_ctx; char buf[950], *p; size_t n; @@ -2783,6 +2890,26 @@ dirmngr_status_help (ctrl_t ctrl, const char *text) } +/* Print a help status line using a printf like format. The function + * splits text at LFs. */ +gpg_error_t +dirmngr_status_helpf (ctrl_t ctrl, const char *format, ...) +{ + va_list arg_ptr; + gpg_error_t err; + char *buf; + + va_start (arg_ptr, format); + buf = es_vbsprintf (format, arg_ptr); + err = buf? 0 : gpg_error_from_syserror (); + va_end (arg_ptr); + if (!err) + err = dirmngr_status_help (ctrl, buf); + es_free (buf); + return err; +} + + /* This function is similar to print_assuan_status but takes a CTRL * arg instead of an assuan context as first argument. */ gpg_error_t @@ -2791,7 +2918,10 @@ dirmngr_status_printf (ctrl_t ctrl, const char *keyword, { gpg_error_t err; va_list arg_ptr; - assuan_context_t ctx = ctrl->server_local->assuan_ctx; + assuan_context_t ctx; + + if (!ctrl->server_local || !(ctx = ctrl->server_local->assuan_ctx)) + return 0; va_start (arg_ptr, format); err = vprint_assuan_status (ctx, keyword, format, arg_ptr); diff --git a/dirmngr/workqueue.c b/dirmngr/workqueue.c new file mode 100644 index 000000000..2cb8573e8 --- /dev/null +++ b/dirmngr/workqueue.c @@ -0,0 +1,214 @@ +/* workqueue.c - Maintain a queue of background tasks + * Copyright (C) 2017 Werner Koch + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses/>. + * + * SPDX-License-Identifier: GPL-3.0+ + */ + +#include <config.h> +#include <stdlib.h> +#include <string.h> + +#include "dirmngr.h" + + +/* An object for one item in the workqueue. */ +struct wqitem_s +{ + struct wqitem_s *next; + + /* This flag is set if the task requires network access. */ + unsigned int need_network:1; + + /* The id of the session which created this task. If this is 0 the + * task is not associated with a specific session. */ + unsigned int session_id; + + /* The function to perform the backgrount task. */ + wqtask_t func; + + /* A string with the string argument for that task. */ + char args[1]; +}; +typedef struct wqitem_s *wqitem_t; + + +/* The workque is a simple linked list. */ +static wqitem_t workqueue; + + +/* Dump the queue using Assuan status comments. */ +void +workqueue_dump_queue (ctrl_t ctrl) +{ + wqitem_t saved_workqueue; + wqitem_t item; + unsigned int count; + + /* Temporay detach the entiere workqueue so that other threads don't + * get into our way. */ + saved_workqueue = workqueue; + workqueue = NULL; + + for (count=0, item = saved_workqueue; item; item = item->next) + count++; + + dirmngr_status_helpf (ctrl, "wq: number of entries: %u", count); + for (item = saved_workqueue; item; item = item->next) + dirmngr_status_helpf (ctrl, "wq: sess=%u net=%d %s(\"%.100s%s\")", + item->session_id, item->need_network, + item->func? item->func (NULL, NULL): "nop", + item->args, strlen (item->args) > 100? "[...]":""); + + /* Restore then workqueue. Actually we append the saved queue do a + * possibly updated workqueue. */ + if (!(item=workqueue)) + workqueue = saved_workqueue; + else + { + while (item->next) + item = item->next; + item->next = saved_workqueue; + } +} + + +/* Append the task (FUNC,ARGS) to the work queue. FUNC shall return + * its name when called with (NULL, NULL). */ +gpg_error_t +workqueue_add_task (wqtask_t func, const char *args, unsigned int session_id, + int need_network) +{ + wqitem_t item, wi; + + item = xtrycalloc (1, sizeof *item + strlen (args)); + if (!item) + return gpg_error_from_syserror (); + strcpy (item->args, args); + item->func = func; + item->session_id = session_id; + item->need_network = !!need_network; + + if (!(wi=workqueue)) + workqueue = item; + else + { + while (wi->next) + wi = wi->next; + wi->next = item; + } + return 0; +} + + +/* Run the task described by ITEM. ITEM must have been detached from + * the workqueue; its ownership is transferred to this fucntion. */ +static void +run_a_task (ctrl_t ctrl, wqitem_t item) +{ + log_assert (!item->next); + + if (opt.verbose) + log_info ("session %u: running %s(\"%s%s\")\n", + item->session_id, + item->func? item->func (NULL, NULL): "nop", + item->args, strlen (item->args) > 100? "[...]":""); + if (item->func) + item->func (ctrl, item->args); + + xfree (item); +} + + +/* Run tasks not associated with a session. This is called from the + * ticker every few minutes. If WITH_NETWORK is not set tasks which + * require the network are not run. */ +void +workqueue_run_global_tasks (ctrl_t ctrl, int with_network) +{ + wqitem_t item, prev; + + with_network = !!with_network; + + if (opt.verbose) + log_info ("running scheduled tasks%s\n", with_network?" (with network)":""); + + for (;;) + { + prev = NULL; + for (item = workqueue; item; prev = item, item = item->next) + if (!item->session_id + && (!item->need_network || (item->need_network && with_network))) + break; + if (!item) + break; /* No more tasks to run. */ + + /* Detach that item from the workqueue. */ + if (!prev) + workqueue = item->next; + else + prev->next = item->next; + item->next = NULL; + + /* Run the task. */ + run_a_task (ctrl, item); + } +} + + +/* Run tasks scheduled for running after a session. Those tasks are + * identified by the SESSION_ID. */ +void +workqueue_run_post_session_tasks (unsigned int session_id) +{ + struct server_control_s ctrlbuf; + ctrl_t ctrl = NULL; + wqitem_t item, prev; + + if (!session_id) + return; + + for (;;) + { + prev = NULL; + for (item = workqueue; item; prev = item, item = item->next) + if (item->session_id == session_id) + break; + if (!item) + break; /* No more tasks for this session. */ + + /* Detach that item from the workqueue. */ + if (!prev) + workqueue = item->next; + else + prev->next = item->next; + item->next = NULL; + + /* Create a CTRL object the first time we need it. */ + if (!ctrl) + { + memset (&ctrlbuf, 0, sizeof ctrlbuf); + ctrl = &ctrlbuf; + dirmngr_init_default_ctrl (ctrl); + } + + /* Run the task. */ + run_a_task (ctrl, item); + } + + dirmngr_deinit_default_ctrl (ctrl); +} diff --git a/doc/DETAILS b/doc/DETAILS index 8ead6a8f5..3c089b278 100644 --- a/doc/DETAILS +++ b/doc/DETAILS @@ -396,9 +396,8 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: *** NEWSIG [<signers_uid>] Is issued right before a signature verification starts. This is useful to define a context for parsing ERROR status messages. - arguments are currently defined. If SIGNERS_UID is given and is - not "-" this is the percent escape value of the OpenPGP Signer's - User ID signature sub-packet. + If SIGNERS_UID is given and is not "-" this is the percent-escaped + value of the OpenPGP Signer's User ID signature sub-packet. *** GOODSIG <long_keyid_or_fpr> <username> The signature with the keyid is good. For each signature only one @@ -1043,15 +1042,16 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: - 4 :: Key is stored on a smartcard. *** PROGRESS <what> <char> <cur> <total> [<units>] - Used by the primegen and Public key functions to indicate + Used by the primegen and public key functions to indicate progress. <char> is the character displayed with no --status-fd enabled, with the linefeed replaced by an 'X'. <cur> is the current amount done and <total> is amount to be done; a <total> of - 0 indicates that the total amount is not known. The condition + 0 indicates that the total amount is not known. Both are + non-negative integers. The condition : TOTAL && CUR == TOTAL may be used to detect the end of an operation. - Well known values for WHAT are: + Well known values for <what> are: - pk_dsa :: DSA key generation - pk_elg :: Elgamal key generation @@ -1066,7 +1066,9 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: the data of a smartcard. - card_busy :: A smartcard is still working - <units> is sometines used to describe the units for <current> and + When <what> refers to a file path, it may be truncated. + + <units> is sometimes used to describe the units for <current> and <total>. For example "B", "KiB", or "MiB". *** BACKUP_KEY_CREATED <fingerprint> <fname> diff --git a/doc/Makefile.am b/doc/Makefile.am index c0c7fd0b7..21e3e4578 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -91,7 +91,7 @@ myman_sources = gnupg7.texi gpg.texi gpgsm.texi gpg-agent.texi \ dirmngr.texi scdaemon.texi tools.texi wks.texi myman_pages = gpgsm.1 gpg-agent.1 dirmngr.8 scdaemon.1 \ watchgnupg.1 gpgconf.1 addgnupghome.8 gpg-preset-passphrase.1 \ - gpg-connect-agent.1 gpgparsemail.1 symcryptrun.1 \ + gpg-connect-agent.1 gpgparsemail.1 symcryptrun.1 gpgtar.1 \ applygnupgdefaults.8 gpg-wks-client.1 gpg-wks-server.1 \ dirmngr-client.1 if USE_GPG2_HACK @@ -110,7 +110,7 @@ CLEANFILES = yat2m mkdefsinc defs.inc DISTCLEANFILES = gnupg.tmp gnupg.ops yat2m-stamp.tmp yat2m-stamp \ gnupg-card-architecture.eps \ gnupg-module-overview.eps \ - $(myman_pages) gpg-zip.1 gnupg.7 + $(myman_pages) gnupg.7 yat2m: yat2m.c $(CC_FOR_BUILD) -o $@ $(srcdir)/yat2m.c diff --git a/doc/tools.texi b/doc/tools.texi index 332fb01b3..5104beaa5 100644 --- a/doc/tools.texi +++ b/doc/tools.texi @@ -20,7 +20,7 @@ GnuPG comes with a couple of smaller tools: * dirmngr-client:: How to use the Dirmngr client tool. * gpgparsemail:: Parse a mail message into an annotated format * symcryptrun:: Call a simple symmetric encryption tool. -* gpg-zip:: Encrypt or sign files into an archive. +* gpgtar:: Encrypt or sign files into an archive. @end menu @c @@ -1894,23 +1894,19 @@ The possible exit status codes of @command{symcryptrun} are: @c -@c GPG-ZIP +@c GPGTAR @c -@c The original manpage on which this section is based was written -@c by Colin Tuckley <[email protected]> and Daniel Leidert -@c <[email protected]> for the Debian distribution (but may be used by -@c others). -@manpage gpg-zip.1 -@node gpg-zip +@manpage gpgtar.1 +@node gpgtar @section Encrypt or sign files into an archive @ifset manverb -.B gpg-zip +.B gpgtar \- Encrypt or sign files into an archive @end ifset @mansect synopsis @ifset manverb -.B gpg-zip +.B gpgtar .RI [ options ] .I filename1 .I [ filename2, ... ] @@ -1919,61 +1915,130 @@ The possible exit status codes of @command{symcryptrun} are: @end ifset @mansect description -@command{gpg-zip} encrypts or signs files into an archive. It is an +@command{gpgtar} encrypts or signs files into an archive. It is an gpg-ized tar using the same format as used by PGP's PGP Zip. @manpause @noindent -@command{gpg-zip} is invoked this way: +@command{gpgtar} is invoked this way: @example -gpg-zip [options] @var{filename1} [@var{filename2}, ...] @var{directory} [@var{directory2}, ...] +gpgtar [options] @var{filename1} [@var{filename2}, ...] @var{directory} [@var{directory2}, ...] @end example @mansect options @noindent -@command{gpg-zip} understands these options: +@command{gpgtar} understands these options: @table @gnupgtabopt +@item --create +@opindex create +Put given files and directories into a vanilla ``ustar'' archive. + +@item --extract +@opindex extract +Extract all files from a vanilla ``ustar'' archive. + @item --encrypt @itemx -e @opindex encrypt -Encrypt data. This option may be combined with @option{--symmetric} (for output that may be decrypted via a secret key or a passphrase). +Encrypt given files and directories into an archive. This option may +be combined with option @option{--symmetric} for an archive that may +be decrypted via a secret key or a passphrase. @item --decrypt @itemx -d @opindex decrypt -Decrypt data. +Extract all files from an encrypted archive. + +@item --sign +@itemx -s +Make a signed archive from the given files and directories. Thsi can +be combined with option @option{--encrypt} to create a signed and then +encrypted archive. + +@item --list-archive +@itemx -t +@opindex list-archive +List the contents of the specified archive. @item --symmetric @itemx -c Encrypt with a symmetric cipher using a passphrase. The default -symmetric cipher used is CAST5, but may be chosen with the +symmetric cipher used is @value{GPGSYMENCALGO}, but may be chosen with the @option{--cipher-algo} option to @command{gpg}. -@item --sign -@itemx -s -Make a signature. See @command{gpg}. - @item --recipient @var{user} @itemx -r @var{user} @opindex recipient -Encrypt for user id @var{user}. See @command{gpg}. +Encrypt for user id @var{user}. For details see @command{gpg}. @item --local-user @var{user} @itemx -u @var{user} @opindex local-user -Use @var{user} as the key to sign with. See @command{gpg}. - -@item --list-archive -@opindex list-archive -List the contents of the specified archive. +Use @var{user} as the key to sign with. For details see @command{gpg}. @item --output @var{file} @itemx -o @var{file} @opindex output -Write output to specified file @var{file}. +Write the archive to the specified file @var{file}. + +@item --verbose +@itemx -v +@opindex verbose +Enable extra informational output. + +@item --quiet +@itemx -q +@opindex quiet +Try to be as quiet as possible. + +@item --skip-crypto +@opindex skip-crypto +Skip all crypto operations and create or extract vanilla ``ustar'' +archives. + +@item --dry-run +@opindex dry-run +Do not actually output the extracted files. + +@item --directory @var{dir} +@itemx -C @var{dir} +@opindex directory +Extract the files into the directory @var{dir}. The +default is to take the directory name from +the input filename. If no input filename is known a directory named +@file{GPGARCH} is used. + +@item --files-from @var{file} +@itemx -T @var{file} +Take the file names to work from the file @var{file}; one file per +line. + +@item --null +@opindex null +Modify option @option{--files-from} to use a binary nul instead of a +linefeed to separate file names. + +@item --openpgp +@opindex openpgp +This option has no effect becuase OpenPGP encryption and signing is +the default. + +@item --cms +@opindex cms +This option is reserved and shall not be used. It will eventually be +used to encrypt or sign using the CMS protocol; but that is not yet +implemented. + + +@item --set-filename @var{file} +@opindex set-filename +Use the last component of @var{file} as the output directory. The +default is to take the directory name from the input filename. If no +input filename is known a directory named @file{GPGARCH} is used. +This option is deprecated in favor of option @option{--directory}. @item --gpg @var{gpgcmd} @opindex gpg @@ -1981,15 +2046,14 @@ Use the specified command @var{gpgcmd} instead of @command{gpg}. @item --gpg-args @var{args} @opindex gpg-args -Pass the specified options to @command{gpg}. - -@item --tar @var{tarcmd} -@opindex tar -Use the specified command @var{tarcmd} instead of @command{tar}. +Pass the specified extra options to @command{gpg}. @item --tar-args @var{args} @opindex tar-args -Pass the specified options to @command{tar}. +Assume @var{args} are standard options of the command @command{tar} +and parse them. The only supported tar options are "--directory", +"--files-from", and "--null" This is an obsolete options because those +supported tar options can also be given directly. @item --version @opindex version @@ -2017,14 +2081,14 @@ Encrypt the contents of directory @file{mydocs} for user Bob to file @file{test1}: @example -gpg-zip --encrypt --output test1 --gpg-args -r Bob mydocs +gpgtar --encrypt --output test1 -r Bob mydocs @end example @noindent List the contents of archive @file{test1}: @example -gpg-zip --list-archive test1 +gpgtar --list-archive test1 @end example diff --git a/g10/card-util.c b/g10/card-util.c index 8a03a26cf..854b94f47 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -531,9 +531,9 @@ current_card_status (ctrl_t ctrl, estream_t fp, print_isoname (fp, "Name of cardholder: ", "name", info.disp_name); print_name (fp, "Language prefs ...: ", info.disp_lang); - tty_fprintf (fp, "Sex ..............: %s\n", - info.disp_sex == 1? _("male"): - info.disp_sex == 2? _("female") : _("unspecified")); + tty_fprintf (fp, "Salutation .......: %s\n", + info.disp_sex == 1? _("Mr."): + info.disp_sex == 2? _("Mrs.") : ""); print_name (fp, "URL of public key : ", info.pubkey_url); print_name (fp, "Login data .......: ", info.login_data); if (info.private_do[0]) @@ -1088,7 +1088,7 @@ change_sex (void) int rc; data = cpr_get ("cardedit.change_sex", - _("Sex ((M)ale, (F)emale or space): ")); + _("Salutation (M = Mr., F = Mrs., or space): ")); if (!data) return -1; trim_spaces (data); @@ -1109,7 +1109,7 @@ change_sex (void) rc = agent_scd_setattr ("DISP-SEX", str, 1, NULL ); if (rc) - log_error ("error setting sex: %s\n", gpg_strerror (rc)); + log_error ("error setting salutation: %s\n", gpg_strerror (rc)); xfree (data); write_sc_op_status (rc); return rc; @@ -1891,7 +1891,8 @@ static struct { "fetch" , cmdFETCH , 0, N_("fetch the key specified in the card URL")}, { "login" , cmdLOGIN , 1, N_("change the login name")}, { "lang" , cmdLANG , 1, N_("change the language preferences")}, - { "sex" , cmdSEX , 1, N_("change card holder's sex")}, + { "salutation",cmdSEX , 1, N_("change card holder's salutation")}, + { "sex" ,cmdSEX , 1, NULL }, /* Backward compatibility. */ { "cafpr" , cmdCAFPR , 1, N_("change a CA fingerprint")}, { "forcesig", cmdFORCESIG, 1, N_("toggle the signature force PIN flag")}, { "generate", cmdGENERATE, 1, N_("generate new keys")}, diff --git a/g10/getkey.c b/g10/getkey.c index 7061f51eb..0a741cb2d 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1448,8 +1448,9 @@ get_pubkey_byname (ctrl_t ctrl, GETKEY_CTX * retctx, PKT_public_key * pk, if (!rc) { /* Key found. */ - log_info (_("automatically retrieved '%s' via %s\n"), - name, mechanism); + if (opt.verbose) + log_info (_("automatically retrieved '%s' via %s\n"), + name, mechanism); break; } if (gpg_err_code (rc) != GPG_ERR_NO_PUBKEY diff --git a/g10/trustdb.c b/g10/trustdb.c index 92c1ca50a..0a98c129f 100644 --- a/g10/trustdb.c +++ b/g10/trustdb.c @@ -1505,6 +1505,10 @@ store_validation_status (ctrl_t ctrl, int depth, /* Returns a sanitized copy of the regexp (which might be "", but not NULL). */ #ifndef DISABLE_REGEX +/* Operator charactors except '.' and backslash. + See regex(7) on BSD. */ +#define REGEXP_OPERATOR_CHARS "^[$()|*+?{" + static char * sanitize_regexp(const char *old) { @@ -1544,7 +1548,7 @@ sanitize_regexp(const char *old) { if(!escaped && old[start]=='\\') escaped=1; - else if(!escaped && old[start]!='.') + else if (!escaped && strchr (REGEXP_OPERATOR_CHARS, old[start])) new[idx++]='\\'; else escaped=0; @@ -1505,6 +1505,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Quina grandària voleu? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "arrodonida fins a %u bits\n" @@ -2849,14 +2853,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "clau %08lX: no correspon a la nostra còpia\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "clau %08lX: no s'ha trobat el bloc de claus original: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "clau %08lX: no s'ha pogut llegir el bloc de claus original: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clau %08lX: «%s» 1 ID d'usuari nou\n" @@ -2945,6 +2941,14 @@ msgstr "" "clau %08lX: falta la clau pública: no es pot aplicar el certificat\n" "de revocació\n" +#, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "clau %08lX: no s'ha trobat el bloc de claus original: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "clau %08lX: no s'ha pogut llegir el bloc de claus original: %s\n" + # O «rebutjara»? ivb # Per tots els canvis d'anglicisme «ignorat» -> «es descarta», # «es rebutja» està bé. jm @@ -3466,6 +3470,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "La clau secreta està disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "La clau secreta està disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "Cal la clau secreta per a fer açò.\n" @@ -35,7 +35,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg2 2.1.10\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2015-12-07 20:45+0100\n" +"PO-Revision-Date: 2017-11-02 17:38+0100\n" "Last-Translator: Petr Pisar <[email protected]>\n" "Language-Team: Czech <[email protected]>\n" "Language: cs\n" @@ -1393,6 +1393,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" @@ -2670,14 +2675,6 @@ 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" @@ -2763,6 +2760,14 @@ 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" @@ -3214,6 +3219,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" @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2012-11-01 20:27+0200\n" +"PO-Revision-Date: 2017-11-02 17:39+0100\n" "Last-Translator: Joe Hansen <[email protected]>\n" "Language-Team: Danish <[email protected]>\n" "Language: da\n" @@ -1451,11 +1451,6 @@ msgstr "fejl ved indhentelse af aktuel nøgleinformation: %s\n" msgid "Replace existing key? (y/N) " msgstr "Erstat eksisterende nøgle? (j/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1478,6 +1473,11 @@ msgstr "Hvilken nøglestørrelse ønsker du for krypteringsnøglen? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Hvilken nøglestørrelse ønsker du for godkendelsesnøglen? (%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 "Kortet vil nu blive omkonfigureret til at oprette en nøgle på %u bit\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "afrundet op til %u bit\n" @@ -2811,14 +2811,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "nøgle %s: stemmer ikke med vores kopi\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "nøgle %s: kan ikke lokalisere original nøgleblok: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "nøgle %s: kan ikke læse original nøgleblok: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nøgle %s: »%s« 1 ny bruger-id\n" @@ -2908,6 +2900,14 @@ msgstr "" "nøgle %s: ingen offentlig nøgle - kan ikke anvende tilbagekaldscertifikat\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "nøgle %s: kan ikke lokalisere original nøgleblok: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "nøgle %s: kan ikke læse original nøgleblok: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nøgle %s: ugyldigt tilbagekaldscertifikat: %s - afvist\n" @@ -3382,6 +3382,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Hemmelig nøgle er tilgængelig.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Hemmelig nøgle er tilgængelig.\n" + msgid "Need the secret key to do this.\n" msgstr "Har brug for den hemmelige nøgle for dette.\n" @@ -4989,7 +4994,7 @@ msgid "Key is superseded" msgstr "Nøglen er blevet afløst" msgid "Key has been compromised" -msgstr "Nøglen er blevet komprimeret" +msgstr "Nøglen er blevet kompromitteret" msgid "Key is no longer used" msgstr "Nøglen bruges ikke længere" @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg-2.1.0\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2017-09-26 11:51+0200\n" +"PO-Revision-Date: 2017-11-02 17:36+0100\n" "Last-Translator: Werner Koch <[email protected]>\n" "Language-Team: German <[email protected]>\n" "Language: de\n" @@ -1378,6 +1378,10 @@ msgstr "" "Welche Schlüssellänge wünschen Sie für den Authentisierungs-Schlüssel? (%u) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "Die Karte wird nun rekonfiguriert für einen Schlüssel des Typs: %s\n" + +#, c-format msgid "rounded up to %u bits\n" msgstr "aufgerundet auf %u Bit\n" @@ -2629,14 +2633,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "Schlüssel %s: Stimmt nicht mit unserer Kopie überein\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "Schlüssel %s: der originale Schlüsselblock wurde nicht gefunden: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "Schlüssel %s: Lesefehler im originalen Schlüsselblock: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "Schlüssel %s: \"%s\" 1 neue User-ID\n" @@ -2727,6 +2723,14 @@ msgstr "" "angebracht werden\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "Schlüssel %s: der originale Schlüsselblock wurde nicht gefunden: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "Schlüssel %s: Lesefehler im originalen Schlüsselblock: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "Schlüssel %s: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n" @@ -3191,6 +3195,9 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Geheimer Schlüssel ist vorhanden.\n" +msgid "Secret subkeys are available.\n" +msgstr "Geheimer Unterschlüssel ist vorhanden.\n" + msgid "Need the secret key to do this.\n" msgstr "Hierzu wird der geheime Schlüssel benötigt.\n" @@ -5841,8 +5848,6 @@ msgstr "" "WARNUNG: Wir müssen noch eine mit diesem Schlüssel signierte Nachricht " "sehen.\n" -#, fuzzy -#| msgid "Warning: we've only seen a single message signed by this key!\n" msgid "" "Warning: we've only seen one message signed using this key and user id!\n" msgstr "" @@ -1440,6 +1440,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Τι μέγεθος κλειδιού θα θέλατε; (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "στρογγυλοποιήθηκε έως τα %u bits\n" @@ -2771,14 +2775,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "κλειδί %08lX: δεν ταιριάζει με το αντίγραφο μας\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "κλειδί %08lX: αδυναμία εντοπισμού του αρχικού τμήματος κλειδιού: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "κλειδί %08lX: αδυναμία ανάγνωσης του αρχικού τμήματος κλειδιού: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "κλειδί %08lX: \"%s\" 1 νέο user ID\n" @@ -2868,6 +2864,14 @@ msgstr "" "ανάκλησης\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "κλειδί %08lX: αδυναμία εντοπισμού του αρχικού τμήματος κλειδιού: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "κλειδί %08lX: αδυναμία ανάγνωσης του αρχικού τμήματος κλειδιού: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "κλειδί %08lX: μη έγκυρο πιστοποιητικό ανάκλησης: %s - απόρριψη\n" @@ -3373,6 +3377,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Το μυστικό κλειδί είναι διαθέσιμο.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Το μυστικό κλειδί είναι διαθέσιμο.\n" + msgid "Need the secret key to do this.\n" msgstr "Απαιτείται το μυστικό κλειδί για να γίνει αυτό.\n" @@ -1442,6 +1442,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Kiun ŝlosilgrandon vi deziras? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "rondigita ĝis %u bitoj\n" @@ -2752,14 +2756,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "ŝlosilo %08lX: diferencas de nia kopio\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "ŝlosilo %08lX: ne povas trovi originalan ŝlosilblokon: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "ŝlosilo %08lX: ne povas legi originalan ŝlosilblokon: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ŝlosilo %08lX: 1 nova uzantidentigilo\n" @@ -2848,6 +2844,14 @@ msgstr "" "ŝlosilo %08lX: publika ŝlosilo mankas - ne povas apliki revokatestilon\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "ŝlosilo %08lX: ne povas trovi originalan ŝlosilblokon: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "ŝlosilo %08lX: ne povas legi originalan ŝlosilblokon: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ŝlosilo %08lX: nevalida revokatestilo: %s - malakceptita\n" @@ -3357,6 +3361,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Sekreta ŝlosilo estas havebla.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Sekreta ŝlosilo estas havebla.\n" + msgid "Need the secret key to do this.\n" msgstr "Bezonas la sekretan ŝlosilon por fari tion.\n" @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 2.0.9\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2015-10-09 17:10+0200\n" +"PO-Revision-Date: 2017-11-02 17:39+0100\n" "Last-Translator: Jaime Suárez <[email protected]>\n" "Language-Team: Spanish <[email protected]>\n" "Language: es\n" @@ -1469,11 +1469,6 @@ msgstr "error obteniendo la información actual de la clave: %s\n" msgid "Replace existing key? (y/N) " msgstr "¿Reemplazar la clave existente? (s/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1495,6 +1490,11 @@ msgstr "¿De qué tamaño quiere la clave de Cifrado? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "¿De qué tamaño quiere la clave de Autenticación? (%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 "Ahora la tarjeta se reconfigurará para generar una clave de %u bits\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "redondeados a %u bits\n" @@ -2840,14 +2840,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "clave %s: no coincide con nuestra copia\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "clave %s: no puede localizarse el bloque de claves original: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "clave %s: no puede leerse el bloque de claves original: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clave %s: \"%s\" 1 ID de usuario nuevo\n" @@ -2938,6 +2930,14 @@ msgstr "" "certificado de revocación\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "clave %s: no puede localizarse el bloque de claves original: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "clave %s: no puede leerse el bloque de claves original: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "clave %s: certificado de revocación inválido: %s - rechazado\n" @@ -3395,6 +3395,11 @@ msgstr "compactar IDs inutilizables y borrar todas las firmas de la clave" msgid "Secret key is available.\n" msgstr "Clave secreta disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Clave secreta disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "Se necesita la clave secreta para hacer esto.\n" @@ -1436,6 +1436,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Millist võtmepikkust te soovite? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "ümardatud üles %u bitini\n" @@ -2756,14 +2760,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "võti %08lX: ei sobi meie koopiaga\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "võti %08lX: ei leia algset võtmeblokki: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "võti %08lX: ei õnnestu lugeda algset võtmeblokki: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "võti %08lX: \"%s\" 1 uus kasutaja ID\n" @@ -2852,6 +2848,14 @@ msgstr "" "võti %08lX: avalik võti puudub - tühistamise sertifikaati ei saa rakendada\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "võti %08lX: ei leia algset võtmeblokki: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "võti %08lX: ei õnnestu lugeda algset võtmeblokki: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "võti %08lX: vigane tühistamise sertifikaat: %s - lükkasin tagasi\n" @@ -3346,6 +3350,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Salajane võti on kasutatav.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Salajane võti on kasutatav.\n" + msgid "Need the secret key to do this.\n" msgstr "Selle tegamiseks on vaja salajast võtit.\n" @@ -1455,6 +1455,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Minkä kokoisen avaimen haluat? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "pyöristetty %u bittiin\n" @@ -2773,14 +2777,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "avain %08lX: ei vastaa omaa kopiotamme\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "avain %08lX: alkuperäistä avainlohkoa ei löydy: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "avain %08lX. alkuperäisen avainlohko lukeminen ei onnistu: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "avain %08lX: \"%s\" 1 uusi käyttäjätunnus\n" @@ -2869,6 +2865,14 @@ msgstr "" "avain %08lX: ei julkista avainta - mitätöintivarmennetta ei voida käyttää\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "avain %08lX: alkuperäistä avainlohkoa ei löydy: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "avain %08lX. alkuperäisen avainlohko lukeminen ei onnistu: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "avain %08lX: pätemätön mitätöintivarmenne: %s - hylätty\n" @@ -3366,6 +3370,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Salainen avain on saatavilla.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Salainen avain on saatavilla.\n" + msgid "Need the secret key to do this.\n" msgstr "Tähän tarvitaan salainen avain.\n" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg 2.1\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2015-09-10 16:22+0200\n" +"PO-Revision-Date: 2017-11-02 17:40+0100\n" "Last-Translator: David Prévot <[email protected]>\n" "Language-Team: French <[email protected]>\n" "Language: fr\n" @@ -1403,6 +1403,12 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "" "Quelle taille de clef désirez-vous pour la clef d'authentification ? (%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 "" +"La carte sera maintenant reconfigurée pour générer une clef de %u bits\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "arrondie à %u bits\n" @@ -2710,14 +2716,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "clef %s : ne correspond pas à notre copie\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "clef %s : impossible de trouver le bloc de clef d'origine : %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "clef %s : impossible de lire le bloc de clef d'origine : %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clef %s : « %s » 1 nouvelle identité\n" @@ -2805,6 +2803,14 @@ msgstr "" " de révocation\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "clef %s : impossible de trouver le bloc de clef d'origine : %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "clef %s : impossible de lire le bloc de clef d'origine : %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "clef %s : certificat de révocation incorrect : %s — rejeté\n" @@ -3265,6 +3271,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "La clef secrète est disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "La clef secrète est disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "La clef secrète est nécessaire pour faire cela.\n" @@ -1445,6 +1445,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "¿Qué tamaño de chave quere? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "redondeado a %u bits\n" @@ -2765,18 +2769,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "chave %08lX: non coincide coa nosa copia\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "" -"chave %08lX: non foi posible localiza-lo bloque de chaves original:\n" -"%s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "" -"chave %08lX: non foi posible le-lo bloque de chaves original:\n" -"%s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chave %08lX: \"%s\" 1 novo ID de usuario\n" @@ -2866,6 +2858,18 @@ msgstr "" "certificado de revocación\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "" +"chave %08lX: non foi posible localiza-lo bloque de chaves original:\n" +"%s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "" +"chave %08lX: non foi posible le-lo bloque de chaves original:\n" +"%s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" "chave %08lX: certificado de revocación incorrecto:\n" @@ -3370,6 +3374,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "A chave secreta está disponible.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "A chave secreta está disponible.\n" + msgid "Need the secret key to do this.\n" msgstr "Cómpre a chave secreta para facer isto.\n" @@ -1436,6 +1436,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Milyen kulcsméretet szeretne? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "Felkerekítve %u bitre.\n" @@ -2753,14 +2757,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "%08lX kulcs: Nem egyezik a mi másolatunkkal!\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "%08lX kulcs: Nem találom az eredeti kulcsblokkot: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "%08lX kulcs: Nem tudom beolvasni az eredeti kulcsblokkot: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "%08lX kulcs: \"%s\" 1 új felhasználói azonosító.\n" @@ -2849,6 +2845,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "%08lX kulcs: Nincs nyilvános kulcs - nem tudok visszavonni.\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "%08lX kulcs: Nem találom az eredeti kulcsblokkot: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "%08lX kulcs: Nem tudom beolvasni az eredeti kulcsblokkot: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "%08lX kulcs: Érvénytelen visszavonó igazolás: %s - visszautasítva.\n" @@ -3345,6 +3349,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Titkos kulcs rendelkezésre áll.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Titkos kulcs rendelkezésre áll.\n" + msgid "Need the secret key to do this.\n" msgstr "Ehhez szükség van a titkos kulcsra.\n" @@ -1442,6 +1442,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Keysize yang anda inginkan? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "dibulatkan hingga %u bit\n" @@ -2758,14 +2762,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "kunci %08lX: tidak cocok dengan duplikat kami\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "kunci %08lX: tidak dapat menemukan keyblock orisinal: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "kunci %08lX: 1 user ID baru \"%s\"\n" @@ -2855,6 +2851,14 @@ msgstr "" "pembatalan\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "kunci %08lX: tidak dapat menemukan keyblock orisinal: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - ditolak\n" @@ -3350,6 +3354,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Kunci rahasia tersedia.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Kunci rahasia tersedia.\n" + msgid "Need the secret key to do this.\n" msgstr "Perlu kunci rahasia untuk melakukan hal ini.\n" @@ -1440,6 +1440,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Di che dimensioni vuoi la chiave? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "arrotondate a %u bit\n" @@ -2764,14 +2768,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "chiave %08lX: non corrisponde alla nostra copia\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chiave %08lX: \"%s\" 1 nuovo user ID\n" @@ -2861,6 +2857,14 @@ msgstr "" "certificato di revoca\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n" @@ -3357,6 +3361,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "È disponibile una chiave segreta.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "È disponibile una chiave segreta.\n" + msgid "Need the secret key to do this.\n" msgstr "Per fare questo serve la chiave segreta.\n" @@ -8,9 +8,9 @@ # msgid "" msgstr "" -"Project-Id-Version: gnupg 2.1.23\n" +"Project-Id-Version: gnupg 2.2.2\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2017-08-22 11:22+0900\n" +"PO-Revision-Date: 2017-11-07 11:11+0900\n" "Last-Translator: NIIBE Yutaka <[email protected]>\n" "Language-Team: none\n" "Language: ja\n" @@ -1340,6 +1340,11 @@ msgstr "暗号化鍵の鍵長は? (%u) " 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" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "今、%uビットの鍵を生成するようにカードは再コンフィグされました\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "%uビットに切り上げます\n" @@ -2545,14 +2550,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "鍵%s: こちらの複製と合いません\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "鍵%s: 元の鍵ブロックに位置づけできません: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "鍵%s: 元の鍵ブロックを読み込めません: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "鍵%s: \"%s\" 新しいユーザIDを1個\n" @@ -2638,6 +2635,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "鍵%s: 公開鍵がありません - 失効証明書を適用できません\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "鍵%s: 元の鍵ブロックに位置づけできません: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "鍵%s: 元の鍵ブロックを読み込めません: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "鍵%s: 無効な失効証明書: %s - 拒否\n" @@ -3079,6 +3084,9 @@ msgstr "使えないユーザIDをコンパクトにし、すべての署名を� msgid "Secret key is available.\n" msgstr "秘密鍵が利用できます。\n" +msgid "Secret subkeys are available.\n" +msgstr "秘密副鍵が利用できます。\n" + msgid "Need the secret key to do this.\n" msgstr "この実行には秘密鍵がいります。\n" @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU gnupg 2.1\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2017-08-15 10:19+0200\n" +"PO-Revision-Date: 2017-11-02 17:40+0100\n" "Last-Translator: Åka Sikrom <[email protected]>\n" "Language-Team: Norwegian Bokmål <[email protected]>\n" "Language: nb\n" @@ -1343,6 +1343,11 @@ msgstr "Hvor stor skal krypteringsnøkkelen være? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Hvor stor skal autentiseringsnøkkelen være? (%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 "Kortet blir nå satt opp på nytt for å lage nøkkel på %u bit\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "rundet opp til %u bit\n" @@ -2556,14 +2561,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "nøkkel %s: stemmer ikke med vår kopi\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "nøkkel %s: finner ikke original nøkkelblokk: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "nøkkel %s: klarte ikke å lese opprinnelig nøkkelblokk: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nøkkel %s: «%s» 1 ny bruker-ID\n" @@ -2652,6 +2649,14 @@ msgstr "" "opphevelsessertifikat\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "nøkkel %s: finner ikke original nøkkelblokk: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "nøkkel %s: klarte ikke å lese opprinnelig nøkkelblokk: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nøkkel %s: ugyldig opphevingssertifikat: %s - avvist\n" @@ -3103,6 +3108,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Hemmelig nøkkel er tilgjengelig.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Hemmelig nøkkel er tilgjengelig.\n" + msgid "Need the secret key to do this.\n" msgstr "Du trenger tilhørende hemmelig nøkkel for å gjøre dette.\n" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg-2.0.20\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2017-02-22 16:03+0100\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Jakub Bogusz <[email protected]>\n" "Language-Team: Polish <[email protected]>\n" "Language: pl\n" @@ -1438,11 +1438,6 @@ msgstr "błąd podczas odczytu aktualnych informacji o kluczu: %s\n" msgid "Replace existing key? (y/N) " msgstr "Zastąpić istniejący klucz? (t/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1464,6 +1459,11 @@ msgstr "Jakiej długości klucz do szyfrowania wygenerować? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Jakiej długości klucz do uwierzytelniania wygenerować? (%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 zostanie przekonfigurowana do tworzenia klucza %u-bitowego\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrąglono do %u bitów\n" @@ -2817,14 +2817,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "klucz %s: nie zgadza się z lokalną kopią\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "klucz %s: brak oryginalnego bloku klucza; %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "klucz %s: nie można odczytać oryginalnego bloku klucza: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "klucz %s: ,,%s'' 1 nowy identyfikator użytkownika\n" @@ -2915,6 +2907,14 @@ msgstr "" " unieważnienia\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "klucz %s: brak oryginalnego bloku klucza; %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "klucz %s: nie można odczytać oryginalnego bloku klucza: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "klucz %s: niepoprawny certyfikat unieważnienia: %s - odrzucony\n" @@ -3391,6 +3391,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Dostępny jest klucz tajny.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Dostępny jest klucz tajny.\n" + msgid "Need the secret key to do this.\n" msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n" @@ -1441,6 +1441,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Qual o tamanho de chave desejado? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "arredondado para %u bits\n" @@ -2758,14 +2762,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "chave %08lX: não corresponde à nossa cópia\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chave %8lX: \"%s\" 1 novo ID de utilizador\n" @@ -2855,6 +2851,14 @@ msgstr "" "de revogação\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "chave %08lX: impossível localizar bloco de chaves original: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "chave %08lX: impossível ler bloco de chaves original: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "chave %08lX: certificado de revogação inválido: %s - rejeitado\n" @@ -3356,6 +3360,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Chave secreta disponível.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Chave secreta disponível.\n" + msgid "Need the secret key to do this.\n" msgstr "A chave secreta é necessária para fazer isto.\n" @@ -1446,6 +1446,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Ce lungime de cheie doriţi? (%u) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "rotunjită prin adaos la %u biţi\n" @@ -2798,14 +2802,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "cheia %s: nu se potriveşte cu copia noastră\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "cheia %s: nu pot găsi keyblock-ul original: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "cheia %s: nu pot citi keyblock-ul original: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "cheia %s: \"%s\" 1 nou ID utilizator\n" @@ -2894,6 +2890,14 @@ msgstr "" "cheia %s: nici o cheie publică - nu pot aplica certificatul de revocare\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "cheia %s: nu pot găsi keyblock-ul original: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "cheia %s: nu pot citi keyblock-ul original: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "cheia %s: certificat de revocare invalid: %s - respins\n" @@ -3358,6 +3362,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Cheia secretă este disponibilă.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Cheia secretă este disponibilă.\n" + msgid "Need the secret key to do this.\n" msgstr "Aveţi nevoie de cheia secretă pentru a face aceasta.\n" @@ -9,9 +9,9 @@ # Designated-Translator: none msgid "" msgstr "" -"Project-Id-Version: GnuPG 2.1.0\n" +"Project-Id-Version: GnuPG 2.2.0\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2017-08-05 17:17+0000\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Ineiev <[email protected]>\n" "Language-Team: Russian <[email protected]>\n" "Language: ru\n" @@ -111,7 +111,7 @@ msgid "Passphrase too long" msgstr "Слишком длинная фраза-пароль" msgid "Invalid characters in PIN" -msgstr "Недопустимый символ в PIN" +msgstr "Недопустимые символы в PIN" msgid "PIN too short" msgstr "Слишком короткий PIN" @@ -144,7 +144,7 @@ msgstr "обнаружена карта, серийный номер: %s\n" #, c-format msgid "no authentication key for ssh on card: %s\n" -msgstr "на карте нет основного аутентификационного ключа для ssh: %s\n" +msgstr "на карте нет ключа удостоверения личности для ssh: %s\n" #, c-format msgid "no suitable card key found: %s\n" @@ -263,9 +263,9 @@ msgstr "Да, защита не нужна" #, c-format msgid "A passphrase should be at least %u character long." msgid_plural "A passphrase should be at least %u characters long." -msgstr[0] "Фраза-пароль не должна быть короче %u символа" -msgstr[1] "Фраза-пароль не должна быть короче %u символов" -msgstr[2] "Фраза-пароль не должна быть короче %u символов" +msgstr[0] "Фраза-пароль не должна быть короче %u символа." +msgstr[1] "Фраза-пароль не должна быть короче %u символов." +msgstr[2] "Фраза-пароль не должна быть короче %u символов." #, c-format msgid "A passphrase should contain at least %u digit or%%0Aspecial character." @@ -378,7 +378,7 @@ msgid "enable ssh support" msgstr "включить поддержку ssh" msgid "|ALGO|use ALGO to show ssh fingerprints" -msgstr "|ALGO|использовать алгоритм ALGO для отображения отпечатков" +msgstr "|ALGO|использовать для отображения отпечатков алгоритм ALGO" msgid "enable putty support" msgstr "включить поддержку putty" @@ -390,7 +390,7 @@ msgid "Please report bugs to <@EMAIL@>.\n" msgstr "Об ошибках в программе сообщайте по адресу <@EMAIL@>.\n" msgid "Usage: @GPG_AGENT@ [options] (-h for help)" -msgstr "Вызов: @GPG_AGENT@ [параметры] (-h для подсказки)" +msgstr "Вызов: @GPG_AGENT@ [параметры] (-h - подсказка)" msgid "" "Syntax: @GPG_AGENT@ [options] [command [args]]\n" @@ -500,8 +500,7 @@ msgid "no gpg-agent running in this session\n" msgstr "в этом сеансе агент gpg не работает\n" msgid "Usage: gpg-preset-passphrase [options] KEYGRIP (-h for help)\n" -msgstr "" -"Вызов: gpg-preset-passphrase [параметры] КОД_КЛЮЧА (-h для подсказки)\n" +msgstr "Вызов: gpg-preset-passphrase [параметры] КОД_КЛЮЧА (-h - подсказка)\n" msgid "" "Syntax: gpg-preset-passphrase [options] KEYGRIP\n" @@ -527,7 +526,7 @@ msgstr "" " " msgid "Usage: gpg-protect-tool [options] (-h for help)\n" -msgstr "Вызов: gpg-protect-tool [параметры] (-h для подсказки)\n" +msgstr "Вызов: gpg-protect-tool [параметры] (-h - подсказка)\n" msgid "" "Syntax: gpg-protect-tool [options] [args]\n" @@ -678,7 +677,7 @@ msgstr "DSA требует длины хеша, кратной 8 битам\n" #, c-format msgid "%s key uses an unsafe (%u bit) hash\n" -msgstr "%s ключ использует небезопасный (%u бит) хеш\n" +msgstr "%s ключ использует небезопасный (%u-битный) хеш\n" #, c-format msgid "a %zu bit hash is not valid for a %u bit %s key\n" @@ -752,15 +751,15 @@ msgstr "не могу отключить создание файла образ� #, c-format msgid "Warning: unsafe ownership on %s \"%s\"\n" -msgstr "Внимание: небезопасный владелец %s \"%s\"\n" +msgstr "Внимание: небезопасный владелец объекта %s \"%s\"\n" #, c-format msgid "Warning: unsafe permissions on %s \"%s\"\n" -msgstr "Внимание: небезопасные права доступа %s \"%s\"\n" +msgstr "Внимание: небезопасные права доступа объекта %s \"%s\"\n" #, c-format msgid "waiting for file '%s' to become accessible ...\n" -msgstr "ожидаю доступности файла '%s'\n" +msgstr "ожидаю доступа к файлу '%s'\n" #, c-format msgid "renaming '%s' to '%s' failed: %s\n" @@ -906,7 +905,7 @@ msgid "unsupported algorithm: %s" msgstr "алгоритм (не поддерживается): %s" msgid "seems to be not encrypted" -msgstr "кажется, не зашифровано" +msgstr "по-видимому, не зашифровано" msgid "Number of recipients" msgstr "Количество получателей" @@ -924,7 +923,7 @@ msgstr "хеш-функция данных: %s" #, c-format msgid "Signer %d" -msgstr "Подпись %d" +msgstr "Подпись ключом %d" #, c-format msgid "attr hash algorithm: %s" @@ -1077,11 +1076,11 @@ msgstr "ошибка записи в '%s': %s\n" #, c-format msgid "removing stale lockfile (created by %d)\n" -msgstr "удаляю залипшую блокировку (созданную %d)\n" +msgstr "удаляю залипшую блокировку (созданную процессом %d)\n" #, c-format msgid "waiting for lock (held by %d%s) %s...\n" -msgstr "жду снятия блокировки (заблокировано %d%s) %s...\n" +msgstr "жду снятия блокировки (заблокировано процессом %d%s) %s...\n" msgid "(deadlock?) " msgstr "(мертвая точка?) " @@ -1171,7 +1170,7 @@ msgstr "" "заканчиваться знаком '='\n" msgid "a user notation name must contain the '@' character\n" -msgstr "имя замечания должно содержать символ '@'\n" +msgstr "имя пользовательского замечания должно содержать символ '@'\n" msgid "a notation name must not contain more than one '@' character\n" msgstr "имя замечания не должно содержать более одного символа '@'\n" @@ -1180,7 +1179,7 @@ msgid "a notation value must not use any control characters\n" msgstr "в тексте замечания не должно быть управляющих символов\n" msgid "a notation name may not contain an '=' character\n" -msgstr "имя примечания не должно содержать символа '='\n" +msgstr "имя замечания не должно содержать символа '='\n" msgid "a notation name must have only printable characters or spaces\n" msgstr "имя замечания должно содержать только печатные символы или пробелы\n" @@ -1209,7 +1208,7 @@ msgstr "Внимание: %s\n" msgid "Note: Outdated servers may lack important security fixes.\n" msgstr "" -"Замечание: На старых серверах могут быть оставаться ошибки, критичные для " +"Замечание: На старых серверах могут оставаться ошибки, критичные для " "безопасности.\n" #, c-format @@ -1232,7 +1231,7 @@ msgid "can't do this in batch mode\n" msgstr "в пакетном режиме это действие невозможно\n" msgid "This command is only available for version 2 cards\n" -msgstr "Эта команда доступна только для карт версии 2.\n" +msgstr "Эта команда доступна только для карт версии 2\n" msgid "Reset Code not or not anymore available\n" msgstr "Код сброса (больше) не доступен\n" @@ -1253,10 +1252,10 @@ msgid "unspecified" msgstr "не указан" msgid "not forced" -msgstr "не принудительный" +msgstr "не требуется" msgid "forced" -msgstr "принудительный" +msgstr "требуется" msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Ошибка: Допустим только простой текст ASCII.\n" @@ -1348,7 +1347,12 @@ msgstr "Какой Вам нужен размер ключа для шифров #, c-format msgid "What keysize do you want for the Authentication key? (%u) " -msgstr "Какой Вам нужен размер ключа для аутентификации? (%u) " +msgstr "Какой Вам нужен размер ключа для удостоверения личности? (%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 "Теперь карта будет перенастроена на генерацию ключа длиной %u бит\n" #, c-format msgid "rounded up to %u bits\n" @@ -1395,7 +1399,7 @@ msgid " (2) Encryption key\n" msgstr " (2) Ключ шифрования\n" msgid " (3) Authentication key\n" -msgstr " (3) Ключ аутентификации\n" +msgstr " (3) Ключ удостоверения личности\n" msgid "Invalid selection.\n" msgstr "Неправильный выбор.\n" @@ -1408,7 +1412,7 @@ msgid "KEYTOCARD failed: %s\n" msgstr "сбой записи ключа на карту: %s\n" msgid "This command is not supported by this card\n" -msgstr "Данная команда этой картой не поддерживается.\n" +msgstr "Данная команда этой картой не поддерживается\n" msgid "Note: This command destroys all keys stored on the card!\n" msgstr "Замечание: эта команда сотрет с карты все ключи!\n" @@ -1712,8 +1716,7 @@ msgstr "(проверьте аргумент параметра '%s')\n" #, c-format msgid "Warning: '%s' should be a long key ID or a fingerprint\n" msgstr "" -"Внимание: '%s' должно быть должно быть длинным идентификатором или " -"отпечатком ключа\n" +"Внимание: '%s' должно быть длинным идентификатором или отпечатком ключа\n" #, c-format msgid "error looking up: %s\n" @@ -1939,7 +1942,7 @@ msgstr "" " --fingerprint [имена] показать отпечатки\n" msgid "Usage: @GPG@ [options] [files] (-h for help)" -msgstr "Вызов: @GPG@ [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: @GPG@ [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: @GPG@ [options] [files]\n" @@ -2045,43 +2048,43 @@ msgid "unknown configuration item '%s'\n" msgstr "неизвестный элемент в файле настроек '%s'\n" msgid "display photo IDs during key listings" -msgstr "показать в списке ключей фотоидентификаторы" +msgstr "показывать в списке ключей фотоидентификаторы" msgid "show key usage information during key listings" -msgstr "показать в списке ключей сведения о назначении ключа" +msgstr "показывать в списке ключей сведения о назначении ключа" msgid "show policy URLs during signature listings" -msgstr "показать в списке подписей URL правил" +msgstr "показывать в списке подписей URL правил" msgid "show all notations during signature listings" -msgstr "показать в списке подписей все замечания" +msgstr "показывать в списке подписей все замечания" msgid "show IETF standard notations during signature listings" -msgstr "показать в списке подписей замечания стандарта IETF" +msgstr "показывать в списке подписей замечания стандарта IETF" msgid "show user-supplied notations during signature listings" -msgstr "показать в списке подписей пользовательские замечания" +msgstr "показывать в списке подписей пользовательские замечания" msgid "show preferred keyserver URLs during signature listings" -msgstr "показать в списке подписей URL предпочтительных серверов ключей" +msgstr "показывать в списке подписей URL предпочтительных серверов ключей" msgid "show user ID validity during key listings" msgstr "" -"показать в списке ключей действительность идентификаторов пользователей" +"показывать в списке ключей действительность идентификаторов пользователей" msgid "show revoked and expired user IDs in key listings" msgstr "" -"показать в списке ключей отозванные и просроченные идентификаторы " +"показывать в списке ключей отозванные и просроченные идентификаторы " "пользователей" msgid "show revoked and expired subkeys in key listings" -msgstr "показать в списке ключей отозванные и просроченные подключи" +msgstr "показывать в списке ключей отозванные и просроченные подключи" msgid "show the keyring name in key listings" -msgstr "показать в списке ключей название таблицы ключей" +msgstr "показывать в списке ключей название таблицы ключей" msgid "show expiration dates during signature listings" -msgstr "показать в списке подписей сроки действия" +msgstr "показывать в списке подписей сроки действия" #, c-format msgid "unknown TOFU policy '%s'\n" @@ -2224,7 +2227,7 @@ msgstr "Внимание: работаем с фальшивым системн� #, c-format msgid "will not run with insecure memory due to %s\n" -msgstr "не будет работать с небезопасной памятью из-за %s\n" +msgstr "отказываюсь работать с небезопасной памятью из-за %s\n" msgid "selected cipher algorithm is invalid\n" msgstr "выбран недопустимый алгоритм шифрования\n" @@ -2380,7 +2383,7 @@ msgid "|ALGO|reject signatures made with ALGO" msgstr "|ALGO|отвергать подписи, сделанные по данному алгоритму" msgid "Usage: gpgv [options] [files] (-h for help)" -msgstr "Вызов: gpgv [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: gpgv [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: gpgv [options] [files]\n" @@ -2394,7 +2397,7 @@ msgstr "Справки нет" #, c-format msgid "No help available for '%s'" -msgstr "Нет справки для '%s'" +msgstr "Нет справки по ключевому слову '%s'" msgid "import signatures that are marked as local-only" msgstr "импортировать подписи, обозначенные как 'только локальные'" @@ -2403,7 +2406,7 @@ msgid "repair damage from the pks keyserver during import" msgstr "устранить при импорте повреждения от сервера ключей pks" msgid "do not clear the ownertrust values during import" -msgstr "не сбрасывать уровни доверия владельцам после импорта" +msgstr "не сбрасывать уровни доверия владельцам при импорте" msgid "do not update the trustdb after import" msgstr "не обновлять таблицу доверия после импорта" @@ -2585,14 +2588,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "ключ %s: не совпадает с нашей копией\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "ключ %s: оригинальный блок ключей не найден: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "ключ %s: оригинальный блок ключей не читается: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ключ %s: \"%s\" 1 новый идентификатор пользователя\n" @@ -2678,6 +2673,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "ключ %s: нет открытого ключа - не могу применить сертификат отзыва\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "ключ %s: оригинальный блок ключей не найден: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "ключ %s: оригинальный блок ключей не читается: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ключ %s: недействительный сертификат отзыва: %s - отвергнут\n" @@ -2718,7 +2721,7 @@ msgstr "ключ %s: недопустимая связь подключей\n" #, c-format msgid "key %s: removed multiple subkey binding\n" -msgstr "ключ %s: удалено многократное связывание подключей\n" +msgstr "ключ %s: удалена многократная связь подключей\n" #, c-format msgid "key %s: no subkey for key revocation\n" @@ -3135,6 +3138,9 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Секретный ключ доступен.\n" +msgid "Secret subkeys are available.\n" +msgstr "Секретные подключи доступны.\n" + msgid "Need the secret key to do this.\n" msgstr "Для данного действия нужен секретный ключ.\n" @@ -3237,7 +3243,7 @@ msgstr "" "пользователем\n" msgid "Set preference list to:\n" -msgstr "Установить предпочтения в:\n" +msgstr "Установить предпочтения, равные:\n" msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" @@ -3348,7 +3354,7 @@ msgid "expires: %s" msgstr " годен до: %s" # perhaps this should be somewhere in help/man -# (S - подпись, C - сертификация, E - шифрование, A - аутентификация) +# (S - подпись, C - сертификация, E - шифрование, A - удостоверение личности) # too long for repeating messages. #, c-format msgid "usage: %s" @@ -3436,7 +3442,7 @@ msgid "Nothing deleted.\n" msgstr "Ничего не удалено.\n" msgid "invalid" -msgstr "недопустимый" +msgstr "недопустим" #, c-format msgid "User ID \"%s\" compacted: %s\n" @@ -3620,24 +3626,26 @@ msgstr "Подключ %s уже отозван.\n" #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" -msgstr "Показ фотоидентификатора %s размера %ld для ключа %s (uid %d)\n" +msgstr "" +"Показ фотоидентификатора %s размера %ld для ключа %s (идентификатор " +"пользователя %d)\n" #, c-format msgid "invalid value for option '%s'\n" -msgstr "недопустимое значения для параметра \"%s\"\n" +msgstr "недопустимое значения параметра \"%s\"\n" #, c-format msgid "preference '%s' duplicated\n" msgstr "предпочтение '%s' дублируется\n" msgid "too many cipher preferences\n" -msgstr "слишком много шифровых предпочтений\n" +msgstr "слишком много предпочтений шифров\n" msgid "too many digest preferences\n" -msgstr "слишком много предпочтений для хеш-функций\n" +msgstr "слишком много предпочтений хеш-функций\n" msgid "too many compression preferences\n" -msgstr "слишком много предпочтений для методов сжатия\n" +msgstr "слишком много предпочтений методов сжатия\n" #, c-format msgid "invalid item '%s' in preference string\n" @@ -3650,7 +3658,7 @@ msgid "writing self signature\n" msgstr "запись самоподписи\n" msgid "writing key binding signature\n" -msgstr "запись объединяющей подписи\n" +msgstr "запись связующей подписи\n" #, c-format msgid "keysize invalid; using %u bits\n" @@ -3676,7 +3684,7 @@ msgid "Encrypt" msgstr "Зашифровать" msgid "Authenticate" -msgstr "Аутентифицировать" +msgstr "Удостоверить личность" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. The @@ -3700,15 +3708,15 @@ msgstr "Допустимы действия: " #, c-format msgid " (%c) Toggle the sign capability\n" -msgstr " (%c) Переключить возможность использования для подписи\n" +msgstr " (%c) Переключить возможность подписи\n" #, c-format msgid " (%c) Toggle the encrypt capability\n" -msgstr " (%c) Переключить возможность использования для шифрования\n" +msgstr " (%c) Переключить возможность шифрования\n" #, c-format msgid " (%c) Toggle the authenticate capability\n" -msgstr " (%c) Переключить возможность использования для аутентификации\n" +msgstr " (%c) Переключить возможность удостоверения личности\n" #, c-format msgid " (%c) Finished\n" @@ -3743,11 +3751,11 @@ msgstr " (%d) RSA (только для шифрования)\n" #, c-format msgid " (%d) DSA (set your own capabilities)\n" -msgstr " (%d) DSA (с требуемыми возможностями)\n" +msgstr " (%d) DSA (задать возможности)\n" #, c-format msgid " (%d) RSA (set your own capabilities)\n" -msgstr " (%d) RSA (с требуемыми возможностями)\n" +msgstr " (%d) RSA (задать возможности)\n" #, c-format msgid " (%d) ECC and ECC\n" @@ -3759,7 +3767,7 @@ msgstr " (%d) ECC (только для подписи)\n" #, c-format msgid " (%d) ECC (set your own capabilities)\n" -msgstr " (%d) ECC (с требуемыми возможностями)\n" +msgstr " (%d) ECC (задать возможности)\n" #, c-format msgid " (%d) ECC (encrypt only)\n" @@ -3784,7 +3792,7 @@ msgstr "округлен до %u бит\n" #, c-format msgid "%s keys may be between %u and %u bits long.\n" -msgstr "длина ключей %s может быть от %u до %u бит.\n" +msgstr "длина ключей %s может быть от %u до %u.\n" #, c-format msgid "What keysize do you want for the subkey? (%u) " @@ -3923,7 +3931,7 @@ msgstr "Недопустимый символ в примечании\n" #, c-format msgid "You are using the '%s' character set.\n" -msgstr "Используется таблица символов: '%s'.\n" +msgstr "Используется таблица символов '%s'.\n" #, c-format msgid "" @@ -3954,16 +3962,16 @@ msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " -msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес или (Q)Выход? " +msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес; (Q)Выход? " msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " -msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес или (O)Принять/(Q)Выход? " +msgstr "Сменить (N)Имя, (C)Примечание, (E)Адрес; (O)Принять/(Q)Выход? " msgid "Change (N)ame, (E)mail, or (Q)uit? " -msgstr "Сменить (N)Имя, (E)Адрес или (Q)Выход? " +msgstr "Сменить (N)Имя, (E)Адрес; (Q)Выход? " msgid "Change (N)ame, (E)mail, or (O)kay/(Q)uit? " -msgstr "Сменить (N)Имя, (E)Адрес или (O)Принять/(Q)Выход? " +msgstr "Сменить (N)Имя, (E)Адрес; (O)Принять/(Q)Выход? " msgid "Please correct the error first\n" msgstr "Сначала исправьте ошибку\n" @@ -3990,7 +3998,7 @@ msgid "" " \"%s\"\n" "\n" msgstr "" -"Создается ключ для:\n" +"Создается ключ пользователя\n" " \"%s\"\n" "\n" @@ -3999,7 +4007,7 @@ msgstr "Продолжить? (Y/n) " #, c-format msgid "A key for \"%s\" already exists\n" -msgstr "Ключ для \"%s\" уже существует\n" +msgstr "Ключ пользователя \"%s\" уже существует\n" msgid "Create anyway? (y/N) " msgstr "Все равно создать новый? (y/N) " @@ -4042,7 +4050,7 @@ msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" -"Учтите, что данный ключ не может использоваться для шифрования. Вы можете\n" +"Учтите, что данный ключ не может использоваться для шифрования. Можно\n" "воспользоваться командой \"--edit-key\" и создать подключ для этих целей.\n" #, c-format @@ -4183,7 +4191,7 @@ msgid "include revoked keys in search results" msgstr "включить в результаты поиска отозванные ключи" msgid "include subkeys when searching by key ID" -msgstr "искать по идентификатору ключа, включая подключи" +msgstr "добавить подключи в поиск по идентификатору ключа" msgid "override timeout options set for dirmngr" msgstr "переназначить настройки времени ожидания для dirmngr" @@ -4201,7 +4209,7 @@ msgid "disabled" msgstr "отключен" msgid "Enter number(s), N)ext, or Q)uit > " -msgstr "Введите числа, N) Следующее или Q) Выход> " +msgstr "Введите числа, N) Следующее; Q) Выход > " #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" @@ -4224,7 +4232,7 @@ msgstr "Внимание: невозможно обновить ключ %s с % #, c-format msgid "key \"%s\" not found on keyserver\n" -msgstr "ключ \"%s\" не найден на сервере ключей\n" +msgstr "ключ \"%s\" на сервере ключей не найден\n" msgid "key not found on keyserver\n" msgstr "ключ не найден на сервере ключей\n" @@ -4241,7 +4249,7 @@ msgid "requesting key %s from %s\n" msgstr "получение ключа %s с %s\n" msgid "no keyserver known\n" -msgstr "ни один сервер ключей не известен\n" +msgstr "не известно ни одного сервера ключей\n" #, c-format msgid "skipped \"%s\": %s\n" @@ -4619,7 +4627,7 @@ msgid "" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" -"Выберите изображение для Вашего фотоидентификатора. Это должен быть файл " +"Выберите изображение для своего фотоидентификатора. Это должен быть файл " "JPEG.\n" "Помните, что изображение будет храниться в Вашем открытом ключе и увеличит\n" "его размер! Рекомендуется размер около 240x288.\n" @@ -5004,7 +5012,7 @@ msgid "" "of the gpg command \"--generate-revocation\" in the GnuPG manual." msgstr "" "Пользуйтесь им для отзыва этого ключа в случае раскрытия или потери\n" -"секретного ключа. Однако, если секретный ключ доступен, лучше создать\n" +"секретного ключа. Однако если секретный ключ доступен, лучше создать\n" "новый сертификат с указанием причины отзыва. Подробности см. в описании\n" "команды gpg \"--generate-revocation\" в руководстве по GnuPG." @@ -5276,11 +5284,11 @@ msgstr "таблица доверия: сбой синхронизации: %s\n #, c-format msgid "can't create lock for '%s'\n" -msgstr "невозможно создать блокировку для '%s'\n" +msgstr "не удается создать блокировку для '%s'\n" #, c-format msgid "can't lock '%s'\n" -msgstr "невозможно заблокировать '%s'\n" +msgstr "не удается заблокировать '%s'\n" #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" @@ -5926,7 +5934,7 @@ msgid "enable full debugging" msgstr "полностью включить отладку" msgid "Usage: kbxutil [options] [files] (-h for help)" -msgstr "Вызов: kbxutil [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: kbxutil [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: kbxutil [options] [files]\n" @@ -6124,7 +6132,7 @@ msgstr "пропущена метка времени создания\n" #, c-format msgid "RSA prime %s missing or not of size %d bits\n" -msgstr "Простое число RSA %s пропущено или его размер не равен %d бит\n" +msgstr "Простое число RSA %s пропущено или его размер не равен %d\n" #, c-format msgid "failed to store the key: %s\n" @@ -6212,7 +6220,7 @@ msgid "use variable length input for pinpad" msgstr "использовать входные данные переменой длины для клавиатуры считывателя" msgid "Usage: @SCDAEMON@ [options] (-h for help)" -msgstr "Вызов: @SCDAEMON@ [параметры] (-h для подсказки)" +msgstr "Вызов: @SCDAEMON@ [параметры] (-h - подсказка)" msgid "" "Syntax: scdaemon [options] [command [args]]\n" @@ -6282,7 +6290,7 @@ msgstr "число соответствующих сертификатов: %d\n #, c-format msgid "dirmngr cache-only key lookup failed: %s\n" -msgstr "ключ не найден в буфере dirmngr: %s\n" +msgstr "ключ в буфере dirmngr не найден: %s\n" msgid "failed to allocate keyDB handle\n" msgstr "сбой при выделении памяти под указатель на базу данных\n" @@ -6769,7 +6777,7 @@ msgid "|NAME|use message digest algorithm NAME" msgstr "|NAME|использовать хеш-функцию NAME" msgid "Usage: @GPGSM@ [options] [files] (-h for help)" -msgstr "Вызов: @GPGSM@ [параметры] [файлы] (-h для подсказки)" +msgstr "Вызов: @GPGSM@ [параметры] [файлы] (-h - подсказка)" msgid "" "Syntax: @GPGSM@ [options] [files]\n" @@ -6777,8 +6785,7 @@ msgid "" "Default operation depends on the input data\n" msgstr "" "Синтаксис: @GPGSM@ [параметры] [файлы]\n" -"Подписать, проверить, зашифровать или расшифровать, используя протокол S/" -"MIME\n" +"Подписать, проверить, зашифровать или расшифровать по протоколу S/MIME\n" "Операция по умолчанию зависит от входных данных\n" #, c-format @@ -6911,11 +6918,12 @@ msgstr "" #, c-format msgid "hash algorithm %d (%s) for signer %d not supported; using %s\n" -msgstr "хеш-функция %d (%s) для %d не поддерживается; использую %s\n" +msgstr "" +"хеш-функция %d (%s) для пользователя %d не поддерживается; использую %s\n" #, c-format msgid "hash algorithm used for signer %d: %s (%s)\n" -msgstr "хеш-функция для подписи %d: %s (%s)\n" +msgstr "хеш-функция для пользователя %d: %s (%s)\n" #, c-format msgid "checking for qualified certificate failed: %s\n" @@ -7020,7 +7028,7 @@ msgstr "ошибка помещения сертификата в буфер: %s #, c-format msgid "invalid SHA1 fingerprint string '%s'\n" -msgstr "неверный отпечаток SHA1 '%s'\n" +msgstr "неверная строка отпечатока SHA1 '%s'\n" #, c-format msgid "error fetching certificate by S/N: %s\n" @@ -7509,8 +7517,8 @@ msgstr "принудительно использовать основной о� msgid "Usage: dirmngr-client [options] [certfile|pattern] (-h for help)\n" msgstr "" -"Вызов: dirmngr-client [параметры] [файл_сертификата|шаблон] (-h для " -"подсказки)\n" +"Вызов: dirmngr-client [параметры] [файл_сертификата|шаблон] (-h - " +"подсказка)\n" msgid "" "Syntax: dirmngr-client [options] [certfile|pattern]\n" @@ -7519,9 +7527,9 @@ msgid "" "not valid and other error codes for general failures\n" msgstr "" "Синтаксис: dirmngr-client [параметры] [файл_сертификата|шаблон]\n" -"Проверка сертификата X.509 по списку отозванных сертификатов или по OCSP\n" +"Проверка сертификата X.509 по списку отозванных сертификатов или по OCSP.\n" "Процесс возвращает 0, если сертификат достоверен, 1, если недостоверен,\n" -"и другие коды ошибок при общих отказах\n" +"и другие коды ошибок при общих отказах.\n" #, c-format msgid "error reading certificate from stdin: %s\n" @@ -7675,7 +7683,7 @@ msgstr "" "(Полный список команд и параметров см. в руководстве \"info\")\n" msgid "Usage: @DIRMNGR@ [options] (-h for help)" -msgstr "Вызов: @DIRMNGR@ [параметры] (-h для подсказки)" +msgstr "Вызов: @DIRMNGR@ [параметры] (-h - подсказка)" msgid "" "Syntax: @DIRMNGR@ [options] [command [args]]\n" @@ -7755,10 +7763,10 @@ msgid "|N|connect to port N" msgstr "|N|подключиться к порту N" msgid "|NAME|use user NAME for authentication" -msgstr "|NAME|использовать для аутентификации пользователя NAME" +msgstr "|NAME|использовать имя пользователя NAME для удостоверения личности" msgid "|PASS|use password PASS for authentication" -msgstr "|PASS|использовать для аутентификации пароль PASS" +msgstr "|PASS|использовать для удостоверения личности пароль PASS" msgid "take password from $DIRMNGR_LDAP_PASS" msgstr "взять пароль из $DIRMNGR_LDAP_PASS" @@ -7773,7 +7781,7 @@ msgid "|STRING|return the attribute STRING" msgstr "|STRING|вернуть атрибут STRING" msgid "Usage: dirmngr_ldap [options] [URL] (-h for help)\n" -msgstr "Вызов: dirmngr_ldap [параметры] [URL] (-h для подсказки)\n" +msgstr "Вызов: dirmngr_ldap [параметры] [URL] (-h - подсказка)\n" msgid "" "Syntax: dirmngr_ldap [options] [URL]\n" @@ -8188,7 +8196,7 @@ msgid "run /subst on startup" msgstr "выполнить при запуске подстановку subst" msgid "Usage: @GPG@-connect-agent [options] (-h for help)" -msgstr "Вызов: @GPG@-connect-agent [параметры] (-h для подсказки)" +msgstr "Вызов: @GPG@-connect-agent [параметры] (-h - подсказка)" msgid "" "Syntax: @GPG@-connect-agent [options]\n" @@ -8413,7 +8421,7 @@ msgid "activate changes at runtime, if possible" msgstr "задействовать изменения во время исполнения, если возможно" msgid "Usage: @GPGCONF@ [options] (-h for help)" -msgstr "Вызов: @GPGCONF@ [параметры] (-h для подсказки)" +msgstr "Вызов: @GPGCONF@ [параметры] (-h - подсказка)" msgid "" "Syntax: @GPGCONF@ [options]\n" @@ -8459,7 +8467,7 @@ msgid "input file name (default stdin)" msgstr "имя входного файла (по умолчанию stdin)" msgid "Usage: symcryptrun [options] (-h for help)" -msgstr "Вызов: symcryptrun [параметры] (-h для подсказки)" +msgstr "Вызов: symcryptrun [параметры] (-h - подсказка)" msgid "" "Syntax: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE " @@ -8566,8 +8574,7 @@ msgid "class %s is not supported\n" msgstr "класс %s не поддерживается\n" msgid "Usage: gpg-check-pattern [options] patternfile (-h for help)\n" -msgstr "" -"Вызов: gpg-check-pattern [параметры] файл_образцов (-h для подсказки)\n" +msgstr "Вызов: gpg-check-pattern [параметры] файл_образцов (-h - подсказка)\n" msgid "" "Syntax: gpg-check-pattern [options] patternfile\n" @@ -1442,6 +1442,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Akú veľkosť kľúča si prajete? (1024) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "zaokrúhlené na %u bitov\n" @@ -2773,14 +2777,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "kľúč %08lX: nezodpovedá našej kópii\n" #, fuzzy, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "kľúč %08lX: nemôžem nájsť originálny blok kľúča: %s\n" - -#, fuzzy, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "kľúč %08lX: nemôžem čítať originálny blok kľúča: %s\n" - -#, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "kľúč %08lX: \"%s\" 1 nový identifikátor užívateľa\n" @@ -2869,6 +2865,14 @@ msgstr "" "kľúč %08lX: chýba verejný kľúč - nemôžem aplikovať revokačný certifikát\n" #, fuzzy, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "kľúč %08lX: nemôžem nájsť originálny blok kľúča: %s\n" + +#, fuzzy, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "kľúč %08lX: nemôžem čítať originálny blok kľúča: %s\n" + +#, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "kľúč %08lX: neplatný revokačný certifikát: %s - zamietnuté\n" @@ -3369,6 +3373,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Tajný kľúč je dostupný.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Tajný kľúč je dostupný.\n" + msgid "Need the secret key to do this.\n" msgstr "Na vykonanie tejto operácie je potrebný tajný kľúč.\n" @@ -24,7 +24,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg trunk\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2011-01-12 14:53+0100\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Daniel Nylander <[email protected]>\n" "Language-Team: Swedish <[email protected]>\n" "Language: sv\n" @@ -1479,11 +1479,6 @@ msgstr "fel vid hämtning av aktuell nyckelinformation: %s\n" msgid "Replace existing key? (y/N) " msgstr "Ersätt existerande nyckel? (j/N) " -#, fuzzy -#| msgid "" -#| "NOTE: There is no guarantee that the card supports the requested size.\n" -#| " If the key generation does not succeed, please check the\n" -#| " documentation of your card to see what sizes are allowed.\n" msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" @@ -1506,6 +1501,13 @@ msgstr "Vilken nyckelstorlek vill du använda för krypteringsnyckeln? (%u) " msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Vilken nyckelstorlek vill du använda för autentiseringsnyckeln? (%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 "" +"Kortet kommer nu att konfigureras om för att generera en nyckel med %u " +"bitar\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "avrundade uppåt till %u bitar\n" @@ -2875,14 +2877,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "nyckel %s: stämmer inte mot vår lokala kopia\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "nyckel %s: kan inte hitta det ursprungliga nyckelblocket: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "nyckel %s: kan inte läsa det ursprungliga nyckelblocket %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nyckel %s: \"%s\" 1 ny användaridentitet\n" @@ -2971,6 +2965,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "nyckel %s: ingen publik nyckel - kan inte verkställa spärrcertifikat\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "nyckel %s: kan inte hitta det ursprungliga nyckelblocket: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "nyckel %s: kan inte läsa det ursprungliga nyckelblocket %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nyckel %s: ogiltigt spärrcertifikat: %s - avvisat\n" @@ -3441,6 +3443,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Den hemliga nyckeln finns tillgänglig.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Den hemliga nyckeln finns tillgänglig.\n" + msgid "Need the secret key to do this.\n" msgstr "Den hemliga nyckeln behövs för att göra detta.\n" @@ -1461,6 +1461,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "%u bite yuvarlandı\n" @@ -2802,14 +2806,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "anahtar %s: bizim kopyamızla eşleşmiyor\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "anahtar %s: özgün anahtar bloku bulunamadı: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "anahtar %s: özgün anahtar bloku okunamadı: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "anahtar %s: \"%s\" 1 yeni kullanıcı kimliği\n" @@ -2900,6 +2896,14 @@ msgstr "" "uygulanamaz\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "anahtar %s: özgün anahtar bloku bulunamadı: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "anahtar %s: özgün anahtar bloku okunamadı: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" "anahtar %s: yürürlükten kaldırma sertifikası geçersiz: %s - reddedildi\n" @@ -3377,6 +3381,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Gizli anahtar mevcut.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Gizli anahtar mevcut.\n" + msgid "Need the secret key to do this.\n" msgstr "Bunu yapmak için gizli anahtar gerekli.\n" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU gnupg 2.1.0\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2017-01-27 14:10+0200\n" +"PO-Revision-Date: 2017-11-02 17:41+0100\n" "Last-Translator: Yuri Chornoivan <[email protected]>\n" "Language-Team: Ukrainian <[email protected]>\n" "Language: uk\n" @@ -1356,6 +1356,12 @@ 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" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" +"Зараз налаштування картки буде змінено для створення %u-бітового ключа\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "округлено до %u бітів\n" @@ -2626,14 +2632,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "ключ %s: не відповідає нашій копії\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "ключ %s: не вдалося знайти початковий блок ключів: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "ключ %s: не вдалося прочитати початковий блок ключів: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ключ %s: «%s» 1 новий ідентифікатор користувача\n" @@ -2723,6 +2721,14 @@ msgstr "" "відкликання\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "ключ %s: не вдалося знайти початковий блок ключів: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "ключ %s: не вдалося прочитати початковий блок ключів: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ключ %s: некоректний сертифікат відкликання: %s — відкинуто\n" @@ -3182,6 +3188,11 @@ msgstr "" msgid "Secret key is available.\n" msgstr "Доступний закритий ключ.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "Доступний закритий ключ.\n" + msgid "Need the secret key to do this.\n" msgstr "Для цього потрібен закритий ключ.\n" diff --git a/po/zh_CN.po b/po/zh_CN.po index 0cf93cbac..4b3954c6b 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1427,6 +1427,10 @@ msgid "What keysize do you want for the Authentication key? (%u) " msgstr "您想要用多大的密钥尺寸?(%u)" #, c-format +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "" + +#, c-format msgid "rounded up to %u bits\n" msgstr "舍入到 %u 位\n" @@ -2739,14 +2743,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "密钥 %s:与我们的副本不吻合\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "密钥 %s:无法定位原始的密钥区块:%s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "密钥 %s:无法读取原始的密钥区块: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "密钥 %s:“%s”一个新的用户标识\n" @@ -2834,6 +2830,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "密钥 %s:没有公钥――无法应用吊销证书\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "密钥 %s:无法定位原始的密钥区块:%s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "密钥 %s:无法读取原始的密钥区块: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "密钥 %s:无效的吊销证书:%s――已拒绝\n" @@ -3280,6 +3284,11 @@ msgstr "压缩不可用的用户标识并删除所有签名" msgid "Secret key is available.\n" msgstr "私钥可用。\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "私钥可用。\n" + msgid "Need the secret key to do this.\n" msgstr "要有私钥才能这么做。\n" diff --git a/po/zh_TW.po b/po/zh_TW.po index a3f29b6c6..f997fa1b2 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: GNU gnupg 2.1.0\n" "Report-Msgid-Bugs-To: [email protected]\n" -"PO-Revision-Date: 2014-11-22 20:56+0800\n" +"PO-Revision-Date: 2017-11-02 17:42+0100\n" "Last-Translator: Jedi Lin <[email protected]>\n" "Language-Team: Chinese (traditional) <[email protected]>\n" "Language: zh_TW\n" @@ -1355,6 +1355,11 @@ msgstr "你的加密金鑰想要用多大的金鑰尺寸? (%u) " 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" +msgid "The card will now be re-configured to generate a key of type: %s\n" +msgstr "這張卡片將重新加以組態, 以便產生 %u 位元的金鑰\n" + #, c-format msgid "rounded up to %u bits\n" msgstr "加大到 %u 位元\n" @@ -2600,14 +2605,6 @@ msgid "key %s: doesn't match our copy\n" msgstr "金鑰 %s: 跟我們的副本不吻合\n" #, c-format -msgid "key %s: can't locate original keyblock: %s\n" -msgstr "金鑰 %s: 無法定址原始的金鑰區塊: %s\n" - -#, c-format -msgid "key %s: can't read original keyblock: %s\n" -msgstr "金鑰 %s: 無法讀取原始的金鑰區塊: %s\n" - -#, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "金鑰 %s: \"%s\" 1 個新的使用者 ID\n" @@ -2693,6 +2690,14 @@ msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "金鑰 %s: 沒有公鑰 - 無法套用撤銷憑證\n" #, c-format +msgid "key %s: can't locate original keyblock: %s\n" +msgstr "金鑰 %s: 無法定址原始的金鑰區塊: %s\n" + +#, c-format +msgid "key %s: can't read original keyblock: %s\n" +msgstr "金鑰 %s: 無法讀取原始的金鑰區塊: %s\n" + +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "金鑰 %s: 無效的撤銷憑證: %s - 已駁回\n" @@ -3139,6 +3144,11 @@ msgstr "從金鑰中精簡無法使用的使用者 ID 並移除所有的簽章" msgid "Secret key is available.\n" msgstr "私鑰可用.\n" +#, fuzzy +#| msgid "Secret key is available.\n" +msgid "Secret subkeys are available.\n" +msgstr "私鑰可用.\n" + msgid "Need the secret key to do this.\n" msgstr "要有私鑰纔能這麼做.\n" diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index 6fcec3e4e..e9eca4920 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -98,7 +98,7 @@ static struct { { 0x0065, 1, 0, 1, 0, 0, 0, 0, "Cardholder Related Data"}, { 0x005B, 0, 0x65, 0, 0, 0, 0, 0, "Name" }, { 0x5F2D, 0, 0x65, 0, 0, 0, 0, 0, "Language preferences" }, - { 0x5F35, 0, 0x65, 0, 0, 0, 0, 0, "Sex" }, + { 0x5F35, 0, 0x65, 0, 0, 0, 0, 0, "Salutation" }, { 0x006E, 1, 0, 1, 0, 0, 0, 0, "Application Related Data" }, { 0x004F, 0, 0x6E, 1, 0, 0, 0, 0, "AID" }, { 0x0073, 1, 0, 1, 0, 0, 0, 0, "Discretionary Data Objects" }, diff --git a/sm/keydb.c b/sm/keydb.c index 87fc12d0e..d85679a3b 100644 --- a/sm/keydb.c +++ b/sm/keydb.c @@ -205,7 +205,7 @@ maybe_create_keybox (char *filename, int force, int *r_created) /* The file does not yet exist, create it now. */ oldmask = umask (077); - fp = fopen (filename, "w"); + fp = fopen (filename, "wb"); if (!fp) { rc = gpg_error_from_syserror (); diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am index f6014c9c5..e5be42b41 100644 --- a/tests/openpgp/Makefile.am +++ b/tests/openpgp/Makefile.am @@ -102,9 +102,6 @@ XTESTS = \ issue2929.scm \ issue2941.scm -# Temporary removed tests: -# trust-pgp-4.scm - # XXX: Currently, one cannot override automake's 'check' target. As a # workaround, we avoid defining 'TESTS', thus automake will not emit @@ -268,7 +265,7 @@ sample_msgs = samplemsgs/clearsig-1-key-1.asc \ EXTRA_DIST = defs.scm trust-pgp/common.scm $(XTESTS) $(TEST_FILES) \ mkdemodirs signdemokey $(priv_keys) $(sample_keys) \ - $(sample_msgs) ChangeLog-2011 run-tests.scm trust-pgp-4.scm \ + $(sample_msgs) ChangeLog-2011 run-tests.scm \ setup.scm shell.scm all-tests.scm signed-messages.scm CLEANFILES = prepared.stamp x y yy z out err $(data_files) \ @@ -279,6 +276,12 @@ CLEANFILES = prepared.stamp x y yy z out err $(data_files) \ gnupg-test.stop random_seed gpg-agent.log tofu.db \ passphrases sshcontrol S.gpg-agent.ssh report.xml +if DISABLE_REGEX +EXTRA_DIST += trust-pgp-4.scm +else +XTESTS += trust-pgp-4.scm +endif + clean-local: -rm -rf private-keys-v1.d openpgp-revocs.d tofu.d gpgtar.d diff --git a/tests/openpgp/all-tests.scm b/tests/openpgp/all-tests.scm index d687fe49b..e12b175b9 100644 --- a/tests/openpgp/all-tests.scm +++ b/tests/openpgp/all-tests.scm @@ -48,7 +48,7 @@ (define setup-extended-key-format (setup* "extended-key-format")) (define all-tests - (parse-makefile-expand (in-srcdir "tests" "openpgp" "Makefile.am") + (parse-makefile-expand "Makefile" (lambda (filename port key) (parse-makefile port key)) "XTESTS")) diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c index b0e17cb10..8613d193f 100644 --- a/tools/gpgtar-extract.c +++ b/tools/gpgtar-extract.c @@ -345,21 +345,21 @@ gpgtar_extract (const char *filename, int decrypt) dirname = xtrystrdup (opt.directory); else { - if (filename) + if (opt.filename) { - dirprefix = strrchr (filename, '/'); + dirprefix = strrchr (opt.filename, '/'); if (dirprefix) dirprefix++; else - dirprefix = filename; + dirprefix = opt.filename; } - else if (opt.filename) + else if (filename) { - dirprefix = strrchr (opt.filename, '/'); + dirprefix = strrchr (filename, '/'); if (dirprefix) dirprefix++; else - dirprefix = opt.filename; + dirprefix = filename; } if (!dirprefix || !*dirprefix) |