=========
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- 2006, 2007, 2008, 2009, 2010, 2011,
- 2012, 2013 Free Software Foundation, Inc.
- Copyright 1997, 1998, 2013, 2014 Werner Koch
+ Copyright 1997-2015 Werner Koch
+ Copyright 1998-2013 Free Software Foundation, Inc.
This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without
+Noteworthy changes in version 2.0.29 (2015-09-08)
+-------------------------------------------------
+
+ * gpg: Print a PGP-2 fingerprint again instead of a row of "0".
+
+ * gpg: Fixed a race condition from multiple several "gpg --verify".
+
+ * gpg: Print FAILURE status lines to help GPGME.
+
+ * gpgsm: Fixed a regression in CSR generation.
+
+ * scdaemon: Fixed problems with some pinpads.
+
+ * Fixed a few other bugs.
+
+
Noteworthy changes in version 2.0.28 (2015-06-02)
-------------------------------------------------
=======================
Version 2.0
+ Copyright 1997-2015 Werner Koch
Copyright 1998-2015 Free Software Foundation, Inc.
- Copyright 1997-1998, 2013-2015 Werner Koch
INTRODUCTION
#ifndef GNUPG_COMMON_STATUS_H
#define GNUPG_COMMON_STATUS_H
-enum
+enum
{
STATUS_ENTER,
STATUS_LEAVE,
STATUS_TRUST_MARGINAL,
STATUS_TRUST_FULLY,
STATUS_TRUST_ULTIMATE,
-
+
STATUS_NEED_PASSPHRASE,
STATUS_VALIDSIG,
STATUS_SIG_ID,
STATUS_ERRMDC,
STATUS_IMPORTED,
STATUS_IMPORT_OK,
- STATUS_IMPORT_PROBLEM,
+ STATUS_IMPORT_PROBLEM,
STATUS_IMPORT_RES,
STATUS_IMPORT_CHECK,
STATUS_FILE_START,
STATUS_FILE_DONE,
STATUS_FILE_ERROR,
-
+
STATUS_BEGIN_DECRYPTION,
STATUS_END_DECRYPTION,
STATUS_BEGIN_ENCRYPTION,
STATUS_END_ENCRYPTION,
STATUS_BEGIN_SIGNING,
-
+
STATUS_DELETE_PROBLEM,
STATUS_GET_BOOL,
STATUS_TRUNCATED,
STATUS_ERROR,
+ STATUS_FAILURE,
STATUS_SUCCESS
};
# (git tag -s gnupg-2.n.m) and run "./autogen.sh --force". Please
# bump the version number immediately *after* the release and do
# another commit and push so that the git magic is able to work.
-m4_define([mym4_version], [2.0.28])
+m4_define([mym4_version], [2.0.29])
# Below is m4 magic to extract and compute the git revision number,
# the decimalized short revision number, a beta version string and a
DECRYPTION_OKAY
The decryption process succeeded. This means, that either the
correct secret key has been used or the correct passphrase
- for a conventional encrypted message was given. The program
- itself may return an errorcode because it may not be possible to
- verify a signature for some reasons.
+ for a symmetric with passphrase encrypted message was given.
+ The program itself may return an errorcode because it may not
+ be possible to verify a signature for some reasons.
NO_PUBKEY <long keyid>
NO_SECKEY <long keyid>
@subsection Ask for a passphrase
This function is usually used to ask for a passphrase to be used for
-conventional encryption, but may also be used by programs which need
+symmetric encryption, but may also be used by programs which need
special handling of passphrases. This command uses a syntax which helps
clients to use the agent with minimum effort.
@item --no-sig-create-check
@opindex no-sig-create-check
-GnuPG normally verifies each signature right after creation to protect
-against bugs and hardware malfunctions which could leak out bits from
-the secret key. This extra verification needs some time (about 115%
-for DSA keys), and so this option can be used to disable it.
-However, due to the fact that the signature creation needs manual
-interaction, this performance penalty does not matter in most settings.
+This option is obsolete. It has no function.
@item --auto-check-trustdb
@itemx --no-auto-check-trustdb
@item --s2k-cipher-algo @code{name}
@opindex s2k-cipher-algo
Use @code{name} as the cipher algorithm used to protect secret keys.
-The default cipher is CAST5. This cipher is also used for
-conventional encryption if @option{--personal-cipher-preferences} and
-@option{--cipher-algo} is not given.
+The default cipher is CAST5. This cipher is also used for symmetric
+encryption with a passphrase if @option{--personal-cipher-preferences}
+and @option{--cipher-algo} is not given.
@item --s2k-digest-algo @code{name}
@opindex s2k-digest-algo
passphrase (which is not recommended) will be used, a 1 adds a salt to
the passphrase and a 3 (the default) iterates the whole process a
number of times (see --s2k-count). Unless @option{--rfc1991} is used,
-this mode is also used for conventional encryption.
+this mode is also used for symmetric encryption with a passphrase.
@item --s2k-count @code{n}
@opindex s2k-count
absolute value internally and thus the last year we can represent is
2105.
-@item Ceation-Date: @var{iso-date}
+@item Creation-Date: @var{iso-date}
Set the creation date of the key as stored in the key information and
which is also part of the fingerprint calculation. Either a date like
"1986-04-26" or a full timestamp like "19860426T042640" may be used.
assert (gcry_mpi_get_flag (sk->skey[npkey], GCRYMPI_FLAG_OPAQUE));
p = gcry_mpi_get_opaque (sk->skey[npkey], &ndatabits );
- iobuf_write (a, p, (ndatabits+7)/8 );
+ if (p)
+ iobuf_write (a, p, (ndatabits+7)/8 );
}
else if ( sk->is_protected )
{
assert (gcry_mpi_get_flag (sk->skey[i], GCRYMPI_FLAG_OPAQUE));
p = gcry_mpi_get_opaque (sk->skey[i], &ndatabits);
- iobuf_write (a, p, (ndatabits+7)/8);
+ if (p)
+ iobuf_write (a, p, (ndatabits+7)/8);
}
write_16(a, sk->csum );
}
}
+/* Write a FAILURE status line. */
+void
+write_status_failure (const char *where, gpg_error_t err)
+{
+ if (!statusfp || !status_currently_allowed (STATUS_FAILURE))
+ return; /* Not enabled or allowed. */
+
+ fprintf (statusfp, "[GNUPG:] %s %s %u\n",
+ get_status_string (STATUS_FAILURE), where, err);
+ if (fflush (statusfp) && opt.exit_on_status_write_error)
+ g10_exit (0);
+}
+
+
static int
myread(int fd, void *buf, size_t count)
{
return G10ERR_GENERAL; /* Oops */
memset (&ctx, 0, sizeof ctx);
+ ctx.exact = 1 ;
ctx.not_allocated = 1;
ctx.kr_handle = keydb_new (1);
ctx.nitems = 1;
static void
free_akl(struct akl *akl)
{
+ if (! akl)
+ return;
+
if(akl->spec)
free_keyserver_spec(akl->spec);
/* gpg.c - The GnuPG utility (main for gpg)
- * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- * 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+ * Copyright (C) 1998-2011 Free Software Foundation, Inc.
+ * Copyright (C) 1997-2015 Werner Koch
+ * Copyright (C) 2015 g10 Code GmbH
*
* This file is part of GnuPG.
*
oNoExpensiveTrustChecks,
oFixedListMode,
oNoSigCache,
- oNoSigCreateCheck,
oAutoCheckTrustDB,
oNoAutoCheckTrustDB,
oPreservePermissions,
ARGPARSE_s_n (oAutoKeyRetrieve, "auto-key-retrieve", "@"),
ARGPARSE_s_n (oNoAutoKeyRetrieve, "no-auto-key-retrieve", "@"),
ARGPARSE_s_n (oNoSigCache, "no-sig-cache", "@"),
- ARGPARSE_s_n (oNoSigCreateCheck, "no-sig-create-check", "@"),
ARGPARSE_s_n (oAutoCheckTrustDB, "auto-check-trustdb", "@"),
ARGPARSE_s_n (oNoAutoCheckTrustDB, "no-auto-check-trustdb", "@"),
ARGPARSE_s_n (oMergeOnly, "merge-only", "@" ),
/* Dummy options. */
ARGPARSE_s_n (oNoop, "sk-comments", "@"),
ARGPARSE_s_n (oNoop, "no-sk-comments", "@"),
+ ARGPARSE_s_n (oNoop, "no-sig-create-check", "@"),
ARGPARSE_end ()
};
}
break;
case oNoSigCache: opt.no_sig_cache = 1; break;
- case oNoSigCreateCheck: opt.no_sig_create_check = 1; break;
case oAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid = 1; break;
case oNoAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid=0; break;
case oAllowFreeformUID: opt.allow_freeform_uid = 1; break;
if( argc > 1 )
wrong_args(_("--store [filename]"));
if( (rc = encode_store(fname)) )
+ {
+ write_status_failure ("store", rc);
log_error ("storing `%s' failed: %s\n",
print_fname_stdin(fname),g10_errstr(rc) );
+ }
break;
case aSym: /* encrypt the given file only with the symmetric cipher */
if( argc > 1 )
wrong_args(_("--symmetric [filename]"));
if( (rc = encode_symmetric(fname)) )
+ {
+ write_status_failure ("symencrypt", rc);
log_error (_("symmetric encryption of `%s' failed: %s\n"),
print_fname_stdin(fname),g10_errstr(rc) );
+ }
break;
case aEncr: /* encrypt the given file */
if( argc > 1 )
wrong_args(_("--encrypt [filename]"));
if( (rc = encode_crypt(fname,remusr,0)) )
- log_error("%s: encryption failed: %s\n",
- print_fname_stdin(fname), g10_errstr(rc) );
+ {
+ write_status_failure ("encrypt", rc);
+ log_error("%s: encryption failed: %s\n",
+ print_fname_stdin(fname), g10_errstr(rc) );
+ }
}
break;
else
{
if( (rc = encode_crypt(fname,remusr,1)) )
- log_error("%s: encryption failed: %s\n",
- print_fname_stdin(fname), g10_errstr(rc) );
+ {
+ write_status_failure ("encrypt", rc);
+ log_error("%s: encryption failed: %s\n",
+ print_fname_stdin(fname), g10_errstr(rc) );
+ }
}
break;
}
}
if( (rc = sign_file( sl, detached_sig, locusr, 0, NULL, NULL)) )
+ {
+ write_status_failure ("sign", rc);
log_error("signing failed: %s\n", g10_errstr(rc) );
+ }
free_strlist(sl);
break;
else
sl = NULL;
if( (rc = sign_file(sl, detached_sig, locusr, 1, remusr, NULL)) )
+ {
+ write_status_failure ("sign-encrypt", rc);
log_error("%s: sign+encrypt failed: %s\n",
print_fname_stdin(fname), g10_errstr(rc) );
+ }
free_strlist(sl);
break;
else
sl = NULL;
if( (rc = sign_file(sl, detached_sig, locusr, 2, remusr, NULL)) )
- log_error("%s: symmetric+sign+encrypt failed: %s\n",
- print_fname_stdin(fname), g10_errstr(rc) );
+ {
+ write_status_failure ("sign-encrypt", rc);
+ log_error("%s: symmetric+sign+encrypt failed: %s\n",
+ print_fname_stdin(fname), g10_errstr(rc) );
+ }
free_strlist(sl);
}
break;
wrong_args(_("--sign --symmetric [filename]"));
rc = sign_symencrypt_file (fname, locusr);
if (rc)
+ {
+ write_status_failure ("sign-symencrypt", rc);
log_error("%s: sign+symmetric failed: %s\n",
print_fname_stdin(fname), g10_errstr(rc) );
+ }
break;
case aClearsign: /* make a clearsig */
if( argc > 1 )
wrong_args(_("--clearsign [filename]"));
if( (rc = clearsign_file(fname, locusr, NULL)) )
+ {
+ write_status_failure ("sign", rc);
log_error("%s: clearsign failed: %s\n",
print_fname_stdin(fname), g10_errstr(rc) );
+ }
break;
case aVerify:
if( (rc = verify_signatures( argc, argv ) ))
log_error("verify signatures failed: %s\n", g10_errstr(rc) );
}
+ if (rc)
+ write_status_failure ("verify", rc);
break;
case aDecrypt:
if( argc > 1 )
wrong_args(_("--decrypt [filename]"));
if( (rc = decrypt_message( fname ) ))
- log_error("decrypt_message failed: %s\n", g10_errstr(rc) );
+ {
+ write_status_failure ("decrypt", rc);
+ log_error("decrypt_message failed: %s\n", g10_errstr(rc));
+ }
}
break;
if(rc)
{
if(cmd==aSendKeys)
- log_error(_("keyserver send failed: %s\n"),g10_errstr(rc));
+ {
+ write_status_failure ("send-keys", rc);
+ log_error(_("keyserver send failed: %s\n"),g10_errstr(rc));
+ }
else if(cmd==aRecvKeys)
- log_error(_("keyserver receive failed: %s\n"),g10_errstr(rc));
+ {
+ write_status_failure ("recv-keys", rc);
+ log_error(_("keyserver receive failed: %s\n"),g10_errstr(rc));
+ }
else
- log_error(_("key export failed: %s\n"),g10_errstr(rc));
+ {
+ write_status_failure ("export", rc);
+ log_error(_("key export failed: %s\n"),g10_errstr(rc));
+ }
}
free_strlist(sl);
break;
append_to_strlist2( &sl, *argv, utf8_strings );
rc=keyserver_search( sl );
if(rc)
- log_error(_("keyserver search failed: %s\n"),g10_errstr(rc));
+ {
+ write_status_failure ("search-keys", rc);
+ log_error(_("keyserver search failed: %s\n"), g10_errstr(rc));
+ }
free_strlist(sl);
break;
append_to_strlist2( &sl, *argv, utf8_strings );
rc=keyserver_refresh(sl);
if(rc)
- log_error(_("keyserver refresh failed: %s\n"),g10_errstr(rc));
+ {
+ write_status_failure ("refresh-keys", rc);
+ log_error(_("keyserver refresh failed: %s\n"),g10_errstr(rc));
+ }
free_strlist(sl);
break;
append_to_strlist2( &sl, *argv, utf8_strings );
rc=keyserver_fetch(sl);
if(rc)
- log_error("key fetch failed: %s\n",g10_errstr(rc));
+ {
+ write_status_failure ("fetch-keys", rc);
+ log_error("key fetch failed: %s\n",g10_errstr(rc));
+ }
free_strlist(sl);
break;
wrong_args("--dearmor [file]");
rc = dearmor_file( argc? *argv: NULL );
if( rc )
+ {
+ write_status_failure ("dearmor", rc);
log_error(_("dearmoring failed: %s\n"), g10_errstr(rc));
+ }
break;
case aEnArmor:
wrong_args("--enarmor [file]");
rc = enarmor_file( argc? *argv: NULL );
if( rc )
+ {
+ write_status_failure ("enarmor", rc);
log_error(_("enarmoring failed: %s\n"), g10_errstr(rc));
+ }
break;
else if (argc == 1)
change_pin (atoi (*argv),1);
else
- wrong_args ("--change-pin [no]");
+ wrong_args ("--change-pin [no]");
break;
#endif /* ENABLE_CARD_SUPPORT*/
}
rc = proc_packets(NULL, a );
if( rc )
+ {
+ write_status_failure ("-", rc);
log_error("processing message failed: %s\n", g10_errstr(rc) );
+ }
iobuf_close(a);
}
break;
if(npkey==0 && pk->pkey[0]
&& gcry_mpi_get_flag (pk->pkey[0], GCRYMPI_FLAG_OPAQUE))
{
- gcry_md_write (md, pp[0], nn[0]);
+ if (pp[0])
+ gcry_md_write (md, pp[0], nn[0]);
}
else
- for(i=0; i < npkey; i++ )
- {
- gcry_md_write ( md, pp[i], nn[i] );
- xfree(pp[i]);
- }
+ {
+ for(i=0; i < npkey; i++ )
+ {
+ if (pp[i])
+ gcry_md_write ( md, pp[i], nn[i] );
+ xfree(pp[i]);
+ }
+ }
}
static gcry_md_hd_t
if ( pk->version < 4 )
{
- if ( is_RSA(pk->pubkey_algo) && opt.flags.allow_weak_digest_algos)
+ if (is_RSA(pk->pubkey_algo))
{
/* RSA in version 3 packets is special. */
gcry_md_hd_t md;
putc ('\n', fp);
else
tty_printf ("\n");
+
+ if (n==16 && !opt.with_colons && !opt.flags.allow_weak_digest_algos)
+ {
+ if (fp)
+ fprintf (fp, _("WARNING: a PGP-2 fingerprint is not safe\n"));
+ else
+ tty_printf (_("WARNING: a PGP-2 fingerprint is not safe\n"));
+ }
}
/* Print the serial number of an OpenPGP card if available. */
int is_status_enabled ( void );
void write_status ( int no );
void write_status_error (const char *where, int errcode);
+void write_status_failure (const char *where, gpg_error_t err);
void write_status_text ( int no, const char *text );
void write_status_strings (int no, const char *text,
...) GNUPG_GCC_A_SENTINEL(0);
int try_all_secrets;
int no_expensive_trust_checks;
int no_sig_cache;
- int no_sig_create_check;
int no_auto_check_trustdb;
int preserve_permissions;
int no_homedir_creation;
int *canceled )
{
gpg_error_t err;
- byte *buffer;
u16 csum=0;
int i, res;
size_t nbytes;
p = gcry_mpi_get_opaque ( sk->skey[i], &ndatabits );
ndata = (ndatabits+7)/8;
- if ( ndata > 1 )
+ if ( ndata > 1 && p )
csumc = p[ndata-2] << 8 | p[ndata-1];
data = xmalloc_secure ( ndata );
- gcry_cipher_decrypt ( cipher_hd, data, ndata, p, ndata );
+ if (p)
+ gcry_cipher_decrypt ( cipher_hd, data, ndata, p, ndata );
+ else
+ memset (data, 0, ndata);
gcry_mpi_release (sk->skey[i]); sk->skey[i] = NULL ;
p = data;
attack */
sk->csum = 0;
csum = 1;
- if( ndata < 20 )
+ if( ndata < 20 )
log_error("not enough bytes for SHA-1 checksum\n");
else {
gcry_md_hd_t h;
gcry_md_write (h, data, ndata - 20);
gcry_md_final (h);
if (!memcmp (gcry_md_read (h, DIGEST_ALGO_SHA1),
- data + ndata - 20, 20) )
+ data + ndata - 20, 20) )
{
/* Digest does match. We have to keep the old
style checksum in sk->csum, so that the
This test gets used when we are adding new
keys. */
sk->csum = csum = checksum (data, ndata-20);
- }
+ }
gcry_md_close (h);
}
}
assert (gcry_mpi_get_flag (sk->skey[i], GCRYMPI_FLAG_OPAQUE));
p = gcry_mpi_get_opaque (sk->skey[i], &ndatabits);
- ndata = (ndatabits+7)/8;
- assert (ndata >= 2);
- assert (ndata == ((p[0] << 8 | p[1]) + 7)/8 + 2);
- buffer = xmalloc_secure (ndata);
- gcry_cipher_sync (cipher_hd);
- buffer[0] = p[0];
- buffer[1] = p[1];
- gcry_cipher_decrypt (cipher_hd, buffer+2, ndata-2,
- p+2, ndata-2);
- csum += checksum (buffer, ndata);
- gcry_mpi_release (sk->skey[i]);
-
- err = gcry_mpi_scan( &sk->skey[i], GCRYMPI_FMT_PGP,
- buffer, ndata, &ndata );
- xfree (buffer);
+ if (!p)
+ err = -1;
+ else
+ {
+ byte *buffer;
+
+ ndata = (ndatabits+7)/8;
+ assert (ndata >= 2);
+ assert (ndata == ((p[0] << 8 | p[1]) + 7)/8 + 2);
+ buffer = xmalloc_secure (ndata);
+ gcry_cipher_sync (cipher_hd);
+ buffer[0] = p[0];
+ buffer[1] = p[1];
+ gcry_cipher_decrypt (cipher_hd, buffer+2, ndata-2,
+ p+2, ndata-2);
+ csum += checksum (buffer, ndata);
+ gcry_mpi_release (sk->skey[i]);
+
+ err = gcry_mpi_scan( &sk->skey[i], GCRYMPI_FMT_PGP,
+ buffer, ndata, &ndata );
+ xfree (buffer);
+ }
if (err)
{
/* Checksum was okay, but not correctly
if ( openpgp_cipher_test_algo ( sk->protect.algo ) ) {
/* Unsupport protection algorithm. */
- rc = gpg_error (GPG_ERR_CIPHER_ALGO);
+ rc = gpg_error (GPG_ERR_CIPHER_ALGO);
}
else {
print_cipher_algo_note( sk->protect.algo );
-
+
if ( openpgp_cipher_open (&cipher_hd, sk->protect.algo,
GCRY_CIPHER_MODE_CFB,
(GCRY_CIPHER_SECURE
p += narr[j];
xfree(bufarr[j]);
}
-
+
if (opt.simple_sk_checksum) {
log_info (_("generating the deprecated 16-bit checksum"
- " for secret key protection\n"));
+ " for secret key protection\n"));
csum = checksum( data, ndata-2);
sk->csum = csum;
*p++ = csum >> 8;
gcry_cipher_encrypt (cipher_hd, data+2, nbytes,
buffer, nbytes);
xfree( buffer );
-
+
gcry_mpi_release (sk->skey[i]);
sk->skey[i] = gcry_mpi_set_opaque (NULL,
data, (nbytes+2)*8 );
gcry_mpi_release (frame);
}
- if (!rc && !opt.no_sig_create_check) {
+ if (!rc
+#if GCRYPT_VERSION_NUMBER >= 0x010700 /* Libgcrypt >= 1.7 */
+ && is_DSA (sk->pubkey_algo)
+#endif /* Libgcrypt >= 1.7 */
+ )
+ {
/* Check that the signature verification worked and nothing is
- * fooling us e.g. by a bug in the signature create
- * code or by deliberately introduced faults. */
+ * fooling us e.g. by a bug in the signature creation code or by
+ * deliberately introduced faults. Libgcrypt 1.7 includes
+ * this check for RSA and thus we don't need it in that case. */
PKT_public_key *pk = xmalloc_clear (sizeof *pk);
if( get_pubkey( pk, sig->keyid ) )
g10_errstr (rc));
free_public_key (pk);
}
+
if( rc )
log_error(_("signing failed: %s\n"), g10_errstr(rc) );
else {
static void open_db(void);
+static int
+take_write_lock (void)
+{
+ if (!lockhandle)
+ lockhandle = create_dotlock (db_name);
+ if (!lockhandle)
+ log_fatal ( _("can't create lock for `%s'\n"), db_name );
+
+ if (!is_locked)
+ {
+ if (make_dotlock (lockhandle, -1) )
+ log_fatal ( _("can't lock `%s'\n"), db_name );
+ else
+ is_locked = 1;
+ return 0;
+ }
+ else
+ return 1;
+}
+static void
+release_write_lock (void)
+{
+ if (!opt.lock_once)
+ if (!release_dotlock (lockhandle))
+ is_locked = 0;
+}
\f
/*************************************
************* record cache **********
int n = dirty_count / 5; /* discard some dirty entries */
if( !n )
n = 1;
- if( !is_locked ) {
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal("can't acquire lock - giving up\n");
- else
- is_locked = 1;
- }
+ take_write_lock ();
for( unused = NULL, r = cache_list; r; r = r->next ) {
if( r->flags.used && r->flags.dirty ) {
int rc = write_cache_item( r );
break;
}
}
- if( !opt.lock_once ) {
- if( !release_dotlock( lockhandle ) )
- is_locked = 0;
- }
+ release_write_lock ();
assert( unused );
r = unused;
r->flags.used = 1;
if( !cache_is_dirty )
return 0;
- if( !is_locked ) {
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal("can't acquire lock - giving up\n");
- else
- is_locked = 1;
- did_lock = 1;
- }
+ if (!take_write_lock ())
+ did_lock = 1;
+
for( r = cache_list; r; r = r->next ) {
if( r->flags.used && r->flags.dirty ) {
int rc = write_cache_item( r );
}
}
cache_is_dirty = 0;
- if( did_lock && !opt.lock_once ) {
- if( !release_dotlock( lockhandle ) )
- is_locked = 0;
- }
+ if (did_lock)
+ release_write_lock ();
return 0;
}
if( !in_transaction )
log_bug("tdbio: no active transaction\n");
- if( !is_locked ) {
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal("can't acquire lock - giving up\n");
- else
- is_locked = 1;
- }
+ take_write_lock ();
block_all_signals();
in_transaction = 0;
rc = tdbio_sync();
unblock_all_signals();
- if( !opt.lock_once ) {
- if( !release_dotlock( lockhandle ) )
- is_locked = 0;
- }
+ release_write_lock ();
return rc;
}
tdbio_set_dbname( const char *new_dbname, int create, int *r_nofile)
{
char *fname;
+ struct stat statbuf;
static int initialized = 0;
if( !initialized ) {
else
fname = xstrdup (new_dbname);
+ xfree (db_name);
+ db_name = fname;
+
+ /*
+ * Quick check for (likely) case where there is trustdb.gpg
+ * already. This check is not required in theory, but it helps in
+ * practice, avoiding costly operations of preparing and taking
+ * the lock.
+ */
+ if (stat (fname, &statbuf) == 0 && statbuf.st_size > 0)
+ /* OK, we have the valid trustdb.gpg already. */
+ return 0;
+
+ take_write_lock ();
+
if( access( fname, R_OK ) ) {
- if( errno != ENOENT ) {
- log_error( _("can't access `%s': %s\n"), fname, strerror(errno) );
- xfree(fname);
- return G10ERR_TRUSTDB;
- }
+ if( errno != ENOENT )
+ log_fatal( _("can't access `%s': %s\n"), fname, strerror(errno) );
+
if (!create)
*r_nofile = 1;
else {
}
*p = save_slash;
- xfree(db_name);
- db_name = fname;
-#ifdef __riscos__
- if( !lockhandle )
- lockhandle = create_dotlock( db_name );
- if( !lockhandle )
- log_fatal( _("can't create lock for `%s'\n"), db_name );
- if( make_dotlock( lockhandle, -1 ) )
- log_fatal( _("can't lock `%s'\n"), db_name );
-#endif /* __riscos__ */
oldmask=umask(077);
if (is_secured_filename (fname)) {
fp = NULL;
if( db_fd == -1 )
log_fatal( _("can't open `%s': %s\n"), db_name, strerror(errno) );
-#ifndef __riscos__
- if( !lockhandle )
- lockhandle = create_dotlock( db_name );
- if( !lockhandle )
- log_fatal( _("can't create lock for `%s'\n"), db_name );
-#endif /* !__riscos__ */
-
rc = create_version_record ();
if( rc )
log_fatal( _("%s: failed to create version record: %s"),
if( !opt.quiet )
log_info(_("%s: trustdb created\n"), db_name);
-
- return 0;
}
}
- xfree(db_name);
- db_name = fname;
+
+ release_write_lock ();
return 0;
}
assert( db_fd == -1 );
- if (!lockhandle )
- lockhandle = create_dotlock( db_name );
- if (!lockhandle )
- log_fatal( _("can't create lock for `%s'\n"), db_name );
-#ifdef __riscos__
- if (make_dotlock( lockhandle, -1 ) )
- log_fatal( _("can't lock `%s'\n"), db_name );
-#endif /* __riscos__ */
db_fd = open (db_name, O_RDWR | MY_O_BINARY );
if (db_fd == -1 && (errno == EACCES
#ifdef EROFS
;
/* Store the calculated valididation status somewhere */
- if (opt.verbose > 1)
+ if (opt.verbose > 1 && DBG_TRUST)
dump_key_array (depth, keys);
for (kar=keys; kar->keyblock; kar++)
msgid " Key fingerprint ="
msgstr "паказаць ключы й адбіткі пальцаў"
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "нерэчаісны хэш-альгарытм \"%s\"\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr ""
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "%s: немагчыма стварыць тэчку: %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "немагчыма адкрыць \"%s\"\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr ""
msgid "%s: directory does not exist!\n"
msgstr ""
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "%s: немагчыма стварыць тэчку: %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "немагчыма адкрыць \"%s\"\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr ""
msgid " Key fingerprint ="
msgstr " Empremta digital ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "signatura %s, algorisme de resum %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "base de dades de confiança: no s'ha pogut sincronitzar: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "no es pot crear el directori «%s»: %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "no s'ha pogut obrir «%s»\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "reg de la base de dades de confiança %lu: ha fallat lseek: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: el directori no existeix!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "no es pot crear el directori «%s»: %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "no s'ha pogut obrir «%s»\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: no s'ha pogut crear un registre de versió: %s"
msgid " Key fingerprint ="
msgstr " Otisk klíče ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "VAROVÁNÍ: používám experimentální hashovací algoritmus %s\n"
+
msgid " Card serial no. ="
msgstr " Sériové číslo karty ="
msgstr "databáze důvěry: synchronizace selhala %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "nemohu vytvořit zámek pro „%s“\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "nelze zamknout „%s“\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "záznam v databázi důvěry %lu: lseek() se nepodařil: %s\n"
msgstr "%s: adresář neexistuje!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "nemohu vytvořit zámek pro „%s“\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "nelze zamknout „%s“\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: nepodařilo se vytvořit záznam verze: %s"
msgid " Key fingerprint ="
msgstr " Nøglefingeraftryk ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "ADVARSEL: bruger eksperimentel sammendragsalgoritme %s\n"
+
msgid " Card serial no. ="
msgstr " Serielnr. for kort ="
msgstr "trustdb: synkronisering mislykkedes: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "kan ikke oprette lås for »%s«\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "kan ikke låse »%s«\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb rec %lu: lseek mislykkedes: %s\n"
msgstr "%s: mappe findes ikke!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "kan ikke oprette lås for »%s«\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "kan ikke låse »%s«\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: kunne ikke oprette versionspost: %s"
msgstr ""
"Project-Id-Version: gnupg-2.0.18\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2015-06-02 13:13+0200\n"
+"PO-Revision-Date: 2015-09-08 15:57+0200\n"
"Last-Translator: Werner Koch <wk@gnupg.org>\n"
"Language-Team: German <de@li.org>\n"
"Language: de\n"
msgid " Key fingerprint ="
msgstr " Schl.-Fingerabdruck ="
+#, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "WARNUNG: Ein PGP-2 Fingerabdruck ist unsicher\n"
+
msgid " Card serial no. ="
msgstr " Kartenseriennr. ="
msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "Datei `%s' konnte nicht gesperrt werden\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "'%s' kann nicht gesperrt werden\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n"
msgstr "%s: Verzeichnis existiert nicht!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "Datei `%s' konnte nicht gesperrt werden\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "'%s' kann nicht gesperrt werden\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s"
msgid " Key fingerprint ="
msgstr " Áðïôýðùìá êëåéäéïý ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "%s õðïãñáöÞ, áëãüñéèìïò ðåñßëçøçò %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "trustdb: sync áðÝôõ÷å: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "áäõíáìßá äçìéïõñãßáò ôïõ `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "áäõíáìßá ðñüóâáóçò ôïõ `%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb rec %lu: áðïôõ÷ßá lseek: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: ï öÜêåëïò äåí õðÜñ÷åé!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "áäõíáìßá äçìéïõñãßáò ôïõ `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "áäõíáìßá ðñüóâáóçò ôïõ `%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: áðïôõ÷ßá äçìéïõñãßáò ìéáò åããñáöÞò Ýêäïóçò: %s"
msgid " Key fingerprint ="
msgstr " Þlosilo-fingrospuro ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "%s-subskribo de: %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "fido-datenaro: sync malsukcesis: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "ne povas krei '%s': %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "ne povas malfermi '%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "fido-datenaro loko %lu: lseek malsukcesis: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: dosierujo ne ekzistas!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "ne povas krei '%s': %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "ne povas malfermi '%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: malsukcesis krei versiregistron: %s"
msgid " Key fingerprint ="
msgstr " Huella de clave ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "ATENCIÓN: usando algoritmo de resumen experimental %s\n"
+
msgid " Card serial no. ="
msgstr " Número de serie de la tarjeta ="
msgstr "base de datos de confianza: fallo sincronización: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "no se puede crear el bloqueo para `%s'\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "no se puede bloquear `%s'\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "registro base de datos de confianza %lu: lseek fallido: %s\n"
msgstr "%s: ¡el directorio no existe!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "no se puede crear el bloqueo para `%s'\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "no se puede bloquear `%s'\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: fallo en la creación del registro de versión: %s"
msgid " Key fingerprint ="
msgstr " Võtme sõrmejälg ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "%s allkiri, sõnumilühendi algoritm %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "trustdb: sync ebaõnnestus: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "`%s' ei õnnestu luua: %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "`%s' ei õnnestu avada\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb kirje %lu: lseek ebaõnnestus: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: kataloogi ei ole!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "`%s' ei õnnestu luua: %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "`%s' ei õnnestu avada\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: versioonikirje loomine ei õnnestu: %s"
msgid " Key fingerprint ="
msgstr " Avaimen sormenjälki ="
+# Ensimmäinen %s on binary, textmode tai unknown, ks. alla
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "%sallekirjoitus, tiivistealgoritmi %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "trustdb: synkronointi epäonnistui: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "tiedostoa \"%s\" ei voi luoda: %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "tiedostoa \"%s\" ei voi avata\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb rec %lu: lseek epäonnistui: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: hakemistoa ei ole olemassa!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "tiedostoa \"%s\" ei voi luoda: %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "tiedostoa \"%s\" ei voi avata\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: versiotietueen luonti epäonnistui: %s"
msgid " Key fingerprint ="
msgstr " Empreinte de la clef ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "Attention : utilisation de l'algorithme expérimental de hachage %s\n"
+
msgid " Card serial no. ="
msgstr " Nº de série de carte ="
msgstr "base de confiance : échec de synchronisation : %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "impossible de créer un verrou pour « %s »\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "impossible de verrouiller « %s »\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "enregistrement de base de confiance %lu : échec de lseek : %s\n"
msgstr "%s : le répertoire n'existe pas.\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "impossible de créer un verrou pour « %s »\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "impossible de verrouiller « %s »\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s : impossible de créer un enregistrement de version : %s"
msgid " Key fingerprint ="
msgstr " Pegada dactilar ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "Sinatura %s, algoritmo de resumo %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "base de datos de confianza: fallou a sincronización: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "non se pode crear `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "non se puido abrir `%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "rexistro da base de datos de confianza %lu: lseek fallou: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: ¡o directorio non existe!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "non se pode crear `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "non se puido abrir `%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: non se puido crea-lo rexistro de versión: %s"
msgid " Key fingerprint ="
msgstr " Kulcs ujjlenyomata ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "%s aláírás, %s kivonatoló algoritmus.\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "Bizalmi adatbázis: szinkronizáció sikertelen: %s.\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "Nem tudom létrehozni a(z) \"%s\" állományt: %s.\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "Nem tudom megnyitni %s-t!\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "Bizalmi adatbázis %lu. rekord: lseek sikertelen: %s.\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: Könyvtár nem létezik!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "Nem tudom létrehozni a(z) \"%s\" állományt: %s.\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "Nem tudom megnyitni %s-t!\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: Nem sikerült verziórekordot létrehoznom: %s"
msgid " Key fingerprint ="
msgstr " Fingerprint kunci ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "%s signature, algoritma digest %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "trustdb: gagal sync: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "tidak dapat membuat %s: %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "tidak dapat membuka `%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb rec %lu: lseek gagal: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: direktori tidak ada!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "tidak dapat membuat %s: %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "tidak dapat membuka `%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: gagal membuat catatan versi: %s"
msgid " Key fingerprint ="
msgstr " Impronta digitale ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "Firma %s, algoritmo di digest %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "trustdb: sync fallita: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "impossibile creare `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "impossibile aprire `%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb rec %lu: lseek fallita: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: la directory non esiste!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "impossibile creare `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "impossibile aprire `%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: creazione del record della versione fallita: %s"
#
msgid ""
msgstr ""
-"Project-Id-Version: GNU gnupg 2.0.27\n"
+"Project-Id-Version: GNU gnupg 2.0.28\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2015-06-02 13:05+0200\n"
+"PO-Revision-Date: 2015-06-16 12:51+0900\n"
"Last-Translator: NIIBE Yutaka <gniibe@fsij.org>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
"Language: ja\n"
msgstr "|pinentry-label|_OK"
msgid "|pinentry-label|_Cancel"
-msgstr "|pinentry-label|_キャンセル"
+msgstr "|pinentry-label|キャンセル(_C)"
-#, fuzzy
-#| msgid "|pinentry-label|_OK"
msgid "|pinentry-label|_Yes"
-msgstr "|pinentry-label|_OK"
+msgstr "|pinentry-label|_Yes"
-#, fuzzy
-#| msgid "|pinentry-label|_OK"
msgid "|pinentry-label|_No"
-msgstr "|pinentry-label|_OK"
+msgstr "|pinentry-label|_No"
msgid "|pinentry-label|PIN:"
msgstr "|pinentry-label|PIN:"
-#, fuzzy
-#| msgid "|pinentry-label|_Cancel"
msgid "|pinentry-label|_Save in password manager"
-msgstr "|pinentry-label|_キャンセル"
+msgstr "|pinentry-label|パスワードマネージャに保存する(_S)"
-#, fuzzy
-#| msgid "Do you really want to revoke the selected subkeys? (y/N) "
msgid "Do you really want to make your passphrase visible on the screen?"
-msgstr "選択した副鍵を本当に失効しますか? (y/N) "
+msgstr "本当に画面にパスフレーズを見えるようにしますか?"
msgid "|pinentry-tt|Make passphrase visible"
-msgstr ""
+msgstr "|pinentry-tt|パスフレーズを見えるようにする"
-#, fuzzy
-#| msgid "Enter new passphrase"
msgid "|pinentry-tt|Hide passphrase"
-msgstr "新しいパスフレーズを入力してください"
+msgstr "|pinentry-tt|パスフレーズを隠す"
#. TRANSLATORS: This string is displayed by Pinentry as the label
#. for the quality bar.
msgid "Quality:"
-msgstr "品質: %s"
+msgstr "品質:"
#. TRANSLATORS: This string is a tooltip, shown by pinentry when
#. hovering over the quality bar. Please use an appropriate
msgid "enable putty support"
msgstr "puttyサポートを有効にする"
-#, fuzzy
-#| msgid "do not allow the reuse of old passphrases"
msgid "disallow the use of an external password cache"
-msgstr "å\8f¤ã\81\84ã\83\91ã\82¹ã\83\95ã\83¬ã\83¼ã\82ºã\82\92å\86\8d使ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92èª\8dã\82\81ã\81ªã\81\84"
+msgstr "å¤\96é\83¨ã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82ã\83£ã\83\83ã\82·ã\83¥ã\81®ä½¿ç\94¨ã\82\92èª\8dã\82\81ã\81ªã\81\84"
msgid "|FILE|write environment settings also to FILE"
msgstr "|FILE|FILEに環境変数の設定も書き出す"
msgid " Key fingerprint ="
msgstr " フィンガー・プリント ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "*警告*: 実験的ダイジェスト・アルゴリズム %sを使用\n"
+
msgid " Card serial no. ="
msgstr " カード・シリアル番号 ="
msgstr "信用データベース: 同期に失敗しました: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "「%s」のロックを作成できません\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "「%s」がロックできません\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "信用データベース レコード%lu: シークに失敗しました: %s\n"
msgstr "%s: ディレクトリがありません!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "「%s」のロックを作成できません\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "「%s」がロックできません\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: バージョン・レコードの作成に失敗しました: %s"
msgstr "キーワードが長すぎます"
msgid "missing argument"
-msgstr "引数ありません"
+msgstr "å¼\95æ\95°ã\81\8cã\81\82ã\82\8aã\81¾ã\81\9bã\82\93"
-#, fuzzy
-#| msgid "invalid value\n"
msgid "invalid argument"
-msgstr "ç\84¡å\8a¹ã\81ªå\80¤\n"
+msgstr "ç\84¡å\8a¹ã\81ªå¼\95æ\95°"
msgid "invalid command"
msgstr "無効なコマンド"
msgid "missing argument for option \"%.50s\"\n"
msgstr "オプション\"%.50s\"に引数がありません\n"
-#, fuzzy, c-format
-#| msgid "missing argument for option \"%.50s\"\n"
+#, c-format
msgid "invalid argument for option \"%.50s\"\n"
-msgstr "オプション\"%.50s\"に引数がありません\n"
+msgstr "オプション\"%.50s\"に無効な引数です\n"
#, c-format
msgid "option \"%.50s\" does not expect an argument\n"
msgid " Key fingerprint ="
msgstr " Nøkkelfingeravtrykk ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "ADVARSEL: bruker eksperimentell digest-algoritme %s\n"
+
msgid " Card serial no. ="
msgstr " Serienummer for kort ="
msgstr ""
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "kan ikke opprette lås for «%s»\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "kan ikke låse «%s»\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr ""
msgstr ""
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "kan ikke opprette lås for «%s»\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "kan ikke låse «%s»\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr ""
msgid " Key fingerprint ="
msgstr " Vingerafdruk van de sleutel ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "WAARSCHUWING: er wordt een experimenteel hashalgoritme %s gebruikt\n"
+
msgid " Card serial no. ="
msgstr " Serienummer van de kaart ="
msgstr "betrouwbaarheidsdatabank (trustdb): synchronisatie mislukt: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "kan geen grendel maken voor `%s'\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "kan `%s' niet vergrendelen\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr ""
"betrouwbaarheidsdatabank (trustdb): element %lu: lseek is mislukt: %s\n"
msgstr "%s: map bestaat niet!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "kan geen grendel maken voor `%s'\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "kan `%s' niet vergrendelen\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: het registreren van de versie is mislukt: %s"
msgid " Key fingerprint ="
msgstr " Odcisk klucza ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "OSTRZEŻENIE: użycie eksperymentalnego algorytmu skrótu %s\n"
+
msgid " Card serial no. ="
msgstr " Nr seryjny karty ="
msgstr "baza zaufania: synchronizacja nie powiodła się %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "nie można utworzyć blokady dla ,,%s''\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "nie można zablokować ,,%s''\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "baza zaufania, wpis %lu: funkcja lseek() nie powiodła się: %s\n"
msgstr "%s: katalog nie istnieje!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "nie można utworzyć blokady dla ,,%s''\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "nie można zablokować ,,%s''\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: stworzenie zapisu o wersji nie powiodło się: %s"
msgid " Key fingerprint ="
msgstr " Impressão da chave ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "assinatura %s de: \"%s\"\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "base de dados de confiança: sincronização falhou: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "impossível criar `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "impossível abrir `%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "base de dados de confiança rec %lu: lseek falhou: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: diretoria inexistente!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "impossível criar `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "impossível abrir `%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: falha ao criar registo de versão: %s"
msgid " Key fingerprint ="
msgstr " Impressão digital:"
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "assinatura %s de: %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "banco de dados de confiabilidade: sincronização falhou: %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "impossível criar %s: %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "impossível abrir `%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "banco de dados de confiabilidade rec %lu: lseek falhou: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: diretório inexistente!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "impossível criar %s: %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "impossível abrir `%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: falha ao criar registro de versão: %s"
msgid " Key fingerprint ="
msgstr " Amprentã cheie ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "AVERTISMENT: folosesc algoritmul rezumat experimental %s\n"
+
msgid " Card serial no. ="
msgstr " Card nr. serie ="
msgstr "trustdb: sincronizarea a eºuat: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "nu pot crea încuietoare (lock) pentru `%s'\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "nu pot încuia (lock) `%s'\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "trustdb rec %lu: lseek a eºuat: %s\n"
msgstr "%s: directorul nu existã!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "nu pot crea încuietoare (lock) pentru `%s'\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "nu pot încuia (lock) `%s'\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: am eºuat sã creez înregistrare versiune: %s"
msgstr ""
"Project-Id-Version: GnuPG 2.0.10\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2015-02-14 17:16+0000\n"
+"PO-Revision-Date: 2015-06-25 17:16+0000\n"
"Last-Translator: Ineiev <ineiev@gnu.org>\n"
"Language-Team: Russian <gnupg-ru@gnupg.org>\n"
"Language: ru\n"
msgid "|pinentry-label|_Cancel"
msgstr "|pinentry-label|Отмена (_C)"
+msgid "|pinentry-label|_Yes"
+msgstr "|pinentry-label|Да (_Y)"
+
+msgid "|pinentry-label|_No"
+msgstr "|pinentry-label|Нет (_N)"
+
msgid "|pinentry-label|PIN:"
msgstr "|pinentry-label|PIN:"
+msgid "|pinentry-label|_Save in password manager"
+msgstr "|pinentry-label|Сохранить в диспетчере паролей (_S)"
+
+msgid "Do you really want to make your passphrase visible on the screen?"
+msgstr "Вы действительно хотите, чтобы фраза-пароль была видна на экране?"
+
+msgid "|pinentry-tt|Make passphrase visible"
+msgstr "|pinentry-tt|Показывать фразу-пароль"
+
+msgid "|pinentry-tt|Hide passphrase"
+msgstr "|pinentry-tt|Скрывать фразу-пароль"
+
#. TRANSLATORS: This string is displayed by Pinentry as the label
#. for the quality bar.
msgid "Quality:"
msgid "enable putty support"
msgstr "включить поддержку putty"
+msgid "disallow the use of an external password cache"
+msgstr "не позволять пользоваться внешней памятью паролей"
+
msgid "|FILE|write environment settings also to FILE"
msgstr "|FILE|сохранить состояние среды также в файл FILE"
msgstr "[ID пользователя не найден]"
#, c-format
+msgid "key %s: secret key without public key - skipped\n"
+msgstr "ключ %s: закрытый ключ без открытого ключа - пропущен\n"
+
+#, c-format
msgid "automatically retrieved `%s' via %s\n"
msgstr "автоматически получили `%s' через %s\n"
msgid "using subkey %s instead of primary key %s\n"
msgstr "использую подключ %s вместо главного ключа %s\n"
-#, c-format
-msgid "key %s: secret key without public key - skipped\n"
-msgstr "ключ %s: закрытый ключ без открытого ключа - пропущен\n"
-
msgid "make a signature"
msgstr "создать подпись"
msgid " Key fingerprint ="
msgstr " Отпечаток ключа ="
+#, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "ВНИМАНИЕ: отпечаток PGP-2 не безопасен\n"
+
msgid " Card serial no. ="
msgstr " серийный номер карты ="
msgid "keyserver did not send VERSION\n"
msgstr "сервер ключей не прислал VERSION\n"
+#, c-format
+msgid "keyserver communications error: %s\n"
+msgstr "ошибка связи с сервером ключей: %s\n"
+
msgid "no keyserver known (use option --keyserver)\n"
msgstr "не заданы серверы ключей (используйте --keyserver)\n"
msgstr "внутренняя ошибка сервера ключей\n"
#, c-format
-msgid "keyserver communications error: %s\n"
-msgstr "ошибка связи с сервером ключей: %s\n"
-
-#, c-format
msgid "\"%s\" not a key ID: skipping\n"
msgstr "\"%s\" не идентификатор ключа: пропущен\n"
msgstr "таблица доверия: сбой синхронизации: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "невозможно создать блокировку для `%s'\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "невозможно заблокировать `%s'\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "таблица доверия, запись %lu: сбой lseek: %s\n"
msgstr "%s: каталог не существует!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "невозможно создать блокировку для `%s'\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "невозможно заблокировать `%s'\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: сбой создания записи о версии: %s"
msgid "missing argument"
msgstr "пропущен аргумент"
+msgid "invalid argument"
+msgstr "недопустимый аргумент"
+
msgid "invalid command"
msgstr "недопустимая команда"
msgstr "не хватает аргумента для параметра \"%.50s\"\n"
#, c-format
+msgid "invalid argument for option \"%.50s\"\n"
+msgstr "недопустимый аргумент для параметра \"%.50s\"\n"
+
+#, c-format
msgid "option \"%.50s\" does not expect an argument\n"
msgstr "у параметра \"%.50s\" не должно быть аргумента\n"
msgid " Key fingerprint ="
msgstr " Fingerprint kµúèa ="
+#, fuzzy, c-format
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "%s podpis, hashovací algoritmus %s\n"
+
msgid " Card serial no. ="
msgstr ""
msgid "trustdb: sync failed: %s\n"
msgstr "databáza dôvery: synchronizácia zlyhala %s\n"
+#, fuzzy, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "nemô¾em vytvori» `%s': %s\n"
+
+#, fuzzy, c-format
+msgid "can't lock `%s'\n"
+msgstr "nemo¾no otvori» `%s'\n"
+
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "záznam v databáze dôvery %lu: lseek() sa nepodaril: %s\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: adresár neexistuje!\n"
-#, fuzzy, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "nemô¾em vytvori» `%s': %s\n"
-
-#, fuzzy, c-format
-msgid "can't lock `%s'\n"
-msgstr "nemo¾no otvori» `%s'\n"
-
#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: nepodarilo sa vytvori» záznam verzie: %s"
msgid " Key fingerprint ="
msgstr "Nyckelns fingeravtryck ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "VARNING: använder experimentella sammandragsalgoritmen %s\n"
+
msgid " Card serial no. ="
msgstr " Kortets serienr ="
msgstr "tillitsdatabas: synkronisering misslyckades: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "kan inte skapa lås för \"%s\"\n"
+
+# se förra kommentaren
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "kan inte låsa \"%s\"\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "tillitsdatabasposten %lu: lseek misslyckades: %s\n"
msgstr "%s: katalogen finns inte!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "kan inte skapa lås för \"%s\"\n"
-
-# se förra kommentaren
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "kan inte låsa \"%s\"\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: misslyckades med att skapa versionspost: %s"
msgid " Key fingerprint ="
msgstr " Anahtar parmakizi ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "UYARI: deneysel %s özet algoritması kullanılıyor\n"
+
msgid " Card serial no. ="
msgstr " Kart seri no. ="
msgstr "güvence veritabanı: eşzamanlama başarısız: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "`%s' için kilit oluşturulamıyor\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "`%s' kiltlenemedi\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "güvence veritabanı %lu kaydı: erişim başarısız: %s\n"
msgstr "%s: dizin yok!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "`%s' için kilit oluşturulamıyor\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "`%s' kiltlenemedi\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: sürüm kaydı oluşturmada başarısız: %s"
msgid " Key fingerprint ="
msgstr " Відбиток ключа ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr ""
+"УВАГА: використовуємо експериментальний алгоритм обчислення контрольних сум "
+"%s\n"
+
msgid " Card serial no. ="
msgstr "Серійний номер картки ="
msgstr "trustdb: помилка синхронізації: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "не вдалося створити блокування для «%s»\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "не вдалося заблокувати «%s»\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "запис trustdb %lu: помилка lseek: %s\n"
msgstr "%s: каталогу не існує!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "не вдалося створити блокування для «%s»\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "не вдалося заблокувати «%s»\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: не вдалося створити запис щодо версії: %s"
msgid " Key fingerprint ="
msgstr "密钥指纹 ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "警告:使用试验性质的散列算法 %s\n"
+
msgid " Card serial no. ="
msgstr "卡序列号 ="
msgstr "信任度数据库:同步失败:%s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "不能为‘%s’创建锁定\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "无法锁定‘%s’\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "信任度数据库记录 %lu:lseek 失败:%s\n"
msgstr "%s:目录不存在!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "不能为‘%s’创建锁定\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "无法锁定‘%s’\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s:建立版本记录失败:%s"
msgid " Key fingerprint ="
msgstr " 金鑰指紋 ="
+#, fuzzy, c-format
+#| msgid "WARNING: using experimental digest algorithm %s\n"
+msgid "WARNING: a PGP-2 fingerprint is not safe\n"
+msgstr "警告: 正在使用實驗性的 %s 摘要演算法\n"
+
msgid " Card serial no. ="
msgstr " 卡片序號 ="
msgstr "信任資料庫: 同步化失敗: %s\n"
#, c-format
+msgid "can't create lock for `%s'\n"
+msgstr "無法為 `%s' 建立鎖定\n"
+
+#, c-format
+msgid "can't lock `%s'\n"
+msgstr "無法鎖定 `%s'\n"
+
+#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
msgstr "信任資料庫記錄 %lu: 本機搜尋失敗: %s\n"
msgstr "%s: 目錄不存在!\n"
#, c-format
-msgid "can't create lock for `%s'\n"
-msgstr "無法為 `%s' 建立鎖定\n"
-
-#, c-format
-msgid "can't lock `%s'\n"
-msgstr "無法鎖定 `%s'\n"
-
-#, c-format
msgid "%s: failed to create version record: %s"
msgstr "%s: 建立版本記錄失敗: %s"
reader_table[slot].is_spr532 = 1;
reader_table[slot].pinpad_varlen_supported = 1;
}
- else if (strstr (reader_table[slot].rdrname, "ST-2xxx")
- || strstr (reader_table[slot].rdrname, "cyberJack")
+ else if (strstr (reader_table[slot].rdrname, "ST-2xxx"))
+ {
+ reader_table[slot].pcsc.pinmax = 15;
+ reader_table[slot].pinpad_varlen_supported = 1;
+ }
+ else if (strstr (reader_table[slot].rdrname, "cyberJack")
|| strstr (reader_table[slot].rdrname, "DIGIPASS")
|| strstr (reader_table[slot].rdrname, "Gnuk")
|| strstr (reader_table[slot].rdrname, "KAAN"))
reader_table[slot].is_spr532 = 1;
reader_table[slot].pinpad_varlen_supported = 1;
}
- else if ((vendor == 0x046a && product == 0x003e) /* Cherry ST-2xxx */
- || vendor == 0x0c4b /* Tested with Reiner cyberJack GO */
+ else if (vendor == 0x046a && product == 0x003e) /* Cherry ST-2xxx */
+ {
+ reader_table[slot].pcsc.pinmax = 15;
+ reader_table[slot].pinpad_varlen_supported = 1;
+ }
+ else if (vendor == 0x0c4b /* Tested with Reiner cyberJack GO */
|| vendor == 0x1a44 /* Tested with Vasco DIGIPASS 920 */
|| vendor == 0x234b /* Tested with FSIJ Gnuk Token */
|| vendor == 0x0d46 /* Tested with KAAN Advanced??? */)
int sw;
unsigned char *pin_verify;
int len = PIN_VERIFY_STRUCTURE_SIZE + pininfo->fixedlen;
- unsigned char result[2];
- pcsc_dword_t resultlen = 2;
+ /*
+ * The result buffer is only expected to have two-byte result on
+ * return. However, some implementation uses this buffer for lower
+ * layer too and it assumes that there is enough space for lower
+ * layer communication. Such an implementation fails for TPDU
+ * readers with "insufficient buffer", as it needs header and
+ * trailer. Six is the number for header + result + trailer (TPDU).
+ */
+ unsigned char result[6];
+ pcsc_dword_t resultlen = 6;
int no_lc;
if (!reader_table[slot].atrlen
int sw;
unsigned char *pin_modify;
int len = PIN_MODIFY_STRUCTURE_SIZE + 2 * pininfo->fixedlen;
- unsigned char result[2];
- pcsc_dword_t resultlen = 2;
+ unsigned char result[6]; /* See the comment at pinpad_verify. */
+ pcsc_dword_t resultlen = 6;
int no_lc;
if (!reader_table[slot].atrlen
size_t dummy_nresp;
int testmode;
int cherry_mode = 0;
+ int add_zero = 0;
int enable_varlen = 0;
testmode = !resp && !nresp;
enable_varlen = 1;
break;
case VENDOR_CHERRY:
- pininfo->maxlen = 25;
+ pininfo->maxlen = 15;
enable_varlen = 1;
/* The CHERRY XX44 keyboard echos an asterisk for each entered
character on the keyboard channel. We use a special variant
Lc byte to the APDU. It seems that it will be replaced with
the actual length instead of being appended before the APDU
is send to the card. */
+ add_zero = 1;
if (handle->id_product != CHERRY_ST2000)
cherry_mode = 1;
break;
msg[msglen++] = apdu_buf[1]; /* INS */
msg[msglen++] = apdu_buf[2]; /* P1 */
msg[msglen++] = apdu_buf[3]; /* P2 */
- if (cherry_mode)
+ if (add_zero)
msg[msglen++] = 0;
else if (pininfo->fixedlen != 0)
{
/* Parameters are checked, the key pair has been created. Now
- generate the request and write it out */
+ generate the request and write it out.
+
+ Note: We use SHA-1 here because Libksba hash a shortcut to use
+ assume that if SIG_VAL uses as algo the string "rsa". To fix that
+ we would need to replace that string by an appropriate OID. We
+ leave this change for 2.1.
+ */
static int
create_request (ctrl_t ctrl,
struct para_data_s *para,
{
ksba_certreq_t cr;
gpg_error_t err;
+ int hashalgo = GCRY_MD_SHA1;
gcry_md_hd_t md;
ksba_stop_reason_t stopreason;
int rc = 0;
if (err)
return err;
- rc = gcry_md_open (&md, GCRY_MD_SHA256, 0);
+ rc = gcry_md_open (&md, hashalgo, 0);
if (rc)
{
log_error ("md_open failed: %s\n", gpg_strerror (rc));
if (carddirect)
rc = gpgsm_scd_pksign (ctrl, carddirect, NULL,
- gcry_md_read(md, GCRY_MD_SHA1),
- gcry_md_get_algo_dlen (GCRY_MD_SHA1),
- GCRY_MD_SHA1,
- &sigval, &siglen);
+ gcry_md_read (md, hashalgo),
+ gcry_md_get_algo_dlen (hashalgo),
+ hashalgo,
+ &sigval, &siglen);
else
{
char *orig_codeset;
" more.\n"));
i18n_switchback (orig_codeset);
rc = gpgsm_agent_pksign (ctrl, hexgrip, desc,
- gcry_md_read(md, GCRY_MD_SHA1),
- gcry_md_get_algo_dlen (GCRY_MD_SHA1),
- GCRY_MD_SHA1,
+ gcry_md_read(md, hashalgo),
+ gcry_md_get_algo_dlen (hashalgo),
+ hashalgo,
&sigval, &siglen);
xfree (desc);
}