aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--agent/gpg-agent.c37
-rw-r--r--dirmngr/Makefile.am4
-rw-r--r--dirmngr/dirmngr.c17
-rw-r--r--dirmngr/dirmngr.h25
-rw-r--r--dirmngr/domaininfo.c291
-rw-r--r--dirmngr/ks-action.c3
-rw-r--r--dirmngr/misc.c7
-rw-r--r--dirmngr/server.c186
-rw-r--r--dirmngr/workqueue.c214
-rw-r--r--doc/DETAILS16
-rw-r--r--doc/Makefile.am4
-rw-r--r--doc/tools.texi136
-rw-r--r--g10/card-util.c13
-rw-r--r--g10/getkey.c5
-rw-r--r--g10/trustdb.c6
-rw-r--r--po/ca.po25
-rw-r--r--po/cs.po28
-rw-r--r--po/da.po35
-rw-r--r--po/de.po27
-rw-r--r--po/el.po25
-rw-r--r--po/eo.po25
-rw-r--r--po/es.po33
-rw-r--r--po/et.po25
-rw-r--r--po/fi.po25
-rw-r--r--po/fr.po29
-rw-r--r--po/gl.po33
-rw-r--r--po/hu.po25
-rw-r--r--po/id.po25
-rw-r--r--po/it.po25
-rw-r--r--po/ja.po28
-rw-r--r--po/nb.po28
-rw-r--r--po/pl.po33
-rw-r--r--po/pt.po25
-rw-r--r--po/ro.po25
-rw-r--r--po/ru.po233
-rw-r--r--po/sk.po25
-rw-r--r--po/sv.po35
-rw-r--r--po/tr.po25
-rw-r--r--po/uk.po29
-rw-r--r--po/zh_CN.po25
-rw-r--r--po/zh_TW.po28
-rw-r--r--scd/app-openpgp.c2
-rw-r--r--sm/keydb.c2
-rw-r--r--tests/openpgp/Makefile.am11
-rw-r--r--tests/openpgp/all-tests.scm2
-rw-r--r--tools/gpgtar-extract.c12
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;
diff --git a/po/ca.po b/po/ca.po
index 738c5f71b..4d9ce668f 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -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"
diff --git a/po/cs.po b/po/cs.po
index 17bff35aa..24d54c7c9 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -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"
diff --git a/po/da.po b/po/da.po
index e124de51b..abc12577e 100644
--- a/po/da.po
+++ b/po/da.po
@@ -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"
diff --git a/po/de.po b/po/de.po
index 2f82d9910..e974ddcd7 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnupg-2.1.0\n"
"Report-Msgid-Bugs-To: [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 ""
diff --git a/po/el.po b/po/el.po
index a57c8b8dd..cc9439ecf 100644
--- a/po/el.po
+++ b/po/el.po
@@ -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"
diff --git a/po/eo.po b/po/eo.po
index 3c4969803..611b987ae 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -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"
diff --git a/po/es.po b/po/es.po
index 95a258989..76d3952e5 100644
--- a/po/es.po
+++ b/po/es.po
@@ -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"
diff --git a/po/et.po b/po/et.po
index f852a295f..66e905b5f 100644
--- a/po/et.po
+++ b/po/et.po
@@ -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"
diff --git a/po/fi.po b/po/fi.po
index ea38194f1..15f7ce7ce 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -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"
diff --git a/po/fr.po b/po/fr.po
index 916aef718..fa1e87f2b 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -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"
diff --git a/po/gl.po b/po/gl.po
index d8434f6e8..3b1870296 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -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"
diff --git a/po/hu.po b/po/hu.po
index 49bef6cd5..f18609df0 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -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"
diff --git a/po/id.po b/po/id.po
index 786dc42b4..635ed7d55 100644
--- a/po/id.po
+++ b/po/id.po
@@ -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"
diff --git a/po/it.po b/po/it.po
index 1bcc8b889..fc4324447 100644
--- a/po/it.po
+++ b/po/it.po
@@ -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"
diff --git a/po/ja.po b/po/ja.po
index 6567ab3c0..26c032f4a 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -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"
diff --git a/po/nb.po b/po/nb.po
index 7a72323a6..8be672407 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -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"
diff --git a/po/pl.po b/po/pl.po
index c4e2d07a3..ef392ac41 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -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"
diff --git a/po/pt.po b/po/pt.po
index e95b887aa..3caa5cab2 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -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"
diff --git a/po/ro.po b/po/ro.po
index d938da704..30a99249d 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -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"
diff --git a/po/ru.po b/po/ru.po
index f995349e7..a2d038352 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -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"
diff --git a/po/sk.po b/po/sk.po
index d8b898c91..6880122c0 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -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"
diff --git a/po/sv.po b/po/sv.po
index ca7ba7ed4..8d94c9a89 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -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"
diff --git a/po/tr.po b/po/tr.po
index c1743f364..cc77eb919 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -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"
diff --git a/po/uk.po b/po/uk.po
index abbe11668..9316d8156 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -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)