aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--agent/ChangeLog17
-rw-r--r--agent/agent.h3
-rw-r--r--agent/cache.c2
-rw-r--r--agent/command.c142
-rw-r--r--agent/findkey.c2
-rw-r--r--agent/genkey.c44
-rw-r--r--common/ChangeLog4
-rw-r--r--common/logging.c8
-rw-r--r--common/logging.h1
-rw-r--r--g10/ChangeLog19
-rw-r--r--g10/call-agent.c86
-rw-r--r--g10/call-agent.h5
-rw-r--r--g10/gpg.c2
-rw-r--r--g10/keyedit.c282
-rw-r--r--g10/main.h2
-rw-r--r--g10/passphrase.c8
-rw-r--r--po/de.po634
-rw-r--r--sm/server.c2
18 files changed, 694 insertions, 569 deletions
diff --git a/agent/ChangeLog b/agent/ChangeLog
index cd33bcad9..9f4bd863e 100644
--- a/agent/ChangeLog
+++ b/agent/ChangeLog
@@ -1,3 +1,20 @@
+2010-10-26 Werner Koch <[email protected]>
+
+ * cache.c (agent_put_cache): Allow deletion even if TTL is passwd
+ as 0.
+
+ * genkey.c (agent_protect_and_store): Add arg PASSPHRASE_ADDR.
+ * command.c (cmd_passwd): Add option --passwd-nonce.
+ (struct server_local_s): Add LAST_CACHE_NONCE and LAST_PASSWD_NONCE.
+ (clear_nonce_cache): New.
+ (reset_notify): Clear the nonce cache.
+ (start_command_handler): Ditto.
+
+2010-10-25 Werner Koch <[email protected]>
+
+ * command.c (cmd_export_key): Free CACHE_NONCE.
+ (cmd_passwd): Add option --cache-nonce.
+
2010-10-18 Werner Koch <[email protected]>
* call-pinentry.c (start_pinentry): Print name of pinentry on
diff --git a/agent/agent.h b/agent/agent.h
index 48511c565..2700d8a91 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -295,7 +295,8 @@ gpg_error_t agent_ask_new_passphrase (ctrl_t ctrl, const char *prompt,
int agent_genkey (ctrl_t ctrl, const char *cache_nonce,
const char *keyparam, size_t keyparmlen,
int no_protection, membuf_t *outbuf);
-int agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey);
+gpg_error_t agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey,
+ char **passphrase_addr);
/*-- protect.c --*/
unsigned long get_standard_s2k_count (void);
diff --git a/agent/cache.c b/agent/cache.c
index abbf8c653..f19e97d32 100644
--- a/agent/cache.c
+++ b/agent/cache.c
@@ -284,7 +284,7 @@ agent_put_cache (const char *key, cache_mode_t cache_mode,
default: ttl = opt.def_cache_ttl; break;
}
}
- if (!ttl || cache_mode == CACHE_MODE_IGNORE)
+ if ((!ttl && data) || cache_mode == CACHE_MODE_IGNORE)
return 0;
for (r=thecache; r; r = r->next)
diff --git a/agent/command.c b/agent/command.c
index 0a56f1218..8ae313e7a 100644
--- a/agent/command.c
+++ b/agent/command.c
@@ -72,6 +72,8 @@ struct server_local_s
void *import_key; /* Malloced KEK for the import_key command. */
void *export_key; /* Malloced KEK for the export_key command. */
int allow_fully_canceled; /* Client is aware of GPG_ERR_FULLY_CANCELED. */
+ char *last_cache_nonce; /* Last CACHE_NOCNE sent as status (malloced). */
+ char *last_passwd_nonce; /* Last PASSWD_NOCNE sent as status (malloced). */
};
@@ -153,6 +155,26 @@ write_and_clear_outbuf (assuan_context_t ctx, membuf_t *mb)
}
+static void
+clear_nonce_cache (ctrl_t ctrl)
+{
+ if (ctrl->server_local->last_cache_nonce)
+ {
+ agent_put_cache (ctrl->server_local->last_cache_nonce,
+ CACHE_MODE_NONCE, NULL, 0);
+ xfree (ctrl->server_local->last_cache_nonce);
+ ctrl->server_local->last_cache_nonce = NULL;
+ }
+ if (ctrl->server_local->last_passwd_nonce)
+ {
+ agent_put_cache (ctrl->server_local->last_passwd_nonce,
+ CACHE_MODE_NONCE, NULL, 0);
+ xfree (ctrl->server_local->last_passwd_nonce);
+ ctrl->server_local->last_passwd_nonce = NULL;
+ }
+}
+
+
static gpg_error_t
reset_notify (assuan_context_t ctx, char *line)
{
@@ -166,6 +188,9 @@ reset_notify (assuan_context_t ctx, char *line)
xfree (ctrl->server_local->keydesc);
ctrl->server_local->keydesc = NULL;
+
+ clear_nonce_cache (ctrl);
+
return 0;
}
@@ -1331,44 +1356,135 @@ cmd_learn (assuan_context_t ctx, char *line)
static const char hlp_passwd[] =
- "PASSWD <hexstring_with_keygrip>\n"
+ "PASSWD [--cache-nonce=<c>] [--passwd-nonce=<s>] <hexstring_with_keygrip>\n"
"\n"
"Change the passphrase/PIN for the key identified by keygrip in LINE.";
static gpg_error_t
cmd_passwd (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
- int rc;
+ gpg_error_t err;
+ int c;
+ char *cache_nonce = NULL;
+ char *passwd_nonce = NULL;
unsigned char grip[20];
gcry_sexp_t s_skey = NULL;
unsigned char *shadow_info = NULL;
+ char *passphrase = NULL;
+ char *pend;
- rc = parse_keygrip (ctx, line, grip);
- if (rc)
+ cache_nonce = option_value (line, "--cache-nonce");
+ if (cache_nonce)
+ {
+ for (pend = cache_nonce; *pend && !spacep (pend); pend++)
+ ;
+ c = *pend;
+ *pend = '\0';
+ cache_nonce = xtrystrdup (cache_nonce);
+ *pend = c;
+ if (!cache_nonce)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ }
+
+ passwd_nonce = option_value (line, "--passwd-nonce");
+ if (passwd_nonce)
+ {
+ for (pend = passwd_nonce; *pend && !spacep (pend); pend++)
+ ;
+ c = *pend;
+ *pend = '\0';
+ passwd_nonce = xtrystrdup (passwd_nonce);
+ *pend = c;
+ if (!passwd_nonce)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ }
+
+ line = skip_options (line);
+
+ err = parse_keygrip (ctx, line, grip);
+ if (err)
goto leave;
ctrl->in_passwd++;
- rc = agent_key_from_file (ctrl, NULL, ctrl->server_local->keydesc,
- grip, &shadow_info, CACHE_MODE_IGNORE, NULL,
- &s_skey, NULL);
- if (rc)
+ err = agent_key_from_file (ctrl, cache_nonce, ctrl->server_local->keydesc,
+ grip, &shadow_info, CACHE_MODE_IGNORE, NULL,
+ &s_skey, &passphrase);
+ if (err)
;
else if (!s_skey)
{
log_error ("changing a smartcard PIN is not yet supported\n");
- rc = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
+ err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
}
else
- rc = agent_protect_and_store (ctrl, s_skey);
+ {
+ char *newpass = NULL;
+
+ if (passwd_nonce)
+ newpass = agent_get_cache (passwd_nonce, CACHE_MODE_NONCE);
+ err = agent_protect_and_store (ctrl, s_skey, &newpass);
+ if (!err && passphrase)
+ {
+ /* A passphrase existed on the old key and the change was
+ successful. Return a nonce for that old passphrase to
+ let the caller try to unprotect the other subkeys with
+ the same key. */
+ if (!cache_nonce)
+ {
+ char buf[12];
+ gcry_create_nonce (buf, 12);
+ cache_nonce = bin2hex (buf, 12, NULL);
+ }
+ if (cache_nonce
+ && !agent_put_cache (cache_nonce, CACHE_MODE_NONCE,
+ passphrase, 120 /*seconds*/))
+ {
+ assuan_write_status (ctx, "CACHE_NONCE", cache_nonce);
+ xfree (ctrl->server_local->last_cache_nonce);
+ ctrl->server_local->last_cache_nonce = cache_nonce;
+ cache_nonce = NULL;
+ }
+ if (newpass)
+ {
+ /* If we have a new passphrase (which might be empty) we
+ store it under a passwd nonce so that the caller may
+ send that nonce again to use it for another key. */
+ if (!passwd_nonce)
+ {
+ char buf[12];
+ gcry_create_nonce (buf, 12);
+ passwd_nonce = bin2hex (buf, 12, NULL);
+ }
+ if (passwd_nonce
+ && !agent_put_cache (passwd_nonce, CACHE_MODE_NONCE,
+ newpass, 120 /*seconds*/))
+ {
+ assuan_write_status (ctx, "PASSWD_NONCE", passwd_nonce);
+ xfree (ctrl->server_local->last_passwd_nonce);
+ ctrl->server_local->last_passwd_nonce = passwd_nonce;
+ passwd_nonce = NULL;
+ }
+ }
+ }
+ xfree (newpass);
+ }
ctrl->in_passwd--;
xfree (ctrl->server_local->keydesc);
ctrl->server_local->keydesc = NULL;
leave:
+ xfree (passphrase);
gcry_sexp_release (s_skey);
xfree (shadow_info);
- return leave_cmd (ctx, rc);
+ xfree (cache_nonce);
+ return leave_cmd (ctx, err);
}
@@ -1812,6 +1928,7 @@ cmd_export_key (assuan_context_t ctx, char *line)
leave:
+ xfree (cache_nonce);
xfree (passphrase);
xfree (wrappedkey);
gcry_cipher_close (cipherhd);
@@ -2448,6 +2565,9 @@ start_command_handler (ctrl_t ctrl, gnupg_fd_t listen_fd, gnupg_fd_t fd)
}
}
+ /* Reset the nonce caches. */
+ clear_nonce_cache (ctrl);
+
/* Reset the SCD if needed. */
agent_reset_scd (ctrl);
diff --git a/agent/findkey.c b/agent/findkey.c
index 611a44142..91fb8c14c 100644
--- a/agent/findkey.c
+++ b/agent/findkey.c
@@ -405,7 +405,7 @@ unprotect (ctrl_t ctrl, const char *cache_nonce, const char *desc_text,
xfree (pi);
return rc;
}
- rc = agent_protect_and_store (ctrl, s_skey);
+ rc = agent_protect_and_store (ctrl, s_skey, NULL);
gcry_sexp_release (s_skey);
if (rc)
{
diff --git a/agent/genkey.c b/agent/genkey.c
index 7612f99da..2842448f2 100644
--- a/agent/genkey.c
+++ b/agent/genkey.c
@@ -468,20 +468,40 @@ agent_genkey (ctrl_t ctrl, const char *cache_nonce,
-/* Apply a new passphrase to the key S_SKEY and store it. */
-int
-agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey)
+/* Apply a new passphrase to the key S_SKEY and store it. If
+ PASSPHRASE_ADDR and *PASSPHRASE_ADDR are not NULL, use that
+ passphrase. If PASSPHRASE_ADDR is not NULL store a newly entered
+ passphrase at that address. */
+gpg_error_t
+agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey,
+ char **passphrase_addr)
{
- int rc;
- char *passphrase;
+ gpg_error_t err;
- rc = agent_ask_new_passphrase (ctrl,
- _("Please enter the new passphrase"),
- &passphrase);
- if (!rc)
+ if (passphrase_addr && *passphrase_addr)
{
- rc = store_key (s_skey, passphrase, 1);
- xfree (passphrase);
+ /* Take an empty string as request not to protect the key. */
+ err = store_key (s_skey, **passphrase_addr? *passphrase_addr:NULL, 1);
}
- return rc;
+ else
+ {
+ char *pass = NULL;
+
+ if (passphrase_addr)
+ {
+ xfree (*passphrase_addr);
+ *passphrase_addr = NULL;
+ }
+ err = agent_ask_new_passphrase (ctrl,
+ _("Please enter the new passphrase"),
+ &pass);
+ if (!err)
+ err = store_key (s_skey, pass, 1);
+ if (!err && passphrase_addr)
+ *passphrase_addr = pass;
+ else
+ xfree (pass);
+ }
+
+ return err;
}
diff --git a/common/ChangeLog b/common/ChangeLog
index 7116b0225..38856f6f2 100644
--- a/common/ChangeLog
+++ b/common/ChangeLog
@@ -1,3 +1,7 @@
+2010-10-25 Werner Koch <[email protected]>
+
+ * logging.c (do_log): Rename to log_log and make global.
+
2010-10-20 Werner Koch <[email protected]>
* i18n.c (i18n_init) [USE_SIMPLE_GETTEXT]: Call textdomain.
diff --git a/common/logging.c b/common/logging.c
index 5a61c609c..6b9fa5e23 100644
--- a/common/logging.c
+++ b/common/logging.c
@@ -670,8 +670,8 @@ do_logv (int level, int ignore_arg_ptr, const char *fmt, va_list arg_ptr)
}
-static void
-do_log (int level, const char *fmt, ...)
+void
+log_log (int level, const char *fmt, ...)
{
va_list arg_ptr ;
@@ -812,14 +812,14 @@ log_printhex (const char *text, const void *buffer, size_t length)
void
bug_at( const char *file, int line, const char *func )
{
- do_log (JNLIB_LOG_BUG, ("... this is a bug (%s:%d:%s)\n"), file, line, func);
+ log_log (JNLIB_LOG_BUG, ("... this is a bug (%s:%d:%s)\n"), file, line, func);
abort (); /* Never called; just to make the compiler happy. */
}
#else
void
bug_at( const char *file, int line )
{
- do_log (JNLIB_LOG_BUG, _("you found a bug ... (%s:%d)\n"), file, line);
+ log_log (JNLIB_LOG_BUG, _("you found a bug ... (%s:%d)\n"), file, line);
abort (); /* Never called; just to make the compiler happy. */
}
#endif
diff --git a/common/logging.h b/common/logging.h
index 3ee4db6ef..9493841ae 100644
--- a/common/logging.h
+++ b/common/logging.h
@@ -65,6 +65,7 @@ enum jnlib_log_levels {
JNLIB_LOG_BUG,
JNLIB_LOG_DEBUG
};
+void log_log (int level, const char *fmt, ...) JNLIB_GCC_A_PRINTF(2,3);
void log_logv (int level, const char *fmt, va_list arg_ptr);
void log_string (int level, const char *string);
#endif /*JNLIB_NEED_LOG_LOGV*/
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 7d7b68619..65f9117c1 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,5 +1,24 @@
+2010-10-26 Werner Koch <[email protected]>
+
+ * keyedit.c (change_passphrase): Handle the passwd_nonce.
+ * call-agent.c (cache_nonce_parm_s): New.
+ (cache_nonce_status_cb): Use that new struct.
+ (agent_genkey, agent_import_key, agent_export_key, agent_passwd):
+ Adjust for that change.
+
+2010-10-25 Werner Koch <[email protected]>
+
+ * passphrase.c (gpg_format_keydesc): Fix printing of main keyid.
+
+ * keyedit.c (JNLIB_NEED_LOG_LOGV): Define.
+ * call-agent.c (agent_passwd): New.
+
2010-10-21 Werner Koch <[email protected]>
+ * keyedit.c (keyedit_passwd): Simplify.
+ (change_passphrase): Return an error code and not the change
+ flag. Remove editing of the keyring.
+
* seckey-cert.c: Remove.
* Makefile.am (gpg2_SOURCES): Remove seckey-cert.c
diff --git a/g10/call-agent.c b/g10/call-agent.c
index e611ba612..f691baf68 100644
--- a/g10/call-agent.c
+++ b/g10/call-agent.c
@@ -86,6 +86,13 @@ struct import_key_parm_s
};
+struct cache_nonce_parm_s
+{
+ char **cache_nonce_addr;
+ char **passwd_nonce_addr;
+};
+
+
static gpg_error_t learn_status_cb (void *opaque, const char *line);
@@ -1470,7 +1477,7 @@ agent_get_keyinfo (ctrl_t ctrl, const char *hexkeygrip, char **r_serialno)
static gpg_error_t
cache_nonce_status_cb (void *opaque, const char *line)
{
- char **cache_nonce = opaque;
+ struct cache_nonce_parm_s *parm = opaque;
const char *keyword = line;
int keywordlen;
@@ -1481,10 +1488,18 @@ cache_nonce_status_cb (void *opaque, const char *line)
if (keywordlen == 11 && !memcmp (keyword, "CACHE_NONCE", keywordlen))
{
- if (cache_nonce)
+ if (parm->cache_nonce_addr)
+ {
+ xfree (*parm->cache_nonce_addr);
+ *parm->cache_nonce_addr = xtrystrdup (line);
+ }
+ }
+ else if (keywordlen == 12 && !memcmp (keyword, "PASSWD_NONCE", keywordlen))
+ {
+ if (parm->passwd_nonce_addr)
{
- xfree (*cache_nonce);
- *cache_nonce = xtrystrdup (line);
+ xfree (*parm->passwd_nonce_addr);
+ *parm->passwd_nonce_addr = xtrystrdup (line);
}
}
@@ -1523,6 +1538,7 @@ agent_genkey (ctrl_t ctrl, char **cache_nonce_addr,
{
gpg_error_t err;
struct genkey_parm_s gk_parm;
+ struct cache_nonce_parm_s cn_parm;
membuf_t data;
size_t len;
unsigned char *buf;
@@ -1546,10 +1562,12 @@ agent_genkey (ctrl_t ctrl, char **cache_nonce_addr,
no_protection? " --no-protection":"",
cache_nonce_addr && *cache_nonce_addr? " ":"",
cache_nonce_addr && *cache_nonce_addr? *cache_nonce_addr:"");
+ cn_parm.cache_nonce_addr = cache_nonce_addr;
+ cn_parm.passwd_nonce_addr = NULL;
err = assuan_transact (agent_ctx, line,
membuf_data_cb, &data,
inq_genkey_parms, &gk_parm,
- cache_nonce_status_cb, cache_nonce_addr);
+ cache_nonce_status_cb, &cn_parm);
if (err)
{
xfree (get_membuf (&data, &len));
@@ -1625,7 +1643,7 @@ agent_genkey (ctrl_t ctrl, char **cache_nonce_addr,
displayed if the agent needs to ask for the PIN. DIGEST and
DIGESTLEN is the hash value to sign and DIGESTALGO the algorithm id
used to compute the digest. If CACHE_NONCE is used the agent is
- advised to firts try a passphrase associated with that nonce. */
+ advised to first try a passphrase associated with that nonce. */
gpg_error_t
agent_pksign (ctrl_t ctrl, const char *cache_nonce,
const char *keygrip, const char *desc,
@@ -1890,6 +1908,7 @@ agent_import_key (ctrl_t ctrl, const char *desc, char **cache_nonce_addr,
{
gpg_error_t err;
struct import_key_parm_s parm;
+ struct cache_nonce_parm_s cn_parm;
char line[ASSUAN_LINELENGTH];
err = start_agent (ctrl, 0);
@@ -1914,9 +1933,11 @@ agent_import_key (ctrl_t ctrl, const char *desc, char **cache_nonce_addr,
snprintf (line, sizeof line, "IMPORT_KEY%s%s",
cache_nonce_addr && *cache_nonce_addr? " ":"",
cache_nonce_addr && *cache_nonce_addr? *cache_nonce_addr:"");
+ cn_parm.cache_nonce_addr = cache_nonce_addr;
+ cn_parm.passwd_nonce_addr = NULL;
err = assuan_transact (agent_ctx, line,
NULL, NULL, inq_import_key_parms, &parm,
- cache_nonce_status_cb, cache_nonce_addr);
+ cache_nonce_status_cb, &cn_parm);
return err;
}
@@ -1932,6 +1953,7 @@ agent_export_key (ctrl_t ctrl, const char *hexkeygrip, const char *desc,
unsigned char **r_result, size_t *r_resultlen)
{
gpg_error_t err;
+ struct cache_nonce_parm_s cn_parm;
membuf_t data;
size_t len;
unsigned char *buf;
@@ -1958,10 +1980,12 @@ agent_export_key (ctrl_t ctrl, const char *hexkeygrip, const char *desc,
hexkeygrip);
init_membuf_secure (&data, 1024);
+ cn_parm.cache_nonce_addr = cache_nonce_addr;
+ cn_parm.passwd_nonce_addr = NULL;
err = assuan_transact (agent_ctx, line,
membuf_data_cb, &data,
default_inq_cb, ctrl,
- cache_nonce_status_cb, cache_nonce_addr);
+ cache_nonce_status_cb, &cn_parm);
if (err)
{
xfree (get_membuf (&data, &len));
@@ -1974,3 +1998,49 @@ agent_export_key (ctrl_t ctrl, const char *hexkeygrip, const char *desc,
*r_resultlen = len;
return 0;
}
+
+
+
+/* Ask the agent to change the passphrase of the key identified by
+ HEXKEYGRIP. If DESC is not NULL, display DESC instead of the
+ default description message. If CACHE_NONCE_ADDR is not NULL the
+ agent is advised to first try a passphrase associated with that
+ nonce. If PASSWD_NONCE_ADDR is not NULL the agent will try to use
+ the passphrase associated with that nonce. */
+gpg_error_t
+agent_passwd (ctrl_t ctrl, const char *hexkeygrip, const char *desc,
+ char **cache_nonce_addr, char **passwd_nonce_addr)
+{
+ gpg_error_t err;
+ struct cache_nonce_parm_s cn_parm;
+ char line[ASSUAN_LINELENGTH];
+
+ err = start_agent (ctrl, 0);
+ if (err)
+ return err;
+
+ if (!hexkeygrip || strlen (hexkeygrip) != 40)
+ return gpg_error (GPG_ERR_INV_VALUE);
+
+ if (desc)
+ {
+ snprintf (line, DIM(line)-1, "SETKEYDESC %s", desc);
+ err = assuan_transact (agent_ctx, line,
+ NULL, NULL, NULL, NULL, NULL, NULL);
+ if (err)
+ return err;
+ }
+
+ snprintf (line, DIM(line)-1, "PASSWD %s%s %s%s %s",
+ cache_nonce_addr && *cache_nonce_addr? "--cache-nonce=":"",
+ cache_nonce_addr && *cache_nonce_addr? *cache_nonce_addr:"",
+ passwd_nonce_addr && *passwd_nonce_addr? "--passwd-nonce=":"",
+ passwd_nonce_addr && *passwd_nonce_addr? *passwd_nonce_addr:"",
+ hexkeygrip);
+ cn_parm.cache_nonce_addr = cache_nonce_addr;
+ cn_parm.passwd_nonce_addr = passwd_nonce_addr;
+ err = assuan_transact (agent_ctx, line, NULL, NULL,
+ default_inq_cb, ctrl,
+ cache_nonce_status_cb, &cn_parm);
+ return err;
+}
diff --git a/g10/call-agent.h b/g10/call-agent.h
index 6cba9c78c..e09c30990 100644
--- a/g10/call-agent.h
+++ b/g10/call-agent.h
@@ -184,6 +184,9 @@ gpg_error_t agent_export_key (ctrl_t ctrl, const char *keygrip,
const char *desc, char **cache_nonce_addr,
unsigned char **r_result, size_t *r_resultlen);
+/* Change the passphrase of a key. */
+gpg_error_t agent_passwd (ctrl_t ctrl, const char *hexkeygrip, const char *desc,
+ char **cache_nonce_addr, char **passwd_nonce_addr);
-#endif /*GNUPG_G10_CALL_AGENT_H*/
+#endif /*GNUPG_G10_CALL_AGENT_H*/
diff --git a/g10/gpg.c b/g10/gpg.c
index 5ee03a63b..847220afd 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -3657,7 +3657,7 @@ main (int argc, char **argv)
else
{
username = make_username (fname);
- keyedit_passwd (username);
+ keyedit_passwd (ctrl, username);
xfree (username);
}
break;
diff --git a/g10/keyedit.c b/g10/keyedit.c
index 1686fa6e0..ee411016e 100644
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -30,6 +30,7 @@
# include <readline/readline.h>
#endif
+#define JNLIB_NEED_LOG_LOGV
#include "gpg.h"
#include "options.h"
#include "packet.h"
@@ -1124,44 +1125,63 @@ leave:
/*
- * Change the passphrase of the primary and all secondary keys.
- * We use only one passphrase for all keys.
+ * Change the passphrase of the primary and all secondary keys. Note
+ * that it is common to use only one passphrase for the primary and
+ * all subkeys. However, this is now (since GnuPG 2.1) all up to the
+ * gpg-agent. Returns 0 on success or an error code.
*/
-static int
-change_passphrase (KBNODE keyblock, int *r_err)
+static gpg_error_t
+change_passphrase (ctrl_t ctrl, kbnode_t keyblock)
{
- int rc = 0;
- int changed = 0;
- KBNODE node;
- PKT_public_key *pksk;
- char *passphrase = NULL;
- int no_primary_secrets = 0;
+ gpg_error_t err;
+ kbnode_t node;
+ PKT_public_key *pk;
int any;
+ u32 keyid[2], subid[2];
+ char *hexgrip = NULL;
+ char *cache_nonce = NULL;
+ char *passwd_nonce = NULL;
node = find_kbnode (keyblock, PKT_PUBLIC_KEY);
if (!node)
{
log_error ("Oops; public key missing!\n");
+ err = gpg_error (GPG_ERR_INTERNAL);
goto leave;
}
- pksk = node->pkt->pkt.public_key;
+ pk = node->pkt->pkt.public_key;
+ keyid_from_pk (pk, keyid);
+ /* Check whether it is likely that we will be able to change the
+ passphrase for any subkey. */
for (any = 0, node = keyblock; node; node = node->next)
{
if (node->pkt->pkttype == PKT_PUBLIC_KEY
|| node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
{
- log_debug ("FIXME\n");
- /* PKT_public_key *tmpsk = node->pkt->pkt.public_key; */
- /* if (!(tmpsk->is_protected */
- /* && (tmpsk->protect.s2k.mode == 1001 */
- /* || tmpsk->protect.s2k.mode == 1002))) */
- /* { */
- /* any = 1; */
- /* break; */
- /* } */
+ char *serialno;
+
+ pk = node->pkt->pkt.public_key;
+ keyid_from_pk (pk, subid);
+
+ xfree (hexgrip);
+ err = hexkeygrip_from_pk (pk, &hexgrip);
+ if (err)
+ goto leave;
+ err = agent_get_keyinfo (ctrl, hexgrip, &serialno);
+ if (!err && serialno)
+ ; /* Key on card. */
+ else if (gpg_err_code (err) == GPG_ERR_NOT_FOUND)
+ ; /* Maybe stub key. */
+ else if (!err)
+ any = 1; /* Key is known. */
+ else
+ log_error ("key %s: error getting keyinfo from agent: %s\n",
+ keystr_with_sub (keyid, subid), gpg_strerror (err));
+ xfree (serialno);
}
}
+ err = 0;
if (!any)
{
tty_printf (_("Key has only stub or on-card key items - "
@@ -1169,162 +1189,43 @@ change_passphrase (KBNODE keyblock, int *r_err)
goto leave;
}
- log_debug ("FIXME\n");
- /* See how to handle this key. */
- /* switch (is_secret_key_protected (pksk)) */
- /* { */
- /* case -1: */
- /* rc = G10ERR_PUBKEY_ALGO; */
- /* break; */
- /* case 0: */
- /* tty_printf (_("This key is not protected.\n")); */
- /* break; */
- /* default: */
- /* if (sk->protect.s2k.mode == 1001) */
- /* { */
- /* tty_printf (_("Secret parts of key are not available.\n")); */
- /* no_primary_secrets = 1; */
- /* } */
- /* else if (sk->protect.s2k.mode == 1002) */
- /* { */
- /* tty_printf (_("Secret parts of key are stored on-card.\n")); */
- /* no_primary_secrets = 1; */
- /* } */
- /* else */
- /* { */
- /* u32 keyid[2]; */
-
- /* tty_printf (_("Key is protected.\n")); */
-
- /* /\* Clear the passphrase cache so that the user is required */
- /* to enter the old passphrase. *\/ */
- /* keyid_from_pk (pksk, keyid); */
- /* passphrase_clear_cache (keyid, NULL, 0); */
-
- /* /\* rc = check_secret_key( sk, 0 ); *\/ */
- /* /\* if( !rc ) *\/ */
- /* /\* passphrase = get_last_passphrase(); *\/ */
- /* } */
- /* break; */
- /* } */
-
- /* Unprotect all subkeys (use the supplied passphrase or ask) */
- for (node = keyblock; !rc && node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
- {
- log_debug ("FIXME\n");
- /* PKT_pubic_key *subsk = node->pkt->pkt.public_key; */
- /* if (!(subsk->is_protected */
- /* && (subsk->protect.s2k.mode == 1001 */
- /* || subsk->protect.s2k.mode == 1002))) */
- /* { */
- /* set_next_passphrase (passphrase); */
- /* /\* rc = check_secret_key( subsk, 0 ); *\/ */
- /* /\* if( !rc && !passphrase ) *\/ */
- /* /\* passphrase = get_last_passphrase(); *\/ */
- /* } */
- }
- }
-
- if (rc)
- tty_printf (_("Can't edit this key: %s\n"), g10_errstr (rc));
- else
+ /* Change the passphrase for all keys. */
+ for (any = 0, node = keyblock; node; node = node->next)
{
- DEK *dek = NULL;
- STRING2KEY *s2k = xmalloc_secure (sizeof *s2k);
- const char *errtext = NULL;
-
- tty_printf (_("Enter the new passphrase for this secret key.\n\n"));
-
- set_next_passphrase (NULL);
- for (;;)
- {
- int canceled;
-
- s2k->mode = opt.s2k_mode;
- s2k->hash_algo = S2K_DIGEST_ALGO;
- dek = passphrase_to_dek (NULL, 0, opt.s2k_cipher_algo,
- s2k, 2, errtext, &canceled);
- if (!dek && canceled)
- {
- rc = GPG_ERR_CANCELED;
- break;
- }
- else if (!dek)
- {
- errtext = N_("passphrase not correctly repeated; try again");
- tty_printf ("%s.\n", _(errtext));
- }
- else if (!dek->keylen)
- {
- rc = 0;
- tty_printf (_("You don't want a passphrase -"
- " this is probably a *bad* idea!\n\n"));
- if (cpr_get_answer_is_yes
- ("change_passwd.empty.okay",
- _("Do you really want to do this? (y/N) ")))
- {
- changed++;
- break;
- }
- }
- else
- { /* okay */
- rc = 0;
- if (!no_primary_secrets)
- {
- /* sk->protect.algo = dek->algo; */
- /* sk->protect.s2k = *s2k; */
- rc = 0;
- /* rc = protect_secret_key( sk, dek ); */
- }
- for (node = keyblock; !rc && node; node = node->next)
- {
- if (node->pkt->pkttype == PKT_SECRET_SUBKEY)
- {
- log_debug ("FIXME\n");
-/* PKT_secret_key *subsk = node->pkt->pkt.secret_key; */
-/* if (!(subsk->is_protected */
-/* && (subsk->protect.s2k.mode == 1001 */
-/* || subsk->protect.s2k.mode == 1002))) */
-/* { */
-/* subsk->protect.algo = dek->algo; */
-/* subsk->protect.s2k = *s2k; */
-/* #warning fixme */
-/* rc = 0; */
-/* /\* rc = protect_secret_key( subsk, dek ); *\/ */
-/* } */
- }
- }
- if (rc)
- log_error ("protect_secret_key failed: %s\n",
- g10_errstr (rc));
- else
- {
- u32 keyid[2];
+ if (node->pkt->pkttype == PKT_PUBLIC_KEY
+ || node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
+ {
+ char *desc;
- /* Clear the cahce again so that the user is
- required to enter the new passphrase at the
- next operation. */
- /* FIXME keyid_from_sk (sk, keyid); */
- passphrase_clear_cache (keyid, NULL, 0);
+ pk = node->pkt->pkt.public_key;
+ keyid_from_pk (pk, subid);
- changed++;
- }
- break;
- }
- }
- xfree (s2k);
- xfree (dek);
+ xfree (hexgrip);
+ err = hexkeygrip_from_pk (pk, &hexgrip);
+ if (err)
+ goto leave;
+
+ desc = gpg_format_keydesc (pk, 0, 1);
+ err = agent_passwd (ctrl, hexgrip, desc, &cache_nonce, &passwd_nonce);
+ xfree (desc);
+
+ if (err)
+ log_log ((gpg_err_code (err) == GPG_ERR_CANCELED
+ || gpg_err_code (err) == GPG_ERR_FULLY_CANCELED)
+ ? JNLIB_LOG_INFO : JNLIB_LOG_ERROR,
+ _("key %s: error changing passphrase: %s\n"),
+ keystr_with_sub (keyid, subid),
+ gpg_strerror (err));
+ if (gpg_err_code (err) == GPG_ERR_FULLY_CANCELED)
+ break;
+ }
}
-leave:
- xfree (passphrase);
- set_next_passphrase (NULL);
- if (r_err)
- *r_err = rc;
- return changed && !rc;
+ leave:
+ xfree (hexgrip);
+ xfree (cache_nonce);
+ xfree (passwd_nonce);
+ return err;
}
@@ -2184,7 +2085,7 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
break;
case cmdPASSWD:
- change_passphrase (keyblock, NULL);
+ change_passphrase (ctrl, keyblock);
break;
case cmdTRUST:
@@ -2361,13 +2262,10 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
/* Change the passphrase of the secret key identified by USERNAME. */
void
-keyedit_passwd (const char *username)
+keyedit_passwd (ctrl_t ctrl, const char *username)
{
gpg_error_t err;
PKT_public_key *pk;
- unsigned char fpr[MAX_FINGERPRINT_LEN];
- size_t fprlen;
- KEYDB_HANDLE kdh = NULL;
kbnode_t keyblock = NULL;
pk = xtrycalloc (1, sizeof *pk);
@@ -2376,44 +2274,16 @@ keyedit_passwd (const char *username)
err = gpg_error_from_syserror ();
goto leave;
}
- err = getkey_byname (NULL, pk, username, 1, NULL);
- if (err)
- goto leave;
- fingerprint_from_pk (pk, fpr, &fprlen);
- while (fprlen < MAX_FINGERPRINT_LEN)
- fpr[fprlen++] = 0;
-
- /* FIXME: Call an agent function instead. */
-
- kdh = NULL /*keydb_new (1)*/;
- if (!kdh)
- {
- err = gpg_error (GPG_ERR_GENERAL);
- goto leave;
- }
-
- err = keydb_search_fpr (kdh, fpr);
- if (err == -1 || gpg_err_code (err) == GPG_ERR_EOF)
- err = gpg_error (GPG_ERR_NO_SECKEY);
- if (err)
- goto leave;
-
- err = keydb_get_keyblock (kdh, &keyblock);
+ err = getkey_byname (NULL, pk, username, 1, &keyblock);
if (err)
goto leave;
- if (!change_passphrase (keyblock, &err))
- goto leave;
-
- err = keydb_update_keyblock (kdh, keyblock);
- if (err)
- log_error (_("update secret failed: %s\n"), gpg_strerror (err));
+ err = change_passphrase (ctrl, keyblock);
leave:
release_kbnode (keyblock);
if (pk)
free_public_key (pk);
- keydb_release (kdh);
if (err)
{
log_info ("error changing the passphrase for `%s': %s\n",
diff --git a/g10/main.h b/g10/main.h
index 3804effd3..b8ef34020 100644
--- a/g10/main.h
+++ b/g10/main.h
@@ -224,7 +224,7 @@ int delete_keys( strlist_t names, int secret, int allow_both );
/*-- keyedit.c --*/
void keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
strlist_t commands, int quiet, int seckey_check );
-void keyedit_passwd (const char *username);
+void keyedit_passwd (ctrl_t ctrl, const char *username);
void show_basic_key_info (KBNODE keyblock);
/*-- keygen.c --*/
diff --git a/g10/passphrase.c b/g10/passphrase.c
index b28477fd5..9f1218b6b 100644
--- a/g10/passphrase.c
+++ b/g10/passphrase.c
@@ -675,7 +675,7 @@ passphrase_to_dek (u32 *keyid, int pubkey_algo,
}
-/* Return an allocated utf-8 string describing the key PK. IF ESCAPED
+/* Return an allocated utf-8 string describing the key PK. If ESCAPED
is true spaces and control characters are percent or plus escaped.
MODE 0 is for the common prompt, MODE 1 for the import prompt. */
char *
@@ -696,9 +696,9 @@ gpg_format_keydesc (PKT_public_key *pk, int mode, int escaped)
orig_codeset = i18n_switchto_utf8 ();
- if (pk->main_keyid[2] && pk->main_keyid[3]
- && pk->keyid[0] != pk->main_keyid[2]
- && pk->keyid[1] != pk->main_keyid[3])
+ if (pk->main_keyid[0] && pk->main_keyid[1]
+ && pk->keyid[0] != pk->main_keyid[0]
+ && pk->keyid[1] != pk->main_keyid[1])
maink = xtryasprintf (_(" (main key ID %s)"), keystr (pk->main_keyid));
else
maink = NULL;
diff --git a/po/de.po b/po/de.po
index 94d09e2ae..6edad8f18 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnupg-2.1.0\n"
"Report-Msgid-Bugs-To: [email protected]\n"
-"POT-Creation-Date: 2010-10-21 10:11+0200\n"
-"PO-Revision-Date: 2010-10-21 10:10+0200\n"
+"POT-Creation-Date: 2010-10-26 10:57+0200\n"
+"PO-Revision-Date: 2010-10-26 10:58+0200\n"
"Last-Translator: Werner Koch <[email protected]>\n"
"Language-Team: German <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -130,7 +130,7 @@ msgstr "'%s' kann nicht erzeugt werden: %s\n"
#: g10/tdbdump.c:150 g10/tdbio.c:552 g10/tdbio.c:616 g10/verify.c:98
#: g10/verify.c:161 sm/gpgsm.c:2054 sm/gpgsm.c:2084 sm/gpgsm.c:2122
#: sm/qualified.c:66 dirmngr/certcache.c:359 dirmngr/crlcache.c:2380
-#: dirmngr/dirmngr.c:1456
+#: dirmngr/dirmngr.c:1458
#, c-format
msgid "can't open `%s': %s\n"
msgstr "'%s' kann nicht geöffnet werden: %s\n"
@@ -192,11 +192,11 @@ msgstr "Keine Übereinstimmung - bitte nochmal versuchen."
msgid "failed to create stream from socket: %s\n"
msgstr "Das Erzeugen eines Datenstroms aus dem Socket schlug fehl: %s\n"
-#: agent/divert-scd.c:92 g10/call-agent.c:879
+#: agent/divert-scd.c:92 g10/call-agent.c:886
msgid "Please insert the card with serial number"
msgstr "Die legen Sie die Karte mit der folgenden Seriennummer ein:"
-#: agent/divert-scd.c:93 g10/call-agent.c:880
+#: agent/divert-scd.c:93 g10/call-agent.c:887
msgid "Please remove the current card and insert the one with serial number"
msgstr ""
"Bitte entfernen Sie die vorhanden Karte und legen Sie die mit der folgenden "
@@ -336,7 +336,7 @@ msgstr "Ja, ein Schutz ist nicht notwendig"
msgid "Please enter the passphrase to%0Ato protect your new key"
msgstr "Bitte geben Sie die Passphrase ein,%0Aum Ihren Schlüssel zu schützen."
-#: agent/genkey.c:479
+#: agent/genkey.c:496
msgid "Please enter the new passphrase"
msgstr "Bitte geben Sie die Passphrase ein:"
@@ -489,7 +489,7 @@ msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n"
#: agent/gpg-agent.c:741 agent/gpg-agent.c:1343 g10/gpg.c:2125
#: scd/scdaemon.c:518 sm/gpgsm.c:1023 dirmngr/dirmngr.c:748
-#: dirmngr/dirmngr.c:1562 tools/symcryptrun.c:928
+#: dirmngr/dirmngr.c:1564 tools/symcryptrun.c:928
#, c-format
msgid "option file `%s': %s\n"
msgstr "Optionendatei '%s': %s\n"
@@ -512,11 +512,11 @@ msgstr "Fehler beim Erstellen von `%s': %s\n"
msgid "can't create directory `%s': %s\n"
msgstr "Verzeichnis `%s' kann nicht erzeugt werden: %s\n"
-#: agent/gpg-agent.c:1470 scd/scdaemon.c:1043 dirmngr/dirmngr.c:954
+#: agent/gpg-agent.c:1470 scd/scdaemon.c:1043 dirmngr/dirmngr.c:956
msgid "name of socket too long\n"
msgstr "Der Name des Sockets ist zu lang\n"
-#: agent/gpg-agent.c:1493 scd/scdaemon.c:1066 dirmngr/dirmngr.c:961
+#: agent/gpg-agent.c:1493 scd/scdaemon.c:1066 dirmngr/dirmngr.c:963
#, c-format
msgid "can't create socket: %s\n"
msgstr "Socket kann nicht erzeugt werden: %s\n"
@@ -530,21 +530,21 @@ msgstr "Der Name des Sockets `%s' ist zu lang\n"
msgid "a gpg-agent is already running - not starting a new one\n"
msgstr "Ein gpg-agent läuft bereits - ein weiterer wird nicht gestartet\n"
-#: agent/gpg-agent.c:1541 scd/scdaemon.c:1085 dirmngr/dirmngr.c:985
+#: agent/gpg-agent.c:1541 scd/scdaemon.c:1085 dirmngr/dirmngr.c:987
msgid "error getting nonce for the socket\n"
msgstr "Fehler beim Ermitteln der \"Nonce\" dieses Sockets\n"
-#: agent/gpg-agent.c:1546 scd/scdaemon.c:1088 dirmngr/dirmngr.c:988
+#: agent/gpg-agent.c:1546 scd/scdaemon.c:1088 dirmngr/dirmngr.c:990
#, c-format
msgid "error binding socket to `%s': %s\n"
msgstr "Der Socket kann nicht an `%s' gebunden werden: %s\n"
-#: agent/gpg-agent.c:1558 scd/scdaemon.c:1097 dirmngr/dirmngr.c:997
+#: agent/gpg-agent.c:1558 scd/scdaemon.c:1097 dirmngr/dirmngr.c:999
#, c-format
msgid "listen() failed: %s\n"
msgstr "Der listen()-Aufruf ist fehlgeschlagen: %s\n"
-#: agent/gpg-agent.c:1564 scd/scdaemon.c:1104 dirmngr/dirmngr.c:1003
+#: agent/gpg-agent.c:1564 scd/scdaemon.c:1104 dirmngr/dirmngr.c:1005
#, c-format
msgid "listening on socket `%s'\n"
msgstr "Es wird auf Socket `%s' gehört\n"
@@ -564,7 +564,7 @@ msgstr "stat()-Aufruf für `%s' fehlgeschlagen: %s\n"
msgid "can't use `%s' as home directory\n"
msgstr "Die Datei `%s' kann nicht als Home-Verzeichnis benutzt werden\n"
-#: agent/gpg-agent.c:1769 scd/scdaemon.c:1120 dirmngr/dirmngr.c:1679
+#: agent/gpg-agent.c:1769 scd/scdaemon.c:1120 dirmngr/dirmngr.c:1681
#, c-format
msgid "error reading nonce on fd %d: %s\n"
msgstr "Fehler beim Lesen der \"Nonce\" von FD %d: %s\n"
@@ -695,7 +695,7 @@ msgstr "Vom Benutzer abgebrochen\n"
msgid "error while asking for the passphrase: %s\n"
msgstr "Fehler bei der Abfrage der Passphrase: %s\n"
-#: agent/trustlist.c:135 agent/trustlist.c:332 dirmngr/dirmngr.c:1364
+#: agent/trustlist.c:135 agent/trustlist.c:332 dirmngr/dirmngr.c:1366
#, c-format
msgid "error opening `%s': %s\n"
msgstr "Fehler beim Öffnen von `%s': %s\n"
@@ -829,7 +829,7 @@ msgid "a %zu bit hash is not valid for a %u bit %s key\n"
msgstr ""
"Ein %zu-Bit Hashverfahren ist für einen %u-Bit %s Schlüssel nicht möglich\n"
-#: agent/cvt-openpgp.c:216 g10/seckey-cert.c:56
+#: agent/cvt-openpgp.c:216 g10/seckey-cert.c:57
msgid "secret key parts are not available\n"
msgstr "Teile des geheimen Schlüssels sind nicht vorhanden\n"
@@ -861,7 +861,7 @@ msgid "error creating a stream for a pipe: %s\n"
msgstr "Fehler beim Erzeugen eines \"streams\" zu einer \"pipe\": %s\n"
#: common/exechelp-posix.c:399 common/exechelp-posix.c:465
-#: common/exechelp-posix.c:579 dirmngr/dirmngr.c:1017
+#: common/exechelp-posix.c:579 dirmngr/dirmngr.c:1019
#, c-format
msgid "error forking process: %s\n"
msgstr "Fehler beim \"Forken\" des Prozess: %s\n"
@@ -1274,7 +1274,7 @@ msgstr "Option \"%.50s\" ist mehrdeutig\n"
msgid "command \"%.50s\" is ambiguous\n"
msgstr "Befehl \"%.50s\" ist mehrdeutig\n"
-#: common/argparse.c:266 dirmngr/dirmngr.c:1035
+#: common/argparse.c:266 dirmngr/dirmngr.c:1037
msgid "out of core\n"
msgstr "Nicht genügend Speicher\n"
@@ -1468,7 +1468,7 @@ msgstr "OpenPGP Karte ist nicht vorhanden: %s\n"
msgid "OpenPGP card no. %s detected\n"
msgstr "OpenPGP Karte Nr. %s erkannt\n"
-#: g10/card-util.c:99 g10/card-util.c:1783 g10/delkey.c:114 g10/keyedit.c:1607
+#: g10/card-util.c:99 g10/card-util.c:1783 g10/delkey.c:114 g10/keyedit.c:1508
#: g10/keygen.c:2918 g10/revoke.c:216 g10/revoke.c:457
msgid "can't do this in batch mode\n"
msgstr "Dies kann im Batchmodus nicht durchgeführt werden.\n"
@@ -1481,8 +1481,8 @@ msgstr "Dieser Befehl ist nur für Karten ab Version 2 möglich.\n"
msgid "Reset Code not or not anymore available\n"
msgstr "Der Rückstellcode ist nicht vorhanden\n"
-#: g10/card-util.c:142 g10/card-util.c:1466 g10/keyedit.c:447
-#: g10/keyedit.c:467 g10/keyedit.c:481 g10/keygen.c:1489 g10/keygen.c:1570
+#: g10/card-util.c:142 g10/card-util.c:1466 g10/keyedit.c:448
+#: g10/keyedit.c:468 g10/keyedit.c:482 g10/keygen.c:1489 g10/keygen.c:1570
#: sm/certreqgen-ui.c:165 sm/certreqgen-ui.c:249 sm/certreqgen-ui.c:283
msgid "Your selection? "
msgstr "Ihre Auswahl? "
@@ -1553,7 +1553,7 @@ msgstr "Fehler beim Zuteilen genügenden Speichers: %s\n"
#: g10/card-util.c:812 g10/import.c:291 dirmngr/crlcache.c:649
#: dirmngr/crlcache.c:654 dirmngr/crlcache.c:908 dirmngr/crlcache.c:914
-#: dirmngr/dirmngr.c:1402
+#: dirmngr/dirmngr.c:1404
#, c-format
msgid "error reading `%s': %s\n"
msgstr "Fehler beim Lesen von `%s': %s\n"
@@ -1718,12 +1718,12 @@ msgstr " (2) Verschlüsselungs-Schlüssel\n"
msgid " (3) Authentication key\n"
msgstr " (3) Authentisierungs-Schlüssel\n"
-#: g10/card-util.c:1477 g10/keyedit.c:975 g10/keygen.c:1493 g10/keygen.c:1521
-#: g10/keygen.c:1623 g10/revoke.c:651
+#: g10/card-util.c:1477 g10/keyedit.c:976 g10/keygen.c:1493 g10/keygen.c:1521
+#: g10/keygen.c:1623 g10/revoke.c:655
msgid "Invalid selection.\n"
msgstr "Ungültige Auswahl.\n"
-#: g10/card-util.c:1692 g10/keyedit.c:1450
+#: g10/card-util.c:1692 g10/keyedit.c:1351
msgid "quit this menu"
msgstr "Menü verlassen"
@@ -1731,7 +1731,7 @@ msgstr "Menü verlassen"
msgid "show admin commands"
msgstr "Zeige Admin-Befehle"
-#: g10/card-util.c:1695 g10/keyedit.c:1453
+#: g10/card-util.c:1695 g10/keyedit.c:1354
msgid "show this help"
msgstr "Diese Hilfe zeigen"
@@ -1803,7 +1803,7 @@ msgstr "Admin-Befehle sind erlaubt\n"
msgid "Admin commands are not allowed\n"
msgstr "Admin-Befehle sind nicht erlaubt\n"
-#: g10/card-util.c:1998 g10/keyedit.c:2350
+#: g10/card-util.c:1998 g10/keyedit.c:2251
msgid "Invalid command (try \"help\")\n"
msgstr "Ungültiger Befehl (versuchen Sie's mal mit \"help\")\n"
@@ -1816,7 +1816,7 @@ msgstr "--output funktioniert nicht bei diesem Befehl\n"
msgid "can't open `%s'\n"
msgstr "'%s' kann nicht geöffnet werden\n"
-#: g10/delkey.c:73 g10/export.c:637 g10/keyedit.c:3514 g10/keyserver.c:1749
+#: g10/delkey.c:73 g10/export.c:637 g10/keyedit.c:3384 g10/keyserver.c:1749
#: g10/revoke.c:227
#, c-format
msgid "key \"%s\" not found: %s\n"
@@ -2323,7 +2323,7 @@ msgstr ""
msgid "Pubkey: "
msgstr "Öff. Schlüssel: "
-#: g10/gpg.c:866 g10/keyedit.c:2484
+#: g10/gpg.c:866 g10/keyedit.c:2354
msgid "Cipher: "
msgstr "Verschlü.: "
@@ -2331,7 +2331,7 @@ msgstr "Verschlü.: "
msgid "Hash: "
msgstr "Hash: "
-#: g10/gpg.c:880 g10/keyedit.c:2533
+#: g10/gpg.c:880 g10/keyedit.c:2403
msgid "Compression: "
msgstr "Komprimierung: "
@@ -2497,7 +2497,7 @@ msgstr "`%s' ist kein gültiges Signaturablaufdatum\n"
msgid "`%s' is not a valid character set\n"
msgstr "`%s' ist kein gültiger Zeichensatz\n"
-#: g10/gpg.c:2665 g10/gpg.c:2860 g10/keyedit.c:4110
+#: g10/gpg.c:2665 g10/gpg.c:2860 g10/keyedit.c:3980
msgid "could not parse keyserver URL\n"
msgstr "Schlüsselserver-URL konnte nicht analysiert werden\n"
@@ -2625,7 +2625,7 @@ msgstr "%s kann nicht zusammen mit %s verwendet werden!\n"
msgid "%s makes no sense with %s!\n"
msgstr "%s zusammen mit %s ist nicht sinnvoll!\n"
-#: g10/gpg.c:3085 sm/gpgsm.c:1469 dirmngr/dirmngr.c:863
+#: g10/gpg.c:3085 sm/gpgsm.c:1469 dirmngr/dirmngr.c:865
msgid "WARNING: running with faked system time: "
msgstr "WARNUNG: Ausführung mit gefälschter Systemzeit: "
@@ -3389,51 +3389,51 @@ msgstr "Schlüsselblockhilfsmittel`%s': %s\n"
msgid "failed to rebuild keyring cache: %s\n"
msgstr "Schlüsselbund-Cache konnte nicht neu erzeugt werden: %s\n"
-#: g10/keyedit.c:275
+#: g10/keyedit.c:276
msgid "[revocation]"
msgstr "[Widerruf]"
-#: g10/keyedit.c:275
+#: g10/keyedit.c:276
msgid "[self-signature]"
msgstr "[Eigenbeglaubigung]"
-#: g10/keyedit.c:363 g10/keylist.c:403
+#: g10/keyedit.c:364 g10/keylist.c:403
msgid "1 bad signature\n"
msgstr "1 falsche Beglaubigung\n"
-#: g10/keyedit.c:365 g10/keylist.c:405
+#: g10/keyedit.c:366 g10/keylist.c:405
#, c-format
msgid "%d bad signatures\n"
msgstr "%d falsche Beglaubigungen\n"
-#: g10/keyedit.c:367 g10/keylist.c:407
+#: g10/keyedit.c:368 g10/keylist.c:407
msgid "1 signature not checked due to a missing key\n"
msgstr "1 Beglaubigung wegen fehlendem Schlüssel nicht geprüft\n"
-#: g10/keyedit.c:369 g10/keylist.c:409
+#: g10/keyedit.c:370 g10/keylist.c:409
#, c-format
msgid "%d signatures not checked due to missing keys\n"
msgstr "%d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft\n"
-#: g10/keyedit.c:371 g10/keylist.c:412
+#: g10/keyedit.c:372 g10/keylist.c:412
msgid "1 signature not checked due to an error\n"
msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n"
-#: g10/keyedit.c:373 g10/keylist.c:414
+#: g10/keyedit.c:374 g10/keylist.c:414
#, c-format
msgid "%d signatures not checked due to errors\n"
msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n"
-#: g10/keyedit.c:375
+#: g10/keyedit.c:376
msgid "1 user ID without valid self-signature detected\n"
msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n"
-#: g10/keyedit.c:377
+#: g10/keyedit.c:378
#, c-format
msgid "%d user IDs without valid self-signatures detected\n"
msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n"
-#: g10/keyedit.c:437 g10/pkclist.c:273
+#: g10/keyedit.c:438 g10/pkclist.c:273
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
"keys\n"
@@ -3446,17 +3446,17 @@ msgstr ""
"unterschiedlichen Quellen ...)?\n"
"\n"
-#: g10/keyedit.c:441 g10/pkclist.c:285
+#: g10/keyedit.c:442 g10/pkclist.c:285
#, c-format
msgid " %d = I trust marginally\n"
msgstr " %d = Ich vertraue ihm marginal\n"
-#: g10/keyedit.c:442 g10/pkclist.c:287
+#: g10/keyedit.c:443 g10/pkclist.c:287
#, c-format
msgid " %d = I trust fully\n"
msgstr " %d = Ich vertraue ihm vollständig\n"
-#: g10/keyedit.c:460
+#: g10/keyedit.c:461
msgid ""
"Please enter the depth of this trust signature.\n"
"A depth greater than 1 allows the key you are signing to make\n"
@@ -3466,47 +3466,47 @@ msgstr ""
"Eine Tiefe größer 1 erlaubt dem zu signierenden Schlüssel\n"
"Trust-Signatures für Sie zu machen.\n"
-#: g10/keyedit.c:476
+#: g10/keyedit.c:477
msgid "Please enter a domain to restrict this signature, or enter for none.\n"
msgstr ""
"Geben Sie bitte eine Domain ein, um die Signatur einzuschränken\n"
"oder nur die Eingabetaste für keine Domain\n"
-#: g10/keyedit.c:622
+#: g10/keyedit.c:623
#, c-format
msgid "User ID \"%s\" is revoked."
msgstr "User-ID \"%s\" ist widerrufen."
-#: g10/keyedit.c:631 g10/keyedit.c:659 g10/keyedit.c:686 g10/keyedit.c:859
-#: g10/keyedit.c:924 g10/keyedit.c:1819
+#: g10/keyedit.c:632 g10/keyedit.c:660 g10/keyedit.c:687 g10/keyedit.c:860
+#: g10/keyedit.c:925 g10/keyedit.c:1720
msgid "Are you sure you still want to sign it? (y/N) "
msgstr "Wollen Sie ihn immer noch beglaubigen? (j/N) "
-#: g10/keyedit.c:645 g10/keyedit.c:673 g10/keyedit.c:700 g10/keyedit.c:865
-#: g10/keyedit.c:1824
+#: g10/keyedit.c:646 g10/keyedit.c:674 g10/keyedit.c:701 g10/keyedit.c:866
+#: g10/keyedit.c:1725
msgid " Unable to sign.\n"
msgstr " Beglaubigen ist nicht möglich.\n"
-#: g10/keyedit.c:650
+#: g10/keyedit.c:651
#, c-format
msgid "User ID \"%s\" is expired."
msgstr "User-ID \"%s\" ist abgelaufen."
-#: g10/keyedit.c:678
+#: g10/keyedit.c:679
#, c-format
msgid "User ID \"%s\" is not self-signed."
msgstr "User-ID \"%s\" ist nicht eigenbeglaubigt."
-#: g10/keyedit.c:706
+#: g10/keyedit.c:707
#, c-format
msgid "User ID \"%s\" is signable. "
msgstr "User-ID \"%s\" ist signierbar."
-#: g10/keyedit.c:708
+#: g10/keyedit.c:709
msgid "Sign it? (y/N) "
msgstr "Wirklich signieren? (j/N) "
-#: g10/keyedit.c:733
+#: g10/keyedit.c:734
#, c-format
msgid ""
"The self-signature on \"%s\"\n"
@@ -3515,11 +3515,11 @@ msgstr ""
"Die Eigenbeglaubigung von \"%s\"\n"
"ist eine PGP 2.x artige Signatur.\n"
-#: g10/keyedit.c:742
+#: g10/keyedit.c:743
msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
msgstr "Soll sie zu einer OpenPGP Eigenbeglaubigung geändert werden? (j/N) "
-#: g10/keyedit.c:756
+#: g10/keyedit.c:757
#, c-format
msgid ""
"Your current signature on \"%s\"\n"
@@ -3528,13 +3528,13 @@ msgstr ""
"Ihre derzeitige Beglaubigung von \"%s\"\n"
"ist abgelaufen.\n"
-#: g10/keyedit.c:761
+#: g10/keyedit.c:762
msgid "Do you want to issue a new signature to replace the expired one? (y/N) "
msgstr ""
"Soll eine neue Beglaubigung als Ersatz für die abgelaufene erstellt werden? "
"(J/n) "
-#: g10/keyedit.c:782
+#: g10/keyedit.c:783
#, c-format
msgid ""
"Your current signature on \"%s\"\n"
@@ -3543,55 +3543,55 @@ msgstr ""
"Die derzeitige Beglaubigung von \"%s\"\n"
"ist nur für diesen Rechner gültig.\n"
-#: g10/keyedit.c:787
+#: g10/keyedit.c:788
msgid "Do you want to promote it to a full exportable signature? (y/N) "
msgstr ""
"Soll sie zu einer voll exportierbaren Beglaubigung erhoben werden? (j/N) "
-#: g10/keyedit.c:807
+#: g10/keyedit.c:808
#, c-format
msgid "\"%s\" was already locally signed by key %s\n"
msgstr "\"%s\" wurde bereits durch Schlüssel %s lokal beglaubigt\n"
-#: g10/keyedit.c:810
+#: g10/keyedit.c:811
#, c-format
msgid "\"%s\" was already signed by key %s\n"
msgstr "\"%s\" wurde bereits durch Schlüssel %s beglaubigt\n"
-#: g10/keyedit.c:815
+#: g10/keyedit.c:816
msgid "Do you want to sign it again anyway? (y/N) "
msgstr "Wollen Sie ihn immer noch wieder beglaubigen? (j/N) "
-#: g10/keyedit.c:837
+#: g10/keyedit.c:838
#, c-format
msgid "Nothing to sign with key %s\n"
msgstr "Nichts zu beglaubigen für Schlüssel %s\n"
-#: g10/keyedit.c:853
+#: g10/keyedit.c:854
msgid "This key has expired!"
msgstr "Dieser Schlüssel ist verfallen!"
-#: g10/keyedit.c:871
+#: g10/keyedit.c:872
#, c-format
msgid "This key is due to expire on %s.\n"
msgstr "Dieser Schlüssel wird %s verfallen.\n"
-#: g10/keyedit.c:877
+#: g10/keyedit.c:878
msgid "Do you want your signature to expire at the same time? (Y/n) "
msgstr "Soll Ihre Beglaubigung zur selben Zeit verfallen? (J/n) "
-#: g10/keyedit.c:917
+#: g10/keyedit.c:918
msgid ""
"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
"mode.\n"
msgstr ""
"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln signiert werden\n"
-#: g10/keyedit.c:919
+#: g10/keyedit.c:920
msgid "This would make the key unusable in PGP 2.x.\n"
msgstr "Dies würde den Schlüssel für PGP 2.x unbrauchbar machen\n"
-#: g10/keyedit.c:944
+#: g10/keyedit.c:945
msgid ""
"How carefully have you verified the key you are about to sign actually "
"belongs\n"
@@ -3601,32 +3601,32 @@ msgstr ""
"wollen, wirklich der o.g. Person gehört?\n"
"Wenn Sie darauf keine Antwort wissen, geben Sie \"0\" ein.\n"
-#: g10/keyedit.c:949
+#: g10/keyedit.c:950
#, c-format
msgid " (0) I will not answer.%s\n"
msgstr " (0) Ich antworte nicht.%s\n"
-#: g10/keyedit.c:951
+#: g10/keyedit.c:952
#, c-format
msgid " (1) I have not checked at all.%s\n"
msgstr " (1) Ich habe es überhaupt nicht überprüft.%s\n"
-#: g10/keyedit.c:953
+#: g10/keyedit.c:954
#, c-format
msgid " (2) I have done casual checking.%s\n"
msgstr " (2) Ich habe es flüchtig überprüft.%s\n"
-#: g10/keyedit.c:955
+#: g10/keyedit.c:956
#, c-format
msgid " (3) I have done very careful checking.%s\n"
msgstr " (3) Ich habe es sehr sorgfältig überprüft.%s\n"
# translated by wk
-#: g10/keyedit.c:962
+#: g10/keyedit.c:963
msgid "Your selection? (enter `?' for more information): "
msgstr "Ihre Auswahl? ('?' für weitere Informationen): "
-#: g10/keyedit.c:986
+#: g10/keyedit.c:987
#, c-format
msgid ""
"Are you sure that you want to sign this key with your\n"
@@ -3635,259 +3635,235 @@ msgstr ""
"Sind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem\n"
"Schlüssel \"%s\" (%s) beglaubigen wollen\n"
-#: g10/keyedit.c:993
+#: g10/keyedit.c:994
msgid "This will be a self-signature.\n"
msgstr "Dies wird eine Eigenbeglaubigung sein.\n"
-#: g10/keyedit.c:998
+#: g10/keyedit.c:999
msgid "WARNING: the signature will not be marked as non-exportable.\n"
msgstr ""
"WARNUNG: Die Signatur wird nicht als nicht-exportierbar markiert werden.\n"
-#: g10/keyedit.c:1005
+#: g10/keyedit.c:1006
msgid "WARNING: the signature will not be marked as non-revocable.\n"
msgstr "WARNUNG: Die Signatur wird nicht als unwiderrufbar markiert werden.\n"
-#: g10/keyedit.c:1015
+#: g10/keyedit.c:1016
msgid "The signature will be marked as non-exportable.\n"
msgstr "Die Signatur wird als nicht-exportfähig markiert werden.\n"
-#: g10/keyedit.c:1022
+#: g10/keyedit.c:1023
msgid "The signature will be marked as non-revocable.\n"
msgstr "Die Signatur wird als unwiderrufbar markiert werden.\n"
-#: g10/keyedit.c:1029
+#: g10/keyedit.c:1030
msgid "I have not checked this key at all.\n"
msgstr "Ich habe diesen Schlüssel überhaupt nicht überprüft.\n"
-#: g10/keyedit.c:1034
+#: g10/keyedit.c:1035
msgid "I have checked this key casually.\n"
msgstr "Ich habe diesen Schlüssel flüchtig überprüft.\n"
-#: g10/keyedit.c:1039
+#: g10/keyedit.c:1040
msgid "I have checked this key very carefully.\n"
msgstr "Ich habe diesen Schlüssel sehr sorgfältig überprüft.\n"
-#: g10/keyedit.c:1049
+#: g10/keyedit.c:1050
msgid "Really sign? (y/N) "
msgstr "Wirklich signieren? (j/N) "
-#: g10/keyedit.c:1099 g10/keyedit.c:4894 g10/keyedit.c:4985 g10/keyedit.c:5047
-#: g10/keyedit.c:5108 g10/sign.c:334
+#: g10/keyedit.c:1100 g10/keyedit.c:4764 g10/keyedit.c:4855 g10/keyedit.c:4917
+#: g10/keyedit.c:4978 g10/sign.c:334
#, c-format
msgid "signing failed: %s\n"
msgstr "Beglaubigung fehlgeschlagen: %s\n"
-#: g10/keyedit.c:1167
+#: g10/keyedit.c:1187
msgid "Key has only stub or on-card key items - no passphrase to change.\n"
msgstr ""
"Der Schlüssel enthält nur \"stub\"- oder \"on-card\"-Schlüsselelemente- "
"keine Passphrase ist zu ändern.\n"
-#: g10/keyedit.c:1231
+#: g10/keyedit.c:1216
#, c-format
-msgid "Can't edit this key: %s\n"
-msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n"
+msgid "key %s: error changing passphrase: %s\n"
+msgstr "Schlüssel %s: Fehler beim Ändern der Passphrase: %s\n"
-#: g10/keyedit.c:1238
-msgid ""
-"Enter the new passphrase for this secret key.\n"
-"\n"
-msgstr ""
-"Geben Sie die neue Passphrase für diesen geheimen Schlüssel ein.\n"
-"\n"
-
-#: g10/keyedit.c:1256 g10/keygen.c:2150
-msgid "passphrase not correctly repeated; try again"
-msgstr "Passphrase wurde nicht richtig wiederholt; noch einmal versuchen"
-
-#: g10/keyedit.c:1262
-msgid ""
-"You don't want a passphrase - this is probably a *bad* idea!\n"
-"\n"
-msgstr ""
-"Sie wollen keine Passphrase - dies ist *nicht* zu empfehlen!\n"
-"\n"
-
-#: g10/keyedit.c:1266
-msgid "Do you really want to do this? (y/N) "
-msgstr "Möchten Sie dies wirklich tun? (j/N) "
-
-#: g10/keyedit.c:1362
+#: g10/keyedit.c:1263
msgid "moving a key signature to the correct place\n"
msgstr "schiebe eine Beglaubigung an die richtige Stelle\n"
-#: g10/keyedit.c:1452
+#: g10/keyedit.c:1353
msgid "save and quit"
msgstr "speichern und Menü verlassen"
-#: g10/keyedit.c:1455
+#: g10/keyedit.c:1356
msgid "show key fingerprint"
msgstr "Fingerabdruck des Schlüssels anzeigen"
-#: g10/keyedit.c:1456
+#: g10/keyedit.c:1357
msgid "list key and user IDs"
msgstr "Schlüssel und User-IDs auflisten"
-#: g10/keyedit.c:1458
+#: g10/keyedit.c:1359
msgid "select user ID N"
msgstr "User-ID N auswählen"
-#: g10/keyedit.c:1459
+#: g10/keyedit.c:1360
msgid "select subkey N"
msgstr "Unterschlüssel N auswählen"
-#: g10/keyedit.c:1460
+#: g10/keyedit.c:1361
msgid "check signatures"
msgstr "Signaturen prüfen"
-#: g10/keyedit.c:1465
+#: g10/keyedit.c:1366
msgid "sign selected user IDs [* see below for related commands]"
msgstr "die ausgewählten User-IDs beglaubigen [* für verwandte Befehle s.u.]"
-#: g10/keyedit.c:1470
+#: g10/keyedit.c:1371
msgid "sign selected user IDs locally"
msgstr "Die ausgewählte User-ID nur für diesen Rechner beglaubigen"
-#: g10/keyedit.c:1471
+#: g10/keyedit.c:1372
msgid "sign selected user IDs with a trust signature"
msgstr "Die ausgewählte User-ID mit einer \"Trust\"-Signatur beglaubigen"
-#: g10/keyedit.c:1473
+#: g10/keyedit.c:1374
msgid "sign selected user IDs with a non-revocable signature"
msgstr "die ausgewählten User-IDs unwiderrufbar beglaubigen"
-#: g10/keyedit.c:1475
+#: g10/keyedit.c:1376
msgid "add a user ID"
msgstr "Eine User-ID hinzufügen"
-#: g10/keyedit.c:1477
+#: g10/keyedit.c:1378
msgid "add a photo ID"
msgstr "Eine Foto-ID hinzufügen"
-#: g10/keyedit.c:1478
+#: g10/keyedit.c:1379
msgid "delete selected user IDs"
msgstr "ausgewählte User-IDs entfernen"
-#: g10/keyedit.c:1481
+#: g10/keyedit.c:1382
msgid "add a subkey"
msgstr "einen Unterschlüssel hinzufügen"
-#: g10/keyedit.c:1484
+#: g10/keyedit.c:1385
msgid "add a key to a smartcard"
msgstr "der Smartcard einen Schlüssel hinzufügen"
-#: g10/keyedit.c:1486
+#: g10/keyedit.c:1387
msgid "move a key to a smartcard"
msgstr "einen Schlüssel auf die Smartcard schieben"
-#: g10/keyedit.c:1488
+#: g10/keyedit.c:1389
msgid "move a backup key to a smartcard"
msgstr "eine Sicherungskopie des Schlüssels auf die Smartcard schieben"
-#: g10/keyedit.c:1491
+#: g10/keyedit.c:1392
msgid "delete selected subkeys"
msgstr "ausgewählte Unterschlüssel entfernen"
-#: g10/keyedit.c:1493
+#: g10/keyedit.c:1394
msgid "add a revocation key"
msgstr "Einen Widerrufschlüssel hinzufügen"
-#: g10/keyedit.c:1495
+#: g10/keyedit.c:1396
msgid "delete signatures from the selected user IDs"
msgstr "Beglaubigungen der ausgewählten User-IDs entfernen"
-#: g10/keyedit.c:1497
+#: g10/keyedit.c:1398
msgid "change the expiration date for the key or selected subkeys"
msgstr ""
"das Verfallsdatum des Schlüssel oder ausgewählter Unterschlüssels ändern"
-#: g10/keyedit.c:1499
+#: g10/keyedit.c:1400
msgid "flag the selected user ID as primary"
msgstr "User-ID als Haupt-User-ID kennzeichnen"
-#: g10/keyedit.c:1501
+#: g10/keyedit.c:1402
msgid "toggle between the secret and public key listings"
msgstr "Umschalten zwischen dem Auflisten geheimer und öffentlicher Schlüssel"
-#: g10/keyedit.c:1503
+#: g10/keyedit.c:1404
msgid "list preferences (expert)"
msgstr "Liste der Voreinstellungen (für Experten)"
-#: g10/keyedit.c:1504
+#: g10/keyedit.c:1405
msgid "list preferences (verbose)"
msgstr "Liste der Voreinstellungen (ausführlich)"
-#: g10/keyedit.c:1506
+#: g10/keyedit.c:1407
msgid "set preference list for the selected user IDs"
msgstr "ändern der Voreinstellungsliste der ausgewählten User-IDs"
-#: g10/keyedit.c:1509
+#: g10/keyedit.c:1410
msgid "set the preferred keyserver URL for the selected user IDs"
msgstr ""
"Setze die URL des bevorzugten Schlüsselservers für die ausgewählten User-IDs"
-#: g10/keyedit.c:1511
+#: g10/keyedit.c:1412
msgid "set a notation for the selected user IDs"
msgstr "Eine Notation für die ausgewählten User-IDs setzen"
-#: g10/keyedit.c:1513
+#: g10/keyedit.c:1414
msgid "change the passphrase"
msgstr "Die Passphrase ändern"
-#: g10/keyedit.c:1515
+#: g10/keyedit.c:1416
msgid "change the ownertrust"
msgstr "Den \"Owner trust\" ändern"
-#: g10/keyedit.c:1517
+#: g10/keyedit.c:1418
msgid "revoke signatures on the selected user IDs"
msgstr "Beglaubigungen der ausgewählten User-IDs widerrufen"
-#: g10/keyedit.c:1519
+#: g10/keyedit.c:1420
msgid "revoke selected user IDs"
msgstr "Ausgewählte User-ID widerrufen"
-#: g10/keyedit.c:1522
+#: g10/keyedit.c:1423
msgid "revoke key or selected subkeys"
msgstr "Schlüssel oder ausgewählten Unterschlüssel widerrufen"
-#: g10/keyedit.c:1523
+#: g10/keyedit.c:1424
msgid "enable key"
msgstr "Schlüssel anschalten"
-#: g10/keyedit.c:1524
+#: g10/keyedit.c:1425
msgid "disable key"
msgstr "Schlüssel abschalten"
-#: g10/keyedit.c:1525
+#: g10/keyedit.c:1426
msgid "show selected photo IDs"
msgstr "ausgewählte Foto-IDs anzeigen"
-#: g10/keyedit.c:1527
+#: g10/keyedit.c:1428
msgid "compact unusable user IDs and remove unusable signatures from key"
msgstr ""
"unbrauchbare User-IDs verkleinern und unbrauchbare Signaturen aus dem "
"Schlüssel entfernen"
-#: g10/keyedit.c:1529
+#: g10/keyedit.c:1430
msgid "compact unusable user IDs and remove all signatures from key"
msgstr ""
"unbrauchbare User-IDs verkleinern und alle Signaturen aus dem Schlüssel "
"entfernen"
-#: g10/keyedit.c:1643
+#: g10/keyedit.c:1544
msgid "Secret key is available.\n"
msgstr "Geheimer Schlüssel ist vorhanden.\n"
-#: g10/keyedit.c:1736
+#: g10/keyedit.c:1637
msgid "Need the secret key to do this.\n"
msgstr "Hierzu wird der geheime Schlüssel benötigt.\n"
-#: g10/keyedit.c:1743
+#: g10/keyedit.c:1644
msgid "Please use the command \"toggle\" first.\n"
msgstr "Bitte verwenden sie zunächst den Befehl \"toggle\"\n"
-#: g10/keyedit.c:1764
+#: g10/keyedit.c:1665
msgid ""
"* The `sign' command may be prefixed with an `l' for local signatures "
"(lsign),\n"
@@ -3900,243 +3876,238 @@ msgstr ""
"Signaturen\n"
" (\"nrsign\"), oder jede Kombination davon (\"ltsign\", \"tnrsign\", etc.).\n"
-#: g10/keyedit.c:1812
+#: g10/keyedit.c:1713
msgid "Key is revoked."
msgstr "Schlüssel wurde widerrufen."
-#: g10/keyedit.c:1831
+#: g10/keyedit.c:1732
msgid "Really sign all user IDs? (y/N) "
msgstr "Wirklich alle User-IDs beglaubigen? (j/N) "
-#: g10/keyedit.c:1838
+#: g10/keyedit.c:1739
msgid "Hint: Select the user IDs to sign\n"
msgstr "Tip: Wählen Sie die User-IDs, die beglaubigt werden sollen\n"
-#: g10/keyedit.c:1848
+#: g10/keyedit.c:1749
#, c-format
msgid "Unknown signature type `%s'\n"
msgstr "Unbekannter Signaturtyp `%s'\n"
-#: g10/keyedit.c:1873
+#: g10/keyedit.c:1774
#, c-format
msgid "This command is not allowed while in %s mode.\n"
msgstr "Dieser Befehl ist im %s-Modus nicht erlaubt.\n"
-#: g10/keyedit.c:1894 g10/keyedit.c:1914 g10/keyedit.c:2111
+#: g10/keyedit.c:1795 g10/keyedit.c:1815 g10/keyedit.c:2012
msgid "You must select at least one user ID.\n"
msgstr "Zumindestens eine User-ID muß ausgewählt werden.\n"
-#: g10/keyedit.c:1896
+#: g10/keyedit.c:1797
msgid "You can't delete the last user ID!\n"
msgstr "Die letzte User-ID kann nicht gelöscht werden!\n"
-#: g10/keyedit.c:1899
+#: g10/keyedit.c:1800
msgid "Really remove all selected user IDs? (y/N) "
msgstr "Möchten Sie alle ausgewählten User-IDs wirklich entfernen? (j/N) "
-#: g10/keyedit.c:1900
+#: g10/keyedit.c:1801
msgid "Really remove this user ID? (y/N) "
msgstr "Diese User-ID wirklich entfernen? (j/N) "
#. TRANSLATORS: Please take care: This is about
#. moving the key and not about removing it.
-#: g10/keyedit.c:1953
+#: g10/keyedit.c:1854
msgid "Really move the primary key? (y/N) "
msgstr "Den Hauptschlüssel wirklich verschieben? (j/N) "
-#: g10/keyedit.c:1965
+#: g10/keyedit.c:1866
msgid "You must select exactly one key.\n"
msgstr "Sie müssen genau einen Schlüssel auswählen.\n"
-#: g10/keyedit.c:1996
+#: g10/keyedit.c:1897
msgid "Command expects a filename argument\n"
msgstr "Befehl benötigt einen Dateinamen als Argument\n"
-#: g10/keyedit.c:2010
+#: g10/keyedit.c:1911
#, c-format
msgid "Can't open `%s': %s\n"
msgstr "'%s' kann nicht geöffnet werden: %s\n"
-#: g10/keyedit.c:2026
+#: g10/keyedit.c:1927
#, c-format
msgid "Error reading backup key from `%s': %s\n"
msgstr "Fehler beim Lesen der Sicherungskopie des Schlüssels von `%s': %s\n"
-#: g10/keyedit.c:2040
+#: g10/keyedit.c:1941
msgid "This key is not protected.\n"
msgstr "Dieser Schlüssel ist nicht geschützt.\n"
-#: g10/keyedit.c:2043
+#: g10/keyedit.c:1944
msgid "unknown key protection algorithm\n"
msgstr "Unbekanntes Schlüssel-Schutzverfahren\n"
-#: g10/keyedit.c:2047
+#: g10/keyedit.c:1948
msgid "Secret parts of key are not available.\n"
msgstr "Geheime Teile des Schlüssels sind nicht vorhanden\n"
-#: g10/keyedit.c:2050
+#: g10/keyedit.c:1951
msgid "Secret parts of key are stored on-card.\n"
msgstr "Geheime Teile des Schlüssels sind auf einer Karte gespeichert.\n"
-#: g10/keyedit.c:2075
+#: g10/keyedit.c:1976
msgid "You must select at least one key.\n"
msgstr "Zumindestens ein Schlüssel muß ausgewählt werden.\n"
-#: g10/keyedit.c:2078
+#: g10/keyedit.c:1979
msgid "Do you really want to delete the selected keys? (y/N) "
msgstr "Möchten Sie die ausgewählten Schlüssel wirklich entfernen? (j/N) "
-#: g10/keyedit.c:2080
+#: g10/keyedit.c:1981
msgid "Do you really want to delete this key? (y/N) "
msgstr "Möchten Sie diesen Schlüssel wirklich entfernen? (j/N) "
-#: g10/keyedit.c:2114
+#: g10/keyedit.c:2015
msgid "Really revoke all selected user IDs? (y/N) "
msgstr "Möchten Sie wirklich alle ausgewählten User-IDs widerrufen? (j/N) "
-#: g10/keyedit.c:2115
+#: g10/keyedit.c:2016
msgid "Really revoke this user ID? (y/N) "
msgstr "Diese User-ID wirklich widerrufen? (j/N) "
-#: g10/keyedit.c:2133
+#: g10/keyedit.c:2034
msgid "Do you really want to revoke the entire key? (y/N) "
msgstr "Möchten Sie diesen Schlüssel wirklich vollständig widerrufen? (j/N) "
-#: g10/keyedit.c:2144
+#: g10/keyedit.c:2045
msgid "Do you really want to revoke the selected subkeys? (y/N) "
msgstr ""
"Möchten Sie die ausgewählten Unterschlüssel wirklich widerrufen? (j/N) "
-#: g10/keyedit.c:2146
+#: g10/keyedit.c:2047
msgid "Do you really want to revoke this subkey? (y/N) "
msgstr "Möchten Sie diesen Schlüssel wirklich widerrufen? (j/N) "
-#: g10/keyedit.c:2193
+#: g10/keyedit.c:2094
msgid "Owner trust may not be set while using a user provided trust database\n"
msgstr ""
"\"Owner trust\" kann nicht gesetzt werden, wenn eine anwendereigene 'Trust'-"
"Datenbank benutzt wird\n"
-#: g10/keyedit.c:2237
+#: g10/keyedit.c:2138
msgid "Set preference list to:\n"
msgstr "Setze die Liste der Voreinstellungen auf:\n"
-#: g10/keyedit.c:2244
+#: g10/keyedit.c:2145
msgid "Really update the preferences for the selected user IDs? (y/N) "
msgstr ""
"Möchten Sie die Voreinstellungen der ausgewählten User-IDs wirklich ändern? "
"(j/N) "
-#: g10/keyedit.c:2246
+#: g10/keyedit.c:2147
msgid "Really update the preferences? (y/N) "
msgstr "Die Voreinstellungen wirklich ändern? (j/N) "
-#: g10/keyedit.c:2318
+#: g10/keyedit.c:2219
msgid "Save changes? (y/N) "
msgstr "Änderungen speichern? (j/N) "
-#: g10/keyedit.c:2322
+#: g10/keyedit.c:2223
msgid "Quit without saving? (y/N) "
msgstr "Beenden ohne zu speichern? (j/N) "
-#: g10/keyedit.c:2333
+#: g10/keyedit.c:2234
#, c-format
msgid "update failed: %s\n"
msgstr "Änderung fehlgeschlagen: %s\n"
-#: g10/keyedit.c:2338
+#: g10/keyedit.c:2239
msgid "Key not changed so no update needed.\n"
msgstr "Schlüssel ist nicht geändert worden, also ist kein Speichern nötig.\n"
-#: g10/keyedit.c:2410
-#, c-format
-msgid "update secret failed: %s\n"
-msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n"
-
-#: g10/keyedit.c:2509
+#: g10/keyedit.c:2379
msgid "Digest: "
msgstr "Digest: "
-#: g10/keyedit.c:2566
+#: g10/keyedit.c:2436
msgid "Features: "
msgstr "Eigenschaften: "
-#: g10/keyedit.c:2577
+#: g10/keyedit.c:2447
msgid "Keyserver no-modify"
msgstr "Keyserver no-modify"
-#: g10/keyedit.c:2592 g10/keylist.c:321
+#: g10/keyedit.c:2462 g10/keylist.c:321
msgid "Preferred keyserver: "
msgstr "Bevorzugter Schlüsselserver:"
-#: g10/keyedit.c:2600 g10/keyedit.c:2601
+#: g10/keyedit.c:2470 g10/keyedit.c:2471
msgid "Notations: "
msgstr "\"Notationen\": "
-#: g10/keyedit.c:2825
+#: g10/keyedit.c:2695
msgid "There are no preferences on a PGP 2.x-style user ID.\n"
msgstr "PGP 2.x-artige Schlüssel haben keine Voreinstellungen.\n"
-#: g10/keyedit.c:2888
+#: g10/keyedit.c:2758
#, c-format
msgid "The following key was revoked on %s by %s key %s\n"
msgstr "Der folgende Schlüssel wurde am %s von %s Schlüssel %s widerrufen\n"
-#: g10/keyedit.c:2911
+#: g10/keyedit.c:2781
#, c-format
msgid "This key may be revoked by %s key %s"
msgstr ""
"Dieser Schlüssel könnte durch %s mit Schlüssel %s widerrufen worden sein"
-#: g10/keyedit.c:2917
+#: g10/keyedit.c:2787
msgid "(sensitive)"
msgstr "(empfindlich)"
-#: g10/keyedit.c:2934 g10/keyedit.c:3047 g10/keyserver.c:533
+#: g10/keyedit.c:2804 g10/keyedit.c:2917 g10/keyserver.c:533
#, c-format
msgid "created: %s"
msgstr "erzeugt: %s"
-#: g10/keyedit.c:2937 g10/keylist.c:811 g10/keylist.c:934 g10/mainproc.c:1008
+#: g10/keyedit.c:2807 g10/keylist.c:811 g10/keylist.c:934 g10/mainproc.c:1008
#, c-format
msgid "revoked: %s"
msgstr "widerrufen: %s"
-#: g10/keyedit.c:2939 g10/keylist.c:817 g10/keylist.c:940
+#: g10/keyedit.c:2809 g10/keylist.c:817 g10/keylist.c:940
#, c-format
msgid "expired: %s"
msgstr "verfallen: %s"
-#: g10/keyedit.c:2941 g10/keyedit.c:3049 g10/keylist.c:823 g10/keylist.c:946
+#: g10/keyedit.c:2811 g10/keyedit.c:2919 g10/keylist.c:823 g10/keylist.c:946
#: g10/keyserver.c:539 g10/mainproc.c:1014
#, c-format
msgid "expires: %s"
msgstr "verfällt: %s"
-#: g10/keyedit.c:2943
+#: g10/keyedit.c:2813
#, c-format
msgid "usage: %s"
msgstr "Aufruf: %s"
-#: g10/keyedit.c:2951
+#: g10/keyedit.c:2821
msgid "card-no: "
msgstr "Kartennummer:"
-#: g10/keyedit.c:2987
+#: g10/keyedit.c:2857
#, c-format
msgid "trust: %s"
msgstr "Vertrauen: %s"
-#: g10/keyedit.c:2991
+#: g10/keyedit.c:2861
#, c-format
msgid "validity: %s"
msgstr "Gültigkeit: %s"
-#: g10/keyedit.c:2998
+#: g10/keyedit.c:2868
msgid "This key has been disabled"
msgstr "Hinweis: Dieser Schlüssel ist abgeschaltet"
-#: g10/keyedit.c:3015
+#: g10/keyedit.c:2885
msgid ""
"Please note that the shown key validity is not necessarily correct\n"
"unless you restart the program.\n"
@@ -4144,19 +4115,19 @@ msgstr ""
"Bitte beachten Sie, daß ohne einen Programmneustart die angezeigte\n"
"Schlüsselgültigkeit nicht notwendigerweise korrekt ist.\n"
-#: g10/keyedit.c:3066 g10/keyedit.c:3378 g10/keyserver.c:543
+#: g10/keyedit.c:2936 g10/keyedit.c:3248 g10/keyserver.c:543
#: g10/mainproc.c:1874 g10/trustdb.c:1202 g10/trustdb.c:1731
#: dirmngr/ocsp.c:699
msgid "revoked"
msgstr "widerrufen"
-#: g10/keyedit.c:3068 g10/keyedit.c:3380 g10/keyserver.c:547
+#: g10/keyedit.c:2938 g10/keyedit.c:3250 g10/keyserver.c:547
#: g10/mainproc.c:1876 g10/trustdb.c:549 g10/trustdb.c:1733
msgid "expired"
msgstr "verfallen"
# translated by wk
-#: g10/keyedit.c:3133
+#: g10/keyedit.c:3003
msgid ""
"WARNING: no user ID has been marked as primary. This command may\n"
" cause a different user ID to become the assumed primary.\n"
@@ -4164,7 +4135,7 @@ msgstr ""
"WARNUNG: Keine User-ID ist als primär markiert. Dieser Befehl kann\n"
"dazu führen, daß eine andere User-ID als primär angesehen wird.\n"
-#: g10/keyedit.c:3186
+#: g10/keyedit.c:3056
msgid ""
"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
"versions\n"
@@ -4174,74 +4145,74 @@ msgstr ""
"könnte\n"
" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n"
-#: g10/keyedit.c:3191 g10/keyedit.c:3475
+#: g10/keyedit.c:3061 g10/keyedit.c:3345
msgid "Are you sure you still want to add it? (y/N) "
msgstr "Wollen Sie ihn immer noch hinzufügen? (j/N) "
-#: g10/keyedit.c:3197
+#: g10/keyedit.c:3067
msgid "You may not add a photo ID to a PGP2-style key.\n"
msgstr "Sie können einem PGP2-artigen Schlüssel keine Foto-ID hinzufügen.\n"
-#: g10/keyedit.c:3306
+#: g10/keyedit.c:3176
msgid "Delete this good signature? (y/N/q)"
msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)"
-#: g10/keyedit.c:3316
+#: g10/keyedit.c:3186
msgid "Delete this invalid signature? (y/N/q)"
msgstr "Diese ungültige Beglaubigung entfernen= (j/N/q)"
-#: g10/keyedit.c:3320
+#: g10/keyedit.c:3190
msgid "Delete this unknown signature? (y/N/q)"
msgstr "Diese unbekannte Beglaubigung entfernen? (j/N/q)"
-#: g10/keyedit.c:3327
+#: g10/keyedit.c:3197
msgid "Really delete this self-signature? (y/N)"
msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)"
-#: g10/keyedit.c:3343
+#: g10/keyedit.c:3213
#, c-format
msgid "Deleted %d signature.\n"
msgstr "%d Beglaubigungen entfernt.\n"
-#: g10/keyedit.c:3344
+#: g10/keyedit.c:3214
#, c-format
msgid "Deleted %d signatures.\n"
msgstr "%d Beglaubigungen entfernt.\n"
-#: g10/keyedit.c:3347
+#: g10/keyedit.c:3217
msgid "Nothing deleted.\n"
msgstr "Nichts entfernt.\n"
-#: g10/keyedit.c:3382 g10/trustdb.c:1735
+#: g10/keyedit.c:3252 g10/trustdb.c:1735
msgid "invalid"
msgstr "ungültig"
-#: g10/keyedit.c:3384
+#: g10/keyedit.c:3254
#, c-format
msgid "User ID \"%s\" compacted: %s\n"
msgstr "User-ID \"%s\" bereits verkleinert: %s\n"
-#: g10/keyedit.c:3391
+#: g10/keyedit.c:3261
#, c-format
msgid "User ID \"%s\": %d signature removed\n"
msgstr "User-ID \"%s\": %d Signatur entfernt\n"
-#: g10/keyedit.c:3392
+#: g10/keyedit.c:3262
#, c-format
msgid "User ID \"%s\": %d signatures removed\n"
msgstr "User-ID \"%s\": %d Signaturen entfernt\n"
-#: g10/keyedit.c:3400
+#: g10/keyedit.c:3270
#, c-format
msgid "User ID \"%s\": already minimized\n"
msgstr "User-ID \"%s\": bereits minimiert\n"
-#: g10/keyedit.c:3401
+#: g10/keyedit.c:3271
#, c-format
msgid "User ID \"%s\": already clean\n"
msgstr "User-ID \"%s\": bereits sauber\n"
-#: g10/keyedit.c:3470
+#: g10/keyedit.c:3340
msgid ""
"WARNING: This is a PGP 2.x-style key. Adding a designated revoker may "
"cause\n"
@@ -4251,194 +4222,194 @@ msgstr ""
" Widerrufers könnte bei einigen PGP-Versionen zur Zurückweisung\n"
" des Schlüssels führen.\n"
-#: g10/keyedit.c:3481
+#: g10/keyedit.c:3351
msgid "You may not add a designated revoker to a PGP 2.x-style key.\n"
msgstr ""
"Sie können einem PGP2-artigen Schlüssel keine vorgesehenen Widerrufer "
"hinzufügen.\n"
-#: g10/keyedit.c:3500
+#: g10/keyedit.c:3370
msgid "Enter the user ID of the designated revoker: "
msgstr "Geben sie die User-ID des designierten Widerrufers ein: "
-#: g10/keyedit.c:3525
+#: g10/keyedit.c:3395
msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
msgstr ""
"Ein PGP 2.x-artiger Schlüssel kann nicht als vorgesehener Widerrufer "
"eingetragen werden\n"
-#: g10/keyedit.c:3540
+#: g10/keyedit.c:3410
msgid "you cannot appoint a key as its own designated revoker\n"
msgstr "Ein Schlüssel kann nicht sein eigener vorgesehener Widerrufer werden\n"
-#: g10/keyedit.c:3562
+#: g10/keyedit.c:3432
msgid "this key has already been designated as a revoker\n"
msgstr "Dieser Schlüssel wurde bereits als ein Widerrufer vorgesehen\n"
-#: g10/keyedit.c:3581
+#: g10/keyedit.c:3451
msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n"
msgstr ""
"WARNUNG: Einen Schlüssel als vorgesehenen Widerrufer zu deklarieren, kann "
"nicht rückgangig gemacht werden!\n"
-#: g10/keyedit.c:3587
+#: g10/keyedit.c:3457
msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr ""
"Möchten Sie diesen Schlüssel wirklich als vorgesehenen Widerrufer festlegen? "
"(j/N): "
-#: g10/keyedit.c:3638
+#: g10/keyedit.c:3508
msgid "Please select at most one subkey.\n"
msgstr "Bitte wählen Sie höchstens einen Unterschlüssel aus.\n"
-#: g10/keyedit.c:3642
+#: g10/keyedit.c:3512
msgid "Changing expiration time for a subkey.\n"
msgstr "Ändern des Verfallsdatums des Unterschlüssels.\n"
-#: g10/keyedit.c:3645
+#: g10/keyedit.c:3515
msgid "Changing expiration time for the primary key.\n"
msgstr "Ändern des Verfallsdatums des Hauptschlüssels.\n"
-#: g10/keyedit.c:3692
+#: g10/keyedit.c:3562
msgid "You can't change the expiration date of a v3 key\n"
msgstr "Sie können das Verfallsdatum eines v3-Schlüssels nicht ändern\n"
-#: g10/keyedit.c:3759
+#: g10/keyedit.c:3629
#, c-format
msgid "signing subkey %s is already cross-certified\n"
msgstr "Signaturunterschlüssel %s ist bereits rücksigniert\n"
-#: g10/keyedit.c:3765
+#: g10/keyedit.c:3635
#, c-format
msgid "subkey %s does not sign and so does not need to be cross-certified\n"
msgstr ""
"Unterschlüssel %s ist des Signieren nicht mächtig und braucht deshalb keine "
"Rücksignatur\n"
-#: g10/keyedit.c:3880
+#: g10/keyedit.c:3750
msgid "Please select exactly one user ID.\n"
msgstr "Bitte genau eine User-ID auswählen.\n"
-#: g10/keyedit.c:3921 g10/keyedit.c:4035 g10/keyedit.c:4148 g10/keyedit.c:4285
+#: g10/keyedit.c:3791 g10/keyedit.c:3905 g10/keyedit.c:4018 g10/keyedit.c:4155
#, c-format
msgid "skipping v3 self-signature on user ID \"%s\"\n"
msgstr "Überspringen der v3 Eigenbeglaubigung von User-ID \"%s\"\n"
-#: g10/keyedit.c:4092
+#: g10/keyedit.c:3962
msgid "Enter your preferred keyserver URL: "
msgstr "Geben Sie die URL Ihres bevorzugten Schlüsselservers ein: "
-#: g10/keyedit.c:4171
+#: g10/keyedit.c:4041
msgid "Are you sure you want to replace it? (y/N) "
msgstr "Wollen Sie ihn wirklich ersetzen? (j/N) "
-#: g10/keyedit.c:4172
+#: g10/keyedit.c:4042
msgid "Are you sure you want to delete it? (y/N) "
msgstr "Wollen Sie ihn wirklich löschen? (j/N) "
-#: g10/keyedit.c:4231
+#: g10/keyedit.c:4101
msgid "Enter the notation: "
msgstr "Geben Sie die \"Notation\" ein: "
-#: g10/keyedit.c:4378
+#: g10/keyedit.c:4248
msgid "Proceed? (y/N) "
msgstr "Fortfahren (j/N)? "
-#: g10/keyedit.c:4448
+#: g10/keyedit.c:4318
#, c-format
msgid "No user ID with index %d\n"
msgstr "Keine User-ID mit Index %d\n"
-#: g10/keyedit.c:4510
+#: g10/keyedit.c:4380
#, c-format
msgid "No user ID with hash %s\n"
msgstr "Keine User-ID mit Hash %s\n"
-#: g10/keyedit.c:4546
+#: g10/keyedit.c:4416
#, c-format
msgid "No subkey with index %d\n"
msgstr "Kein Unterschlüssel mit Index %d\n"
-#: g10/keyedit.c:4687
+#: g10/keyedit.c:4557
#, c-format
msgid "user ID: \"%s\"\n"
msgstr "User-ID: \"%s\"\n"
-#: g10/keyedit.c:4690 g10/keyedit.c:4792 g10/keyedit.c:4840
+#: g10/keyedit.c:4560 g10/keyedit.c:4662 g10/keyedit.c:4710
#, c-format
msgid "signed by your key %s on %s%s%s\n"
msgstr " beglaubigt durch Ihren Schlüssel %s am %s%s%s\n"
-#: g10/keyedit.c:4692 g10/keyedit.c:4794 g10/keyedit.c:4842
+#: g10/keyedit.c:4562 g10/keyedit.c:4664 g10/keyedit.c:4712
msgid " (non-exportable)"
msgstr " (nicht-exportierbar)"
-#: g10/keyedit.c:4696
+#: g10/keyedit.c:4566
#, c-format
msgid "This signature expired on %s.\n"
msgstr "Diese Signatur ist seit %s verfallen.\n"
-#: g10/keyedit.c:4701
+#: g10/keyedit.c:4571
msgid "Are you sure you still want to revoke it? (y/N) "
msgstr "Wollen Sie ihn immer noch widerrufen? (j/N) "
-#: g10/keyedit.c:4706
+#: g10/keyedit.c:4576
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Ein Widerrufszertifikat für diese Signatur erzeugen (j/N)"
-#: g10/keyedit.c:4760
+#: g10/keyedit.c:4630
msgid "Not signed by you.\n"
msgstr "Nicht von Ihnen signiert.\n"
-#: g10/keyedit.c:4766
+#: g10/keyedit.c:4636
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Sie haben folgende User-IDs des Schlüssels %s beglaubigt:\n"
-#: g10/keyedit.c:4795
+#: g10/keyedit.c:4665
msgid " (non-revocable)"
msgstr " (unwiderrufbar)"
-#: g10/keyedit.c:4802
+#: g10/keyedit.c:4672
#, c-format
msgid "revoked by your key %s on %s\n"
msgstr "widerrufen durch Ihren Schlüssel %s um %s\n"
-#: g10/keyedit.c:4827
+#: g10/keyedit.c:4697
msgid "You are about to revoke these signatures:\n"
msgstr "Es werden nun folgende Beglaubigungen entfernt:\n"
-#: g10/keyedit.c:4850
+#: g10/keyedit.c:4720
msgid "Really create the revocation certificates? (y/N) "
msgstr "Wirklich ein Signatur-Widerrufszertifikat erzeugen? (j/N) "
-#: g10/keyedit.c:4883
+#: g10/keyedit.c:4753
msgid "no secret key\n"
msgstr "Kein geheimer Schlüssel\n"
-#: g10/keyedit.c:4951
+#: g10/keyedit.c:4821
#, c-format
msgid "user ID \"%s\" is already revoked\n"
msgstr "User-ID \"%s\" ist bereits widerrufen\n"
-#: g10/keyedit.c:4968
+#: g10/keyedit.c:4838
#, c-format
msgid "WARNING: a user ID signature is dated %d seconds in the future\n"
msgstr ""
"WARNUNG: Eine User-ID-Signatur datiert mit %d Sekunden aus der Zukunft\n"
-#: g10/keyedit.c:5033
+#: g10/keyedit.c:4903
#, c-format
msgid "Key %s is already revoked.\n"
msgstr "Schlüssel %s ist bereits widerrufen\n"
-#: g10/keyedit.c:5094
+#: g10/keyedit.c:4964
#, c-format
msgid "Subkey %s is already revoked.\n"
msgstr "Unterschlüssel %s ist bereits widerrufen\n"
-#: g10/keyedit.c:5188
+#: g10/keyedit.c:5058
#, c-format
msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n"
msgstr "Anzeigen einer %s Foto-ID (Größe %ld) für Schlüssel %s (User-ID %d)\n"
@@ -4823,6 +4794,10 @@ msgstr ""
"Bitte geben Sie die Passphrase ein, um die Sicherheitskopie des neuen "
"Verschlüsselungsschlüssel der Karte zu schützen."
+#: g10/keygen.c:2150
+msgid "passphrase not correctly repeated; try again"
+msgstr "Passphrase wurde nicht richtig wiederholt; noch einmal versuchen"
+
#: g10/keygen.c:2151
#, c-format
msgid "%s.\n"
@@ -5691,23 +5666,23 @@ msgstr "Ist dieses Bild richtig? (j/N) "
msgid "unable to display photo ID!\n"
msgstr "Die Foto-ID kann nicht angezeigt werden!\n"
-#: g10/pkclist.c:72 g10/revoke.c:589
+#: g10/pkclist.c:72 g10/revoke.c:593
msgid "No reason specified"
msgstr "Kein Grund angegeben"
-#: g10/pkclist.c:74 g10/revoke.c:591
+#: g10/pkclist.c:74 g10/revoke.c:595
msgid "Key is superseded"
msgstr "Schlüssel ist überholt"
-#: g10/pkclist.c:76 g10/revoke.c:590
+#: g10/pkclist.c:76 g10/revoke.c:594
msgid "Key has been compromised"
msgstr "Hinweis: Dieser Schlüssel ist nicht mehr sicher"
-#: g10/pkclist.c:78 g10/revoke.c:592
+#: g10/pkclist.c:78 g10/revoke.c:596
msgid "Key is no longer used"
msgstr "Schlüssel wird nicht mehr benutzt"
-#: g10/pkclist.c:80 g10/revoke.c:593
+#: g10/pkclist.c:80 g10/revoke.c:597
msgid "User ID is no longer valid"
msgstr "User-ID ist nicht mehr gültig"
@@ -5773,7 +5748,7 @@ msgid ""
"\n"
msgstr "Die minimale Trust-Ebene für diesen Schlüssel beträgt: %s\n"
-#: g10/pkclist.c:309 g10/revoke.c:618
+#: g10/pkclist.c:309 g10/revoke.c:622
msgid "Your decision? "
msgstr "Ihre Auswahl? "
@@ -6043,7 +6018,7 @@ msgid "NOTE: key has been revoked"
msgstr "Hinweis: Schlüssel wurde widerrufen"
#: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174
-#: g10/revoke.c:186 g10/revoke.c:553
+#: g10/revoke.c:186 g10/revoke.c:557
#, c-format
msgid "build_packet failed: %s\n"
msgstr "\"build_packet\" fehlgeschlagen: %s\n"
@@ -6066,11 +6041,11 @@ msgid "Create a designated revocation certificate for this key? (y/N) "
msgstr ""
"Ein vorgesehenes Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) "
-#: g10/revoke.c:329 g10/revoke.c:517
+#: g10/revoke.c:329 g10/revoke.c:521
msgid "ASCII armored output forced.\n"
msgstr "Ausgabe mit ASCII Hülle erzwungen\n"
-#: g10/revoke.c:345 g10/revoke.c:532
+#: g10/revoke.c:345 g10/revoke.c:536
#, c-format
msgid "make_keysig_packet failed: %s\n"
msgstr "\"make_keysig_packet\" fehlgeschlagen: %s\n"
@@ -6084,17 +6059,17 @@ msgstr "Widerrufzertifikat erzeugt.\n"
msgid "no revocation keys found for \"%s\"\n"
msgstr "keine Widerrufsschlüssel für \"%s\" gefunden\n"
-#: g10/revoke.c:472
+#: g10/revoke.c:471 g10/revoke.c:492
#, c-format
msgid "secret key \"%s\" not found: %s\n"
msgstr "Geheimer Schlüssel \"%s\" nicht gefunden: %s\n"
-#: g10/revoke.c:498
+#: g10/revoke.c:502
msgid "Create a revocation certificate for this key? (y/N) "
msgstr "Ein Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) "
# translated by wk
-#: g10/revoke.c:560
+#: g10/revoke.c:564
msgid ""
"Revocation certificate created.\n"
"\n"
@@ -6114,43 +6089,43 @@ msgstr ""
"Drucksystem kann unter Umständen eine Kopie anderen Nutzern zugänglich\n"
"machen.\n"
-#: g10/revoke.c:601
+#: g10/revoke.c:605
msgid "Please select the reason for the revocation:\n"
msgstr "Grund für den Widerruf:\n"
-#: g10/revoke.c:611
+#: g10/revoke.c:615
msgid "Cancel"
msgstr "Abbruch"
-#: g10/revoke.c:613
+#: g10/revoke.c:617
#, c-format
msgid "(Probably you want to select %d here)\n"
msgstr "(Wahrscheinlich möchten Sie hier %d auswählen)\n"
-#: g10/revoke.c:654
+#: g10/revoke.c:658
msgid "Enter an optional description; end it with an empty line:\n"
msgstr ""
"Geben Sie eine optionale Beschreibung ein. Beenden mit einer leeren Zeile:\n"
-#: g10/revoke.c:682
+#: g10/revoke.c:686
#, c-format
msgid "Reason for revocation: %s\n"
msgstr "Grund für Widerruf: %s\n"
-#: g10/revoke.c:684
+#: g10/revoke.c:688
msgid "(No description given)\n"
msgstr "(Keine Beschreibung angegeben)\n"
-#: g10/revoke.c:689
+#: g10/revoke.c:693
msgid "Is this okay? (y/N) "
msgstr "Ist das OK? (j/N) "
-#: g10/seckey-cert.c:62
+#: g10/seckey-cert.c:63
#, c-format
msgid "protection algorithm %d%s is not supported\n"
msgstr "Schutzverfahren %d%s wird nicht unterstützt\n"
-#: g10/seckey-cert.c:73
+#: g10/seckey-cert.c:74
#, c-format
msgid "protection digest %d is not supported\n"
msgstr "Hashschutzverfahren %d wird nicht unterstützt\n"
@@ -7074,12 +7049,12 @@ msgstr ""
"Bitte die Option `--daemon' nutzen, um das Programm im Hintergund "
"auszuführen\n"
-#: scd/scdaemon.c:1129 dirmngr/dirmngr.c:1708
+#: scd/scdaemon.c:1129 dirmngr/dirmngr.c:1710
#, c-format
msgid "handler for fd %d started\n"
msgstr "Handhabungsroutine für fd %d gestartet\n"
-#: scd/scdaemon.c:1141 dirmngr/dirmngr.c:1713
+#: scd/scdaemon.c:1141 dirmngr/dirmngr.c:1715
#, c-format
msgid "handler for fd %d terminated\n"
msgstr "Handhabungsroutine für den fd %d beendet\n"
@@ -8934,78 +8909,78 @@ msgstr "Gültige Debugebenen sind: %s\n"
msgid "usage: dirmngr [options] "
msgstr "Gebrauch: dirmngr [Optionen] "
-#: dirmngr/dirmngr.c:948
+#: dirmngr/dirmngr.c:950
msgid "colons are not allowed in the socket name\n"
msgstr "Doppelpunkte sind im Namen des Sockets nicht erlaubt\n"
-#: dirmngr/dirmngr.c:1154 dirmngr/server.c:1163
+#: dirmngr/dirmngr.c:1156 dirmngr/server.c:1163
#, c-format
msgid "fetching CRL from `%s' failed: %s\n"
msgstr "Holen der CRL von `%s' fehlgeschlagen: %s\n"
-#: dirmngr/dirmngr.c:1160 dirmngr/server.c:1169
+#: dirmngr/dirmngr.c:1162 dirmngr/server.c:1169
#, c-format
msgid "processing CRL from `%s' failed: %s\n"
msgstr "Verarbeitung der CRL von `%s' fehlgeschlagen: %s\n"
-#: dirmngr/dirmngr.c:1379
+#: dirmngr/dirmngr.c:1381
#, c-format
msgid "%s:%u: line too long - skipped\n"
msgstr "%s:%u: Zeile ist zu lang - übergangen\n"
-#: dirmngr/dirmngr.c:1434 dirmngr/dirmngr.c:1518
+#: dirmngr/dirmngr.c:1436 dirmngr/dirmngr.c:1520
#, c-format
msgid "%s:%u: invalid fingerprint detected\n"
msgstr "%s:%u: ungültiger Fingerabdruck erkannt\n"
-#: dirmngr/dirmngr.c:1470 dirmngr/dirmngr.c:1496
+#: dirmngr/dirmngr.c:1472 dirmngr/dirmngr.c:1498
#, c-format
msgid "%s:%u: read error: %s\n"
msgstr "%s:%u: Lesefehler: %s\n"
-#: dirmngr/dirmngr.c:1525
+#: dirmngr/dirmngr.c:1527
#, c-format
msgid "%s:%u: garbage at end of line ignored\n"
msgstr "%s:%u: Müll am Ende der Zeile wird ignoriert\n"
-#: dirmngr/dirmngr.c:1591
+#: dirmngr/dirmngr.c:1593
msgid "SIGHUP received - re-reading configuration and flushing caches\n"
msgstr ""
"SIGHUP empfangen - lese die Konfiguration erneut und lösche die "
"Zwischenspeicher\n"
-#: dirmngr/dirmngr.c:1618
+#: dirmngr/dirmngr.c:1620
msgid "SIGUSR2 received - no action defined\n"
msgstr "SIGUSR2 empfangen - keine Aktion definiert\n"
-#: dirmngr/dirmngr.c:1623 dirmngr/dirmngr.c:1660
+#: dirmngr/dirmngr.c:1625 dirmngr/dirmngr.c:1662
msgid "SIGTERM received - shutting down ...\n"
msgstr "SIGTERM empfangen - wird heruntergefahren ...\n"
-#: dirmngr/dirmngr.c:1625
+#: dirmngr/dirmngr.c:1627
#, c-format
msgid "SIGTERM received - still %d active connections\n"
msgstr "SIGTERM empfangen - immer noch %d Verbindungen aktiv\n"
-#: dirmngr/dirmngr.c:1630 dirmngr/dirmngr.c:1663
+#: dirmngr/dirmngr.c:1632 dirmngr/dirmngr.c:1665
msgid "shutdown forced\n"
msgstr "Herunterfahren wurde erzwungen\n"
-#: dirmngr/dirmngr.c:1638
+#: dirmngr/dirmngr.c:1640
msgid "SIGINT received - immediate shutdown\n"
msgstr "SIGINT empfangen - wird sofort heruntergefahren\n"
-#: dirmngr/dirmngr.c:1645
+#: dirmngr/dirmngr.c:1647
#, c-format
msgid "signal %d received - no action defined\n"
msgstr "Signal %d empfangen - keine Aktion definiert\n"
-#: dirmngr/dirmngr.c:1797
+#: dirmngr/dirmngr.c:1799
#, c-format
msgid "accept failed: %s - waiting 1s\n"
msgstr "accept() fehlgeschlagen: %s - warte 1s\n"
-#: dirmngr/dirmngr.c:1827
+#: dirmngr/dirmngr.c:1829
#, c-format
msgid "error spawning connection handler: %s\n"
msgstr "Fehler beim Starten des Verbindungshandler: %s\n"
@@ -10026,6 +10001,29 @@ msgstr ""
"Syntax: gpg-check-pattern [optionen] Musterdatei\n"
"Die von stdin gelesene Passphrase gegen die Musterdatei prüfen\n"
+#~ msgid "Can't edit this key: %s\n"
+#~ msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n"
+
+#~ msgid ""
+#~ "Enter the new passphrase for this secret key.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Geben Sie die neue Passphrase für diesen geheimen Schlüssel ein.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Sie wollen keine Passphrase - dies ist *nicht* zu empfehlen!\n"
+#~ "\n"
+
+#~ msgid "Do you really want to do this? (y/N) "
+#~ msgstr "Möchten Sie dies wirklich tun? (j/N) "
+
+#~ msgid "update secret failed: %s\n"
+#~ msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n"
+
#~ msgid "can't setup KSBA reader: %s\n"
#~ msgstr "KSAB Reader Objekt kann nicht erstellt werden: %s\n"
diff --git a/sm/server.c b/sm/server.c
index d05580796..6eaadd768 100644
--- a/sm/server.c
+++ b/sm/server.c
@@ -163,7 +163,9 @@ close_message_fd (ctrl_t ctrl)
{
if (ctrl->server_local->message_fd != -1)
{
+#ifdef HAVE_W32CE_SYSTEM
#warning Is this correct for W32/W32CE?
+#endif
close (ctrl->server_local->message_fd);
ctrl->server_local->message_fd = -1;
}