diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2021-02-09 16:00:56 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2021-02-09 16:00:56 +0900 |
commit | cba93c71d2653bae01faf0c092b6b7ea1c2a601f (patch) | |
tree | e038af5f70b9adabd5c3cfe205e456923cd49114 | |
parent | 809c8ad8209b0f5248cfc52eb6e1d437099fb228 (diff) | |
download | gpg2-cba93c71d2653bae01faf0c092b6b7ea1c2a601f.tar.gz gpg2-cba93c71d2653bae01faf0c092b6b7ea1c2a601f.tar.bz2 gpg2-cba93c71d2653bae01faf0c092b6b7ea1c2a601f.zip |
Imported Upstream version 2.2.24upstream/2.2.24
172 files changed, 6920 insertions, 6490 deletions
@@ -1,3 +1,61 @@ +Noteworthy changes in version 2.2.24 (2020-11-17) +------------------------------------------------- + + * Allow Unicode file names on Windows almost everywhere. Note that + it is still not possible to use Unicode strings on the command + line. This change also fixes a regression in 2.2.22 related to + non-ascii file names. [#5098] + + * Fix localized time printing on Windows. [#5073] + + * gpg: New command --quick-revoke-sig. [#5093] + + * gpg: Do not use weak digest algos if selected by recipient + preference during sign+encrypt. [4c181d51a6] + + * gpg: Switch to AES256 for symmetric encryption in de-vs mode. + [166e779634] + + * gpg: Silence weak digest warnings with --quiet. [#4893] + + * gpg: Print new status line CANCELED_BY_USER for a cancel during + symmetric encryption. [f05d1772c4] + + * gpg: Fix the encrypt+sign hash algo preference selection for + ECDSA. This is in particular needed for keys created from + existing smartcard based keys. [aeed0b93ff] + + * agent: Fix secret key import of GnuPG 2.3 generated Ed25519 keys. + [#5114] + + * agent: Keep some permissions of private-keys-v1.d. [#2312] + + * dirmngr: Align sks-keyservers.netCA.pem use between ntbtls and + gnutls builds. [e4f3b74c91] + + * dirmngr: Fix the pool keyserver case for a single host in the + pool. [72e04b03b1a7] + + * scd: Fix the use case of verify_chv2 by CHECKPIN. [61aea64b3c] + + * scd: Various improvements to the ccid-driver. [#4616,#5065] + + * scd: Minor fixes for Yubikey [25bec16d0b] + + * gpgconf: New option --show-versions. + + * w32: Install gpg-check-pattern and example profiles. Install + Windows subsystem variant of gpgconf (gpgconf-w32). + + * i18n: Complete overhaul and completion of the Italian translation. + Thanks to Denis Renzi. + + * Require Libgcrypt 1.8 because 1.7 has long reached end-of-life. + + Release-info: https://dev.gnupg.org/T5052 + See-also: gnupg-announce/2020q4/000449.html + + Noteworthy changes in version 2.2.23 (2020-09-03) ------------------------------------------------- @@ -665,12 +723,17 @@ Noteworthy changes in version 2.2.6 (2018-04-09) * gpg: Print the keygrips in the --card-status. + * gpg: Improve the OpenPGP card's factory-reset. [7f765a98fd] + * scd: Support KDF DO setup. [#3823] * scd: Fix some issues with PC/SC on Windows. [#3825] * scd: Fix suspend/resume handling in the CCID driver. + * scd: Fix a race condition in the CCID driver leading to a segv for + some readers. [#5121] + * agent: Evict cached passphrases also via a timer. [#3829] * agent: Use separate passphrase caches depending on the request diff --git a/agent/Makefile.am b/agent/Makefile.am index 11d5427..f0ba964 100644 --- a/agent/Makefile.am +++ b/agent/Makefile.am @@ -25,7 +25,9 @@ libexec_PROGRAMS += gpg-preset-passphrase endif noinst_PROGRAMS = $(TESTS) -EXTRA_DIST = ChangeLog-2011 gpg-agent-w32info.rc all-tests.scm +EXTRA_DIST = ChangeLog-2011 \ + gpg-agent-w32info.rc gpg-agent.w32-manifest.in \ + all-tests.scm AM_CPPFLAGS = @@ -33,7 +35,10 @@ AM_CPPFLAGS = include $(top_srcdir)/am/cmacros.am if HAVE_W32_SYSTEM -resource_objs += gpg-agent-w32info.o +gpg_agent_robjs = $(resource_objs) gpg-agent-w32info.o +gpg-agent-w32info.o : gpg-agent.w32-manifest +else +gpg_agent_robjs = endif AM_CFLAGS = $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) @@ -69,9 +74,9 @@ gpg_agent_CFLAGS = $(AM_CFLAGS) $(LIBASSUAN_CFLAGS) $(NPTH_CFLAGS) \ gpg_agent_LDADD = $(commonpth_libs) \ $(LIBGCRYPT_LIBS) $(LIBASSUAN_LIBS) $(NPTH_LIBS) \ $(GPG_ERROR_LIBS) $(LIBINTL) $(NETLIBS) $(LIBICONV) \ - $(resource_objs) + $(gpg_agent_robjs) gpg_agent_LDFLAGS = $(extra_bin_ldflags) -gpg_agent_DEPENDENCIES = $(resource_objs) +gpg_agent_DEPENDENCIES = $(gpg_agent_robjs) gpg_protect_tool_SOURCES = \ protect-tool.c \ diff --git a/agent/agent.h b/agent/agent.h index 4d981ad..fb46412 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -545,10 +545,12 @@ void agent_reload_trustlist (void); /*-- divert-scd.c --*/ int divert_pksign (ctrl_t ctrl, const char *desc_text, const unsigned char *digest, size_t digestlen, int algo, + const unsigned char *grip, const unsigned char *shadow_info, unsigned char **r_sig, size_t *r_siglen); int divert_pkdecrypt (ctrl_t ctrl, const char *desc_text, const unsigned char *cipher, + const unsigned char *grip, const unsigned char *shadow_info, char **r_buf, size_t *r_len, int *r_padding); int divert_generic_cmd (ctrl_t ctrl, diff --git a/agent/command-ssh.c b/agent/command-ssh.c index a26d604..bcc78bd 100644 --- a/agent/command-ssh.c +++ b/agent/command-ssh.c @@ -216,7 +216,7 @@ struct ssh_key_type_spec struct ssh_control_file_s { char *fname; /* Name of the file. */ - FILE *fp; /* This is never NULL. */ + estream_t fp; /* This is never NULL. */ int lnr; /* The current line number. */ struct { int valid; /* True if the data of this structure is valid. */ @@ -852,7 +852,7 @@ open_control_file (ssh_control_file_t *r_cf, int append) } /* FIXME: With "a+" we are not able to check whether this will be created and thus the blurb needs to be written first. */ - cf->fp = fopen (cf->fname, append? "a+":"r"); + cf->fp = es_fopen (cf->fname, append? "a+":"r"); if (!cf->fp && errno == ENOENT) { estream_t stream = es_fopen (cf->fname, "wx,mode=-rw-r"); @@ -865,7 +865,7 @@ open_control_file (ssh_control_file_t *r_cf, int append) } es_fputs (sshcontrolblurb, stream); es_fclose (stream); - cf->fp = fopen (cf->fname, append? "a+":"r"); + cf->fp = es_fopen (cf->fname, append? "a+":"r"); } if (!cf->fp) @@ -882,7 +882,7 @@ open_control_file (ssh_control_file_t *r_cf, int append) if (err && cf) { if (cf->fp) - fclose (cf->fp); + es_fclose (cf->fp); xfree (cf->fname); xfree (cf); } @@ -896,9 +896,9 @@ open_control_file (ssh_control_file_t *r_cf, int append) static void rewind_control_file (ssh_control_file_t cf) { - fseek (cf->fp, 0, SEEK_SET); + es_fseek (cf->fp, 0, SEEK_SET); cf->lnr = 0; - clearerr (cf->fp); + es_clearerr (cf->fp); } @@ -907,7 +907,7 @@ close_control_file (ssh_control_file_t cf) { if (!cf) return; - fclose (cf->fp); + es_fclose (cf->fp); xfree (cf->fname); xfree (cf); } @@ -924,13 +924,13 @@ read_control_file_item (ssh_control_file_t cf) long ttl = 0; cf->item.valid = 0; - clearerr (cf->fp); + es_clearerr (cf->fp); do { - if (!fgets (line, DIM(line)-1, cf->fp) ) + if (!es_fgets (line, DIM(line)-1, cf->fp) ) { - if (feof (cf->fp)) + if (es_feof (cf->fp)) return gpg_error (GPG_ERR_EOF); return gpg_error_from_syserror (); } @@ -939,7 +939,7 @@ read_control_file_item (ssh_control_file_t cf) if (!*line || line[strlen(line)-1] != '\n') { /* Eat until end of line */ - while ( (c=getc (cf->fp)) != EOF && c != '\n') + while ((c = es_getc (cf->fp)) != EOF && c != '\n') ; return gpg_error (*line? GPG_ERR_LINE_TOO_LONG : GPG_ERR_INCOMPLETE_LINE); @@ -1095,7 +1095,7 @@ add_control_entry (ctrl_t ctrl, ssh_key_type_spec_t *spec, /* Not yet in the file - add it. Because the file has been opened in append mode, we simply need to write to it. */ tp = localtime (&atime); - fprintf (cf->fp, + es_fprintf (cf->fp, ("# %s key added on: %04d-%02d-%02d %02d:%02d:%02d\n" "# Fingerprints: %s\n" "# %s\n" diff --git a/agent/command.c b/agent/command.c index 9e3483e..8642498 100644 --- a/agent/command.c +++ b/agent/command.c @@ -1260,7 +1260,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line) ctrl_t ctrl = assuan_get_pointer (ctx); int err; unsigned char grip[20]; - DIR *dir = NULL; + gnupg_dir_t dir = NULL; int list_mode; int opt_data, opt_ssh_fpr, opt_with_ssh; ssh_control_file_t cf = NULL; @@ -1316,7 +1316,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line) else if (list_mode) { char *dirname; - struct dirent *dir_entry; + gnupg_dirent_t dir_entry; dirname = make_filename_try (gnupg_homedir (), GNUPG_PRIVATE_KEYS_DIR, NULL); @@ -1325,7 +1325,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line) err = gpg_error_from_syserror (); goto leave; } - dir = opendir (dirname); + dir = gnupg_opendir (dirname); if (!dir) { err = gpg_error_from_syserror (); @@ -1334,7 +1334,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line) } xfree (dirname); - while ( (dir_entry = readdir (dir)) ) + while ( (dir_entry = gnupg_readdir (dir)) ) { if (strlen (dir_entry->d_name) != 44 || strcmp (dir_entry->d_name + 40, ".key")) @@ -1385,8 +1385,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line) leave: ssh_close_control_file (cf); - if (dir) - closedir (dir); + gnupg_closedir (dir); if (err && gpg_err_code (err) != GPG_ERR_NOT_FOUND) leave_cmd (ctx, err); return err; @@ -3173,7 +3172,6 @@ cmd_getinfo (assuan_context_t ctx, char *line) } else if (!strcmp (line, "jent_active")) { -#if GCRYPT_VERSION_NUMBER >= 0x010800 char *buf; char *fields[5]; @@ -3185,9 +3183,6 @@ cmd_getinfo (assuan_context_t ctx, char *line) else rc = gpg_error (GPG_ERR_FALSE); gcry_free (buf); -#else - rc = gpg_error (GPG_ERR_FALSE); -#endif } else if (!strcmp (line, "s2k_count_cal")) { diff --git a/agent/cvt-openpgp.c b/agent/cvt-openpgp.c index 758eab9..ff153c3 100644 --- a/agent/cvt-openpgp.c +++ b/agent/cvt-openpgp.c @@ -158,7 +158,7 @@ convert_secret_key (gcry_sexp_t *r_key, int pubkey_algo, gcry_mpi_t *skey, if (!strcmp (curve, "Ed25519")) /* Do not store the OID as name but the real name and the EdDSA flag. */ - format = "(private-key(ecc(curve %s)(flags eddsa)(q%m)(d%m)))"; + format = "(private-key(ecc(curve %s)(flags eddsa)(q%m)(d%M)))"; else if (!strcmp (curve, "Curve25519")) format = "(private-key(ecc(curve %s)(flags djb-tweak)(q%m)(d%m)))"; else diff --git a/agent/divert-scd.c b/agent/divert-scd.c index b79f7a8..70a71e9 100644 --- a/agent/divert-scd.c +++ b/agent/divert-scd.c @@ -79,7 +79,7 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid) rc = agent_card_serialno (ctrl, &serialno, want_sn); if (!rc) { - log_debug ("detected card with S/N %s\n", serialno); + log_info ("detected card with S/N %s\n", serialno); i = strcmp (serialno, want_sn); xfree (serialno); serialno = NULL; @@ -93,13 +93,13 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid) } else if (gpg_err_code (rc) == GPG_ERR_ENODEV) { - log_debug ("no device present\n"); + log_info ("no device present\n"); rc = 0; no_card = 1; } else if (gpg_err_code (rc) == GPG_ERR_CARD_NOT_PRESENT) { - log_debug ("no card present\n"); + log_info ("no card present\n"); rc = 0; no_card = 2; } @@ -436,6 +436,7 @@ getpin_cb (void *opaque, const char *desc_text, const char *info, int divert_pksign (ctrl_t ctrl, const char *desc_text, const unsigned char *digest, size_t digestlen, int algo, + const unsigned char *grip, const unsigned char *shadow_info, unsigned char **r_sig, size_t *r_siglen) { @@ -450,6 +451,22 @@ divert_pksign (ctrl_t ctrl, const char *desc_text, if (rc) return rc; + /* For OpenPGP cards we better use the keygrip as key reference. + * This has the advantage that app-openpgp can check that the stored + * key matches our expectation. This is important in case new keys + * have been created on the same card but the sub file has not been + * updated. In that case we would get a error from our final + * signature checking code or, if the pubkey algo is different, + * weird errors from the card (Conditions of use not satisfied). */ + if (kid && grip && !strncmp (kid, "OPENPGP.", 8)) + { + xfree (kid); + kid = bin2hex (grip, KEYGRIP_LEN, NULL); + if (!kid) + return gpg_error_from_syserror (); + } + + if (algo == MD_USER_TLS_MD5SHA1) { int save = ctrl->use_auth_call; @@ -491,6 +508,7 @@ divert_pksign (ctrl_t ctrl, const char *desc_text, int divert_pkdecrypt (ctrl_t ctrl, const char *desc_text, const unsigned char *cipher, + const unsigned char *grip, const unsigned char *shadow_info, char **r_buf, size_t *r_len, int *r_padding) { @@ -585,6 +603,21 @@ divert_pkdecrypt (ctrl_t ctrl, const char *desc_text, if (rc) return rc; + /* For OpenPGP cards we better use the keygrip as key reference. + * This has the advantage that app-openpgp can check that the stored + * key matches our expectation. This is important in case new keys + * have been created on the same card but the sub file has not been + * updated. In that case we would get a error from our final + * signature checking code or, if the pubkey algo is different, + * weird errors from the card (Conditions of use not satisfied). */ + if (kid && grip && !strncmp (kid, "OPENPGP.", 8)) + { + xfree (kid); + kid = bin2hex (grip, KEYGRIP_LEN, NULL); + if (!kid) + return gpg_error_from_syserror (); + } + rc = agent_card_pkdecrypt (ctrl, kid, getpin_cb, ctrl, NULL, ciphertext, ciphertextlen, &plaintext, &plaintextlen, r_padding); diff --git a/agent/findkey.c b/agent/findkey.c index fa09d64..cea2195 100644 --- a/agent/findkey.c +++ b/agent/findkey.c @@ -170,7 +170,7 @@ agent_write_private_key (const unsigned char *grip, /* FIXME: Write to a temp file first so that write failures during key updates won't lead to a key loss. */ - if (!force && !access (fname, F_OK)) + if (!force && !gnupg_access (fname, F_OK)) { log_error ("secret key file '%s' already exists\n", fname); xfree (fname); @@ -1377,7 +1377,7 @@ agent_key_available (const unsigned char *grip) fname = make_filename (gnupg_homedir (), GNUPG_PRIVATE_KEYS_DIR, hexgrip, NULL); - result = !access (fname, R_OK)? 0 : -1; + result = !gnupg_access (fname, R_OK)? 0 : -1; xfree (fname); return result; } diff --git a/agent/gpg-agent-w32info.rc b/agent/gpg-agent-w32info.rc index d586cad..a0311b2 100644 --- a/agent/gpg-agent-w32info.rc +++ b/agent/gpg-agent-w32info.rc @@ -48,3 +48,5 @@ VALUE "Translation", 0x409, 0x4b0 END END + +1 RT_MANIFEST "gpg-agent.w32-manifest" diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index e03cc6b..795f282 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -984,9 +984,7 @@ thread_init_once (void) * has already been initialized but at that point nPth was not * initialized and thus Libgcrypt could not set its system call * clamp. */ -#if GCRYPT_VERSION_NUMBER >= 0x010800 /* 1.8.0 */ gcry_control (GCRYCTL_REINIT_SYSCALL_CLAMP, 0, 0); -#endif } @@ -1156,7 +1154,7 @@ main (int argc, char **argv ) if (configname) { configlineno = 0; - configfp = fopen (configname, "r"); + configfp = gnupg_fopen (configname, "r"); if (!configfp) { if (default_config) @@ -1864,23 +1862,6 @@ agent_libgcrypt_progress_cb (void *data, const char *what, int printchar, break; if (dispatch && dispatch->cb) dispatch->cb (dispatch->ctrl, what, printchar, current, total); - - /* Libgcrypt < 1.8 does not know about nPth and thus when it reads - * from /dev/random this will block the process. To mitigate this - * problem we yield the thread when Libgcrypt tells us that it needs - * more entropy. This way other threads have chance to run. */ -#if GCRYPT_VERSION_NUMBER < 0x010800 /* 1.8.0 */ - if (what && !strcmp (what, "need_entropy")) - { -#if GPGRT_VERSION_NUMBER < 0x011900 /* 1.25 */ - /* In older gpg-error versions gpgrt_yield is buggy for use with - * nPth and thus we need to resort to a sleep call. */ - npth_usleep (1000); /* 1ms */ -#else - gpgrt_yield (); -#endif - } -#endif } @@ -2045,7 +2026,7 @@ reread_configuration (void) if (!config_filename) return; /* No config file. */ - fp = fopen (config_filename, "r"); + fp = gnupg_fopen (config_filename, "r"); if (!fp) { log_info (_("option file '%s': %s\n"), @@ -2307,17 +2288,27 @@ create_private_keys_directory (const char *home) struct stat statbuf; fname = make_filename (home, GNUPG_PRIVATE_KEYS_DIR, NULL); - if (stat (fname, &statbuf) && errno == ENOENT) + if (gnupg_stat (fname, &statbuf) && errno == ENOENT) { if (gnupg_mkdir (fname, "-rwx")) log_error (_("can't create directory '%s': %s\n"), fname, strerror (errno) ); else if (!opt.quiet) log_info (_("directory '%s' created\n"), fname); + + if (gnupg_chmod (fname, "-rwx")) + log_error (_("can't set permissions of '%s': %s\n"), + fname, strerror (errno)); + } + else + { + /* The file exists or another error. Make sure we have sensible + * permissions. We enforce rwx for user but keep existing group + * permissions. Permissions for other are always cleared. */ + if (gnupg_chmod (fname, "-rwx...---")) + log_error (_("can't set permissions of '%s': %s\n"), + fname, strerror (errno)); } - if (gnupg_chmod (fname, "-rwx")) - log_error (_("can't set permissions of '%s': %s\n"), - fname, strerror (errno)); xfree (fname); } @@ -2336,7 +2327,7 @@ create_directories (void) char *home; home = make_filename (gnupg_homedir (), NULL); - if ( stat (home, &statbuf) ) + if (gnupg_stat (home, &statbuf)) { if (errno == ENOENT) { @@ -2424,7 +2415,7 @@ handle_tick (void) /* Check whether the homedir is still available. */ if (!shutdown_pending && (!have_homedir_inotify || !reliable_homedir_inotify) - && stat (gnupg_homedir (), &statbuf) && errno == ENOENT) + && gnupg_stat (gnupg_homedir (), &statbuf) && errno == ENOENT) { shutdown_pending = 1; log_info ("homedir has been removed - shutting down\n"); diff --git a/agent/gpg-agent.w32-manifest.in b/agent/gpg-agent.w32-manifest.in new file mode 100644 index 0000000..d865aef --- /dev/null +++ b/agent/gpg-agent.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (Private key daemon)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpg-agent" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/agent/pkdecrypt.c b/agent/pkdecrypt.c index 06a8e0b..6aed96b 100644 --- a/agent/pkdecrypt.c +++ b/agent/pkdecrypt.c @@ -86,7 +86,8 @@ agent_pkdecrypt (ctrl_t ctrl, const char *desc_text, goto leave; } - rc = divert_pkdecrypt (ctrl, desc_text, ciphertext, shadow_info, + rc = divert_pkdecrypt (ctrl, desc_text, ciphertext, + ctrl->keygrip, shadow_info, &buf, &len, r_padding); if (rc) { diff --git a/agent/pksign.c b/agent/pksign.c index f54af08..09d61b8 100644 --- a/agent/pksign.c +++ b/agent/pksign.c @@ -356,6 +356,7 @@ agent_pksign_do (ctrl_t ctrl, const char *cache_nonce, err = divert_pksign (ctrl, desc2? desc2 : desc_text, data, datalen, ctrl->digest.algo, + ctrl->keygrip, shadow_info, &buf, &len); xfree (desc2); } @@ -473,12 +474,6 @@ agent_pksign_do (ctrl_t ctrl, const char *cache_nonce, if (err) goto leave; - if (dsaalgo == 0 && GCRYPT_VERSION_NUMBER < 0x010700) - { - /* It's RSA and Libgcrypt < 1.7 */ - check_signature = 1; - } - if (DBG_CRYPTO) { gcry_log_debugsxp ("skey", s_skey); diff --git a/agent/protect-tool.c b/agent/protect-tool.c index 0ba31c1..f55a735 100644 --- a/agent/protect-tool.c +++ b/agent/protect-tool.c @@ -275,7 +275,7 @@ read_file (const char *fname, size_t *r_length) { struct stat st; - fp = fopen (fname, "rb"); + fp = gnupg_fopen (fname, "rb"); if (!fp) { log_error ("can't open '%s': %s\n", fname, strerror (errno)); diff --git a/agent/protect.c b/agent/protect.c index 1766909..87df685 100644 --- a/agent/protect.c +++ b/agent/protect.c @@ -1725,6 +1725,7 @@ parse_shadow_info (const unsigned char *shadow_info, } memcpy (*r_idstr, s, n); (*r_idstr)[n] = 0; + trim_spaces (*r_idstr); } /* Parse the optional PINLEN. */ diff --git a/agent/trustlist.c b/agent/trustlist.c index af177b2..50f2ad4 100644 --- a/agent/trustlist.c +++ b/agent/trustlist.c @@ -186,6 +186,7 @@ read_one_trustfile (const char *fname, int allow_include, { char *etcname; gpg_error_t err2; + gpg_err_code_t ec; if (!allow_include) { @@ -199,7 +200,7 @@ read_one_trustfile (const char *fname, int allow_include, if ( !strcmp (etcname, fname) ) /* Same file. */ log_info (_("statement \"%s\" ignored in '%s', line %d\n"), "include-default", fname, lnr); - else if ( access (etcname, F_OK) && errno == ENOENT ) + else if ((ec=gnupg_access (etcname, F_OK)) && ec == GPG_ERR_ENOENT) { /* A non existent system trustlist is not an error. Just print a note. */ @@ -337,6 +338,7 @@ read_trustfiles (void) size_t tablesize; char *fname; int allow_include = 1; + gpg_err_code_t ec; tablesize = 20; table = xtrycalloc (tablesize, sizeof *table); @@ -352,13 +354,13 @@ read_trustfiles (void) return err; } - if ( access (fname, F_OK) ) + if ((ec = gnupg_access (fname, F_OK))) { - if ( errno == ENOENT ) + if ( ec == GPG_ERR_ENOENT ) ; /* Silently ignore a non-existing trustfile. */ else { - err = gpg_error_from_syserror (); + err = gpg_error (ec); log_error (_("error opening '%s': %s\n"), fname, gpg_strerror (err)); } xfree (fname); @@ -602,6 +604,7 @@ gpg_error_t agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag) { gpg_error_t err = 0; + gpg_err_code_t ec; char *desc; char *fname; estream_t fp; @@ -619,7 +622,7 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag) if (!fname) return gpg_error_from_syserror (); - if ( access (fname, W_OK) && errno != ENOENT) + if ((ec = access (fname, W_OK)) && ec != GPG_ERR_ENOENT) { xfree (fname); return gpg_error (GPG_ERR_EPERM); @@ -752,12 +755,12 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag) xfree (nameformatted); return err; } - if ( access (fname, F_OK) && errno == ENOENT) + if ((ec = access (fname, F_OK)) && ec == GPG_ERR_ENOENT) { fp = es_fopen (fname, "wx,mode=-rw-r"); if (!fp) { - err = gpg_error_from_syserror (); + err = gpg_error (ec); log_error ("can't create '%s': %s\n", fname, gpg_strerror (err)); xfree (fname); unlock_trusttable (); diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk index f6e97ea..7dc5be4 100644 --- a/build-aux/speedo.mk +++ b/build-aux/speedo.mk @@ -110,7 +110,7 @@ help: @echo 'Use CUSTOM_SWDB=1 for an already downloaded swdb.lst.' @echo 'Use WIXPREFIX to provide the WIX binaries for the MSI package.' @echo ' Using WIX also requires wine with installed wine mono.' - @echo ' Seee help-wixlib for more information' + @echo ' See help-wixlib for more information' help-wixlib: @echo 'The buildsystem can create a wixlib to build MSI packages.' diff --git a/build-aux/speedo/w32/inst.nsi b/build-aux/speedo/w32/inst.nsi index fb452d5..9eb4fb4 100644 --- a/build-aux/speedo/w32/inst.nsi +++ b/build-aux/speedo/w32/inst.nsi @@ -627,6 +627,7 @@ Section "GnuPG" SEC_gnupg File "bin/gpgtar.exe" File "libexec/dirmngr_ldap.exe" File "libexec/gpg-preset-passphrase.exe" + File "libexec/gpg-check-pattern.exe" File "libexec/gpg-wks-client.exe" ClearErrors @@ -657,6 +658,11 @@ Section "GnuPG" SEC_gnupg File "share/gnupg/distsigkey.gpg" File "share/gnupg/sks-keyservers.netCA.pem" + SetOutPath "$INSTDIR\share\doc\gnupg\examples" + File "share/doc/gnupg/examples/VS-NfD.prf" + File "share/doc/gnupg/examples/Automatic.prf" + File "share/doc/gnupg/examples/pwpattern.list" + SetOutPath "$INSTDIR\share\locale\ca\LC_MESSAGES" File share/locale/ca/LC_MESSAGES/gnupg2.mo SetOutPath "$INSTDIR\share\locale\cs\LC_MESSAGES" @@ -1315,8 +1321,14 @@ Section "-un.gnupg" Delete "$INSTDIR\bin\gpgtar.exe" Delete "$INSTDIR\bin\dirmngr_ldap.exe" Delete "$INSTDIR\bin\gpg-preset-passphrase.exe" + Delete "$INSTDIR\bin\gpg-check-pattern.exe" Delete "$INSTDIR\bin\gpg-wks-client.exe" + Delete "$INSTDIR\share\doc\gnupg\examples\VS-NfD.prf" + Delete "$INSTDIR\share\doc\gnupg\examples\Automatic.prf" + Delete "$INSTDIR\share\doc\gnupg\examples\pwpattern.list" + RMDir "$INSTDIR\share\doc\gnupg\examples" + Delete "$INSTDIR\share\gnupg\sks-keyservers.netCA.pem" Delete "$INSTDIR\share\gnupg\dirmngr-conf.skel" Delete "$INSTDIR\share\gnupg\distsigkey.gpg" diff --git a/build-aux/speedo/w32/wixlib.wxs b/build-aux/speedo/w32/wixlib.wxs index a92fbf6..d3ffc08 100644 --- a/build-aux/speedo/w32/wixlib.wxs +++ b/build-aux/speedo/w32/wixlib.wxs @@ -64,6 +64,9 @@ and then manually edited: <Component Id="cmp6C1FB70721B208E33DB24296B93AB93F" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="FE29D2AA-3151-4421-B8C0-355F69F267A1"> <File Id="fil563D2C0464DCE7ECADE6E15C0FC65821" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-preset-passphrase.exe"/> </Component> + <Component Id="cmp6C1FB70721B208E33DB24296B93AB940" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="FE29D2AA-3151-4421-B8C0-355F69F267A2"> + <File Id="fil563D2C0464DCE7ECADE6E15C0FC65822" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-check-pattern.exe"/> + </Component> <Component Id="cmpB87CCF9DDCB6D9B36B92B0F9FA24FDC9" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="9BB809F3-C09B-4A1E-B52D-B68CBE59AE3B"> <File Id="fil8A3F9D3F6E36120B183DDF4981D84C1B" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-wks-client.exe"/> </Component> @@ -73,6 +76,9 @@ and then manually edited: <Component Id="cmpAF601EA2DF4EFD403CBF65A0D5162912" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="28A7D50E-4BC0-4A38-8420-52C5D1EB3F55"> <File Id="fil00B1F6AD370147577D6F7C998ACE6121" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgconf.exe"/> </Component> + <Component Id="cmpAF601EA2DF4EFD403CBF65A0D5162922" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="EEF227D9-1FA3-4A96-AF86-12D1FDC12925"> + <File Id="fil00B1F6AD370147577D6F7C998ACE6122" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgconf-w32.exe"/> + </Component> <Component Id="cmp3BA8A06E4085F542FDAA78BAFB507AD4" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="E026569F-F37A-49FC-A529-68BDE3097218"> <File Id="fil1A596ECA8DC19F8EC626168033269CFE" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpgme-w32spawn.exe"/> </Component> @@ -152,7 +158,13 @@ and then manually edited: <File Id="fil0615847C26E386E0B892124531F2ABBC" KeyPath="yes" Source="$(var.SourceDir)\lib\libnpth.dll.a" Name="libnpth.imp"/> </Component> <Component Id="cmp909B0412FDFCFD5092D93932AF982A72" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F610"> - <File Id="fil322067E40CE41C36574A7CC520D75876" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\vsnfd.prf" Name="VS-NfD.prf"/> + <File Id="fil322067E40CE41C36574A7CC520D75876" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\VS-NfD.prf" Name="VS-NfD.prf"/> + </Component> + <Component Id="cmp909B0412FDFCFD5092D93932AF982A73" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F611"> + <File Id="fil322067E40CE41C36574A7CC520D75877" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\Automatic.prf" Name="Automatic.prf"/> + </Component> + <Component Id="cmp909B0412FDFCFD5092D93932AF982A74" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F612"> + <File Id="fil322067E40CE41C36574A7CC520D75878" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\pwpattern.list" Name="pwpattern.list"/> </Component> <Component Id="cmp59D652F2B6BBFD90563BF58D6CE6BE7B" Directory="dirF4B1502A83344E3C92AB58989653B465" Guid="1C51D4AF-B308-40A3-B8D8-CEDA5AB2A383"> <File Id="filCB1BD20C87EE88A17D7502E26268DA65" KeyPath="yes" Source="$(var.SourceDir)\share\gnupg\distsigkey.gpg"/> diff --git a/common/argparse.c b/common/argparse.c index c29f8e9..c04cf83 100644 --- a/common/argparse.c +++ b/common/argparse.c @@ -70,8 +70,22 @@ #else /* Used by GnuPG */ +/* GnuPG has always been a part of the GNU project and thus we have + * shown the FSF as holder of the copyright. We continue to do so for + * the reason that without the FSF the free software used all over the + * world would not have come into existence. However, under Windows + * we print a different copyright string with --version because the + * copyright assignments of g10 Code and Werner Koch were terminated + * many years ago, g10 Code is still the major contributor to the + * code, and Windows is not an FSF endorsed platform. Note that the + * list of copyright holders can be found in the AUTHORS file. */ + # define ARGPARSE_GPL_VERSION 3 +# ifdef HAVE_W32_SYSTEM +# define ARGPARSE_CRIGHT_STR "Copyright (C) 2020 g10 Code GmbH" +# else # define ARGPARSE_CRIGHT_STR "Copyright (C) 2020 Free Software Foundation, Inc." +# endif #endif /*GNUPG_MAJOR_VERSION*/ diff --git a/common/compliance.c b/common/compliance.c index e533dd4..e77b1af 100644 --- a/common/compliance.c +++ b/common/compliance.c @@ -499,7 +499,6 @@ gnupg_rng_is_compliant (enum gnupg_compliance_mode compliance) /* In DE_VS mode under Windows we require that the JENT RNG * is active. */ #ifdef HAVE_W32_SYSTEM -# if GCRYPT_VERSION_NUMBER >= 0x010800 char *buf; char *fields[5]; @@ -511,9 +510,6 @@ gnupg_rng_is_compliant (enum gnupg_compliance_mode compliance) else result = 0; gcry_free (buf); -# else - result = 0; /* No JENT - can't be compliant. */ -# endif #else /*!HAVE_W32_SYSTEM*/ result = 1; /* Not Windows - RNG is good. */ #endif /*!HAVE_W32_SYSTEM*/ diff --git a/common/dotlock.c b/common/dotlock.c index 5227bb6..e2cf6f6 100644 --- a/common/dotlock.c +++ b/common/dotlock.c @@ -471,6 +471,21 @@ map_w32_to_errno (DWORD w32_err) } #endif /*HAVE_DOSISH_SYSTEM*/ + +#ifdef HAVE_W32_SYSTEM +static int +any8bitchar (const char *string) +{ + if (string) + for ( ; *string; string++) + if ((*string & 0x80)) + return 1; + return 0; +} +#endif /*HAVE_W32_SYSTEM*/ + + + /* Entirely disable all locking. This function should be called before any locking is done. It may be called right at startup of @@ -794,7 +809,7 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock) h->next = all_lockfiles; all_lockfiles = h; - h->lockname = xtrymalloc ( strlen (file_to_lock) + 6 ); + h->lockname = strconcat (file_to_lock, EXTSEP_S "lock", NULL); if (!h->lockname) { all_lockfiles = h->next; @@ -802,7 +817,6 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock) xfree (h); return NULL; } - strcpy (stpcpy(h->lockname, file_to_lock), EXTSEP_S "lock"); /* If would be nice if we would use the FILE_FLAG_DELETE_ON_CLOSE along with FILE_SHARE_DELETE but that does not work due to a race @@ -812,25 +826,24 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock) reasons why a lock file can't be created and thus the process would not stop as expected but spin until Windows crashes. Our solution is to keep the lock file open; that does not harm. */ - { -#ifdef HAVE_W32CE_SYSTEM - wchar_t *wname = utf8_to_wchar (h->lockname); - - if (wname) - h->lockhd = CreateFile (wname, - GENERIC_READ|GENERIC_WRITE, - FILE_SHARE_READ|FILE_SHARE_WRITE, - NULL, OPEN_ALWAYS, 0, NULL); - else - h->lockhd = INVALID_HANDLE_VALUE; - xfree (wname); -#else - h->lockhd = CreateFile (h->lockname, - GENERIC_READ|GENERIC_WRITE, - FILE_SHARE_READ|FILE_SHARE_WRITE, - NULL, OPEN_ALWAYS, 0, NULL); -#endif - } + if (any8bitchar (h->lockname)) + { + wchar_t *wname = utf8_to_wchar (h->lockname); + + if (wname) + h->lockhd = CreateFileW (wname, + GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, OPEN_ALWAYS, 0, NULL); + else + h->lockhd = INVALID_HANDLE_VALUE; + xfree (wname); + } + else + h->lockhd = CreateFileA (h->lockname, + GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, OPEN_ALWAYS, 0, NULL); if (h->lockhd == INVALID_HANDLE_VALUE) { int saveerrno = map_w32_to_errno (GetLastError ()); diff --git a/common/exechelp-posix.c b/common/exechelp-posix.c index 3acf74a..0782152 100644 --- a/common/exechelp-posix.c +++ b/common/exechelp-posix.c @@ -835,14 +835,15 @@ gpg_error_t gnupg_spawn_process_detached (const char *pgmname, const char *argv[], const char *envp[] ) { + gpg_err_code_t ec; pid_t pid; int i; if (getuid() != geteuid()) return my_error (GPG_ERR_BUG); - if (access (pgmname, X_OK)) - return my_error_from_syserror (); + if ((ec = gnupg_access (pgmname, X_OK))) + return gpg_err_make (default_errsource, ec); pid = fork (); if (pid == (pid_t)(-1)) diff --git a/common/exechelp-w32.c b/common/exechelp-w32.c index da17450..7bd9d22 100644 --- a/common/exechelp-w32.c +++ b/common/exechelp-w32.c @@ -855,13 +855,13 @@ gnupg_spawn_process_detached (const char *pgmname, const char *argv[], STARTUPINFO si; int cr_flags; char *cmdline; - + gpg_err_code_t ec; /* We don't use ENVP. */ (void)envp; - if (access (pgmname, X_OK)) - return my_error_from_syserror (); + if ((ec = gnupg_access (pgmname, X_OK))) + return gpg_err_make (default_errsource, ec); /* Prepare security attributes. */ memset (&sec_attr, 0, sizeof sec_attr ); diff --git a/common/gettime.c b/common/gettime.c index 4ad99f5..03c152f 100644 --- a/common/gettime.c +++ b/common/gettime.c @@ -31,6 +31,9 @@ #include <stdlib.h> #include <time.h> #include <ctype.h> +#ifdef HAVE_LOCALE_H +#include <locale.h> +#endif #ifdef HAVE_LANGINFO_H #include <langinfo.h> #endif @@ -679,9 +682,9 @@ isotimestamp (u32 stamp) const char * asctimestamp (u32 stamp) { - static char buffer[50]; + static char buffer[80]; #if defined (HAVE_STRFTIME) && defined (HAVE_NL_LANGINFO) - static char fmt[50]; + static char fmt[80]; #endif struct tm *tp; time_t atime = stamp; @@ -707,6 +710,32 @@ asctimestamp (u32 stamp) zone at all. */ strftime (buffer, DIM(buffer)-1, "%c", tp); # else +# if HAVE_W32_SYSTEM + { + static int done; + + if (!done) + { + /* The locale names as used by Windows are in the form + * "German_Germany.1252" or "German_Austria.1252" with + * alternate names similar to Unix, e.g. "de-DE". However + * that is the theory. On current Windows and Mingw the + * alternate names do not work. We would need a table to map + * them from the short names as provided by gpgrt to the long + * names and append some code page. For now we use "" and + * take the locale from the user's system settings. Thus the + * standard Unix envvars don't work for time and may mismatch + * with the string translations. The new UCRT available since + * 2018 has a lot of additional support but that will for sure + * break other things. We should move to ISO strings to get + * rid of such problems. */ + setlocale (LC_TIME, ""); + done = 1; + /* log_debug ("LC_ALL now '%s'\n", setlocale (LC_ALL, NULL)); */ + /* log_debug ("LC_TIME now '%s'\n", setlocale (LC_TIME, NULL)); */ + } + } +# endif /* FIXME: we should check whether the locale appends a " %Z" These * locales from glibc don't put the " %Z": fi_FI hr_HR ja_JP lt_LT * lv_LV POSIX ru_RU ru_SU sv_FI sv_SE zh_CN. */ diff --git a/common/helpfile.c b/common/helpfile.c index 7cb01a4..7a7a235 100644 --- a/common/helpfile.c +++ b/common/helpfile.c @@ -41,14 +41,14 @@ static char * findkey_fname (const char *key, const char *fname) { gpg_error_t err = 0; - FILE *fp; + estream_t fp; int lnr = 0; int c; char *p, line[256]; int in_item = 0; membuf_t mb = MEMBUF_ZERO; - fp = fopen (fname, "r"); + fp = es_fopen (fname, "r"); if (!fp) { if (errno != ENOENT) @@ -59,14 +59,14 @@ findkey_fname (const char *key, const char *fname) return NULL; } - while (fgets (line, DIM(line)-1, fp)) + while (es_fgets (line, DIM(line)-1, fp)) { lnr++; if (!*line || line[strlen(line)-1] != '\n') { /* Eat until end of line. */ - while ( (c=getc (fp)) != EOF && c != '\n') + while ((c = es_getc (fp)) != EOF && c != '\n') ; err = gpg_error (*line? GPG_ERR_LINE_TOO_LONG : GPG_ERR_INCOMPLETE_LINE); @@ -130,14 +130,14 @@ findkey_fname (const char *key, const char *fname) } } - if ( !err && ferror (fp) ) + if ( !err && es_ferror (fp) ) { err = gpg_error_from_syserror (); log_error (_("error reading '%s', line %d: %s\n"), fname, lnr, gpg_strerror (err)); } - fclose (fp); + es_fclose (fp); if (is_membuf_ready (&mb)) { /* We have collected something. */ diff --git a/common/homedir.c b/common/homedir.c index 4b6e46e..85e09c4 100644 --- a/common/homedir.c +++ b/common/homedir.c @@ -61,6 +61,7 @@ #include "util.h" #include "sysutils.h" +#include "i18n.h" #include "zb32.h" /* The GnuPG homedir. This is only accessed by the functions @@ -117,14 +118,16 @@ w32_try_mkdir (const char *dir) #endif -/* This is a helper function to load a Windows function from either of - one DLLs. */ +/* This is a helper function to load and call a Windows function from + * either of one DLLs. On success an UTF-8 file name is returned. + * ERRNO is _not_ set on error. */ #ifdef HAVE_W32_SYSTEM -static HRESULT -w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e) +static char * +w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d) { static int initialized; - static HRESULT (WINAPI * func)(HWND,int,HANDLE,DWORD,LPSTR); + static HRESULT (WINAPI * func)(HWND,int,HANDLE,DWORD,LPWSTR); + wchar_t wfname[MAX_PATH]; if (!initialized) { @@ -139,7 +142,7 @@ w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e) handle = dlopen (dllnames[i], RTLD_LAZY); if (handle) { - func = dlsym (handle, "SHGetFolderPathA"); + func = dlsym (handle, "SHGetFolderPathW"); if (!func) { dlclose (handle); @@ -149,10 +152,10 @@ w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e) } } - if (func) - return func (a,b,c,d,e); + if (func && func (a,b,c,d,wfname) >= 0) + return wchar_to_utf8 (wfname); else - return -1; + return NULL; } #endif /*HAVE_W32_SYSTEM*/ @@ -248,25 +251,17 @@ standard_homedir (void) } else { - char path[MAX_PATH]; - - /* It might be better to use LOCAL_APPDATA because this is - defined as "non roaming" and thus more likely to be kept - locally. For private keys this is desired. However, - given that many users copy private keys anyway forth and - back, using a system roaming services might be better - than to let them do it manually. A security conscious - user will anyway use the registry entry to have better - control. */ - if (w32_shgetfolderpath (NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE, - NULL, 0, path) >= 0) + char *path; + + path = w32_shgetfolderpath (NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE, + NULL, 0); + if (path) { - char *tmp = xmalloc (strlen (path) + 6 +1); - strcpy (stpcpy (tmp, path), "\\gnupg"); - dir = tmp; + dir = xstrconcat (path, "\\gnupg", NULL); + xfree (path); /* Try to create the directory if it does not yet exists. */ - if (access (dir, F_OK)) + if (gnupg_access (dir, F_OK)) w32_try_mkdir (dir); } else @@ -360,10 +355,10 @@ check_portable_app (const char *dir) char *fname; fname = xstrconcat (dir, DIRSEP_S "gpgconf.exe", NULL); - if (!access (fname, F_OK)) + if (!gnupg_access (fname, F_OK)) { strcpy (fname + strlen (fname) - 3, "ctl"); - if (!access (fname, F_OK)) + if (!gnupg_access (fname, F_OK)) { /* gpgconf.ctl file found. Record this fact. */ w32_portable_app = 1; @@ -440,7 +435,7 @@ w32_commondir (void) if (!dir) { const char *rdir; - char path[MAX_PATH]; + char *path; /* Make sure that w32_rootdir has been called so that we are able to check the portable application flag. The common dir @@ -450,19 +445,17 @@ w32_commondir (void) if (w32_portable_app) return rdir; - if (w32_shgetfolderpath (NULL, CSIDL_COMMON_APPDATA, - NULL, 0, path) >= 0) + path = w32_shgetfolderpath (NULL, CSIDL_COMMON_APPDATA, NULL, 0); + if (path) { - char *tmp = xmalloc (strlen (path) + 4 +1); - strcpy (stpcpy (tmp, path), "\\GNU"); - dir = tmp; + dir = xstrconcat (path, "\\GNU", NULL); /* No auto create of the directory. Either the installer or - the admin has to create these directories. */ + * the admin has to create these directories. */ } else { - /* Ooops: Not defined - probably an old Windows version. - Use the installation directory instead. */ + /* Folder not found or defined - probably an old Windows + * version. Use the installation directory instead. */ dir = xstrdup (rdir); } } @@ -497,6 +490,38 @@ gnupg_set_homedir (const char *newdir) } +/* Create the homedir directory only if the supplied directory name is + * the same as the default one. This way we avoid to create arbitrary + * directories when a non-default home directory is used. To cope + * with HOME, we do compare only the suffix if we see that the default + * homedir does start with a tilde. If the mkdir fails the function + * terminates the process. If QUIET is set not diagnostic is printed + * on homedir creation. */ +void +gnupg_maybe_make_homedir (const char *fname, int quiet) +{ + const char *defhome = standard_homedir (); + + if ( +#ifdef HAVE_W32_SYSTEM + ( !compare_filenames (fname, defhome) ) +#else + ( *defhome == '~' + && (strlen(fname) >= strlen (defhome+1) + && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) )) + || (*defhome != '~' && !compare_filenames( fname, defhome ) ) +#endif + ) + { + if (gnupg_mkdir (fname, "-rwx")) + log_fatal ( _("can't create directory '%s': %s\n"), + fname, strerror(errno) ); + else if (!quiet ) + log_info ( _("directory '%s' created\n"), fname ); + } +} + + /* Return the homedir. The returned string is valid until another * gnupg-set-homedir call. This is always an absolute directory name. * The function replaces the former global var opt.homedir. */ @@ -903,7 +928,7 @@ gnupg_cachedir (void) } else { - char path[MAX_PATH]; + char *path; const char *s1[] = { "GNU", "cache", "gnupg", NULL }; int s1_len; const char **comp; @@ -912,8 +937,10 @@ gnupg_cachedir (void) for (comp = s1; *comp; comp++) s1_len += 1 + strlen (*comp); - if (w32_shgetfolderpath (NULL, CSIDL_LOCAL_APPDATA|CSIDL_FLAG_CREATE, - NULL, 0, path) >= 0) + path = w32_shgetfolderpath (NULL, + CSIDL_LOCAL_APPDATA|CSIDL_FLAG_CREATE, + NULL, 0); + if (path) { char *tmp = xmalloc (strlen (path) + s1_len + 1); char *p; @@ -924,11 +951,12 @@ gnupg_cachedir (void) p = stpcpy (p, "\\"); p = stpcpy (p, *comp); - if (access (tmp, F_OK)) + if (gnupg_access (tmp, F_OK)) w32_try_mkdir (tmp); } dir = tmp; + xfree (path); } else { @@ -976,6 +1004,8 @@ get_default_pinentry_name (int reset) /* Try Gpg4win directory (with bin and without.) */ { w32_rootdir, "\\..\\Gpg4win\\bin\\pinentry.exe" }, { w32_rootdir, "\\..\\Gpg4win\\pinentry.exe" }, + /* Try a pinentry in a dir above us */ + { w32_rootdir, "\\..\\bin\\pinentry.exe" }, /* Try old Gpgwin directory. */ { w32_rootdir, "\\..\\GNU\\GnuPG\\pinentry.exe" }, /* Try a Pinentry from the common GNU dir. */ @@ -1002,7 +1032,7 @@ get_default_pinentry_name (int reset) char *name2; name2 = xstrconcat (names[i].rfnc (), names[i].name, NULL); - if (!access (name2, F_OK)) + if (!gnupg_access (name2, F_OK)) { /* Use that pinentry. */ xfree (name); diff --git a/common/iobuf.c b/common/iobuf.c index b20761b..4fd8cf5 100644 --- a/common/iobuf.c +++ b/common/iobuf.c @@ -193,6 +193,19 @@ fd_cache_strcmp (const char *a, const char *b) #endif } + +#ifdef HAVE_W32_SYSTEM +static int +any8bitchar (const char *string) +{ + if (string) + for ( ; *string; string++) + if ((*string & 0x80)) + return 1; + return 0; +} +#endif /*HAVE_W32_SYSTEM*/ + /* * Invalidate (i.e. close) a cached iobuf */ @@ -294,21 +307,23 @@ direct_open (const char *fname, const char *mode, int mode700) sm = FILE_SHARE_READ; } -#ifdef HAVE_W32CE_SYSTEM - { - wchar_t *wfname = utf8_to_wchar (fname); - if (wfname) - { - hfile = CreateFile (wfname, da, sm, NULL, cd, - FILE_ATTRIBUTE_NORMAL, NULL); - xfree (wfname); - } - else - hfile = INVALID_HANDLE_VALUE; - } -#else - hfile = CreateFile (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL); -#endif + /* We use the Unicode version of the function only if needed to + * avoid an extra conversion step. */ + if (any8bitchar (fname)) + { + wchar_t *wfname = utf8_to_wchar (fname); + if (wfname) + { + hfile = CreateFileW (wfname, da, sm, NULL, cd, + FILE_ATTRIBUTE_NORMAL, NULL); + xfree (wfname); + } + else + hfile = INVALID_HANDLE_VALUE; + } + else + hfile = CreateFileA (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL); + return hfile; #else /*!HAVE_W32_SYSTEM*/ diff --git a/common/mkdir_p.c b/common/mkdir_p.c index c26cfee..6fb98c3 100644 --- a/common/mkdir_p.c +++ b/common/mkdir_p.c @@ -78,7 +78,7 @@ gnupg_amkdir_p (const char **directory_components) /* log_debug ("%s: stat(%s)\n", __func__, dirs[i]); */ - if (!stat (dirs[i], &s)) + if (!gnupg_stat (dirs[i], &s)) { if ( ! S_ISDIR (s.st_mode)) { diff --git a/common/status.h b/common/status.h index dc62f36..d5564e4 100644 --- a/common/status.h +++ b/common/status.h @@ -35,6 +35,7 @@ enum STATUS_ENTER, STATUS_LEAVE, STATUS_ABORT, + STATUS_CANCELED_BY_USER, STATUS_GOODSIG, STATUS_BADSIG, diff --git a/common/sysutils.c b/common/sysutils.c index 2673e45..520aa56 100644 --- a/common/sysutils.c +++ b/common/sysutils.c @@ -73,6 +73,7 @@ # include <npth.h> #endif #include <fcntl.h> +#include <dirent.h> #include <assuan.h> @@ -83,6 +84,22 @@ #define tohex(n) ((n) < 10 ? ((n) + '0') : (((n) - 10) + 'A')) + +/* The object used with our opendir functions. We need to define our + * own so that we can properly handle Unicode on Windows. */ +struct gnupg_dir_s +{ +#ifdef HAVE_W32_SYSTEM + _WDIR *dir; /* The system's DIR pointer. */ +#else + DIR *dir; /* The system's DIR pointer. */ +#endif + struct gnupg_dirent_s dirent; /* The current dirent. */ + size_t namesize; /* If not 0 the allocated size of dirent.d_name. */ + char name[256]; /* Only used if NAMESIZE is 0. */ +}; + + /* Flag to tell whether special file names are enabled. See gpg.c for * an explanation of these file names. */ static int allow_special_filenames; @@ -171,6 +188,18 @@ enable_core_dumps (void) #endif } +#ifdef HAVE_W32_SYSTEM +static int +any8bitchar (const char *string) +{ + if (string) + for ( ; *string; string++) + if ((*string & 0x80)) + return 1; + return 0; +} +#endif /*HAVE_W32_SYSTEM*/ + /* Allow the use of special "-&nnn" style file names. */ void @@ -629,7 +658,7 @@ gnupg_allow_set_foregound_window (pid_t pid) int gnupg_remove (const char *fname) { -#ifdef HAVE_W32CE_SYSTEM +#ifdef HAVE_W32_SYSTEM int rc; wchar_t *wfname; @@ -638,7 +667,7 @@ gnupg_remove (const char *fname) rc = 0; else { - rc = DeleteFile (wfname); + rc = DeleteFileW (wfname); xfree (wfname); } if (!rc) @@ -650,6 +679,36 @@ gnupg_remove (const char *fname) } +/* Helper for gnupg_rename_file. */ +#ifdef HAVE_W32_SYSTEM +static int +w32_rename (const char *oldname, const char *newname) +{ + if (any8bitchar (oldname) || any8bitchar (newname)) + { + wchar_t *woldname, *wnewname; + int ret; + + woldname = utf8_to_wchar (oldname); + if (!woldname) + return -1; + wnewname = utf8_to_wchar (newname); + if (!wnewname) + { + xfree (wnewname); + return -1; + } + ret = _wrename (woldname, wnewname); + xfree (wnewname); + xfree (woldname); + return ret; + } + else + return rename (oldname, newname); +} +#endif /*HAVE_W32_SYSTEM*/ + + /* Wrapper for rename(2) to handle Windows peculiarities. If * BLOCK_SIGNALS is not NULL and points to a variable set to true, all * signals will be blocked by calling gnupg_block_all_signals; the @@ -669,7 +728,7 @@ gnupg_rename_file (const char *oldname, const char *newname, int *block_signals) gnupg_remove (newname); again: - if (rename (oldname, newname)) + if (w32_rename (oldname, newname)) { if (GetLastError () == ERROR_SHARING_VIOLATION) { @@ -722,33 +781,38 @@ gnupg_rename_file (const char *oldname, const char *newname, int *block_signals) #ifndef HAVE_W32_SYSTEM static mode_t -modestr_to_mode (const char *modestr) +modestr_to_mode (const char *modestr, mode_t oldmode) { + static struct { + char letter; + mode_t value; + } table[] = { { '-', 0 }, + { 'r', S_IRUSR }, { 'w', S_IWUSR }, { 'x', S_IXUSR }, + { 'r', S_IRGRP }, { 'w', S_IWGRP }, { 'x', S_IXGRP }, + { 'r', S_IROTH }, { 'w', S_IWOTH }, { 'x', S_IXOTH } }; + int idx; mode_t mode = 0; - if (modestr && *modestr) + /* For now we only support a string as used by ls(1) and no octal + * numbers. The first character must be a dash. */ + for (idx=0; idx < 10 && *modestr; idx++, modestr++) { - modestr++; - if (*modestr && *modestr++ == 'r') - mode |= S_IRUSR; - if (*modestr && *modestr++ == 'w') - mode |= S_IWUSR; - if (*modestr && *modestr++ == 'x') - mode |= S_IXUSR; - if (*modestr && *modestr++ == 'r') - mode |= S_IRGRP; - if (*modestr && *modestr++ == 'w') - mode |= S_IWGRP; - if (*modestr && *modestr++ == 'x') - mode |= S_IXGRP; - if (*modestr && *modestr++ == 'r') - mode |= S_IROTH; - if (*modestr && *modestr++ == 'w') - mode |= S_IWOTH; - if (*modestr && *modestr++ == 'x') - mode |= S_IXOTH; + if (*modestr == table[idx].letter) + mode |= table[idx].value; + else if (*modestr == '.') + { + if (!idx) + ; /* Skip the dummy. */ + else if ((oldmode & table[idx].value)) + mode |= (oldmode & table[idx].value); + else + mode &= ~(oldmode & table[idx].value); + } + else if (*modestr != '-') + break; } + return mode; } #endif @@ -790,7 +854,7 @@ gnupg_mkdir (const char *name, const char *modestr) because this sets ERRNO. */ return mkdir (name); #else - return mkdir (name, modestr_to_mode (modestr)); + return mkdir (name, modestr_to_mode (modestr, 0)); #endif #else /* Note that gpgrt_mkdir also sets ERRNO in addition to returing an @@ -808,7 +872,7 @@ gnupg_chdir (const char *name) #if GPG_ERROR_VERSION_NUMBER < 0x011c00 /* 1.28 */ return chdir (name); #else /* Use the improved version from libgpg_error. */ - /* Note that gpgrt_chdir also sets ERRNO in addition to returing a + /* Note that gpgrt_chdir also sets ERRNO in addition to returning a * gpg-error style error code. */ return gpgrt_chdir (name); #endif @@ -818,7 +882,8 @@ gnupg_chdir (const char *name) /* A wrapper around chmod which takes a string for the mode argument. This makes it easier to handle the mode argument which is not defined on all systems. The format of the modestring is the same - as for gnupg_mkdir. */ + as for gnupg_mkdir with extra feature that a '.' keeps the original + mode bit. */ int gnupg_chmod (const char *name, const char *modestr) { @@ -827,7 +892,19 @@ gnupg_chmod (const char *name, const char *modestr) (void)modestr; return 0; #else - return chmod (name, modestr_to_mode (modestr)); + mode_t oldmode; + if (strchr (modestr, '.')) + { + /* Get the old mode so that a '.' can copy that bit. */ + struct stat st; + + if (stat (name, &st)) + return -1; + oldmode = st.st_mode; + } + else + oldmode = 0; + return chmod (name, modestr_to_mode (modestr, oldmode)); #endif } @@ -1018,10 +1095,38 @@ gnupg_unsetenv (const char *name) /* Return the current working directory as a malloced string. Return - NULL and sets ERRNo on error. */ + NULL and sets ERRNO on error. */ char * gnupg_getcwd (void) { +#if GPGRT_VERSION_NUMBER < 0x012800 /* 1.40 */ +# ifdef HAVE_W32_SYSTEM + wchar_t wbuffer[MAX_PATH + sizeof(wchar_t)]; + DWORD wlen; + char *buf, *p; + + wlen = GetCurrentDirectoryW (MAX_PATH, wbuffer); + if (!wlen) + { + gpg_err_set_errno (EINVAL); + return NULL; + + } + else if (wlen > MAX_PATH) + { + gpg_err_set_errno (ENAMETOOLONG); + return NULL; + } + buf = wchar_to_utf8 (wbuffer); + if (buf) + { + for (p=buf; *p; p++) + if (*p == '\\') + *p = '/'; + } + return buf; + +# else /*Unix*/ char *buffer; size_t size = 100; @@ -1030,18 +1135,306 @@ gnupg_getcwd (void) buffer = xtrymalloc (size+1); if (!buffer) return NULL; -#ifdef HAVE_W32CE_SYSTEM - strcpy (buffer, "/"); /* Always "/". */ - return buffer; -#else if (getcwd (buffer, size) == buffer) return buffer; xfree (buffer); if (errno != ERANGE) return NULL; size *= 2; + } +# endif /*Unix*/ +#else + return gpgrt_getcwd (); +#endif +} + + +/* A simple wrapper around access. NAME is expected to be utf8 + * encoded. This function returns an error code and sets ERRNO. */ +gpg_err_code_t +gnupg_access (const char *name, int mode) +{ +#if GPGRT_VERSION_NUMBER < 0x012800 /* 1.40 */ +# ifdef HAVE_W32_SYSTEM + wchar_t *wfname; + gpg_err_code_t ec; + + wfname = utf8_to_wchar (name); + if (!wfname) + ec = gpg_err_code_from_syserror (); + else + { + ec = _waccess (wfname, mode)? gpg_err_code_from_syserror () : 0; + xfree (wfname); + } + return ec; +# else + return access (name, mode)? gpg_err_code_from_syserror () : 0; +# endif +#else /* gpgrt 1.40 or newer. */ + return gpgrt_access (name, mode); #endif +} + + +/* A wrapper around stat to handle Unicode file names under Windows. */ +#ifdef HAVE_STAT +int +gnupg_stat (const char *name, struct stat *statbuf) +{ +# ifdef HAVE_W32_SYSTEM + if (any8bitchar (name)) + { + wchar_t *wname; + struct _stat32 st32; + int ret; + + wname = utf8_to_wchar (name); + if (!wname) + return -1; + ret = _wstat (wname, &st32); + xfree (wname); + if (!ret) + { + statbuf->st_dev = st32.st_dev; + statbuf->st_ino = st32.st_ino; + statbuf->st_mode = st32.st_mode; + statbuf->st_nlink = st32.st_nlink; + statbuf->st_uid = st32.st_uid; + statbuf->st_gid = st32.st_gid; + statbuf->st_rdev = st32.st_rdev; + statbuf->st_size = st32.st_size; + statbuf->st_atime = st32.st_atime; + statbuf->st_mtime = st32.st_mtime; + statbuf->st_ctime = st32.st_ctime; + } + return ret; } + else + return stat (name, statbuf); +# else + return stat (name, statbuf); +# endif +} +#endif /*HAVE_STAT*/ + + +/* Wrapper around fopen for the cases where we have not yet switched + * to es_fopen. Note that for convenience the prototype is in util.h */ +FILE * +gnupg_fopen (const char *fname, const char *mode) +{ +#ifdef HAVE_W32_SYSTEM + if (any8bitchar (fname)) + { + wchar_t *wfname; + const wchar_t *wmode; + wchar_t *wmodebuf = NULL; + FILE *ret; + + wfname = utf8_to_wchar (fname); + if (!wfname) + return NULL; + if (!strcmp (mode, "r")) + wmode = L"r"; + else if (!strcmp (mode, "rb")) + wmode = L"rb"; + else if (!strcmp (mode, "w")) + wmode = L"w"; + else if (!strcmp (mode, "wb")) + wmode = L"wb"; + else + { + wmodebuf = utf8_to_wchar (mode); + if (!wmodebuf) + { + xfree (wfname); + return NULL; + } + wmode = wmodebuf; + } + ret = _wfopen (wfname, wmode); + xfree (wfname); + xfree (wmodebuf); + return ret; + } + else + return fopen (fname, mode); + +#else /*Unix*/ + return fopen (fname, mode); +#endif /*Unix*/ +} + + + +/* A wrapper around open to handle Unicode file names under Windows. */ +int +gnupg_open (const char *name, int flags, unsigned int mode) +{ +#ifdef HAVE_W32_SYSTEM + if (any8bitchar (name)) + { + wchar_t *wname; + int ret; + + wname = utf8_to_wchar (name); + if (!wname) + return -1; + ret = _wopen (wname, flags, mode); + xfree (wname); + return ret; + } + else + return open (name, flags, mode); +#else + return open (name, flags, mode); +#endif +} + + +/* A wrapper around opendir to handle Unicode file names under + * Windows. This assumes the mingw toolchain. */ +gnupg_dir_t +gnupg_opendir (const char *name) +{ +#ifdef HAVE_W32_SYSTEM + _WDIR *dir; + wchar_t *wname; +#else + DIR *dir; +#endif + gnupg_dir_t gdir; + +#ifdef HAVE_W32_SYSTEM + /* Note: See gpgtar-create for an alternative implementation which + * could be used here to avoid a mingw dependency. */ + wname = utf8_to_wchar (name); + if (!wname) + return NULL; + dir = _wopendir (wname); + xfree (wname); +#else + dir = opendir (name); +#endif + + if (!dir) + return NULL; + + gdir = xtrymalloc (sizeof *gdir); + if (!gdir) + { + int save_errno = errno; +#ifdef HAVE_W32_SYSTEM + _wclosedir (dir); +#else + closedir (dir); +#endif + gpg_err_set_errno (save_errno); + return NULL; + } + gdir->dir = dir; + gdir->namesize = 0; + gdir->dirent.d_name = gdir->name; + + return gdir; +} + + +gnupg_dirent_t +gnupg_readdir (gnupg_dir_t gdir) +{ +#ifdef HAVE_W32_SYSTEM + char *namebuffer = NULL; + struct _wdirent *de; +#else + struct dirent *de; +#endif + size_t n; + gnupg_dirent_t gde; + const char *name; + + if (!gdir) + { + gpg_err_set_errno (EINVAL); + return 0; + } + +#ifdef HAVE_W32_SYSTEM + de = _wreaddir (gdir->dir); + if (!de) + return NULL; + namebuffer = wchar_to_utf8 (de->d_name); + if (!namebuffer) + return NULL; + name = namebuffer; +#else + de = readdir (gdir->dir); + if (!de) + return NULL; + name = de->d_name; +#endif + + gde = &gdir->dirent; + n = strlen (name); + if (gdir->namesize) + { + /* Use allocated buffer. */ + if (n+1 >= gdir->namesize || !gde->d_name) + { + gdir->namesize = n + 256; + xfree (gde->d_name); + gde->d_name = xtrymalloc (gdir->namesize); + if (!gde->d_name) + return NULL; /* ERRNO is already set. */ + } + strcpy (gde->d_name, name); + } + else if (n+1 >= sizeof (gdir->name)) + { + /* Switch to allocated buffer. */ + gdir->namesize = n + 256; + gde->d_name = xtrymalloc (gdir->namesize); + if (!gde->d_name) + return NULL; /* ERRNO is already set. */ + strcpy (gde->d_name, name); + } + else + { + /* Use static buffer. */ + gde->d_name = gdir->name; + strcpy (gde->d_name, name); + } + +#ifdef HAVE_W32_SYSTEM + xfree (namebuffer); +#endif + + return gde; +} + + +int +gnupg_closedir (gnupg_dir_t gdir) +{ +#ifdef HAVE_W32_SYSTEM + _WDIR *dir; +#else + DIR *dir; +#endif + + if (!gdir) + return 0; + dir = gdir->dir; + if (gdir->namesize) + xfree (gdir->dirent.d_name); + xfree (gdir); + +#ifdef HAVE_W32_SYSTEM + return _wclosedir (dir); +#else + return closedir (dir); +#endif } diff --git a/common/sysutils.h b/common/sysutils.h index 009b14b..63c259b 100644 --- a/common/sysutils.h +++ b/common/sysutils.h @@ -46,6 +46,22 @@ typedef int gnupg_fd_t; #define FD2INT(h) (h) #endif +#ifdef HAVE_STAT +# include <sys/stat.h> +#endif + +struct gnupg_dir_s; +typedef struct gnupg_dir_s *gnupg_dir_t; +struct gnupg_dirent_s +{ + /* We don't have a d_ino because that can't be used on Windows + * anyway. D_NAME is a pointer into the gnupg_dir_s which has a + * static buffer or allocates sufficient space as needed. This is + * only valid after gnupg_readdir. */ + char *d_name; +}; +typedef struct gnupg_dirent_s *gnupg_dirent_t; + void trap_unaligned (void); int disable_core_dumps (void); @@ -72,6 +88,14 @@ char *gnupg_mkdtemp (char *template); int gnupg_setenv (const char *name, const char *value, int overwrite); int gnupg_unsetenv (const char *name); char *gnupg_getcwd (void); +gpg_err_code_t gnupg_access (const char *name, int mode); +#ifdef HAVE_STAT +int gnupg_stat (const char *name, struct stat *statbuf); +#endif /*HAVE_STAT*/ +int gnupg_open (const char *name, int flags, unsigned int mode); +gnupg_dir_t gnupg_opendir (const char *name); +gnupg_dirent_t gnupg_readdir (gnupg_dir_t gdir); +int gnupg_closedir (gnupg_dir_t gdir); char *gnupg_get_socket_name (int fd); int gnupg_fd_valid (int fd); diff --git a/common/t-dotlock.c b/common/t-dotlock.c index f7aee09..e2d22f6 100644 --- a/common/t-dotlock.c +++ b/common/t-dotlock.c @@ -41,21 +41,165 @@ #include <errno.h> #include <signal.h> #include <unistd.h> +#ifdef HAVE_W32_SYSTEM +# include "windows.h" +#endif #include "dotlock.h" -#define PGM "t-dotlock" +#ifdef HAVE_W32_SYSTEM +#define DIM(v) (sizeof(v)/sizeof((v)[0])) + +const char * +w32_strerror (int ec) +{ + static char strerr[256]; + + if (ec == -1) + ec = (int)GetLastError (); +#ifdef HAVE_W32CE_SYSTEM + /* There is only a wchar_t FormatMessage. It does not make much + sense to play the conversion game; we print only the code. */ + snprintf (strerr, sizeof strerr, "ec=%d", (int)GetLastError ()); +#else + FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, ec, + MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), + strerr, DIM (strerr)-1, NULL); + { + /* Strip the CR,LF - we want just the string. */ + size_t n = strlen (strerr); + if (n > 2 && strerr[n-2] == '\r' && strerr[n-1] == '\n' ) + strerr[n-2] = 0; + } +#endif + return strerr; +} + +static wchar_t * +cp_to_wchar (const char *string, unsigned int codepage) +{ + int n; + size_t nbytes; + wchar_t *result; + + n = MultiByteToWideChar (codepage, 0, string, -1, NULL, 0); + if (n < 0) + { + return NULL; + } + + nbytes = (size_t)(n+1) * sizeof(*result); + if (nbytes / sizeof(*result) != (n+1)) + { + return NULL; + } + result = malloc (nbytes); + if (!result) + return NULL; + + n = MultiByteToWideChar (codepage, 0, string, -1, result, n); + if (n < 0) + { + free (result); + result = NULL; + } + return result; +} + +wchar_t * +utf8_to_wchar (const char *string) +{ + return cp_to_wchar (string, CP_UTF8); +} + +char * +stpcpy(char *a,const char *b) +{ + while( *b ) + *a++ = *b++; + *a = 0; + + return (char*)a; +} + +static char * +do_strconcat (const char *s1, va_list arg_ptr) +{ + const char *argv[48]; + size_t argc; + size_t needed; + char *buffer, *p; + + argc = 0; + argv[argc++] = s1; + needed = strlen (s1); + while (((argv[argc] = va_arg (arg_ptr, const char *)))) + { + needed += strlen (argv[argc]); + if (argc >= DIM (argv)-1) + { + return NULL; + } + argc++; + } + needed++; + buffer = malloc (needed); + if (buffer) + { + for (p = buffer, argc=0; argv[argc]; argc++) + p = stpcpy (p, argv[argc]); + } + return buffer; +} + +/* Concatenate the string S1 with all the following strings up to a + NULL. Returns a malloced buffer with the new string or NULL on a + malloc error or if too many arguments are given. */ +char * +strconcat (const char *s1, ...) +{ + va_list arg_ptr; + char *result; + + if (!s1) + result = calloc (1, 1); + else + { + va_start (arg_ptr, s1); + result = do_strconcat (s1, arg_ptr); + va_end (arg_ptr); + } + return result; +} +#endif /*HAVE_W32_SYSTEM*/ -static volatile int ctrl_c_pending; +#include "dotlock.c" + +#define PGM "t-dotlock" +#ifndef HAVE_W32_SYSTEM +static volatile int ctrl_c_pending_flag; static void control_c_handler (int signo) { (void)signo; - ctrl_c_pending = 1; + ctrl_c_pending_flag = 1; } +#endif + + +static int +ctrl_c_pending (void) +{ +#if HAVE_W32_SYSTEM + static int count; + return (++count > 9); +#else + return ctrl_c_pending_flag; +#endif +} static void @@ -95,7 +239,7 @@ lock_and_unlock (const char *fname) die ("error creating lock file for '%s': %s", fname, strerror (errno)); inf ("lock created"); - while (!ctrl_c_pending) + while (!ctrl_c_pending ()) { if (dotlock_take (h, -1)) die ("error taking lock"); @@ -119,8 +263,15 @@ main (int argc, char **argv) if (argc > 1) fname = argv[1]; else - fname = "t-dotlock.tmp"; + { +#ifdef HAVE_W32_SYSTEM + fname = "t-dotâ’¶lock.tmp"; +#else + fname = "t-dotlock.tmp"; +#endif + } +#ifndef HAVE_W32_SYSTEM { struct sigaction nact; @@ -128,6 +279,7 @@ main (int argc, char **argv) nact.sa_flags = 0; sigaction (SIGINT, &nact, NULL); } +#endif dotlock_create (NULL, 0); /* Initialize (optional). */ @@ -140,6 +292,6 @@ main (int argc, char **argv) /* Local Variables: -compile-command: "cc -Wall -O2 -D_FILE_OFFSET_BITS=64 -o t-dotlock t-dotlock.c dotlock.c" +compile-command: "cc -Wall -O2 -D_FILE_OFFSET_BITS=64 -o t-dotlock t-dotlock.c" End: */ diff --git a/common/t-exectool.c b/common/t-exectool.c index 9cea2d1..e1fffdc 100644 --- a/common/t-exectool.c +++ b/common/t-exectool.c @@ -45,6 +45,7 @@ test_executing_true (void) char *result; size_t len; + /* Fixme: We should use gpgrt_access here. */ if (access (pgmname, X_OK)) { if (access (alt_pgmname, X_OK)) diff --git a/common/util.h b/common/util.h index fd8a7dc..75cdee0 100644 --- a/common/util.h +++ b/common/util.h @@ -44,26 +44,6 @@ # define GPG_ERR_BAD_AUTH 315 #endif -#if GPG_ERROR_VERSION_NUMBER < 0x011b00 /* 1.27 */ -# define GPG_ERR_WRONG_NAME 313 -#endif - -#if GPG_ERROR_VERSION_NUMBER < 0x011a00 /* 1.26 */ -# define GPG_ERR_UNKNOWN_FLAG 309 -# define GPG_ERR_INV_ORDER 310 -# define GPG_ERR_ALREADY_FETCHED 311 -# define GPG_ERR_TRY_LATER 312 -# define GPG_ERR_SYSTEM_BUG 666 -# define GPG_ERR_DNS_UNKNOWN 711 -# define GPG_ERR_DNS_SECTION 712 -# define GPG_ERR_DNS_ADDRESS 713 -# define GPG_ERR_DNS_NO_QUERY 714 -# define GPG_ERR_DNS_NO_ANSWER 715 -# define GPG_ERR_DNS_CLOSED 716 -# define GPG_ERR_DNS_VERIFY 717 -# define GPG_ERR_DNS_TIMEOUT 718 -#endif - #ifndef EXTERN_UNLESS_MAIN_MODULE # if !defined (INCLUDED_BY_MAIN_MODULE) # define EXTERN_UNLESS_MAIN_MODULE extern @@ -162,7 +142,6 @@ ssize_t read_line (FILE *fp, char **addr_of_buffer, size_t *length_of_buffer, size_t *max_length); - /*-- b64enc.c and b64dec.c --*/ struct b64state { @@ -262,6 +241,7 @@ const char *openpgp_is_curve_supported (const char *name, const char *standard_homedir (void); const char *default_homedir (void); void gnupg_set_homedir (const char *newdir); +void gnupg_maybe_make_homedir (const char *fname, int quiet); const char *gnupg_homedir (void); int gnupg_default_homedir_p (void); const char *gnupg_daemon_rootdir (void); @@ -306,6 +286,9 @@ char *gnupg_get_help_string (const char *key, int only_current_locale); /*-- localename.c --*/ const char *gnupg_messages_locale_name (void); +/*-- sysutils.c --*/ +FILE *gnupg_fopen (const char *fname, const char *mode); + /*-- miscellaneous.c --*/ /* This function is called at startup to tell libgcrypt to use our own diff --git a/common/w32info-rc.h.in b/common/w32info-rc.h.in index ea9d463..59c0456 100644 --- a/common/w32info-rc.h.in +++ b/common/w32info-rc.h.in @@ -17,7 +17,7 @@ you can redistribute it and/or modify it under the terms of the \ GNU General Public License as published by the Free Software Foundation; \ either version 3 of the License, or (at your option) any later version.\0" -#define W32INFO_COMPANYNAME "The GnuPG Project\0" +#define W32INFO_COMPANYNAME "g10 Code GmbH\0" #define W32INFO_VI_FILEVERSION @BUILD_FILEVERSION@ #define W32INFO_VI_PRODUCTVERSION @BUILD_FILEVERSION@ @@ -29,4 +29,4 @@ built on @BUILD_HOSTNAME@ at @BUILD_TIMESTAMP@\0" #define W32INFO_PRODUCTVERSION "@VERSION@\0" #define W32INFO_LEGALCOPYRIGHT "Copyright \xa9 \ -2019 Free Software Foundation, Inc.\0" +2020 g10 Code GmbH\0" diff --git a/configure.ac b/configure.ac index 64cb8c6..2e5c284 100644 --- a/configure.ac +++ b/configure.ac @@ -29,7 +29,7 @@ min_automake_version="1.14" m4_define([mym4_package],[gnupg]) m4_define([mym4_major], [2]) m4_define([mym4_minor], [2]) -m4_define([mym4_micro], [23]) +m4_define([mym4_micro], [24]) # To start a new development series, i.e a new major or minor number # you need to mark an arbitrary commit before the first beta release @@ -54,16 +54,16 @@ AC_INIT([mym4_package],[mym4_version], [https://bugs.gnupg.org]) # build-aux/speedo.mk and Makefile.am AC_DEFINE_UNQUOTED(GNUPG_SWDB_TAG, "gnupg22", [swdb tag for this branch]) -NEED_GPG_ERROR_VERSION=1.25 +NEED_GPG_ERROR_VERSION=1.27 NEED_LIBGCRYPT_API=1 -NEED_LIBGCRYPT_VERSION=1.7.0 +NEED_LIBGCRYPT_VERSION=1.8.0 NEED_LIBASSUAN_API=2 NEED_LIBASSUAN_VERSION=2.5.0 NEED_KSBA_API=1 -NEED_KSBA_VERSION=1.3.4 +NEED_KSBA_VERSION=1.3.5 NEED_NTBTLS_API=1 NEED_NTBTLS_VERSION=0.1.0 @@ -1224,7 +1224,7 @@ AC_ARG_WITH(mailprog, [use "NAME -t" for mail transport]), ,with_mailprog=yes) if test x"$with_mailprog" = xyes ; then - AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib) + AC_PATH_PROG(SENDMAIL,sendmail,,"$PATH":/usr/sbin:/usr/libexec:/usr/lib) elif test x"$with_mailprog" != xno ; then AC_MSG_CHECKING([for a mail transport program]) AC_SUBST(SENDMAIL,$with_mailprog) @@ -2008,7 +2008,17 @@ tests/migrations/Makefile tests/gpgsm/Makefile tests/gpgme/Makefile tests/pkits/Makefile +agent/gpg-agent.w32-manifest g10/gpg.w32-manifest +g10/gpgv.w32-manifest +sm/gpgsm.w32-manifest +scd/scdaemon.w32-manifest +dirmngr/dirmngr.w32-manifest +tools/gpgconf.w32-manifest +tools/gpgtar.w32-manifest +tools/gpg-connect-agent.w32-manifest +tools/gpg-check-pattern.w32-manifest +tools/gpg-wks-client.w32-manifest ]) diff --git a/dirmngr/Makefile.am b/dirmngr/Makefile.am index 208a813..00d3c42 100644 --- a/dirmngr/Makefile.am +++ b/dirmngr/Makefile.am @@ -21,7 +21,10 @@ ## Process this file with automake to produce Makefile.in -EXTRA_DIST = OAUTHORS ONEWS ChangeLog-2011 tls-ca.pem +EXTRA_DIST = OAUTHORS ONEWS ChangeLog-2011 tls-ca.pem \ + dirmngr-w32info.rc dirmngr.w32-manifest.in + + dist_pkgdata_DATA = sks-keyservers.netCA.pem bin_PROGRAMS = dirmngr dirmngr-client @@ -86,11 +89,19 @@ else ldaplibs = endif +if HAVE_W32_SYSTEM +dirmngr_robjs = $(resource_objs) dirmngr-w32info.o +dirmngr-w32info.o : dirmngr.w32-manifest +else +dirmngr_robjs = +endif + dirmngr_LDADD = $(libcommonpth) \ $(DNSLIBS) $(LIBASSUAN_LIBS) \ $(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(NPTH_LIBS) \ - $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV) $(NETLIBS) + $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV) $(NETLIBS) \ + $(dirmngr_robj) if USE_LDAP dirmngr_LDADD += $(ldaplibs) endif diff --git a/dirmngr/certcache.c b/dirmngr/certcache.c index 5486997..9ca6069 100644 --- a/dirmngr/certcache.c +++ b/dirmngr/certcache.c @@ -364,8 +364,8 @@ static gpg_error_t load_certs_from_dir (const char *dirname, unsigned int trustclass) { gpg_error_t err; - DIR *dir; - struct dirent *ep; + gnupg_dir_t dir; + gnupg_dirent_t ep; char *p; size_t n; estream_t fp; @@ -373,13 +373,13 @@ load_certs_from_dir (const char *dirname, unsigned int trustclass) ksba_cert_t cert; char *fname = NULL; - dir = opendir (dirname); + dir = gnupg_opendir (dirname); if (!dir) { return 0; /* We do not consider this a severe error. */ } - while ( (ep=readdir (dir)) ) + while ( (ep = gnupg_readdir (dir)) ) { p = ep->d_name; if (*p == '.' || !*p) @@ -447,7 +447,7 @@ load_certs_from_dir (const char *dirname, unsigned int trustclass) } xfree (fname); - closedir (dir); + gnupg_closedir (dir); return 0; } @@ -685,7 +685,7 @@ load_certs_from_system (void) gpg_error_t err = 0; for (idx=0; idx < DIM (table); idx++) - if (!access (table[idx].name, F_OK)) + if (!gnupg_access (table[idx].name, F_OK)) { /* Take the first available bundle. */ err = load_certs_from_file (table[idx].name, CERTTRUST_CLASS_SYSTEM, 0); @@ -721,6 +721,9 @@ cert_cache_init (strlist_t hkp_cacerts) load_certs_from_dir (fname, 0); xfree (fname); + /* Put the special pool certificate into our store. This is + * currently only used with ntbtls. For GnuTLS http_session_new + * unfortunately loads that certificate directly from the file. */ fname = make_filename_try (gnupg_datadir (), "sks-keyservers.netCA.pem", NULL); if (fname) diff --git a/dirmngr/crlcache.c b/dirmngr/crlcache.c index cd35335..eee4b72 100644 --- a/dirmngr/crlcache.c +++ b/dirmngr/crlcache.c @@ -101,10 +101,6 @@ #ifndef HAVE_W32_SYSTEM #include <sys/utsname.h> #endif -#ifdef MKDIR_TAKES_ONE_ARG -#undef mkdir -#define mkdir(a,b) mkdir(a) -#endif #include "dirmngr.h" #include "validate.h" @@ -206,15 +202,15 @@ get_current_cache (void) static int create_directory_if_needed (const char *name) { - DIR *dir; + gnupg_dir_t dir; char *fname; fname = make_filename (opt.homedir_cache, name, NULL); - dir = opendir (fname); + dir = gnupg_opendir (fname); if (!dir) { log_info (_("creating directory '%s'\n"), fname); - if (mkdir (fname, S_IRUSR|S_IWUSR|S_IXUSR) ) + if (gnupg_mkdir (fname, "-rwx")) { int save_errno = errno; log_error (_("error creating directory '%s': %s\n"), @@ -225,7 +221,7 @@ create_directory_if_needed (const char *name) } } else - closedir (dir); + gnupg_closedir (dir); xfree (fname); return 0; } @@ -237,8 +233,8 @@ static int cleanup_cache_dir (int force) { char *dname = make_filename (opt.homedir_cache, DBDIR_D, NULL); - DIR *dir; - struct dirent *de; + gnupg_dir_t dir; + gnupg_dirent_t de; int problem = 0; if (!force) @@ -251,7 +247,7 @@ cleanup_cache_dir (int force) } } - dir = opendir (dname); + dir = gnupg_opendir (dname); if (!dir) { log_error (_("error reading directory '%s': %s\n"), @@ -260,7 +256,7 @@ cleanup_cache_dir (int force) return -1; } - while ((de = readdir (dir))) + while ((de = gnupg_readdir (dir))) { if (strcmp (de->d_name, "." ) && strcmp (de->d_name, "..")) { @@ -271,7 +267,7 @@ cleanup_cache_dir (int force) if (force) okay = 1; else - okay = (!stat (cdbname, &sbuf) && S_ISREG (sbuf.st_mode)); + okay = (!gnupg_stat (cdbname, &sbuf) && S_ISREG (sbuf.st_mode)); if (okay) { @@ -289,7 +285,7 @@ cleanup_cache_dir (int force) } } xfree (dname); - closedir (dir); + gnupg_closedir (dir); return problem; } @@ -1142,7 +1138,7 @@ lock_db_file (crl_cache_t cache, crl_cache_entry_t entry) xfree (fname); return NULL; } - fd = open (fname, O_RDONLY | O_BINARY); + fd = gnupg_open (fname, O_RDONLY | O_BINARY, 0); if (fd == -1) { log_error (_("error opening cache file '%s': %s\n"), @@ -2226,7 +2222,7 @@ crl_cache_insert (ctrl_t ctrl, const char *url, ksba_reader_t reader) } } - fd_cdb = open (fname, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); + fd_cdb = gnupg_open (fname, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); if (fd_cdb == -1) { err = gpg_error_from_errno (errno); diff --git a/dirmngr/crlfetch.c b/dirmngr/crlfetch.c index 7da3d8b..c8091f6 100644 --- a/dirmngr/crlfetch.c +++ b/dirmngr/crlfetch.c @@ -302,7 +302,7 @@ ca_cert_fetch (ctrl_t ctrl, cert_fetch_context_t *context, const char *dn) return gpg_error (GPG_ERR_NOT_SUPPORTED); } #if USE_LDAP - return start_default_fetch_ldap (ctrl, context, dn, "cACertificate"); + return start_cacert_fetch_ldap (ctrl, context, dn); #else (void)ctrl; (void)context; diff --git a/dirmngr/crlfetch.h b/dirmngr/crlfetch.h index cf4a3c0..3822adb 100644 --- a/dirmngr/crlfetch.h +++ b/dirmngr/crlfetch.h @@ -69,9 +69,9 @@ gpg_error_t attr_fetch_ldap (ctrl_t ctrl, ksba_reader_t *reader); -gpg_error_t start_default_fetch_ldap (ctrl_t ctrl, - cert_fetch_context_t *context, - const char *dn, const char *attr); +gpg_error_t start_cacert_fetch_ldap (ctrl_t ctrl, + cert_fetch_context_t *context, + const char *dn); gpg_error_t start_cert_fetch_ldap( ctrl_t ctrl, cert_fetch_context_t *context, strlist_t patterns, diff --git a/dirmngr/dirmngr-client.c b/dirmngr/dirmngr-client.c index 53b405e..0d714d4 100644 --- a/dirmngr/dirmngr-client.c +++ b/dirmngr/dirmngr-client.c @@ -468,7 +468,7 @@ read_pem_certificate (const char *fname, unsigned char **rbuf, size_t *rbuflen) init_asctobin (); - fp = fname? fopen (fname, "r") : stdin; + fp = fname? gnupg_fopen (fname, "r") : stdin; if (!fp) return gpg_error_from_errno (errno); @@ -629,7 +629,7 @@ read_certificate (const char *fname, unsigned char **rbuf, size_t *rbuflen) return 0; } - fp = fname? fopen (fname, "rb") : stdin; + fp = fname? gnupg_fopen (fname, "rb") : stdin; if (!fp) return gpg_error_from_errno (errno); diff --git a/dirmngr/dirmngr-w32info.rc b/dirmngr/dirmngr-w32info.rc new file mode 100644 index 0000000..c8101b3 --- /dev/null +++ b/dirmngr/dirmngr-w32info.rc @@ -0,0 +1,52 @@ +/* dirmngr-w32info.rc -*- c -*- + * Copyright (C) 2020 g10 Code GmbH + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "afxres.h" +#include "../common/w32info-rc.h" + +1 ICON "../common/gnupg.ico" + +1 VERSIONINFO + FILEVERSION W32INFO_VI_FILEVERSION + PRODUCTVERSION W32INFO_VI_PRODUCTVERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/ +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */ + FILETYPE 0x1L /* VFT_APP (0x1) */ + FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ + BEGIN + VALUE "FileDescription", L"GnuPG\x2019s network daemon\0" + VALUE "InternalName", "dirmngr\0" + VALUE "OriginalFilename", "dirmngr.exe\0" + VALUE "ProductName", W32INFO_PRODUCTNAME + VALUE "ProductVersion", W32INFO_PRODUCTVERSION + VALUE "CompanyName", W32INFO_COMPANYNAME + VALUE "FileVersion", W32INFO_FILEVERSION + VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT + VALUE "Comments", W32INFO_COMMENTS + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0x4b0 + END + END + +1 RT_MANIFEST "dirmngr.w32-manifest" diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c index 3beaab8..e497183 100644 --- a/dirmngr/dirmngr.c +++ b/dirmngr/dirmngr.c @@ -100,6 +100,7 @@ enum cmd_and_opt_values { aFlush, aGPGConfList, aGPGConfTest, + aGPGConfVersions, oOptions, oDebug, @@ -174,6 +175,7 @@ static ARGPARSE_OPTS opts[] = { ARGPARSE_c (aFlush, "flush", N_("flush the cache")), ARGPARSE_c (aGPGConfList, "gpgconf-list", "@"), ARGPARSE_c (aGPGConfTest, "gpgconf-test", "@"), + ARGPARSE_c (aGPGConfVersions, "gpgconf-versions", "@"), ARGPARSE_group (301, N_("@\nOptions:\n ")), @@ -378,6 +380,8 @@ static ldap_server_t parse_ldapserver_file (const char* filename, int ienoent); static fingerprint_list_t parse_ocsp_signer (const char *string); static void netactivity_action (void); static void handle_connections (assuan_fd_t listen_fd); +static void gpgconf_versions (void); + /* NPth wrapper function definitions. */ ASSUAN_SYSTEM_NPTH_IMPL; @@ -943,7 +947,7 @@ main (int argc, char **argv) if (configname) { configlineno = 0; - configfp = fopen (configname, "r"); + configfp = gnupg_fopen (configname, "r"); if (!configfp) { if (default_config) @@ -982,6 +986,7 @@ main (int argc, char **argv) case aFetchCRL: case aGPGConfList: case aGPGConfTest: + case aGPGConfVersions: cmd = pargs.r_opt; break; @@ -1073,7 +1078,7 @@ main (int argc, char **argv) log_info (_("Note: '%s' is not considered an option\n"), argv[i]); } - if (!access ("/etc/"DIRMNGR_NAME, F_OK) + if (!gnupg_access ("/etc/"DIRMNGR_NAME, F_OK) && !strncmp (gnupg_homedir (), "/etc/", 5)) log_info ("NOTE: DirMngr is now a proper part of %s. The configuration and" @@ -1272,7 +1277,7 @@ main (int argc, char **argv) { log_error (_("error binding socket to '%s': %s\n"), serv_addr.sun_path, - gpg_strerror (gpg_error_from_errno (errno))); + gpg_strerror (gpg_error_from_syserror ())); assuan_sock_close (fd); dirmngr_exit (1); } @@ -1543,6 +1548,9 @@ main (int argc, char **argv) es_printf ("resolver-timeout:%lu:%u\n", flags | GC_OPT_FLAG_DEFAULT, 0); } + else if (cmd == aGPGConfVersions) + gpgconf_versions (); + cleanup (); return !!rc; } @@ -1832,7 +1840,7 @@ reread_configuration (void) if (!opt.config_filename) return; /* No config file. */ - fp = fopen (opt.config_filename, "r"); + fp = gnupg_fopen (opt.config_filename, "r"); if (!fp) { log_error (_("option file '%s': %s\n"), @@ -2036,7 +2044,7 @@ handle_tick (void) /* Check whether the homedir is still available. */ if (!shutdown_pending - && stat (gnupg_homedir (), &statbuf) && errno == ENOENT) + && gnupg_stat (gnupg_homedir (), &statbuf) && errno == ENOENT) { shutdown_pending = 1; log_info ("homedir has been removed - shutting down\n"); @@ -2347,3 +2355,61 @@ dirmngr_get_current_socket_name (void) else return dirmngr_socket_name (); } + + + +/* Parse the revision part from the extended version blurb. */ +static const char * +get_revision_from_blurb (const char *blurb, int *r_len) +{ + const char *s = blurb? blurb : ""; + int n; + + for (; *s; s++) + if (*s == '\n' && s[1] == '(') + break; + if (s) + { + s += 2; + for (n=0; s[n] && s[n] != ' '; n++) + ; + } + else + { + s = "?"; + n = 1; + } + *r_len = n; + return s; +} + + +/* Print versions of dirmngr and used libraries. This is used by + * "gpgconf --show-versions" so that there is no need to link gpgconf + * against all these libraries. This is an internal API and should + * not be relied upon. */ +static void +gpgconf_versions (void) +{ + const char *s; + int n; + + /* Unfortunately Npth has no way to get the version. */ + + s = get_revision_from_blurb (assuan_check_version ("\x01\x01"), &n); + es_fprintf (es_stdout, "* Libassuan %s (%.*s)\n\n", + assuan_check_version (NULL), n, s); + + es_fprintf (es_stdout, "* KSBA %s \n\n", + ksba_check_version (NULL)); + +#ifdef HTTP_USE_NTBTLS + s = get_revision_from_blurb (ntbtls_check_version ("\x01\x01"), &n); + es_fprintf (es_stdout, "* NTBTLS %s (%.*s)\n\n", + ntbtls_check_version (NULL), n, s); +#elif HTTP_USE_GNUTLS + es_fprintf (es_stdout, "* GNUTLS %s\n\n", + gnutls_check_version (NULL)); +#endif + +} diff --git a/dirmngr/dirmngr.w32-manifest.in b/dirmngr/dirmngr.w32-manifest.in new file mode 100644 index 0000000..719ca97 --- /dev/null +++ b/dirmngr/dirmngr.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (Network daemon)</description> +<assemblyIdentity + type="win32" + name="GnuPG.dirmngr" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/dirmngr/http-ntbtls.c b/dirmngr/http-ntbtls.c index ed4cdd4..58388b2 100644 --- a/dirmngr/http-ntbtls.c +++ b/dirmngr/http-ntbtls.c @@ -77,8 +77,10 @@ gnupg_http_tls_verify_cb (void *opaque, validate_flags = VALIDATE_FLAG_TLS; - /* If we are using the standard hkps:// pool use the dedicated - * root certificate. */ + /* If we are using the standard hkps:// pool use the dedicated root + * certificate. Note that this differes from the GnuTLS + * implementation which uses this special certificate only if no + * other certificates are configured. */ hostname = ntbtls_get_hostname (tls); if (hostname && !ascii_strcasecmp (hostname, get_default_keyserver (1))) diff --git a/dirmngr/http.c b/dirmngr/http.c index 0af0cc3..5e3f17c 100644 --- a/dirmngr/http.c +++ b/dirmngr/http.c @@ -579,6 +579,7 @@ http_register_tls_callback (gpg_error_t (*cb)(http_t, http_session_t, int)) void http_register_tls_ca (const char *fname) { + gpg_err_code_t ec; strlist_t sl; if (!fname) @@ -590,9 +591,8 @@ http_register_tls_ca (const char *fname) { /* Warn if we can't access right now, but register it anyway in case it becomes accessible later */ - if (access (fname, F_OK)) - log_info (_("can't access '%s': %s\n"), fname, - gpg_strerror (gpg_error_from_syserror())); + if ((ec = gnupg_access (fname, F_OK))) + log_info (_("can't access '%s': %s\n"), fname, gpg_strerror (ec)); sl = add_to_strlist (&tls_ca_certlist, fname); if (*sl->d && !strcmp (sl->d + strlen (sl->d) - 4, ".pem")) sl->flags = 1; @@ -608,6 +608,7 @@ http_register_tls_ca (const char *fname) void http_register_cfg_ca (const char *fname) { + gpg_err_code_t ec; strlist_t sl; if (!fname) @@ -619,9 +620,8 @@ http_register_cfg_ca (const char *fname) { /* Warn if we can't access right now, but register it anyway in case it becomes accessible later */ - if (access (fname, F_OK)) - log_info (_("can't access '%s': %s\n"), fname, - gpg_strerror (gpg_error_from_syserror())); + if ((ec = gnupg_access (fname, F_OK))) + log_info (_("can't access '%s': %s\n"), fname, gpg_strerror (ec)); sl = add_to_strlist (&cfg_ca_certlist, fname); if (*sl->d && !strcmp (sl->d + strlen (sl->d) - 4, ".pem")) sl->flags = 1; @@ -770,10 +770,9 @@ http_session_new (http_session_t *r_session, && !ascii_strcasecmp (intended_hostname, get_default_keyserver (1))); - /* If the user has not specified a CA list, and they are looking - * for the hkps pool from sks-keyservers.net, then default to - * Kristian's certificate authority: */ - if (!tls_ca_certlist && is_hkps_pool) + /* If we are looking for the hkps pool from sks-keyservers.net, + * then forcefully use its dedicated certificate authority. */ + if (is_hkps_pool) { char *pemname = make_filename_try (gnupg_datadir (), "sks-keyservers.netCA.pem", NULL); @@ -793,11 +792,12 @@ http_session_new (http_session_t *r_session, xfree (pemname); } - add_system_cas = 0; + if (is_hkps_pool) + add_system_cas = 0; } /* Add configured certificates to the session. */ - if ((flags & HTTP_FLAG_TRUST_DEF)) + if ((flags & HTTP_FLAG_TRUST_DEF) && !is_hkps_pool) { for (sl = tls_ca_certlist; sl; sl = sl->next) { @@ -808,7 +808,10 @@ http_session_new (http_session_t *r_session, log_info ("setting CA from file '%s' failed: %s\n", sl->d, gnutls_strerror (rc)); } - if (!tls_ca_certlist && !is_hkps_pool) + + /* If HKP trust is requested and there are no HKP certificates + * configured, also try the standard system certificates. */ + if (!tls_ca_certlist) add_system_cas = 1; } @@ -830,7 +833,7 @@ http_session_new (http_session_t *r_session, } /* Add other configured certificates to the session. */ - if ((flags & HTTP_FLAG_TRUST_CFG)) + if ((flags & HTTP_FLAG_TRUST_CFG) && !is_hkps_pool) { for (sl = cfg_ca_certlist; sl; sl = sl->next) { diff --git a/dirmngr/ks-engine-hkp.c b/dirmngr/ks-engine-hkp.c index fef752c..14859c7 100644 --- a/dirmngr/ks-engine-hkp.c +++ b/dirmngr/ks-engine-hkp.c @@ -476,7 +476,20 @@ map_host (ctrl_t ctrl, const char *name, const char *srvtag, int force_reselect, if (!name || !*name) { *r_host = xtrystrdup ("localhost"); - return *r_host? 0 : gpg_error_from_syserror (); + if (!*r_host) + return gpg_error_from_syserror (); + if (r_httphost) + { + *r_httphost = xtrystrdup (*r_host); + if (!*r_httphost) + { + err = gpg_error_from_syserror (); + xfree (*r_host); + *r_host = NULL; + return err; + } + } + return 0; } /* See whether the host is in our table. */ @@ -648,6 +661,12 @@ map_host (ctrl_t ctrl, const char *name, const char *srvtag, int force_reselect, } free_dns_addrinfo (aibuf); } + else if (r_httphost) + { + *r_httphost = xtrystrdup (hi->name); + if (!*r_httphost) + return gpg_error_from_syserror (); + } if (hi->dead) { diff --git a/dirmngr/ldap.c b/dirmngr/ldap.c index cb3c0b7..e016f64 100644 --- a/dirmngr/ldap.c +++ b/dirmngr/ldap.c @@ -463,18 +463,19 @@ make_url (char **url, const char *dn, const char *filter) } -/* Prepare an LDAP query to return the attribute ATTR for the DN. All - configured default servers are queried until one responds. This - function returns an error code or 0 and a CONTEXT on success. */ +/* Prepare an LDAP query to return the cACertificate attribute for DN. + * All configured default servers are queried until one responds. + * This function returns an error code or 0 and stored a newly + * allocated contect object at CONTEXT on success. */ gpg_error_t -start_default_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context, - const char *dn, const char *attr) +start_cacert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *r_context, + const char *dn) { gpg_error_t err; struct ldapserver_iter iter; - *context = xtrycalloc (1, sizeof **context); - if (!*context) + *r_context = xtrycalloc (1, sizeof **r_context); + if (!*r_context) return gpg_error_from_errno (errno); /* FIXME; we might want to look at the Base SN to try matching @@ -488,30 +489,30 @@ start_default_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context, err = run_ldap_wrapper (ctrl, 0, - 1, + 1, /* --multi (record format) */ opt.ldap_proxy, server->host, server->port, server->user, server->pass, - dn, "objectClass=*", attr, NULL, - &(*context)->reader); + dn, "objectClass=*", "cACertificate", NULL, + &(*r_context)->reader); if (!err) break; /* Probably found a result. */ } if (err) { - xfree (*context); - *context = NULL; + xfree (*r_context); + *r_context = NULL; } return err; } -/* Prepare an LDAP query to return certificates matching PATTERNS using - the SERVER. This function returns an error code or 0 and a CONTEXT - on success. */ +/* Prepare an LDAP query to return certificates matching PATTERNS + * using the SERVER. This function returns an error code or 0 and + * stores a newly allocated object at R_CONTEXT on success. */ gpg_error_t -start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context, +start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *r_context, strlist_t patterns, const ldap_server_t server) { gpg_error_t err; @@ -527,7 +528,7 @@ start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context, char portbuf[30], timeoutbuf[30]; - *context = NULL; + *r_context = NULL; if (opt.ldap_proxy && !(proxy = xtrystrdup (opt.ldap_proxy))) { @@ -639,19 +640,19 @@ start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context, } argv[argc] = NULL; - *context = xtrycalloc (1, sizeof **context); - if (!*context) + *r_context = xtrycalloc (1, sizeof **r_context); + if (!*r_context) { err = gpg_error_from_errno (errno); goto leave; } - err = ldap_wrapper (ctrl, &(*context)->reader, (const char**)argv); + err = ldap_wrapper (ctrl, &(*r_context)->reader, (const char**)argv); if (err) { - xfree (*context); - *context = NULL; + xfree (*r_context); + *r_context = NULL; } leave: @@ -711,8 +712,7 @@ fetch_next_cert_ldap (cert_fetch_context_t context, n = buf32_to_ulong (hdr+1); if (*hdr == 'V' && okay) { -#if 0 /* That code is not yet ready. */ - +#if 0 /* That code to extra a cert from a CMS object is not yet ready. */ if (is_cms) { /* The certificate needs to be parsed from CMS data. */ @@ -759,7 +759,7 @@ fetch_next_cert_ldap (cert_fetch_context_t context, any = 1; } else -#endif +#endif /* End unfinished code to extract from a CMS object. */ { *value = xtrymalloc (n); if (!*value) diff --git a/dirmngr/server.c b/dirmngr/server.c index 780722d..4078633 100644 --- a/dirmngr/server.c +++ b/dirmngr/server.c @@ -2718,7 +2718,7 @@ cmd_killdirmngr (assuan_context_t ctx, char *line) ctrl->server_local->stopme = 1; assuan_set_flag (ctx, ASSUAN_FORCE_CLOSE, 1); - return gpg_error (GPG_ERR_EOF); + return 0; } diff --git a/doc/DETAILS b/doc/DETAILS index edd0a94..a02ba35 100644 --- a/doc/DETAILS +++ b/doc/DETAILS @@ -1103,6 +1103,7 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB: - learncard :: Send by the agent and gpgsm while learing the data of a smartcard. - card_busy :: A smartcard is still working + - scd_locked :: Waiting for other clients to unlock the scdaemon When <what> refers to a file path, it may be truncated. diff --git a/doc/Makefile.am b/doc/Makefile.am index ca13bcf..2b882c3 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -22,7 +22,8 @@ AM_CPPFLAGS = include $(top_srcdir)/am/cmacros.am examples = examples/README examples/scd-event examples/trustlist.txt \ - examples/vsnfd.prf examples/debug.prf \ + examples/VS-NfD.prf examples/Automatic.prf \ + examples/debug.prf \ examples/systemd-user/README \ examples/systemd-user/dirmngr.service \ examples/systemd-user/dirmngr.socket \ @@ -182,8 +183,8 @@ defsincdate: $(gnupg_TEXINFOS) if test -e $(top_srcdir)/.git; then \ (cd $(srcdir) && git log -1 --format='%ct' \ -- $(gnupg_TEXINFOS) 2>/dev/null) >>defsincdate; \ - elif test x"$SOURCE_DATE_EPOCH" != x; then \ - echo "$SOURCE_DATE_EPOCH" >>defsincdate ; \ + elif test x"$$SOURCE_DATE_EPOCH" != x; then \ + echo "$$SOURCE_DATE_EPOCH" >>defsincdate ; \ fi defs.inc : defsincdate Makefile mkdefsinc diff --git a/doc/examples/Automatic.prf b/doc/examples/Automatic.prf new file mode 100644 index 0000000..41f9bea --- /dev/null +++ b/doc/examples/Automatic.prf @@ -0,0 +1,15 @@ +# Automatic.prf - Configure options for a more automatic mode -*- conf -*- +# +# The options for each tool are configured in a section ("[TOOL]"); +# see the respective man page for a description of these options and +# the gpgconf manpage for a description of this file's syntax. + +[gpg] +auto-key-locate local,wkd,dane +auto-key-retrieve +trust-model tofu+pgp$\r$\n' + +[gpg-agent] +default-cache-ttl 900 +max-cache-ttl 3600 +min-passphrase-nonalpha 0 diff --git a/doc/examples/vsnfd.prf b/doc/examples/VS-NfD.prf index 0c0ddd8..edb9e01 100644 --- a/doc/examples/vsnfd.prf +++ b/doc/examples/VS-NfD.prf @@ -1,4 +1,4 @@ -# vsnfd.prf - Configure options for the VS-NfD mode -*- conf -*- +# VS-NfD.prf - Configure options for the VS-NfD mode -*- conf -*- # # The options for each tool are configured in a section ("[TOOL]"); # see the respective man page for a description of these options and @@ -12,7 +12,6 @@ compliance de-vs enable-crl-checks [gpg-agent] -enable-extended-key-format default-cache-ttl 900 max-cache-ttl 3600 no-allow-mark-trusted diff --git a/doc/gpg.texi b/doc/gpg.texi index 526a758..f611813 100644 --- a/doc/gpg.texi +++ b/doc/gpg.texi @@ -1138,6 +1138,17 @@ you want to specify a different revocation reason, or to supply supplementary revocation text, you should use the interactive sub-command @code{revuid} of @option{--edit-key}. +@item --quick-revoke-sig @var{fpr} @var{signing-fpr} [@var{names}] +@opindex quick-revoke-sig +This command revokes the key signatures made by @var{signing-fpr} from +the key specified by the fingerprint @var{fpr}. With @var{names} +given only the signatures on user ids of the key matching any of the +given names are affected (see @option{--quick-sign-key}). If a +revocation already exists a notice is printed instead of creating a +new revocation; no error is returned in this case. Note that key +signature revocations may be superseded by a newer key signature and +in turn again revoked. + @item --quick-set-primary-uid @var{user-id} @var{primary-user-id} @opindex quick-set-primary-uid This command sets or updates the primary user ID flag on an existing diff --git a/g10/Makefile.am b/g10/Makefile.am index 9cecc17..8ec771f 100644 --- a/g10/Makefile.am +++ b/g10/Makefile.am @@ -19,8 +19,10 @@ ## Process this file with automake to produce Makefile.in EXTRA_DIST = distsigkey.gpg \ - ChangeLog-2011 gpg-w32info.rc \ - gpg.w32-manifest.in test.c t-keydb-keyring.kbx \ + ChangeLog-2011 \ + gpg-w32info.rc gpg.w32-manifest.in \ + gpgv-w32info.rc gpgv.w32-manifest.in \ + test.c t-keydb-keyring.kbx \ t-keydb-get-keyblock.gpg t-stutter-data.asc \ all-tests.scm @@ -88,10 +90,13 @@ endif if HAVE_W32_SYSTEM -resource_objs += gpg-w32info.o - +gpg_robjs = $(resource_objs) gpg-w32info.o +gpgv_robjs = $(resource_objs) gpgv-w32info.o gpg-w32info.o : gpg.w32-manifest - +gpgv-w32info.o : gpgv.w32-manifest +else +gpg_robjs = +gpgv_robjs = endif common_source = \ @@ -178,16 +183,16 @@ LDADD = $(needed_libs) ../common/libgpgrl.a \ $(ZLIBS) $(LIBINTL) $(CAPLIBS) $(NETLIBS) gpg_LDADD = $(LDADD) $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) $(LIBREADLINE) \ $(LIBASSUAN_LIBS) $(GPG_ERROR_LIBS) \ - $(LIBICONV) $(resource_objs) $(extra_sys_libs) + $(LIBICONV) $(gpg_robjs) $(extra_sys_libs) gpg_LDFLAGS = $(extra_bin_ldflags) gpgv_LDADD = $(LDADD) $(LIBGCRYPT_LIBS) \ $(GPG_ERROR_LIBS) \ - $(LIBICONV) $(resource_objs) $(extra_sys_libs) + $(LIBICONV) $(gpgv_robjs) $(extra_sys_libs) gpgv_LDFLAGS = $(extra_bin_ldflags) gpgcompose_LDADD = $(LDADD) $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) $(LIBREADLINE) \ $(LIBASSUAN_LIBS) $(GPG_ERROR_LIBS) \ - $(LIBICONV) $(resource_objs) $(extra_sys_libs) + $(LIBICONV) $(extra_sys_libs) gpgcompose_LDFLAGS = $(extra_bin_ldflags) t_common_ldadd = diff --git a/g10/call-agent.c b/g10/call-agent.c index 11340aa..c7f1c29 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -866,8 +866,14 @@ agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list) /* Send an APDU to the current card. On success the status word is * stored at R_SW. With HEXAPDU being NULL only a RESET command is - * send to scd. With HEXAPDU being the string "undefined" the command - * "SERIALNO undefined" is send to scd. + * send to scd. HEXAPDU may also be one of these special strings: + * + * "undefined" :: Send the command "SCD SERIALNO undefined" + * "lock" :: Send the command "SCD LOCK --wait" + * "trylock" :: Send the command "SCD LOCK" + * "unlock" :: Send the command "SCD UNLOCK" + * "reset-keep-lock" :: Send the command "SCD RESET --keep-lock" + * * Used by: * card-util.c */ @@ -888,6 +894,26 @@ agent_scd_apdu (const char *hexapdu, unsigned int *r_sw) NULL, NULL, NULL, NULL, NULL, NULL); } + else if (!strcmp (hexapdu, "reset-keep-lock")) + { + err = assuan_transact (agent_ctx, "SCD RESET --keep-lock", + NULL, NULL, NULL, NULL, NULL, NULL); + } + else if (!strcmp (hexapdu, "lock")) + { + err = assuan_transact (agent_ctx, "SCD LOCK --wait", + NULL, NULL, NULL, NULL, NULL, NULL); + } + else if (!strcmp (hexapdu, "trylock")) + { + err = assuan_transact (agent_ctx, "SCD LOCK", + NULL, NULL, NULL, NULL, NULL, NULL); + } + else if (!strcmp (hexapdu, "unlock")) + { + err = assuan_transact (agent_ctx, "SCD UNLOCK", + NULL, NULL, NULL, NULL, NULL, NULL); + } else if (!strcmp (hexapdu, "undefined")) { err = assuan_transact (agent_ctx, "SCD SERIALNO undefined", diff --git a/g10/card-util.c b/g10/card-util.c index 00b64b3..8a5ab28 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -1834,8 +1834,13 @@ send_apdu (const char *hexapdu, const char *desc, unsigned int ignore) if (err) tty_printf ("sending card command %s failed: %s\n", desc, gpg_strerror (err)); - else if (!hexapdu || !strcmp (hexapdu, "undefined")) - ; + else if (!hexapdu + || !strcmp (hexapdu, "undefined") + || !strcmp (hexapdu, "reset-keep-lock") + || !strcmp (hexapdu, "lock") + || !strcmp (hexapdu, "trylock") + || !strcmp (hexapdu, "unlock")) + ; /* Ignore pseudo APDUs. */ else if (ignore == 0xffff) ; /* Ignore all status words. */ else if (sw != 0x9000) @@ -1864,6 +1869,7 @@ factory_reset (void) char *answer = NULL; int termstate = 0; int i; + int locked = 0; /* The code below basically does the same what this gpg-connect-agent script does: @@ -1925,8 +1931,14 @@ factory_reset (void) goto leave; /* We need to select a card application before we can send APDUs - to the card without scdaemon doing anything on its own. */ - err = send_apdu (NULL, "RESET", 0); + to the card without scdaemon doing anything on its own. We + then lock the connection so that other tools (e.g. Kleopatra) + don't try a new select. */ + err = send_apdu ("lock", "locking connection ", 0); + if (err) + goto leave; + locked = 1; + err = send_apdu ("reset-keep-lock", "reset", 0); if (err) goto leave; err = send_apdu ("undefined", "dummy select ", 0); @@ -1968,7 +1980,7 @@ factory_reset (void) goto leave; /* Finally we reset the card reader once more. */ - err = send_apdu (NULL, "RESET", 0); + err = send_apdu ("reset-keep-lock", "reset", 0); /* Then, connect the card again. */ if (!err) @@ -1981,6 +1993,8 @@ factory_reset (void) } leave: + if (locked) + send_apdu ("unlock", "unlocking connection ", 0); xfree (answer); agent_release_card_info (&info); } diff --git a/g10/encrypt.c b/g10/encrypt.c index 42cad2b..01f32af 100644 --- a/g10/encrypt.c +++ b/g10/encrypt.c @@ -195,7 +195,11 @@ encrypt_simple (const char *filename, int mode, int use_seskey) if (rc) { iobuf_close (inp); - log_error (_("error creating passphrase: %s\n"), gpg_strerror (rc)); + if (gpg_err_code (rc) == GPG_ERR_CIPHER_ALGO + || gpg_err_code (rc) == GPG_ERR_DIGEST_ALGO) + ; /* Error has already been printed. */ + else + log_error (_("error creating passphrase: %s\n"), gpg_strerror (rc)); release_progress_context (pfx); return rc; } @@ -373,12 +377,33 @@ gpg_error_t setup_symkey (STRING2KEY **symkey_s2k, DEK **symkey_dek) { int canceled; + int defcipher; + int s2kdigest; + + defcipher = default_cipher_algo (); + if (!gnupg_cipher_is_allowed (opt.compliance, 1, defcipher, + GCRY_CIPHER_MODE_CFB)) + { + log_error (_("cipher algorithm '%s' may not be used in %s mode\n"), + openpgp_cipher_algo_name (defcipher), + gnupg_compliance_option_string (opt.compliance)); + return gpg_error (GPG_ERR_CIPHER_ALGO); + } + + s2kdigest = S2K_DIGEST_ALGO; + if (!gnupg_digest_is_allowed (opt.compliance, 1, s2kdigest)) + { + log_error (_("digest algorithm '%s' may not be used in %s mode\n"), + gcry_md_algo_name (s2kdigest), + gnupg_compliance_option_string (opt.compliance)); + return gpg_error (GPG_ERR_DIGEST_ALGO); + } *symkey_s2k = xmalloc_clear (sizeof **symkey_s2k); (*symkey_s2k)->mode = opt.s2k_mode; - (*symkey_s2k)->hash_algo = S2K_DIGEST_ALGO; + (*symkey_s2k)->hash_algo = s2kdigest; - *symkey_dek = passphrase_to_dek (default_cipher_algo (), + *symkey_dek = passphrase_to_dek (defcipher, *symkey_s2k, 1, 0, NULL, &canceled); if (!*symkey_dek || !(*symkey_dek)->keylen) { @@ -539,7 +539,7 @@ exec_write(struct exec_info **info,const char *program, gpg_err_set_errno (EPERM); } else - (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w"); + (*info)->tochild = gnupg_fopen ((*info)->tempfile_in,binary?"wb":"w"); if((*info)->tochild==NULL) { ret = gpg_error_from_syserror (); @@ -125,6 +125,7 @@ enum cmd_and_opt_values aLSignKey, aQuickSignKey, aQuickLSignKey, + aQuickRevSig, aQuickAddUid, aQuickAddKey, aQuickRevUid, @@ -489,6 +490,8 @@ static ARGPARSE_OPTS opts[] = { N_("quickly sign a key")), ARGPARSE_c (aQuickLSignKey, "quick-lsign-key", N_("quickly sign a key locally")), + ARGPARSE_c (aQuickRevSig, "quick-revoke-sig" , + N_("quickly revoke a key signature")), ARGPARSE_c (aSignKey, "sign-key" ,N_("sign a key")), ARGPARSE_c (aLSignKey, "lsign-key" ,N_("sign a key locally")), ARGPARSE_c (aEditKey, "edit-key" ,N_("sign or edit a key")), @@ -1334,10 +1337,10 @@ open_info_file (const char *fname, int for_write, int binary) do { if (for_write) - fd = open (fname, O_CREAT | O_TRUNC | O_WRONLY | binary, - S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); + fd = gnupg_open (fname, O_CREAT | O_TRUNC | O_WRONLY | binary, + S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); else - fd = open (fname, O_RDONLY | binary); + fd = gnupg_open (fname, O_RDONLY | binary, 0); } while (fd == -1 && errno == EINTR); /* } */ @@ -1501,7 +1504,7 @@ check_permissions (const char *path, int item) } /* It's okay if the file or directory doesn't exist */ - if(stat(tmppath,&statbuf)!=0) + if (gnupg_stat (tmppath,&statbuf)) { ret=0; goto end; @@ -1512,7 +1515,7 @@ check_permissions (const char *path, int item) I'm stopping at one level down. */ dir=make_dirname(tmppath); - if(stat(dir,&dirbuf)!=0 || !S_ISDIR(dirbuf.st_mode)) + if (gnupg_stat (dir,&dirbuf) || !S_ISDIR (dirbuf.st_mode)) { /* Weird error */ ret=1; @@ -2185,7 +2188,9 @@ set_compliance_option (enum cmd_and_opt_values option) case oDE_VS: set_compliance_option (oOpenPGP); opt.compliance = CO_DE_VS; - /* Fixme: Change other options. */ + /* We divert here from the backward compatible rfc4880 algos. */ + opt.s2k_digest_algo = DIGEST_ALGO_SHA256; + opt.s2k_cipher_algo = CIPHER_ALGO_AES256; break; default: @@ -2531,7 +2536,7 @@ main (int argc, char **argv) } configlineno = 0; - configfp = fopen( configname, "r" ); + configfp = gnupg_fopen( configname, "r" ); if (configfp && is_secured_file (fileno (configfp))) { fclose (configfp); @@ -2610,6 +2615,7 @@ main (int argc, char **argv) case aSign: case aQuickSignKey: case aQuickLSignKey: + case aQuickRevSig: case aSignKey: case aLSignKey: case aStore: @@ -4021,13 +4027,14 @@ main (int argc, char **argv) } /* Set the random seed file. */ - if( use_random_seed ) { - char *p = make_filename (gnupg_homedir (), "random_seed", NULL ); - gcry_control (GCRYCTL_SET_RANDOM_SEED_FILE, p); - if (!access (p, F_OK)) + if (use_random_seed) + { + char *p = make_filename (gnupg_homedir (), "random_seed", NULL ); + gcry_control (GCRYCTL_SET_RANDOM_SEED_FILE, p); + if (!gnupg_access (p, F_OK)) register_secured_file (p); xfree(p); - } + } /* If there is no command but the --fingerprint is given, default to the --list-keys command. */ @@ -4381,6 +4388,22 @@ main (int argc, char **argv) } break; + case aQuickRevSig: + { + const char *userid, *siguserid; + + if (argc < 2) + wrong_args ("--quick-revoke-sig USER-ID SIG-USER-ID [userids]"); + userid = *argv++; argc--; + siguserid = *argv++; argc--; + sl = NULL; + for( ; argc; argc--, argv++) + append_to_strlist2 (&sl, *argv, utf8_strings); + keyedit_quick_revsig (ctrl, userid, siguserid, sl); + free_strlist (sl); + } + break; + case aSignKey: if( argc != 1 ) wrong_args("--sign-key user-id"); diff --git a/g10/gpg.w32-manifest.in b/g10/gpg.w32-manifest.in index 8c98dc5..24484db 100644 --- a/g10/gpg.w32-manifest.in +++ b/g10/gpg.w32-manifest.in @@ -8,10 +8,11 @@ /> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> - <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> - <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> - <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> </application> </compatibility> </assembly> diff --git a/g10/gpgv-w32info.rc b/g10/gpgv-w32info.rc new file mode 100644 index 0000000..9182fa4 --- /dev/null +++ b/g10/gpgv-w32info.rc @@ -0,0 +1,52 @@ +/* gpgv-w32info.rc -*- c -*- + * Copyright (C) 2020 g10 Code GmbH + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "afxres.h" +#include "../common/w32info-rc.h" + +1 ICON "../common/gnupg.ico" + +1 VERSIONINFO + FILEVERSION W32INFO_VI_FILEVERSION + PRODUCTVERSION W32INFO_VI_PRODUCTVERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/ +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */ + FILETYPE 0x1L /* VFT_APP (0x1) */ + FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ + BEGIN + VALUE "FileDescription", L"GnuPG\x2019s OpenPGP verify tool\0" + VALUE "InternalName", "gpgv\0" + VALUE "OriginalFilename", "gpgv.exe\0" + VALUE "ProductName", W32INFO_PRODUCTNAME + VALUE "ProductVersion", W32INFO_PRODUCTVERSION + VALUE "CompanyName", W32INFO_COMPANYNAME + VALUE "FileVersion", W32INFO_FILEVERSION + VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT + VALUE "Comments", W32INFO_COMMENTS + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0x4b0 + END + END + +1 RT_MANIFEST "gpgv.w32-manifest" diff --git a/g10/gpgv.w32-manifest.in b/g10/gpgv.w32-manifest.in new file mode 100644 index 0000000..b7a2120 --- /dev/null +++ b/g10/gpgv.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (OpenPGP verify tool)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpgv" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/g10/keydb.c b/g10/keydb.c index 45b3c85..e538fe4 100644 --- a/g10/keydb.c +++ b/g10/keydb.c @@ -29,6 +29,7 @@ #include "gpg.h" #include "../common/util.h" +#include "../common/sysutils.h" #include "options.h" #include "main.h" /*try_make_homedir ()*/ #include "packet.h" @@ -293,6 +294,7 @@ keyblock_cache_clear (struct keydb_handle *hd) static gpg_error_t maybe_create_keyring_or_box (char *filename, int is_box, int force_create) { + gpg_err_code_t ec; dotlock_t lockhd = NULL; IOBUF iobuf; int rc; @@ -303,8 +305,8 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create) int save_slash; /* A quick test whether the filename already exists. */ - if (!access (filename, F_OK)) - return !access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES); + if (!gnupg_access (filename, F_OK)) + return !gnupg_access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES); /* If we don't want to create a new file at all, there is no need to go any further - bail out right here. */ @@ -330,7 +332,7 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create) not happen though. */ save_slash = *last_slash_in_filename; *last_slash_in_filename = 0; - if (access(filename, F_OK)) + if (gnupg_access(filename, F_OK)) { static int tried; @@ -339,9 +341,9 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create) tried = 1; try_make_homedir (filename); } - if (access (filename, F_OK)) + if ((ec = gnupg_access (filename, F_OK))) { - rc = gpg_error_from_syserror (); + rc = gpg_error (ec); *last_slash_in_filename = save_slash; goto leave; } @@ -398,12 +400,12 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create) if (rc) goto leave; - if (!access (filename, F_OK)) + if (!gnupg_access (filename, F_OK)) { rc = 0; /* Okay, we may access the file now. */ goto leave; } - if (!access (bak_fname, F_OK) && !access (tmp_fname, F_OK)) + if (!gnupg_access (bak_fname, F_OK) && !gnupg_access (tmp_fname, F_OK)) { /* Very likely another process is updating a pubring.gpg and we should not create a pubring.kbx. */ @@ -442,13 +444,13 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create) that the detection magic will work the next time it is used. */ if (is_box) { - FILE *fp = fopen (filename, "wb"); + estream_t fp = es_fopen (filename, "wb"); if (!fp) rc = gpg_error_from_syserror (); else { rc = _keybox_write_header_blob (fp, 1); - fclose (fp); + es_fclose (fp); } if (rc) { @@ -502,7 +504,7 @@ rt_from_file (const char *filename, int *r_found, int *r_openpgp) KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE; *r_found = *r_openpgp = 0; - fp = fopen (filename, "rb"); + fp = gnupg_fopen (filename, "rb"); if (fp) { *r_found = 1; diff --git a/g10/keydb.h b/g10/keydb.h index f61515f..e1a316c 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -128,9 +128,10 @@ struct pubkey_find_info { /* Helper type for preference functions. */ -union pref_hint +struct pref_hint { - int digest_length; + int digest_length; /* We want at least this digest length. */ + int exact; /* We need to use exactly this length. */ }; @@ -262,9 +263,9 @@ gpg_error_t find_and_check_key (ctrl_t ctrl, pk_list_t *pk_list_addr); int algo_available( preftype_t preftype, int algo, - const union pref_hint *hint ); + const struct pref_hint *hint ); int select_algo_from_prefs( PK_LIST pk_list, int preftype, - int request, const union pref_hint *hint); + int request, const struct pref_hint *hint); int select_mdc_from_pklist (PK_LIST pk_list); void warn_missing_mdc_from_pklist (PK_LIST pk_list); void warn_missing_aes_from_pklist (PK_LIST pk_list); diff --git a/g10/keyedit.c b/g10/keyedit.c index a7932ce..ed81c4a 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -2275,7 +2275,7 @@ leave: * Returns on success the key database handle at R_KDBHD and the * keyblock at R_KEYBLOCK. */ static gpg_error_t -quick_find_keyblock (ctrl_t ctrl, const char *username, +quick_find_keyblock (ctrl_t ctrl, const char *username, int want_secret, KEYDB_HANDLE *r_kdbhd, kbnode_t *r_keyblock) { gpg_error_t err; @@ -2318,7 +2318,7 @@ quick_find_keyblock (ctrl_t ctrl, const char *username, err = 0; keydb_pop_found_state (kdbhd); - if (!err) + if (!err && want_secret) { /* We require the secret primary key to set the primary UID. */ node = find_kbnode (keyblock, PKT_PUBLIC_KEY); @@ -2375,7 +2375,7 @@ keyedit_quick_adduid (ctrl_t ctrl, const char *username, const char *newuid) #endif /* Search the key; we don't want the whole getkey stuff here. */ - err = quick_find_keyblock (ctrl, username, &kdbhd, &keyblock); + err = quick_find_keyblock (ctrl, username, 1, &kdbhd, &keyblock); if (err) goto leave; @@ -2418,7 +2418,7 @@ keyedit_quick_revuid (ctrl_t ctrl, const char *username, const char *uidtorev) #endif /* Search the key; we don't want the whole getkey stuff here. */ - err = quick_find_keyblock (ctrl, username, &kdbhd, &keyblock); + err = quick_find_keyblock (ctrl, username, 1, &kdbhd, &keyblock); if (err) goto leave; @@ -2498,7 +2498,7 @@ keyedit_quick_set_primary (ctrl_t ctrl, const char *username, check_trustdb_stale (ctrl); #endif - err = quick_find_keyblock (ctrl, username, &kdbhd, &keyblock); + err = quick_find_keyblock (ctrl, username, 1, &kdbhd, &keyblock); if (err) goto leave; @@ -2771,6 +2771,240 @@ keyedit_quick_sign (ctrl_t ctrl, const char *fpr, strlist_t uids, } +/* Unattended revocation of a key signatures. USERNAME specifies the + * key; this should best be a fingerprint. SIGTOREV is the user-id of + * the key for which the key signature shall be removed. Only + * non-self-signatures can be removed with this functions. If + * AFFECTED_UIDS is not NULL only the key signatures on these user-ids + * are revoked. */ +void +keyedit_quick_revsig (ctrl_t ctrl, const char *username, const char *sigtorev, + strlist_t affected_uids) +{ + gpg_error_t err; + int no_signing_key = 0; + KEYDB_HANDLE kdbhd = NULL; + kbnode_t keyblock = NULL; + PKT_public_key *primarypk; /* Points into KEYBLOCK. */ + u32 *primarykid; + PKT_public_key *pksigtorev = NULL; + u32 *pksigtorevkid; + kbnode_t node, n; + int skip_remaining; + int consider_sig; + strlist_t sl; + struct sign_attrib attrib = { 0 }; + +#ifdef HAVE_W32_SYSTEM + /* See keyedit_menu for why we need this. */ + check_trustdb_stale (ctrl); +#endif + + /* Search the key; we don't want the whole getkey stuff here. Noet + * that we are looking for the public key here. */ + err = quick_find_keyblock (ctrl, username, 0, &kdbhd, &keyblock); + if (err) + goto leave; + log_assert (keyblock->pkt->pkttype == PKT_PUBLIC_KEY + || keyblock->pkt->pkttype == PKT_SECRET_KEY); + primarypk = keyblock->pkt->pkt.public_key; + primarykid = pk_keyid (primarypk); + + /* Get the signing key we want to revoke. This must be one of our + * signing keys. We will compare only the keyid because we don't + * assume that we have duplicated keyids on our own secret keys. If + * a there is a duplicated one we will notice this when creating the + * revocation. */ + pksigtorev = xtrycalloc (1, sizeof *pksigtorev); + if (!pksigtorev) + { + err = gpg_error_from_syserror (); + goto leave; + } + pksigtorev->req_usage = PUBKEY_USAGE_CERT; + err = getkey_byname (ctrl, NULL, pksigtorev, sigtorev, 1, NULL); + if (err) + { + no_signing_key = 1; + goto leave; + } + pksigtorevkid = pk_keyid (pksigtorev); + + /* Find the signatures we want to revoke and set a mark. */ + skip_remaining = consider_sig = 0; + for (node = keyblock; node; node = node->next) + { + node->flag &= ~NODFLG_MARK_A; + if (skip_remaining) + ; + else if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) + skip_remaining = 1; + else if (node->pkt->pkttype == PKT_USER_ID) + { + PKT_user_id *uid = node->pkt->pkt.user_id; + + consider_sig = !affected_uids; + for (sl = affected_uids; !consider_sig && sl; sl = sl->next) + { + const char *name = sl->d; + + if (uid->attrib_data) + ; + else if (*name == '=' + && strlen (name+1) == uid->len + && !memcmp (uid->name, name + 1, uid->len)) + { /* Exact match. */ + consider_sig = 1; + } + else if (ascii_memistr (uid->name, uid->len, + *name == '*'? name+1:name)) + { /* Case-insensitive substring match. */ + consider_sig = 1; + } + } + } + else if (node->pkt->pkttype == PKT_SIGNATURE) + { + /* We need to sort the signatures so that we can figure out + * whether the key signature has been revoked or the + * revocation has been superseded by a new key + * signature. */ + PKT_signature *sig; + unsigned int sigcount = 0; + kbnode_t *sigarray; + + /* Allocate an array large enogh for all signatures. */ + for (n=node; n && n->pkt->pkttype == PKT_SIGNATURE; n = n->next) + sigcount++; + sigarray = xtrycalloc (sigcount, sizeof *sigarray); + if (!sigarray) + { + err = gpg_error_from_syserror (); + goto leave; + } + + /* Now fill the array with signatures we are interested in. + * We also move NODE forward to the end. */ + sigcount = 0; + for (n=node; n && n->pkt->pkttype == PKT_SIGNATURE; node=n, n=n->next) + { + sig = n->pkt->pkt.signature; + if (!keyid_cmp (primarykid, sig->keyid)) + continue; /* Ignore self-signatures. */ + + if (keyid_cmp (pksigtorevkid, sig->keyid)) + continue; /* Ignore non-matching signatures. */ + + n->flag &= ~NODFLG_MARK_B; /* Clear flag used by cmp_signode. */ + sigarray[sigcount++] = n; + } + + if (sigcount) + { + qsort (sigarray, sigcount, sizeof *sigarray, cmp_signodes); + + /* log_debug ("Sorted signatures:\n"); */ + /* for (idx=0; idx < sigcount; idx++) */ + /* { */ + /* sig = sigarray[idx]->pkt->pkt.signature; */ + /* log_debug ("%s 0x%02x %s\n", keystr (sig->keyid), */ + /* sig->sig_class, datestr_from_sig (sig)); */ + /* } */ + sig = sigarray[sigcount-1]->pkt->pkt.signature; + if ((consider_sig || !affected_uids) && IS_UID_REV (sig)) + { + if (!opt.quiet) + log_info ("sig by %s already revoked at %s\n", + keystr (sig->keyid), datestr_from_sig (sig)); + } + else if ((consider_sig && IS_UID_SIG (sig)) + || (!affected_uids && IS_KEY_SIG (sig))) + node->flag |= NODFLG_MARK_A; /* Select signature. */ + } + + xfree (sigarray); + } + } + + /* Check whether any signatures were done by the given key. We do + * not return an error if none were found. */ + for (node = keyblock; node; node = node->next) + if ((node->flag & NODFLG_MARK_A)) + break; + if (!node) + { + if (opt.verbose) + log_info (_("Not signed by you.\n")); + err = 0; + goto leave; + } + + /* Revoke all marked signatures. */ + attrib.reason = get_default_sig_revocation_reason (); + + reloop: /* (we must repeat because we are modifying the list) */ + for (node = keyblock; node; node = node->next) + { + kbnode_t unode; + PKT_signature *sig; + PACKET *pkt; + + if (!(node->flag & NODFLG_MARK_A)) + continue; + node->flag &= ~NODFLG_MARK_A; + + if (IS_KEY_SIG (node->pkt->pkt.signature)) + unode = NULL; + else + { + unode = find_prev_kbnode (keyblock, node, PKT_USER_ID); + log_assert (unode); + } + + attrib.non_exportable = !node->pkt->pkt.signature->flags.exportable; + + err = make_keysig_packet (ctrl, &sig, primarypk, + unode? unode->pkt->pkt.user_id : NULL, + NULL, pksigtorev, 0x30, 0, 0, 0, + sign_mk_attrib, &attrib, NULL); + if (err) + { + log_error ("signing failed: %s\n", gpg_strerror (err)); + goto leave; + } + + pkt = xmalloc_clear (sizeof *pkt); + pkt->pkttype = PKT_SIGNATURE; + pkt->pkt.signature = sig; + if (unode) + insert_kbnode (unode, new_kbnode (pkt), 0); + goto reloop; + } + + err = keydb_update_keyblock (ctrl, kdbhd, keyblock); + if (err) + { + log_error (_("update failed: %s\n"), gpg_strerror (err)); + goto leave; + } + revalidation_mark (ctrl); + + leave: + if (err) + { + log_error (_("revoking the key signature failed: %s\n"), + gpg_strerror (err)); + if (no_signing_key) + print_further_info ("error getting key used to make the key signature"); + write_status_error ("keyedit.revoke.sig", err); + } + release_revocation_reason_info (attrib.reason); + free_public_key (pksigtorev); + release_kbnode (keyblock); + keydb_release (kdbhd); +} + + /* Unattended subkey creation function. * */ @@ -5990,7 +6224,7 @@ core_revuid (ctrl_t ctrl, kbnode_t keyblock, KBNODE node, memset (&attrib, 0, sizeof attrib); /* should not need to cast away const here; but revocation_reason_build_cb needs to take a non-const - void* in order to meet the function signtuare for the + void* in order to meet the function signature for the mksubpkt argument to make_keysig_packet */ attrib.reason = (struct revocation_reason_info *)reason; diff --git a/g10/keyedit.h b/g10/keyedit.h index af5e996..1aa95c1 100644 --- a/g10/keyedit.h +++ b/g10/keyedit.h @@ -33,6 +33,8 @@ #define NODFLG_SELKEY (1<<9) /* Indicate the selected key. */ #define NODFLG_SELSIG (1<<10) /* Indicate a selected signature. */ +#define NODFLG_MARK_B (1<<11) /* Temporary mark in key listing code. */ + /*-- keyedit.c --*/ void keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr, strlist_t commands, int quiet, int seckey_check ); @@ -45,6 +47,8 @@ void keyedit_quick_revuid (ctrl_t ctrl, const char *username, const char *uidtorev); void keyedit_quick_sign (ctrl_t ctrl, const char *fpr, strlist_t uids, strlist_t locusr, int local); +void keyedit_quick_revsig (ctrl_t ctrl, const char *username, + const char *sigtorev, strlist_t affected_uids); void keyedit_quick_set_expire (ctrl_t ctrl, const char *fpr, const char *expirestr, char **subkeyfprs); diff --git a/g10/keygen.c b/g10/keygen.c index 471f52a..d50acf8 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -2147,6 +2147,10 @@ ask_algo (ctrl_t ctrl, int addmode, int *r_subkey_algo, unsigned int *r_usage, && !(sl->flags & GCRY_PK_USAGE_ENCR)) sl->flags |= (PUBKEY_ALGO_ECDSA << 8); else if (algoid == GCRY_PK_ECC + && algostr && !strncmp (algostr, "brainpool", 9) + && !(sl->flags & GCRY_PK_USAGE_ENCR)) + sl->flags |= (PUBKEY_ALGO_ECDSA << 8); + else if (algoid == GCRY_PK_ECC && algostr && !strcmp (algostr, "ed25519") && !(sl->flags & GCRY_PK_USAGE_ENCR)) sl->flags = (PUBKEY_ALGO_EDDSA << 8); @@ -4039,6 +4043,7 @@ read_parameter_file (ctrl_t ctrl, const char *fname ) para = NULL; maxlen = 1024; line = NULL; + nline = 0; while ( iobuf_read_line (fp, &line, &nline, &maxlen) ) { char *keyword, *value; diff --git a/g10/keylist.c b/g10/keylist.c index 5b0f7ba..7deb04d 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -893,6 +893,51 @@ dump_attribs (const PKT_user_id *uid, PKT_public_key *pk) } +/* Order two signatures. We first order by keyid and then by creation + * time. This is currently only used in keyedit.c */ +int +cmp_signodes (const void *av, const void *bv) +{ + const kbnode_t an = *(const kbnode_t *)av; + const kbnode_t bn = *(const kbnode_t *)bv; + const PKT_signature *a; + const PKT_signature *b; + int i; + + /* log_assert (an->pkt->pkttype == PKT_SIGNATURE); */ + /* log_assert (bn->pkt->pkttype == PKT_SIGNATURE); */ + + a = an->pkt->pkt.signature; + b = bn->pkt->pkt.signature; + + /* Self-signatures are ordered first. */ + if ((an->flag & NODFLG_MARK_B) && !(bn->flag & NODFLG_MARK_B)) + return -1; + if (!(an->flag & NODFLG_MARK_B) && (bn->flag & NODFLG_MARK_B)) + return 1; + + /* then the keyids. (which are or course the same for self-sigs). */ + i = keyid_cmp (a->keyid, b->keyid); + if (i) + return i; + + /* Followed by creation time */ + if (a->timestamp > b->timestamp) + return 1; + if (a->timestamp < b->timestamp) + return -1; + + /* followed by the class in a way that a rev comes first. */ + if (a->sig_class > b->sig_class) + return 1; + if (a->sig_class < b->sig_class) + return -1; + + /* To make the sort stable we compare the entire structure as last resort. */ + return memcmp (a, b, sizeof *a); +} + + static void list_keyblock_print (ctrl_t ctrl, kbnode_t keyblock, int secret, int fpr, struct keylist_context *listctx) diff --git a/g10/keyring.c b/g10/keyring.c index f424f94..8c31ccc 100644 --- a/g10/keyring.c +++ b/g10/keyring.c @@ -228,7 +228,7 @@ keyring_is_writable (void *token) { KR_RESOURCE r = token; - return r? (r->read_only || !access (r->fname, W_OK)) : 0; + return r? (r->read_only || !gnupg_access (r->fname, W_OK)) : 0; } @@ -1371,7 +1371,7 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname) statbuf.st_mode=S_IRUSR | S_IWUSR; - if (!stat (bakfname, &statbuf) && !chmod (fname, statbuf.st_mode)) + if (!gnupg_stat (bakfname, &statbuf) && !chmod (fname, statbuf.st_mode)) ; else log_error ("WARNING: unable to restore permissions to '%s': %s", @@ -1606,6 +1606,7 @@ static int do_copy (int mode, const char *fname, KBNODE root, off_t start_offset, unsigned int n_packets ) { + gpg_err_code_t ec; IOBUF fp, newfp; int rc=0; char *bakfname = NULL; @@ -1613,8 +1614,8 @@ do_copy (int mode, const char *fname, KBNODE root, /* Open the source file. Because we do a rename, we have to check the permissions of the file */ - if (access (fname, W_OK)) - return gpg_error_from_syserror (); + if ((ec = gnupg_access (fname, W_OK))) + return gpg_error (ec); fp = iobuf_open (fname); if (mode == 1 && !fp && errno == ENOENT) { @@ -95,6 +95,7 @@ void print_sha1_keysig_rejected_note (void); void print_reported_error (gpg_error_t err, gpg_err_code_t skip_if_ec); void print_further_info (const char *format, ...) GPGRT_ATTR_PRINTF(1,2); void additional_weak_digest (const char* digestname); +int is_weak_digest (digest_algo_t algo); /*-- armor.c --*/ char *make_radix64_string( const byte *data, size_t len ); @@ -447,8 +448,9 @@ int gen_desig_revoke (ctrl_t ctrl, const char *uname, strlist_t locusr); int revocation_reason_build_cb( PKT_signature *sig, void *opaque ); struct revocation_reason_info * ask_revocation_reason( int key_rev, int cert_rev, int hint ); -struct revocation_reason_info * get_default_uid_revocation_reason(void); -void release_revocation_reason_info( struct revocation_reason_info *reason ); +struct revocation_reason_info * get_default_uid_revocation_reason (void); +struct revocation_reason_info * get_default_sig_revocation_reason (void); +void release_revocation_reason_info (struct revocation_reason_info *reason); /*-- keylist.c --*/ void public_key_list (ctrl_t ctrl, strlist_t list, @@ -458,6 +460,7 @@ void print_subpackets_colon(PKT_signature *sig); void reorder_keyblock (KBNODE keyblock); void list_keyblock_direct (ctrl_t ctrl, kbnode_t keyblock, int secret, int has_secret, int fpr, int no_validity); +int cmp_signodes (const void *av, const void *bv); void print_fingerprint (ctrl_t ctrl, estream_t fp, PKT_public_key *pk, int mode); void print_revokers (estream_t fp, PKT_public_key *pk); diff --git a/g10/mainproc.c b/g10/mainproc.c index 79ff211..762fc79 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -618,6 +618,9 @@ print_pkenc_list (ctrl_t ctrl, struct kidlist_item *list, int failed) { log_info (_("public key decryption failed: %s\n"), gpg_strerror (list->reason)); + if (gpg_err_source (list->reason) == GPG_ERR_SOURCE_SCD + && gpg_err_code (list->reason) == GPG_ERR_INV_ID) + print_further_info ("a reason might be a card with replaced keys"); write_status_error ("pkdecrypt_failed", list->reason); } } diff --git a/g10/migrate.c b/g10/migrate.c index c52c67a..38fb7bd 100644 --- a/g10/migrate.c +++ b/g10/migrate.c @@ -50,10 +50,10 @@ migrate_secring (ctrl_t ctrl) char *agent_version = NULL; secring = make_filename (gnupg_homedir (), "secring" EXTSEP_S "gpg", NULL); - if (access (secring, F_OK)) + if (gnupg_access (secring, F_OK)) goto leave; /* Does not exist or is not readable. */ flagfile = make_filename (gnupg_homedir (), V21_MIGRATION_FNAME, NULL); - if (!access (flagfile, F_OK)) + if (!gnupg_access (flagfile, F_OK)) goto leave; /* Does exist - fine. */ log_info ("starting migration from earlier GnuPG versions\n"); @@ -99,8 +99,8 @@ migrate_secring (ctrl_t ctrl) log_info ("porting secret keys from '%s' to gpg-agent\n", secring); if (!import_old_secring (ctrl, secring)) { - FILE *fp = fopen (flagfile, "w"); - if (!fp || fclose (fp)) + estream_t fp = es_fopen (flagfile, "w"); + if (!fp || es_fclose (fp)) log_error ("error creating flag file '%s': %s\n", flagfile, gpg_strerror (gpg_error_from_syserror ())); else @@ -102,7 +102,7 @@ register_secured_file (const char *fname) struct secured_file_item *sf; /* Note that we stop immediately if something goes wrong here. */ - if (stat (fname, &buf)) + if (gnupg_stat (fname, &buf)) log_fatal (_("fstat of '%s' failed in %s: %s\n"), fname, "register_secured_file", strerror (errno)); /* log_debug ("registering '%s' i=%lu.%lu\n", fname, */ @@ -131,7 +131,7 @@ unregister_secured_file (const char *fname) struct stat buf; struct secured_file_item *sf, *sfprev; - if (stat (fname, &buf)) + if (gnupg_stat (fname, &buf)) { log_error (_("fstat of '%s' failed in %s: %s\n"), fname, "unregister_secured_file", strerror (errno)); @@ -205,7 +205,7 @@ is_secured_filename (const char *fname) /* Note that we print out a error here and claim that a file is secure if something went wrong. */ - if (stat (fname, &buf)) + if (gnupg_stat (fname, &buf)) { if (errno == ENOENT || errno == EPERM || errno == EACCES) return 0; @@ -311,12 +311,11 @@ print_cipher_algo_note (cipher_algo_t algo) void print_digest_algo_note (digest_algo_t algo) { - const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo); - const struct weakhash *weak; - if(algo >= 100 && algo <= 110) { static int warn=0; + const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo); + if(!warn) { warn=1; @@ -325,14 +324,13 @@ print_digest_algo_note (digest_algo_t algo) gcry_md_algo_name (galgo)); } } - else - for (weak = opt.weak_digests; weak != NULL; weak = weak->next) - if (weak->algo == galgo) - { - es_fflush (es_stdout); - log_info (_("WARNING: digest algorithm %s is deprecated\n"), - gcry_md_algo_name (galgo)); - } + else if (is_weak_digest (algo)) + { + const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo); + es_fflush (es_stdout); + log_info (_("WARNING: digest algorithm %s is deprecated\n"), + gcry_md_algo_name (galgo)); + } } @@ -341,6 +339,10 @@ print_digest_rejected_note (enum gcry_md_algos algo) { struct weakhash* weak; int show = 1; + + if (opt.quiet) + return; + for (weak = opt.weak_digests; weak; weak = weak->next) if (weak->algo == algo) { @@ -366,7 +368,7 @@ print_sha1_keysig_rejected_note (void) { static int shown; - if (shown) + if (shown || opt.quiet) return; shown = 1; @@ -919,6 +921,11 @@ pct_expando(const char *string,struct expando_args *args) u32 pk_keyid[2]={0,0},sk_keyid[2]={0,0}; char *ret=NULL; + /* The parser below would return NULL for an empty string, thus we + * catch it here. Also catch NULL here. */ + if (!string || !*string) + return xstrdup (""); + if(args->pk) keyid_from_pk(args->pk,pk_keyid); @@ -1860,3 +1867,17 @@ additional_weak_digest (const char* digestname) weak->next = opt.weak_digests; opt.weak_digests = weak; } + + +/* Return true if ALGO is in the list of weak digests. */ +int +is_weak_digest (digest_algo_t algo) +{ + const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo); + const struct weakhash *weak; + + for (weak = opt.weak_digests; weak; weak = weak->next) + if (weak->algo == galgo) + return 1; + return 0; +} diff --git a/g10/openfile.c b/g10/openfile.c index 78f4dbb..d82858f 100644 --- a/g10/openfile.c +++ b/g10/openfile.c @@ -324,7 +324,7 @@ get_matching_datafile (const char *sigfilename) fname = xstrdup (sigfilename); fname[len-(fname[len-1]=='n'?5:4)] = 0 ; - if (access (fname, R_OK )) + if (gnupg_access (fname, R_OK )) { /* Not found or other error. */ xfree (fname); @@ -367,36 +367,18 @@ open_sigfile (const char *sigfilename, progress_filter_context_t *pfx) } +/* Create the directory only if the supplied directory name is the + same as the default one. This way we avoid to create arbitrary + directories when a non-default home directory is used. To cope + with HOME, we do compare only the suffix if we see that the default + homedir does start with a tilde. */ void try_make_homedir (const char *fname) { - const char *defhome = standard_homedir (); - - /* Create the directory only if the supplied directory name is the - same as the default one. This way we avoid to create arbitrary - directories when a non-default home directory is used. To cope - with HOME, we do compare only the suffix if we see that the - default homedir does start with a tilde. */ if ( opt.dry_run || opt.no_homedir_creation ) return; - if ( -#ifdef HAVE_W32_SYSTEM - ( !compare_filenames (fname, defhome) ) -#else - ( *defhome == '~' - && (strlen(fname) >= strlen (defhome+1) - && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) )) - || (*defhome != '~' && !compare_filenames( fname, defhome ) ) -#endif - ) - { - if (gnupg_mkdir (fname, "-rwx")) - log_fatal ( _("can't create directory '%s': %s\n"), - fname, strerror(errno) ); - else if (!opt.quiet ) - log_info ( _("directory '%s' created\n"), fname ); - } + gnupg_maybe_make_homedir (fname, opt.quiet); } @@ -409,7 +391,7 @@ get_openpgp_revocdir (const char *home) struct stat statbuf; fname = make_filename (home, GNUPG_OPENPGP_REVOC_DIR, NULL); - if (stat (fname, &statbuf) && errno == ENOENT) + if (gnupg_stat (fname, &statbuf) && errno == ENOENT) { if (gnupg_mkdir (fname, "-rwx")) log_error (_("can't create directory '%s': %s\n"), diff --git a/g10/passphrase.c b/g10/passphrase.c index df80af8..e6837e3 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -409,7 +409,7 @@ passphrase_to_dek (int cipher_algo, STRING2KEY *s2k, if (*canceled) { xfree (pw); - write_status( STATUS_MISSING_PASSPHRASE ); + write_status( STATUS_CANCELED_BY_USER ); return NULL; } } diff --git a/g10/photoid.c b/g10/photoid.c index f9720d3..81ea7a0 100644 --- a/g10/photoid.c +++ b/g10/photoid.c @@ -341,6 +341,11 @@ show_photos (ctrl_t ctrl, const struct user_attribute *attrs, int count, command=pct_expando(opt.photo_viewer,&args); if(!command) goto fail; + if (!*command) + { + xfree (command); + goto fail; + } name=xmalloc(16+strlen(EXTSEP_S)+ strlen(image_type_to_string(args.imagetype,0))+1); diff --git a/g10/pkclist.c b/g10/pkclist.c index 5421649..bfc4f84 100644 --- a/g10/pkclist.c +++ b/g10/pkclist.c @@ -1369,7 +1369,7 @@ build_pk_list (ctrl_t ctrl, strlist_t rcpts, PK_LIST *ret_pk_list) preference list, so I'm including it. -dms */ int -algo_available( preftype_t preftype, int algo, const union pref_hint *hint) +algo_available( preftype_t preftype, int algo, const struct pref_hint *hint) { if( preftype == PREFTYPE_SYM ) { @@ -1395,16 +1395,26 @@ algo_available( preftype_t preftype, int algo, const union pref_hint *hint) { if (hint && hint->digest_length) { - if (hint->digest_length!=20 || opt.flags.dsa2) + unsigned int n = gcry_md_get_algo_dlen (algo); + + if (hint->exact) + { + /* For example ECDSA requires an exact hash value so + * that we do not truncate. For DSA we allow truncation + * and thus exact is not set. */ + if (hint->digest_length != n) + return 0; + } + else if (hint->digest_length!=20 || opt.flags.dsa2) { /* If --enable-dsa2 is set or the hash isn't 160 bits (which implies DSA2), then we'll accept a hash that is larger than we need. Otherwise we won't accept any hash that isn't exactly the right size. */ - if (hint->digest_length > gcry_md_get_algo_dlen (algo)) + if (hint->digest_length > n) return 0; } - else if (hint->digest_length != gcry_md_get_algo_dlen (algo)) + else if (hint->digest_length != n) return 0; } @@ -1441,7 +1451,7 @@ algo_available( preftype_t preftype, int algo, const union pref_hint *hint) */ int select_algo_from_prefs(PK_LIST pk_list, int preftype, - int request, const union pref_hint *hint) + int request, const struct pref_hint *hint) { PK_LIST pkr; u32 bits[8]; diff --git a/g10/plaintext.c b/g10/plaintext.c index f9e0a42..3bc8696 100644 --- a/g10/plaintext.c +++ b/g10/plaintext.c @@ -185,7 +185,7 @@ get_output_file (const byte *embedded_name, int embedded_namelen, want to port it again to riscos we should do most of the suff in estream. FIXME: Consider to remove all riscos special cases. */ - fp = fopen (fname, "wb"); + fp = gnupg_fopen (fname, "wb"); if (!fp) { log_error (_("error creating '%s': %s\n"), fname, gpg_strerror (err)); diff --git a/g10/revoke.c b/g10/revoke.c index 3a08972..035a2e9 100644 --- a/g10/revoke.c +++ b/g10/revoke.c @@ -891,6 +891,16 @@ get_default_uid_revocation_reason(void) return reason; } +struct revocation_reason_info * +get_default_sig_revocation_reason(void) +{ + struct revocation_reason_info *reason; + reason = xmalloc( sizeof *reason ); + reason->code = 0; /* No specific reason given. */ + reason->desc = strdup(""); /* no text */ + return reason; +} + void release_revocation_reason_info( struct revocation_reason_info *reason ) { diff --git a/g10/sig-check.c b/g10/sig-check.c index e71e662..a1dfe38 100644 --- a/g10/sig-check.c +++ b/g10/sig-check.c @@ -457,16 +457,14 @@ check_signature_end_simple (PKT_public_key *pk, PKT_signature *sig, { gcry_mpi_t result = NULL; int rc = 0; - const struct weakhash *weak; if (!opt.flags.allow_weak_digest_algos) { - for (weak = opt.weak_digests; weak; weak = weak->next) - if (sig->digest_algo == weak->algo) - { - print_digest_rejected_note(sig->digest_algo); - return GPG_ERR_DIGEST_ALGO; - } + if (is_weak_digest (sig->digest_algo)) + { + print_digest_rejected_note (sig->digest_algo); + return GPG_ERR_DIGEST_ALGO; + } } /* For key signatures check that the key has a cert usage. We may @@ -462,7 +462,12 @@ do_sign (ctrl_t ctrl, PKT_public_key *pksk, PKT_signature *sig, leave: if (err) - log_error (_("signing failed: %s\n"), gpg_strerror (err)); + { + log_error (_("signing failed: %s\n"), gpg_strerror (err)); + if (gpg_err_source (err) == GPG_ERR_SOURCE_SCD + && gpg_err_code (err) == GPG_ERR_INV_ID) + print_further_info ("a reason might be a card with replaced keys"); + } else { if (opt.verbose) @@ -583,7 +588,7 @@ hash_for (PKT_public_key *pk) { return opt.def_digest_algo; } - else if (recipient_digest_algo) + else if (recipient_digest_algo && !is_weak_digest (recipient_digest_algo)) { return recipient_digest_algo; } @@ -905,7 +910,8 @@ write_signature_packets (ctrl_t ctrl, * and ignore the detached mode. Sign the file with all secret keys * which can be taken from LOCUSR, if this is NULL, use the default one * If ENCRYPTFLAG is true, use REMUSER (or ask if it is NULL) to encrypt the - * signed data for these users. + * signed data for these users. If ENCRYPTFLAG is 2 symmetric encryption + * is also used. * If OUTFILE is not NULL; this file is used for output and the function * does not ask for overwrite permission; output is then always * uncompressed, non-armored and in binary mode. @@ -1035,17 +1041,16 @@ sign_file (ctrl_t ctrl, strlist_t filenames, int detached, strlist_t locusr, select_algo_from_prefs(pk_list,PREFTYPE_HASH, opt.def_digest_algo, NULL)!=opt.def_digest_algo) - log_info(_("WARNING: forcing digest algorithm %s (%d)" - " violates recipient preferences\n"), - gcry_md_algo_name (opt.def_digest_algo), - opt.def_digest_algo ); + log_info(_("WARNING: forcing digest algorithm %s (%d)" + " violates recipient preferences\n"), + gcry_md_algo_name (opt.def_digest_algo), + opt.def_digest_algo ); } else { - int algo, smartcard=0; - union pref_hint hint; - - hint.digest_length = 0; + int algo; + int conflict = 0; + struct pref_hint hint = { 0 }; /* Of course, if the recipient asks for something unreasonable (like the wrong hash for a DSA key) then @@ -1073,32 +1078,44 @@ sign_file (ctrl_t ctrl, strlist_t filenames, int detached, strlist_t locusr, (sk_rover->pk->pkey[1])); if (sk_rover->pk->pubkey_algo == PUBKEY_ALGO_ECDSA) - temp_hashlen = ecdsa_qbits_from_Q (temp_hashlen); - temp_hashlen = (temp_hashlen+7)/8; + { + temp_hashlen = ecdsa_qbits_from_Q (temp_hashlen); + if (!temp_hashlen) + conflict = 1; /* Better don't use the prefs. */ + temp_hashlen = (temp_hashlen+7)/8; + /* Fixup for that funny nistp521 (yes, 521) + * were we need to use a 512 bit hash algo. */ + if (temp_hashlen == 66) + temp_hashlen = 64; + } + else + temp_hashlen = (temp_hashlen+7)/8; /* Pick a hash that is large enough for our - largest q */ - - if (hint.digest_length<temp_hashlen) - hint.digest_length=temp_hashlen; + largest q or matches our Q but if tehreare + several of them we run into a conflict and + don't use the preferences. */ + + if (hint.digest_length < temp_hashlen) + { + if (sk_rover->pk->pubkey_algo == PUBKEY_ALGO_ECDSA) + { + if (hint.exact) + conflict = 1; + hint.exact = 1; + } + hint.digest_length = temp_hashlen; + } } - /* FIXME: need to check gpg-agent for this. */ - /* else if (sk_rover->pk->is_protected */ - /* && sk_rover->pk->protect.s2k.mode == 1002) */ - /* smartcard = 1; */ } - /* Current smartcards only do 160-bit hashes. If we have - to have a >160-bit hash, then we can't use the - recipient prefs as we'd need both =160 and >160 at the - same time and recipient prefs currently require a - single hash for all signatures. All this may well have - to change as the cards add algorithms. */ - - if (!smartcard || (smartcard && hint.digest_length==20)) - if ( (algo= - select_algo_from_prefs(pk_list,PREFTYPE_HASH,-1,&hint)) > 0) - recipient_digest_algo=algo; + if (!conflict + && (algo = select_algo_from_prefs (pk_list,PREFTYPE_HASH, + -1,&hint)) > 0) + { + /* Note that we later check that the algo is not weak. */ + recipient_digest_algo = algo; + } } } diff --git a/g10/tdbio.c b/g10/tdbio.c index 8f75306..9bae2ed 100644 --- a/g10/tdbio.c +++ b/g10/tdbio.c @@ -681,7 +681,7 @@ tdbio_set_dbname (ctrl_t ctrl, const char *new_dbname, * trustdb.gpg. 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) && statbuf.st_size > 0) + if (!gnupg_stat (fname, &statbuf) && statbuf.st_size > 0) { /* OK, we have the valid trustdb.gpg already. */ return 0; @@ -711,19 +711,21 @@ tdbio_set_dbname (ctrl_t ctrl, const char *new_dbname, log_assert (p); save_slash = *p; *p = 0; - if (access (fname, F_OK)) + if (gnupg_access (fname, F_OK)) { try_make_homedir (fname); - if (access (fname, F_OK)) + if (gnupg_access (fname, F_OK)) log_fatal (_("%s: directory does not exist!\n"), fname); } *p = save_slash; take_write_lock (); - if (access (fname, R_OK) || stat (fname, &statbuf) || statbuf.st_size == 0) + if (gnupg_access (fname, R_OK) + || gnupg_stat (fname, &statbuf) + || statbuf.st_size == 0) { - FILE *fp; + estream_t fp; TRUSTREC rec; int rc; mode_t oldmask; @@ -745,13 +747,13 @@ tdbio_set_dbname (ctrl_t ctrl, const char *new_dbname, gpg_err_set_errno (EPERM); } else - fp = fopen (fname, "wb"); + fp = es_fopen (fname, "wb"); umask(oldmask); if (!fp) log_fatal (_("can't create '%s': %s\n"), fname, strerror (errno)); - fclose (fp); + es_fclose (fp); - db_fd = open (db_name, O_RDWR | MY_O_BINARY); + db_fd = gnupg_open (db_name, O_RDWR | MY_O_BINARY, 0); if (db_fd == -1) log_fatal (_("can't open '%s': %s\n"), db_name, strerror (errno)); @@ -811,7 +813,7 @@ open_db () (int)prevrc, (int)GetLastError ()); } #else /*!HAVE_W32CE_SYSTEM*/ - db_fd = open (db_name, O_RDWR | MY_O_BINARY ); + db_fd = gnupg_open (db_name, O_RDWR | MY_O_BINARY, 0); if (db_fd == -1 && (errno == EACCES #ifdef EROFS || errno == EROFS @@ -819,7 +821,7 @@ open_db () ) ) { /* Take care of read-only trustdbs. */ - db_fd = open (db_name, O_RDONLY | MY_O_BINARY ); + db_fd = gnupg_open (db_name, O_RDONLY | MY_O_BINARY, 0); if (db_fd != -1 && !opt.quiet) log_info (_("Note: trustdb not writable\n")); } diff --git a/g10/textfilter.c b/g10/textfilter.c index 96666cf..3e68900 100644 --- a/g10/textfilter.c +++ b/g10/textfilter.c @@ -163,8 +163,8 @@ copy_clearsig_text( IOBUF out, IOBUF inp, gcry_md_hd_t md, int escape_dash, int escape_from) { unsigned int maxlen; - byte *buffer = NULL; /* malloced buffer */ - unsigned int bufsize; /* and size of this buffer */ + byte *buffer = NULL; /* malloced buffer */ + unsigned int bufsize = 0; /* and size of this buffer */ unsigned int n; int truncated = 0; int pending_lf = 0; @@ -197,7 +197,7 @@ begin_transaction (ctrl_t ctrl, int only_batch) /* Check if another process wants to run. (We just ignore any * stat failure. A waiter might have to wait a bit longer, but * otherwise there should be no impact.) */ - if (stat (dbs->want_lock_file, &statbuf) == 0 + if (gnupg_stat (dbs->want_lock_file, &statbuf) == 0 && statbuf.st_ctime != dbs->want_lock_file_ctime) { end_transaction (ctrl, 2); @@ -237,7 +237,7 @@ begin_transaction (ctrl_t ctrl, int only_batch) dbs->in_batch_transaction = 1; dbs->batch_update_started = gnupg_get_time (); - if (stat (dbs->want_lock_file, &statbuf) == 0) + if (gnupg_stat (dbs->want_lock_file, &statbuf) == 0) dbs->want_lock_file_ctime = statbuf.st_ctime; } diff --git a/g13/backend.c b/g13/backend.c index 835c66b..a0a2675 100644 --- a/g13/backend.c +++ b/g13/backend.c @@ -27,6 +27,7 @@ #include "g13.h" #include "../common/i18n.h" +#include "../common/sysutils.h" #include "keyblob.h" #include "backend.h" #include "be-encfs.h" @@ -116,7 +117,7 @@ be_take_lock_for_create (ctrl_t ctrl, const char *fname, dotlock_t *r_lock) /* A quick check to see that no container with that name already exists. */ - if (!access (fname, F_OK)) + if (!gnupg_access (fname, F_OK)) { err = gpg_error (GPG_ERR_EEXIST); goto leave; @@ -138,7 +139,7 @@ be_take_lock_for_create (ctrl_t ctrl, const char *fname, dotlock_t *r_lock) } /* Check again that the file does not exist. */ - err = stat (fname, &sb)? 0 : gpg_error (GPG_ERR_EEXIST); + err = gnupg_stat (fname, &sb)? 0 : gpg_error (GPG_ERR_EEXIST); leave: if (!err) diff --git a/g13/create.c b/g13/create.c index d773dfa..ac4d130 100644 --- a/g13/create.c +++ b/g13/create.c @@ -33,6 +33,7 @@ #include "keyblob.h" #include "backend.h" #include "g13tuple.h" +#include "../common/sysutils.h" #include "../common/call-gpg.h" /* Create a new blob with all the session keys and other meta @@ -250,7 +251,7 @@ g13_create_container (ctrl_t ctrl, const char *filename) { struct stat sb; - if (!stat (detachedname, &sb)) + if (!gnupg_stat (detachedname, &sb)) { err = gpg_error (GPG_ERR_EEXIST); goto leave; diff --git a/g13/g13-syshelp.c b/g13/g13-syshelp.c index 4ce74ee..e6755d5 100644 --- a/g13/g13-syshelp.c +++ b/g13/g13-syshelp.c @@ -325,7 +325,7 @@ main ( int argc, char **argv) if (configname) { configlineno = 0; - configfp = fopen (configname, "r"); + configfp = gnupg_fopen (configname, "r"); if (!configfp) { if (default_config) @@ -588,7 +588,7 @@ g13_syshelp_i_know_what_i_am_doing (void) char *fname; fname = make_filename (gnupg_sysconfdir (), yesfile, NULL); - if (access (fname, F_OK)) + if (gnupg_access (fname, F_OK)) { log_info ("*******************************************************\n"); log_info ("* The G13 support for DM-Crypt is new and not matured.\n"); @@ -454,7 +454,7 @@ main ( int argc, char **argv) if (configname) { configlineno = 0; - configfp = fopen (configname, "r"); + configfp = gnupg_fopen (configname, "r"); if (!configfp) { if (default_config) diff --git a/g13/mount.c b/g13/mount.c index dc415b1..45b6080 100644 --- a/g13/mount.c +++ b/g13/mount.c @@ -76,7 +76,7 @@ g13_mount_container (ctrl_t ctrl, const char *filename, const char *mountpoint) else { /* A quick check to see whether we can the container exists. */ - if (access (filename, R_OK)) + if (gnupg_access (filename, R_OK)) return gpg_error_from_syserror (); } @@ -121,7 +121,7 @@ g13_mount_container (ctrl_t ctrl, const char *filename, const char *mountpoint) { struct stat sb; - if (stat (filename, &sb)) + if (gnupg_stat (filename, &sb)) { err = gpg_error_from_syserror (); goto leave; diff --git a/g13/sh-dmcrypt.c b/g13/sh-dmcrypt.c index 09c4d96..6f7173e 100644 --- a/g13/sh-dmcrypt.c +++ b/g13/sh-dmcrypt.c @@ -41,6 +41,7 @@ #include "../common/i18n.h" #include "g13tuple.h" #include "../common/exectool.h" +#include "../common/sysutils.h" #include "keyblob.h" /* The standard disk block size (logical). */ @@ -94,7 +95,7 @@ check_blockdev (const char *devname, int expect_busy) char **fields = NULL; int lno, count; - if (stat (devname, &sb)) + if (gnupg_stat (devname, &sb)) { err = gpg_error_from_syserror (); log_error ("error stating '%s': %s\n", devname, gpg_strerror (err)); diff --git a/g13/suspend.c b/g13/suspend.c index 0aa20f0..44c52dd 100644 --- a/g13/suspend.c +++ b/g13/suspend.c @@ -28,6 +28,7 @@ #include "g13.h" #include "../common/i18n.h" +#include "../common/sysutils.h" #include "suspend.h" #include "keyblob.h" @@ -45,7 +46,7 @@ g13_suspend_container (ctrl_t ctrl, const char *filename) int needs_syshelp; /* A quick check to see whether the container exists. */ - if (access (filename, R_OK)) + if (gnupg_access (filename, R_OK)) return gpg_error_from_syserror (); /* Decide whether we need to use the g13-syshelp because we can't @@ -80,7 +81,7 @@ g13_resume_container (ctrl_t ctrl, const char *filename) char *mountpoint_buffer = NULL; /* A quick check to see whether the container exists. */ - if (access (filename, R_OK)) + if (gnupg_access (filename, R_OK)) return gpg_error_from_syserror (); /* Decide whether we need to use the g13-syshelp because we can't diff --git a/kbx/kbxutil.c b/kbx/kbxutil.c index f156122..ec5a43b 100644 --- a/kbx/kbxutil.c +++ b/kbx/kbxutil.c @@ -272,7 +272,7 @@ read_file (const char *fname, size_t *r_length) { struct stat st; - fp = fopen (fname, "rb"); + fp = gnupg_fopen (fname, "rb"); if (!fp) { log_error ("can't open '%s': %s\n", fname, strerror (errno)); @@ -418,7 +418,7 @@ import_openpgp (const char *filename, int dryrun) } else { - fflush (stdout); + es_fflush (es_stdout); log_info ("%s: failed to parse OpenPGP keyblock: %s\n", filename, gpg_strerror (err)); } @@ -432,17 +432,17 @@ import_openpgp (const char *filename, int dryrun) err = _keybox_create_openpgp_blob (&blob, &info, p, nparsed, 0); if (err) { - fflush (stdout); + es_fflush (es_stdout); log_error ("%s: failed to create OpenPGP keyblock: %s\n", filename, gpg_strerror (err)); } else { - err = _keybox_write_blob (blob, stdout); + err = _keybox_write_blob (blob, es_stdout, NULL); _keybox_release_blob (blob); if (err) { - fflush (stdout); + es_fflush (es_stdout); log_error ("%s: failed to write OpenPGP keyblock: %s\n", filename, gpg_strerror (err)); } diff --git a/kbx/keybox-defs.h b/kbx/keybox-defs.h index d2b79ba..2751b4b 100644 --- a/kbx/keybox-defs.h +++ b/kbx/keybox-defs.h @@ -80,7 +80,7 @@ struct keybox_found_s struct keybox_handle { KB_NAME kb; int secret; /* this is for a secret keybox */ - FILE *fp; + estream_t fp; int eof; int error; int ephemeral; @@ -169,8 +169,8 @@ void _keybox_destroy_openpgp_info (keybox_openpgp_info_t info); /*-- keybox-file.c --*/ -int _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted); -int _keybox_write_blob (KEYBOXBLOB blob, FILE *fp); +int _keybox_read_blob (KEYBOXBLOB *r_blob, estream_t fp, int *skipped_deleted); +int _keybox_write_blob (KEYBOXBLOB blob, estream_t fp, FILE *outfp); /*-- keybox-search.c --*/ gpg_err_code_t _keybox_get_flag_location (const unsigned char *buffer, diff --git a/kbx/keybox-dump.c b/kbx/keybox-dump.c index 3bafbaa..3e66b72 100644 --- a/kbx/keybox-dump.c +++ b/kbx/keybox-dump.c @@ -84,6 +84,7 @@ print_checksum (const byte *buffer, size_t length, size_t unhashed, FILE *fp) } else hashlen = 20; + if (length < 5+unhashed) { fputs ("[blob too short for a checksum]\n", fp); @@ -170,6 +171,8 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) ulong nserial; ulong unhashed; const byte *p; + const byte *pend; + int is_fpr32; /* blob version 2 */ buffer = _keybox_get_blob_image (blob, &length); @@ -207,7 +210,9 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) fprintf (fp, "[can't dump this blob type]\n"); return 0; } + /* Here we have either BLOGTYPE_X509 or BLOBTYPE_OPENPGP */ fprintf (fp, "Version: %d\n", buffer[5]); + is_fpr32 = buffer[5] == 2; if (length < 40) { @@ -247,7 +252,18 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) || rawdata_off+rawdata_len > length || rawdata_len + 4 > length || rawdata_off+rawdata_len + 4 > length) - fprintf (fp, "[Error: raw data larger than blob]\n"); + { + fprintf (fp, "[Error: raw data larger than blob]\n"); + return -1; + } + + if (rawdata_off > length + || rawdata_len > length + || rawdata_off + rawdata_len > length) + { + fprintf (fp, "[Error: unhashed data larger than blob]\n"); + return -1; + } unhashed = length - rawdata_off - rawdata_len; fprintf (fp, "Unhashed: %lu\n", unhashed); @@ -260,26 +276,66 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) keyinfolen = get16 (buffer + 18 ); fprintf (fp, "Key-Info-Length: %lu\n", keyinfolen); - /* fixme: check bounds */ p = buffer + 20; + pend = buffer + length; for (n=0; n < nkeys; n++, p += keyinfolen) { ulong kidoff, kflags; + if (p + keyinfolen >= pend) + { + fprintf (fp, "[Error: key data larger than blob]\n"); + return -1; + } + fprintf (fp, "Key-Fpr[%lu]: ", n ); - for (i=0; i < 20; i++ ) - fprintf (fp, "%02X", p[i]); - kidoff = get32 (p + 20); - fprintf (fp, "\nKey-Kid-Off[%lu]: %lu\n", n, kidoff ); - fprintf (fp, "Key-Kid[%lu]: ", n ); - /* fixme: check bounds */ - for (i=0; i < 8; i++ ) - fprintf (fp, "%02X", buffer[kidoff+i] ); - kflags = get16 (p + 24 ); + if (is_fpr32) + { + if (p + 32 + 2 >= pend) + { + fprintf (fp, "[Error: fingerprint data larger than blob]\n"); + return -1; + } + kflags = get16 (p + 32 ); + for (i=0; i < ((kflags & 0x80)?32:20); i++ ) + fprintf (fp, "%02X", p[i]); + } + else + { + if (p + 20 + 4 >= pend) + { + fprintf (fp, "[Error: fingerprint data larger than blob]\n"); + return -1; + } + for (i=0; i < 20; i++ ) + fprintf (fp, "%02X", p[i]); + kidoff = get32 (p + 20); + fprintf (fp, "\nKey-Kid-Off[%lu]: %lu\n", n, kidoff ); + fprintf (fp, "Key-Kid[%lu]: ", n ); + + if (p + kidoff + 8 >= pend) + { + fprintf (fp, "[Error: fingerprint data larger than blob]\n"); + return -1; + } + for (i=0; i < 8; i++ ) + fprintf (fp, "%02X", buffer[kidoff+i] ); + if (p + 24 >= pend) + { + fprintf (fp, "[Error: fingerprint data larger than blob]\n"); + return -1; + } + kflags = get16 (p + 24); + } fprintf( fp, "\nKey-Flags[%lu]: %04lX\n", n, kflags); } /* serial number */ + if (p + 2 >= pend) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } fputs ("Serial-No: ", fp); nserial = get16 (p); p += 2; @@ -287,22 +343,37 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) fputs ("none", fp); else { + if (p + nserial >= pend) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } for (; nserial; nserial--, p++) fprintf (fp, "%02X", *p); } putc ('\n', fp); /* user IDs */ + if (p + 4 >= pend) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } nuids = get16 (p); fprintf (fp, "Uid-Count: %lu\n", nuids ); uidinfolen = get16 (p + 2); fprintf (fp, "Uid-Info-Length: %lu\n", uidinfolen); - /* fixme: check bounds */ p += 4; for (n=0; n < nuids; n++, p += uidinfolen) { ulong uidoff, uidlen, uflags; + if (p + uidinfolen >= pend || uidinfolen < 8) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } + uidoff = get32( p ); uidlen = get32( p+4 ); if (type == KEYBOX_BLOBTYPE_X509 && !n) @@ -323,8 +394,21 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) fprintf (fp, "Uid-Len[%lu]: %lu\n", n, uidlen ); fprintf (fp, "Uid[%lu]: \"", n ); } + + if (uidoff + uidlen > length + || uidoff + uidlen < uidoff + || uidoff + uidlen < uidlen) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } print_string (fp, buffer+uidoff, uidlen, '\"'); fputs ("\"\n", fp); + if (p + 8 + 2 + 1 >= pend) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } uflags = get16 (p + 8); if (type == KEYBOX_BLOBTYPE_X509 && !n) { @@ -343,11 +427,15 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) } } + if (p + 2 + 2 >= pend) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } nsigs = get16 (p); fprintf (fp, "Sig-Count: %lu\n", nsigs ); siginfolen = get16 (p + 2); fprintf (fp, "Sig-Info-Length: %lu\n", siginfolen ); - /* fixme: check bounds */ p += 4; { int in_range = 0; @@ -357,6 +445,11 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) { ulong sflags; + if (p + siginfolen >= pend || siginfolen < 4) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } sflags = get32 (p); if (!in_range && !sflags) { @@ -390,6 +483,12 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) if (in_range) fprintf (fp, "Sig-Expire[%lu-%lu]: [not checked]\n", first, n-1); } + + if (p + 16 >= pend) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } fprintf (fp, "Ownertrust: %d\n", p[0] ); fprintf (fp, "All-Validity: %d\n", p[1] ); p += 4; @@ -402,6 +501,12 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp) n = get32 (p ); p += 4; fprintf (fp, "Created-At: %lu\n", n ); + + if (p + 4 >= pend) + { + fprintf (fp, "[Error: data larger than blob]\n"); + return -1; + } n = get32 (p ); fprintf (fp, "Reserved-Space: %lu\n", n ); @@ -542,18 +647,18 @@ update_stats (KEYBOXBLOB blob, struct file_stats_s *s) -static FILE * +static estream_t open_file (const char **filename, FILE *outfp) { - FILE *fp; + estream_t fp; if (!*filename) { *filename = "-"; - fp = stdin; + fp = es_stdin; } else - fp = fopen (*filename, "rb"); + fp = es_fopen (*filename, "rb"); if (!fp) { int save_errno = errno; @@ -568,7 +673,7 @@ open_file (const char **filename, FILE *outfp) int _keybox_dump_file (const char *filename, int stats_only, FILE *outfp) { - FILE *fp; + estream_t fp; KEYBOXBLOB blob; int rc; unsigned long count = 0; @@ -621,8 +726,8 @@ _keybox_dump_file (const char *filename, int stats_only, FILE *outfp) if (rc) fprintf (outfp, "# error reading '%s': %s\n", filename, gpg_strerror (rc)); - if (fp != stdin) - fclose (fp); + if (fp != es_stdin) + es_fclose (fp); if (stats_only) { @@ -682,7 +787,7 @@ cmp_dupitems (const void *arg_a, const void *arg_b) int _keybox_dump_find_dups (const char *filename, int print_them, FILE *outfp) { - FILE *fp; + estream_t fp; KEYBOXBLOB blob; int rc; unsigned long recno = 0; @@ -744,8 +849,8 @@ _keybox_dump_find_dups (const char *filename, int print_them, FILE *outfp) rc = 0; if (rc) fprintf (outfp, "error reading '%s': %s\n", filename, gpg_strerror (rc)); - if (fp != stdin) - fclose (fp); + if (fp != es_stdin) + es_fclose (fp); qsort (dupitems, dupitems_count, sizeof *dupitems, cmp_dupitems); @@ -775,7 +880,7 @@ int _keybox_dump_cut_records (const char *filename, unsigned long from, unsigned long to, FILE *outfp) { - FILE *fp; + estream_t fp; KEYBOXBLOB blob; int rc; unsigned long recno = 0; @@ -789,7 +894,7 @@ _keybox_dump_cut_records (const char *filename, unsigned long from, break; /* Ready. */ if (recno >= from) { - if ((rc = _keybox_write_blob (blob, outfp))) + if ((rc = _keybox_write_blob (blob, NULL, outfp))) { fprintf (stderr, "error writing output: %s\n", gpg_strerror (rc)); @@ -804,7 +909,7 @@ _keybox_dump_cut_records (const char *filename, unsigned long from, if (rc) fprintf (stderr, "error reading '%s': %s\n", filename, gpg_strerror (rc)); leave: - if (fp != stdin) - fclose (fp); + if (fp != es_stdin) + es_fclose (fp); return rc; } diff --git a/kbx/keybox-file.c b/kbx/keybox-file.c index 046e321..c36f5be 100644 --- a/kbx/keybox-file.c +++ b/kbx/keybox-file.c @@ -48,7 +48,7 @@ ftello (FILE *stream) /* Read a block at the current position and return it in R_BLOB. R_BLOB may be NULL to simply skip the current block. */ int -_keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted) +_keybox_read_blob (KEYBOXBLOB *r_blob, estream_t fp, int *skipped_deleted) { unsigned char *image; size_t imagelen = 0; @@ -61,19 +61,19 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted) again: if (r_blob) *r_blob = NULL; - off = ftello (fp); + off = es_ftello (fp); if (off == (off_t)-1) return gpg_error_from_syserror (); - if ((c1 = getc (fp)) == EOF - || (c2 = getc (fp)) == EOF - || (c3 = getc (fp)) == EOF - || (c4 = getc (fp)) == EOF - || (type = getc (fp)) == EOF) + if ((c1 = es_getc (fp)) == EOF + || (c2 = es_getc (fp)) == EOF + || (c3 = es_getc (fp)) == EOF + || (c4 = es_getc (fp)) == EOF + || (type = es_getc (fp)) == EOF) { - if ( c1 == EOF && !ferror (fp) ) + if ( c1 == EOF && !es_ferror (fp) ) return -1; /* eof */ - if (!ferror (fp)) + if (!es_ferror (fp)) return gpg_error (GPG_ERR_TOO_SHORT); return gpg_error_from_syserror (); } @@ -85,7 +85,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted) if (!type) { /* Special treatment for empty blobs. */ - if (fseek (fp, imagelen-5, SEEK_CUR)) + if (es_fseek (fp, imagelen-5, SEEK_CUR)) return gpg_error_from_syserror (); if (skipped_deleted) *skipped_deleted = 1; @@ -96,7 +96,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted) { /* Seek forward so that the caller may choose to ignore this record. */ - if (fseek (fp, imagelen-5, SEEK_CUR)) + if (es_fseek (fp, imagelen-5, SEEK_CUR)) return gpg_error_from_syserror (); return gpg_error (GPG_ERR_TOO_LARGE); } @@ -104,7 +104,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted) if (!r_blob) { /* This blob shall be skipped. */ - if (fseek (fp, imagelen-5, SEEK_CUR)) + if (es_fseek (fp, imagelen-5, SEEK_CUR)) return gpg_error_from_syserror (); return 0; } @@ -114,7 +114,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted) return gpg_error_from_syserror (); image[0] = c1; image[1] = c2; image[2] = c3; image[3] = c4; image[4] = type; - if (fread (image+5, imagelen-5, 1, fp) != 1) + if (es_fread (image+5, imagelen-5, 1, fp) != 1) { gpg_error_t tmperr = gpg_error_from_syserror (); xfree (image); @@ -130,7 +130,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted) /* Write the block to the current file position */ int -_keybox_write_blob (KEYBOXBLOB blob, FILE *fp) +_keybox_write_blob (KEYBOXBLOB blob, estream_t fp, FILE *outfp) { const unsigned char *image; size_t length; @@ -140,15 +140,24 @@ _keybox_write_blob (KEYBOXBLOB blob, FILE *fp) if (length > IMAGELEN_LIMIT) return gpg_error (GPG_ERR_TOO_LARGE); - if (fwrite (image, length, 1, fp) != 1) - return gpg_error_from_syserror (); + if (fp) + { + if (es_fwrite (image, length, 1, fp) != 1) + return gpg_error_from_syserror (); + } + else + { + if (fwrite (image, length, 1, outfp) != 1) + return gpg_error_from_syserror (); + } + return 0; } /* Write a fresh header type blob. */ int -_keybox_write_header_blob (FILE *fp, int for_openpgp) +_keybox_write_header_blob (estream_t fp, int for_openpgp) { unsigned char image[32]; u32 val; @@ -174,7 +183,8 @@ _keybox_write_header_blob (FILE *fp, int for_openpgp) image[20+2] = (val >> 8); image[20+3] = (val ); - if (fwrite (image, 32, 1, fp) != 1) + if (es_fwrite (image, 32, 1, fp) != 1) return gpg_error_from_syserror (); + return 0; } diff --git a/kbx/keybox-init.c b/kbx/keybox-init.c index e6c3ad2..6cabaea 100644 --- a/kbx/keybox-init.c +++ b/kbx/keybox-init.c @@ -25,6 +25,7 @@ #include <assert.h> #include "keybox-defs.h" +#include "../common/sysutils.h" #include "../common/mischelp.h" static KB_NAME kb_names; @@ -80,7 +81,7 @@ keybox_is_writable (void *token) { KB_NAME r = token; - return r? !access (r->fname, W_OK) : 0; + return r? !gnupg_access (r->fname, W_OK) : 0; } @@ -179,7 +180,7 @@ keybox_release (KEYBOX_HANDLE hd) _keybox_release_blob (hd->saved_found.blob); if (hd->fp) { - fclose (hd->fp); + es_fclose (hd->fp); hd->fp = NULL; } xfree (hd->word_match.name); @@ -252,11 +253,11 @@ _keybox_close_file (KEYBOX_HANDLE hd) { if (roverhd->fp) { - fclose (roverhd->fp); + es_fclose (roverhd->fp); roverhd->fp = NULL; } } - assert (!hd->fp); + log_assert (!hd->fp); } diff --git a/kbx/keybox-search.c b/kbx/keybox-search.c index c07fe81..53ed66b 100644 --- a/kbx/keybox-search.c +++ b/kbx/keybox-search.c @@ -782,7 +782,7 @@ static gpg_error_t open_file (KEYBOX_HANDLE hd) { - hd->fp = fopen (hd->kb->fname, "rb"); + hd->fp = es_fopen (hd->kb->fname, "rb"); if (!hd->fp) { hd->error = gpg_error_from_syserror (); @@ -814,11 +814,11 @@ keybox_search_reset (KEYBOX_HANDLE hd) if (hd->fp) { - if (fseeko (hd->fp, 0, SEEK_SET)) + if (es_fseeko (hd->fp, 0, SEEK_SET)) { /* Ooops. Seek did not work. Close so that the search will * open the file again. */ - fclose (hd->fp); + es_fclose (hd->fp); hd->fp = NULL; } } @@ -909,7 +909,7 @@ keybox_search (KEYBOX_HANDLE hd, KEYBOX_SEARCH_DESC *desc, size_t ndesc, * returned a blob which also was not the first one. We now * need to skip over that blob and hope that the file has * not changed. */ - if (fseeko (hd->fp, lastfoundoff, SEEK_SET)) + if (es_fseeko (hd->fp, lastfoundoff, SEEK_SET)) { rc = gpg_error_from_syserror (); log_debug ("%s: seeking to last found offset failed: %s\n", @@ -1285,7 +1285,7 @@ keybox_offset (KEYBOX_HANDLE hd) { if (!hd->fp) return 0; - return ftello (hd->fp); + return es_ftello (hd->fp); } gpg_error_t @@ -1310,7 +1310,7 @@ keybox_seek (KEYBOX_HANDLE hd, off_t offset) return err; } - err = fseeko (hd->fp, offset, SEEK_SET); + err = es_fseeko (hd->fp, offset, SEEK_SET); hd->error = gpg_error_from_errno (err); return hd->error; diff --git a/kbx/keybox-update.c b/kbx/keybox-update.c index e25596b..ddda52a 100644 --- a/kbx/keybox-update.c +++ b/kbx/keybox-update.c @@ -71,14 +71,14 @@ fseeko (FILE * stream, off_t newpos, int whence) static int create_tmp_file (const char *template, - char **r_bakfname, char **r_tmpfname, FILE **r_fp) + char **r_bakfname, char **r_tmpfname, estream_t *r_fp) { gpg_error_t err; err = keybox_tmp_names (template, 0, r_bakfname, r_tmpfname); if (!err) { - *r_fp = fopen (*r_tmpfname, "wb"); + *r_fp = es_fopen (*r_tmpfname, "wb"); if (!*r_fp) { err = gpg_error_from_syserror (); @@ -161,8 +161,9 @@ static int blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, int secret, int for_openpgp, off_t start_offset) { - FILE *fp, *newfp; - int rc=0; + gpg_err_code_t ec; + estream_t fp, newfp; + int rc = 0; char *bakfname = NULL; char *tmpfname = NULL; char buffer[4096]; /* (Must be at least 32 bytes) */ @@ -170,33 +171,33 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, /* Open the source file. Because we do a rename, we have to check the permissions of the file */ - if (access (fname, W_OK)) - return gpg_error_from_syserror (); + if ((ec = gnupg_access (fname, W_OK))) + return gpg_error (ec); - fp = fopen (fname, "rb"); + fp = es_fopen (fname, "rb"); if (mode == FILECOPY_INSERT && !fp && errno == ENOENT) { /* Insert mode but file does not exist: Create a new keybox file. */ - newfp = fopen (fname, "wb"); + newfp = es_fopen (fname, "wb"); if (!newfp ) return gpg_error_from_syserror (); rc = _keybox_write_header_blob (newfp, for_openpgp); if (rc) { - fclose (newfp); + es_fclose (newfp); return rc; } - rc = _keybox_write_blob (blob, newfp); + rc = _keybox_write_blob (blob, newfp, NULL); if (rc) { - fclose (newfp); + es_fclose (newfp); return rc; } - if ( fclose (newfp) ) + if ( es_fclose (newfp) ) return gpg_error_from_syserror (); /* if (chmod( fname, S_IRUSR | S_IWUSR )) */ @@ -217,7 +218,7 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp); if (rc) { - fclose (fp); + es_fclose (fp); goto leave; } @@ -229,7 +230,7 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, /* Copy everything to the new file. If this is for OpenPGP, we make sure that the openpgp flag is set in the header. (We failsafe the blob type.) */ - while ( (nread = fread (buffer, 1, DIM(buffer), fp)) > 0 ) + while ( (nread = es_fread (buffer, 1, DIM(buffer), fp)) > 0 ) { if (first_record && for_openpgp && buffer[4] == KEYBOX_BLOBTYPE_HEADER) @@ -238,19 +239,19 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, buffer[7] |= 0x02; /* OpenPGP data may be available. */ } - if (fwrite (buffer, nread, 1, newfp) != 1) + if (es_fwrite (buffer, nread, 1, newfp) != 1) { rc = gpg_error_from_syserror (); - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); goto leave; } } - if (ferror (fp)) + if (es_ferror (fp)) { rc = gpg_error_from_syserror (); - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); goto leave; } } @@ -266,24 +267,24 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, nbytes = DIM(buffer); if (current + nbytes > start_offset) nbytes = start_offset - current; - nread = fread (buffer, 1, nbytes, fp); + nread = es_fread (buffer, 1, nbytes, fp); if (!nread) break; current += nread; - if (fwrite (buffer, nread, 1, newfp) != 1) + if (es_fwrite (buffer, nread, 1, newfp) != 1) { rc = gpg_error_from_syserror (); - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); goto leave; } } - if (ferror (fp)) + if (es_ferror (fp)) { rc = gpg_error_from_syserror (); - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); goto leave; } @@ -291,8 +292,8 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, rc = _keybox_read_blob (NULL, fp, NULL); if (rc) { - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); return rc; } } @@ -300,11 +301,11 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, /* Do an insert or update. */ if ( mode == FILECOPY_INSERT || mode == FILECOPY_UPDATE ) { - rc = _keybox_write_blob (blob, newfp); + rc = _keybox_write_blob (blob, newfp, NULL); if (rc) { - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); return rc; } } @@ -312,33 +313,33 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob, /* Copy the rest of the packet for an delete or update. */ if (mode == FILECOPY_DELETE || mode == FILECOPY_UPDATE) { - while ( (nread = fread (buffer, 1, DIM(buffer), fp)) > 0 ) + while ( (nread = es_fread (buffer, 1, DIM(buffer), fp)) > 0 ) { - if (fwrite (buffer, nread, 1, newfp) != 1) + if (es_fwrite (buffer, nread, 1, newfp) != 1) { rc = gpg_error_from_syserror (); - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); goto leave; } } - if (ferror (fp)) + if (es_ferror (fp)) { rc = gpg_error_from_syserror (); - fclose (fp); - fclose (newfp); + es_fclose (fp); + es_fclose (newfp); goto leave; } } /* Close both files. */ - if (fclose(fp)) + if (es_fclose(fp)) { rc = gpg_error_from_syserror (); - fclose (newfp); + es_fclose (newfp); goto leave; } - if (fclose(newfp)) + if (es_fclose(newfp)) { rc = gpg_error_from_syserror (); goto leave; @@ -503,7 +504,7 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value) { off_t off; const char *fname; - FILE *fp; + estream_t fp; gpg_err_code_t ec; size_t flag_pos, flag_size; const unsigned char *buffer; @@ -535,12 +536,12 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value) off += flag_pos; _keybox_close_file (hd); - fp = fopen (hd->kb->fname, "r+b"); + fp = es_fopen (hd->kb->fname, "r+b"); if (!fp) return gpg_error_from_syserror (); ec = 0; - if (fseeko (fp, off, SEEK_SET)) + if (es_fseeko (fp, off, SEEK_SET)) ec = gpg_err_code_from_syserror (); else { @@ -556,7 +557,7 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value) case 1: case 2: case 4: - if (fwrite (tmp+4-flag_size, flag_size, 1, fp) != 1) + if (es_fwrite (tmp+4-flag_size, flag_size, 1, fp) != 1) ec = gpg_err_code_from_syserror (); break; default: @@ -565,7 +566,7 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value) } } - if (fclose (fp)) + if (es_fclose (fp)) { if (!ec) ec = gpg_err_code_from_syserror (); @@ -581,7 +582,7 @@ keybox_delete (KEYBOX_HANDLE hd) { off_t off; const char *fname; - FILE *fp; + estream_t fp; int rc; if (!hd) @@ -600,18 +601,18 @@ keybox_delete (KEYBOX_HANDLE hd) off += 4; _keybox_close_file (hd); - fp = fopen (hd->kb->fname, "r+b"); + fp = es_fopen (hd->kb->fname, "r+b"); if (!fp) return gpg_error_from_syserror (); - if (fseeko (fp, off, SEEK_SET)) + if (es_fseeko (fp, off, SEEK_SET)) rc = gpg_error_from_syserror (); - else if (putc (0, fp) == EOF) + else if (es_fputc (0, fp) == EOF) rc = gpg_error_from_syserror (); else rc = 0; - if (fclose (fp)) + if (es_fclose (fp)) { if (!rc) rc = gpg_error_from_syserror (); @@ -626,9 +627,10 @@ keybox_delete (KEYBOX_HANDLE hd) int keybox_compress (KEYBOX_HANDLE hd) { + gpg_err_code_t ec; int read_rc, rc; const char *fname; - FILE *fp, *newfp; + estream_t fp, newfp; char *bakfname = NULL; char *tmpfname = NULL; int first_blob; @@ -651,10 +653,10 @@ keybox_compress (KEYBOX_HANDLE hd) /* Open the source file. Because we do a rename, we have to check the permissions of the file */ - if (access (fname, W_OK)) - return gpg_error_from_syserror (); + if ((ec = gnupg_access (fname, W_OK))) + return gpg_error (ec); - fp = fopen (fname, "rb"); + fp = es_fopen (fname, "rb"); if (!fp && errno == ENOENT) return 0; /* Ready. File has been deleted right after the access above. */ if (!fp) @@ -677,21 +679,21 @@ keybox_compress (KEYBOX_HANDLE hd) if ( (last_maint + 3*3600) > make_timestamp () ) { - fclose (fp); + es_fclose (fp); _keybox_release_blob (blob); return 0; /* Compress run not yet needed. */ } } _keybox_release_blob (blob); - fseek (fp, 0, SEEK_SET); - clearerr (fp); + es_fseek (fp, 0, SEEK_SET); + es_clearerr (fp); } /* Create the new file. */ rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp); if (rc) { - fclose (fp); + es_fclose (fp); return rc;; } @@ -723,7 +725,7 @@ keybox_compress (KEYBOX_HANDLE hd) stamp and if needed (ie. used by gpg) set the openpgp flag. */ _keybox_update_header_blob (blob, hd->for_openpgp); - rc = _keybox_write_blob (blob, newfp); + rc = _keybox_write_blob (blob, newfp, NULL); if (rc) break; continue; @@ -767,7 +769,7 @@ keybox_compress (KEYBOX_HANDLE hd) } } - rc = _keybox_write_blob (blob, newfp); + rc = _keybox_write_blob (blob, newfp, NULL); if (rc) break; } @@ -780,9 +782,9 @@ keybox_compress (KEYBOX_HANDLE hd) rc = read_rc; /* Close both files. */ - if (fclose(fp) && !rc) + if (es_fclose(fp) && !rc) rc = gpg_error_from_syserror (); - if (fclose(newfp) && !rc) + if (es_fclose(newfp) && !rc) rc = gpg_error_from_syserror (); /* Rename or remove the temporary file. */ diff --git a/kbx/keybox.h b/kbx/keybox.h index 4d94157..c5f9b57 100644 --- a/kbx/keybox.h +++ b/kbx/keybox.h @@ -81,7 +81,7 @@ gpg_error_t keybox_lock (KEYBOX_HANDLE hd, int yes, long timeout); /*-- keybox-file.c --*/ /* Fixme: This function does not belong here: Provide a better interface to create a new keybox file. */ -int _keybox_write_header_blob (FILE *fp, int openpgp_flag); +int _keybox_write_header_blob (estream_t fp, int openpgp_flag); /*-- keybox-search.c --*/ gpg_error_t keybox_get_keyblock (KEYBOX_HANDLE hd, iobuf_t *r_iobuf, diff --git a/po/POTFILES.in b/po/POTFILES.in index 70b5d45..a281946 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -30,6 +30,7 @@ common/logging.c common/utf8conv.c common/dotlock.c common/init.c +common/homedir.c g10/armor.c g10/build-packet.c @@ -1852,6 +1852,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "AVÃS: «%s» és un fitxer buit\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "no podeu usar l'algorisme de xifratge «%s» mentre esteu en mode %s\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "no podeu usar l'algorisme de resum %s mentre esteu en mode %s\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "s'està llegint des de «%s»\n" @@ -1863,10 +1871,6 @@ msgstr "" "forçar el xifrat asimètric %s (%d) viola les preferències del destinatari\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "no podeu usar l'algorisme de xifratge «%s» mentre esteu en mode %s\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "AVÃS: %s és una opció desaconsellada.\n" @@ -2162,6 +2166,11 @@ msgstr "signa una clau" msgid "quickly sign a key locally" msgstr "signa una clau localment" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "genera un nou parell de claus" + msgid "sign a key" msgstr "signa una clau" @@ -2662,10 +2671,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s encara no funciona amb %s\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "no podeu usar l'algorisme de resum %s mentre esteu en mode %s\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "no podeu usar l'algorisme de compressió %s mentre esteu en mode %s\n" @@ -3855,6 +3860,15 @@ msgstr "Usuari inexistent.\n" msgid "Nothing to sign.\n" msgstr "No hi ha res que signar amb la clau %08lX\n" +#, c-format +msgid "Not signed by you.\n" +msgstr "" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "no s'ha pogut comprovar la signatura creada: %s\n" + #, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s no és un joc de carà cters và lid\n" @@ -4176,9 +4190,6 @@ msgstr "Esteu segur de que encara voleu revocarla? (s/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Voleu crear un certificat de revocació per a aquesta signatura? (s/N) " -msgid "Not signed by you.\n" -msgstr "" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Heu signat els següents ID d'usuari:\n" @@ -1713,6 +1713,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "VAROVÃNÃ: soubor „%s“ je prázdný\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "Å¡ifrovacà algoritmus „%s“ se nesmà použÃvat v režimu %s\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "hashovacà algoritmus „%s“ se nesmà použÃvat v režimu %s\n" + +#, c-format msgid "reading from '%s'\n" msgstr "Äte se z „%s“\n" @@ -1723,10 +1731,6 @@ msgstr "" "VAROVÃNÃ: vyžádaná symetrická Å¡ifra %s (%d) nevyhovuje pÅ™edvolbám pÅ™Ãjemce\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "Å¡ifrovacà algoritmus „%s“ se nesmà použÃvat v režimu %s\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "VAROVÃNÃ: klÃÄ %s nenà vhodný pro Å¡ifrovánà v režimu %s\n" @@ -1982,6 +1986,11 @@ msgstr "rychle podepsat klÃÄ" msgid "quickly sign a key locally" msgstr "rychle lokálnÄ› podepsat klÃÄ" +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "rychle odvolat identitu uživatele" + msgid "sign a key" msgstr "podepsat klÃÄ" @@ -2454,10 +2463,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s dosud nenà funkÄnà s %s\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "hashovacà algoritmus „%s“ se nesmà použÃvat v režimu %s\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "kompresnà algoritmus „%s“ se nesmà použÃvat v režimu %s\n" @@ -3554,6 +3559,15 @@ msgid "Nothing to sign.\n" msgstr "Nic na podepsánÃ.\n" #, c-format +msgid "Not signed by you.\n" +msgstr "Nepodepsáno vámi.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "kontrola vytvoÅ™eného podpisu se nepodaÅ™ila: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "„%s“ nenà platná doba expirace\n" @@ -3844,9 +3858,6 @@ msgstr "Jste si jisti, že jej chcete stále odvolat? (a/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "VytvoÅ™it pro tento podpis odvolacà certifikát? (a/N)" -msgid "Not signed by you.\n" -msgstr "Nepodepsáno vámi.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Podepsal(a) jste následujÃcà identifikátory uživatele: %s:\n" @@ -1842,6 +1842,16 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "ADVARSEL: »%s« er en tom fil\n" #, fuzzy, c-format +#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "du mÃ¥ ikke bruge chifferalgoritmen »%s« i tilstanden %s\n" + +#, fuzzy, c-format +#| msgid "you may not use digest algorithm `%s' while in %s mode\n" +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "du mÃ¥ ikke bruge sammendragsalgoritmen »%s« i tilstanden %s\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "læser fra »%s«\n" @@ -1854,11 +1864,6 @@ msgstr "" "præferencer\n" #, fuzzy, c-format -#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "du mÃ¥ ikke bruge chifferalgoritmen »%s« i tilstanden %s\n" - -#, fuzzy, c-format #| msgid "WARNING: \"%s\" is an obsolete option - it has no effect\n" msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "ADVARSEL: »%s« er en forældet indstilling - den har ingen effekt\n" @@ -2142,6 +2147,11 @@ msgstr "underskriv en nøgle" msgid "quickly sign a key locally" msgstr "underskriv en nøgle lokalt" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "opret et nyt nøglepar" + msgid "sign a key" msgstr "underskriv en nøgle" @@ -2643,11 +2653,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s virker endnu ikke med %s\n" #, fuzzy, c-format -#| msgid "you may not use digest algorithm `%s' while in %s mode\n" -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "du mÃ¥ ikke bruge sammendragsalgoritmen »%s« i tilstanden %s\n" - -#, fuzzy, c-format #| msgid "you may not use compression algorithm `%s' while in %s mode\n" msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "du mÃ¥ ikke bruge komprimeringsalgoritmen »%s« i tilstanden %s\n" @@ -3815,6 +3820,15 @@ msgstr "Ingen sÃ¥dan bruger-id.\n" msgid "Nothing to sign.\n" msgstr "Intet at underskrive med nøgle %s\n" +#, c-format +msgid "Not signed by you.\n" +msgstr "Ikke underskrevet af dig.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "kontrol af oprettet underskrift mislykkedes: %s\n" + #, fuzzy, c-format #| msgid "`%s' is not a valid signature expiration\n" msgid "'%s' is not a valid expiration time\n" @@ -4126,9 +4140,6 @@ msgstr "Er du sikker pÃ¥, at du ønsker at tilbagekalde den? (j/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Opret et tilbagekaldscertifikat for denne underskrift? (j/N) " -msgid "Not signed by you.\n" -msgstr "Ikke underskrevet af dig.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Du har underskrevet disse bruger-id'er pÃ¥ nøgle %s:\n" @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gnupg-2.1.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2020-07-09 11:31+0200\n" +"PO-Revision-Date: 2020-11-11 14:57+0100\n" "Last-Translator: Werner Koch <wk@gnupg.org>\n" "Language-Team: German <de@li.org>\n" "Language: de\n" @@ -1721,6 +1721,15 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "WARNUNG: '%s' ist eine leere Datei.\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "" +"Das Verschlüsselungsverfahren %s darf im %s Modus nicht verwendet werden.\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "Die Benutzung der Hashmethode %s ist im %s Modus nicht erlaubt.\n" + +#, c-format msgid "reading from '%s'\n" msgstr "Lesen von '%s'\n" @@ -1732,11 +1741,6 @@ msgstr "" "%s (%d) verletzt die Empfängervoreinstellungen\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "" -"Das Verschlüsselungsverfahren %s darf im %s Modus nicht verwendet werden.\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "" "WARNUNG: Schlüssel %s ist zur Verschlüsselung im %s Modus nicht geeignet.\n" @@ -1999,6 +2003,9 @@ msgstr "Schlüssel schnell signieren" msgid "quickly sign a key locally" msgstr "Schlüssel schnell nur für diesen Rechner signieren" +msgid "quickly revoke a key signature" +msgstr "Schnell eine Schlüsselsignatur widerrufen" + msgid "sign a key" msgstr "Schlüssel signieren" @@ -2464,10 +2471,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s arbeitet noch nicht mit %s zusammen\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "Die Benutzung der Hashmethode %s ist im %s Modus nicht erlaubt.\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "" "Die Benutzung des Komprimierverfahren %s ist im %s Modus nicht erlaubt.\n" @@ -3592,6 +3595,14 @@ msgid "Nothing to sign.\n" msgstr "Nichts zu beglaubigen\n" #, c-format +msgid "Not signed by you.\n" +msgstr "Nicht von Ihnen signiert.\n" + +#, c-format +msgid "revoking the key signature failed: %s\n" +msgstr "Fehler beim Widerruf der Schlüsselsignatur: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "'%s' ist kein gültiges Ablaufdatum\n" @@ -3892,9 +3903,6 @@ msgstr "Wollen Sie ihn immer noch widerrufen? (j/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Ein Widerrufszertifikat für diese Signatur erzeugen (j/N)" -msgid "Not signed by you.\n" -msgstr "Nicht von Ihnen signiert.\n" - #, 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" @@ -1782,6 +1782,15 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: `%s' είναι Îνα άδειο αÏχείο\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "απαγοÏεÏετε η χÏήση του κÏυπταλγόÏιθμου \"%s\" στην κατάσταση %s\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "" +"απαγοÏεÏετε η χÏήση του αλγόÏιθμου πεÏίληψης \"%s\" στην κατάσταση %s\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "ανάγνωση από `%s'\n" @@ -1794,10 +1803,6 @@ msgstr "" "επιλογÎÏ‚ του παÏαλήπτη\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "απαγοÏεÏετε η χÏήση του κÏυπταλγόÏιθμου \"%s\" στην κατάσταση %s\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: \"%s\" είναι μια μη συνειστώμενη επιλογή\n" @@ -2088,6 +2093,11 @@ msgstr "υπογÏαφή ενός κλειδιοÏ" msgid "quickly sign a key locally" msgstr "υπογÏαφή ενός ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Ï„Î¿Ï€Î¹ÎºÎ¬" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "δημιουÏγία ενός νÎου ζεÏγους κλειδιών" + msgid "sign a key" msgstr "υπογÏαφή ενός κλειδιοÏ" @@ -2579,11 +2589,6 @@ msgid "%s does not yet work with %s\n" msgstr "το %s ακόμα δε λειτουÏγεί μαζί με το %s\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "" -"απαγοÏεÏετε η χÏήση του αλγόÏιθμου πεÏίληψης \"%s\" στην κατάσταση %s\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "" "απαγοÏεÏετε η χÏήση του αλγόÏιθμου συμπίεσης \"%s\" στην κατάσταση %s\n" @@ -3760,6 +3765,15 @@ msgid "Nothing to sign.\n" msgstr "Τίποτα για να υπογÏαφεί με το κλειδί %08lX\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " υπογÏάφθηκε από %08lX στις %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "απÎτυχε ο Îλεγχος της υπογÏαφής που δημιουÏγήθηκε: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "το %s δεν είναι ÎγκυÏο σετ χαÏακτήÏων\n" @@ -4076,10 +4090,6 @@ msgstr "ΣίγουÏα θÎλετε να ανακληθεί αυτό το κλε msgid "Create a revocation certificate for this signature? (y/N) " msgstr "ΔημιουÏγία ενός Ï€Î¹ÏƒÏ„Î¿Ï€Î¿Î¹Î·Ï„Î¹ÎºÎ¿Ï Î±Î½Î¬ÎºÎ»Î·ÏƒÎ·Ï‚ για αυτή την υπογÏαφή; (y/N)" -#, fuzzy -msgid "Not signed by you.\n" -msgstr " υπογÏάφθηκε από %08lX στις %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Έχετε υπογÏάψει αυτά τα user ID:\n" @@ -1779,6 +1779,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "Tiu komando ne eblas en la reÄimo %s.\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "Tiu komando ne eblas en la reÄimo %s.\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "legas el '%s'\n" @@ -1789,10 +1797,6 @@ msgid "" msgstr "NOTO: ĉifrad-metodo %d ne trovita en preferoj\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "Tiu komando ne eblas en la reÄimo %s.\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" @@ -2068,6 +2072,11 @@ msgstr "subskribi Ålosilon" msgid "quickly sign a key locally" msgstr "subskribi Ålosilon loke" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "krei novan Ålosilparon" + msgid "sign a key" msgstr "subskribi Ålosilon" @@ -2554,10 +2563,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s ne havas sencon kun %s!\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "Tiu komando ne eblas en la reÄimo %s.\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "Tiu komando ne eblas en la reÄimo %s.\n" @@ -3732,6 +3737,15 @@ msgid "Nothing to sign.\n" msgstr "Nenio por subskribi per Ålosilo %08lX\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " subskribita per %08lX je %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "kontrolo de kreita subskribo malsukcesis: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s ne estas valida signaro\n" @@ -4036,10 +4050,6 @@ msgstr "Ĉu vi estas certa, ke vi ankoraÅ volas aldoni Äin? (j/n) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Ĉu krei revokatestilon por ĉi tiu subskribo? (j/N)" -#, fuzzy -msgid "Not signed by you.\n" -msgstr " subskribita per %08lX je %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Vi subskribis la sekvajn uzantidentigilojn:\n" @@ -1720,6 +1720,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "ATENCIÓN '%s' es un fichero vacÃo\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "no se puede usar el cifrado '%s' en modo %s\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "no puede usar el resumen '%s' en modo %s\n" + +#, c-format msgid "reading from '%s'\n" msgstr "leyendo desde '%s'\n" @@ -1731,10 +1739,6 @@ msgstr "" "del destinatario\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "no se puede usar el cifrado '%s' en modo %s\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "" "ATENCIÓN: la clave %s no es adecuada para la encriptación en modo %s\n" @@ -1993,6 +1997,11 @@ msgstr "firma una clave en modo rápido" msgid "quickly sign a key locally" msgstr "firma una clave localmente en modo rápido" +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "revoca una id de usuario en modo rápido" + msgid "sign a key" msgstr "firma la clave" @@ -2454,10 +2463,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s aún no funciona con %s\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "no puede usar el resumen '%s' en modo %s\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "no puede usar la compresión '%s' en modo %s\n" @@ -3558,6 +3563,15 @@ msgid "Nothing to sign.\n" msgstr "Nada que firmar.\n" #, c-format +msgid "Not signed by you.\n" +msgstr "No está firmado por usted.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "la comprobación de la firma creada falló: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "'%s' no es una fecha de caducidad válida\n" @@ -3848,9 +3862,6 @@ msgstr "¿De verdad quiere revocarla? (s/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "¿Crear un certificado de revocación para esta clave? (s/N) " -msgid "Not signed by you.\n" -msgstr "No está firmado por usted.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Ha firmado estos IDs de usuario con la clave %s:\n" @@ -1777,6 +1777,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "HOIATUS: `%s' on tühi fail\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "Å¡ifri algoritm \"%s\" ei ole moodis %s lubatud\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "sõnumilühendi algoritm \"%s\" ei ole moodis %s lubatud\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "loen failist `%s'\n" @@ -1788,10 +1796,6 @@ msgstr "" "sümmetrilise Å¡ifri %s (%d) kasutamine on vastuolus saaja eelistustega\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "Å¡ifri algoritm \"%s\" ei ole moodis %s lubatud\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "HOIATUS: võtit \"%s\" ei soovitata kasutada.\n" @@ -2080,6 +2084,11 @@ msgstr "allkirjasta võti" msgid "quickly sign a key locally" msgstr "allkirjasta võti lokaalselt" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "genereeri uus võtmepaar" + msgid "sign a key" msgstr "allkirjasta võti" @@ -2566,10 +2575,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s ei tööta veel koos %s-ga\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "sõnumilühendi algoritm \"%s\" ei ole moodis %s lubatud\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "pakkimise algoritm \"%s\" ei ole moodis %s lubatud\n" @@ -3732,6 +3737,15 @@ msgid "Nothing to sign.\n" msgstr "Võtmega %08lX pole midagi allkirjastada\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " allkirjastanud %08lX %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "Loodud allkirja ei õnnestu kontrollida: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s ei ole lubatud kooditabel\n" @@ -4037,10 +4051,6 @@ msgstr "Olete kindel, et soovite seda ikka tühistada? (j/E) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Loon sellele allkirjale tühistamise sertifikaadi? (j/E) " -#, fuzzy -msgid "Not signed by you.\n" -msgstr " allkirjastanud %08lX %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Te olete allkirjastanud järgnevad kasutaja IDd:\n" @@ -1796,6 +1796,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "VAROITUS: \"%s\" on tyhjä tiedosto\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "salausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "tiivistealgoritmia \"%s\" ei voi käyttää %s-tilassa\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "luetaan kohteesta \"%s\"\n" @@ -1806,10 +1814,6 @@ msgid "" msgstr "valittu symmetrinen salain %s (%d) ei ole vastaanottajan suosima\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "salausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "VAROITUS: \"%s\" on paheksuttu valitsin\n" @@ -2095,6 +2099,11 @@ msgstr "allekirjoita avain" msgid "quickly sign a key locally" msgstr "allekirjoita avain paikallisesti" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "luo uusi avainpari" + msgid "sign a key" msgstr "allekirjoita avain" @@ -2582,10 +2591,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s ja %s eivät vielä toimi yhdessä\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "tiivistealgoritmia \"%s\" ei voi käyttää %s-tilassa\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "pakkausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n" @@ -3753,6 +3758,15 @@ msgid "Nothing to sign.\n" msgstr "Avaimelle %08lX ei löydy mitään mitä allekirjoittaa\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " %08lX allekirjoitti tämän %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "luodun allekirjoituksen tarkistus epäonnistui: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s ei kelpaa merkistöksi\n" @@ -4059,10 +4073,6 @@ msgstr "Haluatko varmasti mitätöidä sen? (k/E) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Luodaanko tälle alekirjoitukselle mitätöintivarmenne? (k/E) " -#, fuzzy -msgid "Not signed by you.\n" -msgstr " %08lX allekirjoitti tämän %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Olet allekirjoittanut seuraavat käyttäjätunnukset:\n" @@ -1771,6 +1771,16 @@ msgstr "« %s » est déjà compressé\n" msgid "WARNING: '%s' is an empty file\n" msgstr "Attention : « %s » est un fichier vide\n" +#, fuzzy, c-format +#| msgid "you may not use cipher algorithm '%s' while in %s mode\n" +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "impossible d'utiliser l'algorithme de chiffrement « %s » en mode %s.\n" + +#, fuzzy, c-format +#| msgid "you may not use digest algorithm '%s' while in %s mode\n" +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "impossible d'utiliser l'algorithme de hachage « %s » en mode %s.\n" + #, c-format msgid "reading from '%s'\n" msgstr "lecture de « %s »\n" @@ -1783,11 +1793,6 @@ msgstr "" " désaccord avec les préférences du destinataire\n" #, fuzzy, c-format -#| msgid "you may not use cipher algorithm '%s' while in %s mode\n" -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "impossible d'utiliser l'algorithme de chiffrement « %s » en mode %s.\n" - -#, fuzzy, c-format #| msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n" msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "Attention : « %s%s » est une option obsolète — non prise en compte\n" @@ -2065,6 +2070,11 @@ msgstr "signer rapidement une clef" msgid "quickly sign a key locally" msgstr "signer rapidement une clef localement" +#, fuzzy +#| msgid "quickly generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "générer rapidement une nouvelle paire de clefs" + msgid "sign a key" msgstr "signer une clef" @@ -2561,11 +2571,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s ne fonctionne pas encore avec %s\n" #, fuzzy, c-format -#| msgid "you may not use digest algorithm '%s' while in %s mode\n" -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "impossible d'utiliser l'algorithme de hachage « %s » en mode %s.\n" - -#, fuzzy, c-format #| msgid "you may not use compression algorithm '%s' while in %s mode\n" msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "impossible d'utiliser l'algorithme de compression « %s » en mode %s.\n" @@ -3697,6 +3702,15 @@ msgstr "Pas d’identités correspondantes." msgid "Nothing to sign.\n" msgstr "Rien à signer.\n" +#, c-format +msgid "Not signed by you.\n" +msgstr "Non signée par vous.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "échec de vérification de la signature créée : %s\n" + #, fuzzy, c-format #| msgid "'%s' is not a valid signature expiration\n" msgid "'%s' is not a valid expiration time\n" @@ -4010,9 +4024,6 @@ msgid "Create a revocation certificate for this signature? (y/N) " msgstr "" "Faut-il créer un certificat de révocation pour cette signature ? (o/N) " -msgid "Not signed by you.\n" -msgstr "Non signée par vous.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Vous avez signé ces identités sur la clef %s :\n" @@ -1787,6 +1787,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "AVISO: `%s' é un ficheiro baleiro\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "non se pode empregar o algoritmo de cifrado \"%s\" no modo %s\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "non se pode empregar o algoritmo de resumo \"%s\" no modo %s\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "lendo de `%s'\n" @@ -1798,10 +1806,6 @@ msgstr "" "forza-la cifra simétrica %s (%d) viola as preferencias do destinatario\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "non se pode empregar o algoritmo de cifrado \"%s\" no modo %s\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "AVISO: \"%s\" é unha opción a extinguir\n" @@ -2088,6 +2092,11 @@ msgstr "asinar unha chave" msgid "quickly sign a key locally" msgstr "asinar unha chave localmente" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "xerar un novo par de chaves" + msgid "sign a key" msgstr "asinar unha chave" @@ -2574,10 +2583,6 @@ msgid "%s does not yet work with %s\n" msgstr "¡%s aÃnda non traballa con %s!\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "non se pode empregar o algoritmo de resumo \"%s\" no modo %s\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "non se pode empregar o algoritmo de compresión \"%s\" no modo %s\n" @@ -3756,6 +3761,15 @@ msgid "Nothing to sign.\n" msgstr "Nada que asinar coa chave %08lX\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " asinada por %08lX no %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "fallou a comprobación da sinatura creada: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s non é un xogo de caracteres válido\n" @@ -4070,10 +4084,6 @@ msgstr "¿Está seguro de que quere revocala? (s/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "¿Crear un certificado de revocación para esta sinatura? (s/N) " -#, fuzzy -msgid "Not signed by you.\n" -msgstr " asinada por %08lX no %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Asinou estes IDs de usuario: \n" @@ -1777,6 +1777,16 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "FIGYELEM: A(z) \"%s\" állomány üres.\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "" +"Lehet, hogy nem használhatja \"%s\" rejtjelezÅ‘ algoritmust %s módban!\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "" +"Lehet, hogy nem használhatja \"%s\" kivonatoló algoritmust %s módban!\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "Olvasok a \"%s\" állományból.\n" @@ -1787,11 +1797,6 @@ msgid "" msgstr "A %s (%d) rejtjelezÅ‘ használata sérti a cÃmzett preferenciáit!\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "" -"Lehet, hogy nem használhatja \"%s\" rejtjelezÅ‘ algoritmust %s módban!\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "FIGYELEM: \"%s\" elavult opció!\n" @@ -2077,6 +2082,11 @@ msgstr "kulcs aláÃrása" msgid "quickly sign a key locally" msgstr "kulcs aláÃrása helyileg" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "új kulcspár létrehozása" + msgid "sign a key" msgstr "kulcs aláÃrása" @@ -2563,11 +2573,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s és %s egyelÅ‘re nem használható együtt!\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "" -"Lehet, hogy nem használhatja \"%s\" kivonatoló algoritmust %s módban!\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "Lehet, hogy nem használhatja \"%s\" tömörÃtÅ‘ algoritmust %s módban!\n" @@ -3731,6 +3736,15 @@ msgid "Nothing to sign.\n" msgstr "Nincs mit aláÃrni a %08lX kulccsal!\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " aláÃrva %08lX által %s%s idÅ‘pontban.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "A létrehozott aláÃrás ellenÅ‘rzése sikertelen: %s.\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s nem érvényes karakterkiosztás!\n" @@ -4038,10 +4052,6 @@ msgstr "Biztos benne, hogy mégis visszavonja? (i/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Csináljunk egy visszavonó igazolást ehhez az aláÃráshoz? (i/N) " -#, fuzzy -msgid "Not signed by you.\n" -msgstr " aláÃrva %08lX által %s%s idÅ‘pontban.\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Ön aláÃrta a következÅ‘ felhasználóazonosÃtókat:\n" @@ -1783,6 +1783,16 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "PERINGATAN: `%s' adalah file kosong\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "" +"anda tidak boleh menggunakan algoritma cipher \"%s\" saat dalam mode %s.\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "" +"anda tidak boleh menggunakan algoritma digest \"%s\" saat dalam mode %s.\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "Membaca dari `%s'\n" @@ -1793,11 +1803,6 @@ msgid "" msgstr "memaksa cipher simetrik %s (%d) melanggar preferensi penerima\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "" -"anda tidak boleh menggunakan algoritma cipher \"%s\" saat dalam mode %s.\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "WARNING: \"%s\" adalah opsi terdepresiasi\n" @@ -2080,6 +2085,11 @@ msgstr "tandai kunci" msgid "quickly sign a key locally" msgstr "tandai kunci secara lokal" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "buat sepasang kunci baru" + msgid "sign a key" msgstr "tandai kunci" @@ -2566,11 +2576,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s belum dapat dipakai dengan %s\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "" -"anda tidak boleh menggunakan algoritma digest \"%s\" saat dalam mode %s.\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "" "anda tidak boleh menggunakan algoritma kompresi \"%s\" saat dalam mode %s.\n" @@ -3736,6 +3741,15 @@ msgid "Nothing to sign.\n" msgstr "Tidak ada yang ditandai dengan kunci %08lX\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " ditandai oleh %08lX pada %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "Gagal memeriksa signature yang dibuat: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s bukanlah set karakter yang valid\n" @@ -4048,10 +4062,6 @@ msgstr "Anda tetap ingin membatalkannya? (y/n) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Membuat sertifikat pembatalan untuk signature ini? (y/N)" -#, fuzzy -msgid "Not signed by you.\n" -msgstr " ditandai oleh %08lX pada %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Anda telah menandai ID user ini:\n" @@ -1,22 +1,23 @@ # GnuPG italian translation # Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc. # Marco d'Itri <md@linux.it>, 1998, 1999, 2001, 2002. -# msgid "" msgstr "" -"Project-Id-Version: gnupg 1.1.92\n" +"Project-Id-Version: GNU gnupg 2.2.23\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2008-05-26 12:02+0200\n" -"Last-Translator: Marco d'Itri <md@linux.it>\n" -"Language-Team: Italian <tp@lists.linux.it>\n" -"Language: it\n" +"PO-Revision-Date: 2020-10-10 19:54+0200\n" +"Last-Translator: Denis <student@alice.it>\n" +"Language-Team: \n" +"Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.1\n" -#, fuzzy, c-format +#, c-format msgid "failed to acquire the pinentry lock: %s\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "impossibile acquisire il blocco pinentry: %s\n" #. TRANSLATORS: These are labels for buttons etc used in #. Pinentries. An underscore indicates that the next letter @@ -25,39 +26,36 @@ msgstr "inizializzazione del trustdb fallita: %s\n" #. the second vertical bar. Note that gpg-agent has been set to #. utf-8 so that the strings are in the expected encoding. msgid "|pinentry-label|_OK" -msgstr "" +msgstr "|pinentry-label|_OK" msgid "|pinentry-label|_Cancel" -msgstr "" +msgstr "|pinentry-label|_Cancel" msgid "|pinentry-label|_Yes" -msgstr "" +msgstr "|pinentry-label|_Yes" msgid "|pinentry-label|_No" -msgstr "" +msgstr "|pinentry-label|_No" msgid "|pinentry-label|PIN:" -msgstr "" +msgstr "|pinentry-label|PIN:" msgid "|pinentry-label|_Save in password manager" -msgstr "" +msgstr "|pinentry-label|_Save in gestione password" -#, fuzzy msgid "Do you really want to make your passphrase visible on the screen?" -msgstr "Vuoi davvero cancellare le chiavi selezionate? " +msgstr "Vuoi davvero rendere la tua passphrase visibile sullo schermo?" msgid "|pinentry-tt|Make passphrase visible" -msgstr "" +msgstr "|pinentry-tt|Rendere visibile la passphrase" -#, fuzzy -#| msgid "invalid passphrase" msgid "|pinentry-tt|Hide passphrase" -msgstr "passphrase non valida" +msgstr "|pinentry-tt|Nascondi passphrase" #. TRANSLATORS: This string is displayed by Pinentry as the label #. for the quality bar. msgid "Quality:" -msgstr "" +msgstr "Qualità :" #. TRANSLATORS: This string is a tooltip, shown by pinentry when #. hovering over the quality bar. Please use an appropriate @@ -66,28 +64,30 @@ msgstr "" #. translate this entry, a default english text (see source) #. will be used. msgid "pinentry.qualitybar.tooltip" -msgstr "" +msgstr "pinentry.qualitybar.tooltip" msgid "" "Please enter your PIN, so that the secret key can be unlocked for this " "session" msgstr "" +"Inserisci il tuo PIN, in modo che la chiave segreta possa essere sbloccata " +"per questa sessione" -#, fuzzy msgid "" "Please enter your passphrase, so that the secret key can be unlocked for " "this session" -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "" +"Inserisci la tua passphrase, in modo che la chiave segreta possa essere " +"sbloccata per questa sessione" msgid "PIN:" -msgstr "" +msgstr "PIN:" -#, fuzzy msgid "Passphrase:" -msgstr "passphrase errata" +msgstr "Passphrase:" msgid "does not match - try again" -msgstr "" +msgstr "non corrisponde - riprova" #. TRANSLATORS: The string is appended to an error message in #. the pinentry. The %s is the actual error message, the @@ -98,229 +98,217 @@ msgstr "" #. two %d give the current and maximum number of tries. #, c-format msgid "SETERROR %s (try %d of %d)" -msgstr "" +msgstr "SETERROR %s (provare %d di %d)" msgid "Repeat:" -msgstr "" +msgstr "Ripeti :" -#, fuzzy msgid "PIN too long" -msgstr "riga troppo lunga\n" +msgstr "PIN troppo lungo" -#, fuzzy msgid "Passphrase too long" -msgstr "passphrase troppo lunga\n" +msgstr "Passphrase troppo lunga" -#, fuzzy msgid "Invalid characters in PIN" -msgstr "Carattere non valido nel nome\n" +msgstr "Caratteri non validi nel PIN" msgid "PIN too short" -msgstr "" +msgstr "PIN troppo corto" -#, fuzzy msgid "Bad PIN" -msgstr "MPI danneggiato" +msgstr "PIN non valido" -#, fuzzy msgid "Bad Passphrase" -msgstr "passphrase errata" +msgstr "Passphrase non valido" -#, fuzzy, c-format +#, c-format msgid "ssh keys greater than %d bits are not supported\n" -msgstr "l'algoritmo di protezione %d%s non è gestito\n" +msgstr "le chiavi ssh maggiori di %d bit non sono supportate\n" -#, fuzzy, c-format -#| msgid "can't create `%s': %s\n" +#, c-format msgid "can't create '%s': %s\n" -msgstr "impossibile creare `%s': %s\n" +msgstr "impossibile creare '%s': %s\n" -#, fuzzy, c-format -#| msgid "can't open `%s': %s\n" +#, c-format msgid "can't open '%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "impossibile aprire '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error getting serial number of card: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero del numero di serie della scheda: %s\n" #, c-format msgid "detected card with S/N: %s\n" -msgstr "" +msgstr "scheda rilevata con S/N: %s\n" -#, fuzzy, c-format +#, c-format msgid "no authentication key for ssh on card: %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "nessuna chiave di autenticazione per ssh sulla scheda: %s\n" -#, fuzzy, c-format +#, c-format msgid "no suitable card key found: %s\n" -msgstr "non è stato trovato un portachiavi segreto scrivibile: %s\n" +msgstr "nessuna chiave della scheda adatta trovata: %s\n" -#, fuzzy, c-format +#, c-format msgid "error getting list of cards: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero dell'elenco delle schede: %s\n" #, c-format msgid "" "An ssh process requested the use of key%%0A %s%%0A (%s)%%0ADo you want to " "allow this?" msgstr "" +"Un processo ssh ha richiesto l'utilizzo della chiave%%0A %s%%0A (%s)%%0ASi " +"desidera consentire questa operazione?" msgid "Allow" -msgstr "" +msgstr "Permettere" msgid "Deny" -msgstr "" +msgstr "Rifiutare" -#, fuzzy, c-format +#, c-format msgid "Please enter the passphrase for the ssh key%%0A %F%%0A (%c)" -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "Immettere la passphrase per la chiave ssh%%0A %F%%0A (%c)" -#, fuzzy msgid "Please re-enter this passphrase" -msgstr "cambia la passphrase" +msgstr "Inserisci di nuovo questa passphrase" -#, fuzzy, c-format +#, c-format msgid "" "Please enter a passphrase to protect the received secret key%%0A %s%%0A " "%s%%0Awithin gpg-agent's key storage" -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "" +"Immettere una passphrase per proteggere la chiave segreta ricevuta%%0A %s" +"%%0A %s%%0A all'interno dell'archivio chiavi dell'agente gpg" -#, fuzzy, c-format +#, c-format msgid "failed to create stream from socket: %s\n" -msgstr "%s: creazione della tabella hash fallita: %s\n" +msgstr "impossibile creare il flusso dal socket: %s\n" msgid "Please insert the card with serial number" -msgstr "" +msgstr "Inserire la scheda con il numero di serie" msgid "Please remove the current card and insert the one with serial number" -msgstr "" +msgstr "Rimuovere la carta corrente e inserire quella con il numero di serie" msgid "Admin PIN" -msgstr "" +msgstr "PIN amministratore" #. TRANSLATORS: A PUK is the Personal Unblocking Code #. used to unblock a PIN. msgid "PUK" -msgstr "" +msgstr "PUK" msgid "Reset Code" -msgstr "" +msgstr "Resetta codice" msgid "Push ACK button on card/token." -msgstr "" +msgstr "Premere il pulsante ACK sulla scheda/token." msgid "Use the reader's pinpad for input." -msgstr "" +msgstr "Utilizzare il pinpad del lettore per l'input." -#, fuzzy msgid "Repeat this Reset Code" -msgstr "Ripeti la passphrase: " +msgstr "Ripeti questo codice di reimpostazione" -#, fuzzy msgid "Repeat this PUK" -msgstr "Ripeti la passphrase: " +msgstr "Ripeti questo PUK" -#, fuzzy msgid "Repeat this PIN" -msgstr "Ripeti la passphrase: " +msgstr "Ripeti questo PIN" -#, fuzzy msgid "Reset Code not correctly repeated; try again" -msgstr "passphrase non ripetuta correttamente; prova ancora" +msgstr "Reimpostare il codice non ripetuto correttamente; Riprova" -#, fuzzy msgid "PUK not correctly repeated; try again" -msgstr "passphrase non ripetuta correttamente; prova ancora" +msgstr "PUK non ripetuto correttamente; Riprova" -#, fuzzy msgid "PIN not correctly repeated; try again" -msgstr "passphrase non ripetuta correttamente; prova ancora" +msgstr "PIN non ripetuto correttamente; Riprova" #, c-format msgid "Please enter the PIN%s%s%s to unlock the card" -msgstr "" +msgstr "Immettere il PIN%s%s%s per sbloccare la scheda" -#, fuzzy, c-format +#, c-format msgid "error creating temporary file: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la creazione del file temporaneo: %s\n" -#, fuzzy, c-format +#, c-format msgid "error writing to temporary file: %s\n" -msgstr "scrittura in `%s'\n" +msgstr "errore durante la scrittura nel file temporaneo: %s\n" -#, fuzzy msgid "Enter new passphrase" -msgstr "Inserisci la passphrase\n" +msgstr "Inserisci la nuova passphrase" -#, fuzzy msgid "Take this one anyway" -msgstr "Uso lo stesso questa chiave? " +msgstr "Prendi questo comunque" #, c-format msgid "" "You have not entered a passphrase!%0AAn empty passphrase is not allowed." msgstr "" +"Non è stata immessa una passphrase!%0AUna passphrase vuota non è consentita." #, c-format msgid "" "You have not entered a passphrase - this is in general a bad idea!%0APlease " "confirm that you do not want to have any protection on your key." msgstr "" +"Non è stata inserita una passphrase- in generale è una cattiva idea!%0ASi " +"prega di confermare che non si desidera disporre di alcuna protezione sulla " +"chiave." msgid "Yes, protection is not needed" -msgstr "" +msgstr "Sì, la protezione non è necessaria" -#, fuzzy, c-format -#| msgid "Name must be at least 5 characters long\n" +#, c-format msgid "A passphrase should be at least %u character long." msgid_plural "A passphrase should be at least %u characters long." -msgstr[0] "Il nome deve essere lungo almeno 5 caratteri\n" -msgstr[1] "Il nome deve essere lungo almeno 5 caratteri\n" +msgstr[0] "Una passphrase deve avere almeno lunga %u carattere." +msgstr[1] "Una passphrase deve avere almeno lunga %u caratteri." #, c-format msgid "A passphrase should contain at least %u digit or%%0Aspecial character." msgid_plural "" "A passphrase should contain at least %u digits or%%0Aspecial characters." msgstr[0] "" +"Una passphrase deve contenere almeno %u cifra o%%0Acarattere speciale." msgstr[1] "" +"Una passphrase deve contenere almeno %u cifre o%%0Acaratteri speciali." #, c-format msgid "A passphrase may not be a known term or match%%0Acertain pattern." msgstr "" +"Una passphrase non può essere un termine noto o corrispondere%%0Acertain " +"modello." msgid "Warning: You have entered an insecure passphrase." -msgstr "" +msgstr "Avviso: è stata immessa una passphrase non sicura." -#, fuzzy, c-format +#, c-format msgid "Please enter the passphrase to%0Aprotect your new key" -msgstr "" -"Ti serve una passphrase per proteggere la tua chiave segreta.\n" -"\n" +msgstr "Immettere la passphrase a%0Aproteggere la nuova chiave" -#, fuzzy msgid "Please enter the new passphrase" -msgstr "cambia la passphrase" +msgstr "Inserisci la nuova passphrase" -#, fuzzy msgid "" "@Options:\n" " " msgstr "" -"@\n" -"Opzioni:\n" +"@Optioni:\n" " " msgid "run in daemon mode (background)" -msgstr "" +msgstr "eseguire in modalità daemon (sfondo)" msgid "run in server mode (foreground)" -msgstr "" +msgstr "eseguire in modalità server (in primo piano)" -#, fuzzy -#| msgid "Key is superseded" msgid "run in supervised mode" -msgstr "Questa chiave è stata sostituita" +msgstr "eseguire in modalità supervisionata" msgid "verbose" msgstr "prolisso" @@ -329,208 +317,194 @@ msgid "be somewhat more quiet" msgstr "meno prolisso" msgid "sh-style command output" -msgstr "" +msgstr "uscita del comando sh-stile" msgid "csh-style command output" -msgstr "" +msgstr "uscita del comando in csh-stile" -#, fuzzy msgid "|FILE|read options from FILE" -msgstr "|FILE|carica il modulo di estensione FILE" +msgstr "|FILE|opzioni di lettura da FILE" msgid "do not detach from the console" -msgstr "" +msgstr "non scollegarsi dalla console" -#, fuzzy msgid "use a log file for the server" -msgstr "cerca delle chiavi su un keyserver" +msgstr "utilizzare un file di registro per il server" msgid "|PGM|use PGM as the PIN-Entry program" -msgstr "" +msgstr "| PGM|utilizzare PGM come programma PIN-Entry" msgid "|PGM|use PGM as the SCdaemon program" -msgstr "" +msgstr "| PGM| utilizzare PGM come programma SCdaemon" -#, fuzzy msgid "do not use the SCdaemon" -msgstr "aggiorna il database della fiducia" +msgstr "non utilizzare il SCdaemon" -#, fuzzy -#| msgid "|NAME|set terminal charset to NAME" msgid "|NAME|accept some commands via NAME" -msgstr "|NOME|imposta NOME come set di caratteri del terminale" +msgstr "|NAME|accettare alcuni comandi tramite NAME" msgid "ignore requests to change the TTY" -msgstr "" +msgstr "ignorare le richieste di modifica del TTY" msgid "ignore requests to change the X display" -msgstr "" +msgstr "ignorare le richieste di modifica della visualizzazione X" msgid "|N|expire cached PINs after N seconds" -msgstr "" +msgstr "|N|scadenza PIN memorizzati nella cache dopo N secondi" msgid "do not use the PIN cache when signing" -msgstr "" +msgstr "non utilizzare la cache PIN durante la firma" -#, fuzzy msgid "disallow the use of an external password cache" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "non consentire l'uso di una cache di password esterna" msgid "disallow clients to mark keys as \"trusted\"" msgstr "" +"non consentire ai client di contrassegnare le chiavi come \"attendibili\"" -#, fuzzy msgid "allow presetting passphrase" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "consentire la preimpostazione della passphrase" msgid "disallow caller to override the pinentry" -msgstr "" +msgstr "non consentire al chiamante di eseguire l'override del pinentry" msgid "allow passphrase to be prompted through Emacs" -msgstr "" +msgstr "consentire la passphrase tramite Emacs" -#, fuzzy -#| msgid "not supported" msgid "enable ssh support" -msgstr "non gestito" +msgstr "abilitare il supporto ssh" msgid "|ALGO|use ALGO to show ssh fingerprints" -msgstr "" +msgstr "|ALGO|usa ALGO per mostrare le impronte digitali ssh" -#, fuzzy -#| msgid "not supported" msgid "enable putty support" -msgstr "non gestito" +msgstr "abilitare il supporto putty" #. TRANSLATORS: @EMAIL@ will get replaced by the actual bug #. reporting address. This is so that we can change the #. reporting address without breaking the translations. -#, fuzzy msgid "Please report bugs to <@EMAIL@>.\n" -msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n" +msgstr "Segnalare i bug a <@EMAIL@>.\n" -#, fuzzy msgid "Usage: @GPG_AGENT@ [options] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: @GPG_AGENT@ [opzioni] (-h per assistenza)" msgid "" "Syntax: @GPG_AGENT@ [options] [command [args]]\n" "Secret key management for @GNUPG@\n" msgstr "" +"Sintassi: @GPG_AGENT@ [opzioni] [comando [args]]\n" +"Gestione delle chiavi segrete per @GNUPG@\n" #, c-format msgid "invalid debug-level '%s' given\n" -msgstr "" +msgstr "'%s' a livello di debug non valido specificato\n" #, c-format msgid "selected digest algorithm is invalid\n" msgstr "l'algoritmo di digest selezionato non è valido\n" -#, fuzzy, c-format -#| msgid "NOTE: no default option file `%s'\n" +#, c-format msgid "Note: no default option file '%s'\n" -msgstr "NOTA: manca il file `%s' con le opzioni predefinite\n" +msgstr "Nota: nessun file di opzioni predefinito '%s'\n" -#, fuzzy, c-format -#| msgid "option file `%s': %s\n" +#, c-format msgid "option file '%s': %s\n" -msgstr "file con le opzioni `%s': %s\n" +msgstr "file di opzioni '%s': %s\n" -#, fuzzy, c-format -#| msgid "reading options from `%s'\n" +#, c-format msgid "reading options from '%s'\n" -msgstr "lettura delle opzioni da `%s'\n" +msgstr "opzioni di lettura da '%s'\n" -#, fuzzy, c-format -#| msgid "WARNING: \"%s\" is a deprecated option\n" +#, c-format msgid "Note: '%s' is not considered an option\n" -msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n" +msgstr "Nota: '%s' non è considerato un'opzione\n" -#, fuzzy, c-format +#, c-format msgid "can't create socket: %s\n" -msgstr "impossibile creare %s: %s\n" +msgstr "impossibile creare il socket: %s\n" #, c-format msgid "socket name '%s' is too long\n" -msgstr "" +msgstr "il nome socket '%s' è troppo lungo\n" -#, fuzzy, c-format +#, c-format msgid "a gpg-agent is already running - not starting a new one\n" -msgstr "gpg-agent non è disponibile in questa sessione\n" +msgstr "un gpg-agent è già in esecuzione - non iniziare uno nuovo\n" -#, fuzzy, c-format +#, c-format msgid "error getting nonce for the socket\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero di un errore per il socket\n" -#, fuzzy, c-format +#, c-format msgid "error binding socket to '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'associazione del socket a '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "can't set permissions of '%s': %s\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "impossibile impostare le autorizzazioni di '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "listening on socket '%s'\n" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "ascolto sul socket '%s'\n" -#, fuzzy, c-format -#| msgid "can't create directory `%s': %s\n" +#, c-format msgid "can't create directory '%s': %s\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "impossibile creare la directory '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "directory '%s' created\n" -msgstr "%s: directory creata\n" +msgstr "directory '%s' creata\n" -#, fuzzy, c-format +#, c-format msgid "stat() failed for '%s': %s\n" -msgstr "trustdb: read fallita (n=%d): %s\n" +msgstr "stat() non riuscito per '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "can't use '%s' as home directory\n" -msgstr "%s: impossibile creare la directory: %s\n" +msgstr "impossibile utilizzare '%s' come home directory\n" -#, fuzzy, c-format +#, c-format msgid "error reading nonce on fd %d: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura del nonce su fd %d: %s\n" #, c-format msgid "handler 0x%lx for fd %d started\n" -msgstr "" +msgstr "gestore 0x%lx per fd %d avviato\n" #, c-format msgid "handler 0x%lx for fd %d terminated\n" -msgstr "" +msgstr "gestore 0x%lx per fd %d terminato\n" #, c-format msgid "ssh handler 0x%lx for fd %d started\n" -msgstr "" +msgstr "gestore ssh 0x%lx per fd %d avviato\n" #, c-format msgid "ssh handler 0x%lx for fd %d terminated\n" -msgstr "" +msgstr "gestore ssh 0x%lx per fd %d terminato\n" -#, fuzzy, c-format +#, c-format msgid "npth_pselect failed: %s - waiting 1s\n" -msgstr "aggiornamento della chiave segreta fallito: %s\n" +msgstr "npth_pselect non riuscito: %s - 1s in attesa\n" -#, fuzzy, c-format +#, c-format msgid "%s %s stopped\n" -msgstr "%s: saltata: %s\n" +msgstr "%s %s arrestato\n" -#, fuzzy, c-format +#, c-format msgid "no gpg-agent running in this session\n" -msgstr "gpg-agent non è disponibile in questa sessione\n" +msgstr "nessun gpg-agent in esecuzione in questa sessione\n" -#, fuzzy msgid "Usage: gpg-preset-passphrase [options] KEYGRIP (-h for help)\n" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)\n" msgid "" "Syntax: gpg-preset-passphrase [options] KEYGRIP\n" "Password cache maintenance\n" msgstr "" +"Sintassi: gpg-preset-passphrase [opzioni] KEYGRIP\n" +"Manutenzione della cache delle password\n" msgid "" "@Commands:\n" @@ -548,73 +522,77 @@ msgstr "" "Opzioni:\n" " " -#, fuzzy msgid "Usage: gpg-protect-tool [options] (-h for help)\n" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: gpg-protect-tool [opzioni] (-h per assistenza)\n" msgid "" "Syntax: gpg-protect-tool [options] [args]\n" "Secret key maintenance tool\n" msgstr "" +"Sintassi: gpg-protect-tool [opzioni] [args]\n" +"Strumento di manutenzione della chiave segreta\n" -#, fuzzy msgid "Please enter the passphrase to unprotect the PKCS#12 object." -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "" +"Immettere la passphrase per rimuovere la protezione dell'oggetto PKCS.12." -#, fuzzy msgid "Please enter the passphrase to protect the new PKCS#12 object." -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "Immettere la passphrase per proteggere il nuovo oggetto PKCS.12." msgid "" "Please enter the passphrase to protect the imported object within the GnuPG " "system." msgstr "" +"Immettere la passphrase per proteggere l'oggetto importato all'interno del " +"sistema GnuPG." -#, fuzzy msgid "" "Please enter the passphrase or the PIN\n" "needed to complete this operation." -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "" +"Inserisci la passphrase o il PIN\n" +"necessario per completare questa operazione." -#, fuzzy, c-format +#, c-format msgid "cancelled\n" -msgstr "Cancella" +msgstr "annullato\n" -#, fuzzy, c-format +#, c-format msgid "error while asking for the passphrase: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la richiesta della passphrase: %s\n" -#, fuzzy, c-format +#, c-format msgid "error opening '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'apertura di '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "file '%s', line %d: %s\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "file '%s', riga %d: %s\n" -#, fuzzy, c-format +#, c-format msgid "statement \"%s\" ignored in '%s', line %d\n" -msgstr "errore di lettura: %s\n" +msgstr "istruzione \"%s\" ignorata in '%s', riga %d\n" -#, fuzzy, c-format +#, c-format msgid "system trustlist '%s' not available\n" -msgstr "parti della chiave segreta non sono disponibili\n" +msgstr "elenco di attendibilità del sistema '%s' non disponibile\n" -#, fuzzy, c-format +#, c-format msgid "bad fingerprint in '%s', line %d\n" -msgstr "errore di lettura: %s\n" +msgstr "impronta digitale non valido in '%s', riga %d\n" -#, fuzzy, c-format +#, c-format msgid "invalid keyflag in '%s', line %d\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "keyflag non valido in '%s', riga %d\n" -#, fuzzy, c-format +#, c-format msgid "error reading '%s', line %d: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura di '%s', riga %d: %s\n" #, c-format msgid "error reading list of trusted root certificates\n" msgstr "" +"errore durante la lettura dell'elenco dei certificati radice attendibili\n" #. TRANSLATORS: This prompt is shown by the Pinentry #. and has one special property: A "%%0A" is used by @@ -629,13 +607,14 @@ msgid "" "Do you ultimately trust%%0A \"%s\"%%0Ato correctly certify user " "certificates?" msgstr "" +"Alla fine ti fidi di %% 0A \"% s\" %%0Aper certificare correttamente i " +"certificati utente?" -#, fuzzy msgid "Yes" -msgstr "si|sì" +msgstr "Sì" msgid "No" -msgstr "" +msgstr "No" #. TRANSLATORS: This prompt is shown by the Pinentry and has #. one special property: A "%%0A" is used by Pinentry to @@ -650,59 +629,67 @@ msgid "" "Please verify that the certificate identified as:%%0A \"%s\"%%0Ahas the " "fingerprint:%%0A %s" msgstr "" +"Verificare che il certificato identificato come:%%0A \"%s\"%%0Al'impronta " +"digitale:%%0A %s" #. TRANSLATORS: "Correct" is the label of a button and intended #. to be hit if the fingerprint matches the one of the CA. The #. other button is "the default "Cancel" of the Pinentry. msgid "Correct" -msgstr "" +msgstr "Corretto" msgid "Wrong" -msgstr "" +msgstr "Sbagliato" #, c-format msgid "Note: This passphrase has never been changed.%0APlease change it now." msgstr "" +"Nota: questa passphrase non è mai stata modificata.%0ASi prega di cambiarlo " +"ora." #, c-format msgid "" "This passphrase has not been changed%%0Asince %.4s-%.2s-%.2s. Please change " "it now." msgstr "" +"Questa passphrase non è stata modificata%%0Ada %.4s-%.2s-%.2s. Si prega di " +"cambiarlo ora." -#, fuzzy msgid "Change passphrase" -msgstr "cambia la passphrase" +msgstr "Modifica passphrase" msgid "I'll change it later" -msgstr "" +msgstr "Lo cambierò più tardi" -#, fuzzy, c-format +#, c-format msgid "" "Do you really want to delete the key identified by keygrip%%0A %s%%0A %%C" "%%0A?" -msgstr "Vuoi davvero cancellare le chiavi selezionate? " +msgstr "" +"Si desidera eliminare la chiave identificata da keygrip%%0A %s%%0A %%C%%0A?" -#, fuzzy msgid "Delete key" -msgstr "abilita una chiave" +msgstr "Elimina chiave" msgid "" "Warning: This key is also listed for use with SSH!\n" "Deleting the key might remove your ability to access remote machines." msgstr "" +"Attenzione: questa chiave è elencata anche per l'uso con SSH!\n" +"L'eliminazione della chiave potrebbe rimuovere la possibilità di accedere ai " +"computer remoti." #, c-format msgid "DSA requires the hash length to be a multiple of 8 bits\n" -msgstr "" +msgstr "DSA richiede che la lunghezza dell'hash sia un multiplo di 8 bit\n" #, c-format msgid "%s key uses an unsafe (%u bit) hash\n" -msgstr "" +msgstr "La chiave %s utilizza un hash unsafe (%u bit)\n" #, c-format msgid "a %zu bit hash is not valid for a %u bit %s key\n" -msgstr "" +msgstr "un hash di bit %zu non è valido per una chiave %u bit %s\n" #, c-format msgid "checking created signature failed: %s\n" @@ -712,89 +699,85 @@ msgstr "controllo della firma creata fallito: %s\n" msgid "secret key parts are not available\n" msgstr "parti della chiave segreta non sono disponibili\n" -#, fuzzy, c-format -#| msgid "protection algorithm %d%s is not supported\n" +#, c-format msgid "public key algorithm %d (%s) is not supported\n" -msgstr "l'algoritmo di protezione %d%s non è gestito\n" +msgstr "l'algoritmo a chiave pubblica %d (%s) non è supportato\n" -#, fuzzy, c-format -#| msgid "protection algorithm %d%s is not supported\n" +#, c-format msgid "protection algorithm %d (%s) is not supported\n" -msgstr "l'algoritmo di protezione %d%s non è gestito\n" +msgstr "algoritmo di protezione %d (%s) non supportato\n" -#, fuzzy, c-format -#| msgid "protection algorithm %d%s is not supported\n" +#, c-format msgid "protection hash algorithm %d (%s) is not supported\n" -msgstr "l'algoritmo di protezione %d%s non è gestito\n" +msgstr "algoritmo hash di protezione %d (%s) non supportato\n" -#, fuzzy, c-format +#, c-format msgid "error creating a pipe: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la creazione di una pipe: %s\n" -#, fuzzy, c-format +#, c-format msgid "error creating a stream for a pipe: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la creazione di un flusso per una pipe: %s\n" -#, fuzzy, c-format +#, c-format msgid "error forking process: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante il processo di forking: %s\n" #, c-format msgid "waiting for process %d to terminate failed: %s\n" -msgstr "" +msgstr "in attesa della terminazione del processo %d non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "error running '%s': probably not installed\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'esecuzione di '%s': probabilmente non installato\n" -#, fuzzy, c-format +#, c-format msgid "error running '%s': exit status %d\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'esecuzione di '%s': stato di uscita %d\n" -#, fuzzy, c-format +#, c-format msgid "error running '%s': terminated\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'esecuzione di '%s': terminato\n" -#, fuzzy, c-format +#, c-format msgid "waiting for processes to terminate failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "attesa della terminazione dei processi non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "error getting exit code of process %d: %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "errore durante l'osando di fine del processo %d: %s\n" -#, fuzzy, c-format -#| msgid "can't connect to `%s': %s\n" +#, c-format msgid "can't connect to '%s': %s\n" -msgstr "impossibile connettersi a `%s': %s\n" +msgstr "impossibile connettersi a '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "problem setting the gpg-agent options\n" -msgstr "problema con l'agent: ha restituito 0x%lx\n" +msgstr "problema durante l'impostazione delle opzioni gpg-agent\n" #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossibile disabilitare i core dump: %s\n" -#, fuzzy, c-format +#, c-format msgid "Warning: unsafe ownership on %s \"%s\"\n" -msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n" +msgstr "Avviso: proprietà non sicura su %s \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "Warning: unsafe permissions on %s \"%s\"\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "Avviso: autorizzazioni non sicure su %s \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "waiting for file '%s' to become accessible ...\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "in attesa che il file '%s' diventi accessibile …\n" -#, fuzzy, c-format +#, c-format msgid "renaming '%s' to '%s' failed: %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "ridenominazione di '%s' in '%s' non riuscita: %s\n" #. TRANSLATORS: See doc/TRANSLATE about this string. msgid "yes" -msgstr "si|sì" +msgstr "sì" msgid "yY" msgstr "sS" @@ -808,356 +791,318 @@ msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. msgid "quit" -msgstr "quit" +msgstr "esci" msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. msgid "okay|okay" -msgstr "" +msgstr "okay|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. msgid "cancel|cancel" -msgstr "" +msgstr "cancella|cancella" msgid "oO" -msgstr "" +msgstr "oO" -#, fuzzy msgid "cC" -msgstr "c" +msgstr "cC" #, c-format msgid "out of core in secure memory while allocating %lu bytes" msgstr "" +"fuori dal nucleo nella memoria sicura durante l'allocazione di %lu byte" #, c-format msgid "out of core while allocating %lu bytes" -msgstr "" +msgstr "fuori dal core durante l'allocazione di %lu byte" -#, fuzzy, c-format +#, c-format msgid "error allocating enough memory: %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "errore durante l'allocazione di memoria sufficiente: %s\n" #, c-format msgid "%s:%u: obsolete option \"%s\" - it has no effect\n" -msgstr "" +msgstr "%s:%u: opzione obsoleta \"%s\" - non ha effetto\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n" -msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n" +msgstr "AVVISO: \"%s%s\" è un'opzione obsoleta - non ha alcun effetto\n" #, c-format msgid "unknown debug flag '%s' ignored\n" -msgstr "" +msgstr "flag di debug sconosciuto '%s' ignorato\n" -#, fuzzy, c-format +#, c-format msgid "waiting for the %s to come up ... (%ds)\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "in attesa che venga in corso il %s... (%ds)\n" -#, fuzzy, c-format +#, c-format msgid "connection to %s established\n" -msgstr "impossibile fare questo in modo batch\n" +msgstr "connessione a %s stabilita\n" #, c-format msgid "no running gpg-agent - starting '%s'\n" -msgstr "" +msgstr "nessun gpg-agent in esecuzione - avvio '%s'\n" -#, fuzzy, c-format +#, c-format msgid "connection to agent is in restricted mode\n" -msgstr "impossibile fare questo in modo batch\n" +msgstr "connessione all'agente è in modalità limitata\n" #, c-format msgid "no running Dirmngr - starting '%s'\n" -msgstr "" +msgstr "nessun Dirmngr in esecuzione - avvio di '%s'\n" #. TRANSLATORS: Copy the prefix between the vertical bars #. verbatim. It will not be printed. msgid "|audit-log-result|Good" -msgstr "" +msgstr "-audit-log-result|Buono" msgid "|audit-log-result|Bad" -msgstr "" +msgstr "-audit-log-result|Cattivo" msgid "|audit-log-result|Not supported" -msgstr "" +msgstr "-audit-log-result|Non supportato" -#, fuzzy msgid "|audit-log-result|No certificate" -msgstr "certificato danneggiato" +msgstr "-audit-log-result|Nessun certificato" -#, fuzzy msgid "|audit-log-result|Not enabled" -msgstr "certificato danneggiato" +msgstr "|-audit-log-result|Non abilitato" msgid "|audit-log-result|Error" -msgstr "" +msgstr "-audit-log-result|Errore" -#, fuzzy msgid "|audit-log-result|Not used" -msgstr "certificato danneggiato" +msgstr "|audit-log-result| Non utilizzato" -#, fuzzy msgid "|audit-log-result|Okay" -msgstr "certificato danneggiato" +msgstr "|audit-log-result|ok" -#, fuzzy msgid "|audit-log-result|Skipped" -msgstr "certificato danneggiato" +msgstr "|audit-log-result|Saltato" -#, fuzzy msgid "|audit-log-result|Some" -msgstr "certificato danneggiato" +msgstr "|audit-log-result|alcuni" -#, fuzzy msgid "Certificate chain available" -msgstr "certificato danneggiato" +msgstr "Catena di certificati disponibile" -#, fuzzy msgid "root certificate missing" -msgstr "certificato danneggiato" +msgstr "certificato radice mancante" msgid "Data encryption succeeded" -msgstr "" +msgstr "Crittografia dei dati riuscita" -#, fuzzy msgid "Data available" -msgstr "Chiave disponibile presso: " +msgstr "Dati disponibili" -#, fuzzy msgid "Session key created" -msgstr "%s: portachiavi creato\n" +msgstr "Chiave di sessione creata" -#, fuzzy, c-format +#, c-format msgid "algorithm: %s" -msgstr "armatura: %s\n" +msgstr "algoritmo: %s" -#, fuzzy, c-format +#, c-format msgid "unsupported algorithm: %s" -msgstr "" -"\n" -"Algoritmi gestiti:\n" +msgstr "algoritmo non supportato: %s" -#, fuzzy msgid "seems to be not encrypted" -msgstr "non cifrato" +msgstr "sembra non essere criptato" msgid "Number of recipients" -msgstr "" +msgstr "Numero di destinatari" #, c-format msgid "Recipient %d" -msgstr "" +msgstr "Destinatario %d" msgid "Data signing succeeded" -msgstr "" +msgstr "Firma dei dati riuscita" -#, fuzzy, c-format +#, c-format msgid "data hash algorithm: %s" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "algoritmo hash dati: %s" -#, fuzzy, c-format +#, c-format msgid "Signer %d" -msgstr "Firma scaduta il %s\n" +msgstr "Firmatario %d" -#, fuzzy, c-format +#, c-format msgid "attr hash algorithm: %s" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "algoritmo hash attr: %s" msgid "Data decryption succeeded" -msgstr "" +msgstr "Decrittografia dei dati riuscita" -#, fuzzy msgid "Encryption algorithm supported" -msgstr "l'algoritmo di protezione %d%s non è gestito\n" +msgstr "Algoritmo di crittografia supportato" -#, fuzzy msgid "Data verification succeeded" -msgstr "verifica della firma soppressa\n" +msgstr "Verifica dei dati riuscita" -#, fuzzy msgid "Signature available" -msgstr "Firma scaduta il %s\n" +msgstr "Firma disponibile" -#, fuzzy msgid "Parsing data succeeded" -msgstr "Firma valida da \"" +msgstr "Analisi dei dati riuscita" -#, fuzzy, c-format +#, c-format msgid "bad data hash algorithm: %s" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "algoritmo hash dei dati non valido: %s" -#, fuzzy, c-format +#, c-format msgid "Signature %d" -msgstr "Firma scaduta il %s\n" +msgstr "Firma %d" -#, fuzzy msgid "Certificate chain valid" -msgstr "Questa chiave è scaduta!" +msgstr "Catena di certificati valida" -#, fuzzy msgid "Root certificate trustworthy" -msgstr "certificato danneggiato" +msgstr "Certificato radice attendibile" -#, fuzzy msgid "no CRL found for certificate" -msgstr "certificato danneggiato" +msgstr "nessun CRL trovato per il certificato" -#, fuzzy msgid "the available CRL is too old" -msgstr "Chiave disponibile presso: " +msgstr "il CRL disponibile è troppo vecchio" -#, fuzzy msgid "CRL/OCSP check of certificates" -msgstr "certificato danneggiato" +msgstr "Controllo CRL/OCSP dei certificati" -#, fuzzy msgid "Included certificates" -msgstr "certificato danneggiato" +msgstr "Certificati inclusi" msgid "No audit log entries." -msgstr "" +msgstr "Nessuna voce del log di controllo." -#, fuzzy msgid "Unknown operation" -msgstr "versione sconosciuta" +msgstr "Operazione sconosciuta" msgid "Gpg-Agent usable" -msgstr "" +msgstr "Gpg-Agente utilizzabile" msgid "Dirmngr usable" -msgstr "" +msgstr "Dirmngr utilizzabile" -#, fuzzy, c-format +#, c-format msgid "No help available for '%s'." -msgstr "Non è disponibile un aiuto per `%s'" +msgstr "Nessuna Guida disponibile per '%s'." -#, fuzzy msgid "ignoring garbage line" -msgstr "errore nella riga della coda\n" +msgstr "ignorando la linea spazzatura" -#, fuzzy msgid "[none]" -msgstr "sconosciuto" +msgstr "[nessuno]" -#, fuzzy, c-format +#, c-format msgid "invalid radix64 character %02x skipped\n" -msgstr "Carattere radix64 non valido %02x saltato\n" +msgstr "carattere radix64 non valido %02x ignorato\n" -#, fuzzy msgid "argument not expected" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "argomento non previsto" -#, fuzzy msgid "read error" -msgstr "errore durante la lettura del file" +msgstr "errore di lettura" -#, fuzzy msgid "keyword too long" -msgstr "riga troppo lunga\n" +msgstr "parola chiave troppo lunga" -#, fuzzy msgid "missing argument" -msgstr "argomento non valido" +msgstr "argomento mancante" -#, fuzzy -#| msgid "invalid armor" msgid "invalid argument" -msgstr "armatura non valida" +msgstr "argomento non valido" -#, fuzzy msgid "invalid command" -msgstr "comandi in conflitto\n" +msgstr "comando non valido" -#, fuzzy msgid "invalid alias definition" -msgstr "opzioni di importazione non valide\n" +msgstr "definizione di alias non valida" -# ??? (Md) -#, fuzzy msgid "out of core" -msgstr "non esaminato" +msgstr "fuori dal nucleo" -#, fuzzy msgid "invalid option" -msgstr "opzioni di importazione non valide\n" +msgstr "opzione non valida" #, c-format msgid "missing argument for option \"%.50s\"\n" -msgstr "" +msgstr "argomento mancante per l'opzione \"%.50s\"\n" -#, fuzzy, c-format +#, c-format msgid "invalid argument for option \"%.50s\"\n" -msgstr "opzioni di importazione non valide\n" +msgstr "argomento non valido per l'opzione \"%.50s\"\n" #, c-format msgid "option \"%.50s\" does not expect an argument\n" -msgstr "" +msgstr "l'opzione \"%.50s\" non prevede un argomento\n" -#, fuzzy, c-format +#, c-format msgid "invalid command \"%.50s\"\n" -msgstr "Comando non valido (prova \"help\")\n" +msgstr "comando non valido \"%.50s\"\n" #, c-format msgid "option \"%.50s\" is ambiguous\n" -msgstr "" +msgstr "l'opzione \"%.50s\" è ambigua\n" #, c-format msgid "command \"%.50s\" is ambiguous\n" -msgstr "" +msgstr "il comando \"%.50s\" è ambiguo\n" -# ??? (Md) -#, fuzzy, c-format +#, c-format msgid "out of core\n" -msgstr "non esaminato" +msgstr "fuori dal nucleo\n" -#, fuzzy, c-format +#, c-format msgid "invalid option \"%.50s\"\n" -msgstr "opzioni di importazione non valide\n" +msgstr "opzione non valida \"%.50s\"\n" -#, fuzzy, c-format +#, c-format msgid "conversion from '%s' to '%s' not available\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "conversione da '%s' a '%s' non disponibile\n" -#, fuzzy, c-format +#, c-format msgid "iconv_open failed: %s\n" -msgstr "impossibile aprire il file: %s\n" +msgstr "iconv_open non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "conversion from '%s' to '%s' failed: %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "conversione da '%s' a '%s' non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "failed to create temporary file '%s': %s\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "impossibile creare il file temporaneo '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error writing to '%s': %s\n" -msgstr "errore scrivendo il portachiavi `%s': %s\n" +msgstr "errore durante la scrittura in '%s': %s\n" #, c-format msgid "removing stale lockfile (created by %d)\n" -msgstr "" +msgstr "rimozione del file di blocco non più utilizzato (creato da %d)\n" -#, fuzzy, c-format +#, c-format msgid "waiting for lock (held by %d%s) %s...\n" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "in attesa di blocco (in attesa di %d%s) %s...\n" msgid "(deadlock?) " -msgstr "" +msgstr "(deadlock?) " -#, fuzzy, c-format +#, c-format msgid "lock '%s' not made: %s\n" -msgstr "chiave pubblica %08lX non trovata: %s\n" +msgstr "blocco '%s' non effettuato: %s\n" -#, fuzzy, c-format +#, c-format msgid "waiting for lock %s...\n" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "attesa del blocco %s...\n" #, c-format msgid "%s is too old (need %s, have %s)\n" -msgstr "" +msgstr "%s è troppo vecchio (è necessario %s, con %s)\n" #, c-format msgid "armor: %s\n" @@ -1175,25 +1120,25 @@ msgstr "header dell'armatura: " msgid "invalid clearsig header\n" msgstr "header della firma in chiaro non valido\n" -#, fuzzy, c-format +#, c-format msgid "unknown armor header: " -msgstr "header dell'armatura: " +msgstr "intestazione armatura sconosciuta: " #, c-format msgid "nested clear text signatures\n" msgstr "firme in chiaro annidate\n" -#, fuzzy, c-format +#, c-format msgid "unexpected armor: " -msgstr "armatura inaspettata:" +msgstr "armatura inaspettata: " #, c-format msgid "invalid dash escaped line: " msgstr "riga protetta con il trattino non valida: " -#, fuzzy, c-format +#, c-format msgid "invalid radix64 character %02X skipped\n" -msgstr "Carattere radix64 non valido %02x saltato\n" +msgstr "carattere radix64 non valido %02x ignorato\n" #, c-format msgid "premature eof (no CRC)\n" @@ -1207,13 +1152,13 @@ msgstr "eof prematura (nel CRC)\n" msgid "malformed CRC\n" msgstr "CRC malformato\n" -#, fuzzy, c-format +#, c-format msgid "CRC error; %06lX - %06lX\n" -msgstr "errore nel CRC; %06lx - %06lx\n" +msgstr "Errore CRC; %06lX - %06lX\n" -#, fuzzy, c-format +#, c-format msgid "premature eof (in trailer)\n" -msgstr "eof prematura (nella coda)\n" +msgstr "eof prematuro (nel rimorchio)\n" #, c-format msgid "error in trailer line\n" @@ -1221,7 +1166,7 @@ msgstr "errore nella riga della coda\n" #, c-format msgid "no valid OpenPGP data found.\n" -msgstr "Non sono stati trovati dati OpenPGP validi.\n" +msgstr "non sono stati trovati dati OpenPGP validi.\n" #, c-format msgid "invalid armor: line longer than %d characters\n" @@ -1234,10 +1179,9 @@ msgstr "" "carattere quoted printable nell'armatura - probabilmente è stato usato\n" "un MTA buggato\n" -#, fuzzy, c-format -#| msgid "not human readable" +#, c-format msgid "[ not human readable (%zu bytes: %s%s) ]" -msgstr "non leggibile" +msgstr "[ non leggibile (%zu byte: %s%s) ]" #, c-format msgid "" @@ -1251,26 +1195,22 @@ msgstr "" msgid "a user notation name must contain the '@' character\n" msgstr "il valore di una nota dell'utente deve contenere il carattere '@'\n" -#, fuzzy, c-format +#, c-format msgid "a notation name must not contain more than one '@' character\n" -msgstr "il valore di una nota dell'utente deve contenere il carattere '@'\n" +msgstr "il nome di una notazione non deve contenere più di un carattere '@'\n" #, c-format msgid "a notation value must not use any control characters\n" msgstr "il valore di una nota non deve usare caratteri di controllo\n" -#, fuzzy, c-format +#, c-format msgid "a notation name may not contain an '=' character\n" -msgstr "il valore di una nota dell'utente deve contenere il carattere '@'\n" +msgstr "il valore di una nota dell'utente deve contenere il carattere '='\n" -#, fuzzy, c-format -#| msgid "" -#| "a notation name must have only printable characters or spaces, and end " -#| "with an '='\n" +#, c-format msgid "a notation name must have only printable characters or spaces\n" msgstr "" -"il nome di una nota deve essere formato solo da caratteri stampabili o\n" -"spazi e terminare con un '='\n" +"un nome di notazione deve contenere solo caratteri o spazi stampabili\n" #, c-format msgid "WARNING: invalid notation data found\n" @@ -1278,207 +1218,194 @@ msgstr "ATTENZIONE: trovati dati di una nota non validi\n" #, c-format msgid "failed to proxy %s inquiry to client\n" -msgstr "" +msgstr "impossibile proxy %s richiesta al client\n" msgid "Enter passphrase: " msgstr "Inserisci la passphrase: " -#, fuzzy, c-format -#| msgid "error creating keyring `%s': %s\n" +#, c-format msgid "error getting version from '%s': %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "errore durante il recupero della versione da '%s': %s\n" #, c-format msgid "server '%s' is older than us (%s < %s)" -msgstr "" +msgstr "il server '%s' è precedente a noi (%s < %s)" -#, fuzzy, c-format -#| msgid "WARNING: %s overrides %s\n" +#, c-format msgid "WARNING: %s\n" -msgstr "ATTENZIONE: %s ha la precedenza su %s\n" +msgstr "AVVISO: %s\n" #, c-format msgid "Note: Outdated servers may lack important security fixes.\n" msgstr "" +"Nota: i server obsoleti potrebbero non avere correzioni di sicurezza " +"importanti.\n" -#, fuzzy, c-format -#| msgid "Please use the command \"toggle\" first.\n" +#, c-format msgid "Note: Use the command \"%s\" to restart them.\n" -msgstr "Per favore usa prima il comando \"toggle\".\n" +msgstr "Nota: utilizzare il comando \"%s\" per riavviarli.\n" -#, fuzzy, c-format -#| msgid "%s does not yet work with %s\n" +#, c-format msgid "%s is not compliant with %s mode\n" -msgstr "%s non funziona ancora con %s\n" +msgstr "%s non è conforme alla modalità %s\n" -#, fuzzy, c-format +#, c-format msgid "no dirmngr running in this session\n" -msgstr "gpg-agent non è disponibile in questa sessione\n" +msgstr "nessun dirmngr in esecuzione in questa sessione\n" -#, fuzzy, c-format -#| msgid "you may not use %s while in %s mode\n" +#, c-format msgid "keyserver option \"%s\" may not be used in %s mode\n" -msgstr "non è possibile usare %s in modalità %s\n" +msgstr "l'opzione keyserver \"%s\" non può essere utilizzata in modalità %s\n" msgid "WKD uses a cached result" -msgstr "" +msgstr "WKD utilizza un risultato memorizzato nella cache" msgid "Tor is not running" -msgstr "" +msgstr "Tor non è in esecuzione" -#, fuzzy msgid "Tor is not properly configured" -msgstr "errore: impronta digitale non valida\n" +msgstr "Tor non è configurato correttamente" -#, fuzzy msgid "DNS is not properly configured" -msgstr "errore: impronta digitale non valida\n" +msgstr "DNS non è configurato correttamente" msgid "unacceptable HTTP redirect from server" -msgstr "" +msgstr "reindirizzamento HTTP inaccettabile dal server" msgid "unacceptable HTTP redirect from server was cleaned up" -msgstr "" +msgstr "il reindirizzamento HTTP dal server è stato pulito" -#, fuzzy -#| msgid "generate a revocation certificate" msgid "server uses an invalid certificate" -msgstr "genera un certificato di revoca" +msgstr "server utilizza un certificato non valido" -#, fuzzy, c-format -#| msgid "armor: %s\n" +#, c-format msgid "Note: %s\n" -msgstr "armatura: %s\n" +msgstr "Nota: %s\n" -#, fuzzy, c-format +#, c-format msgid "OpenPGP card not available: %s\n" -msgstr "la chiave segreta non è disponibile" +msgstr "Scheda OpenPGP non disponibile: %s\n" #, c-format msgid "OpenPGP card no. %s detected\n" -msgstr "" +msgstr "Scheda OpenPGP n. %s rilevata\n" -#, fuzzy, c-format +#, c-format msgid "can't do this in batch mode\n" -msgstr "impossibile fare questo in modo batch\n" +msgstr "impossibile eseguire questa operazione in modalità batch\n" -#, fuzzy, c-format +#, c-format msgid "This command is only available for version 2 cards\n" -msgstr "Questo comando non è permesso in modalità %s.\n" +msgstr "Questo comando è disponibile solo per le schede della versione 2\n" -#, fuzzy, c-format +#, c-format msgid "Reset Code not or not anymore available\n" -msgstr "parti della chiave segreta non sono disponibili\n" +msgstr "Reimposta codice non più disponibile o meno\n" msgid "Your selection? " msgstr "Cosa scegli? " msgid "[not set]" -msgstr "" +msgstr "[non impostato]" msgid "Mr." -msgstr "" +msgstr "Sig." msgid "Ms." -msgstr "" +msgstr "Sig.ra." -# ??? (Md) -#, fuzzy msgid "not forced" -msgstr "non esaminato" +msgstr "non forzato" msgid "forced" -msgstr "" +msgstr "costretto" msgid "Error: Only plain ASCII is currently allowed.\n" -msgstr "" +msgstr "Errore: al momento è consentito solo ASCII semplice.\n" msgid "Error: The \"<\" character may not be used.\n" -msgstr "" +msgstr "Errore: il carattere \"<\" non può essere utilizzato.\n" msgid "Error: Double spaces are not allowed.\n" -msgstr "" +msgstr "Errore: gli spazi doppi non sono consentiti.\n" msgid "Cardholder's surname: " -msgstr "" +msgstr "Cognome del titolare della carta: " msgid "Cardholder's given name: " -msgstr "" +msgstr "Nome del titolare della carta: " #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" -msgstr "" +msgstr "Errore: nome combinato troppo lungo (limite è di %d caratteri).\n" -#, fuzzy msgid "URL to retrieve public key: " -msgstr "non c'è una chiave pubblica corrispondente: %s\n" +msgstr "URL per recuperare la chiave pubblica: " -#, fuzzy, c-format -#| msgid "error reading `%s': %s\n" +#, c-format msgid "error reading '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura di '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error writing '%s': %s\n" -msgstr "errore scrivendo il portachiavi `%s': %s\n" +msgstr "errore durante la scrittura di '%s': %s\n" msgid "Login data (account name): " -msgstr "" +msgstr "Dati di accesso (nome account): " msgid "Private DO data: " -msgstr "" +msgstr "Dati DO privati: " -#, fuzzy msgid "Language preferences: " -msgstr "preferenze aggiornate" +msgstr "Preferenze lingua: " -#, fuzzy msgid "Error: invalid length of preference string.\n" -msgstr "carattere non valido nella stringa delle preferenze\n" +msgstr "Errore: lunghezza della stringa di preferenza non valida.\n" -#, fuzzy msgid "Error: invalid characters in preference string.\n" -msgstr "carattere non valido nella stringa delle preferenze\n" +msgstr "Errore: caratteri non validi nella stringa di preferenza.\n" msgid "Salutation (M = Mr., F = Ms., or space): " -msgstr "" +msgstr "Salutazione (M - Mr., F - Ms., o spazio): " -#, fuzzy msgid "Error: invalid response.\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "|FPR|Risposta OCSP firmata da FPR\n" -#, fuzzy msgid "CA fingerprint: " -msgstr "mostra le impronte digitali" +msgstr "Impronta digitale CA: " -#, fuzzy msgid "Error: invalid formatted fingerprint.\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "Errore: impronta digitale formattata non valida.\n" -#, fuzzy, c-format +#, c-format msgid "key operation not possible: %s\n" -msgstr "Generazione della chiave fallita: %s\n" +msgstr "operazione chiave non possibile: %s\n" -#, fuzzy msgid "not an OpenPGP card" -msgstr "Non sono stati trovati dati OpenPGP validi.\n" +msgstr "non una scheda OpenPGP" -#, fuzzy, c-format +#, c-format msgid "error getting current key info: %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "" +"errore durante il recupero delle informazioni sulla chiave corrente: %s\n" msgid "Replace existing key? (y/N) " -msgstr "" +msgstr "Sostituire la chiave esistente? (y/N) " msgid "" "Note: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" +"Nota: non vi è alcuna garanzia che la carta supporti la dimensione " +"richiesta.\n" +" Se la generazione della chiave non riesce,\n" +" documentazione della carta per vedere quali dimensioni sono " +"consentite.\n" -#, fuzzy, c-format +#, c-format msgid "What keysize do you want? (%u) " -msgstr "Di che dimensioni vuoi la chiave? (1024) " +msgstr "Che chiave vuoi? (%u) " #, c-format msgid "rounded up to %u bits\n" @@ -1486,32 +1413,30 @@ msgstr "arrotondate a %u bit\n" #, c-format msgid "%s keysizes must be in the range %u-%u\n" -msgstr "" +msgstr "%s keysizes deve essere compreso nell'intervallo %u-%u\n" msgid "Changing card key attribute for: " -msgstr "" +msgstr "Modifica dell'attributo chiave della scheda per: " -#, fuzzy msgid "Signature key\n" -msgstr "Firma scaduta il %s\n" +msgstr "Chiave di firma\n" -#, fuzzy msgid "Encryption key\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr "Chiave di crittografia\n" msgid "Authentication key\n" -msgstr "" +msgstr "Chiave di autenticazione\n" msgid "Please select what kind of key you want:\n" msgstr "Per favore scegli che tipo di chiave vuoi:\n" -#, fuzzy, c-format +#, c-format msgid " (%d) RSA\n" -msgstr " (%d) RSA (firma solo)\n" +msgstr " (%d) RSA\n" -#, fuzzy, c-format +#, c-format msgid " (%d) ECC\n" -msgstr " (%d) DSA e ElGamal (default)\n" +msgstr " (%d) ECC\n" msgid "Invalid selection.\n" msgstr "Scelta non valida.\n" @@ -1519,33 +1444,37 @@ msgstr "Scelta non valida.\n" #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" +"La scheda verrà ora configurata nuovamente per generare una chiave di %u " +"bit\n" #, c-format msgid "The card will now be re-configured to generate a key of type: %s\n" msgstr "" +"La scheda verrà ora configurata nuovamente per generare una chiave di tipo: " +"%s\n" -#, fuzzy, c-format +#, c-format msgid "error changing key attribute for key %d: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "" +"errore durante la modifica dell'attributo chiave per la chiave %d: %s\n" -#, fuzzy, c-format +#, c-format msgid "error getting card info: %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "errore durante il recupero delle informazioni sulla scheda: %s\n" -#, fuzzy, c-format -#| msgid "This command is not allowed while in %s mode.\n" +#, c-format msgid "This command is not supported by this card\n" -msgstr "Questo comando non è permesso in modalità %s.\n" +msgstr "Questo comando non è supportato da questa scheda\n" msgid "Make off-card backup of encryption key? (Y/n) " -msgstr "" +msgstr "Eseguire il backup off-card della chiave di crittografia? (Y/n) " -#, fuzzy, c-format +#, c-format msgid "Note: keys are already stored on the card!\n" -msgstr "saltata: chiave pubblica già presente\n" +msgstr "Nota: le chiavi sono già memorizzate sulla scheda!\n" msgid "Replace existing keys? (y/N) " -msgstr "" +msgstr "Sostituire le chiavi esistenti? (y/N) " #, c-format msgid "" @@ -1553,126 +1482,112 @@ msgid "" " PIN = '%s' Admin PIN = '%s'\n" "You should change them using the command --change-pin\n" msgstr "" +"Si prega di notare che le impostazioni di fabbrica dei PIN sono\n" +" PIN : '%s' PIN di amministrazione = '%s'\n" +"È necessario modificarli utilizzando il comando --change-pin\n" -#, fuzzy msgid "Please select the type of key to generate:\n" -msgstr "Per favore scegli che tipo di chiave vuoi:\n" +msgstr "Selezionare il tipo di chiave da generare:\n" -#, fuzzy msgid " (1) Signature key\n" -msgstr "Firma scaduta il %s\n" +msgstr " (1) Chiave di firma\n" -#, fuzzy msgid " (2) Encryption key\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (2) Chiave di crittografia\n" msgid " (3) Authentication key\n" -msgstr "" +msgstr " (3) Chiave di autenticazione\n" -#, fuzzy msgid "Please select where to store the key:\n" -msgstr "Per favore scegli il motivo della revoca:\n" +msgstr "Si prega di selezionare dove memorizzare la chiave:\n" -#, fuzzy, c-format +#, c-format msgid "KEYTOCARD failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "KEYTOCARD non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "Note: This command destroys all keys stored on the card!\n" -msgstr "saltata: chiave pubblica già presente\n" +msgstr "" +"Nota: Questo comando distrugge tutti i tasti memorizzati sulla scheda!\n" -#, fuzzy msgid "Continue? (y/N) " -msgstr "Firmo davvero? " +msgstr "Continuare? (Y/n) " msgid "Really do a factory reset? (enter \"yes\") " -msgstr "" +msgstr "Fare davvero un reset di fabbrica? (immettere \"sì\") " -#, fuzzy, c-format +#, c-format msgid "error for setup KDF: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore per l'installazione KDF: %s\n" msgid "quit this menu" msgstr "abbandona questo menù" -#, fuzzy msgid "show admin commands" -msgstr "comandi in conflitto\n" +msgstr "mostra comandi di amministrazione" msgid "show this help" msgstr "mostra questo aiuto" -#, fuzzy msgid "list all available data" -msgstr "Chiave disponibile presso: " +msgstr "elencare tutti i dati disponibili" msgid "change card holder's name" -msgstr "" +msgstr "cambiare il nome del titolare della carta" msgid "change URL to retrieve key" -msgstr "" +msgstr "modificare l'URL per recuperare la chiave" msgid "fetch the key specified in the card URL" -msgstr "" +msgstr "recuperare la chiave specificata nell'URL della scheda" -#, fuzzy msgid "change the login name" -msgstr "cambia la data di scadenza" +msgstr "modificare il nome di accesso" -#, fuzzy msgid "change the language preferences" -msgstr "cambia il valore di fiducia" +msgstr "modificare le preferenze della lingua" msgid "change card holder's salutation" -msgstr "" +msgstr "cambiare il saluto del titolare della carta" -#, fuzzy msgid "change a CA fingerprint" -msgstr "mostra le impronte digitali" +msgstr "modificare un'impronta digitale CA" msgid "toggle the signature force PIN flag" -msgstr "" +msgstr "attivare/disattivare il flag PIN di forza della firma" -#, fuzzy msgid "generate new keys" -msgstr "genera una nuova coppia di chiavi" +msgstr "genera nuove chiavi" msgid "menu to change or unblock the PIN" -msgstr "" +msgstr "per modificare o sbloccare il PIN" msgid "verify the PIN and list all data" -msgstr "" +msgstr "verificare il PIN ed elencare tutti i dati" msgid "unblock the PIN using a Reset Code" -msgstr "" +msgstr "sbloccare il PIN utilizzando un codice di ripristino" msgid "destroy all keys and data" -msgstr "" +msgstr "distruggere tutte le chiavi e i dati" -#, fuzzy -#| msgid "|NAME|use NAME as default recipient" msgid "setup KDF for PIN authentication" -msgstr "|NOME|usa NOME come destinatario predefinito" +msgstr "configurazione KDF per l'autenticazione PIN" -#, fuzzy -#| msgid "change the ownertrust" msgid "change the key attribute" -msgstr "cambia il valore di fiducia" +msgstr "modificare l'attributo chiave" msgid "gpg/card> " -msgstr "" +msgstr "gpg/card> " -#, fuzzy msgid "Admin-only command\n" -msgstr "comandi in conflitto\n" +msgstr "Comando solo amministratore\n" -#, fuzzy msgid "Admin commands are allowed\n" -msgstr "comandi in conflitto\n" +msgstr "I comandi di amministrazione sono consentiti\n" -#, fuzzy msgid "Admin commands are not allowed\n" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "I comandi di amministrazione non sono consentiti\n" msgid "Invalid command (try \"help\")\n" msgstr "Comando non valido (prova \"help\")\n" @@ -1681,62 +1596,62 @@ msgstr "Comando non valido (prova \"help\")\n" msgid "--output doesn't work for this command\n" msgstr "--output non funziona con questo comando\n" -#, fuzzy, c-format -#| msgid "can't open `%s'\n" +#, c-format msgid "can't open '%s'\n" -msgstr "impossibile aprire `%s'\n" +msgstr "impossibile aprire '%s'\n" -#, fuzzy, c-format +#, c-format msgid "key \"%s\" not found: %s\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "chiave \"%s\" non trovata: %s\n" #, c-format msgid "error reading keyblock: %s\n" msgstr "errore leggendo il keyblock: %s\n" -#, fuzzy, c-format +#, c-format msgid "key \"%s\" not found\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "chiave \"%s\" non trovata\n" #, c-format msgid "(unless you specify the key by fingerprint)\n" msgstr "(a meno che la chiave sia specificata con il fingerprint)\n" -#, fuzzy, c-format +#, c-format msgid "can't do this in batch mode without \"--yes\"\n" -msgstr "impossibile fare questo in modo batch senza \"--yes\"\n" +msgstr "non può farlo in modalità batch senza \"--yes\"\n" msgid "Note: The public primary key and all its subkeys will be deleted.\n" msgstr "" +"Nota: la chiave primaria pubblica e tutte le relative sottochiavi verranno " +"eliminate.\n" msgid "Note: Only the shown public subkey will be deleted.\n" -msgstr "" +msgstr "Nota: verrà eliminata solo la sottochiave pubblica visualizzata.\n" msgid "Note: Only the secret part of the shown primary key will be deleted.\n" msgstr "" +"Nota: verrà eliminata solo la parte segreta della chiave primaria " +"visualizzata.\n" msgid "Note: Only the secret part of the shown subkey will be deleted.\n" msgstr "" +"Nota: verrà eliminata solo la parte segreta della sottochiave visualizzata.\n" -#, fuzzy msgid "Delete this key from the keyring? (y/N) " -msgstr "Vuoi cancellare questa chiave dal portachiavi? " +msgstr "Eliminare questa chiave dal keyring? (y/N) " -#, fuzzy msgid "This is a secret key! - really delete? (y/N) " -msgstr "È una chiave segreta! - Vuoi cancellarla davvero? " +msgstr "Questa è una chiave segreta! - davvero cancellare? (y/N) " -#, fuzzy, c-format +#, c-format msgid "deleting secret %s failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "eliminazione del segreto %s non riuscita: %s\n" msgid "key" msgstr "key" -#, fuzzy -#| msgid "Pubkey: " msgid "subkey" -msgstr "A chiave pubblica: " +msgstr "sottochiave" #, c-format msgid "update failed: %s\n" @@ -1771,43 +1686,45 @@ msgstr "" msgid "using cipher %s\n" msgstr "uso il cifrario %s\n" -#, fuzzy, c-format -#| msgid "`%s' already compressed\n" +#, c-format msgid "'%s' already compressed\n" -msgstr "`%s' è già compresso\n" +msgstr "'%s' già compresso\n" -#, fuzzy, c-format -#| msgid "WARNING: `%s' is an empty file\n" +#, c-format msgid "WARNING: '%s' is an empty file\n" -msgstr "ATTENZIONE: `%s' è un file vuoto\n" +msgstr "AVVISO: '%s' è un file vuoto\n" -#, fuzzy, c-format -#| msgid "reading from `%s'\n" +#, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "" +"l'algoritmo di crittografia '%s' non può essere utilizzato in modalità %s\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "l'algoritmo digest '%s' non può essere utilizzato in modalità %s\n" + +#, c-format msgid "reading from '%s'\n" -msgstr "lettura da `%s'\n" +msgstr "lettura da '%s'\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" -"forzare il cifrario simmetrico %s (%d) viola le preferenze\n" -"del destinatario\n" +"AVVISO: l'imposizione della crittografia simmetrica %s (%d) viola le " +"preferenze del destinatario\n" -#, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "non è possibile usare l'algoritmo di cifratura \"%s\" in modalità %s\n" - -#, fuzzy, c-format +#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" -msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n" +msgstr "AVVISO: la chiave %s non è adatta per la crittografia in modalità %s\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" -"forzare l'algoritmo di compressione %s (%d) viola le preferenze\n" -"del destinatario\n" +"AVVISO: l'algoritmo di compressione %s (%d) viola le preferenze dei " +"destinatari\n" #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" @@ -1819,10 +1736,9 @@ msgstr "" msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s cifrato per: \"%s\"\n" -#, fuzzy, c-format -#| msgid "you may not use %s while in %s mode\n" +#, c-format msgid "option '%s' may not be used in %s mode\n" -msgstr "non è possibile usare %s in modalità %s\n" +msgstr "l'opzione '%s' non può essere utilizzata in modalità %s\n" #, c-format msgid "%s encrypted data\n" @@ -1854,19 +1770,19 @@ msgstr "" "le chiamate a programmi esterni sono disattivate a causa dei permessi non\n" "sicuri del file delle opzioni\n" -#, fuzzy, c-format +#, c-format msgid "this platform requires temporary files when calling external programs\n" msgstr "" "questa piattaforma richiede file temporanei quando si chiamano programmi " "esterni\n" -#, fuzzy, c-format +#, c-format msgid "unable to execute program '%s': %s\n" -msgstr "impossibile eseguire %s \"%s\": %s\n" +msgstr "impossibile eseguire il programma '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "unable to execute shell '%s': %s\n" -msgstr "impossibile eseguire %s \"%s\": %s\n" +msgstr "impossibile eseguire la shell '%s': %s\n" #, c-format msgid "system error while calling external program: %s\n" @@ -1884,131 +1800,115 @@ msgstr "impossibile eseguire il programma esterno\n" msgid "unable to read external program response: %s\n" msgstr "impossibile leggere la risposta del programma esterno: %s\n" -#, fuzzy, c-format -#| msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" +#, c-format msgid "WARNING: unable to remove tempfile (%s) '%s': %s\n" -msgstr "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n" +msgstr "AVVISO: impossibile rimuovere il file temporaneo (%s) '%s': %s\n" -#, fuzzy, c-format -#| msgid "WARNING: unable to remove temp directory `%s': %s\n" +#, c-format msgid "WARNING: unable to remove temp directory '%s': %s\n" -msgstr "ATTENZIONE: impossibile rimuovere la directory temporanea `%s': %s\n" +msgstr "AVVISO: impossibile rimuovere la directory temporanea '%s': %s\n" -#, fuzzy msgid "export signatures that are marked as local-only" -msgstr "" -"\n" -"La firma sarà marcata come irrevocabile.\n" +msgstr "esportare firme contrassegnate come solo locali" msgid "export attribute user IDs (generally photo IDs)" -msgstr "" +msgstr "esportare gli ID utente degli attributi (in genere gli ID foto)" -#, fuzzy msgid "export revocation keys marked as \"sensitive\"" -msgstr "non sono state trovate chiavi di revoca per `%s'\n" +msgstr "esportare le chiavi di revoca contrassegnate come \"sensibili\"" -#, fuzzy msgid "remove unusable parts from key during export" -msgstr "chiave segreta inutilizzabile" +msgstr "rimuovere parti inutilizzabili dalla chiave durante l'esportazione" msgid "remove as much as possible from key during export" -msgstr "" +msgstr "rimuovere il più possibile dalla chiave durante l'esportazione" msgid "use the GnuPG key backup format" -msgstr "" +msgstr "utilizzare il formato di backup della chiave GnuPG" -#, fuzzy -#| msgid "%s: skipped: %s\n" msgid " - skipped" -msgstr "%s: saltata: %s\n" +msgstr " - saltato" -#, fuzzy, c-format -#| msgid "writing to `%s'\n" +#, c-format msgid "writing to '%s'\n" -msgstr "scrittura in `%s'\n" +msgstr "scrittura in '%s'\n" -#, fuzzy, c-format +#, c-format msgid "key %s: key material on-card - skipped\n" -msgstr "chiave %08lX: firma della subchiave nel posto sbagliato - saltata\n" +msgstr "chiave %s: materiale della chiave su scheda - ignorato\n" -#, fuzzy, c-format +#, c-format msgid "exporting secret keys not allowed\n" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "esportazione di chiavi segrete non consentita\n" -#, fuzzy, c-format +#, c-format msgid "key %s: PGP 2.x style key - skipped\n" -msgstr "chiave %08lX: chiave in stile PGP 2.x - saltata\n" +msgstr "chiave %s: chiave di stile PGP 2.x - ignorata\n" #, c-format msgid "WARNING: nothing exported\n" msgstr "ATTENZIONE: non è stato esportato nulla\n" -#, fuzzy, c-format -#| msgid "error creating `%s': %s\n" +#, c-format msgid "error creating '%s': %s\n" -msgstr "errore creando `%s': %s\n" +msgstr "errore durante la creazione di '%s': %s\n" -#, fuzzy msgid "[User ID not found]" -msgstr "[User ID non trovato]" +msgstr "[ID utente non trovato]" -#, fuzzy, c-format +#, c-format msgid "automatically retrieved '%s' via %s\n" -msgstr "errore creando `%s': %s\n" +msgstr "recuperato automaticamente '%s' tramite %s\n" -#, fuzzy, c-format +#, c-format msgid "error retrieving '%s' via %s: %s\n" -msgstr "errore creando `%s': %s\n" +msgstr "errore durante il recupero di '%s' tramite %s: %s\n" -#, fuzzy msgid "No fingerprint" -msgstr "mostra le impronte digitali" +msgstr "Nessuna impronta digitale" #, c-format msgid "checking for a fresh copy of an expired key via %s\n" msgstr "" +"verifica della presenza di una nuova copia di una chiave scaduta tramite %s\n" -#, fuzzy, c-format +#, c-format msgid "secret key \"%s\" not found: %s\n" -msgstr "chiave segreta `%s' non trovata: %s\n" +msgstr "chiave segreta \"%s\" non trovata: %s\n" -#, fuzzy, c-format +#, c-format msgid "(check argument of option '%s')\n" -msgstr "opzioni di importazione non valide\n" +msgstr "(controllare l'argomento dell'opzione '%s')\n" -#, fuzzy, c-format -#| msgid "|NAME|use NAME as default secret key" +#, c-format msgid "Warning: not using '%s' as default key: %s\n" -msgstr "|NOME|usa NOME come chiave segreta predefinita" +msgstr "Avviso: impossibile utilizzare '%s' come chiave predefinita: %s\n" -#, fuzzy, c-format -#| msgid "|NAME|use NAME as default secret key" +#, c-format msgid "using \"%s\" as default secret key for signing\n" -msgstr "|NOME|usa NOME come chiave segreta predefinita" +msgstr "utilizzo di \"%s\" come chiave segreta predefinita per la firma\n" #, c-format msgid "all values passed to '%s' ignored\n" -msgstr "" +msgstr "tutti i valori passati a '%s' ignorati\n" -#, fuzzy, c-format +#, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" -msgstr "Chiave %08lX non valida resa valida da --allow-non-selfsigned-uid\n" +msgstr "Chiave non valida %s resa valida da --allow-non-selfsigned-uid\n" -#, fuzzy, c-format +#, c-format msgid "using subkey %s instead of primary key %s\n" -msgstr "uso la chiave secondaria %08lX invece della chiave primaria %08lX\n" +msgstr "utilizzando la sottochiave %s anziché la chiave primaria %s\n" -#, fuzzy, c-format +#, c-format msgid "valid values for option '%s':\n" -msgstr "opzioni di importazione non valide\n" +msgstr "valori validi per l'opzione '%s':\n" -#, fuzzy msgid "make a signature" -msgstr "fai una firma separata" +msgstr "fare una firma" -#, fuzzy msgid "make a clear text signature" -msgstr "|[file]|fai una firma mantenendo il testo in chiaro" +msgstr "creare una firma di testo non crittografato" msgid "make a detached signature" msgstr "fai una firma separata" @@ -2031,9 +1931,8 @@ msgstr "elenca le chiavi" msgid "list keys and signatures" msgstr "elenca le chiavi e le firme" -#, fuzzy msgid "list and check key signatures" -msgstr "controlla le firme delle chiavi" +msgstr "elencare e controllare le firme delle chiavi" msgid "list keys and fingerprints" msgstr "elenca le chiavi e le impronte digitali" @@ -2044,28 +1943,20 @@ msgstr "elenca le chiavi segrete" msgid "generate a new key pair" msgstr "genera una nuova coppia di chiavi" -#, fuzzy -#| msgid "generate a new key pair" msgid "quickly generate a new key pair" -msgstr "genera una nuova coppia di chiavi" +msgstr "generare rapidamente una nuova coppia di chiavi" -#, fuzzy -#| msgid "generate a new key pair" msgid "quickly add a new user-id" -msgstr "genera una nuova coppia di chiavi" +msgstr "aggiungere rapidamente un nuovo id utente" -#, fuzzy -#| msgid "generate a new key pair" msgid "quickly revoke a user-id" -msgstr "genera una nuova coppia di chiavi" +msgstr "revocare rapidamente un id utente" -#, fuzzy -#| msgid "generate a new key pair" msgid "quickly set a new expiration date" -msgstr "genera una nuova coppia di chiavi" +msgstr "impostare rapidamente una nuova data di scadenza" msgid "full featured key pair generation" -msgstr "" +msgstr "generazione completa della coppia di chiavi in primo piano" msgid "generate a revocation certificate" msgstr "genera un certificato di revoca" @@ -2076,15 +1967,16 @@ msgstr "rimuove le chiavi dal portachiavi pubblico" msgid "remove keys from the secret keyring" msgstr "rimuove le chiavi dal portachiavi privato" -#, fuzzy -#| msgid "sign a key" msgid "quickly sign a key" -msgstr "firma una chiave" +msgstr "firmare rapidamente un tasto" -#, fuzzy -#| msgid "sign a key locally" msgid "quickly sign a key locally" -msgstr "firma una chiave localmente" +msgstr "firmare rapidamente una chiave localmente" + +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "revocare rapidamente un id utente" msgid "sign a key" msgstr "firma una chiave" @@ -2095,7 +1987,6 @@ msgstr "firma una chiave localmente" msgid "sign or edit a key" msgstr "firma o modifica una chiave" -#, fuzzy msgid "change a passphrase" msgstr "cambia la passphrase" @@ -2118,48 +2009,43 @@ msgid "import/merge keys" msgstr "importa/aggiungi delle chiavi" msgid "print the card status" -msgstr "" +msgstr "stampare lo stato della scheda" msgid "change data on a card" -msgstr "" +msgstr "modificare i dati su una scheda" msgid "change a card's PIN" -msgstr "" +msgstr "modificare il PIN di una carta" msgid "update the trust database" msgstr "aggiorna il database della fiducia" -#, fuzzy msgid "print message digests" -msgstr "|algo [files]|stampa tutti i message digests" +msgstr "stampare digest dei messaggi" msgid "run in server mode" -msgstr "" +msgstr "eseguire in modalità server" msgid "|VALUE|set the TOFU policy for a key" -msgstr "" +msgstr "|VALORE|impostare il criterio TOFU per una chiave" msgid "create ascii armored output" msgstr "crea un output ascii con armatura" -#, fuzzy msgid "|USER-ID|encrypt for USER-ID" -msgstr "|NOME|cifra per NOME" +msgstr "|USER-ID|encrypt per USER-ID" -#, fuzzy msgid "|USER-ID|use USER-ID to sign or decrypt" -msgstr "usa questo user-id per firmare o decifrare" +msgstr "|USER-ID|utilizzare USER-ID per firmare o decrittografare" -#, fuzzy msgid "|N|set compress level to N (0 disables)" -msgstr "|N|imposta il livello di compressione (0 disab.)" +msgstr "|N|Impostare il livello di compressione su N (0 disabilita)" msgid "use canonical text mode" msgstr "usa il modo testo canonico" -#, fuzzy msgid "|FILE|write output to FILE" -msgstr "|FILE|carica il modulo di estensione FILE" +msgstr "|FILE|scrittura dell'output in FILE" msgid "do not make any changes" msgstr "non fa cambiamenti" @@ -2168,7 +2054,7 @@ msgid "prompt before overwriting" msgstr "chiede prima di sovrascrivere" msgid "use strict OpenPGP behavior" -msgstr "" +msgstr "utilizzare un comportamento OpenPGP rigoroso" msgid "" "@\n" @@ -2177,16 +2063,6 @@ msgstr "" "@\n" "(Vedi la man page per una lista completa di tutti i comandi e opzioni)\n" -#, fuzzy -#| msgid "" -#| "@\n" -#| "Examples:\n" -#| "\n" -#| " -se -r Bob [file] sign and encrypt for user Bob\n" -#| " --clear-sign [file] make a clear text signature\n" -#| " --detach-sign [file] make a detached signature\n" -#| " --list-keys [names] show keys\n" -#| " --fingerprint [names] show fingerprints\n" msgid "" "@\n" "Examples:\n" @@ -2200,30 +2076,23 @@ msgstr "" "@\n" "Esempi:\n" "\n" -" -se -r Bob [file] firma e cifra per l'utente Bob\n" -" --clear-sign [file] fai una firma mantenendo il testo in chiaro\n" -" --detach-sign [file] fai una firma separata\n" -" --list-keys [nomi] mostra le chiavi\n" +"-se -r Bob [file] firma e crittografa per l'utente Bob\n" +" --cancella-segno [file] fare una firma di testo non crittografato\n" +" --detach-sign [file] crea una firma disconnessa\n" +" --list-keys [nomi] mostra le chiavi\n" " --fingerprint [nomi] mostra le impronte digitali\n" -#, fuzzy -#| msgid "Usage: gpg [options] [files] (-h for help)" msgid "Usage: @GPG@ [options] [files] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: @GPG@ [opzioni] [file] (-h per assistenza)" -#, fuzzy -#| msgid "" -#| "Syntax: gpg [options] [files]\n" -#| "sign, check, encrypt or decrypt\n" -#| "default operation depends on the input data\n" msgid "" "Syntax: @GPG@ [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" -"Sintassi: gpg [opzioni] [files]\n" -"firma, controlla, cifra o decifra\n" -"l'operazione predefinita dipende dai dati di input\n" +"Sintassi: @GPG@ [opzioni] [files]\n" +"Firmare, controllare, crittografare o decrittografare\n" +"Il funzionamento predefinito dipende dai dati di input\n" msgid "" "\n" @@ -2244,163 +2113,168 @@ msgstr "Hash: " msgid "Compression: " msgstr "Compressione: " -#, fuzzy, c-format +#, c-format msgid "usage: %s [options] %s\n" -msgstr "uso: gpg [opzioni] " +msgstr "utilizzo: %s [opzioni] %s\n" #, c-format msgid "conflicting commands\n" msgstr "comandi in conflitto\n" -#, fuzzy, c-format +#, c-format msgid "no = sign found in group definition '%s'\n" -msgstr "non è stato trovato il segno = nella definizione del gruppo \"%s\"\n" +msgstr "nessun segno = trovato nella definizione di gruppo '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe ownership on homedir '%s'\n" -msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n" +msgstr "AVVISO: proprietà non sicura su homedir '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe ownership on configuration file '%s'\n" -msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n" +msgstr "AVVISO: proprietà non sicura nel file di configurazione '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe ownership on extension '%s'\n" -msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n" +msgstr "AVVISO: proprietà non sicura nell'estensione '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe permissions on homedir '%s'\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "AVVISO: proprietà non sicura su homedir '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe permissions on configuration file '%s'\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "AVVISO: autorizzazioni non sicure per il file di configurazione '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe permissions on extension '%s'\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "AVVISO: autorizzazioni non sicure per l'estensione '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir '%s'\n" -msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n" +msgstr "AVVISO: proprietà non sicura su homedir '%s'\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file '%s'\n" -msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n" +msgstr "" +"AVVISO: proprietà della directory di inclusione non sicura nel file di " +"configurazione '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe enclosing directory ownership on extension '%s'\n" -msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n" +msgstr "" +"AVVISO: proprietà della directory di inclusione non sicura nell'estensione " +"'%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir '%s'\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "" +"AVVISO: autorizzazioni della directory di inclusione non sicure nella " +"directory homedir '%s'\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file '%s'\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "" +"AVVISO: autorizzazioni della directory di inclusione non sicure nella " +"directory homedir '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unsafe enclosing directory permissions on extension '%s'\n" -msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n" +msgstr "" +"AVVISO: autorizzazioni della directory di inclusione non sicure per " +"l'estensione '%s'\n" -#, fuzzy, c-format +#, c-format msgid "unknown configuration item '%s'\n" -msgstr "elemento della configurazione sconosciuto \"%s\"\n" +msgstr "elemento di configurazione sconosciuto '%s'\n" msgid "display photo IDs during key listings" -msgstr "" +msgstr "visualizzare gli ID foto durante le elenchi dei tasti" -#, fuzzy msgid "show key usage information during key listings" -msgstr "Manca la firma corrispondente nel portachiavi segreto\n" +msgstr "" +"mostra le informazioni sull'utilizzo delle chiavi durante le inserzioni " +"chiave" msgid "show policy URLs during signature listings" -msgstr "" +msgstr "mostra URL dei criteri durante gli elenchi delle firme" -#, fuzzy msgid "show all notations during signature listings" -msgstr "Manca la firma corrispondente nel portachiavi segreto\n" +msgstr "mostra tutte le notazioni durante gli elenchi delle firme" msgid "show IETF standard notations during signature listings" -msgstr "" +msgstr "mostra notazioni standard IETF durante gli elenchi delle firme" msgid "show user-supplied notations during signature listings" msgstr "" +"mostra le notazioni fornite dall'utente durante gli elenchi delle firme" -#, fuzzy msgid "show preferred keyserver URLs during signature listings" -msgstr "l'URL della politica di firma indicato non è valido\n" +msgstr "mostra gli URL preferiti del keyserver durante gli elenchi delle firme" msgid "show user ID validity during key listings" -msgstr "" +msgstr "mostra validità ID utente durante le inserzioni chiave" msgid "show revoked and expired user IDs in key listings" -msgstr "" +msgstr "mostra ID utente revocati e scaduti negli elenchi di chiavi" msgid "show revoked and expired subkeys in key listings" -msgstr "" +msgstr "mostra sottochiavi revocate e scadute negli elenchi di chiavi" -#, fuzzy msgid "show the keyring name in key listings" -msgstr "mostra in quali portachiavi sono contenute le chiavi elencate" +msgstr "mostrare il nome del keyring negli elenchi delle chiavi" -#, fuzzy msgid "show expiration dates during signature listings" -msgstr "Manca la firma corrispondente nel portachiavi segreto\n" +msgstr "mostra date di scadenza durante le inserzioni delle firme" -#, fuzzy, c-format +#, c-format msgid "unknown TOFU policy '%s'\n" -msgstr "destinatario predefinito `%s' sconosciuto\n" +msgstr "criterio TOFU sconosciuto '%s'\n" #, c-format msgid "(use \"help\" to list choices)\n" -msgstr "" +msgstr "(utilizzare \"help\" per elencare le scelte)\n" -#, fuzzy, c-format -#| msgid "NOTE: old default options file `%s' ignored\n" +#, c-format msgid "Note: old default options file '%s' ignored\n" -msgstr "" -"NOTA: il vecchio file `%s' con le opzioni predefinite è stato ignorato\n" +msgstr "Nota: il vecchio file di opzioni predefinito '%s' è stato ignorato\n" -#, fuzzy, c-format -#| msgid "NOTE: %s is not for normal use!\n" +#, c-format msgid "Note: %s is not for normal use!\n" -msgstr "NOTA: %s normalmente non deve essere usato!\n" +msgstr "Nota: %s non è per uso normale!\n" -#, fuzzy, c-format +#, c-format msgid "'%s' is not a valid signature expiration\n" -msgstr "%s non è un set di caratteri valido\n" +msgstr "'%s' non è una scadenza di firma valida\n" -#, fuzzy, c-format +#, c-format msgid "\"%s\" is not a proper mail address\n" -msgstr "L'indirizzo di email non è valido\n" +msgstr "\"%s\" non è un indirizzo di posta elettronica corretto\n" -#, fuzzy, c-format +#, c-format msgid "invalid pinentry mode '%s'\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "modalità pinentry non valida '%s'\n" -#, fuzzy, c-format +#, c-format msgid "invalid request origin '%s'\n" -msgstr "opzioni di importazione non valide\n" +msgstr "origine richiesta non valida '%s'\n" -#, fuzzy, c-format +#, c-format msgid "'%s' is not a valid character set\n" -msgstr "%s non è un set di caratteri valido\n" +msgstr "'%s' non è un set di caratteri valido\n" -#, fuzzy, c-format +#, c-format msgid "could not parse keyserver URL\n" -msgstr "impossibile fare il parsing dell'URI del keyserver\n" +msgstr "impossibile analizzare l'URL del server dei chiavi\n" -#, fuzzy, c-format +#, c-format msgid "%s:%d: invalid keyserver options\n" -msgstr "%s:%d: opzioni di esportazione non valide\n" +msgstr "%s:%d: opzioni keyserver non valide\n" -#, fuzzy, c-format +#, c-format msgid "invalid keyserver options\n" -msgstr "opzioni di esportazione non valide\n" +msgstr "opzioni keyserver non valide\n" #, c-format msgid "%s:%d: invalid import options\n" @@ -2410,9 +2284,9 @@ msgstr "%s:%d: opzioni di importazione non valide\n" msgid "invalid import options\n" msgstr "opzioni di importazione non valide\n" -#, fuzzy, c-format +#, c-format msgid "invalid filter option: %s\n" -msgstr "opzioni di importazione non valide\n" +msgstr "opzione di filtro non valida: %s\n" #, c-format msgid "%s:%d: invalid export options\n" @@ -2422,70 +2296,67 @@ msgstr "%s:%d: opzioni di esportazione non valide\n" msgid "invalid export options\n" msgstr "opzioni di esportazione non valide\n" -#, fuzzy, c-format +#, c-format msgid "%s:%d: invalid list options\n" -msgstr "%s:%d: opzioni di importazione non valide\n" +msgstr "%s:%d: opzioni di elenco non valide\n" -#, fuzzy, c-format +#, c-format msgid "invalid list options\n" -msgstr "opzioni di importazione non valide\n" +msgstr "opzioni di elenco non valide\n" msgid "display photo IDs during signature verification" -msgstr "" +msgstr "visualizzare gli ID foto durante la verifica della firma" msgid "show policy URLs during signature verification" -msgstr "" +msgstr "mostra URL dei criteri durante la verifica della firma" -#, fuzzy msgid "show all notations during signature verification" -msgstr "%s non è un set di caratteri valido\n" +msgstr "mostra tutte le notazioni durante la verifica della firma" msgid "show IETF standard notations during signature verification" -msgstr "" +msgstr "mostra notazioni standard IETF durante la verifica della firma" msgid "show user-supplied notations during signature verification" msgstr "" +"mostra le notazioni fornite dall'utente durante la verifica della firma" -#, fuzzy msgid "show preferred keyserver URLs during signature verification" -msgstr "l'URL della politica di firma indicato non è valido\n" +msgstr "mostra gli URL preferiti del keyserver durante la verifica della firma" -#, fuzzy msgid "show user ID validity during signature verification" -msgstr "%s non è un set di caratteri valido\n" +msgstr "mostra validità DELL'ID utente durante la verifica della firma" msgid "show revoked and expired user IDs in signature verification" -msgstr "" +msgstr "mostra ID utente revocati e scaduti nella verifica della firma" -#, fuzzy msgid "show only the primary user ID in signature verification" -msgstr "%s non è un set di caratteri valido\n" +msgstr "mostra solo l'ID utente primario nella verifica della firma" msgid "validate signatures with PKA data" -msgstr "" +msgstr "convalidare le firme con i dati PKA" msgid "elevate the trust of signatures with valid PKA data" -msgstr "" +msgstr "elevare la fiducia delle firme con dati PKA validi" -#, fuzzy, c-format +#, c-format msgid "%s:%d: invalid verify options\n" -msgstr "%s:%d: opzioni di esportazione non valide\n" +msgstr "%s:%d: opzioni di verifica non valide\n" -#, fuzzy, c-format +#, c-format msgid "invalid verify options\n" -msgstr "opzioni di esportazione non valide\n" +msgstr "opzioni di verifica non valide\n" #, c-format msgid "unable to set exec-path to %s\n" msgstr "impossibile impostare exec-path a %s\n" -#, fuzzy, c-format +#, c-format msgid "%s:%d: invalid auto-key-locate list\n" -msgstr "%s:%d: opzioni di esportazione non valide\n" +msgstr "%s:%d: elenco di individuazione automatica della chiave non valido\n" #, c-format msgid "invalid auto-key-locate list\n" -msgstr "" +msgstr "elenco di individuazione automatica delle chiavi non valido\n" #, c-format msgid "WARNING: program may create a core file!\n" @@ -2505,19 +2376,19 @@ msgstr "Non ha senso usare %s con %s!\n" #, c-format msgid "WARNING: running with faked system time: " -msgstr "" +msgstr "AVVISO: in esecuzione con l'ora di sistema falso: " -#, fuzzy, c-format +#, c-format msgid "will not run with insecure memory due to %s\n" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "non verrà eseguito con memoria non protetta a causa di %s\n" #, c-format msgid "selected cipher algorithm is invalid\n" msgstr "l'algoritmo di cifratura selezionato non è valido\n" -#, fuzzy, c-format +#, c-format msgid "selected compression algorithm is invalid\n" -msgstr "l'algoritmo di cifratura selezionato non è valido\n" +msgstr "algoritmo di compressione selezionato non valido\n" #, c-format msgid "selected certification digest algorithm is invalid\n" @@ -2531,9 +2402,9 @@ msgstr "completes-needed deve essere maggiore di 0\n" msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve essere maggiore di 1\n" -#, fuzzy, c-format +#, c-format msgid "max-cert-depth must be in the range from 1 to 255\n" -msgstr "max-cert-depth deve essere tra 1 e 255\n" +msgstr "max-cert-depth deve essere compreso tra 1 e 255\n" #, c-format msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" @@ -2543,10 +2414,9 @@ msgstr "default-cert-level non valido; deve essere 0, 1, 2 o 3\n" msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "min-cert-level non valido; deve essere 1, 2 o 3\n" -#, fuzzy, c-format -#| msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" +#, c-format msgid "Note: simple S2K mode (0) is strongly discouraged\n" -msgstr "NOTA: l'uso del modo S2K semplice (0) è fortemente scoraggiato\n" +msgstr "Nota: la modalità S2K semplice (0) è fortemente sconsigliata\n" #, c-format msgid "invalid S2K mode; must be 0, 1 or 3\n" @@ -2572,14 +2442,10 @@ msgstr "preferenze personali di compressione non valide\n" msgid "%s does not yet work with %s\n" msgstr "%s non funziona ancora con %s\n" -#, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "non è possibile usare l'algoritmo di digest \"%s\" in modalità %s\n" - -#, fuzzy, c-format +#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "" -"non è possibile usare l'algoritmo di compressione \"%s\" in modalità %s\n" +"l'algoritmo di compressione '%s' non può essere utilizzato in modalità %s\n" #, c-format msgid "failed to initialize the TrustDB: %s\n" @@ -2591,25 +2457,27 @@ msgstr "" "ATTENZIONE: sono stati indicati dei destinatari (-r) senza usare la\n" "crittografia a chiave pubblica\n" -#, fuzzy, c-format +#, c-format msgid "symmetric encryption of '%s' failed: %s\n" -msgstr "decifratura fallita: %s\n" +msgstr "crittografia simmetrica di '%s' non riuscita: %s\n" #, c-format msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" -msgstr "" +msgstr "non è possibile utilizzare --symmetric --encrypt con --s2k-mode 0\n" -#, fuzzy, c-format +#, c-format msgid "you cannot use --symmetric --encrypt in %s mode\n" -msgstr "non è possibile usare %s in modalità %s\n" +msgstr "non è possibile utilizzare --symmetric --encrypt in modalità %s\n" #, c-format msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" +"non è possibile utilizzare --symmetric --sign --encrypt con --s2k-mode 0\n" -#, fuzzy, c-format +#, c-format msgid "you cannot use --symmetric --sign --encrypt in %s mode\n" -msgstr "non è possibile usare %s in modalità %s\n" +msgstr "" +"non è possibile utilizzare --symmetric --sign --encrypt in modalità %s\n" #, c-format msgid "keyserver send failed: %s\n" @@ -2623,10 +2491,9 @@ msgstr "ricezione dal keyserver fallita: %s\n" msgid "key export failed: %s\n" msgstr "esportazione della chiave fallita: %s\n" -#, fuzzy, c-format -#| msgid "key export failed: %s\n" +#, c-format msgid "export as ssh key failed: %s\n" -msgstr "esportazione della chiave fallita: %s\n" +msgstr "esportazione come chiave ssh non riuscita: %s\n" #, c-format msgid "keyserver search failed: %s\n" @@ -2644,22 +2511,24 @@ msgstr "rimozione dell'armatura fallita: %s\n" msgid "enarmoring failed: %s\n" msgstr "creazione dell'armatura fallita: %s\n" -#, fuzzy, c-format -#| msgid "invalid hash algorithm `%s'\n" +#, c-format msgid "invalid hash algorithm '%s'\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "algoritmo hash non valido '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error parsing key specification '%s': %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante l'analisi della specifica della chiave '%s': %s\n" #, c-format msgid "'%s' does not appear to be a valid key ID, fingerprint or keygrip\n" msgstr "" +"'%s' non sembra essere un ID chiave, un'impronta digitale o un keygrip " +"valido\n" #, c-format msgid "WARNING: no command supplied. Trying to guess what you mean ...\n" msgstr "" +"AVVISO: nessun comando fornito. Cercando di indovinare cosa vuoi dire ...\n" #, c-format msgid "Go ahead and type your message ...\n" @@ -2673,13 +2542,12 @@ msgstr "l'URL della politica di certificazione indicato non è valido\n" msgid "the given signature policy URL is invalid\n" msgstr "l'URL della politica di firma indicato non è valido\n" -#, fuzzy, c-format +#, c-format msgid "the given preferred keyserver URL is invalid\n" -msgstr "l'URL della politica di firma indicato non è valido\n" +msgstr "l'URL del keyserver preferito specificato non è valido\n" -#, fuzzy msgid "|FILE|take the keys from the keyring FILE" -msgstr "prende le chiavi da questo portachiavi" +msgstr "| FILE: prendere le chiavi dal file di tasti" msgid "make timestamp conflicts only a warning" msgstr "segnala i conflitti di data solo con un avvertimento" @@ -2688,84 +2556,77 @@ msgid "|FD|write status info to this FD" msgstr "|FD|scrivi le informazioni di stato sul FD" msgid "|ALGO|reject signatures made with ALGO" -msgstr "" +msgstr "|ALGO|rifiuta le firme fatte con ALGO" msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Uso: gpgv [opzioni] [file] (-h per l'aiuto)" -#, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" -"Sintassi: gpg [opzioni] [file]\n" -"Controlla le firme con le chiavi affidabili note\n" +"Sintassi: gpgv [opzioni] [file]\n" +"Controllare le firme rispetto alle chiavi attendibili note\n" msgid "No help available" msgstr "Non è disponibile un aiuto" -#, fuzzy, c-format -#| msgid "No help available for `%s'" +#, c-format msgid "No help available for '%s'" -msgstr "Non è disponibile un aiuto per `%s'" +msgstr "Nessuna Guida disponibile per '%s'." msgid "import signatures that are marked as local-only" -msgstr "" +msgstr "importare firme contrassegnate come solo locali" msgid "repair damage from the pks keyserver during import" -msgstr "" +msgstr "riparare i danni dal keyserver pks durante l'importazione" -#, fuzzy msgid "do not clear the ownertrust values during import" -msgstr "aggiorna il database della fiducia" +msgstr "non cancellare i valori ownertrust durante l'importazione" -#, fuzzy msgid "do not update the trustdb after import" -msgstr "aggiorna il database della fiducia" +msgstr "non aggiornare il trustdb dopo l'importazione" -#, fuzzy msgid "show key during import" -msgstr "mostra le impronte digitali" +msgstr "mostra chiave durante l'importazione" msgid "only accept updates to existing keys" -msgstr "" +msgstr "accettare solo gli aggiornamenti alle chiavi esistenti" -#, fuzzy msgid "remove unusable parts from key after import" -msgstr "chiave segreta inutilizzabile" +msgstr "rimuovere le parti inutilizzabili dalla chiave dopo l'importazione" msgid "remove as much as possible from key after import" -msgstr "" +msgstr "rimuovere il più possibile dalla chiave dopo l'importazione" msgid "ignore key-signatures which are not self-signatures" -msgstr "" +msgstr "ignorare le firme chiave che non sono auto-firme" msgid "run import filters and export key immediately" msgstr "" +"eseguire immediatamente i filtri di importazione e la chiave di esportazione" msgid "assume the GnuPG key backup format" -msgstr "" +msgstr "assumere il formato di backup della chiave GnuPG" -#, fuzzy msgid "repair keys on import" -msgstr "mostra le impronte digitali" +msgstr "ripristinare le chiavi all'importazione" #, c-format msgid "skipping block of type %d\n" msgstr "salto un blocco di tipo %d\n" -#, fuzzy, c-format +#, c-format msgid "%lu keys processed so far\n" -msgstr "Per ora sono state esaminate %lu chiavi\n" +msgstr "%lu chiavi elaborate finora\n" #, c-format msgid "Total number processed: %lu\n" msgstr "Numero totale esaminato: %lu\n" -#, fuzzy, c-format -#| msgid " skipped new keys: %lu\n" +#, c-format msgid " skipped PGP-2 keys: %lu\n" -msgstr " nuove chiavi saltate: %lu\n" +msgstr " Chiavi PGP-2 ignorate: %lu\n" #, c-format msgid " skipped new keys: %lu\n" @@ -2797,7 +2658,7 @@ msgstr " nuove firme: %lu\n" #, c-format msgid " new key revocations: %lu\n" -msgstr "nuove revoche di chiavi: %lu\n" +msgstr " nuove revoche di chiavi: %lu\n" #, c-format msgid " secret keys read: %lu\n" @@ -2805,162 +2666,165 @@ msgstr " chiavi segrete lette: %lu\n" #, c-format msgid " secret keys imported: %lu\n" -msgstr "chiavi segrete importate: %lu\n" +msgstr " chiavi segrete importate: %lu\n" #, c-format msgid " secret keys unchanged: %lu\n" -msgstr "chiavi segrete non cambiate: %lu\n" +msgstr " chiavi segrete non cambiate: %lu\n" #, c-format msgid " not imported: %lu\n" msgstr " importate: %lu\n" -#, fuzzy, c-format +#, c-format msgid " signatures cleaned: %lu\n" -msgstr " nuove firme: %lu\n" +msgstr " firme pulite: %lu\n" -#, fuzzy, c-format +#, c-format msgid " user IDs cleaned: %lu\n" -msgstr " chiavi segrete lette: %lu\n" +msgstr " ID utente puliti: %lu\n" #, c-format msgid "" "WARNING: key %s contains preferences for unavailable\n" "algorithms on these user IDs:\n" msgstr "" +"AVVISO: la chiave %s contiene le preferenze per\n" +"algoritmi su questi ID utente:\n" #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" -msgstr "" +msgstr " \"%s\": preferenza per l'algoritmo di crittografia %s\n" -#, fuzzy, c-format +#, c-format msgid " \"%s\": preference for digest algorithm %s\n" -msgstr "Firma %s, algoritmo di digest %s\n" +msgstr " \"%s\": preferenza per l'algoritmo digest %s\n" #, c-format msgid " \"%s\": preference for compression algorithm %s\n" -msgstr "" +msgstr " \"%s\": preferenza per l'algoritmo di compressione %s\n" #, c-format msgid "it is strongly suggested that you update your preferences and\n" -msgstr "" +msgstr "si consiglia vivamente di aggiornare le preferenze e\n" #, c-format msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" +"ri-distribuire questa chiave per evitare potenziali problemi di mancata " +"corrispondenza dell'algoritmo\n" #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" +"è possibile aggiornare le preferenze con: gpg --edit-key %s updpref save\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no user ID\n" -msgstr "chiave %08lX: nessun user ID\n" +msgstr "chiave %s: nessun ID utente\n" -#, fuzzy, c-format +#, c-format msgid "key %s: %s\n" -msgstr "saltata `%s': %s\n" +msgstr "chiave %s: %s\n" msgid "rejected by import screener" -msgstr "" +msgstr "rifiutato dallo screener di importazione" -#, fuzzy, c-format +#, c-format msgid "key %s: PKS subkey corruption repaired\n" -msgstr "chiave %08lX: riparati i danni di HKP alla subchiave\n" +msgstr "chiave %s: danneggiamento della sottochiave PKS riparato\n" -#, fuzzy, c-format +#, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" -msgstr "chiave %08lX: accettato l'user ID non autofirmato '%s'\n" +msgstr "chiave %s: accettato ID utente non autofirmato \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no valid user IDs\n" -msgstr "chiave %08lX: nessun user ID valido\n" +msgstr "chiave %s: nessun ID utente valido\n" #, c-format msgid "this may be caused by a missing self-signature\n" msgstr "questo può essere causato da una autofirma mancante\n" -#, fuzzy, c-format +#, c-format msgid "key %s: public key not found: %s\n" -msgstr "chiave %08lX: chiave pubblica non trovata: %s\n" +msgstr "chiave %s: chiave pubblica non trovata: %s\n" -#, fuzzy, c-format +#, c-format msgid "key %s: new key - skipped\n" -msgstr "chiave %08lX: nuova chiave - saltata\n" +msgstr "chiave %s: nuova chiave - ignorata\n" #, c-format msgid "no writable keyring found: %s\n" msgstr "non è stato trovato un portachiavi scrivibile: %s\n" -#, fuzzy, c-format -#| msgid "error writing keyring `%s': %s\n" +#, c-format msgid "error writing keyring '%s': %s\n" -msgstr "errore scrivendo il portachiavi `%s': %s\n" +msgstr "errore durante la scrittura della chiave '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "key %s: public key \"%s\" imported\n" -msgstr "chiave %08lX: importata la chiave pubblica \"%s\"\n" +msgstr "chiave %s: chiave pubblica \"%s\" importata\n" -#, fuzzy, c-format +#, c-format msgid "key %s: doesn't match our copy\n" -msgstr "chiave %08lX: non corrisponde alla nostra copia\n" +msgstr "chiave %s: non corrisponde alla nostra copia\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" 1 new user ID\n" -msgstr "chiave %08lX: \"%s\" 1 nuovo user ID\n" +msgstr "chiave %s: \"%s\" 1 nuovo ID utente\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" %d new user IDs\n" -msgstr "chiave %08lX: \"%s\" %d nuovi user ID\n" +msgstr "chiave %s: \"%s\" %d nuovi ID utente\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" 1 new signature\n" -msgstr "chiave %08lX: \"%s\" una nuova firma\n" +msgstr "chiave %s: \"%s\" 1 nuova firma\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" %d new signatures\n" -msgstr "chiave %08lX: \"%s\" %d nuove firme\n" +msgstr "chiave %s: \"%s\" %d nuove firme\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" 1 new subkey\n" -msgstr "chiave %08lX: \"%s\" una nuova subchiave\n" +msgstr "chiave %s: \"%s\" 1 nuova sottochiave\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" %d new subkeys\n" -msgstr "chiave %08lX: \"%s\" %d nuove subchiavi\n" +msgstr "chiave %s: \"%s\" %d nuove sottochiavi\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" %d signature cleaned\n" -msgstr "chiave %08lX: \"%s\" %d nuove firme\n" +msgstr "chiave %s: \"%s\" %d firma pulita\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" -msgstr "chiave %08lX: \"%s\" %d nuove firme\n" +msgstr "chiave %s: \"%s\" %d firme pulite\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" -msgstr "chiave %08lX: \"%s\" %d nuovi user ID\n" +msgstr "chiave %s: \"%s\" %d ID utente pulito\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" -msgstr "chiave %08lX: \"%s\" %d nuovi user ID\n" +msgstr "chiave %s: \"%s\" %d ID utente puliti\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" not changed\n" -msgstr "chiave %08lX: \"%s\" non cambiata\n" +msgstr "chiave %s: \"%s\" non modificata\n" -#, fuzzy, c-format +#, c-format msgid "key %s: secret key imported\n" -msgstr "chiave %08lX: chiave segreta importata\n" +msgstr "chiave %s: chiave segreta importata\n" -#, fuzzy, c-format -#| msgid "skipped: secret key already present\n" +#, c-format msgid "key %s: secret key already exists\n" -msgstr "saltata: chiave pubblica già presente\n" +msgstr "chiave %s: chiave segreta già esistente\n" -#, fuzzy, c-format +#, c-format msgid "key %s: error sending to agent: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "chiave %s: errore durante l'invio all'agente: %s\n" #. TRANSLATORS: For a smartcard, each private key on host has a #. * reference (stub) to a smartcard and actual private key data @@ -2972,19 +2836,19 @@ msgstr "errore leggendo `%s': %s\n" #. * again. #, c-format msgid "To migrate '%s', with each smartcard, run: %s\n" -msgstr "" +msgstr "Per eseguire la migrazione di '%s', con ogni smart card: %s\n" -#, fuzzy, c-format +#, c-format msgid "secret key %s: %s\n" -msgstr "chiave segreta `%s' non trovata: %s\n" +msgstr "chiave segreta %s: %s\n" -#, fuzzy, c-format +#, c-format msgid "importing secret keys not allowed\n" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "importazione di chiavi segrete non consentita\n" -#, fuzzy, c-format +#, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" -msgstr "chiave %08lX: chiave segreta con cifrario %d non valido - saltata\n" +msgstr "chiave %s: chiave segreta con crittografia non valida %d - ignorata\n" msgid "No reason specified" msgstr "Nessuna ragione specificata" @@ -3009,203 +2873,205 @@ msgstr "ragione della revoca: " msgid "revocation comment: " msgstr "commento alla revoca: " -#, fuzzy, c-format +#, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" -"chiave %08lX: manca la chiave pubblica - impossibile applicare il\n" -"certificato di revoca\n" +"chiave %s: nessuna chiave pubblica - impossibile applicare il certificato di " +"revoca\n" -#, fuzzy, c-format +#, c-format msgid "key %s: can't locate original keyblock: %s\n" -msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n" +msgstr "chiave %s: impossibile individuare il blocco di chiave originale: %s\n" -#, fuzzy, c-format +#, c-format msgid "key %s: can't read original keyblock: %s\n" -msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" +msgstr "chiave %s: impossibile leggere il keyblock originale: %s\n" -#, fuzzy, c-format +#, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" -msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n" +msgstr "chiave %s: certificato di revoca non valido: %s - rifiutato\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" revocation certificate imported\n" -msgstr "chiave %08lX: \"%s\" certificato di revoca importato\n" +msgstr "chiave %s: certificato di revoca \"%s\" importato\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no user ID for signature\n" -msgstr "chiave %08lX: nessun user ID per la firma\n" +msgstr "chiave %s: nessun ID utente per la firma\n" -#, fuzzy, c-format +#, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" -"chiave %08lX: algoritmo a chiave pubblica non gestito sull'user ID \"%s\"\n" +"chiave %s: algoritmo a chiave pubblica non supportato sull'ID utente \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" -msgstr "chiave %08lX: autofirma non valida sull'user ID \"%s\"\n" +msgstr "chiave %s: autode firma non valida sull'ID utente \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "key %s: unsupported public key algorithm\n" -msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n" +msgstr "chiave %s: algoritmo a chiave pubblica non supportato\n" -#, fuzzy, c-format +#, c-format msgid "key %s: invalid direct key signature\n" -msgstr "chiave %08lX: aggiunta una firma alla chiave diretta\n" +msgstr "chiave %s: firma diretta della chiave non valida\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no subkey for key binding\n" -msgstr "chiave %08lX: non ci sono subchiavi per il legame con la chiave\n" +msgstr "chiave %s: nessuna sottochiave per l'associazione della chiave\n" -#, fuzzy, c-format +#, c-format msgid "key %s: invalid subkey binding\n" -msgstr "chiave %08lX: legame con la subchiave non valido:\n" +msgstr "chiave %s: associazione di sottochiavi non valida\n" -#, fuzzy, c-format +#, c-format msgid "key %s: removed multiple subkey binding\n" -msgstr "chiave %08lX: rimossi i legami con subochiavi multiple\n" +msgstr "chiave %s: rimossa l'associazione di più sottochiavi\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no subkey for key revocation\n" -msgstr "chiave %08lX: non ci sono subchiavi per la revoca della chiave\n" +msgstr "chiave %s: nessuna sottochiave per la revoca della chiave\n" -#, fuzzy, c-format +#, c-format msgid "key %s: invalid subkey revocation\n" -msgstr "chiave %08lX: revoca della subchiave non valida\n" +msgstr "chiave %s: revoca della sottochiave non valida\n" -#, fuzzy, c-format +#, c-format msgid "key %s: removed multiple subkey revocation\n" -msgstr "chiave %08lX: rimosse le revoche di subchiavi multiple\n" +msgstr "chiave %s: rimossa la revoca di più sottochiavi\n" -#, fuzzy, c-format +#, c-format msgid "key %s: skipped user ID \"%s\"\n" -msgstr "chiave %08lX: saltato l'user ID '" +msgstr "chiave %s: ID utente ignorato \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "key %s: skipped subkey\n" -msgstr "chiave %08lX: saltata la subchiave\n" +msgstr "chiave %s: sottochiave ignorata\n" -#, fuzzy, c-format +#, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" -msgstr "chiave %08lX: firma non esportabile (classe %02x) - saltata\n" +msgstr "chiave %s: firma non esportabile (classe 0x%02X) - ignorata\n" -#, fuzzy, c-format +#, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" -msgstr "chiave %08lX: certificato di revoca nel posto sbagliato - saltata\n" +msgstr "chiave %s: certificato di revoca nella posizione errata - ignorato\n" -#, fuzzy, c-format +#, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" -msgstr "chiave %08lX: certificato di revoca non valido: %s - saltata\n" +msgstr "chiave %s: certificato di revoca non valido: %s - ignorato\n" -#, fuzzy, c-format +#, c-format msgid "key %s: subkey signature in wrong place - skipped\n" -msgstr "chiave %08lX: firma della subchiave nel posto sbagliato - saltata\n" +msgstr "chiave %s: firma della sottochiave nella posizione errata - ignorata\n" -#, fuzzy, c-format +#, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" -msgstr "chiave %08lX: classe della firma inaspettata (0x%02x) - saltata\n" +msgstr "chiave %s: classe di firma imprevista (0x%02X) - ignorata\n" -#, fuzzy, c-format +#, c-format msgid "key %s: duplicated user ID detected - merged\n" -msgstr "chiave %08lX: trovato un user ID duplicato - unito\n" +msgstr "chiave %s: rilevato ID utente duplicato - unito\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" -"ATTENZIONE: la chiave %08lX può essere stata revocata: scarico la chiave\n" -"di revoca %08lX.\n" +"AVVISO: la chiave %s può essere revocata: recupero della chiave di revoca " +"%s\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" -"ATTENZIONE: la chiave %08lX può essere stata revocata: la chiave di\n" -"revoca %08lX non è presente.\n" +"AVVISO: la chiave %s può essere revocata: chiave di revoca %s non presente.\n" -#, fuzzy, c-format +#, c-format msgid "key %s: \"%s\" revocation certificate added\n" -msgstr "chiave %08lX: certificato di revoca \"%s\" aggiunto\n" +msgstr "chiave %s: certificato di revoca \"%s\" aggiunto\n" -#, fuzzy, c-format +#, c-format msgid "key %s: direct key signature added\n" -msgstr "chiave %08lX: aggiunta una firma alla chiave diretta\n" +msgstr "chiave %s: aggiunta firma chiave diretta\n" -#, fuzzy, c-format +#, c-format msgid "error allocating memory: %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "errore durante l'allocazione della memoria: %s\n" -#, fuzzy, c-format +#, c-format msgid "can't check signature with unsupported public-key algorithm (%d): %s.\n" -msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n" +msgstr "" +"impossibile controllare la firma con algoritmo a chiave pubblica non " +"supportato (%d): %s.\n" -#, fuzzy, c-format +#, c-format msgid "" "can't check signature with unsupported message-digest algorithm %d: %s.\n" -msgstr "Firma %s, algoritmo di digest %s\n" +msgstr "" +"impossibile controllare la firma con l'algoritmo digest del messaggio non " +"supportato %d: %s.\n" -#, fuzzy msgid " (reordered signatures follow)" -msgstr "Firma valida da \"" +msgstr " (seguono le firme riordinate)" -#, fuzzy, c-format +#, c-format msgid "key %s:\n" -msgstr "saltata `%s': %s\n" +msgstr "chiave %s:\n" -#, fuzzy, c-format +#, c-format msgid "%d duplicate signature removed\n" msgid_plural "%d duplicate signatures removed\n" -msgstr[0] "L'user ID \"%s\" è stato revocato." -msgstr[1] "L'user ID \"%s\" è stato revocato." +msgstr[0] "" +"%d firma duplicata rimossa\n" +"\n" +msgstr[1] "%d firme duplicate rimosse\n" -#, fuzzy, c-format -#| msgid "1 signature not checked due to a missing key\n" +#, c-format msgid "%d signature not checked due to a missing key\n" msgid_plural "%d signatures not checked due to missing keys\n" -msgstr[0] "una firma non controllata per mancanza della chiave\n" -msgstr[1] "una firma non controllata per mancanza della chiave\n" +msgstr[0] "%d firma non controllata a causa di una chiave mancante\n" +msgstr[1] "%d firme non controllate a causa di chiavi mancanti\n" -#, fuzzy, c-format -#| msgid "%d bad signatures\n" +#, c-format msgid "%d bad signature\n" msgid_plural "%d bad signatures\n" -msgstr[0] "%d firme non corrette\n" -msgstr[1] "%d firme non corrette\n" +msgstr[0] "%d firma non valida\n" +msgstr[1] "%d firme non valide\n" -#, fuzzy, c-format +#, c-format msgid "%d signature reordered\n" msgid_plural "%d signatures reordered\n" -msgstr[0] "Firma valida da \"" -msgstr[1] "Firma valida da \"" +msgstr[0] "Firma %d riordinata\n" +msgstr[1] "Firme %d riordinata\n" #, c-format msgid "" "Warning: errors found and only checked self-signatures, run '%s' to check " "all signatures.\n" msgstr "" +"Avviso: errori rilevati e controllati solo auto-firme, eseguire '%s' per " +"controllare tutte le firme.\n" -#, fuzzy, c-format +#, c-format msgid "error creating keybox '%s': %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "errore durante la creazione della casella della chiave '%s': %s\n" -#, fuzzy, c-format -#| msgid "error creating keyring `%s': %s\n" +#, c-format msgid "error creating keyring '%s': %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "errore durante la creazione della chiave '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "keybox '%s' created\n" -msgstr "portachiavi `%s' creato\n" +msgstr "keybox '%s' creato\n" -#, fuzzy, c-format -#| msgid "keyring `%s' created\n" +#, c-format msgid "keyring '%s' created\n" -msgstr "portachiavi `%s' creato\n" +msgstr "chiave '%s' creata\n" -#, fuzzy, c-format +#, c-format msgid "keyblock resource '%s': %s\n" -msgstr "errore creando `%s': %s\n" +msgstr "risorsa keyblock '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error opening key DB: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'apertura della chiave DB: %s\n" #, c-format msgid "failed to rebuild keyring cache: %s\n" @@ -3217,38 +3083,41 @@ msgstr "[revoca]" msgid "[self-signature]" msgstr "[autofirma]" -#, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" -"Per favore decidi quanto hai fiducia che questo utente firmi correttamente\n" -"le chiavi di altri utenti (guardando il loro passaporto, controllando le\n" -"impronte digitali da diverse fonti...)?\n" -"\n" +"Si prega di decidere fino a che punto si considera attendibile questo utente " +"per verificare correttamente le chiavi di altri utenti\n" +"(guardando i passaporti, controllando le impronte digitali da fonti diverse, " +"ecc.)\n" -#, fuzzy, c-format +#, c-format msgid " %d = I trust marginally\n" -msgstr " %d = Mi fido marginalmente\n" +msgstr " %d - Mi fido marginalmente\n" -#, fuzzy, c-format +#, c-format msgid " %d = I trust fully\n" -msgstr " %d = Mi fido completamente\n" +msgstr " %d - Mi fido completamente\n" msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" +"Immettere la profondità di questa firma di attendibilità .\n" +"Una profondità maggiore di 1 consente alla chiave che si sta firmando di\n" +"firme di attendibilità per vostro conto.\n" msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" +"Inserisci un dominio per limitare questa firma o inserisci per nessuno.\n" #, c-format msgid "Skipping user ID \"%s\", which is not a text ID.\n" -msgstr "" +msgstr "Ignorare l'ID utente \"%s\", che non è un ID di testo.\n" #, c-format msgid "User ID \"%s\" is revoked." @@ -3268,13 +3137,12 @@ msgstr "L'user ID \"%s\" è scaduto." msgid "User ID \"%s\" is not self-signed." msgstr "L'user ID \"%s\" non è autofirmato." -#, fuzzy, c-format +#, c-format msgid "User ID \"%s\" is signable. " -msgstr "L'user ID \"%s\" non è autofirmato." +msgstr "L'ID utente \"%s\" è firmabile. " -#, fuzzy msgid "Sign it? (y/N) " -msgstr "Firmo davvero? " +msgstr "Firmarlo? (y/N) " #, c-format msgid "" @@ -3309,20 +3177,20 @@ msgstr "" msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Vuoi trasformarla in una firma completa esportabile? (s/N) " -#, fuzzy, c-format +#, c-format msgid "\"%s\" was already locally signed by key %s\n" -msgstr "\"%s\" era già stato firmato localmente dalla chiave %08lX\n" +msgstr "\"%s\" era già firmato localmente dalla chiave %s\n" -#, fuzzy, c-format +#, c-format msgid "\"%s\" was already signed by key %s\n" -msgstr "\"%s\" era già stato firmato dalla chiave %08lX\n" +msgstr "\"%s\" è già stato firmato dalla chiave %s\n" msgid "Do you want to sign it again anyway? (y/N) " msgstr "Sei ancora sicuro di volerla firmare di nuovo? (s/N) " -#, fuzzy, c-format +#, c-format msgid "Nothing to sign with key %s\n" -msgstr "Niente da firmare con la chiave %08lX\n" +msgstr "Niente da firmare con la chiave %s\n" msgid "This key has expired!" msgstr "Questa chiave è scaduta!" @@ -3359,69 +3227,43 @@ msgstr " (2) L'ho controllata superficialmente.%s\n" msgid " (3) I have done very careful checking.%s\n" msgstr " (3) L'ho controllata molto attentamente.%s\n" -#, fuzzy msgid "Your selection? (enter '?' for more information): " -msgstr "Cosa scegli? (inserisci '?' per ulteriori informazioni): " +msgstr "La tua scelta? (inserire '?' per ulteriori informazioni): " -#, fuzzy, c-format +#, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" -"Sei davvero sicuro di volere firmare questa chiave\n" -"con la tua chiave: \"" +"Sei sicuro di voler firmare questa chiave con il tuo\n" +"chiave \"%s\" (%s)\n" -#, fuzzy msgid "This will be a self-signature.\n" -msgstr "" -"\n" -"Questa sarà una autofirma.\n" +msgstr "Questa sarà un'auto-firma.\n" -#, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" -msgstr "" -"\n" -"ATTENZIONE: la firma non sarà marcata come non esportabile.\n" +msgstr "AVVISO: la firma non verrà contrassegnata come non esportabile.\n" -#, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" -msgstr "" -"\n" -"ATTENZIONE: la firma sarà marcata come irrevocabile.\n" +msgstr "AVVISO: la firma non verrà contrassegnata come non revocabile.\n" -#, fuzzy msgid "The signature will be marked as non-exportable.\n" -msgstr "" -"\n" -"La firma sarà marcata come non esportabile.\n" +msgstr "La firma verrà contrassegnata come non esportabile.\n" -#, fuzzy msgid "The signature will be marked as non-revocable.\n" -msgstr "" -"\n" -"La firma sarà marcata come irrevocabile.\n" +msgstr "La firma verrà contrassegnata come non revocabile.\n" -#, fuzzy msgid "I have not checked this key at all.\n" -msgstr "" -"\n" -"Non ho controllato per niente questa chiave.\n" +msgstr "Non ho controllato questa chiave a tutti.\n" -#, fuzzy msgid "I have checked this key casually.\n" -msgstr "" -"\n" -"Ho controllato questa chiave superficialmente.\n" +msgstr "Ho controllato questa chiave casualmente.\n" -#, fuzzy msgid "I have checked this key very carefully.\n" -msgstr "" -"\n" -"Ho controllato questa chiave molto attentamente.\n" +msgstr "Ho controllato questa chiave con molta attenzione.\n" -#, fuzzy msgid "Really sign? (y/N) " -msgstr "Firmo davvero? " +msgstr "Davvero firmare? (y/N) " #, c-format msgid "signing failed: %s\n" @@ -3429,22 +3271,21 @@ msgstr "firma fallita: %s\n" msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" +"Key ha solo elementi chiave stub o on-card - nessuna passphrase da " +"modificare.\n" -#, fuzzy, c-format -#| msgid "error creating passphrase: %s\n" +#, c-format msgid "key %s: error changing passphrase: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "chiave %s: errore durante la modifica della passphrase: %s\n" msgid "save and quit" msgstr "salva ed esci" -#, fuzzy msgid "show key fingerprint" -msgstr "mostra le impronte digitali" +msgstr "mostra impronta digitale chiave" -#, fuzzy msgid "show the keygrip" -msgstr "Annotazione della firma: " +msgstr "mostrare il keygrip" msgid "list key and user IDs" msgstr "elenca le chiavi e gli user ID" @@ -3452,27 +3293,25 @@ msgstr "elenca le chiavi e gli user ID" msgid "select user ID N" msgstr "scegli l'user ID N" -#, fuzzy msgid "select subkey N" -msgstr "scegli l'user ID N" +msgstr "selezionare la sottochiave N" -#, fuzzy msgid "check signatures" -msgstr "revoca firme" +msgstr "controllare le firme" msgid "sign selected user IDs [* see below for related commands]" msgstr "" +"firmare gli ID utente selezionati [* vedere di seguito per i comandi " +"correlati]" -#, fuzzy msgid "sign selected user IDs locally" -msgstr "firma la chiave localmente" +msgstr "firmare gli ID utente selezionati localmente" -#, fuzzy msgid "sign selected user IDs with a trust signature" -msgstr "Suggerimento: seleziona gli user ID da firmare\n" +msgstr "firmare gli ID utente selezionati con una firma di trust" msgid "sign selected user IDs with a non-revocable signature" -msgstr "" +msgstr "firmare gli ID utente selezionati con una firma non-revocabile" msgid "add a user ID" msgstr "aggiungi un user ID" @@ -3480,41 +3319,36 @@ msgstr "aggiungi un user ID" msgid "add a photo ID" msgstr "aggiungi un ID fotografico" -#, fuzzy msgid "delete selected user IDs" -msgstr "cancella un user ID" +msgstr "eliminare gli ID utente selezionati" -#, fuzzy msgid "add a subkey" -msgstr "addkey" +msgstr "aggiungere una sottochiave" msgid "add a key to a smartcard" -msgstr "" +msgstr "aggiungere una chiave a una smart card" msgid "move a key to a smartcard" -msgstr "" +msgstr "spostare un tasto in una smart card" msgid "move a backup key to a smartcard" -msgstr "" +msgstr "spostare una chiave di backup in una smart card" -#, fuzzy msgid "delete selected subkeys" -msgstr "cancella una chiave secondaria" +msgstr "eliminare le sottochiavi selezionate" msgid "add a revocation key" msgstr "aggiungi una chiave di revoca" -#, fuzzy msgid "delete signatures from the selected user IDs" -msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? " +msgstr "eliminare le firme dagli ID utente selezionati" -#, fuzzy msgid "change the expiration date for the key or selected subkeys" -msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n" +msgstr "" +"modificare la data di scadenza della chiave o delle sottochiavi selezionate" -#, fuzzy msgid "flag the selected user ID as primary" -msgstr "imposta l'user ID come primario" +msgstr "contrassegnare l'ID utente selezionato come primario" msgid "list preferences (expert)" msgstr "elenca le preferenze (per esperti)" @@ -3522,17 +3356,16 @@ msgstr "elenca le preferenze (per esperti)" msgid "list preferences (verbose)" msgstr "elenca le preferenze (prolisso)" -#, fuzzy msgid "set preference list for the selected user IDs" -msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? " +msgstr "impostare l'elenco delle preferenze per gli ID utente selezionati" -#, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" -msgstr "impossibile fare il parsing dell'URI del keyserver\n" +msgstr "" +"impostare l'URL del server delle chiavi preferito per gli ID utente " +"selezionati" -#, fuzzy msgid "set a notation for the selected user IDs" -msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? " +msgstr "impostare una notazione per gli ID utente selezionati" msgid "change the passphrase" msgstr "cambia la passphrase" @@ -3540,43 +3373,39 @@ msgstr "cambia la passphrase" msgid "change the ownertrust" msgstr "cambia il valore di fiducia" -#, fuzzy msgid "revoke signatures on the selected user IDs" -msgstr "Revoco davvero tutti gli user ID selezionati? " +msgstr "revocare le firme sugli ID utente selezionati" -#, fuzzy msgid "revoke selected user IDs" -msgstr "revoca un user ID" +msgstr "revocare gli ID utente selezionati" -#, fuzzy msgid "revoke key or selected subkeys" -msgstr "revoca una chiave secondaria" +msgstr "revoca della chiave o delle sottochiavi selezionate" -#, fuzzy msgid "enable key" -msgstr "abilita una chiave" +msgstr "chiave di abilitazione" -#, fuzzy msgid "disable key" -msgstr "disabilita una chiave" +msgstr "tasto di disattivazione" -#, fuzzy msgid "show selected photo IDs" -msgstr "mostra l'ID fotografico" +msgstr "mostra GLI ID foto selezionati" msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" +"compattare id utente inutilizzabili e rimuovere le firme inutilizzabili " +"dalla chiave" msgid "compact unusable user IDs and remove all signatures from key" msgstr "" +"compattare gli ID utente inutilizzabili e rimuovere tutte le firme dalla " +"chiave" msgid "Secret key is available.\n" msgstr "È disponibile una chiave segreta.\n" -#, fuzzy -#| msgid "Secret key is available.\n" msgid "Secret subkeys are available.\n" -msgstr "È disponibile una chiave segreta.\n" +msgstr "Sono disponibili sottochiavi segrete.\n" msgid "Need the secret key to do this.\n" msgstr "Per fare questo serve la chiave segreta.\n" @@ -3587,24 +3416,27 @@ msgid "" " a 't' for trust signatures (tsign), an 'nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" +"Il comando 'sign' può essere preceduto da una 'l' per le firme locali " +"(lsign),\n" +" una 't' per le firme di trust (tsign), un 'nr' per le firme non " +"revocabili\n" +" (nrsign), o qualsiasi altra combinazione (ltsign, tnrsign, ecc.).\n" msgid "Key is revoked." msgstr "La chiave è stata revocata." -#, fuzzy msgid "Really sign all text user IDs? (y/N) " -msgstr "Firmo davvero tutti gli user ID? " +msgstr "Firmare davvero tutti gli ID utente di testo? (y/N) " -#, fuzzy msgid "Really sign all user IDs? (y/N) " -msgstr "Firmo davvero tutti gli user ID? " +msgstr "Firmare davvero tutti gli ID utente? (y/N) " msgid "Hint: Select the user IDs to sign\n" msgstr "Suggerimento: seleziona gli user ID da firmare\n" -#, fuzzy, c-format +#, c-format msgid "Unknown signature type '%s'\n" -msgstr "classe della firma sconosciuta" +msgstr "Tipo di firma sconosciuto '%s'\n" #, c-format msgid "This command is not allowed while in %s mode.\n" @@ -3615,147 +3447,137 @@ msgstr "Devi selezionare almeno un user ID.\n" #, c-format msgid "(Use the '%s' command.)\n" -msgstr "" +msgstr "(Utilizzare il comando '%s'.)\n" msgid "You can't delete the last user ID!\n" msgstr "Non puoi cancellare l'ultimo user ID!\n" -#, fuzzy msgid "Really remove all selected user IDs? (y/N) " -msgstr "Tolgo davvero tutti gli user ID selezionati? " +msgstr "Rimuovere davvero tutti gli ID utente selezionati? (y/N) " -#, fuzzy msgid "Really remove this user ID? (y/N) " -msgstr "Tolgo davvero questo user ID? " +msgstr "Rimuovere davvero questo ID utente? (y/N) " #. TRANSLATORS: Please take care: This is about #. moving the key and not about removing it. -#, fuzzy msgid "Really move the primary key? (y/N) " -msgstr "Tolgo davvero questo user ID? " +msgstr "Spostare davvero la chiave primaria? (y/N) " -#, fuzzy msgid "You must select exactly one key.\n" -msgstr "Devi selezionare almeno una chiave.\n" +msgstr "È necessario selezionare esattamente una chiave.\n" msgid "Command expects a filename argument\n" -msgstr "" +msgstr "Il comando prevede un argomento filename\n" -#, fuzzy, c-format +#, c-format msgid "Can't open '%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "Impossibile aprire '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "Error reading backup key from '%s': %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "Errore durante la lettura della chiave di backup da '%s': %s\n" msgid "You must select at least one key.\n" msgstr "Devi selezionare almeno una chiave.\n" -#, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " -msgstr "Vuoi davvero cancellare le chiavi selezionate? " +msgstr "Vuoi davvero eliminare le chiavi selezionate? (y/N) " -#, fuzzy msgid "Do you really want to delete this key? (y/N) " -msgstr "Vuoi davvero cancellare questa chiave? " +msgstr "Vuoi davvero eliminare questa chiave? (y/N) " -#, fuzzy msgid "Really revoke all selected user IDs? (y/N) " -msgstr "Revoco davvero tutti gli user ID selezionati? " +msgstr "Revocare davvero tutti gli ID utente selezionati? (y/N) " -#, fuzzy msgid "Really revoke this user ID? (y/N) " -msgstr "Revoco davvero questo user ID? " +msgstr "Revocare davvero questo ID utente? (y/N) " -#, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " -msgstr "Vuoi davvero revocare questa chiave? " +msgstr "Vuoi davvero revocare l'intera chiave? (y/N) " -#, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " -msgstr "Vuoi davvero revocare le chiavi selezionate? " +msgstr "Si desidera davvero revocare le sottochiavi selezionate? (y/N) " -#, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " -msgstr "Vuoi davvero revocare questa chiave? " +msgstr "Si desidera davvero revocare questa sottochiave? (y/N) " msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" +"L'attendibilità del proprietario potrebbe non essere impostata durante " +"l'utilizzo di un database di trust fornito dall'utente\n" -#, fuzzy msgid "Set preference list to:\n" -msgstr "imposta la lista di preferenze" +msgstr "Impostare l'elenco delle preferenze su:\n" -#, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " -msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? " +msgstr "Aggiornare davvero le preferenze per gli ID utente selezionati? (y/N) " -#, fuzzy msgid "Really update the preferences? (y/N) " -msgstr "Aggiorno davvero le preferenze? " +msgstr "Aggiornare davvero le preferenze? (y/N) " -#, fuzzy msgid "Save changes? (y/N) " -msgstr "Salvo i cambiamenti? " +msgstr "Salvare le modifiche? (y/N) " -#, fuzzy msgid "Quit without saving? (y/N) " -msgstr "Esco senza salvare? " +msgstr "Uscire senza salvare? (y/N) " #, c-format msgid "Key not changed so no update needed.\n" msgstr "La chiave non è cambiata quindi non sono necessari aggiornamenti.\n" -#, fuzzy, c-format -#| msgid "You can't delete the last user ID!\n" +#, c-format msgid "cannot revoke the last valid user ID.\n" -msgstr "Non puoi cancellare l'ultimo user ID!\n" +msgstr "non può revocare l'ultimo ID utente valido.\n" -#, fuzzy, c-format +#, c-format msgid "revoking the user ID failed: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "revoca dell'ID utente non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "setting the primary user ID failed: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "impostazione dell'ID utente primario non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "\"%s\" is not a fingerprint\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "\"%s\" non è un'impronta digitale\n" -#, fuzzy, c-format +#, c-format msgid "\"%s\" is not the primary fingerprint\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "\"%s\" non è l'impronta digitale primaria\n" -#, fuzzy, c-format -#| msgid "invalid value\n" +#, c-format msgid "Invalid user ID '%s': %s\n" -msgstr "valore non valido\n" +msgstr "ID utente '%s' non valido: %s\n" -#, fuzzy -#| msgid "No such user ID.\n" msgid "No matching user IDs." -msgstr "User ID inesistente.\n" +msgstr "Nessun ID utente corrispondente." -#, fuzzy msgid "Nothing to sign.\n" -msgstr "Niente da firmare con la chiave %08lX\n" +msgstr "Niente da firmare.\n" + +#, c-format +msgid "Not signed by you.\n" +msgstr "Non firmato da te.\n" #, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "controllo della firma creata fallito: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" -msgstr "%s non è un set di caratteri valido\n" +msgstr "'%s' non è un'ora di scadenza valida\n" -#, fuzzy, c-format +#, c-format msgid "\"%s\" is not a proper fingerprint\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "\"%s\" non è un'impronta digitale corretta\n" -#, fuzzy, c-format +#, c-format msgid "subkey \"%s\" not found\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "sottochiave \"%s\" non trovata\n" msgid "AEAD: " -msgstr "" +msgstr "AEAD: " msgid "Digest: " msgstr "Digest: " @@ -3764,60 +3586,58 @@ msgid "Features: " msgstr "Caratteristiche: " msgid "Keyserver no-modify" -msgstr "" +msgstr "Keyserver no-modify" msgid "Preferred keyserver: " -msgstr "" +msgstr "Server delle chiavi preferito: " -#, fuzzy msgid "Notations: " -msgstr "Nota: " +msgstr "Notazioni: " msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Non esistono preferense su un user ID in stile PGP 2.x\n" -#, fuzzy, c-format +#, c-format msgid "The following key was revoked on %s by %s key %s\n" -msgstr "Questa chiave può essere revocata dalla chiave %s " +msgstr "La seguente chiave è stata revocata su %s dalla chiave %s %s\n" -#, fuzzy, c-format +#, c-format msgid "This key may be revoked by %s key %s" -msgstr "Questa chiave può essere revocata dalla chiave %s " +msgstr "Questa chiave può essere revocata dalla chiave %s %s" -#, fuzzy msgid "(sensitive)" -msgstr " (sensibile)" +msgstr "(sensibile)" -#, fuzzy, c-format +#, c-format msgid "created: %s" -msgstr "impossibile creare %s: %s\n" +msgstr "creato: %s" -#, fuzzy, c-format +#, c-format msgid "revoked: %s" -msgstr "[revocata]" +msgstr "revocato: %s" -#, fuzzy, c-format +#, c-format msgid "expired: %s" -msgstr "[scadenza: %s]" +msgstr "scaduto: %s" -#, fuzzy, c-format +#, c-format msgid "expires: %s" -msgstr "[scadenza: %s]" +msgstr "scadenza: %s" -#, fuzzy, c-format +#, c-format msgid "usage: %s" -msgstr " fiducia: %c/%c" +msgstr "utilizzo: %s" msgid "card-no: " -msgstr "" +msgstr "scheda-no: " -#, fuzzy, c-format +#, c-format msgid "trust: %s" -msgstr " fiducia: %c/%c" +msgstr "attendibilità : %s" #, c-format msgid "validity: %s" -msgstr "" +msgstr "validità : %s" msgid "This key has been disabled" msgstr "Questa chiave è stata disabilitata" @@ -3830,13 +3650,11 @@ msgstr "" "corretta\n" "finchè non eseguirai di nuovo il programma.\n" -#, fuzzy msgid "revoked" -msgstr "[revocata]" +msgstr "revocato" -#, fuzzy msgid "expired" -msgstr "expire" +msgstr "scaduto" #, c-format msgid "" @@ -3849,12 +3667,11 @@ msgstr "" #, c-format msgid "WARNING: Your encryption subkey expires soon.\n" -msgstr "" +msgstr "AVVISO: la sottochiave di crittografia scade a breve.\n" -#, fuzzy, c-format -#| msgid "You can't change the expiration date of a v3 key\n" +#, c-format msgid "You may want to change its expiration date too.\n" -msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n" +msgstr "Si consiglia di modificare la data di scadenza troppo.\n" msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " @@ -3872,7 +3689,7 @@ msgstr "" "Non è possibile aggiungere un ID fotografico a una chiave in stile PGP2.\n" msgid "Such a user ID already exists on this key!\n" -msgstr "" +msgstr "Tale ID utente esiste già in questa chiave!\n" msgid "Delete this good signature? (y/N/q)" msgstr "Cancellare questa firma corretta? (s/N/q)" @@ -3886,37 +3703,35 @@ msgstr "Cancellare questa firma sconosciuta? (s/N/q)" msgid "Really delete this self-signature? (y/N)" msgstr "Cancellare davvero questa autofirma? (s/N)" -#, fuzzy, c-format -#| msgid "Deleted %d signature.\n" +#, c-format msgid "Deleted %d signature.\n" msgid_plural "Deleted %d signatures.\n" -msgstr[0] "Cancellata %d firma.\n" -msgstr[1] "Cancellata %d firma.\n" +msgstr[0] "Firma %d eliminata.\n" +msgstr[1] "Firme %d eliminate.\n" msgid "Nothing deleted.\n" msgstr "Non è stato cancellato nulla.\n" -#, fuzzy msgid "invalid" -msgstr "armatura non valida" +msgstr "non valido" -#, fuzzy, c-format +#, c-format msgid "User ID \"%s\" compacted: %s\n" -msgstr "L'user ID \"%s\" è stato revocato." +msgstr "ID utente \"%s\" compattato: %s\n" -#, fuzzy, c-format +#, c-format msgid "User ID \"%s\": %d signature removed\n" msgid_plural "User ID \"%s\": %d signatures removed\n" -msgstr[0] "L'user ID \"%s\" è stato revocato." -msgstr[1] "L'user ID \"%s\" è stato revocato." +msgstr[0] "ID utente \"%s\": firma %d rimossa\n" +msgstr[1] "ID utente \"%s\": firme %d rimosse\n" -#, fuzzy, c-format +#, c-format msgid "User ID \"%s\": already minimized\n" -msgstr "l'user ID \"%s\" è già stato revocato\n" +msgstr "ID utente \"%s\": già ridotto a icona\n" -#, fuzzy, c-format +#, c-format msgid "User ID \"%s\": already clean\n" -msgstr "l'user ID \"%s\" è già stato revocato\n" +msgstr "ID utente \"%s\": già pulito\n" msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " @@ -3945,32 +3760,28 @@ msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" "impossibile nominare una chiave come revocatore designato di sè stessa\n" -#, fuzzy, c-format +#, c-format msgid "this key has already been designated as a revoker\n" -msgstr "" -"ATTENZIONE: questa chiave è stata revocata dal suo revocatore designato!\n" +msgstr "questa chiave è già stata designata come revocatore\n" msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "ATTENZIONE: la nomina di una chiave a revocatrice designata non può essere\n" "annullata.\n" -#, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" -"Sei sicuro di volere nominare questa chiave revocatrice designata? (s/N):" +"Sei sicuro di voler nominare questa chiave come revocatore designato? (y/N) " -#, fuzzy msgid "" "Are you sure you want to change the expiration time for multiple subkeys? (y/" "N) " msgstr "" -"Sei sicuro di volere nominare questa chiave revocatrice designata? (s/N):" +"Si è sicuri di voler modificare l'ora di scadenza per più sottochiavi? (y/N) " -#, fuzzy msgid "Changing expiration time for a subkey.\n" -msgstr "Cambio la data di scadenza per una chiave secondaria.\n" +msgstr "Modifica dell'ora di scadenza per una sottochiave.\n" msgid "Changing expiration time for the primary key.\n" msgstr "Cambio la data di scadenza per la chiave primaria.\n" @@ -3979,74 +3790,65 @@ msgstr "Cambio la data di scadenza per la chiave primaria.\n" msgid "You can't change the expiration date of a v3 key\n" msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n" -#, fuzzy msgid "Changing usage of a subkey.\n" -msgstr "Cambio la data di scadenza per una chiave secondaria.\n" +msgstr "Modifica dell'utilizzo di una sottochiave.\n" -#, fuzzy -#| msgid "Changing expiration time for the primary key.\n" msgid "Changing usage of the primary key.\n" -msgstr "Cambio la data di scadenza per la chiave primaria.\n" +msgstr "Modifica dell'utilizzo della chiave primaria.\n" -#, fuzzy, c-format +#, c-format msgid "signing subkey %s is already cross-certified\n" -msgstr "" -"ATTENZIONE: la sottochiave per firme %08lX non ha una certificature " -"incrociata\n" +msgstr "la sottochiave di firma %s è già certificata incrociata\n" #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" -msgstr "" +msgstr "la sottochiave %s non firma e pertanto non deve essere certificata\n" msgid "Please select exactly one user ID.\n" msgstr "Devi selezionare esattamente un user ID.\n" -#, fuzzy, c-format +#, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" -msgstr "salto una autofirma v3 sull'user ID \"%s\"\n" +msgstr "ignorare l'autode firma v3 sull'ID utente \"%s\"\n" msgid "Enter your preferred keyserver URL: " -msgstr "" +msgstr "Immettere l'URL del server di chiavi preferito: " -#, fuzzy msgid "Are you sure you want to replace it? (y/N) " -msgstr "Sei sicuro di volerla usare? (s/N) " +msgstr "Sei sicuro di volerlo sostituire? (y/N) " -#, fuzzy msgid "Are you sure you want to delete it? (y/N) " -msgstr "Sei sicuro di volerla usare? (s/N) " +msgstr "Sei sicuro di volerlo eliminare? (y/N) " -#, fuzzy msgid "Enter the notation: " -msgstr "Annotazione della firma: " +msgstr "Immettere la notazione: " -#, fuzzy msgid "Proceed? (y/N) " -msgstr "Sovrascrivo (s/N)? " +msgstr "Procedere? (y/N) " #, c-format msgid "No user ID with index %d\n" msgstr "Nessun user ID con l'indice %d\n" -#, fuzzy, c-format +#, c-format msgid "No user ID with hash %s\n" -msgstr "Nessun user ID con l'indice %d\n" +msgstr "Nessun ID utente con hash %s\n" -#, fuzzy, c-format +#, c-format msgid "No subkey with key ID '%s'.\n" -msgstr "Nessun user ID con l'indice %d\n" +msgstr "Nessuna sottochiave con ID di chiave '%s'.\n" -#, fuzzy, c-format +#, c-format msgid "No subkey with index %d\n" -msgstr "Nessun user ID con l'indice %d\n" +msgstr "Nessuna sottochiave con indice %d\n" -#, fuzzy, c-format +#, c-format msgid "user ID: \"%s\"\n" -msgstr "user ID: \"" +msgstr "ID utente: \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "signed by your key %s on %s%s%s\n" -msgstr " firmata da %08lX il %s%s%s\n" +msgstr "firmato dalla chiave %s su %s%s%s\n" msgid " (non-exportable)" msgstr " (non esportabile)" @@ -4061,21 +3863,16 @@ msgstr "Sei ancora sicuro di volerlo aggiungere? (s/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Creare un certificato di revoca per questa firma? (s/N) " -#, fuzzy -msgid "Not signed by you.\n" -msgstr " firmata da %08lX il %s%s\n" - -#, fuzzy, c-format +#, c-format msgid "You have signed these user IDs on key %s:\n" -msgstr "Non puoi cancellare l'ultimo user ID!\n" +msgstr "Sono stati firmati questi ID utente sulla chiave %s:\n" -#, fuzzy msgid " (non-revocable)" -msgstr " (non esportabile)" +msgstr " (non revocabile)" -#, fuzzy, c-format +#, c-format msgid "revoked by your key %s on %s\n" -msgstr " revocata da %08lX il %s\n" +msgstr "revocato dalla chiave %s su %s\n" msgid "You are about to revoke these signatures:\n" msgstr "Stai per revocare queste firme:\n" @@ -4089,7 +3886,7 @@ msgstr "manca la chiave segreta\n" #, c-format msgid "tried to revoke a non-user ID: %s\n" -msgstr "" +msgstr "tentativo di revocare un ID non utente: %s\n" #, c-format msgid "user ID \"%s\" is already revoked\n" @@ -4100,47 +3897,47 @@ msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "ATTENZIONE: una firma dell'user ID ha la data di %d secondi nel futuro\n" -#, fuzzy, c-format -#| msgid "You can't delete the last user ID!\n" +#, c-format msgid "Cannot revoke the last valid user ID.\n" -msgstr "Non puoi cancellare l'ultimo user ID!\n" +msgstr "Impossibile revocare l'ultimo ID utente valido.\n" -#, fuzzy, c-format +#, c-format msgid "Key %s is already revoked.\n" -msgstr "l'user ID \"%s\" è già stato revocato\n" +msgstr "La chiave %s è già stata revocata.\n" -#, fuzzy, c-format +#, c-format msgid "Subkey %s is already revoked.\n" -msgstr "l'user ID \"%s\" è già stato revocato\n" +msgstr "La sottochiave %s è già stata revocata.\n" -#, fuzzy, c-format +#, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" -"Mostro %s ID fotografici di dimensioni %ld per la chaive 0x%08lX (uid %d)\n" +"Visualizzazione dell'ID foto %s della dimensione %ld per la chiave %s (uid " +"%d)\n" -#, fuzzy, c-format +#, c-format msgid "invalid value for option '%s'\n" -msgstr "opzioni di importazione non valide\n" +msgstr "valore non valido per l'opzione '%s'\n" -#, fuzzy, c-format +#, c-format msgid "preference '%s' duplicated\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "preferenza '%s' duplicata\n" -#, fuzzy, c-format +#, c-format msgid "too many cipher preferences\n" -msgstr "ci sono troppe preferenze `%c'\n" +msgstr "troppe preferenze di cifratura\n" -#, fuzzy, c-format +#, c-format msgid "too many digest preferences\n" -msgstr "ci sono troppe preferenze `%c'\n" +msgstr "troppe preferenze di digest\n" -#, fuzzy, c-format +#, c-format msgid "too many compression preferences\n" -msgstr "ci sono troppe preferenze `%c'\n" +msgstr "troppe preferenze di compressione\n" -#, fuzzy, c-format +#, c-format msgid "invalid item '%s' in preference string\n" -msgstr "carattere non valido nella stringa delle preferenze\n" +msgstr "elemento '%s' non valido nella stringa delle preferenze\n" #, c-format msgid "writing direct signature\n" @@ -4166,20 +3963,20 @@ msgstr "dimensioni della chiave arrotondate a %u bit\n" msgid "" "WARNING: some OpenPGP programs can't handle a DSA key with this digest size\n" msgstr "" +"AVVISO: alcuni programmi OpenPGP non sono in grado di gestire una chiave DSA " +"con questa dimensione del digest\n" -#, fuzzy msgid "Sign" -msgstr "sign" +msgstr "Firma" msgid "Certify" -msgstr "" +msgstr "Certifica" -#, fuzzy msgid "Encrypt" -msgstr "cifra dati" +msgstr "Crittografa" msgid "Authenticate" -msgstr "" +msgstr "Autentica" #. TRANSLATORS: Please use only plain ASCII characters for the #. * translation. If this is not possible use single digits. The @@ -4192,38 +3989,38 @@ msgstr "" #. * q = Finish #. msgid "SsEeAaQq" -msgstr "" +msgstr "SsEeAaQq" #, c-format msgid "Possible actions for a %s key: " -msgstr "" +msgstr "Azioni possibili per una chiave %s: " msgid "Current allowed actions: " -msgstr "" +msgstr "Azioni correnti consentite: " #, c-format msgid " (%c) Toggle the sign capability\n" -msgstr "" +msgstr " (%c) Attivare o disattivare la funzionalità di firma\n" -#, fuzzy, c-format +#, c-format msgid " (%c) Toggle the encrypt capability\n" -msgstr " (%d) ElGamal (cifra solo)\n" +msgstr " (%c) Attivare/disattivare la funzionalità di crittografia\n" #, c-format msgid " (%c) Toggle the authenticate capability\n" -msgstr "" +msgstr " (%c) Attivare/disattivare la funzionalità di autenticazione\n" #, c-format msgid " (%c) Finished\n" -msgstr "" +msgstr " (%c) Finito\n" -#, fuzzy, c-format +#, c-format msgid " (%d) RSA and RSA (default)\n" -msgstr " (%d) DSA e ElGamal (default)\n" +msgstr " (%d) RSA e RSA (impostazione predefinita)\n" -#, fuzzy, c-format +#, c-format msgid " (%d) DSA and Elgamal\n" -msgstr " (%d) DSA e ElGamal (default)\n" +msgstr " (%d) DSA ed Elgamal\n" #, c-format msgid " (%d) DSA (sign only)\n" @@ -4233,7 +4030,7 @@ msgstr " (%d) DSA (firma solo)\n" msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (firma solo)\n" -#, fuzzy, c-format +#, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (cifra solo)\n" @@ -4241,84 +4038,76 @@ msgstr " (%d) ElGamal (cifra solo)\n" msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (cifra solo)\n" -#, fuzzy, c-format +#, c-format msgid " (%d) DSA (set your own capabilities)\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) DSA (impostare le proprie capacità )\n" -#, fuzzy, c-format +#, c-format msgid " (%d) RSA (set your own capabilities)\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) RSA (imposta le tue funzionalità )\n" -#, fuzzy, c-format +#, c-format msgid " (%d) ECC and ECC\n" -msgstr " (%d) DSA e ElGamal (default)\n" +msgstr " (%d) ECC ed ECC\n" -#, fuzzy, c-format -#| msgid " (%d) DSA (sign only)\n" +#, c-format msgid " (%d) ECC (sign only)\n" msgstr " (%d) DSA (firma solo)\n" -#, fuzzy, c-format +#, c-format msgid " (%d) ECC (set your own capabilities)\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) ECC (imposta le tue capacità )\n" -#, fuzzy, c-format -#| msgid " (%d) RSA (encrypt only)\n" +#, c-format msgid " (%d) ECC (encrypt only)\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) ECC (solo crittografia)\n" -#, fuzzy, c-format +#, c-format msgid " (%d) Existing key\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) Chiave esistente\n" -#, fuzzy, c-format +#, c-format msgid " (%d) Existing key from card\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) Chiave esistente dalla scheda\n" -#, fuzzy msgid "Enter the keygrip: " -msgstr "Annotazione della firma: " +msgstr "Immettere il keygrip: " msgid "Not a valid keygrip (expecting 40 hex digits)\n" -msgstr "" +msgstr "Keygrip non valido (previsto 40 cifre esadecimali)\n" -#, fuzzy msgid "No key with this keygrip\n" -msgstr "Nessun user ID con l'indice %d\n" +msgstr "Nessuna chiave con questa chiave\n" -#, fuzzy, c-format +#, c-format msgid "error reading the card: %s\n" -msgstr "%s: errore durante la lettura del record libero: %s\n" +msgstr "errore durante la lettura della scheda: %s\n" -#, fuzzy, c-format +#, c-format msgid "Serial number of the card: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "Numero di serie della scheda: %s\n" -#, fuzzy msgid "Available keys:\n" -msgstr "disabilita una chiave" +msgstr "Chiavi disponibili:\n" -#, fuzzy, c-format -#| msgid "rounded up to %u bits\n" +#, c-format msgid "rounded to %u bits\n" -msgstr "arrotondate a %u bit\n" +msgstr "arrotondato a %u bit\n" #, c-format msgid "%s keys may be between %u and %u bits long.\n" -msgstr "" +msgstr "Le chiavi %s possono essere lunghe tra %u e %u bit.\n" -#, fuzzy, c-format +#, c-format msgid "What keysize do you want for the subkey? (%u) " -msgstr "Di che dimensioni vuoi la chiave? (1024) " +msgstr "Quale dimensione della chiave si desidera per la sottochiave? (%u) " #, c-format msgid "Requested keysize is %u bits\n" msgstr "La dimensione richiesta della chiave è %u bit\n" -#, fuzzy -#| msgid "Please select what kind of key you want:\n" msgid "Please select which elliptic curve you want:\n" -msgstr "Per favore scegli che tipo di chiave vuoi:\n" +msgstr "Selezionare la curva ellittica desiderata:\n" msgid "" "Please specify how long the key should be valid.\n" @@ -4353,28 +4142,26 @@ msgstr "" msgid "Key is valid for? (0) " msgstr "Chiave valida per? (0) " -#, fuzzy, c-format +#, c-format msgid "Signature is valid for? (%s) " -msgstr "Firma valida per? (0) " +msgstr "La firma è valida per? (%s) " msgid "invalid value\n" msgstr "valore non valido\n" -#, fuzzy msgid "Key does not expire at all\n" -msgstr "%s non ha scadenza\n" +msgstr "La chiave non scade affatto\n" -#, fuzzy msgid "Signature does not expire at all\n" -msgstr "%s non ha scadenza\n" +msgstr "La firma non scade affatto\n" -#, fuzzy, c-format +#, c-format msgid "Key expires at %s\n" -msgstr "%s scadrà il %s\n" +msgstr "La chiave scade alle %s\n" -#, fuzzy, c-format +#, c-format msgid "Signature expires at %s\n" -msgstr "Questa firma scadrà il %s\n" +msgstr "La firma scade alle %s\n" msgid "" "Your system can't display dates beyond 2038.\n" @@ -4383,21 +4170,22 @@ msgstr "" "Il tuo sistema non può mostrare date oltre il 2038.\n" "Comunque, sarà gestita correttamente fino al 2106.\n" -#, fuzzy msgid "Is this correct? (y/N) " -msgstr "È giusto (s/n)? " +msgstr "È corretto? (y/N) " msgid "" "\n" "GnuPG needs to construct a user ID to identify your key.\n" "\n" msgstr "" +"\n" +"GnuPG deve costruire un ID utente per identificare la chiave.\n" +"\n" #. TRANSLATORS: This string is in general not anymore used #. but you should keep your existing translation. In case #. the new string is not translated this old string will #. be used. -#, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " @@ -4407,9 +4195,9 @@ msgid "" "\n" msgstr "" "\n" -"Ti serve un User ID per identificare la tua chiave; il software costruisce " -"l'user id a partire da Nome e Cognome, Commento e Indirizzo di Email " -"indicati in questa forma:\n" +"È necessario un ID utente per identificare la chiave; il software costruisce " +"l'ID utente\n" +"dal campo Nome reale, commento e indirizzo e-mail in questo modulo:\n" " \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n" "\n" @@ -4421,7 +4209,7 @@ msgstr "Carattere non valido nel nome\n" #, c-format msgid "The characters '%s' and '%s' may not appear in name\n" -msgstr "" +msgstr "I caratteri '%s' e '%s' non possono essere visualizzati nel nome\n" msgid "Name may not start with a digit\n" msgstr "Il nome non può iniziare con una cifra\n" @@ -4441,10 +4229,9 @@ msgstr "Commento: " msgid "Invalid character in comment\n" msgstr "Carattere non valido nel commento\n" -#, fuzzy, c-format -#| msgid "You are using the `%s' character set.\n" +#, c-format msgid "You are using the '%s' character set.\n" -msgstr "Stai usando il set di caratteri `%s'.\n" +msgstr "Si sta utilizzando il set di caratteri '%s'.\n" #, c-format msgid "" @@ -4479,13 +4266,9 @@ msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (Q)uit? " msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? " -#, fuzzy -#| msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgid "Change (N)ame, (E)mail, or (Q)uit? " msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (Q)uit? " -#, fuzzy -#| msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgid "Change (N)ame, (E)mail, or (O)kay/(Q)uit? " msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? " @@ -4513,63 +4296,64 @@ msgid "" " \"%s\"\n" "\n" msgstr "" +"In cerca di creare una chiave per:\n" +" \"%s\"\n" +"\n" msgid "Continue? (Y/n) " -msgstr "" +msgstr "Continuare? (Y/n) " -#, fuzzy, c-format +#, c-format msgid "A key for \"%s\" already exists\n" -msgstr "`%s' è già compresso\n" +msgstr "Esiste già una chiave per \"%s\"\n" -#, fuzzy msgid "Create anyway? (y/N) " -msgstr "Uso lo stesso questa chiave? " +msgstr "Creare comunque? (y/N) " -#, fuzzy, c-format +#, c-format msgid "creating anyway\n" -msgstr "genera una nuova coppia di chiavi" +msgstr "creazione comunque\n" #, c-format msgid "Note: Use \"%s %s\" for a full featured key generation dialog.\n" msgstr "" +"Nota: utilizzare \"%s %s\" per una finestra di dialogo di generazione di " +"chiavi in primo piano.\n" #, c-format msgid "Key generation canceled.\n" msgstr "Generazione della chiave annullata.\n" -#, fuzzy, c-format +#, c-format msgid "can't create backup file '%s': %s\n" -msgstr "impossibile creare `%s': %s\n" +msgstr "impossibile creare il file di backup '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "Note: backup of card key saved to '%s'\n" -msgstr "NOTA: chiave %08lX scaduta il %s\n" +msgstr "Nota: backup della chiave della scheda salvata in '%s'\n" -#, fuzzy, c-format -#| msgid "writing public key to `%s'\n" +#, c-format msgid "writing public key to '%s'\n" -msgstr "scrittura della chiave pubblica in `%s'\n" +msgstr "scrittura di chiave pubblica in '%s'\n" #, c-format msgid "no writable public keyring found: %s\n" msgstr "non è stato trovato un portachiavi pubblico scrivibile: %s\n" -#, fuzzy, c-format -#| msgid "error writing public keyring `%s': %s\n" +#, c-format msgid "error writing public keyring '%s': %s\n" -msgstr "errore scrivendo il portachiavi pubblico `%s': %s\n" +msgstr "errore durante la scrittura della chiave pubblica '%s': %s\n" msgid "public and secret key created and signed.\n" msgstr "chiavi pubbliche e segrete create e firmate.\n" -#, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" -"Nota che questa chiave non può essere usata per cifrare. Forse vorrai usare\n" -"il comando \"--edit-key\" per generare una chiave secondaria per questo " -"scopo.\n" +"Si noti che questa chiave non può essere utilizzata per la crittografia. Si " +"consiglia di utilizzare\n" +"il comando \"--edit-key\" per generare una sottochiave a questo scopo.\n" #, c-format msgid "" @@ -4585,22 +4369,21 @@ msgstr "" "la chiave è stata creata %lu secondi nel futuro (salto nel tempo o problema\n" "con l'orologio)\n" -#, fuzzy, c-format -#| msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +#, c-format msgid "Note: creating subkeys for v3 keys is not OpenPGP compliant\n" -msgstr "NB: la creazione di subchiavi per chiavi v3 non rispetta OpenPGP.\n" +msgstr "" +"Nota: la creazione di sottochiavi per le chiavi v3 non è conforme a OpenPGP\n" #, c-format msgid "Secret parts of primary key are not available.\n" msgstr "Parti della chiave segreta non sono disponibili.\n" -#, fuzzy, c-format +#, c-format msgid "Secret parts of primary key are stored on-card.\n" -msgstr "Parti della chiave segreta non sono disponibili.\n" +msgstr "Le parti segrete della chiave primaria vengono archiviate su scheda.\n" -#, fuzzy msgid "Really create? (y/N) " -msgstr "Crea davvero? " +msgstr "Davvero creare? (y/N) " msgid "never " msgstr "mai " @@ -4612,7 +4395,7 @@ msgid "Signature policy: " msgstr "Politica di firma: " msgid "Critical preferred keyserver: " -msgstr "" +msgstr "Server chiave preferito critico: " msgid "Critical signature notation: " msgstr "Annotazione critica della firma: " @@ -4620,25 +4403,25 @@ msgstr "Annotazione critica della firma: " msgid "Signature notation: " msgstr "Annotazione della firma: " -#, fuzzy, c-format -#| msgid "%d bad signatures\n" +#, c-format msgid "%d good signature\n" msgid_plural "%d good signatures\n" -msgstr[0] "%d firme non corrette\n" -msgstr[1] "%d firme non corrette\n" +msgstr[0] "%d buona firma\n" +msgstr[1] "%d buone firme\n" -#, fuzzy, c-format -#| msgid "1 signature not checked due to an error\n" +#, c-format msgid "%d signature not checked due to an error\n" msgid_plural "%d signatures not checked due to errors\n" -msgstr[0] "una firma non controllata a causa di un errore\n" -msgstr[1] "una firma non controllata a causa di un errore\n" +msgstr[0] "Firma %d non controllata a causa di un errore\n" +msgstr[1] "" +"Firme %d non controllate a causa di errori\n" +"\n" #, c-format msgid "Warning: %lu key skipped due to its large size\n" msgid_plural "Warning: %lu keys skipped due to their large sizes\n" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Avviso: chiave %lu ignorata a causa delle dimensioni grandi\n" +msgstr[1] "Avviso: chiavi %lu ignorate a causa delle dimensioni grandi\n" msgid "Keyring" msgstr "Portachiavi" @@ -4657,125 +4440,122 @@ msgstr " Impronta digitale della chiave primaria:" msgid " Subkey fingerprint:" msgstr " Impronta digitale della subchiave:" -#, fuzzy msgid " Key fingerprint =" -msgstr " Impronta digitale =" +msgstr " Impronta digitale della chiave =" msgid " Card serial no. =" -msgstr "" +msgstr " Numero seriale della scheda =" -#, fuzzy, c-format +#, c-format msgid "caching keyring '%s'\n" -msgstr "controllo il portachiavi `%s'\n" +msgstr "chiave di memorizzazione nella cache '%s'\n" -#, fuzzy, c-format +#, c-format msgid "%lu keys cached so far (%lu signature)\n" msgid_plural "%lu keys cached so far (%lu signatures)\n" -msgstr[0] "Sono state controllate %lu chiavi (%lu firme)\n" +msgstr[0] "E' stata controllata %lu chiave (%lu firma)\n" msgstr[1] "Sono state controllate %lu chiavi (%lu firme)\n" #, c-format msgid "%lu key cached" msgid_plural "%lu keys cached" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Chiave %lu memorizzata nella cache" +msgstr[1] "Chiavi %lu memorizzata nella cache" -#, fuzzy, c-format -#| msgid "1 bad signature\n" +#, c-format msgid " (%lu signature)\n" msgid_plural " (%lu signatures)\n" -msgstr[0] "una firma non corretta\n" -msgstr[1] "una firma non corretta\n" +msgstr[0] " (firma %lu)\n" +msgstr[1] " (firme %lu)\n" #, c-format msgid "%s: keyring created\n" msgstr "%s: portachiavi creato\n" msgid "override proxy options set for dirmngr" -msgstr "" +msgstr "ignorare le opzioni proxy impostate per dirmngr" msgid "include revoked keys in search results" -msgstr "" +msgstr "includere chiavi revocate nei risultati della ricerca" msgid "include subkeys when searching by key ID" -msgstr "" +msgstr "includere le sottochiavi durante la ricerca in base all'ID chiave" msgid "override timeout options set for dirmngr" -msgstr "" +msgstr "opzioni di timeout di override impostate per dirmngr" msgid "automatically retrieve keys when verifying signatures" -msgstr "" +msgstr "recuperare automaticamente le chiavi durante la verifica delle firme" -#, fuzzy msgid "honor the preferred keyserver URL set on the key" -msgstr "l'URL della politica di firma indicato non è valido\n" +msgstr "rispettare l'URL del keyserver preferito impostato sulla chiave" msgid "honor the PKA record set on a key when retrieving keys" msgstr "" +"rispettare il record PKA impostato su una chiave durante il recupero delle " +"chiavi" -#, fuzzy msgid "disabled" -msgstr "disable" +msgstr "disabilitato" msgid "Enter number(s), N)ext, or Q)uit > " -msgstr "" +msgstr "Immettere numeri, N)ext o Q)uit > " -#, fuzzy, c-format +#, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" -msgstr "opzioni di esportazione non valide\n" +msgstr "protocollo keyserver non valido (noi %d!=intestazione %d!)\n" #, c-format msgid "\"%s\" not a key ID: skipping\n" -msgstr "" +msgstr "\"%s\" non è un ID chiave:\n" -#, fuzzy, c-format +#, c-format msgid "refreshing %d key from %s\n" msgid_plural "refreshing %d keys from %s\n" -msgstr[0] "richiedo la chiave %08lX a %s\n" -msgstr[1] "richiedo la chiave %08lX a %s\n" +msgstr[0] "aggiornamento della chiave %d da %s\n" +msgstr[1] "" +"aggiornamento della chiavi %d da %s\n" +"\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" -msgstr "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n" +msgstr "AVVISO: impossibile aggiornare la chiave %s tramite %s: %s\n" -#, fuzzy, c-format +#, c-format msgid "key \"%s\" not found on keyserver\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "chiave \"%s\" non trovata nel keyserver\n" -#, fuzzy, c-format +#, c-format msgid "key not found on keyserver\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "chiave non trovata nel keyserver\n" -#, fuzzy, c-format +#, c-format msgid "requesting key %s from %s server %s\n" -msgstr "richiedo la chiave %08lX a %s\n" +msgstr "richiesta della chiave %s dal server %s %s\n" -#, fuzzy, c-format +#, c-format msgid "requesting key %s from %s\n" -msgstr "richiedo la chiave %08lX a %s\n" +msgstr "richiesta della chiave %s da %s\n" -#, fuzzy, c-format +#, c-format msgid "no keyserver known\n" -msgstr "opzioni di esportazione non valide\n" +msgstr "nessun keyserver noto\n" -#, fuzzy, c-format +#, c-format msgid "skipped \"%s\": %s\n" -msgstr "saltata `%s': %s\n" +msgstr "\"%s\" ignorato: %s\n" -#, fuzzy, c-format +#, c-format msgid "sending key %s to %s\n" -msgstr "" -"\"\n" -"firmata con la tua chiave %08lX il %s\n" -"\n" +msgstr "invio della chiave %s a %s\n" -#, fuzzy, c-format +#, c-format msgid "requesting key from '%s'\n" -msgstr "richiedo la chiave %08lX a %s\n" +msgstr "richiesta di chiave da '%s'\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: unable to fetch URI %s: %s\n" -msgstr "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n" +msgstr "AVVISO: impossibile recuperare l'URI %s: %s\n" #, c-format msgid "weird size for an encrypted session key (%d)\n" @@ -4785,29 +4565,31 @@ msgstr "la chiave di sessione cifrata ha dimensioni strane (%d)\n" msgid "%s encrypted session key\n" msgstr "chiave di sessione cifrata con %s\n" -#, fuzzy, c-format +#, c-format msgid "passphrase generated with unknown digest algorithm %d\n" -msgstr "cifrato con l'algoritmo sconosciuto %d\n" +msgstr "passphrase generata con algoritmo digest sconosciuto %d\n" -#, fuzzy, c-format +#, c-format msgid "public key is %s\n" -msgstr "la chiave pubblica è %08lX\n" +msgstr "la chiave pubblica è %s\n" #, c-format msgid "public key encrypted data: good DEK\n" msgstr "dati cifrati con la chiave pubblica: DEK corretto\n" -#, fuzzy, c-format +#, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" -msgstr "cifrato con la chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s\n" +msgstr "crittografata con la chiave %u bit %s, ID %s, creata %s\n" -#, fuzzy, c-format +#, c-format msgid " \"%s\"\n" -msgstr " alias \"" +msgstr " \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "encrypted with %s key, ID %s\n" -msgstr "Cifrato con la chiave %s con ID %08lX\n" +msgstr "" +"crittografata con chiave %s, ID %s\n" +"\n" #, c-format msgid "public key decryption failed: %s\n" @@ -4815,7 +4597,7 @@ msgstr "decifratura della chiave pubblica fallita: %s\n" #, c-format msgid "WARNING: multiple plaintexts seen\n" -msgstr "" +msgstr "AVVISO: più testo in chiaro visti\n" #, c-format msgid "encrypted with %lu passphrases\n" @@ -4842,15 +4624,17 @@ msgid "" "likely that this message is legitimate. This is because back\n" "then integrity protection was not widely used.\n" msgstr "" +"Suggerimento: Se questo messaggio è stato creato prima dell'anno 2003,\n" +"probabile che questo messaggio sia legittimo. Questo perché indietro\n" +"quindi la protezione dell'integrità non è stata ampiamente utilizzata.\n" #, c-format msgid "Use the option '%s' to decrypt anyway.\n" -msgstr "" +msgstr "Utilizzare comunque l'opzione '%s' per decrittografare.\n" -#, fuzzy, c-format -#| msgid "decryption failed: %s\n" +#, c-format msgid "decryption forced to fail!\n" -msgstr "decifratura fallita: %s\n" +msgstr "decrittazione costretto a fallire!\n" #, c-format msgid "decryption okay\n" @@ -4864,10 +4648,9 @@ msgstr "ATTENZIONE: il messaggio cifrato è stato manipolato!\n" msgid "decryption failed: %s\n" msgstr "decifratura fallita: %s\n" -#, fuzzy, c-format -#| msgid "NOTE: sender requested \"for-your-eyes-only\"\n" +#, c-format msgid "Note: sender requested \"for-your-eyes-only\"\n" -msgstr "NOTA: il mittente ha richiesto \"solo-per-i-tuoi-occhi\"\n" +msgstr "Nota: mittente richiesto \"solo per i tuoi occhi\"\n" #, c-format msgid "original file name='%.*s'\n" @@ -4877,45 +4660,45 @@ msgstr "nome del file originale='%.*s'\n" msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revoca solitaria - usa \"gpg --import\" per applicarla\n" -#, fuzzy, c-format +#, c-format msgid "no signature found\n" -msgstr "Firma valida da \"" +msgstr "nessuna firma trovata\n" -#, fuzzy, c-format +#, c-format msgid "BAD signature from \"%s\"" -msgstr "Firma NON corretta da \"" +msgstr "Firma BAD da \"%s\"" -#, fuzzy, c-format +#, c-format msgid "Expired signature from \"%s\"" -msgstr "Firma scaduta da \"" +msgstr "Firma scaduta da \"%s\"" -#, fuzzy, c-format +#, c-format msgid "Good signature from \"%s\"" -msgstr "Firma valida da \"" +msgstr "Firma valida da \"%s\"" #, c-format msgid "signature verification suppressed\n" msgstr "verifica della firma soppressa\n" -#, fuzzy, c-format +#, c-format msgid "can't handle this ambiguous signature data\n" -msgstr "impossibile gestire queste firme multiple\n" +msgstr "impossibile gestire questi dati di firma ambigui\n" -#, fuzzy, c-format +#, c-format msgid "Signature made %s\n" -msgstr "Firma scaduta il %s\n" +msgstr "Firma effettuata %s\n" -#, fuzzy, c-format +#, c-format msgid " using %s key %s\n" -msgstr " alias \"" +msgstr " utilizzando la chiave %s %s\n" -#, fuzzy, c-format +#, c-format msgid "Signature made %s using %s key ID %s\n" -msgstr "Firma fatta %.*s usando %s con ID %08lX\n" +msgstr "Firma effettuata %s utilizzando l'ID chiave %s %s\n" -#, fuzzy, c-format +#, c-format msgid " issuer \"%s\"\n" -msgstr " alias \"" +msgstr " autorità emittente \"%s\"\n" #, c-format msgid "Key available at: " @@ -4923,19 +4706,18 @@ msgstr "Chiave disponibile presso: " #, c-format msgid "Note: Use '%s' to make use of this info\n" -msgstr "" +msgstr "Nota: utilizzare '%s' per utilizzare queste informazioni\n" msgid "[uncertain]" msgstr "[incerta]" -#, fuzzy, c-format +#, c-format msgid " aka \"%s\"" -msgstr " alias \"" +msgstr " aka \"%s\"" -#, fuzzy, c-format -#| msgid "WARNING: This key is not certified with a trusted signature!\n" +#, c-format msgid "WARNING: This key is not suitable for signing in %s mode\n" -msgstr "ATTENZIONE: questa chiave non è certificata con una firma fidata!\n" +msgstr "AVVISO: questa chiave non è adatta per l'accesso in modalità %s\n" #, c-format msgid "Signature expired %s\n" @@ -4945,10 +4727,9 @@ msgstr "Firma scaduta il %s\n" msgid "Signature expires %s\n" msgstr "Questa firma scadrà il %s\n" -#, fuzzy, c-format -#| msgid "%s signature, digest algorithm %s\n" +#, c-format msgid "%s signature, digest algorithm %s%s%s\n" -msgstr "Firma %s, algoritmo di digest %s\n" +msgstr "Firma %s, algoritmo digest %s%s%s\n" msgid "binary" msgstr "binario" @@ -4959,14 +4740,13 @@ msgstr "modo testo" msgid "unknown" msgstr "sconosciuto" -#, fuzzy -#| msgid "unknown pubkey algorithm" msgid ", key algorithm " -msgstr "algoritmo della chiave pubblica sconosciuto" +msgstr ", algoritmo a chiave " #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" +"AVVISO: non è una firma disconnessa; il file '%s' NON è stato verificato!\n" #, c-format msgid "Can't check signature: %s\n" @@ -4989,57 +4769,55 @@ msgstr "firma solitaria di classe 0x%02x\n" msgid "old style (PGP 2.x) signature\n" msgstr "firma vecchio stile (PGP 2.x)\n" -#, fuzzy, c-format +#, c-format msgid "fstat of '%s' failed in %s: %s\n" -msgstr "impossibile aprire il file: %s\n" +msgstr "fstat di '%s' non riuscito in %s: %s\n" -#, fuzzy, c-format +#, c-format msgid "fstat(%d) failed in %s: %s\n" -msgstr "trustdb: read fallita (n=%d): %s\n" +msgstr "fstat(%d) non riuscito in %s: %s\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: using experimental public key algorithm %s\n" -msgstr "impossibile gestire l'algoritmo a chiave pubblica %d\n" +msgstr "AVVISO: utilizzo dell'algoritmo a chiave pubblica sperimentale %s\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" -msgstr "" -"forzare l'algoritmo di digest %s (%d) viola le preferenze del destinatario\n" +msgstr "AVVISO: le chiavi Elgamal sign-encrypt sono deprecate\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: using experimental cipher algorithm %s\n" -msgstr "algoritmo di cifratura non implementato" +msgstr "AVVISO: utilizzo dell'algoritmo di crittografia sperimentale %s\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: using experimental digest algorithm %s\n" -msgstr "Firma %s, algoritmo di digest %s\n" +msgstr "AVVISO: utilizzo dell'algoritmo digest sperimentale %s\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: digest algorithm %s is deprecated\n" -msgstr "" -"forzare l'algoritmo di digest %s (%d) viola le preferenze del destinatario\n" +msgstr "AVVISO: l'algoritmo digest %s è deprecato\n" -#, fuzzy, c-format -#| msgid "%s signature, digest algorithm %s\n" +#, c-format msgid "Note: signatures using the %s algorithm are rejected\n" -msgstr "Firma %s, algoritmo di digest %s\n" +msgstr "Nota: le firme che utilizzano l'algoritmo %s vengono rifiutate\n" -#, fuzzy, c-format -#| msgid "%s signature, digest algorithm %s\n" +#, c-format msgid "Note: third-party key signatures using the %s algorithm are rejected\n" -msgstr "Firma %s, algoritmo di digest %s\n" +msgstr "" +"Nota: le firme di chiave di terze parti che utilizzano l'algoritmo %s " +"vengono rifiutate\n" -#, fuzzy, c-format +#, c-format msgid "(reported error: %s)\n" -msgstr "errore di lettura: %s\n" +msgstr "(errore segnalato: %s)\n" -#, fuzzy, c-format +#, c-format msgid "(reported error: %s <%s>)\n" -msgstr "errore di lettura: %s\n" +msgstr "(errore segnalato: %s <%s>)\n" #, c-format msgid "(further info: " -msgstr "" +msgstr "(ulteriori informazioni: " #, c-format msgid "%s:%d: deprecated option \"%s\"\n" @@ -5053,55 +4831,55 @@ msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n" msgid "please use \"%s%s\" instead\n" msgstr "usa al suo posto \"%s%s\"\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" -msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n" +msgstr "AVVISO: \"%s\" è un comando deprecato - non utilizzarlo\n" -#, fuzzy, c-format +#, c-format msgid "%s:%u: \"%s\" is obsolete in this file - it only has effect in %s\n" -msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n" +msgstr "%s:%u: \"%s\" è obsoleto in questo file - ha effetto solo in %s\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: \"%s%s\" is an obsolete option - it has no effect except on %s\n" -msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n" +msgstr "" +"AVVISO: \"%s%s\" è un'opzione obsoleta- non ha alcun effetto ad eccezione di " +"%s\n" msgid "Uncompressed" msgstr "Non compresso" #. TRANSLATORS: See doc/TRANSLATE about this string. -#, fuzzy msgid "uncompressed|none" -msgstr "Non compresso" +msgstr "non compresso|nessuno" #, c-format msgid "this message may not be usable by %s\n" msgstr "questo messaggio può non essere utilizzabile da %s\n" -#, fuzzy, c-format +#, c-format msgid "ambiguous option '%s'\n" -msgstr "lettura delle opzioni da `%s'\n" +msgstr "opzione ambigua '%s'\n" -#, fuzzy, c-format +#, c-format msgid "unknown option '%s'\n" -msgstr "destinatario predefinito `%s' sconosciuto\n" +msgstr "opzione sconosciuta '%s'\n" #, c-format msgid "ECDSA public key is expected to be in SEC encoding multiple of 8 bits\n" msgstr "" +"La chiave pubblica ECDSA dovrebbe essere in codifica SEC multipla di 8 bit\n" -#, fuzzy, c-format +#, c-format msgid "unknown weak digest '%s'\n" -msgstr "classe della firma sconosciuta" +msgstr "digest debole sconosciuto '%s'\n" -#, fuzzy, c-format -#| msgid "File `%s' exists. " +#, c-format msgid "File '%s' exists. " -msgstr "Il file `%s' esiste. " +msgstr "Il file '%s' esiste. " -#, fuzzy msgid "Overwrite? (y/N) " -msgstr "Sovrascrivo (s/N)? " +msgstr "Sovrascrivere? (y/N) " #, c-format msgid "%s: unknown suffix\n" @@ -5114,10 +4892,9 @@ msgstr "Inserire il nuovo nome del file" msgid "writing to stdout\n" msgstr "scrivo su stdout\n" -#, fuzzy, c-format -#| msgid "assuming signed data in `%s'\n" +#, c-format msgid "assuming signed data in '%s'\n" -msgstr "suppongo che i dati firmati siano in `%s'\n" +msgstr "presupponendo i dati firmati in '%s'\n" #, c-format msgid "can't handle public key algorithm %d\n" @@ -5129,18 +4906,17 @@ msgstr "" "ATTENZIONE: la chiave di sessione cifrata simmetricamente è potenzialmente\n" "non sicura\n" -#, fuzzy, c-format -#| msgid "Critical signature notation: " +#, c-format msgid "Unknown critical signature notation: " -msgstr "Annotazione critica della firma: " +msgstr "Notazione della firma critica sconosciuta: " #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "il sottopacchetto di tipo %d ha un bit critico impostato\n" -#, fuzzy, c-format +#, c-format msgid "problem with the agent: %s\n" -msgstr "problema con l'agent: ha restituito 0x%lx\n" +msgstr "problema con l'agente: %s\n" msgid "Enter passphrase\n" msgstr "Inserisci la passphrase\n" @@ -5149,42 +4925,43 @@ msgstr "Inserisci la passphrase\n" msgid "cancelled by user\n" msgstr "interrotto dall'utente\n" -#, fuzzy, c-format +#, c-format msgid " (main key ID %s)" -msgstr " (key ID principale %08lX)" +msgstr " (ID chiave principale %s)" -#, fuzzy msgid "Please enter the passphrase to unlock the OpenPGP secret key:" -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "Immettere la passphrase per sbloccare la chiave segreta OpenPGP:" -#, fuzzy msgid "Please enter the passphrase to import the OpenPGP secret key:" -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "Immettere la passphrase per importare la chiave segreta OpenPGP:" -#, fuzzy msgid "Please enter the passphrase to export the OpenPGP secret subkey:" -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "Immettere la passphrase per esportare la sottochiave segreta OpenPGP:" -#, fuzzy msgid "Please enter the passphrase to export the OpenPGP secret key:" -msgstr "Inserisci la passphrase, cioè una frase segreta \n" +msgstr "Immettere la passphrase per esportare la chiave segreta OpenPGP:" -#, fuzzy msgid "Do you really want to permanently delete the OpenPGP secret subkey key:" -msgstr "Vuoi davvero cancellare le chiavi selezionate? " +msgstr "" +"Si desidera eliminare definitivamente la chiave della sottochiave segreta " +"OpenPGP:" -#, fuzzy msgid "Do you really want to permanently delete the OpenPGP secret key:" -msgstr "Vuoi davvero cancellare le chiavi selezionate? " +msgstr "Si desidera eliminare definitivamente la chiave segreta OpenPGP:" -#, fuzzy, c-format +#, c-format msgid "" "%s\n" "\"%.*s\"\n" "%u-bit %s key, ID %s,\n" "created %s%s.\n" "%s" -msgstr "chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s" +msgstr "" +"%s\n" +"\"%.*s\"\n" +"%u-bit chiave %s, ID %s,\n" +"creato %s%s.\n" +"%s" msgid "" "\n" @@ -5205,21 +4982,20 @@ msgstr "" msgid "Enter JPEG filename for photo ID: " msgstr "Inserisci il nome del file JPEG per l'ID fotografico: " -#, fuzzy, c-format +#, c-format msgid "unable to open JPEG file '%s': %s\n" -msgstr "impossibile aprire il file: %s\n" +msgstr "impossibile aprire il file JPEG '%s': %s\n" #, c-format msgid "This JPEG is really large (%d bytes) !\n" -msgstr "" +msgstr "Questo JPEG è davvero grande (%d byte) !\n" -#, fuzzy msgid "Are you sure you want to use it? (y/N) " -msgstr "Sei sicuro di volerla usare? (s/N) " +msgstr "Sei sicuro di volerlo usare? (y/N) " -#, fuzzy, c-format +#, c-format msgid "'%s' is not a JPEG file\n" -msgstr "\"%s\": non è un file JPEG\n" +msgstr "'%s' non è un file JPEG\n" msgid "Is this photo correct (y/N/q)? " msgstr "Questa foto è giusta? (s/N/q) " @@ -5241,74 +5017,71 @@ msgstr "impossibile mostrare l'ID fotografico\n" msgid "iImMqQsS" msgstr "iImMqQsS" -#, fuzzy msgid "No trust value assigned to:\n" -msgstr "" -"Nessun valore di fiducia assegnato a:\n" -"%4u%c/%08lX %s \"" +msgstr "Nessun valore di attendibilità assegnato a:\n" -#, fuzzy, c-format +#, c-format msgid " aka \"%s\"\n" -msgstr " alias \"" +msgstr " aka \"%s\"\n" -#, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" -msgstr "Questa chiave probabilmente appartiene al proprietario\n" +msgstr "" +"Quanto si considera attendibile che questa chiave appartenga effettivamente " +"all'utente denominato?\n" -#, fuzzy, c-format +#, c-format msgid " %d = I don't know or won't say\n" -msgstr " %d = Non lo so\n" +msgstr " %d = Non so o non dirò\n" -#, fuzzy, c-format +#, c-format msgid " %d = I do NOT trust\n" -msgstr " %d = NON mi fido\n" +msgstr " %d = Non mi fido\n" -#, fuzzy, c-format +#, c-format msgid " %d = I trust ultimately\n" -msgstr " %d = Mi fido definitivamente\n" +msgstr " %d = Mi fido in ultima analisi\n" -#, fuzzy msgid " m = back to the main menu\n" -msgstr " m = torna al menù principale\n" +msgstr " m = torna al menu principale\n" -#, fuzzy msgid " s = skip this key\n" -msgstr " s = salta questa chiave\n" +msgstr " s = salta questa chiave\n" -#, fuzzy msgid " q = quit\n" -msgstr " q = abbandona\n" +msgstr " q = uscire\n" #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" +"Il livello di attendibilità minimo per questa chiave è: %s\n" +"\n" msgid "Your decision? " msgstr "Cosa hai deciso? " -#, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " -msgstr "Vuoi davvero assegnare fiducia definitiva a questa chiave? " +msgstr "Vuoi davvero impostare questa chiave per la massima fiducia? (y/N) " msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificati che portano a chiavi definitivamente affidabili:\n" -#, fuzzy, c-format +#, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" -"%08lX: Non ci sono indicazioni che la chiave appartenga al proprietario\n" +"%s: non esiste alcuna garanzia che questa chiave appartenga all'utente " +"denominato\n" -#, fuzzy, c-format +#, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" -"%08lX: Non ci sono indicazioni che la chiave appartenga al proprietario\n" +"%s: garanzia limitata che questa chiave appartenga all'utente denominato\n" -#, fuzzy, c-format +#, c-format msgid "This key probably belongs to the named user\n" -msgstr "Questa chiave probabilmente appartiene al proprietario\n" +msgstr "Questa chiave probabilmente appartiene all'utente denominato\n" #, c-format msgid "This key belongs to us\n" @@ -5317,32 +5090,30 @@ msgstr "Questa chiave ci appartiene\n" #, c-format msgid "%s: This key is bad! It has been marked as untrusted!\n" msgstr "" +"%s: questa chiave non è valido! È stato contrassegnato come non " +"attendibile!\n" -#, fuzzy msgid "" "This key is bad! It has been marked as untrusted! If you\n" "*really* know what you are doing, you may answer the next\n" "question with yes.\n" msgstr "" -"NON è sicuro che la chiave appartenga alla persona indicata.\n" -"nell'user ID. Se sai *davvero* cosa stai facendo, puoi\n" -"rispondere sì alla prossima domanda.\n" -"\n" +"Questa chiave è cattiva! È stato contrassegnato come non attendibile! Se " +"si\n" +"\"davvero, sai quello che stai facendo, potresti rispondere al prossimo\n" +"domanda con sì.\n" -#, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" -"NON è sicuro che la chiave appartenga alla persona indicata.\n" -"nell'user ID. Se sai *davvero* cosa stai facendo, puoi\n" -"rispondere sì alla prossima domanda.\n" -"\n" +"NON è certo che la chiave appartenga alla persona denominata\n" +"nell'ID utente. Se sai davvero quello che stai facendo,\n" +"si può rispondere alla prossima domanda con sì.\n" -#, fuzzy msgid "Use this key anyway? (y/N) " -msgstr "Uso lo stesso questa chiave? " +msgstr "Utilizzare comunque questa chiave? (y/N) " #, c-format msgid "WARNING: Using untrusted key!\n" @@ -5363,9 +5134,9 @@ msgstr "" msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATTENZIONE: questa chiave è stata revocata dal suo proprietario!\n" -#, fuzzy, c-format +#, c-format msgid " This could mean that the signature is forged.\n" -msgstr " Questo può significare che la firma è stata falsificata.\n" +msgstr " Questo potrebbe significare che la firma è contraffatta.\n" #, c-format msgid "WARNING: This subkey has been revoked by its owner!\n" @@ -5377,19 +5148,19 @@ msgstr "Nota: questa chiave è stata disabilitata.\n" #, c-format msgid "Note: Verified signer's address is '%s'\n" -msgstr "" +msgstr "Nota: l'indirizzo del firmatario verificato è '%s'\n" #, c-format msgid "Note: Signer's address '%s' does not match DNS entry\n" -msgstr "" +msgstr "Nota: l'indirizzo del firmatario '%s' non corrisponde alla voce DNS\n" #, c-format msgid "trustlevel adjusted to FULL due to valid PKA info\n" -msgstr "" +msgstr "trustlevel adattato a FULL a causa di informazioni PKA valide\n" #, c-format msgid "trustlevel adjusted to NEVER due to bad PKA info\n" -msgstr "" +msgstr "trustlevel modificato MAI a causa di informazioni PKA non valido\n" #, c-format msgid "Note: This key has expired!\n" @@ -5435,24 +5206,26 @@ msgstr "%s: saltata: chiave pubblica disabilitata\n" msgid "%s: skipped: public key already present\n" msgstr "%s: saltata: chiave pubblica già presente\n" -#, fuzzy, c-format -#| msgid "can't connect to `%s': %s\n" +#, c-format msgid "can't encrypt to '%s'\n" -msgstr "impossibile connettersi a `%s': %s\n" +msgstr "impossibile crittografare in '%s'\n" -#, fuzzy, c-format +#, c-format msgid "option '%s' given, but no valid default keys given\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "" +"l'opzione '%s' specificata, ma non sono state fornite chiavi predefinite " +"valide\n" -#, fuzzy, c-format +#, c-format msgid "option '%s' given, but option '%s' not given\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "" +"l'opzione '%s' specificata, ma l'opzione '%s' non è stata specificata\n" msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Non hai specificato un user ID. (puoi usare \"-r\")\n" msgid "Current recipients:\n" -msgstr "" +msgstr "Destinatari correnti:\n" msgid "" "\n" @@ -5475,21 +5248,21 @@ msgstr "La chiave pubblica è disabilitata.\n" msgid "skipped: public key already set\n" msgstr "saltata: chiave pubblica già impostata\n" -#, fuzzy, c-format +#, c-format msgid "unknown default recipient \"%s\"\n" -msgstr "destinatario predefinito `%s' sconosciuto\n" +msgstr "destinatario predefinito sconosciuto \"%s\"\n" #, c-format msgid "no valid addressees\n" msgstr "nessun indirizzo valido\n" -#, fuzzy, c-format +#, c-format msgid "Note: key %s has no %s feature\n" -msgstr "chiave %08lX: nessun user ID\n" +msgstr "Nota: la chiave %s non ha funzionalità %s\n" -#, fuzzy, c-format +#, c-format msgid "Note: key %s has no preference for %s\n" -msgstr "chiave %08lX: nessun user ID\n" +msgstr "Nota: la chiave %s non ha preferenze per %s\n" #, c-format msgid "data not saved; use option \"--output\" to save it\n" @@ -5510,22 +5283,21 @@ msgstr "viene letto stdin...\n" msgid "no signed data\n" msgstr "non ci sono dati firmati\n" -#, fuzzy, c-format -#| msgid "can't open signed data `%s'\n" +#, c-format msgid "can't open signed data '%s'\n" -msgstr "impossibile aprire i dati firmati `%s'\n" +msgstr "impossibile aprire i dati firmati '%s'\n" -#, fuzzy, c-format +#, c-format msgid "can't open signed data fd=%d: %s\n" -msgstr "impossibile aprire i dati firmati `%s'\n" +msgstr "impossibile aprire i dati firmati fd=%d: %s\n" -#, fuzzy, c-format +#, c-format msgid "key %s is not suitable for decryption in %s mode\n" -msgstr "chiave %08lX: nessun user ID\n" +msgstr "la chiave %s non è adatta per la decrittografia in modalità %s\n" -#, fuzzy, c-format +#, c-format msgid "anonymous recipient; trying secret key %s ...\n" -msgstr "destinatario anonimo; provo la chiave segreta %08lX ...\n" +msgstr "destinatario anonimo; tentativo di chiave segreta %s...\n" #, c-format msgid "okay, we are the anonymous recipient.\n" @@ -5539,27 +5311,27 @@ msgstr "la vecchia codifica del DEK non è gestita\n" msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "l'algoritmo di cifratura %d%s è sconosciuto o disattivato\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" -"NOTA: l'algoritmo di cifratura %d non è stato trovato tra le preferenze\n" +"AVVISO: algoritmo di crittografia %s non trovato nelle preferenze del " +"destinatario\n" -#, fuzzy, c-format +#, c-format msgid "Note: secret key %s expired at %s\n" -msgstr "NOTA: chiave %08lX scaduta il %s\n" +msgstr "Nota: chiave segreta %s scaduta alle %s\n" -#, fuzzy, c-format -#| msgid "NOTE: key has been revoked" +#, c-format msgid "Note: key has been revoked" -msgstr "NOTA: la chiave è stata revocata" +msgstr "Nota: la chiave è stata revocata" #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet fallito: %s\n" -#, fuzzy, c-format +#, c-format msgid "key %s has no user IDs\n" -msgstr "chiave %08lX: nessun user ID\n" +msgstr "la chiave %s non ha ID utente\n" msgid "To be revoked by:\n" msgstr "Revocabile da:\n" @@ -5567,14 +5339,11 @@ msgstr "Revocabile da:\n" msgid "(This is a sensitive revocation key)\n" msgstr "(Questa è una chiave di revoca sensibile)\n" -#, fuzzy -#| msgid "Secret key is available.\n" msgid "Secret key is not available.\n" -msgstr "È disponibile una chiave segreta.\n" +msgstr "La chiave segreta non è disponibile.\n" -#, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " -msgstr "Creare un certificato di revoca per questa chiave? " +msgstr "Creare un certificato di revoca designato per questa chiave? (y/N) " msgid "ASCII armored output forced.\n" msgstr "Forzato l'output con armatura ASCII.\n" @@ -5586,19 +5355,22 @@ msgstr "make_keysig_packet fallito: %s\n" msgid "Revocation certificate created.\n" msgstr "Certificato di revoca creato.\n" -#, fuzzy, c-format +#, c-format msgid "no revocation keys found for \"%s\"\n" -msgstr "non sono state trovate chiavi di revoca per `%s'\n" +msgstr "nessuna chiave di revoca trovata per \"%s\"\n" -#, fuzzy msgid "This is a revocation certificate for the OpenPGP key:" -msgstr "Creare un certificato di revoca per questa chiave? " +msgstr "Questo è un certificato di revoca per la chiave OpenPGP:" msgid "" "A revocation certificate is a kind of \"kill switch\" to publicly\n" "declare that a key shall not anymore be used. It is not possible\n" "to retract such a revocation certificate once it has been published." msgstr "" +"Un certificato di revoca è una sorta di \"interruttore di emergenza\" per\n" +"dichiarare pubblicamente che una certa chiave non deve essere più usata.\n" +"Non è possibile ritirare un certificato di revoca una volta che è stato\n" +"pubblicato." msgid "" "Use it to revoke this key in case of a compromise or loss of\n" @@ -5607,37 +5379,43 @@ msgid "" "a reason for the revocation. For details see the description of\n" "of the gpg command \"--generate-revocation\" in the GnuPG manual." msgstr "" +"Utilizzare per revocare questa chiave in caso di compromissione o perdita " +"di\n" +"la chiave segreta. Tuttavia, se la chiave segreta è ancora accessibile,\n" +"è meglio generare un nuovo certificato di revoca e dare\n" +"un motivo per la revoca. Per i dettagli, vedere la descrizione di\n" +"del comando gpg \"--generate-revocation\" nel manuale GnuPG." msgid "" "To avoid an accidental use of this file, a colon has been inserted\n" "before the 5 dashes below. Remove this colon with a text editor\n" "before importing and publishing this revocation certificate." msgstr "" +"Per evitare un uso accidentale di questo file, sono stati aggiunti due\n" +"punti prima dei 5 trattini in basso. Rimuovere tali due punti con un\n" +"editor di testo prima di importare e pubblicare il certificato di revoca." -#, fuzzy, c-format -#| msgid "Revocation certificate created.\n" +#, c-format msgid "revocation certificate stored as '%s.rev'\n" -msgstr "Certificato di revoca creato.\n" +msgstr "certificato di revoca archiviato come '%s.rev'\n" -#, fuzzy, c-format +#, c-format msgid "secret key \"%s\" not found\n" -msgstr "chiave segreta `%s' non trovata: %s\n" +msgstr "chiave segreta \"%s\" non trovata\n" #. TRANSLATORS: The %s prints a key specification which #. for example has been given at the command line. Several lines #. lines with secret key infos are printed after this message. #, c-format msgid "'%s' matches multiple secret keys:\n" -msgstr "" +msgstr "'%s' corrisponde a più chiavi segrete:\n" -#, fuzzy, c-format -#| msgid "error creating keyring `%s': %s\n" +#, c-format msgid "error searching the keyring: %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "errore durante la ricerca del portachiave: %s\n" -#, fuzzy msgid "Create a revocation certificate for this key? (y/N) " -msgstr "Creare un certificato di revoca per questa chiave? " +msgstr "Creare un certificato di revoca per questa chiave? (y/N) " msgid "" "Revocation certificate created.\n" @@ -5678,9 +5456,8 @@ msgstr "Motivo della revoca: %s\n" msgid "(No description given)\n" msgstr "(Non è stata data una descrizione)\n" -#, fuzzy msgid "Is this okay? (y/N) " -msgstr "Va bene così? " +msgstr "Va bene così? (y/N) " #, c-format msgid "weak key created - retrying\n" @@ -5689,112 +5466,107 @@ msgstr "creata una chiave debole - riprovo\n" #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" -"Impossibile evitare una chiave debole per il cifrario simmetrico;\n" -"ho provato %d volte!\n" +"impossibile evitare una chiave debole per il cifrario simmetrico; ho provato " +"%d volte!\n" #, c-format msgid "%s key %s uses an unsafe (%zu bit) hash\n" -msgstr "" +msgstr "La chiave %s %s utilizza un hash non sicuro (%zu bit)\n" #, c-format msgid "%s key %s requires a %zu bit or larger hash (hash is %s)\n" msgstr "" +"La chiave %s %s richiede un bit %zu o un hash superiore (l'hash è %s)\n" #, c-format msgid "WARNING: signature digest conflict in message\n" msgstr "ATTENZIONE: conflitto del digest delle firme nel messaggio\n" -#, fuzzy, c-format -#| msgid "you may not use %s while in %s mode\n" +#, c-format msgid "key %s may not be used for signing in %s mode\n" -msgstr "non è possibile usare %s in modalità %s\n" +msgstr "impossibile utilizzare la chiave %s per l'accesso in modalità %s\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" -msgstr "" -"ATTENZIONE: la sottochiave per firme %08lX non ha una certificature " -"incrociata\n" +msgstr "AVVISO: la sottochiave di firma %s non è certificata incrociata\n" -#, fuzzy, c-format +#, c-format msgid "please see %s for more information\n" -msgstr " i = mostrami ulteriori informazioni\n" +msgstr "per ulteriori informazioni, vedere %s\n" -#, fuzzy, c-format +#, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" -"ATTENZIONE: la sottochiave per firme %08lX ha una certificature incrociata\n" -"non valida\n" +"AVVISO: la firma della sottochiave %s ha una certificazione incrociata non " +"valida\n" -#, fuzzy, c-format +#, c-format msgid "public key %s is %lu second newer than the signature\n" msgid_plural "public key %s is %lu seconds newer than the signature\n" -msgstr[0] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n" -msgstr[1] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n" +msgstr[0] "la chiave pubblica %s è %lu seconda più recente della firma\n" +msgstr[1] "le chiavi pubbliche %s sono %lu seconda più recente della firma\n" -#, fuzzy, c-format +#, c-format msgid "public key %s is %lu day newer than the signature\n" msgid_plural "public key %s is %lu days newer than the signature\n" -msgstr[0] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n" -msgstr[1] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n" +msgstr[0] "la chiave pubblica %s è %lu più recente della firma\n" +msgstr[1] "le chiavi pubbliche %s sono %lu più recente della firma\n" -#, fuzzy, c-format +#, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgid_plural "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr[0] "" -"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n" -"con l'orologio)\n" +"la chiave %s è stata creata %lu secondo in futuro (problema di curvatura " +"dell'ora o orologio)\n" msgstr[1] "" -"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n" -"con l'orologio)\n" +"le chiavi %s sono stata create %lu secondo in futuro (problema di curvatura " +"dell'ora o orologio)\n" -#, fuzzy, c-format +#, c-format msgid "key %s was created %lu day in the future (time warp or clock problem)\n" msgid_plural "" "key %s was created %lu days in the future (time warp or clock problem)\n" msgstr[0] "" -"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n" -"con l'orologio)\n" +"la chiave %s è stata creata %lu giorno in futuro (problema di curvatura " +"dell'ora o orologio)\n" msgstr[1] "" -"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n" -"con l'orologio)\n" +"le chiavi %s sono state create %lu giorni in futuro (problema di curvatura " +"dell'ora o orologio)\n" -#, fuzzy, c-format +#, c-format msgid "Note: signature key %s expired %s\n" -msgstr "NOTA: chiave per firmare %08lX scaduta il %s\n" +msgstr "Nota: chiave di firma %s scaduta %s\n" -#, fuzzy, c-format +#, c-format msgid "Note: signature key %s has been revoked\n" -msgstr "NOTA: la chiave è stata revocata" +msgstr "Nota: la chiave di firma %s è stata revocata\n" -#, fuzzy, c-format -#| msgid "standalone signature of class 0x%02x\n" +#, c-format msgid "bad key signature from key %s: %s (0x%02x, 0x%x)\n" -msgstr "firma solitaria di classe 0x%02x\n" +msgstr "firma chiave non valida dalla chiave %s: %s (0x%02x, 0x%x)\n" -#, fuzzy, c-format -#| msgid "standalone signature of class 0x%02x\n" +#, c-format msgid "bad data signature from key %s: %s (0x%02x, 0x%x)\n" -msgstr "firma solitaria di classe 0x%02x\n" +msgstr "firma dati non valida dalla chiave %s: %s (0x%02x, 0x%x)\n" -#, fuzzy, c-format +#, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" -"si suppone una firma non valida della chiave %08lX a causa di un\n" -"bit critico sconosciuto\n" +"presupponendo una firma non valida dalla chiave %s a causa di un bit critico " +"sconosciuto\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" -"chiave %08lX: non c'è una subchiave per il pacchetto di revoca della " -"subchiave\n" +"chiave %s: nessuna sottochiave per la firma di revoca della sottochiave\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" -"chiave %08lX: non c'è una subchiave per la firma di collegamento della " -"subchiave\n" +"chiave %s: nessuna sottochiave per la firma di associazione della " +"sottochiave\n" #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" @@ -5802,32 +5574,30 @@ msgstr "" "ATTENZIONE: impossibile espandere i %% nell'URL (troppo lunga). Usata " "inespansa.\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" -"ATTENZIONE: Impossibile espandere i %% nell'URL della policy (troppo " -"lunga).\n" -"Usata inespansa.\n" +"AVVISO: impossibile espandere l'URL del criterio %%(troppo grande). " +"Utilizzo nonexpanded.\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" -"ATTENZIONE: Impossibile espandere i %% nell'URL della policy (troppo " -"lunga).\n" -"Usata inespansa.\n" +"AVVISO: impossibile espandere %%l'URL del keyserver preferito (troppo " +"grande). Utilizzo nonexpanded.\n" -#, fuzzy, c-format +#, c-format msgid "%s/%s signature from: \"%s\"\n" -msgstr "Firma %s da: \"%s\"\n" +msgstr "Firma %s/%s da: \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" -"forzare l'algoritmo di digest %s (%d) viola le preferenze del destinatario\n" +"AVVISO: l'algoritmo digest %s (%d) viola le preferenze dei destinatari\n" #, c-format msgid "signing:" @@ -5843,19 +5613,18 @@ msgstr "" "la chiave non è indicata come insicura - impossibile usarla con il RNG " "finto!\n" -#, fuzzy, c-format +#, c-format msgid "skipped \"%s\": duplicated\n" -msgstr "saltata `%s': doppia\n" +msgstr "\"%s\" ignorato: duplicato\n" #, c-format msgid "skipped: secret key already present\n" msgstr "saltata: chiave pubblica già presente\n" -#, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" -"saltata %s: questa è una chiave ElGamal generata da PGP che NON è sicura per " -"le firme!\n" +"si tratta di una chiave Elgamal generata da PGP che non è sicura per le " +"firme!" #, c-format msgid "trust record %lu, type %d: write failed: %s\n" @@ -5869,44 +5638,41 @@ msgstr "" "# Lista dei valori della fiducia assegnati, creata il %s\n" "# (Usa \"gpg --import-ownertrust\" per ripristinarli)\n" -#, fuzzy, c-format +#, c-format msgid "error in '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore in '%s': %s\n" -#, fuzzy msgid "line too long" -msgstr "riga troppo lunga\n" +msgstr "linea troppo lunga" msgid "colon missing" -msgstr "" +msgstr "due punti mancanti" -#, fuzzy msgid "invalid fingerprint" -msgstr "errore: impronta digitale non valida\n" +msgstr "impronta digitale non valida" -#, fuzzy msgid "ownertrust value missing" -msgstr "importa i valori di fiducia" +msgstr "cambia il valore di fiducia" -#, fuzzy, c-format +#, c-format msgid "error finding trust record in '%s': %s\n" -msgstr "errore cercando il record della fiducia: %s\n" +msgstr "errore durante la ricerca del record di attendibilità in '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "read error in '%s': %s\n" -msgstr "errore di lettura: %s\n" +msgstr "errore di lettura in '%s': %s\n" #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sync fallita: %s\n" -#, fuzzy, c-format +#, c-format msgid "can't create lock for '%s'\n" -msgstr "impossibile creare `%s': %s\n" +msgstr "impossibile creare il blocco per '%s'\n" -#, fuzzy, c-format +#, c-format msgid "can't lock '%s'\n" -msgstr "impossibile aprire `%s'\n" +msgstr "impossibile bloccare '%s'\n" #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" @@ -5924,9 +5690,9 @@ msgstr "transazione del trustdb troppo grande\n" msgid "%s: directory does not exist!\n" msgstr "%s: la directory non esiste!\n" -#, fuzzy, c-format +#, c-format msgid "can't access '%s': %s\n" -msgstr "impossibile chiudere `%s': %s\n" +msgstr "impossibile accedere a '%s': %s\n" #, c-format msgid "%s: failed to create version record: %s" @@ -5940,10 +5706,9 @@ msgstr "%s: è stato creato un trustdb non valido\n" msgid "%s: trustdb created\n" msgstr "%s: creato il trustdb\n" -#, fuzzy, c-format -#| msgid "NOTE: trustdb not writable\n" +#, c-format msgid "Note: trustdb not writable\n" -msgstr "NOTA: il trustdb non è scrivibile\n" +msgstr "Nota: trustdb non scrivibile\n" #, c-format msgid "%s: invalid trustdb\n" @@ -6001,9 +5766,9 @@ msgstr "%s: azzeramento di un record fallito: %s\n" msgid "%s: failed to append a record: %s\n" msgstr "%s: accodatura a un record fallita: %s\n" -#, fuzzy, c-format +#, c-format msgid "Error: The trustdb is corrupted.\n" -msgstr "%s: creato il trustdb\n" +msgstr "Errore: trustdb danneggiato.\n" #, c-format msgid "can't handle text lines longer than %d characters\n" @@ -6013,276 +5778,277 @@ msgstr "impossibile gestire linee di testo più lunghe di %d caratteri\n" msgid "input line longer than %d characters\n" msgstr "linea di input più lunga di %d caratteri\n" -#, fuzzy, c-format +#, c-format msgid "error beginning transaction on TOFU database: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'avvio della transazione nel database TOFU: %s\n" #, c-format msgid "error committing transaction on TOFU database: %s\n" -msgstr "" +msgstr "errore durante il commit della transazione nel database TOFU: %s\n" #, c-format msgid "error rolling back transaction on TOFU database: %s\n" -msgstr "" +msgstr "errore durante il rollback della transazione nel database TOFU: %s\n" -#, fuzzy, c-format +#, c-format msgid "unsupported TOFU database version: %s\n" -msgstr "" -"\n" -"Algoritmi gestiti:\n" +msgstr "versione del database TOFU non supportata: %s\n" #, c-format msgid "TOFU DB error" -msgstr "" +msgstr "Errore DB TOFU" -#, fuzzy, c-format +#, c-format msgid "error reading TOFU database: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura del database TOFU: %s\n" -#, fuzzy, c-format -#| msgid "error writing secret keyring `%s': %s\n" +#, c-format msgid "error determining TOFU database's version: %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "" +"errore durante la determinazione della versione del database TOFU: %s\n" -#, fuzzy, c-format -#| msgid "%s: error writing dir record: %s\n" +#, c-format msgid "error initializing TOFU database: %s\n" -msgstr "%s: errore durante la scrittura del dir record: %s\n" +msgstr "errore durante l'inizializzazione del database TOFU: %s\n" -#, fuzzy, c-format +#, c-format msgid "error opening TOFU database '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'apertura del database TOFU '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error updating TOFU database: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'aggiornamento del database TOFU: %s\n" #, c-format msgid "" "This is the first time the email address \"%s\" is being used with key %s." msgstr "" +"Questa è la prima volta che l'indirizzo di posta elettronica \"%s\" viene " +"utilizzato con la chiave %s." #, c-format msgid "The email address \"%s\" is associated with %d key!" msgid_plural "The email address \"%s\" is associated with %d keys!" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "L'indirizzo di posta elettronica \"%s\" è associato alla chiave %d!" +msgstr[1] "L'indirizzo di posta elettronica \"%s\" è associato alla chiavi %d!" msgid " Since this binding's policy was 'auto', it has been changed to 'ask'." msgstr "" +" poiché la politica di questo legame era \"automatica\", è stata modificata " +"in \"chiedere\"." #, c-format msgid "" "Please indicate whether this email address should be associated with key %s " "or whether you think someone is impersonating \"%s\"." msgstr "" +"Indicare se questo indirizzo di posta elettronica deve essere associato alla " +"chiave %s o se si ritiene che qualcuno sia \"%s\"." -#, fuzzy, c-format +#, c-format msgid "error gathering other user IDs: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la raccolta di altri ID utente: %s\n" -#, fuzzy -#| msgid "list key and user IDs" msgid "This key's user IDs:\n" -msgstr "elenca le chiavi e gli user ID" +msgstr "ID utente di questa chiave:\n" -#, fuzzy, c-format -#| msgid "Policy: " +#, c-format msgid "policy: %s" -msgstr "Policy: " +msgstr "criterio: %s" -#, fuzzy, c-format +#, c-format msgid "error gathering signature stats: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la raccolta delle statistiche di firma: %s\n" #, c-format msgid "The email address \"%s\" is associated with %d key:\n" msgid_plural "The email address \"%s\" is associated with %d keys:\n" msgstr[0] "" +"L'indirizzo di posta elettronica \"%s\" è associato alla chiave %d!\n" msgstr[1] "" +"L'indirizzo di posta elettronica \"%s\" è associato alle chiavi %d!\n" #, c-format msgid "Statistics for keys with the email address \"%s\":\n" -msgstr "" +msgstr "Statistiche per le chiavi con indirizzo di posta elettronica \"%s\":\n" -#, fuzzy -#| msgid "list keys" msgid "this key" -msgstr "elenca le chiavi" +msgstr "questa chiave" -#, fuzzy, c-format +#, c-format msgid "Verified %d message." msgid_plural "Verified %d messages." -msgstr[0] "|algo [files]|stampa tutti i message digests" -msgstr[1] "|algo [files]|stampa tutti i message digests" +msgstr[0] "Messaggio %d verificato." +msgstr[1] "Messaggi %d verificati." -#, fuzzy, c-format -#| msgid "encrypted with %lu passphrases\n" +#, c-format msgid "Encrypted %d message." msgid_plural "Encrypted %d messages." -msgstr[0] "cifratto con %lu passphrase\n" -msgstr[1] "cifratto con %lu passphrase\n" +msgstr[0] "Messaggio %d crittografato." +msgstr[1] "Messaggi %d crittografati." -#, fuzzy, c-format +#, c-format msgid "Verified %d message in the future." msgid_plural "Verified %d messages in the future." -msgstr[0] "|algo [files]|stampa tutti i message digests" -msgstr[1] "|algo [files]|stampa tutti i message digests" +msgstr[0] "Messaggio %d verificato in futuro." +msgstr[1] "Messaggi %d verificati in futuro." -#, fuzzy, c-format +#, c-format msgid "Encrypted %d message in the future." msgid_plural "Encrypted %d messages in the future." -msgstr[0] "|algo [files]|stampa tutti i message digests" -msgstr[1] "|algo [files]|stampa tutti i message digests" +msgstr[0] "Messaggio %d crittografato in futuro." +msgstr[1] "Messaggi %d crittografati in futuro." #, c-format msgid "Messages verified over the past %d day: %d." msgid_plural "Messages verified over the past %d days: %d." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Messaggi verificati nell'ultimo %d giorno: %d." +msgstr[1] "Messaggi verificati negli ultimi %d giorni: %d." #, c-format msgid "Messages encrypted over the past %d day: %d." msgid_plural "Messages encrypted over the past %d days: %d." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Messaggi crittografati nell'ultimo %d giorno: %d." +msgstr[1] "Messaggi crittografati negli ultimi %d giorni: %d." #, c-format msgid "Messages verified over the past %d month: %d." msgid_plural "Messages verified over the past %d months: %d." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Messaggi verificati nell'ultimo %d mese: %d." +msgstr[1] "Messaggi verificati nell'ultimo %d mesi: %d." #, c-format msgid "Messages encrypted over the past %d month: %d." msgid_plural "Messages encrypted over the past %d months: %d." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Messaggi crittografati nell'ultimo %d mese: %d." +msgstr[1] "Messaggi crittografati negli ultimi %d mesi: %d." #, c-format msgid "Messages verified over the past %d year: %d." msgid_plural "Messages verified over the past %d years: %d." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Messaggi verificati nell'ultimo %d anno: %d." +msgstr[1] "Messaggi verificati negli ultimi %d anni: %d." #, c-format msgid "Messages encrypted over the past %d year: %d." msgid_plural "Messages encrypted over the past %d years: %d." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Messaggi crittografati nell'ulltimo %d anno: %d." +msgstr[1] "Messaggi crittografati negli ultimi %d anni: %d." #, c-format msgid "Messages verified in the past: %d." -msgstr "" +msgstr "Messaggi verificati in passato: %d." -#, fuzzy, c-format +#, c-format msgid "Messages encrypted in the past: %d." -msgstr "|algo [files]|stampa tutti i message digests" +msgstr "Messaggi crittografati in passato: %d." #. TRANSLATORS: Please translate the text found in the source #. * file below. We don't directly internationalize that text so #. * that we can tweak it without breaking translations. msgid "TOFU detected a binding conflict" -msgstr "" +msgstr "TOFU ha rilevato un conflitto di binding" #. TRANSLATORS: Two letters (normally the lower and upper case #. * version of the hotkey) for each of the five choices. If #. * there is only one choice in your language, repeat it. msgid "gGaAuUrRbB" -msgstr "" +msgstr "gGaAuUrRbB" msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? " -msgstr "" +msgstr "(G)ood, (A)ccept una volta, (U)nknown, (R)espellere una volta, (B)ad? " msgid "Defaulting to unknown.\n" -msgstr "" +msgstr "Impostazione predefinita sconosciuta.\n" #, c-format msgid "TOFU db corruption detected.\n" -msgstr "" +msgstr "Rilevato danneggiamento del database TOFU.\n" -#, fuzzy, c-format +#, c-format msgid "error changing TOFU policy: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la modifica del criterio TOFU: %s\n" #, c-format msgid "%lld~year" msgid_plural "%lld~years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%lld~anno" +msgstr[1] "%lld~anni" #, c-format msgid "%lld~month" msgid_plural "%lld~months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%lld~mese" +msgstr[1] "%lld‪‪~mesi" #, c-format msgid "%lld~week" msgid_plural "%lld~weeks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%lld~settimana" +msgstr[1] "%lld‪‪~settimane" #, c-format msgid "%lld~day" msgid_plural "%lld~days" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%lld~giorno" +msgstr[1] "%lld~giorni" #, c-format msgid "%lld~hour" msgid_plural "%lld~hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%lld~ora" +msgstr[1] "%lld~ore" #, c-format msgid "%lld~minute" msgid_plural "%lld~minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%lld~minuto" +msgstr[1] "%lld~minuti" #, c-format msgid "%lld~second" msgid_plural "%lld~seconds" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%lld~secondo" +msgstr[1] "%lld~secondi" #, c-format msgid "%s: Verified 0~signatures and encrypted 0~messages." -msgstr "" +msgstr "%s: verificata 0: firme e 0 messaggi crittografati." -#, fuzzy, c-format -#| msgid "Deleted %d signatures.\n" +#, c-format msgid "%s: Verified 0 signatures." -msgstr "Cancellate %d firme.\n" +msgstr "%s: firme 0 verificate." -#, fuzzy -#| msgid "encrypted with %lu passphrases\n" msgid "Encrypted 0 messages." -msgstr "cifratto con %lu passphrase\n" +msgstr "Messaggi crittografati 0." -#, fuzzy, c-format -#| msgid "Policy: " +#, c-format msgid "(policy: %s)" -msgstr "Policy: " +msgstr "(criterio: %s)" #, c-format msgid "" "Warning: we have yet to see a message signed using this key and user id!\n" msgstr "" +"Attenzione: dobbiamo ancora vedere un messaggio firmato utilizzando questa " +"chiave e ID utente!\n" #, c-format msgid "" "Warning: we've only seen one message signed using this key and user id!\n" msgstr "" +"Attenzione: abbiamo visto solo un messaggio firmato utilizzando questa " +"chiave e ID utente!\n" #, c-format msgid "Warning: you have yet to encrypt a message to this key!\n" msgstr "" +"Attenzione: non è ancora necessario crittografare un messaggio a questa " +"chiave!\n" #, c-format msgid "Warning: you have only encrypted one message to this key!\n" -msgstr "" +msgstr "Attenzione: hai crittografato solo un messaggio per questa chiave!\n" #, c-format msgid "" @@ -6298,37 +6064,48 @@ msgid_plural "" " %s\n" "to mark it as being bad.\n" msgstr[0] "" +"Attenzione: se pensi di aver visto più firme da questa chiave e id utente, " +"allora questa chiave potrebbe essere un falso! Esaminare attentamente " +"l'indirizzo e-mail per piccole variazioni. Se la chiave è sospetta, " +"utilizzare\n" +" %s\n" +"per contrassegnarlo come cattivo.\n" msgstr[1] "" +"Attenzione: se pensi di aver visto più firme da questa chiave e id utente, " +"allora questa chiave potrebbe essere un falso! Esaminare attentamente " +"l'indirizzo e-mail per piccole variazioni. Se la chiave è sospetta, " +"utilizzare\n" +" %s\n" +"per contrassegnarlo come cattivo.\n" -#, fuzzy, c-format +#, c-format msgid "error opening TOFU database: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'apertura del database TOFU: %s\n" #, c-format msgid "WARNING: Encrypting to %s, which has no non-revoked user ids\n" -msgstr "" +msgstr "AVVISO: crittografia a %s, che non dispone di ID utente non revocati\n" -#, fuzzy, c-format -#| msgid "`%s' is not a valid long keyID\n" +#, c-format msgid "'%s' is not a valid long keyID\n" -msgstr "`%s' non è un key ID lungo valido\n" +msgstr "'%s' non è un keyID lungo valido\n" -#, fuzzy, c-format +#, c-format msgid "key %s: accepted as trusted key\n" -msgstr "chiave %08lX: accettata come chiave affidabile\n" +msgstr "chiave %s: accettata come chiave attendibile\n" -#, fuzzy, c-format +#, c-format msgid "key %s occurs more than once in the trustdb\n" -msgstr "chiave %08lX: appare nel trustdb più di una volta\n" +msgstr "chiave %s si verifica più di una volta nel trustdb\n" -#, fuzzy, c-format +#, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" -"chiave %08lX: manca la chiave pubblica della chiave fidata - ignorata\n" +"chiave %s: nessuna chiave pubblica per la chiave attendibile - ignorata\n" -#, fuzzy, c-format +#, c-format msgid "key %s marked as ultimately trusted\n" -msgstr "chiavi marcate definitivamente affidabili.\n" +msgstr "chiave %s contrassegnata come considerata attendibile\n" #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" @@ -6341,18 +6118,21 @@ msgstr "il trust record %lu non è del tipo richiesto %d\n" #, c-format msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" +"È possibile provare a creare nuovamente il trustdb utilizzando i comandi:\n" #, c-format msgid "If that does not work, please consult the manual\n" -msgstr "" +msgstr "Se ciò non funziona, consultare il manuale\n" #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" +"impossibile utilizzare il modello di trust sconosciuto (%d) - presupponendo " +"il modello di trust %s\n" #, c-format msgid "using %s trust model\n" -msgstr "" +msgstr "utilizzo del modello di trust %s\n" #, c-format msgid "no need for a trustdb check\n" @@ -6362,17 +6142,18 @@ msgstr "non è necessario un controllo del trustdb\n" msgid "next trustdb check due at %s\n" msgstr "il prossimo controllo del trustdb sarà fatto il %s\n" -#, fuzzy, c-format +#, c-format msgid "no need for a trustdb check with '%s' trust model\n" -msgstr "non è necessario un controllo del trustdb\n" +msgstr "non è necessario un controllo trustdb con il modello di trust '%s'\n" -#, fuzzy, c-format +#, c-format msgid "no need for a trustdb update with '%s' trust model\n" -msgstr "non è necessario un controllo del trustdb\n" +msgstr "" +"non è necessario un aggiornamento trustdb con il modello di trust '%s'\n" -#, fuzzy, c-format +#, c-format msgid "public key %s not found: %s\n" -msgstr "chiave pubblica %08lX non trovata: %s\n" +msgstr "chiave pubblica %s non trovata: %s\n" #, c-format msgid "please do a --check-trustdb\n" @@ -6382,51 +6163,53 @@ msgstr "per favore usa --check-trustdb\n" msgid "checking the trustdb\n" msgstr "controllo il trustdb\n" -#, fuzzy, c-format +#, c-format msgid "%d key processed" msgid_plural "%d keys processed" -msgstr[0] "Per ora sono state esaminate %lu chiavi\n" -msgstr[1] "Per ora sono state esaminate %lu chiavi\n" +msgstr[0] "Chiave %d elaborata" +msgstr[1] "Chiavi %d elaborate" -#, fuzzy, c-format -#| msgid "%d keys processed (%d validity counts cleared)\n" +#, c-format msgid " (%d validity count cleared)\n" msgid_plural " (%d validity counts cleared)\n" -msgstr[0] "%d chiavi processate (%d conteggi di validità azzerati)\n" -msgstr[1] "%d chiavi processate (%d conteggi di validità azzerati)\n" +msgstr[0] " (%d conteggio di validità cancellato)\n" +msgstr[1] " (%d conteggi di validità cancellati)\n" #, c-format msgid "no ultimately trusted keys found\n" msgstr "non è stata trovata alcuna chiave definitivamente affidabile\n" -#, fuzzy, c-format +#, c-format msgid "public key of ultimately trusted key %s not found\n" -msgstr "chiave pubblica definitivamente affidabile %08lX non trovata\n" +msgstr "chiave pubblica della chiave attendibile %s non trovata\n" #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" +"profondità : %d valido: %3d firmato: %3d trust: %d-, %dq, %dn, %dm, %df, " +"%du\n" -#, fuzzy, c-format +#, c-format msgid "unable to update trustdb version record: write failed: %s\n" -msgstr "trust record %lu, req type %d: write fallita: %s\n" +msgstr "" +"impossibile aggiornare il record della versione trustdb: scrittura non " +"riuscita: %s\n" msgid "undefined" -msgstr "" +msgstr "non definito" -#, fuzzy msgid "never" -msgstr "mai " +msgstr "mai" msgid "marginal" -msgstr "" +msgstr "marginale" msgid "full" -msgstr "" +msgstr "intero" msgid "ultimate" -msgstr "" +msgstr "definitivo" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to @@ -6437,35 +6220,31 @@ msgstr "" #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. msgid "10 translator see trust.c:uid_trust_string_fixed" -msgstr "" +msgstr "10 traduttore vedere trust.c:uid_trust_string_fixed" -#, fuzzy msgid "[ revoked]" -msgstr "[revocata]" +msgstr "[ revocato]" -#, fuzzy msgid "[ expired]" -msgstr "[scaduta]" +msgstr "[ scaduto]" -#, fuzzy msgid "[ unknown]" -msgstr "sconosciuto" +msgstr "[ sconosciuto]" msgid "[ undef ]" -msgstr "" +msgstr "[ undef ]" -#, fuzzy msgid "[ never ]" -msgstr "mai " +msgstr "[ mai ]" msgid "[marginal]" -msgstr "" +msgstr "[marginale]" msgid "[ full ]" -msgstr "" +msgstr "[ completo ]" msgid "[ultimate]" -msgstr "" +msgstr "[ultimo]" #, c-format msgid "" @@ -6481,594 +6260,587 @@ msgstr "" msgid "input line %u too long or missing LF\n" msgstr "linea di input %u troppo lunga o LF mancante\n" -#, fuzzy, c-format +#, c-format msgid "can't open fd %d: %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "impossibile aprire fd %d: %s\n" msgid "set debugging flags" -msgstr "" +msgstr "impostare i flag di debug" msgid "enable full debugging" -msgstr "" +msgstr "abilitare il debug completo" -#, fuzzy msgid "Usage: kbxutil [options] [files] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: kbxutil [opzioni] [file] (-h per assistenza)" -#, fuzzy msgid "" "Syntax: kbxutil [options] [files]\n" "List, export, import Keybox data\n" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "" +"Sintassi: kbxutil [opzioni] [files]\n" +"Elencare, esportare, importare i dati di Keybox\n" #. TRANSLATORS: Put a \x1f right before a colon. This can be #. * used by pinentry to nicely align the names and values. Keep #. * the %s at the start and end of the string. #, c-format msgid "%sNumber: %s%%0AHolder: %s%s" -msgstr "" +msgstr "%sNumero: %s%%0ATitolare: %s%s" #. TRANSLATORS: This is the number of remaining attempts to #. * enter a PIN. Use %%0A (double-percent,0A) for a linefeed. #, c-format msgid "Remaining attempts: %d" -msgstr "" +msgstr "Tentativi rimanenti: %d" msgid "||Please enter the PIN for the key to create qualified signatures." -msgstr "" +msgstr "||Immettere il PIN per la chiave per creare firme qualificate." -#, fuzzy msgid "||Please enter the PIN for the standard keys." -msgstr "cambia la passphrase" +msgstr "||Si prega di inserire il PIN per le chiavi standard." #, c-format msgid "RSA modulus missing or not of size %d bits\n" -msgstr "" +msgstr "Modulo RSA mancante o non di dimensione %d bit\n" #, c-format msgid "RSA public exponent missing or larger than %d bits\n" -msgstr "" +msgstr "Esponente pubblico RSA mancante o superiore a %d bit\n" #, c-format msgid "PIN callback returned error: %s\n" -msgstr "" +msgstr "Errore di richiamata PIN: %s\n" #, c-format msgid "the NullPIN has not yet been changed\n" -msgstr "" +msgstr "il NullPIN non è ancora stato modificato\n" -#, fuzzy msgid "|N|Please enter a new PIN for the standard keys." -msgstr "cambia la passphrase" +msgstr "|N|Immettere un nuovo PIN per le chiavi standard." -#, fuzzy msgid "|NP|Please enter a new PIN Unblocking Code (PUK) for the standard keys." -msgstr "Per favore scegli il motivo della revoca:\n" +msgstr "" +"|N|Inserisci un nuovo codice di sblocco del PIN (PUK) per i tasti standard." -#, fuzzy msgid "|P|Please enter the PIN Unblocking Code (PUK) for the standard keys." -msgstr "Per favore scegli il motivo della revoca:\n" +msgstr "|P|Inserisci il codice di sblocco del PIN (PUK) per i tasti standard." msgid "|N|Please enter a new PIN for the key to create qualified signatures." -msgstr "" +msgstr "|N|Immettere un nuovo PIN per la chiave per creare firme qualificate." msgid "" "|NP|Please enter a new PIN Unblocking Code (PUK) for the key to create " "qualified signatures." msgstr "" +"|NP|Inserisci un nuovo codice di sblocco PIN (PUK) per la chiave per creare " +"firme qualificate." msgid "" "|P|Please enter the PIN Unblocking Code (PUK) for the key to create " "qualified signatures." msgstr "" +"|P|Inserisci il codice di sblocco del PIN (PUK) per la chiave per creare " +"firme qualificate." -#, fuzzy, c-format +#, c-format msgid "error getting new PIN: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero del nuovo PIN: %s\n" -#, fuzzy, c-format +#, c-format msgid "failed to store the fingerprint: %s\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "impossibile memorizzare l'impronta digitale: %s\n" -#, fuzzy, c-format +#, c-format msgid "failed to store the creation date: %s\n" -msgstr "rebuild della cache del portachiavi fallito: %s\n" +msgstr "impossibile memorizzare la data di creazione: %s\n" #, c-format msgid "error retrieving CHV status from card\n" -msgstr "" +msgstr "errore durante il recupero dello stato CHV dalla scheda\n" #, c-format msgid "response does not contain the RSA modulus\n" -msgstr "" +msgstr "risposta non contiene il modulo RSA\n" #, c-format msgid "response does not contain the RSA public exponent\n" -msgstr "" +msgstr "risposta non contiene l'esponente pubblico RSA\n" -#, fuzzy, c-format -#| msgid "remove keys from the public keyring" +#, c-format msgid "response does not contain the EC public key\n" -msgstr "rimuove le chiavi dal portachiavi pubblico" +msgstr "risposta non contiene la chiave pubblica CE\n" #, c-format msgid "response does not contain the public key data\n" -msgstr "" +msgstr "risposta non contiene i dati della chiave pubblica\n" -#, fuzzy, c-format +#, c-format msgid "reading public key failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "lettura della chiave pubblica non riuscita: %s\n" #. TRANSLATORS: Put a \x1f right before a colon. This can be #. * used by pinentry to nicely align the names and values. Keep #. * the %s at the start and end of the string. #, c-format msgid "%sNumber: %s%%0AHolder: %s%%0ACounter: %lu%s" -msgstr "" +msgstr "%sNumero: %s%%0AHolder: %s%%0ACounter: %lu%s" #, c-format msgid "using default PIN as %s\n" -msgstr "" +msgstr "utilizzando il PIN predefinito come %s\n" #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" +"impossibile utilizzare il PIN predefinito come %s: %s - disabilitazione " +"dell'ulteriore utilizzo predefinito\n" -#, fuzzy msgid "||Please unlock the card" -msgstr "cambia la passphrase" +msgstr "||Si prega di sbloccare la carta" #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" -msgstr "" +msgstr "Il PIN per CHV%d è troppo breve; la lunghezza minima è %d\n" -#, fuzzy, c-format +#, c-format msgid "verify CHV%d failed: %s\n" -msgstr "invio al keyserver fallito: %s\n" +msgstr "verifica CHV%d non riuscita: %s\n" #, c-format msgid "card is permanently locked!\n" -msgstr "" +msgstr "carta è bloccata in modo permanente!\n" #, c-format msgid "%d Admin PIN attempt remaining before card is permanently locked\n" msgid_plural "" "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr[0] "" +"%d tentativo di PIN di amministrazione rimanente prima che la scheda venga " +"bloccata in modo permanente\n" msgstr[1] "" +"%d tentativi di PIN di amministrazione rimanenti prima che la schede vengano " +"bloccate in modo permanente\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %0A (single percent) for a linefeed. -#, fuzzy msgid "|A|Please enter the Admin PIN" -msgstr "cambia la passphrase" +msgstr "|A|Inserisci il PIN di amministratore" #, c-format msgid "access to admin commands is not configured\n" -msgstr "" +msgstr "l'accesso ai comandi di amministrazione non è configurato\n" -#, fuzzy msgid "||Please enter the PIN" -msgstr "cambia la passphrase" +msgstr "||Inserisci il PIN" -#, fuzzy msgid "||Please enter the Reset Code for the card" -msgstr "Per favore scegli il motivo della revoca:\n" +msgstr "||Inserisci il Codice reset per la carta" #, c-format msgid "Reset Code is too short; minimum length is %d\n" -msgstr "" +msgstr "Il codice di reimpostazione è troppo breve; la lunghezza minima è %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. msgid "|RN|New Reset Code" -msgstr "" +msgstr "|RN|Nuovo codice di ripristino" msgid "|AN|New Admin PIN" -msgstr "" +msgstr "|AN|Nuovo PIN di amministrazione" msgid "|N|New PIN" -msgstr "" +msgstr "|N|Nuovo PIN" -#, fuzzy msgid "||Please enter the Admin PIN and New Admin PIN" -msgstr "cambia la passphrase" +msgstr "||Inserisci il PIN di amministratore e il nuovo PIN di amministrazione" -#, fuzzy msgid "||Please enter the PIN and New PIN" -msgstr "cambia la passphrase" +msgstr "||Inserisci il PIN e il nuovo PIN" -#, fuzzy, c-format +#, c-format msgid "error reading application data\n" -msgstr "errore leggendo il keyblock: %s\n" +msgstr "errore durante la lettura dei dati dell'applicazione\n" -#, fuzzy, c-format +#, c-format msgid "error reading fingerprint DO\n" -msgstr "%s: errore durante la lettura del record libero: %s\n" +msgstr "errore durante la lettura dell'impronta digitale DO\n" -#, fuzzy, c-format +#, c-format msgid "key already exists\n" -msgstr "`%s' è già compresso\n" +msgstr "chiave già esistente\n" #, c-format msgid "existing key will be replaced\n" -msgstr "" +msgstr "chiave esistente verrà sostituita\n" -#, fuzzy, c-format +#, c-format msgid "generating new key\n" -msgstr "genera una nuova coppia di chiavi" +msgstr "generazione di una nuova chiave\n" -#, fuzzy, c-format +#, c-format msgid "writing new key\n" -msgstr "genera una nuova coppia di chiavi" +msgstr "genera una nuova coppia di chiavi\n" #, c-format msgid "creation timestamp missing\n" -msgstr "" +msgstr "timestamp di creazione mancante\n" #, c-format msgid "RSA prime %s missing or not of size %d bits\n" -msgstr "" +msgstr "RSA primo %s mancante o non di dimensione %d bit\n" -#, fuzzy, c-format +#, c-format msgid "failed to store the key: %s\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "impossibile archiviare la chiave: %s\n" -#, fuzzy, c-format -#| msgid "unsupported URI" +#, c-format msgid "unsupported curve\n" -msgstr "URI non gestito" +msgstr "curva non supportata\n" #, c-format msgid "please wait while key is being generated ...\n" -msgstr "" +msgstr "si prega di attendere mentre la chiave viene generata …\n" -#, fuzzy, c-format +#, c-format msgid "generating key failed\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "generazione della chiave non riuscita\n" -#, fuzzy, c-format +#, c-format msgid "key generation completed (%d second)\n" msgid_plural "key generation completed (%d seconds)\n" -msgstr[0] "Generazione della chiave fallita: %s\n" -msgstr[1] "Generazione della chiave fallita: %s\n" +msgstr[0] "generazione della chiave completata (%d secondo)\n" +msgstr[1] "" +"generazione della chiavi completate (%d secondi)\n" +"\n" +"\n" #, c-format msgid "invalid structure of OpenPGP card (DO 0x93)\n" -msgstr "" +msgstr "struttura non valida della scheda OpenPGP (DO 0x93)\n" #, c-format msgid "fingerprint on card does not match requested one\n" -msgstr "" +msgstr "impronta digitale sulla carta non corrisponde a quello richiesto\n" -#, fuzzy, c-format +#, c-format msgid "card does not support digest algorithm %s\n" -msgstr "Firma %s, algoritmo di digest %s\n" +msgstr "scheda non supporta l'algoritmo digest %s\n" #, c-format msgid "signatures created so far: %lu\n" -msgstr "" +msgstr "firme create finora: %lu\n" #, c-format msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" +"la verifica del PIN di amministrazione è attualmente vietata tramite questo " +"comando\n" -#, fuzzy, c-format +#, c-format msgid "can't access %s - invalid OpenPGP card?\n" -msgstr "Non sono stati trovati dati OpenPGP validi.\n" +msgstr "impossibile accedere a %s - scheda OpenPGP non valida?\n" -#, fuzzy msgid "||Please enter your PIN at the reader's pinpad" -msgstr "cambia la passphrase" +msgstr "||Inserisci il tuo PIN sul pinpad del lettore" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. msgid "|N|Initial New PIN" -msgstr "" +msgstr "|N|Nuovo PIN iniziale" msgid "run in multi server mode (foreground)" -msgstr "" +msgstr "eseguire in modalità multi server (in primo piano)" msgid "|LEVEL|set the debugging level to LEVEL" -msgstr "" +msgstr "|LEVEL| impostare il livello di debug su LEVEL" -#, fuzzy msgid "|FILE|write a log to FILE" -msgstr "|FILE|carica il modulo di estensione FILE" +msgstr "|FILE|scrittura di un registro in FILE" msgid "|N|connect to reader at port N" -msgstr "" +msgstr "|N|connessione al lettore alla porta N" -#, fuzzy msgid "|NAME|use NAME as ct-API driver" -msgstr "|NOME|usa NOME come destinatario predefinito" +msgstr "|NAME|utilizzare NAME come driver ct-API" -#, fuzzy msgid "|NAME|use NAME as PC/SC driver" -msgstr "|NOME|usa NOME come destinatario predefinito" +msgstr "|NAME|utilizzare NAME come driver PC/SC" -#, fuzzy msgid "do not use the internal CCID driver" -msgstr "non usa per niente il terminale" +msgstr "non utilizzare il driver CCID interno" msgid "|N|disconnect the card after N seconds of inactivity" -msgstr "" +msgstr "|N|scollegare la scheda dopo N secondi di inattività " msgid "do not use a reader's pinpad" -msgstr "" +msgstr "non utilizzare il pinpad di un lettore" -#, fuzzy msgid "deny the use of admin card commands" -msgstr "comandi in conflitto\n" +msgstr "negare l'uso dei comandi della scheda di amministrazione" msgid "use variable length input for pinpad" -msgstr "" +msgstr "utilizzare l'input a lunghezza variabile per il pinpad" -#, fuzzy msgid "Usage: @SCDAEMON@ [options] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: @SCDAEMON@ [opzioni] (-h per assistenza)" msgid "" "Syntax: scdaemon [options] [command [args]]\n" "Smartcard daemon for @GNUPG@\n" msgstr "" +"Sintassi: scdaemon [opzioni] [comando [args]]\n" +"Daemon smartcard per @GNUPG@\n" #, c-format msgid "please use the option '--daemon' to run the program in the background\n" msgstr "" +"si prega di utilizzare l'opzione '--daemon' per eseguire il programma in " +"background\n" #, c-format msgid "handler for fd %d started\n" -msgstr "" +msgstr "gestore per fd %d avviato\n" #, c-format msgid "handler for fd %d terminated\n" -msgstr "" +msgstr "gestore per fd %d terminato\n" #, c-format msgid "validation model requested by certificate: %s" -msgstr "" +msgstr "modello di convalida richiesto dal certificato: %s" msgid "chain" -msgstr "" +msgstr "catena" -#, fuzzy msgid "shell" -msgstr "help" +msgstr "shell" -#, fuzzy, c-format +#, c-format msgid "critical certificate extension %s is not supported" -msgstr "la versione %d del protocollo di gpg-agent non è gestita\n" +msgstr "la versione %s del protocollo di gpg-agent non è gestita" #, c-format msgid "issuer certificate is not marked as a CA" -msgstr "" +msgstr "certificato dell'autorità emittente non è contrassegnato come CA" msgid "critical marked policy without configured policies" -msgstr "" +msgstr "criteri contrassegnati critici senza criteri configurati" -#, fuzzy, c-format +#, c-format msgid "failed to open '%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "impossibile aprire '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "Note: non-critical certificate policy not allowed" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "Nota: i criteri di certificato non critici non sono consentiti" -#, fuzzy, c-format +#, c-format msgid "certificate policy not allowed" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "criteri certificato non consentiti" -#, fuzzy, c-format +#, c-format msgid "failed to get the fingerprint\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "non è riuscito a ottenere l'impronta digitale\n" #, c-format msgid "looking up issuer at external location\n" -msgstr "" +msgstr "ricerca dell'emittente in una posizione esterna\n" #, c-format msgid "number of issuers matching: %d\n" -msgstr "" +msgstr "numero di emittenti corrispondenti: %d\n" -#, fuzzy, c-format -#| msgid "%s: can't access: %s\n" +#, c-format msgid "can't get authorityInfoAccess: %s\n" -msgstr "%s: impossibile acedere a: %s\n" +msgstr "impossibile ottenere authorityInfoAccess: %s\n" #, c-format msgid "looking up issuer from the Dirmngr cache\n" -msgstr "" +msgstr "ricerca dell'autorità emittente dalla cache di Dirmngr\n" -#, fuzzy, c-format +#, c-format msgid "number of matching certificates: %d\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "numero di certificati corrispondenti: %d\n" -#, fuzzy, c-format +#, c-format msgid "dirmngr cache-only key lookup failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "ricerca chiave solo cache dirmngr non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "failed to allocate keyDB handle\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "impossibile allocare l'handle keyDB\n" -#, fuzzy msgid "certificate has been revoked" -msgstr "NOTA: la chiave è stata revocata" +msgstr "certificato è stato revocato" msgid "the status of the certificate is unknown" -msgstr "" +msgstr "lo stato del certificato è sconosciuto" #, c-format msgid "please make sure that the \"dirmngr\" is properly installed\n" -msgstr "" +msgstr "assicurarsi che il \"dirmngr\" sia installato correttamente\n" -#, fuzzy, c-format +#, c-format msgid "checking the CRL failed: %s" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "controllo del CRL non riuscito: %s" #, c-format msgid "certificate with invalid validity: %s" -msgstr "" +msgstr "certificato con validità non valida: %s" #, c-format msgid "certificate not yet valid" -msgstr "" +msgstr "certificato non ancora valido" -#, fuzzy msgid "root certificate not yet valid" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "certificato radice non ancora valido" msgid "intermediate certificate not yet valid" -msgstr "" +msgstr "certificato intermedio non ancora valido" -#, fuzzy, c-format +#, c-format msgid "certificate has expired" -msgstr "Questa chiave è scaduta!" +msgstr "certificato è scaduto" -#, fuzzy msgid "root certificate has expired" -msgstr "Questa chiave è scaduta!" +msgstr "certificato radice scaduto" -#, fuzzy msgid "intermediate certificate has expired" -msgstr "Questa chiave è scaduta!" +msgstr "certificato intermedio scaduto" #, c-format msgid "required certificate attributes missing: %s%s%s" -msgstr "" +msgstr "attributi obbligatori del certificato mancanti: %s%s%s" -#, fuzzy msgid "certificate with invalid validity" -msgstr "Questa chiave è scaduta!" +msgstr "certificato con validità non valida" msgid "signature not created during lifetime of certificate" -msgstr "" +msgstr "firma non creata durante la durata del certificato" msgid "certificate not created during lifetime of issuer" -msgstr "" +msgstr "certificato non creato durante la durata dell'emittente" msgid "intermediate certificate not created during lifetime of issuer" msgstr "" +"certificato intermedio non creato durante la durata dell'autorità emittente" -#, fuzzy, c-format +#, c-format msgid " ( signature created at " -msgstr " nuove firme: %lu\n" +msgstr " ( firma creata alle " -#, fuzzy, c-format +#, c-format msgid " (certificate created at " -msgstr "Certificato di revoca creato.\n" +msgstr " (certificato creato alle " -#, fuzzy, c-format +#, c-format msgid " (certificate valid from " -msgstr "certificato danneggiato" +msgstr " (certificato valido da " #, c-format msgid " ( issuer valid from " -msgstr "" +msgstr " ( emittente valido da " -#, fuzzy, c-format +#, c-format msgid "fingerprint=%s\n" -msgstr "mostra le impronte digitali" +msgstr "impronta digitale=%s\n" #, c-format msgid "root certificate has now been marked as trusted\n" -msgstr "" +msgstr "certificato radice è stato contrassegnato come attendibile\n" #, c-format msgid "interactive marking as trusted not enabled in gpg-agent\n" -msgstr "" +msgstr "contrassegno interattivo come attendibile non abilitato in gpg-agent\n" #, c-format msgid "interactive marking as trusted disabled for this session\n" msgstr "" +"contrassegno interattivo come attendibile disabilitato per questa sessione\n" msgid "WARNING: creation time of signature not known - assuming current time" msgstr "" +"AVVISO: ora di creazione della firma non nota - presupponendo l'ora corrente" -#, fuzzy msgid "no issuer found in certificate" -msgstr "genera un certificato di revoca" +msgstr "nessuna autorità emittente trovata nel certificato" msgid "self-signed certificate has a BAD signature" -msgstr "" +msgstr "certificato autofirmato ha una firma BAD" #, c-format msgid "root certificate is not marked trusted" -msgstr "" +msgstr "certificato radice non contrassegnato come attendibile" -#, fuzzy, c-format +#, c-format msgid "checking the trust list failed: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "controllo dell'elenco di attendibilità non riuscito: %s\n" #, c-format msgid "certificate chain too long\n" -msgstr "" +msgstr "catena di certificati troppo lunga\n" #, c-format msgid "issuer certificate not found" -msgstr "" +msgstr "certificato dell'autorità emittente non trovato" -#, fuzzy, c-format +#, c-format msgid "certificate has a BAD signature" -msgstr "verifica una firma" +msgstr "certificato ha una firma BAD" msgid "found another possible matching CA certificate - trying again" -msgstr "" +msgstr "trovato un altro possibile certificato CA corrispondente - riprovare" #, c-format msgid "certificate chain longer than allowed by CA (%d)" -msgstr "" +msgstr "catena di certificati più lunga di quella consentita dalla CA (%d)" -#, fuzzy, c-format +#, c-format msgid "certificate is good\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "certificato è buono\n" -#, fuzzy, c-format +#, c-format msgid "intermediate certificate is good\n" -msgstr "Certificato di revoca creato.\n" +msgstr "certificato intermedio è buono\n" -#, fuzzy, c-format +#, c-format msgid "root certificate is good\n" -msgstr "certificato danneggiato" +msgstr "certificato radice è buono\n" msgid "switching to chain model" -msgstr "" +msgstr "passaggio al modello a catena" #, c-format msgid "validation model used: %s" -msgstr "" +msgstr "modello di convalida utilizzato: %s" #, c-format msgid "a %u bit hash is not valid for a %u bit %s key\n" -msgstr "" +msgstr "un hash di bit %u non è valido per una chiave %u bit %s\n" #, c-format msgid "(this is the MD2 algorithm)\n" -msgstr "" +msgstr "(questo è l'algoritmo MD2)\n" -#, fuzzy msgid "none" -msgstr "no" +msgstr "nessuno" -#, fuzzy msgid "[Error - invalid encoding]" -msgstr "errore: impronta digitale non valida\n" +msgstr "[Errore - codifica non valida]" msgid "[Error - out of core]" -msgstr "" +msgstr "[Errore - fuori dal nucleo]" msgid "[Error - No name]" -msgstr "" +msgstr "[Errore - Nessun nome]" -#, fuzzy msgid "[Error - invalid DN]" -msgstr "errore: impronta digitale non valida\n" +msgstr "[Errore - DN non valido]" -#, fuzzy, c-format +#, c-format msgid "" "Please enter the passphrase to unlock the secret key for the X.509 " "certificate:\n" @@ -7076,312 +6848,313 @@ msgid "" "S/N %s, ID 0x%08lX,\n" "created %s, expires %s.\n" msgstr "" -"Ti serve una passphrase per sbloccare la chiave segreta dell'utente:\n" -"\"%.*s\"\n" -"%u-bit %s key, ID %08lX, created %s%s\n" +"Immettere la passphrase per sbloccare la chiave segreta per il certificato " +"X.509:\n" +"\"%s\"\n" +"S/N %s, ID 0x%08lX,\n" +"creato %s, scade %s.\n" #, c-format msgid "no key usage specified - assuming all usages\n" msgstr "" +"nessun utilizzo chiave specificato - supponendo che tutti gli utilizzi\n" -#, fuzzy, c-format +#, c-format msgid "error getting key usage information: %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "" +"errore durante il recupero delle informazioni sull'utilizzo della chiave: " +"%s\n" #, c-format msgid "certificate should not have been used for certification\n" msgstr "" +"certificato non avrebbe dovuto essere utilizzato per la certificazione\n" #, c-format msgid "certificate should not have been used for OCSP response signing\n" msgstr "" +"certificato non deve essere stato utilizzato per la firma della risposta " +"OCSP\n" #, c-format msgid "certificate should not have been used for encryption\n" -msgstr "" +msgstr "certificato non avrebbe dovuto essere utilizzato per la crittografia\n" #, c-format msgid "certificate should not have been used for signing\n" -msgstr "" +msgstr "certificato non avrebbe dovuto essere utilizzato per la firma\n" #, c-format msgid "certificate is not usable for encryption\n" -msgstr "" +msgstr "certificato non è utilizzabile per la crittografia\n" #, c-format msgid "certificate is not usable for signing\n" -msgstr "" +msgstr "certificato non è utilizzabile per la firma\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid algorithm\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "riga %d: algoritmo non valido\n" #, c-format msgid "line %d: invalid key length %u (valid are %d to %d)\n" -msgstr "" +msgstr "riga %d: lunghezza chiave non valida %u (valida da %d a %d)\n" #, c-format msgid "line %d: no subject name given\n" -msgstr "" +msgstr "riga %d: nessun nome soggetto specificato\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid subject name label '%.*s'\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "" +"riga %d: etichetta del nome soggetto non valida '%.*s'\n" +"\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid subject name '%s' at pos %d\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "riga %d: nome soggetto '%s' non valido in pos %d\n" -#, fuzzy, c-format +#, c-format msgid "line %d: not a valid email address\n" -msgstr "L'indirizzo di email non è valido\n" +msgstr "riga %d: indirizzo di posta elettronica non valido\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid serial number\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "riga %d: numero di serie non valido\n" #, c-format msgid "line %d: invalid issuer name label '%.*s'\n" msgstr "" +"riga %d: etichetta del nome dell'autorità emittente non valida '%.*s'\n" #, c-format msgid "line %d: invalid issuer name '%s' at pos %d\n" -msgstr "" +msgstr "riga %d: nome autorità emittente '%s' non valido in pos %d\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid date given\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "riga %d: data specificata non valida\n" -#, fuzzy, c-format +#, c-format msgid "line %d: error getting signing key by keygrip '%s': %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "" +"riga %d: errore durante l'osando di firmare la chiave da keygrip '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid hash algorithm given\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "riga %d: algoritmo hash non valido specificato\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid authority-key-id\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "riga %d: authority-key-id non valido\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid subject-key-id\n" -msgstr "chiave %08lX: legame con la subchiave non valido:\n" +msgstr "riga %d: id-chiave-soggetto non valido\n" -#, fuzzy, c-format +#, c-format msgid "line %d: invalid extension syntax\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "riga %d: sintassi di estensione non valida\n" -#, fuzzy, c-format +#, c-format msgid "line %d: error reading key '%s' from card: %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "" +"riga %d: errore durante la lettura della chiave '%s' dalla scheda: %s\n" -#, fuzzy, c-format +#, c-format msgid "line %d: error getting key by keygrip '%s': %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "" +"riga %d: errore durante il recupero della chiave da parte della chiave '%s': " +"%s\n" -#, fuzzy, c-format +#, c-format msgid "line %d: key generation failed: %s <%s>\n" -msgstr "Generazione della chiave fallita: %s\n" +msgstr "riga %d: generazione chiave non riuscita: %s <%s>\n" msgid "" "To complete this certificate request please enter the passphrase for the key " "you just created once more.\n" msgstr "" +"Per completare questa richiesta di certificato, inserire la passphrase per " +"la chiave appena creata ancora una volta.\n" -#, fuzzy, c-format +#, c-format msgid " (%d) Existing key\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) Chiave esistente\n" #, c-format msgid " (%d) Existing key from card\n" -msgstr "" +msgstr " (%d) Chiave esistente dalla scheda\n" #, c-format msgid "Possible actions for a %s key:\n" -msgstr "" +msgstr "Azioni possibili per una chiave %s: \n" -#, fuzzy, c-format +#, c-format msgid " (%d) sign, encrypt\n" -msgstr " (%d) RSA (firma e cifra)\n" +msgstr " (%d) segno, cifra\n" -#, fuzzy, c-format +#, c-format msgid " (%d) sign\n" -msgstr " (%d) DSA (firma solo)\n" +msgstr " (%d) segno\n" -#, fuzzy, c-format +#, c-format msgid " (%d) encrypt\n" -msgstr " (%d) RSA (cifra solo)\n" +msgstr " (%d) crittografa\n" msgid "Enter the X.509 subject name: " -msgstr "" +msgstr "Immettere il nome soggetto X.509: " -#, fuzzy msgid "No subject name given\n" -msgstr "(Non è stata data una descrizione)\n" +msgstr "Nessun nome soggetto dato\n" -#, fuzzy, c-format +#, c-format msgid "Invalid subject name label '%.*s'\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "Etichetta del nome del soggetto non valida '%.*s'.\n" #. TRANSLATORS: The 22 in the second string is the #. length of the first string up to the "%s". Please #. adjust it do the length of your translation. The #. second string is merely passed to atoi so you can #. drop everything after the number. -#, fuzzy, c-format +#, c-format msgid "Invalid subject name '%s'\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "Nome soggetto '%s' non valido\n" msgid "22 translator: see certreg-ui.c:gpgsm_gencertreq_tty" -msgstr "" +msgstr "22 traduttore: vedere certreg-ui.c:gpgsm_gencertreq_tty" -#, fuzzy msgid "Enter email addresses" -msgstr "Indirizzo di Email: " +msgstr "Immettere gli indirizzi di posta elettronica" -#, fuzzy msgid " (end with an empty line):\n" -msgstr "" -"\n" -"Inserisci l'user ID. Termina con una riga vuota: " +msgstr " (terminare con una riga vuota):\n" -#, fuzzy msgid "Enter DNS names" -msgstr "Inserire il nuovo nome del file" +msgstr "Immettere i nomi DNS" -#, fuzzy msgid " (optional; end with an empty line):\n" -msgstr "Inserisci una descrizione opzionale; terminala con una riga vuota:\n" +msgstr " (opzionale; terminare con una riga vuota):\n" msgid "Enter URIs" -msgstr "" +msgstr "Immettere gli URI" -#, fuzzy msgid "Create self-signed certificate? (y/N) " -msgstr "Creare un certificato di revoca per questa chiave? " +msgstr "Creare un certificato autofirmato? (y/N) " msgid "These parameters are used:\n" -msgstr "" +msgstr "Vengono utilizzati i seguenti parametri:\n" msgid "Now creating self-signed certificate. " -msgstr "" +msgstr "Creazione di un certificato autofirmato. " -#, fuzzy -#| msgid "Revocation certificate created.\n" msgid "Now creating certificate request. " -msgstr "Certificato di revoca creato.\n" +msgstr "Creazione della richiesta di certificato. " msgid "This may take a while ...\n" -msgstr "" +msgstr "Questo potrebbe richiedere un po' ...\n" msgid "Ready.\n" -msgstr "" +msgstr "Pronto.\n" msgid "Ready. You should now send this request to your CA.\n" -msgstr "" +msgstr "Pronto. È ora necessario inviare questa richiesta alla CA.\n" #, c-format msgid "resource problem: out of core\n" -msgstr "" +msgstr "problema delle risorse: fuori dal nucleo\n" #, c-format msgid "(this is the RC2 algorithm)\n" -msgstr "" +msgstr "(questo è l'algoritmo RC2)\n" #, c-format msgid "(this does not seem to be an encrypted message)\n" -msgstr "" +msgstr "(questo non sembra essere un messaggio crittografato)\n" -#, fuzzy, c-format +#, c-format msgid "certificate '%s' not found: %s\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "certificato '%s' non trovato: %s\n" -#, fuzzy, c-format +#, c-format msgid "error locking keybox: %s\n" -msgstr "errore leggendo il keyblock: %s\n" +msgstr "errore durante il blocco della keybox: %s\n" -#, fuzzy, c-format +#, c-format msgid "duplicated certificate '%s' deleted\n" -msgstr "Certificato di revoca creato.\n" +msgstr "certificato duplicato '%s' eliminato\n" -#, fuzzy, c-format +#, c-format msgid "certificate '%s' deleted\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "certificato '%s' eliminato\n" -#, fuzzy, c-format +#, c-format msgid "deleting certificate \"%s\" failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "eliminazione del certificato \"%s\" non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "no valid recipients given\n" -msgstr "(Non è stata data una descrizione)\n" +msgstr "nessun destinatario valido dato\n" -#, fuzzy msgid "list external keys" -msgstr "elenca le chiavi segrete" +msgstr "elencare le chiavi esterne" -#, fuzzy msgid "list certificate chain" -msgstr "certificato danneggiato" +msgstr "catena di certificati valida" -#, fuzzy msgid "import certificates" -msgstr "certificato danneggiato" +msgstr "importa certificati" -#, fuzzy msgid "export certificates" -msgstr "certificato danneggiato" +msgstr "esporta certificati" msgid "register a smartcard" -msgstr "" +msgstr "registrare una smart card" msgid "pass a command to the dirmngr" -msgstr "" +msgstr "passare un comando al dirmngr" msgid "invoke gpg-protect-tool" -msgstr "" +msgstr "richiamare gpg-protect-tool" -#, fuzzy msgid "create base-64 encoded output" -msgstr "crea un output ascii con armatura" +msgstr "creare output codificato in base 64" msgid "assume input is in PEM format" -msgstr "" +msgstr "presupporre che l'input sia in formato PEM" msgid "assume input is in base-64 format" -msgstr "" +msgstr "presupporre che l'input sia in formato base 64" msgid "assume input is in binary format" -msgstr "" +msgstr "presupporre che l'input sia in formato binario" msgid "never consult a CRL" -msgstr "" +msgstr "non consultare mai una CRL" msgid "check validity using OCSP" -msgstr "" +msgstr "verificare la validità utilizzando OCSP" msgid "|N|number of certificates to include" -msgstr "" +msgstr "|N|numero di certificati da includere" msgid "|FILE|take policy information from FILE" -msgstr "" +msgstr "|FILE|prendere le informazioni sui criteri da FILE" msgid "do not check certificate policies" -msgstr "" +msgstr "non controllare le politiche dei certificati" msgid "fetch missing issuer certificates" -msgstr "" +msgstr "recupera i certificati degli emittenti mancanti" msgid "don't use the terminal at all" msgstr "non usa per niente il terminale" msgid "|FILE|write a server mode log to FILE" -msgstr "" +msgstr "|FILE|scrittura di un registro in modalità server in FILE" -#, fuzzy msgid "|FILE|write an audit log to FILE" -msgstr "|FILE|carica il modulo di estensione FILE" +msgstr "|FILE|scrittura di un registro di controllo in FILE" msgid "batch mode: never ask" msgstr "modo batch: non fa domande" @@ -7392,133 +7165,128 @@ msgstr "risponde \"sì\" a quasi tutte le domande" msgid "assume no on most questions" msgstr "risponde \"no\" a quasi tutte le domande" -#, fuzzy msgid "|FILE|add keyring to the list of keyrings" -msgstr "aggiungi questo portachiavi alla lista" +msgstr "|FILE|aggiungere il tasto all'elenco dei keyring" -#, fuzzy msgid "|USER-ID|use USER-ID as default secret key" -msgstr "|NOME|usa NOME come chiave segreta predefinita" +msgstr "|USER-ID|utilizzare USER-ID come chiave segreta predefinita" -#, fuzzy msgid "|SPEC|use this keyserver to lookup keys" -msgstr "|HOST|cerca le chiavi in questo keyserver" +msgstr "|SPEC|utilizzare questo keyserver per cercare le chiavi" msgid "|NAME|use cipher algorithm NAME" -msgstr "|NOME|usa l'algoritmo di cifratura NOME" +msgstr "|NAME|usa l'algoritmo di cifratura NAME" msgid "|NAME|use message digest algorithm NAME" -msgstr "|NOME|usa l'algoritmo di message digest NOME" +msgstr "|NAME|usa l'algoritmo di message digest NAME" -#, fuzzy -#| msgid "Usage: gpg [options] [files] (-h for help)" msgid "Usage: @GPGSM@ [options] [files] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: @GPGSM@ [opzioni] [file] (-h per assistenza)" -#, fuzzy msgid "" "Syntax: @GPGSM@ [options] [files]\n" "Sign, check, encrypt or decrypt using the S/MIME protocol\n" "Default operation depends on the input data\n" msgstr "" -"Sintassi: gpg [opzioni] [files]\n" -"firma, controlla, cifra o decifra\n" -"l'operazione predefinita dipende dai dati di input\n" +"Sintassi: @GPGSM@ [opzioni] [files]\n" +"Firmare, controllare, crittografare o decrittografare utilizzando il " +"protocollo S/MIME\n" +"Il funzionamento predefinito dipende dai dati di input\n" -#, fuzzy, c-format +#, c-format msgid "Note: won't be able to encrypt to '%s': %s\n" -msgstr "impossibile connettersi a `%s': %s\n" +msgstr "Nota: impossibile eseguire la crittografia in '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "unknown validation model '%s'\n" -msgstr "destinatario predefinito `%s' sconosciuto\n" +msgstr "modello di convalida sconosciuto '%s'\n" -#, fuzzy, c-format +#, c-format msgid "%s:%u: no hostname given\n" -msgstr "(Non è stata data una descrizione)\n" +msgstr "%s: %u: nessun nome host specificato\n" #, c-format msgid "%s:%u: password given without user\n" -msgstr "" +msgstr "%s:%u: password fornita senza utente\n" -#, fuzzy, c-format +#, c-format msgid "%s:%u: skipping this line\n" -msgstr " s = salta questa chiave\n" +msgstr "%s:%u: ignorare questa riga\n" -#, fuzzy, c-format +#, c-format msgid "could not parse keyserver\n" -msgstr "impossibile fare il parsing dell'URI del keyserver\n" +msgstr "impossibile analizzare il keyserver\n" -#, fuzzy, c-format +#, c-format msgid "importing common certificates '%s'\n" -msgstr "scrittura in `%s'\n" +msgstr "importazione di certificati comuni '%s'\n" -#, fuzzy, c-format +#, c-format msgid "can't sign using '%s': %s\n" -msgstr "impossibile chiudere `%s': %s\n" +msgstr "impossibile firmare utilizzando '%s': %s\n" #, c-format msgid "invalid command (there is no implicit command)\n" -msgstr "" +msgstr "comando non valido (non esiste alcun comando implicito)\n" -#, fuzzy, c-format +#, c-format msgid "total number processed: %lu\n" -msgstr "Numero totale esaminato: %lu\n" +msgstr "numero totale elaborato: %lu\n" -#, fuzzy, c-format +#, c-format msgid "error storing certificate\n" -msgstr "genera un certificato di revoca" +msgstr "errore durante l'archiviazione del certificato\n" #, c-format msgid "basic certificate checks failed - not imported\n" -msgstr "" +msgstr "controlli certificati di base non riusciti - non importati\n" -#, fuzzy, c-format +#, c-format msgid "error getting stored flags: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero dei flag memorizzati: %s\n" -#, fuzzy, c-format +#, c-format msgid "error importing certificate: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante l'importazione del certificato: %s\n" -#, fuzzy, c-format +#, c-format msgid "error reading input: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura dell'input: %s\n" #, c-format msgid "problem looking for existing certificate: %s\n" -msgstr "" +msgstr "problema durante la ricerca del certificato esistente: %s\n" -#, fuzzy, c-format +#, c-format msgid "error finding writable keyDB: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la ricerca della chiave scrivibile keyDB: %s\n" -#, fuzzy, c-format +#, c-format msgid "error storing certificate: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante l'archiviazione del certificato: %s\n" -#, fuzzy, c-format +#, c-format msgid "problem re-searching certificate: %s\n" -msgstr "rev? problema controllando la revoca: %s\n" +msgstr "problema durante la ri-ricerca del certificato: %s\n" -#, fuzzy, c-format +#, c-format msgid "error storing flags: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'archiviazione dei flag: %s\n" msgid "Error - " -msgstr "" +msgstr "Errore - " #, c-format msgid "GPG_TTY has not been set - using maybe bogus default\n" -msgstr "" +msgstr "GPG_TTY non è stato impostato - utilizzando forse falso default\n" -#, fuzzy, c-format +#, c-format msgid "invalid formatted fingerprint in '%s', line %d\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "impronta digitale formattata non valida in '%s', riga %d\n" -#, fuzzy, c-format +#, c-format msgid "invalid country code in '%s', line %d\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "codice paese non valido in '%s', riga %d\n" #, c-format msgid "" @@ -7529,12 +7297,20 @@ msgid "" "\n" "%s%sAre you really sure that you want to do this?" msgstr "" +"Si sta per creare una firma utilizzando il certificato:\n" +"\"%s\"\n" +"In questo modo verrà creata una firma qualificata per legge equiparata a una " +"firma scritta a mano.\n" +"\n" +"%s%sSono davvero sicuri di voler eseguire questa operazione?" #, c-format msgid "" "Note, that this software is not officially approved to create or verify such " "signatures.\n" msgstr "" +"Si noti che questo software non è ufficialmente approvato per creare o " +"verificare tali firme.\n" #, c-format msgid "" @@ -7542,607 +7318,621 @@ msgid "" "\"%s\"\n" "Note, that this certificate will NOT create a qualified signature!" msgstr "" +"Si sta per creare una firma utilizzando il certificato:\n" +"\"%s\"\n" +"Si noti che questo certificato NON creerà una firma qualificata!" -#, fuzzy, c-format +#, c-format msgid "hash algorithm %d (%s) for signer %d not supported; using %s\n" -msgstr "l'algoritmo di protezione %d%s non è gestito\n" +msgstr "" +"algoritmo hash %d (%s) per firmatario %d non supportato; utilizzando %s\n" #, c-format msgid "hash algorithm used for signer %d: %s (%s)\n" -msgstr "" +msgstr "algoritmo hash utilizzato per firmatario %d: %s (%s)\n" -#, fuzzy, c-format +#, c-format msgid "checking for qualified certificate failed: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "controllo del certificato qualificato non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "Signature made " -msgstr "Firma scaduta il %s\n" +msgstr "Firma fatta " #, c-format msgid "[date not given]" -msgstr "" +msgstr "[data non specificata]" -#, fuzzy, c-format +#, c-format msgid "algorithm:" -msgstr "armatura: %s\n" +msgstr "algoritmo:" #, c-format msgid "" "invalid signature: message digest attribute does not match computed one\n" msgstr "" +"firma non valida: l'attributo digest del messaggio non corrisponde a uno " +"calcolato\n" -#, fuzzy, c-format +#, c-format msgid "Good signature from" -msgstr "Firma valida da \"" +msgstr "Buona firma da" -#, fuzzy, c-format +#, c-format msgid " aka" -msgstr " alias \"" +msgstr " aka" -#, fuzzy, c-format +#, c-format msgid "This is a qualified signature\n" -msgstr "" -"\n" -"Questa sarà una autofirma.\n" +msgstr "Questa è una firma qualificata\n" -#, fuzzy, c-format +#, c-format msgid "can't initialize certificate cache lock: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "impossibile inizializzare il blocco della cache dei certificati: %s\n" #, c-format msgid "can't acquire read lock on the certificate cache: %s\n" msgstr "" +"impossibile acquisire il blocco di lettura sulla cache dei certificati: %s\n" #, c-format msgid "can't acquire write lock on the certificate cache: %s\n" msgstr "" +"impossibile acquisire il blocco in scrittura sulla cache dei certificati: " +"%s\n" #, c-format msgid "can't release lock on the certificate cache: %s\n" -msgstr "" +msgstr "impossibile rilasciare il blocco sulla cache dei certificati: %s\n" #, c-format msgid "dropping %u certificates from the cache\n" -msgstr "" +msgstr "eliminazione di %u certificati dalla cache\n" -#, fuzzy, c-format -#| msgid "can't create `%s': %s\n" +#, c-format msgid "can't parse certificate '%s': %s\n" -msgstr "impossibile creare `%s': %s\n" +msgstr "impossibile analizzare il certificato '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "certificate '%s' already cached\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "certificato '%s' già memorizzato nella cache\n" -#, fuzzy, c-format +#, c-format msgid "trusted certificate '%s' loaded\n" -msgstr "Certificato di revoca creato.\n" +msgstr "certificato attendibile '%s' caricato\n" -#, fuzzy, c-format +#, c-format msgid "certificate '%s' loaded\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "certificato '%s' caricato\n" -#, fuzzy, c-format +#, c-format msgid " SHA1 fingerprint = %s\n" -msgstr "mostra le impronte digitali" +msgstr " impronta digitale SHA1 - %s\n" msgid " issuer =" -msgstr "" +msgstr " emittente =" msgid " subject =" -msgstr "" +msgstr " oggetto =" -#, fuzzy, c-format +#, c-format msgid "error loading certificate '%s': %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il caricamento del certificato '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "permanently loaded certificates: %u\n" -msgstr "certificato danneggiato" +msgstr "certificati caricati in modo permanente: %u\n" -#, fuzzy, c-format +#, c-format msgid " runtime cached certificates: %u\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr " certificati runtime memorizzati nella cache: %u\n" -#, fuzzy, c-format +#, c-format msgid " trusted certificates: %u (%u,%u,%u,%u)\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr " certificati attendibili: %u (%u,%u,%u,%u)\n" -#, fuzzy, c-format +#, c-format msgid "certificate already cached\n" -msgstr "Certificato di revoca creato.\n" +msgstr "certificato già memorizzato nella cache\n" -#, fuzzy, c-format +#, c-format msgid "certificate cached\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "certificato memorizzato nella cache\n" -#, fuzzy, c-format +#, c-format msgid "error caching certificate: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la memorizzazione nella cache del certificato: %s\n" -#, fuzzy, c-format +#, c-format msgid "invalid SHA1 fingerprint string '%s'\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "stringa di impronta digitale SHA1 non valida '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error fetching certificate by S/N: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero del certificato da parte di S/N: %s\n" -#, fuzzy, c-format +#, c-format msgid "error fetching certificate by subject: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero del certificato per oggetto: %s\n" -#, fuzzy, c-format +#, c-format msgid "no issuer found in certificate\n" -msgstr "genera un certificato di revoca" +msgstr "nessuna autorità emittente trovata nel certificato\n" -#, fuzzy, c-format +#, c-format msgid "error getting authorityKeyIdentifier: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero di authorityKeyIdentifier: %s\n" -#, fuzzy, c-format -#| msgid "can't create directory `%s': %s\n" +#, c-format msgid "creating directory '%s'\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "creazione della directory '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error creating directory '%s': %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "errore durante la creazione della directory '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "ignoring database dir '%s'\n" -msgstr "errore nella riga della coda\n" +msgstr "ignorare il dir del database '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error reading directory '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura della directory '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "removing cache file '%s'\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "rimozione del file di cache '%s'\n" -#, fuzzy, c-format -#| msgid "enarmoring failed: %s\n" +#, c-format msgid "not removing file '%s'\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "non rimuove il file '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error closing cache file: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la chiusura del file della cache: %s\n" -#, fuzzy, c-format +#, c-format msgid "failed to open cache dir file '%s': %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "impossibile aprire il file dir della cache '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error creating new cache dir file '%s': %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "" +"errore durante la creazione del nuovo file di dir della cache '%s': %s\n" -#, fuzzy, c-format -#| msgid "error writing secret keyring `%s': %s\n" +#, c-format msgid "error writing new cache dir file '%s': %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "" +"errore durante la scrittura del nuovo file di dir della cache '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error closing new cache dir file '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "" +"errore durante la chiusura del nuovo file di dir della cache '%s': %s\n" -#, fuzzy, c-format -#| msgid "new configuration file `%s' created\n" +#, c-format msgid "new cache dir file '%s' created\n" -msgstr "creato un nuovo file di configurazione `%s'\n" +msgstr "nuovo file dir della cache '%s' creato\n" -#, fuzzy, c-format +#, c-format msgid "failed to re-open cache dir file '%s': %s\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "impossibile riass desiderare il file di dir della cache '%s': %s\n" #, c-format msgid "first record of '%s' is not the version\n" -msgstr "" +msgstr "il primo record di '%s' non è la versione\n" #, c-format msgid "old version of cache directory - cleaning up\n" -msgstr "" +msgstr "vecchia versione della directory della cache - pulizia\n" #, c-format msgid "old version of cache directory - giving up\n" -msgstr "" +msgstr "vecchia versione della directory della cache - rinuncia\n" #, c-format msgid "extra field detected in crl record of '%s' line %u\n" -msgstr "" +msgstr "campo aggiuntivo rilevato nel record crl '%s' della riga %u\n" -#, fuzzy, c-format +#, c-format msgid "invalid line detected in '%s' line %u\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "riga non valida rilevata nella riga '%s' %u\n" -#, fuzzy, c-format +#, c-format msgid "duplicate entry detected in '%s' line %u\n" -msgstr "Certificato di revoca creato.\n" +msgstr "voce duplicata rilevata '%s' nella riga %u\n" #, c-format msgid "unsupported record type in '%s' line %u skipped\n" -msgstr "" +msgstr "tipo di record non supportato nella riga '%s' %u ignorato\n" -#, fuzzy, c-format +#, c-format msgid "invalid issuer hash in '%s' line %u\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "hash dell'autorità emittente non valido '%s' nella riga %u\n" -#, fuzzy, c-format +#, c-format msgid "no issuer DN in '%s' line %u\n" -msgstr "errore di lettura: %s\n" +msgstr "nessun DN emittente '%s' nella riga %u\n" -#, fuzzy, c-format +#, c-format msgid "invalid timestamp in '%s' line %u\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "timestamp non valido '%s' nella riga %u\n" -#, fuzzy, c-format -#| msgid "WARNING: invalid size of random_seed file - not used\n" +#, c-format msgid "WARNING: invalid cache file hash in '%s' line %u\n" -msgstr "" -"ATTENZIONE: le dimensioni del file random_seed non sono valide - non usato\n" +msgstr "AVVISO: hash del file di cache non valido %s' nella riga %u\n" #, c-format msgid "detected errors in cache dir file\n" -msgstr "" +msgstr "errori rilevati nel file dir della cache\n" #, c-format msgid "please check the reason and manually delete that file\n" -msgstr "" +msgstr "si prega di controllare il motivo ed eliminare manualmente quel file\n" -#, fuzzy, c-format +#, c-format msgid "failed to create temporary cache dir file '%s': %s\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "impossibile creare il file dir della cache temporanea '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error closing '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la chiusura di '%s': %s\n" -#, fuzzy, c-format -#| msgid "error reading `%s': %s\n" +#, c-format msgid "error renaming '%s' to '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la ridenominazione di '%s' in '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "can't hash '%s': %s\n" -msgstr "impossibile chiudere `%s': %s\n" +msgstr "impossibile eseguire l'hashing '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error setting up MD5 hash context: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'impostazione del contesto hash MD5: %s\n" -#, fuzzy, c-format +#, c-format msgid "error hashing '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'hashing di '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "invalid formatted checksum for '%s'\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "checksum formattato non valido per '%s'\n" #, c-format msgid "too many open cache files; can't open anymore\n" -msgstr "" +msgstr "troppi file della cache aperti; non può più aprire\n" -#, fuzzy, c-format +#, c-format msgid "opening cache file '%s'\n" -msgstr "firma fallita: %s\n" +msgstr "apertura del file di cache '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error opening cache file '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'apertura del file di cache '%s': %s\n" #, c-format msgid "error initializing cache file '%s' for reading: %s\n" msgstr "" +"errore durante l'inizializzazione del file di cache '%s' per la lettura: %s\n" #, c-format msgid "calling unlock_db_file on a closed file\n" -msgstr "" +msgstr "chiamata unlock_db_file su un file chiuso\n" #, c-format msgid "calling unlock_db_file on an unlocked file\n" -msgstr "" +msgstr "chiamata unlock_db_file su un file sbloccato\n" -#, fuzzy, c-format +#, c-format msgid "failed to create a new cache object: %s\n" -msgstr "%s: creazione della tabella hash fallita: %s\n" +msgstr "impossibile creare un nuovo oggetto cache: %s\n" -#, fuzzy, c-format -#| msgid "No help available for `%s'" +#, c-format msgid "no CRL available for issuer id %s\n" -msgstr "Non è disponibile un aiuto per `%s'" +msgstr "nessun CRL disponibile per l'ID emittente %s\n" #, c-format msgid "cached CRL for issuer id %s too old; update required\n" msgstr "" +"CRL memorizzato nella cache per l'ID emittente %s troppo vecchio; " +"aggiornamento richiesto\n" #, c-format msgid "" "force-crl-refresh active and %d minutes passed for issuer id %s; update " "required\n" msgstr "" +"force-crl-refresh attivo e %d minuti per l'ID autorità emittente %s; " +"aggiornamento richiesto\n" #, c-format msgid "force-crl-refresh active for issuer id %s; update required\n" msgstr "" +"force-crl-refresh attivo per l'ID autorità emittente %s; aggiornamento " +"richiesto\n" #, c-format msgid "available CRL for issuer ID %s can't be used\n" -msgstr "" +msgstr "impossibile utilizzare il CRL disponibile per l'ID emittente %s\n" #, c-format msgid "cached CRL for issuer id %s tampered; we need to update\n" msgstr "" +"CRL memorizzato nella cache per l'ID emittente %s manomesso; abbiamo bisogno " +"di aggiornare\n" #, c-format msgid "WARNING: invalid cache record length for S/N " -msgstr "" +msgstr "AVVISO: lunghezza del record della cache non valida per S/N " -#, fuzzy, c-format +#, c-format msgid "problem reading cache record for S/N %s: %s\n" -msgstr "errore creando il portachiavi `%s': %s\n" +msgstr "problema durante la lettura del record della cache per S/N %s: %s\n" #, c-format msgid "S/N %s is not valid; reason=%02X date=%.15s\n" -msgstr "" +msgstr "S/N %s non valido. motivo: %02X data%15s\n" #, c-format msgid "S/N %s is valid, it is not listed in the CRL\n" -msgstr "" +msgstr "S/N %s è valido, non è elencato nel CRL\n" -#, fuzzy, c-format +#, c-format msgid "error getting data from cache file: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero dei dati dal file di cache: %s\n" -#, fuzzy, c-format -#| msgid "invalid response from agent\n" +#, c-format msgid "got an invalid S-expression from libksba\n" -msgstr "risposta non valida dall'agent\n" +msgstr "ha ottenuto un'espressione S non valida da libksba\n" -#, fuzzy, c-format +#, c-format msgid "converting S-expression failed: %s\n" -msgstr "impossibile aprire il file: %s\n" +msgstr "conversione dell'espressione S non riuscita: %s\n" -#, fuzzy, c-format -#| msgid "invalid hash algorithm `%s'\n" +#, c-format msgid "unknown hash algorithm '%s'\n" -msgstr "algoritmo di hash non valido `%s'\n" +msgstr "algoritmo hash sconosciuto '%s'\n" #, c-format msgid "gcry_md_open for algorithm %d failed: %s\n" -msgstr "" +msgstr "gcry_md_open per l'algoritmo %d non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "creating S-expression failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "creazione dell'espressione S non riuscita: %s\n" -#, fuzzy, c-format -#| msgid "build_packet failed: %s\n" +#, c-format msgid "ksba_crl_parse failed: %s\n" -msgstr "build_packet fallito: %s\n" +msgstr "ksba_crl_parse non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "error getting update times of CRL: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante l'aggiornamento del CRL: %s\n" #, c-format msgid "update times of this CRL: this=%s next=%s\n" -msgstr "" +msgstr "orari di aggiornamento di questo CRL: this:%s next-%s\n" #, c-format msgid "nextUpdate not given; assuming a validity period of one day\n" msgstr "" +"nextUpdate non specificato; assumendo un periodo di validità di un giorno\n" -#, fuzzy, c-format +#, c-format msgid "error getting CRL item: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero dell'elemento CRL: %s\n" -#, fuzzy, c-format +#, c-format msgid "error inserting item into temporary cache file: %s\n" -msgstr "scrittura in `%s'\n" +msgstr "" +"errore durante l'inserimento dell'elemento nel file di cache temporaneo: %s\n" -#, fuzzy, c-format +#, c-format msgid "no CRL issuer found in CRL: %s\n" -msgstr "genera un certificato di revoca" +msgstr "nessuna autorità emittente CRL trovata nel CRL: %s\n" #, c-format msgid "locating CRL issuer certificate by authorityKeyIdentifier\n" msgstr "" +"individuazione del certificato dell'autorità emittente CRL da parte di " +"authorityKeyIdentifier\n" -#, fuzzy, c-format -#| msgid "signature verification suppressed\n" +#, c-format msgid "CRL signature verification failed: %s\n" -msgstr "verifica della firma soppressa\n" +msgstr "Verifica della firma CRL non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "error checking validity of CRL issuer certificate: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "" +"errore durante il controllo della validità del certificato dell'autorità " +"emittente CRL: %s\n" -#, fuzzy, c-format +#, c-format msgid "ksba_crl_new failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "ksba_crl_new non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "ksba_crl_set_reader failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "ksba_crl_set_reader non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "removed stale temporary cache file '%s'\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "rimosso il file di cache temporanea non più obsoleto '%s'\n" -#, fuzzy, c-format +#, c-format msgid "problem removing stale temporary cache file '%s': %s\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "" +"problema durante la rimozione del file di cache temporanea non più obsoleto " +"'%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error creating temporary cache file '%s': %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la creazione del file di cache temporanea '%s': %s\n" -#, fuzzy, c-format -#| msgid "update secret failed: %s\n" +#, c-format msgid "crl_parse_insert failed: %s\n" -msgstr "aggiornamento della chiave segreta fallito: %s\n" +msgstr "crl_parse_insert non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "error finishing temporary cache file '%s': %s\n" -msgstr "scrittura in `%s'\n" +msgstr "" +"errore durante il completamento del file di cache temporanea '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error closing temporary cache file '%s': %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la chiusura del file della cache temporanea '%s': %s\n" #, c-format msgid "WARNING: new CRL still too old; it expired on %s - loading anyway\n" msgstr "" +"AVVISO: nuovo CRL ancora troppo vecchio; è scaduto su %s - il caricamento è " +"stato completato comunque\n" #, c-format msgid "new CRL still too old; it expired on %s\n" -msgstr "" +msgstr "nuovo CRL ancora troppo vecchio; è scaduto su %s\n" #, c-format msgid "unknown critical CRL extension %s\n" -msgstr "" +msgstr "estensione CRL critica sconosciuta %s\n" -#, fuzzy, c-format +#, c-format msgid "error reading CRL extensions: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura delle estensioni CRL: %s\n" -#, fuzzy, c-format +#, c-format msgid "creating cache file '%s'\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "creazione del file di cache '%s'\n" -#, fuzzy, c-format +#, c-format msgid "problem renaming '%s' to '%s': %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "problema durante la ridenominazione di '%s' in '%s': %s\n" #, c-format msgid "" "updating the DIR file failed - cache entry will get lost with the next " "program start\n" msgstr "" +"aggiornamento del file DIR non riuscito - la voce della cache andrà persa " +"con il successivo avvio del programma\n" #, c-format msgid "Begin CRL dump (retrieved via %s)\n" -msgstr "" +msgstr "Inizio dump CRL (recuperato tramite %s)\n" msgid "" " ERROR: The CRL will not be used because it was still too old after an " "update!\n" msgstr "" +" ERRORE: il CRL non verrà utilizzato perché era ancora troppo vecchio dopo " +"un aggiornamento!\n" msgid "" " ERROR: The CRL will not be used due to an unknown critical extension!\n" msgstr "" +" ERRORE: il CRL non verrà utilizzato a causa di un'estensione critica " +"sconosciuta!\n" msgid " ERROR: The CRL will not be used\n" -msgstr "" +msgstr " ERRORE: il CRL non verrà utilizzato\n" msgid " ERROR: This cached CRL may have been tampered with!\n" msgstr "" +" ERRORE: questo CRL memorizzato nella cache potrebbe essere stato " +"manomesso!\n" -#, fuzzy, c-format -#| msgid "WARNING: invalid size of random_seed file - not used\n" +#, c-format msgid " WARNING: invalid cache record length\n" -msgstr "" -"ATTENZIONE: le dimensioni del file random_seed non sono valide - non usato\n" +msgstr " AVVISO: lunghezza del record della cache non valida\n" -#, fuzzy, c-format +#, c-format msgid "problem reading cache record: %s\n" -msgstr "%s: errore durante la lettura del record libero: %s\n" +msgstr "problema durante la lettura del record della cache: %s\n" -#, fuzzy, c-format +#, c-format msgid "problem reading cache key: %s\n" -msgstr "rev? problema controllando la revoca: %s\n" +msgstr "problema durante la lettura della chiave della cache: %s\n" -#, fuzzy, c-format +#, c-format msgid "error reading cache entry from db: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura della voce della cache dal database: %s\n" msgid "End CRL dump\n" -msgstr "" +msgstr "Fine dump CRL\n" -#, fuzzy, c-format +#, c-format msgid "crl_fetch via DP failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "crl_fetch tramite DP non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "crl_cache_insert via DP failed: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "crl_cache_insert tramite DP non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "crl_cache_insert via issuer failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "crl_cache_insert tramite autorità emittente non riuscita: %s\n" #, c-format msgid "reader to file mapping table full - waiting\n" -msgstr "" +msgstr "lettore alla tabella di mapping file piena - in attesa\n" #, c-format msgid "CRL access not possible due to disabled %s\n" -msgstr "" +msgstr "Accesso CRL non possibile a causa della disabilitata di %s\n" -#, fuzzy, c-format +#, c-format msgid "error retrieving '%s': %s\n" -msgstr "errore creando `%s': %s\n" +msgstr "errore durante il recupero di '%s': %s\n" -#, fuzzy, c-format -#| msgid "%s: error writing dir record: %s\n" +#, c-format msgid "error initializing reader object: %s\n" -msgstr "%s: errore durante la scrittura del dir record: %s\n" +msgstr "errore durante l'inizializzazione dell'oggetto lettore: %s\n" -#, fuzzy, c-format +#, c-format msgid "CRL access not possible due to Tor mode\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "Accesso CRL non possibile a causa della modalità Tor\n" -#, fuzzy, c-format +#, c-format msgid "certificate search not possible due to disabled %s\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "" +"ricerca del certificato non possibile a causa della disabilitata di %s\n" msgid "use OCSP instead of CRLs" -msgstr "" +msgstr "utilizzare OCSP anziché CRL" msgid "check whether a dirmngr is running" -msgstr "" +msgstr "controllare se un dirmngr è in esecuzione" -#, fuzzy msgid "add a certificate to the cache" -msgstr "Certificato di revoca creato.\n" +msgstr "aggiungere un certificato alla cache" -#, fuzzy msgid "validate a certificate" -msgstr "certificato danneggiato" +msgstr "convalidare un certificato" -#, fuzzy msgid "lookup a certificate" -msgstr "certificato danneggiato" +msgstr "ricerca di un certificato" -#, fuzzy msgid "lookup only locally stored certificates" -msgstr "certificato danneggiato" +msgstr "ricerca solo di certificati archiviati localmente" msgid "expect an URL for --lookup" -msgstr "" +msgstr "previsto un URL per --lookup" msgid "load a CRL into the dirmngr" -msgstr "" +msgstr "caricare un CRL nel dirmngr" msgid "special mode for use by Squid" -msgstr "" +msgstr "modalità speciale per l'uso da parte di Squid" -#, fuzzy msgid "expect certificates in PEM format" -msgstr "certificato danneggiato" +msgstr "prevedere certificati in formato PEM" -#, fuzzy -#| msgid "Enter the user ID of the designated revoker: " msgid "force the use of the default OCSP responder" -msgstr "Inserisci l'user ID del revocatore designato: " +msgstr "forzare l'uso del risponditore OCSP predefinito" -#, fuzzy -#| msgid "Usage: gpg [options] [files] (-h for help)" msgid "Usage: dirmngr-client [options] [certfile|pattern] (-h for help)\n" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "" +"Utilizzo: dirmngr-client [opzioni] [certfile-pattern] (-h per assistenza)\n" msgid "" "Syntax: dirmngr-client [options] [certfile|pattern]\n" @@ -8150,993 +7940,954 @@ msgid "" "The process returns 0 if the certificate is valid, 1 if it is\n" "not valid and other error codes for general failures\n" msgstr "" +"Sintassi: dirmngr-client [opzioni] [certfile-pattern]\n" +"Testare un certificato X.509 rispetto a un CRL o eseguire un controllo OCSP\n" +"Il processo restituisce 0 se il certificato è valido, 1 se è\n" +"non validi e altri codici di errore per gli errori generali\n" -#, fuzzy, c-format +#, c-format msgid "error reading certificate from stdin: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante la lettura del certificato da stdin: %s\n" -#, fuzzy, c-format +#, c-format msgid "error reading certificate from '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura del certificato da '%s': %s\n" #, c-format msgid "certificate too large to make any sense\n" -msgstr "" +msgstr "certificato troppo grande per avere un senso\n" -#, fuzzy, c-format -#| msgid "can't connect to `%s': %s\n" +#, c-format msgid "can't connect to the dirmngr: %s\n" -msgstr "impossibile connettersi a `%s': %s\n" +msgstr "impossibile connettersi al dirmngr: %s\n" -#, fuzzy, c-format -#| msgid "update failed: %s\n" +#, c-format msgid "lookup failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "ricerca non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "loading CRL '%s' failed: %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "caricamento CRL '%s' non riuscito: %s\n" #, c-format msgid "a dirmngr daemon is up and running\n" -msgstr "" +msgstr "un daemon dirmngr è in funzione\n" -#, fuzzy, c-format +#, c-format msgid "validation of certificate failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "convalida del certificato non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "certificate is valid\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "catena di certificati valida\n" -#, fuzzy, c-format +#, c-format msgid "certificate has been revoked\n" -msgstr "NOTA: la chiave è stata revocata" +msgstr "certificato è stato revocato\n" -#, fuzzy, c-format +#, c-format msgid "certificate check failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "controllo del certificato non riuscito: %s\n" -#, fuzzy, c-format -#| msgid "can't stat `%s': %s\n" +#, c-format msgid "got status: '%s'\n" -msgstr "impossibile eseguire stat su `%s': %s\n" +msgstr "stato ottenuto: '%s'\n" -#, fuzzy, c-format -#| msgid "error writing secret keyring `%s': %s\n" +#, c-format msgid "error writing base64 encoding: %s\n" -msgstr "errore scrivendo il portachiavi segreto `%s': %s\n" +msgstr "errore durante la scrittura della codifica base64: %s\n" -#, fuzzy, c-format +#, c-format msgid "unsupported inquiry '%s'\n" -msgstr "" -"\n" -"Algoritmi gestiti:\n" +msgstr "richiesta '%s' non supportata\n" #, c-format msgid "absolute file name expected\n" -msgstr "" +msgstr "previsto nome file assoluto\n" #, c-format msgid "looking up '%s'\n" -msgstr "" +msgstr "ricerca di '%s'\n" msgid "list the contents of the CRL cache" -msgstr "" +msgstr "elencare il contenuto della cache CRL" -#, fuzzy msgid "|FILE|load CRL from FILE into cache" -msgstr "|FILE|carica il modulo di estensione FILE" +msgstr "|FILE|carica CRL da FILE nella cache" msgid "|URL|fetch a CRL from URL" -msgstr "" +msgstr "|URL|recupero di un CRL dall'URL" msgid "shutdown the dirmngr" -msgstr "" +msgstr "arrestare il dirmngr" msgid "flush the cache" -msgstr "" +msgstr "svuotare la cache" msgid "|FILE|write server mode logs to FILE" -msgstr "" +msgstr "|FILE|scrittura dei registri in modalità server in FILE" -#, fuzzy msgid "run without asking a user" -msgstr "Esco senza salvare? " +msgstr "eseguire senza chiedere a un utente" msgid "force loading of outdated CRLs" -msgstr "" +msgstr "forzare il caricamento di CRL obsoleti" msgid "allow sending OCSP requests" -msgstr "" +msgstr "consentire l'invio di richieste OCSP" msgid "allow online software version check" -msgstr "" +msgstr "consentire il controllo della versione del software online" msgid "inhibit the use of HTTP" -msgstr "" +msgstr "inibire l'uso di HTTP" msgid "inhibit the use of LDAP" -msgstr "" +msgstr "inibire l'uso di LDAP" msgid "ignore HTTP CRL distribution points" -msgstr "" +msgstr "ignorare i punti di distribuzione CRL HTTP" msgid "ignore LDAP CRL distribution points" -msgstr "" +msgstr "ignorare i punti di distribuzione CRL LDAP" msgid "ignore certificate contained OCSP service URLs" -msgstr "" +msgstr "ignorare gli URL del servizio OCSP contenuti nel certificato" msgid "|URL|redirect all HTTP requests to URL" -msgstr "" +msgstr "|URL|reindirizza tutte le richieste HTTP all'URL" msgid "|HOST|use HOST for LDAP queries" -msgstr "" +msgstr "|HOST|utilizzare HOST per le query LDAP" msgid "do not use fallback hosts with --ldap-proxy" -msgstr "" +msgstr "non utilizzare host di fallback con --ldap-proxy" -#, fuzzy msgid "|FILE|read LDAP server list from FILE" -msgstr "|FILE|carica il modulo di estensione FILE" +msgstr "|FILE|lettura dell'elenco dei server LDAP da FILE" msgid "add new servers discovered in CRL distribution points to serverlist" msgstr "" +"aggiungere nuovi server individuati nei punti di distribuzione CRL " +"all'elenco dei server" msgid "|N|set LDAP timeout to N seconds" -msgstr "" +msgstr "|N|imposta il timeout LDAP su N secondi" -#, fuzzy msgid "|URL|use OCSP responder at URL" -msgstr "impossibile fare il parsing dell'URI del keyserver\n" +msgstr "|URL|utilizzare risponditore OCSP all'URL" msgid "|FPR|OCSP response signed by FPR" -msgstr "" +msgstr "|FPR|Risposta OCSP firmata da FPR" msgid "|N|do not return more than N items in one query" -msgstr "" +msgstr "|N|Non restituire più di N elementi in una query" msgid "|FILE|use the CA certificates in FILE for HKP over TLS" -msgstr "" +msgstr "|FILE|utilizzare i certificati CA in FILE per HKP su TLS" msgid "route all network traffic via Tor" -msgstr "" +msgstr "instradare tutto il traffico di rete tramite Tor" -#, fuzzy -#| msgid "" -#| "@\n" -#| "(See the man page for a complete listing of all commands and options)\n" msgid "" "@\n" "(See the \"info\" manual for a complete listing of all commands and " "options)\n" msgstr "" "@\n" -"(Vedi la man page per una lista completa di tutti i comandi e opzioni)\n" +"(Vedere il manuale \"info\" per un elenco completo di tutti i comandi e le " +"opzioni)\n" -#, fuzzy msgid "Usage: @DIRMNGR@ [options] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: @DIRMNGR@ [opzioni] (-h per assistenza)" msgid "" "Syntax: @DIRMNGR@ [options] [command [args]]\n" "Keyserver, CRL, and OCSP access for @GNUPG@\n" msgstr "" +"Sintassi: @DIRMNGR@ [opzioni] [comando [args]]\n" +"Accesso keyserver, CRL e OCSP per @GNUPG@\n" #, c-format msgid "valid debug levels are: %s\n" -msgstr "" +msgstr "i livelli di debug validi sono: %s\n" -#, fuzzy, c-format +#, c-format msgid "usage: %s [options] " -msgstr "uso: gpg [opzioni] " +msgstr "utilizzo: %s [opzioni] " -#, fuzzy, c-format -#| msgid "%s not allowed with %s!\n" +#, c-format msgid "colons are not allowed in the socket name\n" -msgstr "Non è permesso usare %s con %s!\n" +msgstr "due punti non sono consentiti nel nome del socket\n" -#, fuzzy, c-format +#, c-format msgid "fetching CRL from '%s' failed: %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "recupero CRL da '%s' non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "processing CRL from '%s' failed: %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "elaborazione CRL da '%s' non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "%s:%u: line too long - skipped\n" -msgstr "riga troppo lunga\n" +msgstr "%s:%u: riga troppo lunga - ignorata\n" -#, fuzzy, c-format +#, c-format msgid "%s:%u: invalid fingerprint detected\n" -msgstr "errore: impronta digitale non valida\n" +msgstr "%s:%u: rilevata impronta digitale non valida\n" -#, fuzzy, c-format +#, c-format msgid "%s:%u: read error: %s\n" -msgstr "errore di lettura: %s\n" +msgstr "%s: %u: errore di lettura: %s\n" #, c-format msgid "%s:%u: garbage at end of line ignored\n" -msgstr "" +msgstr "%s: %u: Garbage alla fine della riga ignorato\n" #, c-format msgid "SIGHUP received - re-reading configuration and flushing caches\n" msgstr "" +"SIGHUP ricevuto - rilezione delle cache di configurazione e svuotamento\n" #, c-format msgid "SIGUSR2 received - no action defined\n" -msgstr "" +msgstr "SIGUSR2 ricevuto - nessuna azione definita\n" #, c-format msgid "SIGTERM received - shutting down ...\n" -msgstr "" +msgstr "SIGTERM ricevuto - arresto …\n" #, c-format msgid "SIGTERM received - still %d active connections\n" -msgstr "" +msgstr "SIGTERM ricevuto - connessioni ancora %d attive\n" -# ??? (Md) -#, fuzzy, c-format +#, c-format msgid "shutdown forced\n" -msgstr "non esaminato" +msgstr "arresto forzato\n" #, c-format msgid "SIGINT received - immediate shutdown\n" -msgstr "" +msgstr "SIGINT ricevuto - arresto immediato\n" #, c-format msgid "signal %d received - no action defined\n" -msgstr "" +msgstr "segnale %d ricevuto - nessuna azione definita\n" msgid "return all values in a record oriented format" -msgstr "" +msgstr "restituire tutti i valori in un formato orientato ai record" msgid "|NAME|ignore host part and connect through NAME" -msgstr "" +msgstr "|NOME|Ignorare la parte host e connettersi tramite NOME" -#, fuzzy -#| msgid "|NAME|set terminal charset to NAME" msgid "|NAME|connect to host NAME" -msgstr "|NOME|imposta NOME come set di caratteri del terminale" +msgstr "Nome:connessione all'host NOME" msgid "|N|connect to port N" -msgstr "" +msgstr "|N|Connessione alla porta N" -#, fuzzy -#| msgid "|NAME|use NAME as default recipient" msgid "|NAME|use user NAME for authentication" -msgstr "|NOME|usa NOME come destinatario predefinito" +msgstr "Nome:utilizzare nome utente per l'autenticazione" msgid "|PASS|use password PASS for authentication" -msgstr "" +msgstr "|PASS|utilizzare la password PASS per l'autenticazione" msgid "take password from $DIRMNGR_LDAP_PASS" -msgstr "" +msgstr "prendere la password da $DIRMNGR_LDAP_PASS" msgid "|STRING|query DN STRING" -msgstr "" +msgstr "|STRINGA|stringa DN query" msgid "|STRING|use STRING as filter expression" -msgstr "" +msgstr "| STRINGA: utilizzare STRING come espressione di filtro" msgid "|STRING|return the attribute STRING" -msgstr "" +msgstr "| STRINGA: restituisce l'attributo STRING" -#, fuzzy -#| msgid "Usage: gpg [options] [files] (-h for help)" msgid "Usage: dirmngr_ldap [options] [URL] (-h for help)\n" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: dirmngr_ldap [opzioni] [URL] (-h per assistenza)\n" msgid "" "Syntax: dirmngr_ldap [options] [URL]\n" "Internal LDAP helper for Dirmngr\n" "Interface and options may change without notice\n" msgstr "" +"Sintassi: dirmngr_ldap [opzioni] [URL]\n" +"Helper LDAP interno per Dirmngr\n" +"L'interfaccia e le opzioni possono cambiare senza preavviso\n" -#, fuzzy, c-format -#| msgid "invalid import options\n" +#, c-format msgid "invalid port number %d\n" -msgstr "opzioni di importazione non valide\n" +msgstr "numero di porta non valido %d\n" #, c-format msgid "scanning result for attribute '%s'\n" -msgstr "" +msgstr "risultato dell'analisi per l'attributo '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error writing to stdout: %s\n" -msgstr "errore scrivendo il portachiavi `%s': %s\n" +msgstr "errore durante la scrittura in stdout: %s\n" #, c-format msgid " available attribute '%s'\n" -msgstr "" +msgstr " attributo disponibile '%s'\n" -#, fuzzy, c-format +#, c-format msgid "attribute '%s' not found\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "attributo '%s' non trovato\n" #, c-format msgid "found attribute '%s'\n" -msgstr "" +msgstr "trovato attributo '%s'\n" -#, fuzzy, c-format -#| msgid "reading from `%s'\n" +#, c-format msgid "processing url '%s'\n" -msgstr "lettura da `%s'\n" +msgstr "elaborazione url '%s'\n" -#, fuzzy, c-format -#| msgid " w/o user IDs: %lu\n" +#, c-format msgid " user '%s'\n" -msgstr " senza user ID: %lu\n" +msgstr " utente '%s'\n" -#, fuzzy, c-format +#, c-format msgid " pass '%s'\n" -msgstr " alias \"" +msgstr " passare '%s'\n" -#, fuzzy, c-format +#, c-format msgid " host '%s'\n" -msgstr " alias \"" +msgstr " host '%s'\n" -#, fuzzy, c-format -#| msgid " not imported: %lu\n" +#, c-format msgid " port %d\n" -msgstr " importate: %lu\n" +msgstr " porta %d\n" -#, fuzzy, c-format +#, c-format msgid " DN '%s'\n" -msgstr " alias \"" +msgstr " DN '%s'\n" #, c-format msgid " filter '%s'\n" -msgstr "" +msgstr " filtro '%s'\n" -#, fuzzy, c-format +#, c-format msgid " attr '%s'\n" -msgstr " alias \"" +msgstr " attr '%s'\n" -#, fuzzy, c-format +#, c-format msgid "no host name in '%s'\n" -msgstr "(Non è stata data una descrizione)\n" +msgstr "nessun nome host in '%s'\n" #, c-format msgid "no attribute given for query '%s'\n" -msgstr "" +msgstr "nessun attributo specificato per la query '%s'\n" -#, fuzzy, c-format -#| msgid "WARNING: using insecure memory!\n" +#, c-format msgid "WARNING: using first attribute only\n" -msgstr "ATTENZIONE: si sta usando memoria insicura!\n" +msgstr "AVVISO: utilizzo solo del primo attributo\n" -#, fuzzy, c-format +#, c-format msgid "LDAP init to '%s:%d' failed: %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "Impossibile eseguire LDAP in '%s:%d': %s\n" -#, fuzzy, c-format +#, c-format msgid "binding to '%s:%d' failed: %s\n" -msgstr "creazione dell'armatura fallita: %s\n" +msgstr "binding a '%s:%d' non riuscito: %s\n" -#, fuzzy, c-format -#| msgid "dearmoring failed: %s\n" +#, c-format msgid "searching '%s' failed: %s\n" -msgstr "rimozione dell'armatura fallita: %s\n" +msgstr "ricerca '%s' non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "'%s' is not an LDAP URL\n" -msgstr "\"%s\": non è un file JPEG\n" +msgstr "'%s' non è un URL LDAP\n" #, c-format msgid "'%s' is an invalid LDAP URL\n" -msgstr "" +msgstr "'%s' è un URL LDAP non valido\n" -#, fuzzy, c-format +#, c-format msgid "error accessing '%s': http status %u\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'accesso a '%s': stato http %u\n" #, c-format msgid "URL '%s' redirected to '%s' (%u)\n" -msgstr "" +msgstr "URL '%s' reindirizzato a '%s' (%u)\n" -#, fuzzy, c-format +#, c-format msgid "too many redirections\n" -msgstr "ci sono troppe preferenze `%c'\n" +msgstr "troppi reindirizzamenti\n" -#, fuzzy, c-format -#| msgid "writing to `%s'\n" +#, c-format msgid "redirection changed to '%s'\n" -msgstr "scrittura in `%s'\n" +msgstr "reindirizzamento modificato in '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error printing log line: %s\n" -msgstr "errore scrivendo il portachiavi `%s': %s\n" +msgstr "errore durante la stampa della riga di registro: %s\n" -#, fuzzy, c-format +#, c-format msgid "error reading log from ldap wrapper %d: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura del registro dal wrapper ldap %d: %s\n" #, c-format msgid "ldap wrapper %d ready" -msgstr "" +msgstr "wrapper ldap %d pronto" #, c-format msgid "ldap wrapper %d ready: timeout\n" -msgstr "" +msgstr "wrapper ldap %d pronto: timeout\n" #, c-format msgid "ldap wrapper %d ready: exitcode=%d\n" -msgstr "" +msgstr "wrapper ldap %d pronto: exitcode:%d\n" -#, fuzzy, c-format +#, c-format msgid "waiting for ldap wrapper %d failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "in attesa del wrapper ldap %d non riuscito: %s\n" #, c-format msgid "ldap wrapper %d stalled - killing\n" -msgstr "" +msgstr "wrapper ldap %d bloccato - killing\n" #, c-format msgid "invalid char 0x%02x in host name - not added\n" -msgstr "" +msgstr "char non valido 0x%02x nel nome host - non aggiunto\n" -#, fuzzy, c-format +#, c-format msgid "adding '%s:%d' to the ldap server list\n" -msgstr "cerco \"%s\" sul server HKP %s\n" +msgstr "aggiunta di '%s:%d' all'elenco dei server ldap\n" -#, fuzzy, c-format +#, c-format msgid "malloc failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "malloc non riuscito: %s\n" #, c-format msgid "start_cert_fetch: invalid pattern '%s'\n" -msgstr "" +msgstr "start_cert_fetch: modello '%s' non valido\n" #, c-format msgid "ldap_search hit the size limit of the server\n" -msgstr "" +msgstr "ldap_search raggiunto il limite di dimensioni del server\n" -#, fuzzy, c-format -#| msgid "%s: invalid file version %d\n" +#, c-format msgid "invalid canonical S-expression found\n" -msgstr "%s: versione %d del file non valida\n" +msgstr "trovata espressione S canonica non valida\n" -#, fuzzy, c-format +#, c-format msgid "gcry_md_open failed: %s\n" -msgstr "impossibile aprire il file: %s\n" +msgstr "gcry_md_open non riuscito: %s\n" -#, fuzzy, c-format -#| msgid "update secret failed: %s\n" +#, c-format msgid "oops: ksba_cert_hash failed: %s\n" -msgstr "aggiornamento della chiave segreta fallito: %s\n" +msgstr "oops: ksba_cert_hash non riuscito: %s\n" #, c-format msgid "bad URL encoding detected\n" -msgstr "" +msgstr "rilevata codifica URL non valida\n" -#, fuzzy, c-format +#, c-format msgid "error reading from responder: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura dal risponditore: %s\n" #, c-format msgid "response from server too large; limit is %d bytes\n" -msgstr "" +msgstr "risposta dal server troppo grande; limite è %d byte\n" -#, fuzzy, c-format +#, c-format msgid "OCSP request not possible due to Tor mode\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "Richiesta OCSP non possibile a causa della modalità Tor\n" #, c-format msgid "OCSP request not possible due to disabled HTTP\n" -msgstr "" +msgstr "Richiesta OCSP non possibile a causa di HTTP disabilitato\n" -#, fuzzy, c-format +#, c-format msgid "error setting OCSP target: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'impostazione della destinazione OCSP: %s\n" -#, fuzzy, c-format +#, c-format msgid "error building OCSP request: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la creazione della richiesta OCSP: %s\n" -#, fuzzy, c-format +#, c-format msgid "error connecting to '%s': %s\n" -msgstr "errore scrivendo il portachiavi `%s': %s\n" +msgstr "errore durante la connessione a '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error reading HTTP response for '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura della risposta HTTP per '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "error parsing OCSP response for '%s': %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'analisi della risposta OCSP per '%s': %s\n" #, c-format msgid "OCSP responder at '%s' status: %s\n" -msgstr "" +msgstr "Risponditore OCSP allo stato '%s': %s\n" #, c-format msgid "failed to establish a hashing context for OCSP: %s\n" -msgstr "" +msgstr "impossibile stabilire un contesto di hashing per OCSP: %s\n" -#, fuzzy, c-format +#, c-format msgid "hashing the OCSP response for '%s' failed: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "hash della risposta OCSP per '%s' non riuscito: %s\n" #, c-format msgid "not signed by a default OCSP signer's certificate" -msgstr "" +msgstr "non firmato da un certificato del firmatario OCSP predefinito" -#, fuzzy, c-format +#, c-format msgid "allocating list item failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "allocazione della voce di elenco non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "error getting responder ID: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "errore durante il recupero dell'ID risponditore: %s\n" #, c-format msgid "no suitable certificate found to verify the OCSP response\n" msgstr "" +"non è stato trovato alcun certificato adatto per verificare la risposta " +"OCSP\n" -#, fuzzy, c-format +#, c-format msgid "issuer certificate not found: %s\n" -msgstr "chiave `%s' non trovata: %s\n" +msgstr "certificato dell'autorità emittente non trovato: %s\n" #, c-format msgid "caller did not return the target certificate\n" -msgstr "" +msgstr "chiamante non ha restituito il certificato di destinazione\n" -#, fuzzy, c-format +#, c-format msgid "caller did not return the issuing certificate\n" -msgstr "genera un certificato di revoca" +msgstr "chiamante non ha restituito il certificato di emissione\n" -#, fuzzy, c-format +#, c-format msgid "failed to allocate OCSP context: %s\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "impossibile allocare il contesto OCSP: %s\n" #, c-format msgid "no default OCSP responder defined\n" -msgstr "" +msgstr "nessun risponditore OCSP predefinito definito\n" -#, fuzzy, c-format -#| msgid "no default secret keyring: %s\n" +#, c-format msgid "no default OCSP signer defined\n" -msgstr "nessun portachiavi segreto predefinito: %s\n" +msgstr "nessun firmatario OCSP predefinito definito\n" #, c-format msgid "using default OCSP responder '%s'\n" -msgstr "" +msgstr "utilizzando il risponditore OCSP predefinito '%s'\n" -#, fuzzy, c-format -#| msgid "using cipher %s\n" +#, c-format msgid "using OCSP responder '%s'\n" -msgstr "uso il cifrario %s\n" +msgstr "utilizzo del risponditore OCSP '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error getting OCSP status for target certificate: %s\n" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "" +"errore durante il recupero dello stato OCSP per il certificato di " +"destinazione: %s\n" #, c-format msgid "certificate status is: %s (this=%s next=%s)\n" -msgstr "" +msgstr "lo stato del certificato è: %s (questo: %s successivo= %s)\n" msgid "good" -msgstr "" +msgstr "buono" -#, fuzzy, c-format +#, c-format msgid "certificate has been revoked at: %s due to: %s\n" -msgstr "NOTA: la chiave è stata revocata" +msgstr "il certificato è stato revocato alle: %s a causa di: %s\n" #, c-format msgid "OCSP responder returned a status in the future\n" -msgstr "" +msgstr "Il risponditore OCSP ha restituito uno stato in futuro\n" #, c-format msgid "OCSP responder returned a non-current status\n" -msgstr "" +msgstr "Il risponditore OCSP ha restituito uno stato non corrente\n" #, c-format msgid "OCSP responder returned an too old status\n" -msgstr "" +msgstr "Il risponditore OCSP ha restituito uno stato troppo vecchio\n" -#, fuzzy, c-format +#, c-format msgid "assuan_inquire(%s) failed: %s\n" -msgstr "firma fallita: %s\n" +msgstr "assuan_inquire(%s) non riuscito: %s\n" msgid "ldapserver missing" -msgstr "" +msgstr "ldapserver mancante" msgid "serialno missing in cert ID" -msgstr "" +msgstr "serialno mancante nell'ID certificato" -#, fuzzy, c-format +#, c-format msgid "assuan_inquire failed: %s\n" -msgstr "firma fallita: %s\n" +msgstr "assuan_inquire non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "fetch_cert_by_url failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "fetch_cert_by_url non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "error sending data: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'invio dei dati: %s\n" -#, fuzzy, c-format +#, c-format msgid "start_cert_fetch failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "start_cert_fetch non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "fetch_next_cert failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "fetch_next_cert non riuscito: %s\n" #, c-format msgid "max_replies %d exceeded\n" -msgstr "" +msgstr "max_replies %d superato\n" -#, fuzzy, c-format +#, c-format msgid "can't allocate control structure: %s\n" -msgstr "impossibile creare `%s': %s\n" +msgstr "impossibile allocare la struttura di controllo: %s\n" -#, fuzzy, c-format +#, c-format msgid "failed to allocate assuan context: %s\n" -msgstr "%s: creazione della tabella hash fallita: %s\n" +msgstr "impossibile allocare il contesto assuan: %s\n" -#, fuzzy, c-format -#| msgid "failed to initialize the TrustDB: %s\n" +#, c-format msgid "failed to initialize the server: %s\n" -msgstr "inizializzazione del trustdb fallita: %s\n" +msgstr "impossibile inizializzare il server: %s\n" -#, fuzzy, c-format +#, c-format msgid "failed to the register commands with Assuan: %s\n" -msgstr "rebuild della cache del portachiavi fallito: %s\n" +msgstr "impossibile eseguire i comandi di registro con Assuan: %s\n" #, c-format msgid "Assuan accept problem: %s\n" -msgstr "" +msgstr "Problema di accettazione assuan: %s\n" -#, fuzzy, c-format -#| msgid "signing failed: %s\n" +#, c-format msgid "Assuan processing failed: %s\n" -msgstr "firma fallita: %s\n" +msgstr "Elaborazione Assuan non riuscita: %s\n" #, c-format msgid "accepting root CA not marked as a CA" -msgstr "" +msgstr "accettazione della CA principale non contrassegnata come CA" -#, fuzzy, c-format -#| msgid "checking the trustdb\n" +#, c-format msgid "CRL checking too deeply nested\n" -msgstr "controllo il trustdb\n" +msgstr "Controllo CRL troppo profondo\n" msgid "not checking CRL for" -msgstr "" +msgstr "non controlla CRL per" -#, fuzzy msgid "checking CRL for" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "controllo CRL per" -#, fuzzy, c-format +#, c-format msgid "selfsigned certificate has a BAD signature" -msgstr "verifica una firma" +msgstr "certificato autofirmato ha una firma BAD" -#, fuzzy, c-format +#, c-format msgid "checking trustworthiness of root certificate failed: %s\n" -msgstr "controllo della firma creata fallito: %s\n" +msgstr "controllo dell'affidabilità del certificato radice non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "certificate chain is good\n" -msgstr "la preferenza %c%lu è doppia\n" +msgstr "catena di certificati è buono\n" #, c-format msgid "certificate should not have been used for CRL signing\n" -msgstr "" +msgstr "certificato non deve essere stato utilizzato per la firma CRL\n" -#, fuzzy msgid "quiet" -msgstr "quit" +msgstr "tranquilla" msgid "print data out hex encoded" -msgstr "" +msgstr "stampare i dati esendo codificati" msgid "decode received data lines" -msgstr "" +msgstr "decodificare le righe di dati ricevute" msgid "connect to the dirmngr" -msgstr "" +msgstr "collegare al dirmngr" msgid "|NAME|connect to Assuan socket NAME" -msgstr "" +msgstr "|NAME|connessione al socket Assuan NOME" msgid "|ADDR|connect to Assuan server at ADDR" -msgstr "" +msgstr "|ADDR|connessione al server Assuan presso ADDR" msgid "run the Assuan server given on the command line" -msgstr "" +msgstr "eseguire il server Assuan specificato sulla riga di comando" msgid "do not use extended connect mode" -msgstr "" +msgstr "non utilizzare la modalità di connessione estesa" -#, fuzzy msgid "|FILE|run commands from FILE on startup" -msgstr "|FILE|carica il modulo di estensione FILE" +msgstr "|FILE|esegui comandi da FILE all'avvio" msgid "run /subst on startup" -msgstr "" +msgstr "eseguire /subst all'avvio" -#, fuzzy msgid "Usage: @GPG@-connect-agent [options] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: @GPG@-connect-agent [opzioni] (-h per assistenza)" msgid "" "Syntax: @GPG@-connect-agent [options]\n" "Connect to a running agent and send commands\n" msgstr "" +"Sintassi: @GPG@-connect-agent [opzioni]\n" +"Connettersi a un agente in esecuzione e inviare comandi\n" #, c-format msgid "option \"%s\" requires a program and optional arguments\n" -msgstr "" +msgstr "l'opzione \"%s\" richiede un programma e argomenti facoltativi\n" #, c-format msgid "option \"%s\" ignored due to \"%s\"\n" -msgstr "" +msgstr "opzione \"%s\" ignorata a causa di \"%s\"\n" -#, fuzzy, c-format +#, c-format msgid "receiving line failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "linea di ricezione non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "line too long - skipped\n" -msgstr "riga troppo lunga\n" +msgstr "linea troppo lunga - saltata\n" #, c-format msgid "line shortened due to embedded Nul character\n" -msgstr "" +msgstr "linea accorciata a causa del carattere Nul incorporato\n" -#, fuzzy, c-format +#, c-format msgid "unknown command '%s'\n" -msgstr "destinatario predefinito `%s' sconosciuto\n" +msgstr "comando sconosciuto '%s'\n" -#, fuzzy, c-format +#, c-format msgid "sending line failed: %s\n" -msgstr "firma fallita: %s\n" +msgstr "riga di invio non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "error sending standard options: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'invio delle opzioni standard: %s\n" msgid "Options controlling the diagnostic output" -msgstr "" +msgstr "Opzioni che controllano l'output diagnostico" msgid "Options controlling the configuration" -msgstr "" +msgstr "Opzioni che controllano la configurazione" msgid "Options useful for debugging" -msgstr "" +msgstr "Opzioni utili per il debug" msgid "Options controlling the security" -msgstr "" +msgstr "Opzioni che controllano la sicurezza" msgid "|N|expire SSH keys after N seconds" -msgstr "" +msgstr "|N|Chiavi SSH di N-scadenza dopo N secondi" msgid "|N|set maximum PIN cache lifetime to N seconds" -msgstr "" +msgstr "|N|imposta la durata massima della cache del PIN su N secondi" msgid "|N|set maximum SSH key lifetime to N seconds" -msgstr "" +msgstr "|N|set durata massima del tasto SSH su N secondi" msgid "Options enforcing a passphrase policy" -msgstr "" +msgstr "Opzioni che applicano un criterio di passphrase" msgid "do not allow bypassing the passphrase policy" -msgstr "" +msgstr "non consentire l'esclusione dei criteri di passphrase" msgid "|N|set minimal required length for new passphrases to N" -msgstr "" +msgstr "|N|Lunghezza minima richiesta per le nuove passphrase su N" msgid "|N|require at least N non-alpha characters for a new passphrase" -msgstr "" +msgstr "|N|Per una nuova passphrase è necessario almeno N caratteri non alfa" msgid "|FILE|check new passphrases against pattern in FILE" -msgstr "" +msgstr "|FILE||controlla le nuove passphrase rispetto al modello in FILE" -#, fuzzy msgid "|N|expire the passphrase after N days" -msgstr "|N|usa il modo N per la passphrase" +msgstr "| La passphrase dopo N giorni" -#, fuzzy msgid "do not allow the reuse of old passphrases" -msgstr "errore nella creazione della passhprase: %s\n" +msgstr "non consentono il riutilizzo di vecchie passphrase" msgid "|N|set the Pinentry timeout to N seconds" -msgstr "" +msgstr "|N|Il timeout di Pinentry è impostato su N secondi" msgid "|NAME|use NAME as default secret key" -msgstr "|NOME|usa NOME come chiave segreta predefinita" +msgstr "|NAME|usa NAME come chiave segreta predefinita" -#, fuzzy msgid "|NAME|encrypt to user ID NAME as well" -msgstr "|NOME|cifra per NOME" +msgstr "Anche nome-crittografare all'ID utente NOME" msgid "|SPEC|set up email aliases" -msgstr "" +msgstr "|SPEC|configurare gli alias di posta elettronica" msgid "Configuration for Keyservers" -msgstr "" +msgstr "Configurazione per Keyservers" -#, fuzzy msgid "|URL|use keyserver at URL" -msgstr "impossibile fare il parsing dell'URI del keyserver\n" +msgstr "| URL: utilizzare keyserver all'URL" msgid "allow PKA lookups (DNS requests)" -msgstr "" +msgstr "consentire ricerche PKA (richieste DNS)" msgid "|MECHANISMS|use MECHANISMS to locate keys by mail address" msgstr "" +"|MECHANISMS|utilizzare MECHANISMS per individuare le chiavi in base " +"all'indirizzo di posta elettronica" -#, fuzzy -#| msgid "import keys from a keyserver" msgid "import missing key from a signature" -msgstr "importa le chiavi da un keyserver" +msgstr "importare la chiave mancante da una firma" -#, fuzzy msgid "include the public key in signatures" -msgstr "controlla le firme delle chiavi" +msgstr "includere la chiave pubblica nelle firme" msgid "disable all access to the dirmngr" -msgstr "" +msgstr "disabilitare tutti gli accessi al dirmngr" -#, fuzzy msgid "|NAME|use encoding NAME for PKCS#12 passphrases" -msgstr "|NOME|usa l'alg. di cifratura NOME per le passphrase" +msgstr "Nome: utilizzare il nome di codifica per le passphrase PKCS-12" msgid "do not check CRLs for root certificates" -msgstr "" +msgstr "non controllare i certificati radice nei CRL" msgid "Options controlling the format of the output" -msgstr "" +msgstr "Opzioni che controllano il formato dell'output" msgid "Options controlling the interactivity and enforcement" -msgstr "" +msgstr "Opzioni che controllano l'interattività e l'applicazione" msgid "Options controlling the use of Tor" -msgstr "" +msgstr "Opzioni che controllano l'uso di Tor" msgid "Configuration for HTTP servers" -msgstr "" +msgstr "Configurazione per i server HTTP" msgid "use system's HTTP proxy setting" -msgstr "" +msgstr "utilizzare l'impostazione proxy HTTP del sistema" msgid "Configuration of LDAP servers to use" -msgstr "" +msgstr "Configurazione dei server LDAP da utilizzare" msgid "LDAP server list" -msgstr "" +msgstr "Elenco server LDAP" msgid "Configuration for OCSP" -msgstr "" +msgstr "Configurazione per OCSP" msgid "OpenPGP" -msgstr "" +msgstr "OpenPGP" msgid "Private Keys" -msgstr "" +msgstr "Chiavi private" msgid "Smartcards" -msgstr "" +msgstr "Smartcard" msgid "S/MIME" -msgstr "" +msgstr "S/MIME" -#, fuzzy -#| msgid "network error" msgid "Network" -msgstr "errore di rete" +msgstr "Rete" -#, fuzzy msgid "Passphrase Entry" -msgstr "passphrase errata" +msgstr "Voce passphrase" -#, fuzzy msgid "Component not suitable for launching" -msgstr "chiave pubblica non trovata" +msgstr "Componente non adatto per il lancio" #, c-format msgid "Configuration file of component %s is broken\n" -msgstr "" +msgstr "Il file di configurazione del componente %s è interrotto\n" -#, fuzzy, c-format -#| msgid "Please use the command \"toggle\" first.\n" +#, c-format msgid "Note: Use the command \"%s%s\" to get details.\n" -msgstr "Per favore usa prima il comando \"toggle\".\n" +msgstr "Nota: utilizzare il comando \"%s%s\" per ottenere i dettagli.\n" #, c-format msgid "External verification of component %s failed" -msgstr "" +msgstr "Verifica esterna del componente %s non riuscita" msgid "Note that group specifications are ignored\n" -msgstr "" +msgstr "Si noti che le specifiche del gruppo vengono ignorate\n" -#, fuzzy, c-format +#, c-format msgid "error closing '%s'\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la chiusura di '%s'\n" -#, fuzzy, c-format +#, c-format msgid "error parsing '%s'\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante l'analisi di '%s'\n" msgid "list all components" -msgstr "" +msgstr "elencare tutti i componenti" msgid "check all programs" -msgstr "" +msgstr "controllare tutti i programmi" msgid "|COMPONENT|list options" -msgstr "" +msgstr "|COMPONENT|opzioni di elenco" msgid "|COMPONENT|change options" -msgstr "" +msgstr "|COMPONENT|modifica delle opzioni" msgid "|COMPONENT|check options" -msgstr "" +msgstr "|COMPONENT|Opzioni di controllo" msgid "apply global default values" -msgstr "" +msgstr "applicare valori predefiniti globali" msgid "|FILE|update configuration files using FILE" -msgstr "" +msgstr "|FILE|aggiornare i file di configurazione utilizzando FILE" msgid "get the configuration directories for @GPGCONF@" -msgstr "" +msgstr "ottenere le directory di configurazione per @GPGCONF @" -#, fuzzy msgid "list global configuration file" -msgstr "elemento della configurazione sconosciuto \"%s\"\n" +msgstr "file di configurazione globale dell'elenco" -#, fuzzy msgid "check global configuration file" -msgstr "elemento della configurazione sconosciuto \"%s\"\n" +msgstr "controllare il file di configurazione globale" -#, fuzzy -#| msgid "update the trust database" msgid "query the software version database" -msgstr "aggiorna il database della fiducia" +msgstr "interrogare il database delle versioni software" msgid "reload all or a given component" -msgstr "" +msgstr "ricaricare tutto o un determinato componente" msgid "launch a given component" -msgstr "" +msgstr "lanciare un determinato componente" msgid "kill a given component" -msgstr "" +msgstr "uccidere un determinato componente" msgid "use as output file" msgstr "usa come file di output" msgid "activate changes at runtime, if possible" -msgstr "" +msgstr "attivare le modifiche in fase di esecuzione, se possibile" -#, fuzzy msgid "Usage: @GPGCONF@ [options] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: @GPGCONF@ [opzioni] (-h per assistenza)" msgid "" "Syntax: @GPGCONF@ [options]\n" "Manage configuration options for tools of the @GNUPG@ system\n" msgstr "" +"Sintassi: @GPGCONF@ [opzioni]\n" +"Gestire le opzioni di configurazione per gli strumenti del @GNUPG@ sistema\n" msgid "Need one component argument" -msgstr "" +msgstr "È necessario un argomento componente" -#, fuzzy msgid "Component not found" -msgstr "chiave pubblica non trovata" +msgstr "Componente non trovato" -#, fuzzy msgid "No argument allowed" -msgstr "scrittura della chiave segreta in `%s'\n" +msgstr "Nessun argomento consentito" -#, fuzzy msgid "" "@\n" "Commands:\n" @@ -9145,2032 +8896,143 @@ msgstr "" "@Comandi:\n" " " -#, fuzzy msgid "decryption modus" -msgstr "decifratura corretta\n" +msgstr "modus di decrittazione" -#, fuzzy msgid "encryption modus" -msgstr "decifratura corretta\n" +msgstr "modus di crittografia" msgid "tool class (confucius)" -msgstr "" +msgstr "classe di utensili (confucio)" -#, fuzzy msgid "program filename" -msgstr "--store [nomefile]" +msgstr "nome file del programma" msgid "secret key file (required)" -msgstr "" +msgstr "file di chiave segreta (obbligatorio)" msgid "input file name (default stdin)" -msgstr "" +msgstr "nome del file di input (stdin predefinito)" -#, fuzzy msgid "Usage: symcryptrun [options] (-h for help)" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "Utilizzo: symcryptrun [opzioni] (-h per assistenza)" msgid "" "Syntax: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE " "[options...] COMMAND [inputfile]\n" "Call a simple symmetric encryption tool\n" msgstr "" +"Sintassi: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE " +"[opzioni...] COMANDO [file di input]\n" +"Chiamare un semplice strumento di crittografia simmetrica\n" -#, fuzzy, c-format +#, c-format msgid "%s on %s aborted with status %i\n" -msgstr "Non è permesso usare %s con %s!\n" +msgstr "%s su %s interrotto con stato %i\n" -#, fuzzy, c-format +#, c-format msgid "%s on %s failed with status %i\n" -msgstr "impossibile aprire il file: %s\n" +msgstr "%s su %s non riuscito con stato %i\n" -#, fuzzy, c-format +#, c-format msgid "can't create temporary directory '%s': %s\n" -msgstr "impossibile creare la directory `%s': %s\n" +msgstr "impossibile creare la directory temporanea '%s': %s\n" -#, fuzzy, c-format +#, c-format msgid "could not open %s for writing: %s\n" -msgstr "impossibile aprire `%s': %s\n" +msgstr "impossibile aprire %s per la scrittura: %s\n" -#, fuzzy, c-format +#, c-format msgid "error writing to %s: %s\n" -msgstr "errore scrivendo il portachiavi `%s': %s\n" +msgstr "errore durante la scrittura in %s: %s\n" -#, fuzzy, c-format +#, c-format msgid "error reading from %s: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la lettura da %s: %s\n" -#, fuzzy, c-format +#, c-format msgid "error closing %s: %s\n" -msgstr "errore leggendo `%s': %s\n" +msgstr "errore durante la chiusura di %s: %s\n" -#, fuzzy, c-format +#, c-format msgid "no --program option provided\n" -msgstr "l'esecuzione remota dei programmi non è gestita\n" +msgstr "no --opzione di programma fornita\n" #, c-format msgid "only --decrypt and --encrypt are supported\n" -msgstr "" +msgstr "solo --decrypt e --encrypt sono supportati\n" #, c-format msgid "no --keyfile option provided\n" -msgstr "" +msgstr "nessuna opzione --keyfile fornita\n" #, c-format msgid "cannot allocate args vector\n" -msgstr "" +msgstr "impossibile allocare il vettore args\n" -#, fuzzy, c-format +#, c-format msgid "could not create pipe: %s\n" -msgstr "impossibile creare %s: %s\n" +msgstr "impossibile creare la pipe: %s\n" -#, fuzzy, c-format +#, c-format msgid "could not create pty: %s\n" -msgstr "impossibile creare %s: %s\n" +msgstr "impossibile creare pty: %s\n" #, c-format msgid "could not fork: %s\n" -msgstr "" +msgstr "non poteva dividere: %s\n" -#, fuzzy, c-format +#, c-format msgid "execv failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "execv non riuscito: %s\n" -#, fuzzy, c-format +#, c-format msgid "select failed: %s\n" -msgstr "cancellazione del keyblock fallita: %s\n" +msgstr "selezione non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "read failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "lettura non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "pty read failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "lettura pty non riuscita: %s\n" -#, fuzzy, c-format +#, c-format msgid "waitpid failed: %s\n" -msgstr "aggiornamento fallito: %s\n" +msgstr "waitpid non riuscito: %s\n" #, c-format msgid "child aborted with status %i\n" -msgstr "" +msgstr "figlio interrotto con stato %i\n" -#, fuzzy, c-format +#, c-format msgid "cannot allocate infile string: %s\n" -msgstr "impossibile creare `%s': %s\n" +msgstr "impossibile allocare la stringa nel file: %s\n" -#, fuzzy, c-format +#, c-format msgid "cannot allocate outfile string: %s\n" -msgstr "impossibile creare `%s': %s\n" +msgstr "non può allocare la stringa del file di uscita: %s\n" #, c-format msgid "either %s or %s must be given\n" -msgstr "" +msgstr "e' necessario specificare %s o %s\n" #, c-format msgid "no class provided\n" -msgstr "" +msgstr "nessuna classe fornita\n" -#, fuzzy, c-format +#, c-format msgid "class %s is not supported\n" -msgstr "l'algoritmo di protezione %d%s non è gestito\n" +msgstr "la classe %s non è supportata\n" -#, fuzzy msgid "Usage: gpg-check-pattern [options] patternfile (-h for help)\n" -msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" +msgstr "" +"Utilizzo: gpg-check-pattern [opzioni] patternfile (-h per assistenza)\n" msgid "" "Syntax: gpg-check-pattern [options] patternfile\n" "Check a passphrase given on stdin against the patternfile\n" msgstr "" - -#, fuzzy -#~ msgid " using certificate ID 0x%08lX\n" -#~ msgstr "errore nella creazione della passhprase: %s\n" - -#, fuzzy -#~| msgid "you may not use %s while in %s mode\n" -#~ msgid "" -#~ "keyserver option \"honor-keyserver-url\" may not be used in Tor mode\n" -#~ msgstr "non è possibile usare %s in modalità %s\n" - -#, fuzzy -#~ msgid "male" -#~ msgstr "abilita" - -#, fuzzy -#~ msgid "female" -#~ msgstr "abilita" - -#, fuzzy -#~ msgid "unspecified" -#~ msgstr "Nessuna ragione specificata" - -#, fuzzy -#~ msgid "error creating 'ultimately_trusted_keys' TOFU table: %s\n" -#~ msgstr "errore nella creazione della passhprase: %s\n" - -#, fuzzy -#~ msgid "error creating 'encryptions' TOFU table: %s\n" -#~ msgstr "errore leggendo `%s': %s\n" - -#, fuzzy -#~ msgid "resetting keydb: %s\n" -#~ msgstr "errore scrivendo il portachiavi `%s': %s\n" - -#, fuzzy -#~ msgid "error setting TOFU binding's policy to %s\n" -#~ msgstr "errore leggendo `%s': %s\n" - -#, fuzzy -#~ msgid "%s: Verified %ld~signature in the past %s." -#~ msgid_plural "%s: Verified %ld~signatures in the past %s." -#~ msgstr[0] "|algo [files]|stampa tutti i message digests" -#~ msgstr[1] "|algo [files]|stampa tutti i message digests" - -#, fuzzy -#~ msgid "Encrypted %ld~message in the past %s." -#~ msgid_plural "Encrypted %ld~messages in the past %s." -#~ msgstr[0] "|algo [files]|stampa tutti i message digests" -#~ msgstr[1] "|algo [files]|stampa tutti i message digests" - -#, fuzzy -#~| msgid "error writing public keyring `%s': %s\n" -#~ msgid "error setting policy for key %s, user id \"%s\": %s" -#~ msgstr "errore scrivendo il portachiavi pubblico `%s': %s\n" - -#, fuzzy -#~ msgid "error looking up: %s\n" -#~ msgstr "errore leggendo `%s': %s\n" - -#, fuzzy -#~| msgid "error creating keyring `%s': %s\n" -#~ msgid "Warning: %s appears in the keyring %d times\n" -#~ msgstr "errore creando il portachiavi `%s': %s\n" - -#, fuzzy -#~ msgid "error retrieving '%s': http status %u\n" -#~ msgstr "errore leggendo `%s': %s\n" - -#, fuzzy -#~ msgid "npth_select failed: %s - waiting 1s\n" -#~ msgstr "aggiornamento della chiave segreta fallito: %s\n" - -#, fuzzy -#~ msgid "reading from ldap wrapper %d failed: %s\n" -#~ msgstr "cancellazione del keyblock fallita: %s\n" - -#, fuzzy -#~ msgid "What keysize do you want for the Signature key? (%u) " -#~ msgstr "Di che dimensioni vuoi la chiave? (1024) " - -#, fuzzy -#~ msgid "What keysize do you want for the Encryption key? (%u) " -#~ msgstr "Di che dimensioni vuoi la chiave? (1024) " - -#, fuzzy -#~ msgid "What keysize do you want for the Authentication key? (%u) " -#~ msgstr "Di che dimensioni vuoi la chiave? (1024) " - -#, fuzzy -#~ msgid "listen() failed: %s\n" -#~ msgstr "aggiornamento fallito: %s\n" - -#, fuzzy -#~| msgid "new configuration file `%s' created\n" -#~ msgid "new configuration file '%s' created\n" -#~ msgstr "creato un nuovo file di configurazione `%s'\n" - -#, fuzzy -#~| msgid "WARNING: options in `%s' are not yet active during this run\n" -#~ msgid "WARNING: options in '%s' are not yet active during this run\n" -#~ msgstr "" -#~ "ATTENZIONE: le opzioni in `%s' non sono ancora attive durante questa\n" -#~ "esecuzione del programma\n" - -#, fuzzy -#~| msgid "Key generation failed: %s\n" -#~ msgid "User ID revocation failed: %s\n" -#~ msgstr "Generazione della chiave fallita: %s\n" - -#, fuzzy -#~ msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" -#~ msgstr "cambia la passphrase" - -#~ msgid "DSA requires the use of a 160 bit hash algorithm\n" -#~ msgstr "DSA richiede l'uso di un algoritmo di hashing con almeno 160 bit\n" - -#~ msgid "--store [filename]" -#~ msgstr "--store [nomefile]" - -#~ msgid "--symmetric [filename]" -#~ msgstr "--symmetric [nomefile]" - -#~ msgid "--encrypt [filename]" -#~ msgstr "--encrypt [nomefile]" - -#, fuzzy -#~ msgid "--symmetric --encrypt [filename]" -#~ msgstr "--sign --encrypt [nomefile]" - -#~ msgid "--sign [filename]" -#~ msgstr "--sign [nomefile]" - -#~ msgid "--sign --encrypt [filename]" -#~ msgstr "--sign --encrypt [nomefile]" - -#, fuzzy -#~ msgid "--symmetric --sign --encrypt [filename]" -#~ msgstr "--sign --encrypt [nomefile]" - -#~ msgid "--sign --symmetric [filename]" -#~ msgstr "--sign --symmetric [nomefile]" - -#~ msgid "--clear-sign [filename]" -#~ msgstr "--clear-sign [nomefile]" - -#~ msgid "--decrypt [filename]" -#~ msgstr "--decrypt [nomefile]" - -#~ msgid "--sign-key user-id" -#~ msgstr "--sign-key user-id" - -#~ msgid "--lsign-key user-id" -#~ msgstr "--lsign-key user-id" - -#~ msgid "--edit-key user-id [commands]" -#~ msgstr "--edit-key user-id [comandi]" - -#, fuzzy -#~ msgid "--passwd <user-id>" -#~ msgstr "--sign-key user-id" - -#~ msgid "[filename]" -#~ msgstr "[nomefile]" - -#, fuzzy -#~ msgid "shadowing the key failed: %s\n" -#~ msgstr "cancellazione del keyblock fallita: %s\n" - -#, fuzzy -#~ msgid "available TOFU policies:\n" -#~ msgstr "disabilita una chiave" - -#, fuzzy -#~ msgid "%ld message signed" -#~ msgid_plural "%ld messages signed" -#~ msgstr[0] "|algo [files]|stampa tutti i message digests" -#~ msgstr[1] "|algo [files]|stampa tutti i message digests" - -#~ msgid "communication problem with gpg-agent\n" -#~ msgstr "problema di comunicazione con gpg-agent\n" - -#, fuzzy -#~ msgid "canceled by user\n" -#~ msgstr "interrotto dall'utente\n" - -#, fuzzy -#~ msgid "problem with the agent\n" -#~ msgstr "problema con l'agent: ha restituito 0x%lx\n" - -#, fuzzy -#~ msgid "problem with the agent (unexpected response \"%s\")\n" -#~ msgstr "problema con l'agent: ha restituito 0x%lx\n" - -#, fuzzy -#~ msgid "unknown TOFU DB format '%s'\n" -#~ msgstr "destinatario predefinito `%s' sconosciuto\n" - -#, fuzzy -#~ msgid "" -#~ "Please enter the passphrase to unlock the secret key for the OpenPGP " -#~ "certificate:\n" -#~ "\"%.*s\"\n" -#~ "%u-bit %s key, ID %s,\n" -#~ "created %s%s.\n" -#~ msgstr "" -#~ "Ti serve una passphrase per sbloccare la chiave segreta dell'utente:\n" -#~ "\"%.*s\"\n" -#~ "%u-bit %s key, ID %08lX, created %s%s\n" - -#, fuzzy -#~ msgid "" -#~ "You need a passphrase to unlock the secret key for\n" -#~ "user: \"%s\"\n" -#~ msgstr "" -#~ "\n" -#~ "Ti serve una passphrase per sbloccare la chiave segreta\n" -#~ "dell'utente: \"" - -#, fuzzy -#~ msgid "%u-bit %s key, ID %s, created %s" -#~ msgstr "chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s" - -#, fuzzy -#~| msgid "can't create directory `%s': %s\n" -#~ msgid "can't access directory '%s': %s\n" -#~ msgstr "impossibile creare la directory `%s': %s\n" - -#~ msgid "you found a bug ... (%s:%d)\n" -#~ msgstr "hai trovato un bug... (%s:%d)\n" - -#, fuzzy -#~| msgid "%d user IDs without valid self-signatures detected\n" -#~ msgid "%d user ID without valid self-signature detected\n" -#~ msgid_plural "%d user IDs without valid self-signatures detected\n" -#~ msgstr[0] "Trovati %d user ID senza autofirme valide\n" -#~ msgstr[1] "Trovati %d user ID senza autofirme valide\n" - -#~ msgid "moving a key signature to the correct place\n" -#~ msgstr "spostamento della firma di una chiave nel posto corretto\n" - -#~ msgid "%d signatures not checked due to missing keys\n" -#~ msgstr "%d firme non controllate per mancanza delle chiavi\n" - -#~ msgid "%d signatures not checked due to errors\n" -#~ msgstr "%d firme non controllate a causa di errori\n" - -#~ msgid "1 user ID without valid self-signature detected\n" -#~ msgstr "Trovato un user ID senza autofirma valida\n" - -#, fuzzy -#~ msgid "User ID \"%s\": %d signatures removed\n" -#~ msgstr "L'user ID \"%s\" è stato revocato." - -#~ msgid "" -#~ "You need a Passphrase to protect your secret key.\n" -#~ "\n" -#~ msgstr "" -#~ "Ti serve una passphrase per proteggere la tua chiave segreta.\n" -#~ "\n" - -#, fuzzy -#~ msgid "" -#~ "Please enter a passphrase to protect the off-card backup of the new " -#~ "encryption key." -#~ msgstr "Inserisci la passphrase, cioè una frase segreta \n" - -#~ msgid "passphrase not correctly repeated; try again" -#~ msgstr "passphrase non ripetuta correttamente; prova ancora" - -#~ msgid "%s.\n" -#~ msgstr "%s.\n" - -#~ msgid "" -#~ "You don't want a passphrase - this is probably a *bad* idea!\n" -#~ "I will do it anyway. You can change your passphrase at any time,\n" -#~ "using this program with the option \"--edit-key\".\n" -#~ "\n" -#~ msgstr "" -#~ "Non hai specificato una passphrase - questa è probabilmente una " -#~ "*cattiva*\n" -#~ "idea! Lo farò io comunque. Puoi cambiarla in ogni momento, usando questo\n" -#~ "programma con l'opzione \"--edit-key\".\n" -#~ "\n" - -#, fuzzy -#~ msgid "storing key onto card failed: %s\n" -#~ msgstr "cancellazione del keyblock fallita: %s\n" - -#, fuzzy -#~| msgid "1 bad signature\n" -#~ msgid "1 good signature\n" -#~ msgstr "una firma non corretta\n" - -#, fuzzy -#~ msgid "%lu keys cached (%lu signatures)\n" -#~ msgstr "Sono state controllate %lu chiavi (%lu firme)\n" - -#, fuzzy -#~ msgid "refreshing 1 key from %s\n" -#~ msgstr "richiedo la chiave %08lX a %s\n" - -#, fuzzy -#~ msgid "sending key %s to %s server %s\n" -#~ msgstr "cerco \"%s\" sul server HKP %s\n" - -#, fuzzy -#~ msgid "public key %s is %lu seconds newer than the signature\n" -#~ msgstr "la chiave pubblica %08lX è più recente della firma di %lu secondi\n" - -#, fuzzy -#~ msgid "" -#~ "key %s was created %lu seconds in the future (time warp or clock " -#~ "problem)\n" -#~ msgstr "" -#~ "la chiave è stata creata %lu secondi nel futuro (salto nel tempo o " -#~ "problema\n" -#~ "con l'orologio)\n" - -#, fuzzy -#~| msgid "can't open the keyring" -#~ msgid "Failed to open the keyring DB.\n" -#~ msgstr "impossibile aprire il portachiavi" - -#, fuzzy -#~ msgid "Failed to parse '%s'.\n" -#~ msgstr "impossibile aprire `%s': %s\n" - -#, fuzzy -#~ msgid "error looking up secret key \"%s\": %s\n" -#~ msgstr "errore leggendo il keyblock segreto `%s': %s\n" - -#, fuzzy -#~ msgid "Please select at most one subkey.\n" -#~ msgstr "Seleziona al massimo una chiave secondaria.\n" - -#, fuzzy -#~ msgid "malformed %s environment variable\n" -#~ msgstr "variabile di ambiente GPG_AGENT_INFO malformata\n" - -#, fuzzy -#~ msgid "dirmngr protocol version %d is not supported\n" -#~ msgstr "la versione %d del protocollo di gpg-agent non è gestita\n" - -#, fuzzy -#~ msgid "toggle between the secret and public key listings" -#~ msgstr "cambia tra visualizzare la chiave segreta e la chiave pubblica" - -#, fuzzy -#~ msgid "Passphrase" -#~ msgstr "passphrase errata" - -#, fuzzy -#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n" -#~ msgstr "" -#~ "ATTENZIONE: le opzioni in `%s' non sono ancora attive durante questa\n" -#~ "esecuzione del programma\n" - -#~ msgid "gpg-agent is not available in this session\n" -#~ msgstr "gpg-agent non è disponibile in questa sessione\n" - -#, fuzzy -#~ msgid "use a standard location for the socket" -#~ msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? " - -#, fuzzy -#~ msgid "Usage: gpg-agent [options] (-h for help)" -#~ msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" - -#~ msgid "malformed GPG_AGENT_INFO environment variable\n" -#~ msgstr "variabile di ambiente GPG_AGENT_INFO malformata\n" - -#~ msgid "gpg-agent protocol version %d is not supported\n" -#~ msgstr "la versione %d del protocollo di gpg-agent non è gestita\n" - -#, fuzzy -#~ msgid "can't fdopen pipe for reading: %s\n" -#~ msgstr "impossibile aprire il file: %s\n" - -#, fuzzy -#~ msgid "error creating socket: %s\n" -#~ msgstr "errore creando `%s': %s\n" - -#, fuzzy -#~ msgid "host not found" -#~ msgstr "[User ID non trovato]" - -#, fuzzy -#~ msgid "unknown key protection algorithm\n" -#~ msgstr "algoritmo di protezione sconosciuto\n" - -#, fuzzy -#~ msgid "secret parts of key are not available\n" -#~ msgstr "Parti della chiave segreta non sono disponibili.\n" - -#, fuzzy -#~ msgid "secret key already stored on a card\n" -#~ msgstr "saltata: chiave pubblica già presente\n" - -#, fuzzy -#~ msgid "error writing key to card: %s\n" -#~ msgstr "errore scrivendo il portachiavi `%s': %s\n" - -#~ msgid "" -#~ "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" -#~ msgstr "" -#~ "in modalità --pgp2 puoi cifrare solo per chiavi RSA non più lunghe di " -#~ "2048 bit\n" - -#~ msgid "" -#~ "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" -#~ msgstr "" -#~ "impossibile usare il cifrario IDEA con tutti i tipi di chiavi per cui\n" -#~ "stai cifrando.\n" - -#, fuzzy -#~ msgid "remove the passphrase from exported subkeys" -#~ msgstr "revoca una chiave secondaria" - -#, fuzzy -#~ msgid "key %s: not protected - skipped\n" -#~ msgstr "chiave %08lX: non protetta - saltata\n" - -#, fuzzy -#~ msgid "failed to unprotect the subkey: %s\n" -#~ msgstr "inizializzazione del trustdb fallita: %s\n" - -#, fuzzy -#~ msgid "WARNING: secret key %s does not have a simple SK checksum\n" -#~ msgstr "" -#~ "ATTENZIONE: la chiave segreta %08lX non ha un checksum SK semplice\n" - -#~ msgid "too many entries in pk cache - disabled\n" -#~ msgstr "troppe voci nella pk cache - disabilitata\n" - -#, fuzzy -#~ msgid "no secret subkey for public subkey %s - ignoring\n" -#~ msgstr "" -#~ "manca una subchiave segreta per la subchiave pubblica %08lX - ignorata\n" - -#, fuzzy -#~ msgid "key %s: secret key without public key - skipped\n" -#~ msgstr "chiave %08lX: chiave segreta senza chiave pubblica - saltata\n" - -#~ msgid "usage: gpg [options] " -#~ msgstr "uso: gpg [opzioni] " - -#~ msgid "" -#~ "you can only make detached or clear signatures while in --pgp2 mode\n" -#~ msgstr "nella modalità --pgp2 puoi fare solo firme in chiaro o separate\n" - -#~ msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" -#~ msgstr "" -#~ "nella modalità --pgp2 non puoi firmare e cifrare contemporaneamente\n" - -#~ msgid "" -#~ "you must use files (and not a pipe) when working with --pgp2 enabled.\n" -#~ msgstr "" -#~ "devi usare dei file (e non una pipe) quando lavori con --pgp2 attivo.\n" - -#~ msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" -#~ msgstr "" -#~ "nella modalità --pgp2 è richiesto il cifrario IDEA per cifrare un " -#~ "messaggio\n" - -#, fuzzy -#~ msgid "create a public key when importing a secret key" -#~ msgstr "la chiave pubblica non corrisponde alla chiave segreta!\n" - -#, fuzzy -#~ msgid "key %s: already in secret keyring\n" -#~ msgstr "chiave %08lX: già nel portachiavi segreto\n" - -#, fuzzy -#~ msgid "key %s: secret key not found: %s\n" -#~ msgstr "chiave %08lX: chiave segreta non trovata: %s\n" - -#, fuzzy -#~ msgid "NOTE: a key's S/N does not match the card's one\n" -#~ msgstr "la chiave pubblica non corrisponde alla chiave segreta!\n" - -#, fuzzy -#~ msgid "NOTE: primary key is online and stored on card\n" -#~ msgstr "saltata: chiave pubblica già presente\n" - -#, fuzzy -#~ msgid "NOTE: secondary key is online and stored on card\n" -#~ msgstr "saltata: chiave pubblica già presente\n" - -#~ msgid "" -#~ "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " -#~ "mode.\n" -#~ msgstr "" -#~ "In modalità -pgp2 non è possibile fare firme OpenPGP su chiavi in stile " -#~ "PGP 2.x.\n" - -#~ msgid "This would make the key unusable in PGP 2.x.\n" -#~ msgstr "Questo renderebbe la chiave non utilizzabile da PGP 2.x.\n" - -#~ msgid "This key is not protected.\n" -#~ msgstr "Questa chiave non è protetta.\n" - -#~ msgid "Key is protected.\n" -#~ msgstr "La chiave è protetta.\n" - -#~ msgid "Can't edit this key: %s\n" -#~ msgstr "Impossibile modificare questa chiave: %s\n" - -#~ msgid "" -#~ "Enter the new passphrase for this secret key.\n" -#~ "\n" -#~ msgstr "" -#~ "Inserisci la nuova passphrase per questa chiave segreta.\n" -#~ "\n" - -#~ msgid "" -#~ "You don't want a passphrase - this is probably a *bad* idea!\n" -#~ "\n" -#~ msgstr "" -#~ "Non vuoi una passphrase - questa è probabilmente una *cattiva* idea!\n" -#~ "\n" - -#, fuzzy -#~ msgid "Do you really want to do this? (y/N) " -#~ msgstr "Vuoi veramente farlo?" - -#~ msgid "Please remove selections from the secret keys.\n" -#~ msgstr "Togli le selezioni dalle chiavi segrete.\n" - -#~ msgid "No corresponding signature in secret ring\n" -#~ msgstr "Manca la firma corrispondente nel portachiavi segreto\n" - -#, fuzzy -#~ msgid "writing secret key stub to `%s'\n" -#~ msgstr "scrittura della chiave segreta in `%s'\n" - -#~ msgid "writing secret key to `%s'\n" -#~ msgstr "scrittura della chiave segreta in `%s'\n" - -#~ msgid "no writable secret keyring found: %s\n" -#~ msgstr "non è stato trovato un portachiavi segreto scrivibile: %s\n" - -#~ msgid "WARNING: 2 files with confidential information exists.\n" -#~ msgstr "ATTENZIONE: esistono due file con informazioni confidenziali.\n" - -#~ msgid "%s is the unchanged one\n" -#~ msgstr "%s è quello non modificato\n" - -#~ msgid "%s is the new one\n" -#~ msgstr "%s è quello nuovo\n" - -#~ msgid "Please fix this possible security flaw\n" -#~ msgstr "Per favore risolvete questo possibile problema di sicurezza\n" - -#, fuzzy -#~ msgid "searching for names from %s server %s\n" -#~ msgstr "cerco \"%s\" sul server HKP %s\n" - -#, fuzzy -#~ msgid "searching for names from %s\n" -#~ msgstr "cerco \"%s\" sul server HKP %s\n" - -#, fuzzy -#~ msgid "searching for \"%s\" from %s server %s\n" -#~ msgstr "cerco \"%s\" sul server HKP %s\n" - -#, fuzzy -#~ msgid "searching for \"%s\" from %s\n" -#~ msgstr "cerco \"%s\" sul server HKP %s\n" - -#, fuzzy -#~ msgid "keyserver timed out\n" -#~ msgstr "errore del keyserver" - -#, fuzzy -#~ msgid "keyserver internal error\n" -#~ msgstr "errore del keyserver" - -#, fuzzy -#~ msgid "keyserver communications error: %s\n" -#~ msgstr "ricezione dal keyserver fallita: %s\n" - -#, fuzzy -#~ msgid "WARNING: unable to parse URI %s\n" -#~ msgstr "" -#~ "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n" - -#~ msgid "invalid root packet detected in proc_tree()\n" -#~ msgstr "individuato un pacchetto radice non valido in proc_tree()\n" - -#~ msgid "the IDEA cipher plugin is not present\n" -#~ msgstr "il plugin per il cifrario IDEA non è presente\n" - -#~ msgid "no corresponding public key: %s\n" -#~ msgstr "non c'è una chiave pubblica corrispondente: %s\n" - -#~ msgid "public key does not match secret key!\n" -#~ msgstr "la chiave pubblica non corrisponde alla chiave segreta!\n" - -#~ msgid "unknown protection algorithm\n" -#~ msgstr "algoritmo di protezione sconosciuto\n" - -#~ msgid "NOTE: This key is not protected!\n" -#~ msgstr "NOTA: Questa chiave non è protetta!\n" - -#, fuzzy -#~ msgid "protection digest %d is not supported\n" -#~ msgstr "l'algoritmo di protezione %d%s non è gestito\n" - -#~ msgid "Invalid passphrase; please try again" -#~ msgstr "Passphrase non valida; riprova" - -#~ msgid "%s ...\n" -#~ msgstr "%s ...\n" - -#~ msgid "WARNING: Weak key detected - please change passphrase again.\n" -#~ msgstr "" -#~ "ATTENZIONE: Individuata una chiave debole - per favore cambia ancora la\n" -#~ "passphrase.\n" - -#~ msgid "" -#~ "generating the deprecated 16-bit checksum for secret key protection\n" -#~ msgstr "" -#~ "genero il checksum a 16 bit deprecato per la protezione della chiave " -#~ "segreta\n" - -#~ msgid "" -#~ "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" -#~ msgstr "" -#~ "nella modalità --pgp2 puoi fare firme separate solo con chiavi in stile " -#~ "PGP 2.x\n" - -#~ msgid "" -#~ "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" -#~ msgstr "" -#~ "In modalità -pgp2 puoi firmare in chiaro solo con chiavi in stile PGP 2." -#~ "x\n" - -#, fuzzy -#~ msgid "Usage: scdaemon [options] (-h for help)" -#~ msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" - -#, fuzzy -#~ msgid "Usage: gpgsm [options] [files] (-h for help)" -#~ msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)" - -#, fuzzy -#~ msgid "usage: gpgconf [options] " -#~ msgstr "uso: gpg [opzioni] " - -#, fuzzy -#~ msgid "failed to allocated keyDB handle\n" -#~ msgstr "inizializzazione del trustdb fallita: %s\n" - -#~ msgid "Command> " -#~ msgstr "Comando> " - -#~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" -#~ msgstr "Il trustdb è danneggiato; eseguire \"gpg --fix-trust-db\".\n" - -#~ msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n" -#~ msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n" - -#, fuzzy -#~ msgid "Please report bugs to " -#~ msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n" - -#, fuzzy -#~ msgid "DSA keypair will have %u bits.\n" -#~ msgstr "La coppia DSA avrà 1024 bit.\n" - -#~ msgid "Repeat passphrase\n" -#~ msgstr "Ripeti la passphrase\n" - -#, fuzzy -#~ msgid "read options from file" -#~ msgstr "lettura delle opzioni da `%s'\n" - -#~ msgid "|[file]|make a signature" -#~ msgstr "|[file]|fai una firma" - -#, fuzzy -#~ msgid "|[FILE]|make a signature" -#~ msgstr "|[file]|fai una firma" - -#, fuzzy -#~ msgid "|[FILE]|make a clear text signature" -#~ msgstr "|[file]|fai una firma mantenendo il testo in chiaro" - -#~ msgid "use the default key as default recipient" -#~ msgstr "usa la chiave predefinita come destinatario predefinito" - -#~ msgid "force v3 signatures" -#~ msgstr "forza l'uso di firme v3" - -#~ msgid "always use a MDC for encryption" -#~ msgstr "usa sempre un MDC per cifrare" - -#~ msgid "add this secret keyring to the list" -#~ msgstr "aggiungi questo portachiavi segreto alla lista" - -#~ msgid "|FILE|load extension module FILE" -#~ msgstr "|FILE|carica il modulo di estensione FILE" - -#~ msgid "|N|use compress algorithm N" -#~ msgstr "|N|usa l'algoritmo di compressione N" - -#, fuzzy -#~ msgid "remove key from the public keyring" -#~ msgstr "rimuove le chiavi dal portachiavi pubblico" - -#~ msgid "" -#~ "It's up to you to assign a value here; this value will never be exported\n" -#~ "to any 3rd party. We need it to implement the web-of-trust; it has " -#~ "nothing\n" -#~ "to do with the (implicitly created) web-of-certificates." -#~ msgstr "" -#~ "E compito tuo assegnare un valore; questo valore non sarà mai esportato " -#~ "a\n" -#~ "terzi. Ci serve per implementare il web-of-trust; non ha nulla a che " -#~ "fare\n" -#~ "con il web-of-certificates (creato implicitamente)." - -#~ msgid "" -#~ "To build the Web-of-Trust, GnuPG needs to know which keys are\n" -#~ "ultimately trusted - those are usually the keys for which you have\n" -#~ "access to the secret key. Answer \"yes\" to set this key to\n" -#~ "ultimately trusted\n" -#~ msgstr "" -#~ "Per costruire il Web-Of-Trust, GnuPG ha bisogno di sapere quali chiavi " -#~ "sono\n" -#~ "definitivamente affidabili - di solito quelle per cui hai accesso alla " -#~ "chiave\n" -#~ "segreta.\n" -#~ "Rispondi \"sì\" per impostare questa chiave come definitivamente " -#~ "affidabile\n" - -#~ msgid "If you want to use this untrusted key anyway, answer \"yes\"." -#~ msgstr "Se vuoi usare comunque questa chiave non fidata, rispondi \"si\"." - -#~ msgid "" -#~ "Enter the user ID of the addressee to whom you want to send the message." -#~ msgstr "" -#~ "Inserisci l'user ID del destinatario a cui vuoi mandare il messaggio." - -#~ msgid "" -#~ "In general it is not a good idea to use the same key for signing and\n" -#~ "encryption. This algorithm should only be used in certain domains.\n" -#~ "Please consult your security expert first." -#~ msgstr "" -#~ "In generale non è una buona idea usare la stessa chiave per le firme e " -#~ "la\n" -#~ "cifratura. Questo algoritmo dovrebbe solo essere usato in determinati " -#~ "campi.\n" -#~ "Per favore consulta prima il tuo esperto di sicurezza." - -#~ msgid "Enter the size of the key" -#~ msgstr "Inserisci le dimensioni della chiave" - -#~ msgid "Answer \"yes\" or \"no\"" -#~ msgstr "Rispondi \"si\" o \"no\"" - -#~ msgid "" -#~ "Enter the required value as shown in the prompt.\n" -#~ "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" -#~ "get a good error response - instead the system tries to interpret\n" -#~ "the given value as an interval." -#~ msgstr "" -#~ "Inserisci il valore richiesto come indicato dal prompt.\n" -#~ "È possibile inserire una data in formato ISO (YYYY-MM-DD) ma non avrai " -#~ "un\n" -#~ "messaggio di errore corretto: il sistema cerca di interpretare il valore\n" -#~ "dato come un intervallo." - -#~ msgid "Enter the name of the key holder" -#~ msgstr "Inserisci il nome del proprietario della chiave" - -#~ msgid "please enter an optional but highly suggested email address" -#~ msgstr "Inserisci un indirizzo di email opzionale (ma fortemente suggerito)" - -#~ msgid "Please enter an optional comment" -#~ msgstr "Inserisci un commento opzionale" - -#~ msgid "" -#~ "N to change the name.\n" -#~ "C to change the comment.\n" -#~ "E to change the email address.\n" -#~ "O to continue with key generation.\n" -#~ "Q to to quit the key generation." -#~ msgstr "" -#~ "N per cambiare il nome.\n" -#~ "C per cambiare il commento.\n" -#~ "E per cambiare l'indirizzo di email.\n" -#~ "O per continuare con la generazione della chiave.\n" -#~ "Q per abbandonare il processo di generazione della chiave." - -#~ msgid "" -#~ "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." -#~ msgstr "Rispondi \"si\" (o \"y\") se va bene generare la subchiave." - -#~ msgid "" -#~ "When you sign a user ID on a key, you should first verify that the key\n" -#~ "belongs to the person named in the user ID. It is useful for others to\n" -#~ "know how carefully you verified this.\n" -#~ "\n" -#~ "\"0\" means you make no particular claim as to how carefully you verified " -#~ "the\n" -#~ " key.\n" -#~ "\n" -#~ "\"1\" means you believe the key is owned by the person who claims to own " -#~ "it\n" -#~ " but you could not, or did not verify the key at all. This is useful " -#~ "for\n" -#~ " a \"persona\" verification, where you sign the key of a pseudonymous " -#~ "user.\n" -#~ "\n" -#~ "\"2\" means you did casual verification of the key. For example, this " -#~ "could\n" -#~ " mean that you verified the key fingerprint and checked the user ID on " -#~ "the\n" -#~ " key against a photo ID.\n" -#~ "\n" -#~ "\"3\" means you did extensive verification of the key. For example, this " -#~ "could\n" -#~ " mean that you verified the key fingerprint with the owner of the key " -#~ "in\n" -#~ " person, and that you checked, by means of a hard to forge document " -#~ "with a\n" -#~ " photo ID (such as a passport) that the name of the key owner matches " -#~ "the\n" -#~ " name in the user ID on the key, and finally that you verified (by " -#~ "exchange\n" -#~ " of email) that the email address on the key belongs to the key " -#~ "owner.\n" -#~ "\n" -#~ "Note that the examples given above for levels 2 and 3 are *only* " -#~ "examples.\n" -#~ "In the end, it is up to you to decide just what \"casual\" and \"extensive" -#~ "\"\n" -#~ "mean to you when you sign other keys.\n" -#~ "\n" -#~ "If you don't know what the right answer is, answer \"0\"." -#~ msgstr "" -#~ "Quando firmi l'user ID di una chiave dovresti prima verificare che " -#~ "questa\n" -#~ "appartiene alla persona indicata nell'user ID. È utile agli altri sapere\n" -#~ "con quanta attenzione lo hai verificato.\n" -#~ "\n" -#~ "\"0\" significa che non fai particolari affermazioni sull'attenzione con " -#~ "cui\n" -#~ " hai ferificato la chiave.\n" -#~ "\n" -#~ "\"1\" significa che credi che la chiave sia posseduta dalla persona che " -#~ "dice di\n" -#~ " possederla, ma non hai o non hai potuto verificare per niente la " -#~ "chiave.\n" -#~ "\n" -#~ "\"2\" significa che hai fatto una verifica superficiale della chiave. Per " -#~ "esempio\n" -#~ " potrebbe significare che hai verificato l'impronta digitale e " -#~ "confrontato\n" -#~ " l'user ID della chiave con un documento di identità con fotografia.\n" -#~ "\n" -#~ "\"3\" significa che hai fatto una verifica approfondita della chiave. Per " -#~ "esempio\n" -#~ " potrebbe significare che hai verificato di persona l'impronta " -#~ "digitale con\n" -#~ " il possessore della chiave e hai controllato, per esempio per mezzo " -#~ "di\n" -#~ " un documento di identità con fotografia difficile da falsificare " -#~ "(come\n" -#~ " un passaporto), che il nome del proprietario della chiave corrisponde " -#~ "a\n" -#~ " quello nell'user ID della chiave, e per finire che hai verificato\n" -#~ " (scambiando dei messaggi) che l'indirizzo di email sulla chiave " -#~ "appartiene\n" -#~ " al proprietario.\n" -#~ "\n" -#~ "Nota che gli esempi indicati per i livelli 2 e 3 sono *solo* esempi. Alla " -#~ "fine\n" -#~ "sta a te decidere cosa significano \"superficiale\" e \"approfondita\" " -#~ "quando\n" -#~ "firmi chiavi di altri.\n" -#~ "\n" -#~ "Se non sai cosa rispondere, rispondi \"0\"." - -#, fuzzy -#~ msgid "Answer \"yes\" if you want to sign ALL the user IDs" -#~ msgstr "Rispondi \"si\" se vuoi firmare TUTTI gli user ID" - -#~ msgid "" -#~ "Answer \"yes\" if you really want to delete this user ID.\n" -#~ "All certificates are then also lost!" -#~ msgstr "" -#~ "Rispondi \"si\" se vuoi davvero cancellare questo user ID.\n" -#~ "Tutti i certificati saranno persi!" - -#~ msgid "Answer \"yes\" if it is okay to delete the subkey" -#~ msgstr "Rispondi \"si\" se va bene cancellare la subchiave" - -#~ msgid "" -#~ "This is a valid signature on the key; you normally don't want\n" -#~ "to delete this signature because it may be important to establish a\n" -#~ "trust connection to the key or another key certified by this key." -#~ msgstr "" -#~ "Questa è una firma valida per la chiave. Normalmente non vorresti " -#~ "cancellare\n" -#~ "questa firma perchè può essere importante per stabilire una connessione " -#~ "di\n" -#~ "fiducia alla chiave o a un'altra chiave certificata da questa chiave." - -#~ msgid "" -#~ "This signature can't be checked because you don't have the\n" -#~ "corresponding key. You should postpone its deletion until you\n" -#~ "know which key was used because this signing key might establish\n" -#~ "a trust connection through another already certified key." -#~ msgstr "" -#~ "Questa firma non può essere verificata perchè non hai la chiave " -#~ "corrispondente.\n" -#~ "Dovresti rimandare la sua cancellazione finchè non saprai quale chiave è " -#~ "stata\n" -#~ "usata perchè questa chiave potrebbe stabilire una connessione di fiducia\n" -#~ "attraverso una chiave già certificata." - -#~ msgid "" -#~ "The signature is not valid. It does make sense to remove it from\n" -#~ "your keyring." -#~ msgstr "La firma non è valida. Ha senso rimuoverla dal tuo portachiavi." - -#~ msgid "" -#~ "This is a signature which binds the user ID to the key. It is\n" -#~ "usually not a good idea to remove such a signature. Actually\n" -#~ "GnuPG might not be able to use this key anymore. So do this\n" -#~ "only if this self-signature is for some reason not valid and\n" -#~ "a second one is available." -#~ msgstr "" -#~ "Questa è una firma che collega l'user id alla chiave. Solitamente non è " -#~ "una\n" -#~ "buona idea rimuovere questo tipo di firma. In realtà GnuPG potrebbe non " -#~ "essere\n" -#~ "più in grado di usare questa chiave. Quindi fallo solo se questa " -#~ "autofirma non\n" -#~ "è valida per qualche ragione e ne è disponibile un'altra." - -#~ msgid "" -#~ "Change the preferences of all user IDs (or just of the selected ones)\n" -#~ "to the current list of preferences. The timestamp of all affected\n" -#~ "self-signatures will be advanced by one second.\n" -#~ msgstr "" -#~ "Cambia le preferenze di tutti gli user ID (o solo di quelli selezionati) " -#~ "con\n" -#~ "la lista di preferenze corrente. L'orario di tutte le autofirme " -#~ "coinvolte\n" -#~ "sarà aumentato di un secondo.\n" - -#~ msgid "Please enter the passphrase; this is a secret sentence \n" -#~ msgstr "Inserisci la passphrase, cioè una frase segreta \n" - -#~ msgid "" -#~ "Please repeat the last passphrase, so you are sure what you typed in." -#~ msgstr "Ripeti l'ultima passphrase per essere sicuro di cosa hai scritto." - -#~ msgid "Give the name of the file to which the signature applies" -#~ msgstr "Inserisci il nome del file a cui si riferisce la firma." - -#~ msgid "Answer \"yes\" if it is okay to overwrite the file" -#~ msgstr "Rispondi \"si\" se va bene sovrascrivere il file." - -#~ msgid "" -#~ "Please enter a new filename. If you just hit RETURN the default\n" -#~ "file (which is shown in brackets) will be used." -#~ msgstr "" -#~ "Inserisci il nuovo nome del file. Se premi INVIO sarà usato il nome\n" -#~ "predefinito (quello indicato tra parentesi)." - -#~ msgid "" -#~ "You should specify a reason for the certification. Depending on the\n" -#~ "context you have the ability to choose from this list:\n" -#~ " \"Key has been compromised\"\n" -#~ " Use this if you have a reason to believe that unauthorized persons\n" -#~ " got access to your secret key.\n" -#~ " \"Key is superseded\"\n" -#~ " Use this if you have replaced this key with a newer one.\n" -#~ " \"Key is no longer used\"\n" -#~ " Use this if you have retired this key.\n" -#~ " \"User ID is no longer valid\"\n" -#~ " Use this to state that the user ID should not longer be used;\n" -#~ " this is normally used to mark an email address invalid.\n" -#~ msgstr "" -#~ "Dovresti specificare un motivo per questa certificazione. A seconda del\n" -#~ "contesto hai la possibilità di scegliere tra questa lista:\n" -#~ " \"Key has been compromised\"\n" -#~ " Usa questo se hai un motivo per credere che una persona non " -#~ "autorizzata\n" -#~ " abbia avuto accesso alla tua chiave segreta.\n" -#~ " \"Key is superseded\"\n" -#~ " Usa questo se hai sostituito questa chiave con una più recente.\n" -#~ " \"Key is no longer used\"\n" -#~ " Usa questo se hai mandato in pensione questa chiave.\n" -#~ " \"User ID is no longer valid\"\n" -#~ " Usa questo per affermare che l'user ID non dovrebbe più essere " -#~ "usato;\n" -#~ " solitamente è usato per indicare un indirizzo di email non valido.\n" - -#~ msgid "" -#~ "If you like, you can enter a text describing why you issue this\n" -#~ "revocation certificate. Please keep this text concise.\n" -#~ "An empty line ends the text.\n" -#~ msgstr "" -#~ "Se vuoi, puoi digitare un testo che descrive perché hai emesso\n" -#~ "questo certificato di revoca. Per favore sii conciso.\n" -#~ "Una riga vuota termina il testo.\n" - -#~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" -#~ msgstr "impossibile inserire notation data nelle firme v3 (stile PGP 2.x)\n" - -#~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" -#~ msgstr "" -#~ "impossibile inserire notation data nelle firme di chiavi v3 (stile PGP 2." -#~ "x)\n" - -#~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" -#~ msgstr "" -#~ "impossibile inserire l'URL di una policy nelle firme v3 (stile PGP 2.x)\n" - -#~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" -#~ msgstr "" -#~ "impossibile inserire l'URL di una policy nelle firme di chiavi v3 (stile\n" -#~ "PGP 2.x)\n" - -#, fuzzy -#~ msgid "shelll" -#~ msgstr "help" - -#, fuzzy -#~ msgid "" -#~ "please see http://www.gnupg.org/download/iconv.html for more information\n" -#~ msgstr "visitare http://www.gnupg.org/faq.html per ulteriori informazioni\n" - -#, fuzzy -#~ msgid "key generation is not available from the commandline\n" -#~ msgstr "gpg-agent non è disponibile in questa sessione\n" - -#, fuzzy -#~ msgid "please use the script \"%s\" to generate a new key\n" -#~ msgstr "Per favore scegli che tipo di chiave vuoi:\n" - -#, fuzzy -#~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" -#~ msgstr "" -#~ "l'estensione crittografica \"%s\" non è stata caricata a causa dei\n" -#~ "permessi insicuri.\n" - -#, fuzzy -#~ msgid ".\n" -#~ msgstr "%s.\n" - -#~ msgid "problem with the agent - disabling agent use\n" -#~ msgstr "problema con l'agent - uso dell'agent disattivato\n" - -#, fuzzy -#~ msgid "can't query passphrase in batch mode\n" -#~ msgstr "impossibile chiedere la password in modo batch\n" - -#~ msgid "Repeat passphrase: " -#~ msgstr "Ripeti la passphrase: " - -#~ msgid "-k[v][v][v][c] [user-id] [keyring]" -#~ msgstr "-k[v][v][v][c] [user-id] [portachiavi]" - -#, fuzzy -#~ msgid "can't gen prime with pbits=%u qbits=%u\n" -#~ msgstr "impossibile generare un numero primo di meno di %d bit\n" - -#~ msgid "can't generate a prime with less than %d bits\n" -#~ msgstr "impossibile generare un numero primo di meno di %d bit\n" - -#~ msgid "no entropy gathering module detected\n" -#~ msgstr "non è stato trovato il modulo per raccogliere l'entropia\n" - -#, fuzzy -#~ msgid "can't lock `%s': %s\n" -#~ msgstr "impossibile aprire `%s'\n" - -#~ msgid "`%s' is not a regular file - ignored\n" -#~ msgstr "`%s' non è un file regolare - ignorato\n" - -#~ msgid "note: random_seed file is empty\n" -#~ msgstr "nota: il file random_seed è vuoto\n" - -#~ msgid "can't read `%s': %s\n" -#~ msgstr "impossibile leggere `%s': %s\n" - -#~ msgid "note: random_seed file not updated\n" -#~ msgstr "nota: il file random_seed non è stato aggiornato\n" - -#~ msgid "can't write `%s': %s\n" -#~ msgstr "impossibile scrivere su `%s': %s\n" - -#~ msgid "can't close `%s': %s\n" -#~ msgstr "impossibile chiudere `%s': %s\n" - -#~ msgid "WARNING: using insecure random number generator!!\n" -#~ msgstr "" -#~ "ATTENZIONE: si sta usando un generatore di numeri casuali non sicuro!!\n" - -#~ msgid "" -#~ "The random number generator is only a kludge to let\n" -#~ "it run - it is in no way a strong RNG!\n" -#~ "\n" -#~ "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n" -#~ "\n" -#~ msgstr "" -#~ "Il generatore di numeri casuali è solo un ripiego per fare\n" -#~ "funzionare il programma - non è assolutamente un RNG forte!\n" -#~ "\n" -#~ "NON USARE ALCUN DATO GENERATO DA QUESTO PROGRAMMA!\n" -#~ "\n" - -#~ msgid "" -#~ "Please wait, entropy is being gathered. Do some work if it would\n" -#~ "keep you from getting bored, because it will improve the quality\n" -#~ "of the entropy.\n" -#~ msgstr "" -#~ "Attendi, sto raccogliendo entropia. Se può evitare di annoiarti lavora un " -#~ "po',\n" -#~ "visto che questo migliorerà la qualità dell'entropia.\n" - -#~ msgid "" -#~ "\n" -#~ "Not enough random bytes available. Please do some other work to give\n" -#~ "the OS a chance to collect more entropy! (Need %d more bytes)\n" -#~ msgstr "" -#~ "\n" -#~ "Non ci sono abbastanza byte casuali disponibili. Per favore fai qualche\n" -#~ "altra cosa per dare all'OS la possibilità di raccogliere altra entropia!\n" -#~ "(Servono altri %d byte)\n" - -#, fuzzy -#~ msgid "card reader not available\n" -#~ msgstr "la chiave segreta non è disponibile" - -#, fuzzy -#~ msgid "NOTE: %s is not available in this version\n" -#~ msgstr "gpg-agent non è disponibile in questa sessione\n" - -#, fuzzy -#~ msgid " algorithms on these user IDs:\n" -#~ msgstr "Non puoi cancellare l'ultimo user ID!\n" - -#~ msgid "general error" -#~ msgstr "errore generale" - -#~ msgid "unknown packet type" -#~ msgstr "pacchetto di tipo sconosciuto" - -#~ msgid "unknown digest algorithm" -#~ msgstr "algoritmo del digest sconosciuto" - -#~ msgid "bad public key" -#~ msgstr "chiave pubblica errata" - -#~ msgid "bad secret key" -#~ msgstr "chiave segreta errata" - -#~ msgid "bad signature" -#~ msgstr "firma errata" - -#~ msgid "checksum error" -#~ msgstr "codice di controllo errato" - -#~ msgid "unknown cipher algorithm" -#~ msgstr "algoritmo di cifratura sconosciuto" - -#~ msgid "invalid packet" -#~ msgstr "pacchetto non valido" - -#~ msgid "no such user id" -#~ msgstr "l'user id non esiste" - -#~ msgid "secret key not available" -#~ msgstr "la chiave segreta non è disponibile" - -#~ msgid "wrong secret key used" -#~ msgstr "è stata usata la chiave segreta sbagliata" - -#~ msgid "bad key" -#~ msgstr "chiave sbagliata" - -#~ msgid "file write error" -#~ msgstr "errore durante la scrittura del file" - -#~ msgid "unknown compress algorithm" -#~ msgstr "algoritmo di compressione sconosciuto" - -#~ msgid "file open error" -#~ msgstr "errore durante l'apertura del file" - -#~ msgid "file create error" -#~ msgstr "errore durante la creazione del file" - -#~ msgid "unimplemented pubkey algorithm" -#~ msgstr "algoritmo della chiave pubblica non implementato" - -#~ msgid "unimplemented cipher algorithm" -#~ msgstr "algoritmo di cifratura non implementato" - -#~ msgid "unknown signature class" -#~ msgstr "classe della firma sconosciuta" - -#~ msgid "trust database error" -#~ msgstr "errore nel database della fiducia" - -#~ msgid "resource limit" -#~ msgstr "limite della risorsa" - -#~ msgid "invalid keyring" -#~ msgstr "portachiavi non valido" - -#~ msgid "malformed user id" -#~ msgstr "user id malformato" - -#~ msgid "file close error" -#~ msgstr "errore durante la chiusura del file" - -#~ msgid "file rename error" -#~ msgstr "errore durante la rinominazione del file" - -#~ msgid "file delete error" -#~ msgstr "errore durante la cancellazione del file" - -#~ msgid "unexpected data" -#~ msgstr "dati inattesi" - -#~ msgid "timestamp conflict" -#~ msgstr "date in conflitto" - -#~ msgid "unusable pubkey algorithm" -#~ msgstr "algoritmo della chiave pubblica non utilizzabile" - -#~ msgid "file exists" -#~ msgstr "il file esiste" - -#~ msgid "weak key" -#~ msgstr "chiave debole" - -#~ msgid "bad URI" -#~ msgstr "URI non valida" - -# ??? (Md) -#~ msgid "not processed" -#~ msgstr "non esaminato" - -#~ msgid "unusable public key" -#~ msgstr "chiave pubblica inutilizzabile" - -#~ msgid "unusable secret key" -#~ msgstr "chiave segreta inutilizzabile" - -#~ msgid "keyserver error" -#~ msgstr "errore del keyserver" - -#, fuzzy -#~ msgid "no card" -#~ msgstr "non cifrato" - -#, fuzzy -#~ msgid "no data" -#~ msgstr "non ci sono dati firmati\n" - -#~ msgid "... this is a bug (%s:%d:%s)\n" -#~ msgstr "... questo è un bug (%s:%d:%s)\n" - -#~ msgid "operation is not possible without initialized secure memory\n" -#~ msgstr "l'operazione non è possibile senza memoria sicura inizializzata\n" - -#~ msgid "(you may have used the wrong program for this task)\n" -#~ msgstr "(potresti avere usato il programma sbagliato per questa funzione)\n" - -#~ msgid "" -#~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" -#~ msgstr "" -#~ "per ulteriori informazioni si veda http://www.gnupg.org/it/why-not-idea." -#~ "html\n" - -#, fuzzy -#~ msgid "all export-clean-* options from above" -#~ msgstr "leggi le opzioni dal file" - -#, fuzzy -#~ msgid "all import-clean-* options from above" -#~ msgstr "leggi le opzioni dal file" - -#, fuzzy -#~ msgid "expired: %s)" -#~ msgstr "[scadenza: %s]" - -#, fuzzy -#~ msgid "key %s: expired signature from key %s - skipped\n" -#~ msgstr "chiave %08lX: classe della firma inaspettata (0x%02x) - saltata\n" - -#, fuzzy -#~ msgid "Unable to clean `%s'\n" -#~ msgstr "impossibile eseguire %s \"%s\": %s\n" - -#, fuzzy -#~ msgid "No user IDs are removable.\n" -#~ msgstr "l'user ID \"%s\" è già stato revocato\n" - -#~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" -#~ msgstr "passphrase errata o algoritmo di cifratura sconosciuto (%d)\n" - -#~ msgid "can't set client pid for the agent\n" -#~ msgstr "impossibile impostare il pid del client dell'agent\n" - -#~ msgid "can't get server read FD for the agent\n" -#~ msgstr "impossibile ottenere il FD di lettura dell'agent\n" - -#~ msgid "can't get server write FD for the agent\n" -#~ msgstr "impossibile ottenere il FD di scrittura dell'agent\n" - -#~ msgid "select secondary key N" -#~ msgstr "scegli la chiave secondaria N" - -#~ msgid "list signatures" -#~ msgstr "elenca le firme" - -#~ msgid "sign the key" -#~ msgstr "firma la chiave" - -#~ msgid "add a secondary key" -#~ msgstr "aggiungi una chiave secondaria" - -#~ msgid "delete signatures" -#~ msgstr "cancella le firme" - -#~ msgid "change the expire date" -#~ msgstr "cambia la data di scadenza" - -#~ msgid "set preference list" -#~ msgstr "imposta la lista di preferenze" - -#~ msgid "updated preferences" -#~ msgstr "preferenze aggiornate" - -#~ msgid "No secondary key with index %d\n" -#~ msgstr "Nessuna chiave secondaria con l'indice %d\n" - -#~ msgid "--nrsign-key user-id" -#~ msgstr "--nrsign-key user-id" - -#~ msgid "--nrlsign-key user-id" -#~ msgstr "--nrlsign-key user-id" - -#~ msgid "sign the key non-revocably" -#~ msgstr "firma la chiave irrevocabilmente" - -#~ msgid "sign the key locally and non-revocably" -#~ msgstr "firma la chiave localmente e irrevocabilmente" - -#~ msgid "q" -#~ msgstr "q" - -#~ msgid "list" -#~ msgstr "list" - -#~ msgid "l" -#~ msgstr "l" - -#~ msgid "debug" -#~ msgstr "debug" - -#, fuzzy -#~ msgid "name" -#~ msgstr "abilita" - -#, fuzzy -#~ msgid "login" -#~ msgstr "lsign" - -#, fuzzy -#~ msgid "cafpr" -#~ msgstr "fpr" - -#, fuzzy -#~ msgid "forcesig" -#~ msgstr "revsig" - -#, fuzzy -#~ msgid "generate" -#~ msgstr "errore generale" - -#~ msgid "passwd" -#~ msgstr "passwd" - -#~ msgid "save" -#~ msgstr "save" - -#~ msgid "fpr" -#~ msgstr "fpr" - -#~ msgid "uid" -#~ msgstr "uid" - -#~ msgid "check" -#~ msgstr "check" - -#~ msgid "c" -#~ msgstr "c" - -#~ msgid "sign" -#~ msgstr "sign" - -#~ msgid "s" -#~ msgstr "s" - -#, fuzzy -#~ msgid "tsign" -#~ msgstr "sign" - -#~ msgid "lsign" -#~ msgstr "lsign" - -#~ msgid "nrsign" -#~ msgstr "nrsign" - -#~ msgid "nrlsign" -#~ msgstr "nrlsign" - -#~ msgid "adduid" -#~ msgstr "adduid" - -#~ msgid "addphoto" -#~ msgstr "addphoto" - -#~ msgid "deluid" -#~ msgstr "deluid" - -#~ msgid "delphoto" -#~ msgstr "delphoto" - -#, fuzzy -#~ msgid "addcardkey" -#~ msgstr "addkey" - -#~ msgid "delkey" -#~ msgstr "delkey" - -#~ msgid "addrevoker" -#~ msgstr "addrevoker" - -#~ msgid "delsig" -#~ msgstr "delsign" - -#~ msgid "expire" -#~ msgstr "expire" - -#~ msgid "primary" -#~ msgstr "primary" - -#~ msgid "toggle" -#~ msgstr "toggle" - -#~ msgid "t" -#~ msgstr "t" - -#~ msgid "pref" -#~ msgstr "pref" - -#~ msgid "showpref" -#~ msgstr "showpref" - -#~ msgid "setpref" -#~ msgstr "setpref" - -#~ msgid "updpref" -#~ msgstr "updpref" - -#, fuzzy -#~ msgid "keyserver" -#~ msgstr "errore del keyserver" - -#~ msgid "trust" -#~ msgstr "trust" - -#~ msgid "revsig" -#~ msgstr "revsig" - -#~ msgid "revuid" -#~ msgstr "revuid" - -#~ msgid "revkey" -#~ msgstr "revkey" - -#~ msgid "disable" -#~ msgstr "disable" - -#~ msgid "enable" -#~ msgstr "abilita" - -#~ msgid "showphoto" -#~ msgstr "showphoto" - -#~ msgid "digest algorithm `%s' is read-only in this release\n" -#~ msgstr "in questa versione l'algoritmo digest `%s' è in sola lettura\n" - -#~ msgid "" -#~ "About to generate a new %s keypair.\n" -#~ " minimum keysize is 768 bits\n" -#~ " default keysize is 1024 bits\n" -#~ " highest suggested keysize is 2048 bits\n" -#~ msgstr "" -#~ "Sto per generare una nuova coppia di chiavi %s.\n" -#~ " la dimensione minima è 768 bit\n" -#~ " la dimensione predefinita è 1024 bit\n" -#~ " la dimensione massima consigliata è 2048 bit\n" - -#~ msgid "DSA only allows keysizes from 512 to 1024\n" -#~ msgstr "DSA permette solo chiavi di dimensioni tra 512 e 1024\n" - -#~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" -#~ msgstr "" -#~ "la chiave è troppo corta; 1024 è il minimo valore permesso per RSA.\n" - -#~ msgid "keysize too small; 768 is smallest value allowed.\n" -#~ msgstr "la chiave è troppo corta; 768 è il minimo valore permesso.\n" - -#~ msgid "keysize too large; %d is largest value allowed.\n" -#~ msgstr "la chiave è troppo lunga; %d è il massimo valore permesso.\n" - -#~ msgid "" -#~ "Keysizes larger than 2048 are not suggested because\n" -#~ "computations take REALLY long!\n" -#~ msgstr "" -#~ "Chiavi più lunghe di 2048 non sono consigliate perchè i calcoli sono\n" -#~ "VERAMENTE lunghi!\n" - -#, fuzzy -#~ msgid "Are you sure that you want this keysize? (y/N) " -#~ msgstr "Sei sicuro di volere una chiave di queste dimensioni? " - -#~ msgid "" -#~ "Okay, but keep in mind that your monitor and keyboard radiation is also " -#~ "very vulnerable to attacks!\n" -#~ msgstr "" -#~ "Va bene, ma ricordati che anche le radiazioni emesse dal tuo monitor e " -#~ "dalla tua tastiera sono molto vulnerabili ad attacchi!\n" - -#~ msgid "Experimental algorithms should not be used!\n" -#~ msgstr "Gli algoritmi sperimentali non dovrebbero essere usati!\n" - -#~ msgid "" -#~ "this cipher algorithm is deprecated; please use a more standard one!\n" -#~ msgstr "" -#~ "questo algoritmo di cifratura è deprecato; usane uno più standard!\n" - -#~ msgid "sorry, can't do this in batch mode\n" -#~ msgstr "mi dispiace, non è possibile fare questo in modo batch\n" - -#, fuzzy -#~ msgid "can't open file `%s': %s\n" -#~ msgstr "impossibile aprire il file: %s\n" - -#~ msgid "key %08lX: key has been revoked!\n" -#~ msgstr "chiave %08lX: la chiave è stata revocata!\n" - -#~ msgid "key %08lX: subkey has been revoked!\n" -#~ msgstr "chiave %08lX: la subchiave è stata revocata!\n" - -#~ msgid "%08lX: key has expired\n" -#~ msgstr "%08lX: la chiave è scaduta\n" - -#~ msgid "%08lX: We do NOT trust this key\n" -#~ msgstr "%08lX: NON ci fidiamo di questa chiave!\n" - -#, fuzzy -#~ msgid " (%d) RSA (auth only)\n" -#~ msgstr " (%d) RSA (firma solo)\n" - -#, fuzzy -#~ msgid " (%d) RSA (sign and auth)\n" -#~ msgstr " (%d) RSA (firma e cifra)\n" - -#, fuzzy -#~ msgid " (%d) RSA (encrypt and auth)\n" -#~ msgstr " (%d) RSA (cifra solo)\n" - -#, fuzzy -#~ msgid " (%d) RSA (sign, encrypt and auth)\n" -#~ msgstr " (%d) RSA (firma e cifra)\n" - -#~ msgid "%s: can't open: %s\n" -#~ msgstr "%s: impossibile aprire: %s\n" - -#~ msgid "%s: WARNING: empty file\n" -#~ msgstr "%s: ATTENZIONE: file vuoto\n" - -#, fuzzy -#~ msgid " (%d) I trust marginally\n" -#~ msgstr " %d = Mi fido marginalmente\n" - -#, fuzzy -#~ msgid " (%d) I trust fully\n" -#~ msgstr " %d = Mi fido completamente\n" - -#, fuzzy -#~ msgid "expires" -#~ msgstr "expire" - -#, fuzzy -#~ msgid "" -#~ "\"\n" -#~ "locally signed with your key %s at %s\n" -#~ msgstr "" -#~ "\"\n" -#~ "firmata localmente con la tua chiave %08lX il %s\n" -#~ "\n" - -#~ msgid "%s: can't create lock\n" -#~ msgstr "%s: impossibile creare il lock\n" - -#~ msgid "%s: can't make lock\n" -#~ msgstr "%s: impossibile creare il lock\n" - -#~ msgid "%s: can't create: %s\n" -#~ msgstr "%s: impossibile creare: %s\n" - -#~ msgid "If you want to use this revoked key anyway, answer \"yes\"." -#~ msgstr "Se vuoi usare comunque questa chiave revocata, rispondi \"si\"." - -#~ msgid "Unable to open photo \"%s\": %s\n" -#~ msgstr "Impossibile aprire la foto \"%s\": %s\n" - -#~ msgid "error: missing colon\n" -#~ msgstr "errore: mancano due punti\n" - -#~ msgid "error: no ownertrust value\n" -#~ msgstr "errore: non c'è il valore della fiducia\n" - -#~ msgid " (main key ID %08lX)" -#~ msgstr " (key ID principale %08lX)" - -#~ msgid "rev! subkey has been revoked: %s\n" -#~ msgstr "rev! la subchiave è stata revocata: %s\n" - -#~ msgid "rev- faked revocation found\n" -#~ msgstr "rev- trovata una revoca falsificata\n" - -#, fuzzy -#~ msgid " [expired: %s]" -#~ msgstr "[scadenza: %s]" - -#~ msgid " [expires: %s]" -#~ msgstr "[scadenza: %s]" - -#, fuzzy -#~ msgid " [revoked: %s]" -#~ msgstr "[revocata]" - -#~ msgid "" -#~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" -#~ msgstr "" -#~ "ATTENZIONE: il digest `%s' non fa parte di OpenPGP.\n" -#~ "Da usare a proprio rischio!\n" - -#~ msgid "|[files]|encrypt files" -#~ msgstr "|[file]|cifra i file" - -#~ msgid "store only" -#~ msgstr "immagazzina soltanto" - -#~ msgid "|[files]|decrypt files" -#~ msgstr "|[file]|decifra i file" - -#~ msgid "sign a key non-revocably" -#~ msgstr "firma una chiave irrevocabilmente" - -#~ msgid "sign a key locally and non-revocably" -#~ msgstr "firma una chiave localmente e irrevocabilmente" - -#~ msgid "list only the sequence of packets" -#~ msgstr "elenca solo la sequenza dei pacchetti" - -#~ msgid "export the ownertrust values" -#~ msgstr "esporta i valori di fiducia" - -#~ msgid "unattended trust database update" -#~ msgstr "aggiornamento non presidiato del database della fiducia" - -#~ msgid "fix a corrupted trust database" -#~ msgstr "ripara un database della fiducia rovinato" - -#~ msgid "De-Armor a file or stdin" -#~ msgstr "rimuovi l'armatura a un file o a stdin" - -#~ msgid "En-Armor a file or stdin" -#~ msgstr "crea l'armatura a un file o a stdin" - -#~ msgid "do not force v3 signatures" -#~ msgstr "non forza l'uso di firme v3" - -#~ msgid "force v4 key signatures" -#~ msgstr "forza l'uso di firme v4" - -#~ msgid "do not force v4 key signatures" -#~ msgstr "non forza l'uso di firme v4" - -#~ msgid "never use a MDC for encryption" -#~ msgstr "non usa mai un MDC per cifrare" - -#~ msgid "use the gpg-agent" -#~ msgstr "usa gpg-agent" - -#~ msgid "|[file]|write status info to file" -#~ msgstr "|[file]|scrivi le informazioni di stato nel file" - -#~ msgid "|KEYID|ultimately trust this key" -#~ msgstr "|KEYID|assegna fiducia definitiva a questa chiave" - -#~ msgid "emulate the mode described in RFC1991" -#~ msgstr "emula il modo descritto in RFC 1991" - -#~ msgid "set all packet, cipher and digest options to OpenPGP behavior" -#~ msgstr "" -#~ "imposta tutte le opzioni di pacchetto,\n" -#~ "cifrario e digest per OpenPGP" - -#~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" -#~ msgstr "" -#~ "imposta tutte le opzioni di pacchetto, cifrario e digest per PGP 2.x" - -#~ msgid "|NAME|use message digest algorithm NAME for passphrases" -#~ msgstr "|NOME|usa l'algoritmo di message digest NOME per le passphrase" - -#~ msgid "throw keyid field of encrypted packets" -#~ msgstr "elimina il campo keyid dei pacchetti cifrati" - -#~ msgid "Show Photo IDs" -#~ msgstr "Mostra le fotografie" - -#~ msgid "Don't show Photo IDs" -#~ msgstr "Non mostra le fotografie" - -#~ msgid "Set command line to view Photo IDs" -#~ msgstr "Imposta la riga di comando per vedere le fotografie" - -#~ msgid "compress algorithm `%s' is read-only in this release\n" -#~ msgstr "" -#~ "in questa versione l'algoritmo di compressione `%s' è in sola lettura\n" - -#~ msgid "compress algorithm must be in range %d..%d\n" -#~ msgstr "l'algoritmo di compressione deve essere tra %d e %d\n" - -#~ msgid "" -#~ "%08lX: It is not sure that this key really belongs to the owner\n" -#~ "but it is accepted anyway\n" -#~ msgstr "" -#~ "%08lX: Non è sicuro che questa chiave appartenga veramente al " -#~ "proprietario\n" -#~ "ma è accettata comunque\n" - -#~ msgid "preference %c%lu is not valid\n" -#~ msgstr "la preferenza %c%lu non è valida\n" - -#~ msgid "key %08lX: not a rfc2440 key - skipped\n" -#~ msgstr "chiave %08lX: chiave non rfc2440 - saltata\n" - -#~ msgid "" -#~ "NOTE: Elgamal primary key detected - this may take some time to import\n" -#~ msgstr "" -#~ "NOTA: trovata una chiave primaria Elgamal - importarla può essere lungo\n" - -#~ msgid " (default)" -#~ msgstr " (predefinito)" - -#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" -#~ msgstr "%s%c %4u%c/%08lX creata: %s scade: %s" - -#~ msgid "can't get key from keyserver: %s\n" -#~ msgstr "impossibile scaricare la chiave dal keyserver: %s\n" - -#~ msgid "success sending to `%s' (status=%u)\n" -#~ msgstr "inviata con successo a `%s' (status=%u)\n" - -#~ msgid "failed sending to `%s': status=%u\n" -#~ msgstr "invio a `%s' fallito: status=%u\n" - -#~ msgid "this keyserver does not support --search-keys\n" -#~ msgstr "questo keyserver non gestisce --search-keys\n" - -#~ msgid "can't search keyserver: %s\n" -#~ msgstr "impossibile cercare sul keyserver: %s\n" - -#~ msgid "" -#~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " -#~ "signatures!\n" -#~ msgstr "" -#~ "chiave %08lX: questa è una chiave ElGamal generata da PGP che NON è " -#~ "sicura per le firme!\n" - -#~ msgid "" -#~ "key %08lX has been created %lu second in future (time warp or clock " -#~ "problem)\n" -#~ msgstr "" -#~ "la chiave %08lX è stata creata %lu secondo nel futuro (salto nel tempo\n" -#~ "o problema con l'orologio)\n" - -#~ msgid "" -#~ "key %08lX has been created %lu seconds in future (time warp or clock " -#~ "problem)\n" -#~ msgstr "" -#~ "la chiave %08lX è stata creata %lu secondi nel futuro (salto nel tempo\n" -#~ "o problema con l'orologio)\n" - -#~ msgid "key %08lX marked as ultimately trusted\n" -#~ msgstr "chiavi %08lX marcate come definitivamente affidabile\n" - -#~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" -#~ msgstr "ignorata la firma dalla chiave per firme Elgamal %08lX a %08lX\n" - -#~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" -#~ msgstr "ignorata la firma da %08lX alla chiave per firme Elgamal %08lX\n" - -#~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" -#~ msgstr "" -#~ "controllo al livello %d firmato=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" - -#~ msgid "" -#~ "Select the algorithm to use.\n" -#~ "\n" -#~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" -#~ "for signatures. This is the suggested algorithm because verification of\n" -#~ "DSA signatures are much faster than those of ElGamal.\n" -#~ "\n" -#~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" -#~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " -#~ "only\n" -#~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" -#~ "selected in a special way to create a safe key for signatures: this " -#~ "program\n" -#~ "does this but other OpenPGP implementations are not required to " -#~ "understand\n" -#~ "the signature+encryption flavor.\n" -#~ "\n" -#~ "The first (primary) key must always be a key which is capable of " -#~ "signing;\n" -#~ "this is the reason why the encryption only ElGamal key is not available " -#~ "in\n" -#~ "this menu." -#~ msgstr "" -#~ "Seleziona l'algoritmo da usare.\n" -#~ "\n" -#~ "DSA (alias DSS) è un algoritmo usabile solo per firmare. E l'algoritmo\n" -#~ "suggerito perché verificare firme DSA è molto più veloce di quelle " -#~ "ElGamal.\n" -#~ "\n" -#~ "ElGamal è un algoritmo usabile per firmare e cifrare.\n" -#~ "OpenPGP distingue tra due versioni di questo algoritmo: una solo per " -#~ "firmare\n" -#~ "e una per firmare e cifrare. In realtà è sempre lo stesso, ma per creare\n" -#~ "firme sicure per la cifratura occorre scegliere in un modo particolare " -#~ "alcuni\n" -#~ "parametri: questo programma lo fa ma non è richiesto che altre " -#~ "implementazioni\n" -#~ "di OpenPGP capiscano la versione per firmare e cifrare.\n" -#~ "\n" -#~ "La prima chiave (primaria) deve sempre essere una chiave in grado di " -#~ "firmare;\n" -#~ "questo è il motivo per cui le chiavi ElGamal solo per cifrare non sono\n" -#~ "disponibili in questo menù." - -#~ msgid "" -#~ "Although these keys are defined in RFC2440 they are not suggested\n" -#~ "because they are not supported by all programs and signatures created\n" -#~ "with them are quite large and very slow to verify." -#~ msgstr "" -#~ "Anche se queste chiavi sono definite da RFC2400 non sono suggerite perché " -#~ "non\n" -#~ "sono gestite da tutti i programmi e le firme create sono grandi e lunghe " -#~ "da\n" -#~ "verificare." - -#~ msgid "%lu keys so far checked (%lu signatures)\n" -#~ msgstr "Per ora sono state controllate %lu chiavi (%lu firme)\n" - -#~ msgid "key incomplete\n" -#~ msgstr "chiave incompleta\n" - -#~ msgid "key %08lX incomplete\n" -#~ msgstr "chiave %08lX incompleta\n" +"Sintassi: gpg-check-pattern [opzioni] patternfile\n" +"Controllare una passphrase data su stdin rispetto al patternfile\n" @@ -8,9 +8,9 @@ # msgid "" msgstr "" -"Project-Id-Version: gnupg 2.2.20\n" +"Project-Id-Version: gnupg 2.2.23\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" -"PO-Revision-Date: 2020-07-07 09:37+0900\n" +"PO-Revision-Date: 2020-11-12 12:59+0900\n" "Last-Translator: NIIBE Yutaka <gniibe@fsij.org>\n" "Language-Team: none\n" "Language: ja\n" @@ -1670,6 +1670,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "*è¦å‘Š*: '%s'ã¯ç©ºã®ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "æš—å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ '%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "ダイジェスト・アルゴリズム'%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n" + +#, c-format msgid "reading from '%s'\n" msgstr "'%s'ã‹ã‚‰èªã¿è¾¼ã¿\n" @@ -1680,10 +1688,6 @@ msgstr "" "*è¦å‘Š*: 共通éµæš—å·æ–¹å¼ %s (%d) ã®å¼·åˆ¶ãŒã€å—å–人ã®å„ªå…ˆæŒ‡å®šã‚’ãã‚€ãã¾ã™\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "æš—å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ '%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "*è¦å‘Š*: éµ%sã¯ã€%sモードã§ã¯ã€æš—å·åŒ–ã«é©ã—ã¾ã›ã‚“\n" @@ -1930,10 +1934,13 @@ msgid "remove keys from the secret keyring" msgstr "秘密éµãƒªãƒ³ã‚°ã‹ã‚‰éµã‚’削除" msgid "quickly sign a key" -msgstr "éµã«ã™ã°ã‚„ãç½²å" +msgstr "ã™ã°ã‚„ãéµã«ç½²å" msgid "quickly sign a key locally" -msgstr "éµã¸ã™ã°ã‚„ããƒãƒ¼ã‚«ãƒ«ã«ç½²å" +msgstr "ã™ã°ã‚„ãéµã¸ãƒãƒ¼ã‚«ãƒ«ã«ç½²å" + +msgid "quickly revoke a key signature" +msgstr "ã™ã°ã‚„ãéµã¸ã®ç½²åを失効" msgid "sign a key" msgstr "éµã«ç½²å" @@ -2388,10 +2395,6 @@ msgid "%s does not yet work with %s\n" msgstr "%sã¯%sã§ã¯ã¾ã 機能ã—ã¾ã›ã‚“\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "ダイジェスト・アルゴリズム'%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "圧縮アルゴリズム'%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n" @@ -3464,6 +3467,14 @@ msgid "Nothing to sign.\n" msgstr "ç½²åã™ã‚‹ã‚‚ã®ãŒã‚ã‚Šã¾ã›ã‚“。\n" #, c-format +msgid "Not signed by you.\n" +msgstr "ã‚ãªãŸã«ã‚ˆã£ã¦ç½²åã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" + +#, c-format +msgid "revoking the key signature failed: %s\n" +msgstr "éµã®ç½²åã®å¤±åŠ¹ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "'%s'ã¯ã€æœ‰åŠ¹ãªæœ‰åŠ¹æœŸé™ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n" @@ -3750,9 +3761,6 @@ msgstr "ãã‚Œã§ã‚‚本当ã«å¤±åŠ¹ã—ãŸã„ã§ã™ã‹? (y/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "ã“ã®ç½²åã«å¯¾ã™ã‚‹å¤±åŠ¹è¨¼æ˜Žæ›¸ã‚’作æˆã—ã¾ã™ã‹? (y/N) " -msgid "Not signed by you.\n" -msgstr "ã‚ãªãŸã«ã‚ˆã£ã¦ç½²åã•ã‚Œã¦ã„ã¾ã›ã‚“。\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "ã“れらã®ãƒ¦ãƒ¼ã‚¶IDã«éµ%sã§ç½²åã—ã¾ã—ãŸ:\n" @@ -1703,6 +1703,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "ADVARSEL: «%s» er en tom fil\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n" + +#, c-format msgid "reading from '%s'\n" msgstr "leser fra «%s»\n" @@ -1714,10 +1722,6 @@ msgstr "" "mottakers oppsett\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "ADVARSEL: nøkkel %s egner seg ikke for kryptering i %s-modus\n" @@ -1972,6 +1976,11 @@ msgstr "hurtigsigner nøkkel" msgid "quickly sign a key locally" msgstr "hurtigsigner nøkkel lokalt" +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "opphev bruker-ID raskt" + msgid "sign a key" msgstr "signer nøkkel" @@ -2424,10 +2433,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s virker ikke enda med %s\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "du kan ikke bruke komprimeringsalgoritme «%s» i %s-modus\n" @@ -3530,6 +3535,15 @@ msgid "Nothing to sign.\n" msgstr "Ingenting Ã¥ signere.\n" #, c-format +msgid "Not signed by you.\n" +msgstr "Ikke signert av deg.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "kontroll av opprettet signatur mislyktes: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "«%s» er en ugyldig utløpstid\n" @@ -3825,9 +3839,6 @@ msgstr "Er du sikker pÃ¥ at du vil oppheve den? (j/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Vil du lage et opphevelsessertifikat for denne signaturen? (j/N) " -msgid "Not signed by you.\n" -msgstr "Ikke signert av deg.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Du har signert disse bruker-id-ene med nøkkelen %s:\n" @@ -1672,6 +1672,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "OSTRZEÅ»ENIE: plik ,,%s'' jest pusty\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "szyfr ,,%s'' nie może być używany w trybie %s\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "algorytm skrótu ,,%s'' nie może być używany w trybie %s\n" + +#, c-format msgid "reading from '%s'\n" msgstr "odczyt z ,,%s''\n" @@ -1683,10 +1691,6 @@ msgstr "" "adresata\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "szyfr ,,%s'' nie może być używany w trybie %s\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "OSTRZEÅ»ENIE: klucz %s nie nadaje siÄ™ do szyfrowania w trybie %s\n" @@ -1942,6 +1946,11 @@ msgstr "szybkie zÅ‚ożenie podpisu na kluczu" msgid "quickly sign a key locally" msgstr "szybkie zÅ‚ożenie prywatnego podpisu na kluczu" +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "szybkie unieważnienie identyfikatora użytkownika" + msgid "sign a key" msgstr "zÅ‚ożenie podpisu na kluczu" @@ -2419,10 +2428,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s jeszcze nie dziaÅ‚a z %s!\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "algorytm skrótu ,,%s'' nie może być używany w trybie %s\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "algorytm kompresji ,,%s'' nie może być używany w trybie %s\n" @@ -3544,6 +3549,15 @@ msgid "Nothing to sign.\n" msgstr "Nie ma nic do podpisania.\n" #, c-format +msgid "Not signed by you.\n" +msgstr "Nie podpisane przez ciebie.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "sprawdzenie zÅ‚ożonego podpisu nie powiodÅ‚o siÄ™: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr ",,%s'' nie jest poprawnym czasem wygaÅ›niÄ™cia\n" @@ -3836,9 +3850,6 @@ msgstr "Czy dalej chcesz go unieważnić? (t/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Stworzyć certyfikat unieważnienia tego podpisu? (t/N) " -msgid "Not signed by you.\n" -msgstr "Nie podpisane przez ciebie.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Te identyfikatory na kluczu %s sÄ… podpisane przez Ciebie:\n" @@ -1782,6 +1782,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "AVISO: `%s' é um ficheiro vazio\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "não pode utilizar %s enquanto estiver no modo %s\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "não pode utilizar %s enquanto estiver no modo %s\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "lendo de `%s'\n" @@ -1793,10 +1801,6 @@ msgstr "" "ao forçar a cifra simétrica %s (%d) viola as preferências do destinatário\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "não pode utilizar %s enquanto estiver no modo %s\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "AVISO: \"%s\" é uma opção depreciada\n" @@ -2076,6 +2080,11 @@ msgstr "assinar uma chave" msgid "quickly sign a key locally" msgstr "assinar uma chave localmente" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "gerar um novo par de chaves" + msgid "sign a key" msgstr "assinar uma chave" @@ -2566,10 +2575,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s não faz sentido com %s!\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "não pode utilizar %s enquanto estiver no modo %s\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "não pode utilizar %s enquanto estiver no modo %s\n" @@ -3740,6 +3745,15 @@ msgid "Nothing to sign.\n" msgstr "Nada para assinar com a chave %08lX\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " assinado por %08lX em %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "verificação da assinatura criada falhou: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s não é um conjunto de caracteres válido\n" @@ -4043,10 +4057,6 @@ msgstr "Tem a certeza de que quer revogá-la de qualquer forma? (s/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)" -#, fuzzy -msgid "Not signed by you.\n" -msgstr " assinado por %08lX em %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Assinou estes identificadores de utilizadores:\n" @@ -1800,6 +1800,16 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "AVERTISMENT: `%s' este un fiÅŸier gol\n" #, fuzzy, c-format +#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "nu puteÅ£i folosi algoritmul de cifrare `%s' câtă vreme în modul %s\n" + +#, fuzzy, c-format +#| msgid "you may not use digest algorithm `%s' while in %s mode\n" +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "nu puteÅ£i folosi algorimul de rezumat `%s' câtă vreme în modul %s\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "citesc din `%s'\n" @@ -1812,11 +1822,6 @@ msgstr "" "destinatarului\n" #, fuzzy, c-format -#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "nu puteÅ£i folosi algoritmul de cifrare `%s' câtă vreme în modul %s\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "AVERTISMENT: \"%s\" este o opÅ£iune învechită\n" @@ -2100,6 +2105,11 @@ msgstr "semnează o cheie" msgid "quickly sign a key locally" msgstr "semnează o cheie local" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "generează o nouă perechi de chei" + msgid "sign a key" msgstr "semnează o cheie" @@ -2624,11 +2634,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s nu merge încă cu %s!\n" #, fuzzy, c-format -#| msgid "you may not use digest algorithm `%s' while in %s mode\n" -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "nu puteÅ£i folosi algorimul de rezumat `%s' câtă vreme în modul %s\n" - -#, fuzzy, c-format #| msgid "you may not use compression algorithm `%s' while in %s mode\n" msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "nu puteÅ£i folosi algoritmul de compresie `%s' câtă vreme în modul %s\n" @@ -3780,6 +3785,15 @@ msgstr "Nu există acest ID utilizator.\n" msgid "Nothing to sign.\n" msgstr "Nimic de semnat cu cheia %s\n" +#, c-format +msgid "Not signed by you.\n" +msgstr "" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "verificarea semnăturii create a eÅŸuat: %s\n" + #, fuzzy, c-format #| msgid "`%s' is not a valid signature expiration\n" msgid "'%s' is not a valid expiration time\n" @@ -4094,9 +4108,6 @@ msgstr "SunteÅ£i încă sigur(ă) că doriÅ£i să o revocaÅ£i? (d/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "CreaÅ£i un certificat de revocare pentru această semnătură? (d/N) " -msgid "Not signed by you.\n" -msgstr "" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "AÅ£i semnat aceste ID-uri utilizator pe cheia %s:\n" @@ -1682,6 +1682,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "Внимание: файл '%s' пуÑÑ‚\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "хеш-функцию '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n" + +#, c-format msgid "reading from '%s'\n" msgstr "чтение из '%s'\n" @@ -1693,10 +1701,6 @@ msgstr "" " нарушает Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "Внимание: ключ %s не подходит Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме %s\n" @@ -1955,6 +1959,11 @@ msgstr "быÑтро подпиÑать ключ" msgid "quickly sign a key locally" msgstr "быÑтро подпиÑать ключ локально" +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "быÑтро отозвать идентификатор пользователÑ" + msgid "sign a key" msgstr "подпиÑать ключ" @@ -2423,10 +2432,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s пока не работает ÑовмеÑтно Ñ %s!\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "хеш-функцию '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "алгоритм ÑÐ¶Ð°Ñ‚Ð¸Ñ '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n" @@ -3535,6 +3540,15 @@ msgid "Nothing to sign.\n" msgstr "ПодпиÑывать нечего.\n" #, c-format +msgid "Not signed by you.\n" +msgstr "Вами не подпиÑано.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "Ñбой проверки Ñозданной подпиÑи: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "'%s' - не допуÑтимый Ñрок дейÑтвиÑ\n" @@ -3831,9 +3845,6 @@ msgstr "Ð’Ñ‹ уверены, что хотите отозвать? (y/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Создать Ñертификат отзыва Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ подпиÑи? (y/N) " -msgid "Not signed by you.\n" -msgstr "Вами не подпиÑано.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Ð’Ñ‹ подпиÑали Ñти идентификаторы пользователей на ключе %s:\n" @@ -1785,6 +1785,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "VAROVANIE: súbor `%s' je prázdny\n" #, fuzzy, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "nemôžete použiÅ¥ Å¡ifrovacà algoritmus \"%s\" v móde %s\n" + +#, fuzzy, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "nemôžete použiÅ¥ hashovacà algoritmus \"%s\" v móde %s\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "ÄÃtam z `%s'\n" @@ -1795,10 +1803,6 @@ msgid "" msgstr "vyžiadaná symetrická Å¡ifra %s (%d) nevyhovuje predvoľbám prÃjemcu\n" #, fuzzy, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "nemôžete použiÅ¥ Å¡ifrovacà algoritmus \"%s\" v móde %s\n" - -#, fuzzy, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "VAROVÃNÃ: použitie parametra \"%s\" sa neodporúÄa\n" @@ -2086,6 +2090,11 @@ msgstr "podpÃsaÅ¥ kľúÄ" msgid "quickly sign a key locally" msgstr "podpÃsaÅ¥ kÄ¾ÃºÄ lokálne" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "vytvoriÅ¥ nový pár kľúÄov" + msgid "sign a key" msgstr "podpÃsaÅ¥ kľúÄ" @@ -2580,10 +2589,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s eÅ¡te nepracuje s %s\n" #, fuzzy, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "nemôžete použiÅ¥ hashovacà algoritmus \"%s\" v móde %s\n" - -#, fuzzy, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "nemôžete použiÅ¥ kompresný algoritmus \"%s\" v móde %s\n" @@ -3757,6 +3762,15 @@ msgid "Nothing to sign.\n" msgstr "NiÄ na podpÃsanie kľúÄom %08lX\n" #, fuzzy, c-format +msgid "Not signed by you.\n" +msgstr " podpÃsané %08lX v %s%s\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "kontrola vytvoreného podpisu sa nepodarila: %s\n" + +#, fuzzy, c-format msgid "'%s' is not a valid expiration time\n" msgstr "%s nie je platná znaková sada\n" @@ -4060,10 +4074,6 @@ msgstr "Ste si istý, že ho chcete stále revokovaÅ¥? (a/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "VytvoriÅ¥ pre tento podpis revokaÄný certifikát? (a/N)" -#, fuzzy -msgid "Not signed by you.\n" -msgstr " podpÃsané %08lX v %s%s\n" - #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "PodpÃsali ste nasledujúce identifikátory užÃvateľa:\n" @@ -1878,6 +1878,17 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "VARNING: \"%s\" är en tom fil\n" #, fuzzy, c-format +#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "du fÃ¥r inte använda chifferalgoritmen \"%s\" när du är i %s-läget\n" + +#, fuzzy, c-format +#| msgid "you may not use digest algorithm `%s' while in %s mode\n" +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "" +"du fÃ¥r inte använda sammandragsalgoritmen \"%s\" när du är i %s-läget\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "läser frÃ¥n \"%s\"\n" @@ -1890,11 +1901,6 @@ msgstr "" "mottagarinställningarna\n" #, fuzzy, c-format -#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "du fÃ¥r inte använda chifferalgoritmen \"%s\" när du är i %s-läget\n" - -#, fuzzy, c-format #| msgid "WARNING: \"%s\" is an obsolete option - it has no effect\n" msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "VARNING: \"%s\" är en förÃ¥ldrad flagga - den har ingen effekt\n" @@ -2181,6 +2187,11 @@ msgstr "signera en nyckel" msgid "quickly sign a key locally" msgstr "signera en nyckel lokalt" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "generera ett nytt nyckelpar" + msgid "sign a key" msgstr "signera en nyckel" @@ -2701,12 +2712,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s fungerar ännu inte med %s\n" #, fuzzy, c-format -#| msgid "you may not use digest algorithm `%s' while in %s mode\n" -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "" -"du fÃ¥r inte använda sammandragsalgoritmen \"%s\" när du är i %s-läget\n" - -#, fuzzy, c-format #| msgid "you may not use compression algorithm `%s' while in %s mode\n" msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "" @@ -3881,6 +3886,15 @@ msgstr "Ingen sÃ¥dan användaridentitet.\n" msgid "Nothing to sign.\n" msgstr "Det finns inget att signera med nyckeln %s\n" +#, c-format +msgid "Not signed by you.\n" +msgstr "Inte signerad av dig.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "kontroll av den skapade signaturen misslyckades: %s\n" + #, fuzzy, c-format #| msgid "`%s' is not a valid signature expiration\n" msgid "'%s' is not a valid expiration time\n" @@ -4195,9 +4209,6 @@ msgstr "Är du säker pÃ¥ att du fortfarande vill spärra den? (j/N)" msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Vill du skapa ett spärrcertifikat för denna signatur? (j/N)" -msgid "Not signed by you.\n" -msgstr "Inte signerad av dig.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Du har signerat följande användaridentiteter med nyckeln %s:\n" @@ -1825,6 +1825,16 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "UYARI: \"%s\" dosyası boÅŸ\n" #, fuzzy, c-format +#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "%2$s kipindeyken '%1$s' ÅŸifreleme algoritması kullanılamaz\n" + +#, fuzzy, c-format +#| msgid "you may not use digest algorithm `%s' while in %s mode\n" +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "%2$s kipindeyken '%1$s' özet algoritması kullanılamaz\n" + +#, fuzzy, c-format #| msgid "reading from `%s'\n" msgid "reading from '%s'\n" msgstr "`%s'den okunuyor\n" @@ -1837,11 +1847,6 @@ msgstr "" "zorlanıyor\n" #, fuzzy, c-format -#| msgid "you may not use cipher algorithm `%s' while in %s mode\n" -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "%2$s kipindeyken '%1$s' ÅŸifreleme algoritması kullanılamaz\n" - -#, fuzzy, c-format #| msgid "WARNING: \"%s\" is an obsolete option - it has no effect\n" msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "UYARI: \"%s\" seçeneÄŸi eskidi - artık etkisiz\n" @@ -2125,6 +2130,11 @@ msgstr "bir anahtarı imzalar" msgid "quickly sign a key locally" msgstr "bir anahtarı yerel olarak imzalar" +#, fuzzy +#| msgid "generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "yeni bir anahtar çifti üretir" + msgid "sign a key" msgstr "bir anahtarı imzalar" @@ -2634,11 +2644,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s, %s ile henüz çalışmıyor\n" #, fuzzy, c-format -#| msgid "you may not use digest algorithm `%s' while in %s mode\n" -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "%2$s kipindeyken '%1$s' özet algoritması kullanılamaz\n" - -#, fuzzy, c-format #| msgid "you may not use compression algorithm `%s' while in %s mode\n" msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "%2$s kipindeyken '%1$s' sıkıştırma algoritması kullanılamaz\n" @@ -3824,6 +3829,15 @@ msgstr "Böyle bir kullanıcı kimliÄŸi yok.\n" msgid "Nothing to sign.\n" msgstr "%s anahtarı ile imzalanacak hiçbir ÅŸey yok\n" +#, c-format +msgid "Not signed by you.\n" +msgstr "" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "oluÅŸturulan imzanın denetimi baÅŸarısız: %s\n" + #, fuzzy, c-format #| msgid "`%s' is not a valid signature expiration\n" msgid "'%s' is not a valid expiration time\n" @@ -4147,9 +4161,6 @@ msgstr "" "Bu imza için bir yürürlükten kaldırma sertifikası oluÅŸturulsun mu? (e/H veya " "y/N) " -msgid "Not signed by you.\n" -msgstr "" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Bu kullanıcı kimliklerini %s anahtarı üzerinde imzalamışsınız:\n" @@ -1704,6 +1704,16 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "УВÐГÐ: файл «%s» Ñ” порожнім\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s» не можна викориÑтовувати у режимі %s\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "" +"алгоритм ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¸Ñ… Ñум «%s» не можна викориÑтовувати у режимі " +"%s\n" + +#, c-format msgid "reading from '%s'\n" msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· «%s»\n" @@ -1715,10 +1725,6 @@ msgstr "" "параметрам отримувача\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s» не можна викориÑтовувати у режимі %s\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "УВÐГÐ: ключ %s не можна викориÑтовувати Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ режимі %s\n" @@ -1980,6 +1986,11 @@ msgstr "швидко підпиÑати ключ" msgid "quickly sign a key locally" msgstr "швидко підпиÑати ключ локально" +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "швидке Ð²Ñ–Ð´ÐºÐ»Ð¸ÐºÐ°Ð½Ð½Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° кориÑтувача" + msgid "sign a key" msgstr "підпиÑати ключ" @@ -2459,12 +2470,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s ще не може працювати разом з %s\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "" -"алгоритм ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¸Ñ… Ñум «%s» не можна викориÑтовувати у режимі " -"%s\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "алгоритм ÑтиÑÐºÐ°Ð½Ð½Ñ Â«%s» не можна викориÑтовувати у режимі %s\n" @@ -3584,6 +3589,15 @@ msgid "Nothing to sign.\n" msgstr "Ðічого підпиÑувати.\n" #, c-format +msgid "Not signed by you.\n" +msgstr "Ðе підпиÑано вами.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "невдала Ñпроба перевірити Ñтворений підпиÑ: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "«%s» не Ñ” коректним запиÑом Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñтроку дії\n" @@ -3884,9 +3898,6 @@ msgstr "Ви Ñправді бажаєте відкликати його? (y/N Ð msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Створити Ñертифікат Ð²Ñ–Ð´ÐºÐ»Ð¸ÐºÐ°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ підпиÑу? (y/N або Ñ‚/Ð) " -msgid "Not signed by you.\n" -msgstr "Ðе підпиÑано вами.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Вами підпиÑано ці ідентифікатори кориÑтувачів у ключі %s:\n" diff --git a/po/zh_CN.po b/po/zh_CN.po index fde65c1..f3fcc60 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1679,6 +1679,14 @@ msgid "WARNING: '%s' is an empty file\n" msgstr "è¦å‘Šï¼šâ€˜%s’是一个空文件\n" #, c-format +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "密文算法 ‘%s’ å¯èƒ½ä¸èƒ½è¢«ç”¨äºŽ %s 模å¼\n" + +#, c-format +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "摘è¦ç®—法‘%s’ä¸èƒ½åœ¨ %s 模å¼ä¸‹ä½¿ç”¨\n" + +#, c-format msgid "reading from '%s'\n" msgstr "æ£åœ¨ä»Žâ€˜%s’读å–\n" @@ -1688,10 +1696,6 @@ msgid "" msgstr "è¦å‘Šï¼š 强制对称密文 %s (%d) 与接收者的å好设置冲çª\n" #, c-format -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "密文算法 ‘%s’ å¯èƒ½ä¸èƒ½è¢«ç”¨äºŽ %s 模å¼\n" - -#, c-format msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "è¦å‘Šï¼š 密钥 %s 在 %s 模å¼ä¸‹ä¸é€‚ç”¨äºŽåŠ å¯†\n" @@ -1941,6 +1945,11 @@ msgstr "快速ç¾å一个密钥" msgid "quickly sign a key locally" msgstr "快速本地ç¾å一个密钥" +#, fuzzy +#| msgid "quickly revoke a user-id" +msgid "quickly revoke a key signature" +msgstr "快速åŠé”€ä¸€ä¸ªç”¨æˆ·æ ‡è¯†" + msgid "sign a key" msgstr "ç¾å一个密钥" @@ -2392,10 +2401,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s å°šä¸èƒ½å’Œ %s 并用\n" #, c-format -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "摘è¦ç®—法‘%s’ä¸èƒ½åœ¨ %s 模å¼ä¸‹ä½¿ç”¨\n" - -#, c-format msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "压缩算法‘%s’ä¸èƒ½åœ¨ %s 模å¼ä¸‹ä½¿ç”¨\n" @@ -3464,6 +3469,15 @@ msgid "Nothing to sign.\n" msgstr "没有å¯è¢«ç¾å的东西。\n" #, c-format +msgid "Not signed by you.\n" +msgstr "并éžç”±æ‚¨ç¾å。\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "检查已建立的ç¾åæ—¶å‘生错误: %s\n" + +#, c-format msgid "'%s' is not a valid expiration time\n" msgstr "‘%s’ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„过期时间\n" @@ -3746,9 +3760,6 @@ msgstr "您确定您ä»ç„¶æƒ³è¦åŠé”€å®ƒå—?(y/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "è¦ä¸ºè¿™ä»½ç¾å生æˆä¸€ä»½åŠé”€è¯ä¹¦å—?(y/N) " -msgid "Not signed by you.\n" -msgstr "并éžç”±æ‚¨ç¾å。\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "您已ç»ç¾åæ¥å¯†é’¥ %s ä¸Šçš„è¿™äº›ç”¨æˆ·æ ‡è¯†ï¼š\n" diff --git a/po/zh_TW.po b/po/zh_TW.po index 049d3d3..8d8cf1a 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -1716,6 +1716,16 @@ msgstr "'%s' 已經被壓縮了\n" msgid "WARNING: '%s' is an empty file\n" msgstr "è¦å‘Š: '%s' 是個空檔案\n" +#, fuzzy, c-format +#| msgid "you may not use cipher algorithm '%s' while in %s mode\n" +msgid "cipher algorithm '%s' may not be used in %s mode\n" +msgstr "ä½ ä¸è©²å°‡ '%s' 編密演算法用於 %s 模å¼\n" + +#, fuzzy, c-format +#| msgid "you may not use digest algorithm '%s' while in %s mode\n" +msgid "digest algorithm '%s' may not be used in %s mode\n" +msgstr "ä½ ä¸è©²å°‡ '%s' 摘è¦æ¼”算法用於 %s 模å¼\n" + #, c-format msgid "reading from '%s'\n" msgstr "æ£åœ¨å¾ž '%s' 讀å–\n" @@ -1726,11 +1736,6 @@ msgid "" msgstr "è¦å‘Š: 強迫使用 %s (%d) å°ç¨±å¼ç·¨å¯†æ³•æœƒé•å收件者å好è¨å®š\n" #, fuzzy, c-format -#| msgid "you may not use cipher algorithm '%s' while in %s mode\n" -msgid "cipher algorithm '%s' may not be used in %s mode\n" -msgstr "ä½ ä¸è©²å°‡ '%s' 編密演算法用於 %s 模å¼\n" - -#, fuzzy, c-format #| msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n" msgid "WARNING: key %s is not suitable for encryption in %s mode\n" msgstr "è¦å‘Š: \"%s%s\" 是已廢棄的é¸é … - 沒有效果\n" @@ -1990,6 +1995,11 @@ msgstr "快速簽署金鑰" msgid "quickly sign a key locally" msgstr "快速在本機簽署金鑰" +#, fuzzy +#| msgid "quickly generate a new key pair" +msgid "quickly revoke a key signature" +msgstr "快速產生新的金鑰å°" + msgid "sign a key" msgstr "簽署金鑰" @@ -2455,11 +2465,6 @@ msgid "%s does not yet work with %s\n" msgstr "%s 還沒辦法跟 %s 一起é‹ä½œ\n" #, fuzzy, c-format -#| msgid "you may not use digest algorithm '%s' while in %s mode\n" -msgid "digest algorithm '%s' may not be used in %s mode\n" -msgstr "ä½ ä¸è©²å°‡ '%s' 摘è¦æ¼”算法用於 %s 模å¼\n" - -#, fuzzy, c-format #| msgid "you may not use compression algorithm '%s' while in %s mode\n" msgid "compression algorithm '%s' may not be used in %s mode\n" msgstr "ä½ ä¸è©²å°‡ '%s' 壓縮演算法用於 %s 模å¼\n" @@ -3559,6 +3564,15 @@ msgstr "沒有相符的使用者 ID." msgid "Nothing to sign.\n" msgstr "沒有æ±è¥¿å¯ä»¥ç°½ç½².\n" +#, c-format +msgid "Not signed by you.\n" +msgstr "並éžç”±ä½ 所簽署.\n" + +#, fuzzy, c-format +#| msgid "checking created signature failed: %s\n" +msgid "revoking the key signature failed: %s\n" +msgstr "æª¢æŸ¥å·²å»ºç«‹çš„ç°½ç« æ™‚å‡ºéŒ¯: %s\n" + #, fuzzy, c-format #| msgid "'%s' is not a valid signature expiration\n" msgid "'%s' is not a valid expiration time\n" @@ -3862,9 +3876,6 @@ msgstr "ä½ ç¢ºå®šä»ç„¶æƒ³è¦æ’¤éŠ·å®ƒå—Ž? (y/N) " msgid "Create a revocation certificate for this signature? (y/N) " msgstr "è¦ç‚ºé€™ä»½ç°½ç« 建立一份撤銷憑è‰å—Ž? (y/N) " -msgid "Not signed by you.\n" -msgstr "並éžç”±ä½ 所簽署.\n" - #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "ä½ å·²ç¶“ç°½ç½²äº†é‡‘é‘° %s 上的這些使用者 ID:\n" diff --git a/scd/Makefile.am b/scd/Makefile.am index cbd1f9f..32be6ab 100644 --- a/scd/Makefile.am +++ b/scd/Makefile.am @@ -17,7 +17,7 @@ ## Process this file with automake to produce Makefile.in -EXTRA_DIST = ChangeLog-2011 scdaemon-w32info.rc +EXTRA_DIST = ChangeLog-2011 scdaemon-w32info.rc scdaemon.w32-manifest.in libexec_PROGRAMS = scdaemon @@ -26,7 +26,7 @@ AM_CPPFLAGS = $(LIBUSB_CPPFLAGS) include $(top_srcdir)/am/cmacros.am if HAVE_W32_SYSTEM -resource_objs += scdaemon-w32info.o +scdaemon_robjs = $(resource_objs) scdaemon-w32info.o endif AM_CFLAGS = $(LIBGCRYPT_CFLAGS) \ @@ -48,4 +48,4 @@ scdaemon_SOURCES = \ scdaemon_LDADD = $(libcommonpth) \ $(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(LIBASSUAN_LIBS) $(NPTH_LIBS) \ $(LIBUSB_LIBS) $(GPG_ERROR_LIBS) \ - $(LIBINTL) $(DL_LIBS) $(NETLIBS) $(LIBICONV) $(resource_objs) + $(LIBINTL) $(DL_LIBS) $(NETLIBS) $(LIBICONV) $(scdaemon_robjs) @@ -67,7 +67,7 @@ #include "ccid-driver.h" struct dev_list { - struct ccid_dev_table *ccid_table; + void *table; const char *portstr; int idx; int idx_max; @@ -502,6 +502,13 @@ host_sw_string (long err) case SW_HOST_NO_PINPAD: return "no pinpad"; case SW_HOST_ALREADY_CONNECTED: return "already connected"; case SW_HOST_CANCELLED: return "cancelled"; + case SW_HOST_USB_OTHER: return "USB general error"; + case SW_HOST_USB_IO: return "USB I/O error"; + case SW_HOST_USB_ACCESS: return "USB permission denied"; + case SW_HOST_USB_NO_DEVICE:return "USB no device"; + case SW_HOST_USB_BUSY: return "USB busy"; + case SW_HOST_USB_TIMEOUT: return "USB timeout"; + case SW_HOST_USB_OVERFLOW: return "USB overflow"; default: return "unknown host status error"; } } @@ -675,7 +682,7 @@ pcsc_get_status (int slot, unsigned int *status, int on_wire) reader_table[slot].pcsc.current_state = (rdrstates[0].event_state & ~PCSC_STATE_CHANGED); - if (DBG_CARD_IO) + if (DBG_READER) log_debug ("pcsc_get_status_change: %s%s%s%s%s%s%s%s%s%s\n", (rdrstates[0].event_state & PCSC_STATE_IGNORE)? " ignore":"", @@ -1527,7 +1534,7 @@ open_ccid_reader (struct dev_list *dl) return -1; slotp = reader_table + slot; - err = ccid_open_reader (dl->portstr, dl->idx, dl->ccid_table, + err = ccid_open_reader (dl->portstr, dl->idx, dl->table, &slotp->ccid.handle, &slotp->rdrname); if (!err) { @@ -1886,14 +1893,14 @@ apdu_dev_list_start (const char *portstr, struct dev_list **l_p) #ifdef HAVE_LIBUSB if (opt.disable_ccid) { - dl->ccid_table = NULL; + dl->table = NULL; dl->idx_max = 1; } else { gpg_error_t err; - err = ccid_dev_scan (&dl->idx_max, &dl->ccid_table); + err = ccid_dev_scan (&dl->idx_max, &dl->table); if (err) return err; @@ -1915,7 +1922,7 @@ apdu_dev_list_start (const char *portstr, struct dev_list **l_p) } } #else - dl->ccid_table = NULL; + dl->table = NULL; dl->idx_max = 1; #endif /* HAVE_LIBUSB */ @@ -1927,8 +1934,8 @@ void apdu_dev_list_finish (struct dev_list *dl) { #ifdef HAVE_LIBUSB - if (dl->ccid_table) - ccid_dev_scan_finish (dl->ccid_table, dl->idx_max); + if (dl->table) + ccid_dev_scan_finish (dl->table, dl->idx_max); #endif xfree (dl); npth_mutex_unlock (&reader_table_lock); @@ -2044,7 +2051,7 @@ apdu_open_reader (struct dev_list *dl, int app_empty) int slot; #ifdef HAVE_LIBUSB - if (dl->ccid_table) + if (dl->table) { /* CCID readers. */ int readerno; @@ -2081,7 +2088,7 @@ apdu_open_reader (struct dev_list *dl, int app_empty) while (dl->idx < dl->idx_max) { - unsigned int bai = ccid_get_BAI (dl->idx, dl->ccid_table); + unsigned int bai = ccid_get_BAI (dl->idx, dl->table); if (DBG_READER) log_debug ("apdu_open_reader: BAI=%x\n", bai); @@ -72,7 +72,15 @@ enum { SW_HOST_ABORTED = 0x1000d, SW_HOST_NO_PINPAD = 0x1000e, SW_HOST_ALREADY_CONNECTED = 0x1000f, - SW_HOST_CANCELLED = 0x10010 + SW_HOST_CANCELLED = 0x10010, + SW_HOST_DEVICE_ACCESS = 0x10011, + SW_HOST_USB_OTHER = 0x10020, + SW_HOST_USB_IO = 0x10021, + SW_HOST_USB_ACCESS = 0x10023, + SW_HOST_USB_NO_DEVICE = 0x10024, + SW_HOST_USB_BUSY = 0x10026, + SW_HOST_USB_TIMEOUT = 0x10027, + SW_HOST_USB_OVERFLOW = 0x10028 }; struct dev_list; diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c index ccc360f..6245a53 100644 --- a/scd/app-openpgp.c +++ b/scd/app-openpgp.c @@ -1,6 +1,7 @@ /* app-openpgp.c - The OpenPGP card application. - * Copyright (C) 2003, 2004, 2005, 2007, 2008, - * 2009, 2013, 2014, 2015 Free Software Foundation, Inc. + * Copyright (C) 2003-2005, 2007-2009, + * 2013-2015 Free Software Foundation, Inc. + * Copyright (C) 2003-2005, 2007-2009, 2013-2015, 2020 g10 Code GmbH * * This file is part of GnuPG. * @@ -50,17 +51,7 @@ #include <assert.h> #include <time.h> -#if GNUPG_MAJOR_VERSION == 1 -/* This is used with GnuPG version < 1.9. The code has been source - copied from the current GnuPG >= 1.9 and is maintained over - there. */ -#include "options.h" -#include "errors.h" -#include "memory.h" -#include "cardglue.h" -#else /* GNUPG_MAJOR_VERSION != 1 */ #include "scdaemon.h" -#endif /* GNUPG_MAJOR_VERSION != 1 */ #include "../common/util.h" #include "../common/i18n.h" @@ -176,6 +167,7 @@ struct app_local_s { is usually only required for cross checks because the length of an S-expression is implicitly available. */ + unsigned char keygrip_str[41]; /* The keygrip, null terminated */ } pk[3]; unsigned char status_indicator; /* The card status indicator. */ @@ -1291,7 +1283,6 @@ get_remaining_tries (app_t app, int adminpw) the according hex representation to FPR. Caller must have provide a buffer at FPR of least 41 bytes. Returns 0 on success or an error code. */ -#if GNUPG_MAJOR_VERSION > 1 static gpg_error_t retrieve_fpr_from_card (app_t app, int keyno, char *fpr) { @@ -1310,7 +1301,6 @@ retrieve_fpr_from_card (app_t app, int keyno, char *fpr) xfree (relptr); return err; } -#endif /*GNUPG_MAJOR_VERSION > 1*/ /* Retrieve the public key material for the RSA key, whose fingerprint @@ -1319,7 +1309,6 @@ retrieve_fpr_from_card (app_t app, int keyno, char *fpr) public exponent at E and ELEN. Returns zero on success, an error code on failure. Caller must release the allocated buffers at M and E if the function returns success. */ -#if GNUPG_MAJOR_VERSION > 1 static gpg_error_t retrieve_key_material (FILE *fp, const char *hexkeyid, const unsigned char **m, size_t *mlen, @@ -1424,7 +1413,6 @@ retrieve_key_material (FILE *fp, const char *hexkeyid, xfree (line); return err; } -#endif /*GNUPG_MAJOR_VERSION > 1*/ static gpg_error_t @@ -1638,6 +1626,24 @@ ecc_read_pubkey (app_t app, ctrl_t ctrl, u32 created_at, int keyno, } +/* Compute the keygrip form the local info and store it there. */ +static gpg_error_t +store_keygrip (app_t app, int keyno) +{ + gpg_error_t err; + unsigned char grip[20]; + + err = keygrip_from_canon_sexp (app->app_local->pk[keyno].key, + app->app_local->pk[keyno].keylen, + grip); + if (err) + return err; + + bin2hex (grip, 20, app->app_local->pk[keyno].keygrip_str); + return 0; +} + + /* Parse tag-length-value data for public key in BUFFER of BUFLEN length. Key of KEYNO in APP is updated with an S-expression of public key. When CTRL is not NULL, fingerprint is computed with @@ -1689,6 +1695,8 @@ read_public_key (app_t app, ctrl_t ctrl, u32 created_at, int keyno, app->app_local->pk[keyno].key = keybuf; /* Decrement for trailing '\0' */ app->app_local->pk[keyno].keylen = len - 1; + + err = store_keygrip (app, keyno); } return err; @@ -1705,7 +1713,6 @@ read_public_key (app_t app, ctrl_t ctrl, u32 created_at, int keyno, consuming to send it just for the fun of it. However, given that we use the same code in gpg 1.4, we can't use the gcry S-expression here but need to open encode it. */ -#if GNUPG_MAJOR_VERSION > 1 static gpg_error_t get_public_key (app_t app, int keyno) { @@ -1756,6 +1763,12 @@ get_public_key (app_t app, int keyno) 2, le_value, &buffer, &buflen); if (err) { + /* Yubikey returns wrong code. Fix it up. */ + /* + * NOTE: It's not correct to blindly change the error code, + * however, for our experiences, it is only Yubikey... + */ + err = gpg_error (GPG_ERR_NO_OBJ); log_error (_("reading public key failed: %s\n"), gpg_strerror (err)); goto leave; } @@ -1836,17 +1849,18 @@ get_public_key (app_t app, int keyno) app->app_local->pk[keyno].key = (unsigned char*)keybuf; /* Decrement for trailing '\0' */ app->app_local->pk[keyno].keylen = len - 1; + + err = store_keygrip (app, keyno); } leave: /* Set a flag to indicate that we tried to read the key. */ - app->app_local->pk[keyno].read_done = 1; + if (!err) + app->app_local->pk[keyno].read_done = 1; xfree (buffer); return err; } -#endif /* GNUPG_MAJOR_VERSION > 1 */ - /* Send the KEYPAIRINFO back. KEY needs to be in the range [1,3]. @@ -1856,11 +1870,6 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key) { int keyno = key - 1; gpg_error_t err = 0; - /* Note that GnuPG 1.x does not need this and it would be too time - consuming to send it just for the fun of it. */ -#if GNUPG_MAJOR_VERSION > 1 - unsigned char grip[20]; - char gripstr[41]; char idbuf[50]; const char *usage; @@ -1872,14 +1881,6 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key) if (!app->app_local->pk[keyno].key) goto leave; /* No such key - ignore. */ - err = keygrip_from_canon_sexp (app->app_local->pk[keyno].key, - app->app_local->pk[keyno].keylen, - grip); - if (err) - goto leave; - - bin2hex (grip, 20, gripstr); - switch (keyno) { case 0: usage = "sc"; break; @@ -1890,14 +1891,12 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key) sprintf (idbuf, "OPENPGP.%d", keyno+1); send_status_info (ctrl, "KEYPAIRINFO", - gripstr, 40, + app->app_local->pk[keyno].keygrip_str, 40, idbuf, strlen (idbuf), usage, strlen (usage), NULL, (size_t)0); leave: -#endif /* GNUPG_MAJOR_VERSION > 1 */ - return err; } @@ -1906,38 +1905,73 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key) static gpg_error_t do_learn_status (app_t app, ctrl_t ctrl, unsigned int flags) { + gpg_error_t err = 0; + (void)flags; - do_getattr (app, ctrl, "EXTCAP"); - do_getattr (app, ctrl, "MANUFACTURER"); - do_getattr (app, ctrl, "DISP-NAME"); - do_getattr (app, ctrl, "DISP-LANG"); - do_getattr (app, ctrl, "DISP-SEX"); - do_getattr (app, ctrl, "PUBKEY-URL"); - do_getattr (app, ctrl, "LOGIN-DATA"); - do_getattr (app, ctrl, "KEY-FPR"); - if (app->card_version > 0x0100) - do_getattr (app, ctrl, "KEY-TIME"); - do_getattr (app, ctrl, "CA-FPR"); - do_getattr (app, ctrl, "CHV-STATUS"); - do_getattr (app, ctrl, "SIG-COUNTER"); - if (app->app_local->extcap.kdf_do) - do_getattr (app, ctrl, "KDF"); - if (app->app_local->extcap.private_dos) - { - do_getattr (app, ctrl, "PRIVATE-DO-1"); - do_getattr (app, ctrl, "PRIVATE-DO-2"); - if (app->did_chv2) - do_getattr (app, ctrl, "PRIVATE-DO-3"); - if (app->did_chv3) - do_getattr (app, ctrl, "PRIVATE-DO-4"); - } - send_keypair_info (app, ctrl, 1); - send_keypair_info (app, ctrl, 2); - send_keypair_info (app, ctrl, 3); + err = do_getattr (app, ctrl, "EXTCAP"); + if (!err) + err = do_getattr (app, ctrl, "MANUFACTURER"); + if (!err) + err = do_getattr (app, ctrl, "DISP-NAME"); + if (!err) + err = do_getattr (app, ctrl, "DISP-LANG"); + if (!err) + err = do_getattr (app, ctrl, "DISP-SEX"); + if (!err) + err = do_getattr (app, ctrl, "PUBKEY-URL"); + if (!err) + err = do_getattr (app, ctrl, "LOGIN-DATA"); + if (!err) + err = do_getattr (app, ctrl, "KEY-FPR"); + if (!err && app->card_version > 0x0100) + err = do_getattr (app, ctrl, "KEY-TIME"); + if (!err) + err = do_getattr (app, ctrl, "CA-FPR"); + if (!err) + err = do_getattr (app, ctrl, "CHV-STATUS"); + if (!err) + err = do_getattr (app, ctrl, "SIG-COUNTER"); + if (!err && app->app_local->extcap.kdf_do) + { + err = do_getattr (app, ctrl, "KDF"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + } + if (!err && app->app_local->extcap.private_dos) + { + if (!err) + err = do_getattr (app, ctrl, "PRIVATE-DO-1"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err) + err = do_getattr (app, ctrl, "PRIVATE-DO-2"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err && app->did_chv2) + err = do_getattr (app, ctrl, "PRIVATE-DO-3"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err && app->did_chv3) + err = do_getattr (app, ctrl, "PRIVATE-DO-4"); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + } + if (!err) + err = send_keypair_info (app, ctrl, 1); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err) + err = send_keypair_info (app, ctrl, 2); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; + if (!err) + err = send_keypair_info (app, ctrl, 3); + if (gpg_err_code (err) == GPG_ERR_NO_OBJ) + err = 0; /* Note: We do not send the Cardholder Certificate, because that is relatively long and for OpenPGP applications not really needed. */ - return 0; + return err; } @@ -1950,7 +1984,6 @@ static gpg_error_t do_readkey (app_t app, int advanced, const char *keyid, unsigned char **pk, size_t *pklen) { -#if GNUPG_MAJOR_VERSION > 1 gpg_error_t err; int keyno; unsigned char *buf; @@ -2008,9 +2041,6 @@ do_readkey (app_t app, int advanced, const char *keyid, } return 0; -#else - return gpg_error (GPG_ERR_NOT_IMPLEMENTED); -#endif } /* Read the standard certificate of an OpenPGP v2 card. It is @@ -2021,7 +2051,6 @@ static gpg_error_t do_readcert (app_t app, const char *certid, unsigned char **cert, size_t *certlen) { -#if GNUPG_MAJOR_VERSION > 1 gpg_error_t err; unsigned char *buffer; size_t buflen; @@ -2050,9 +2079,6 @@ do_readcert (app_t app, const char *certid, } xfree (relptr); return err; -#else - return gpg_error (GPG_ERR_NOT_IMPLEMENTED); -#endif } @@ -2372,26 +2398,30 @@ verify_chv2 (app_t app, if (rc) return rc; app->did_chv2 = 1; + + if (!app->did_chv1 && !app->force_chv1 && pinvalue) + { + /* For convenience we verify CHV1 here too. We do this only if + the card is not configured to require a verification before + each CHV1 controlled operation (force_chv1) and if we are not + using the pinpad (PINVALUE == NULL). */ + rc = iso7816_verify (app->slot, 0x81, pinvalue, pinlen); + if (gpg_err_code (rc) == GPG_ERR_BAD_PIN) + rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED); + if (rc) + { + log_error (_("verify CHV%d failed: %s\n"), 1, gpg_strerror (rc)); + flush_cache_after_error (app); + } + else + app->did_chv1 = 1; + } } else - rc = 0; - - if (!app->did_chv1 && !app->force_chv1 && pinvalue) { - /* For convenience we verify CHV1 here too. We do this only if - the card is not configured to require a verification before - each CHV1 controlled operation (force_chv1) and if we are not - using the pinpad (PINVALUE == NULL). */ - rc = iso7816_verify (app->slot, 0x81, pinvalue, pinlen); - if (gpg_err_code (rc) == GPG_ERR_BAD_PIN) - rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED); + rc = verify_a_chv (app, pincb, pincb_arg, 1, 0, &pinvalue, &pinlen); if (rc) - { - log_error (_("verify CHV%d failed: %s\n"), 1, gpg_strerror (rc)); - flush_cache_after_error (app); - } - else - app->did_chv1 = 1; + return rc; } xfree (pinvalue); @@ -2449,13 +2479,11 @@ verify_chv3 (app_t app, { int rc = 0; -#if GNUPG_MAJOR_VERSION != 1 if (!opt.allow_admin) { log_info (_("access to admin commands is not configured\n")); return gpg_error (GPG_ERR_EACCES); } -#endif if (!app->did_chv3) { @@ -2644,7 +2672,7 @@ do_writecert (app_t app, ctrl_t ctrl, const unsigned char *certdata, size_t certdatalen) { (void)ctrl; -#if GNUPG_MAJOR_VERSION > 1 + if (strcmp (certidstr, "OPENPGP.3")) return gpg_error (GPG_ERR_INV_ID); if (!certdata || !certdatalen) @@ -2654,9 +2682,6 @@ do_writecert (app_t app, ctrl_t ctrl, if (certdatalen > app->app_local->extcap.max_certlen_3) return gpg_error (GPG_ERR_TOO_LARGE); return do_setattr (app, "CERT-3", pincb, pincb_arg, certdata, certdatalen); -#else - return gpg_error (GPG_ERR_NOT_IMPLEMENTED); -#endif } @@ -3232,11 +3257,11 @@ build_ecc_privkey_template (app_t app, int keyno, const unsigned char *ecc_q, size_t ecc_q_len, unsigned char **result, size_t *resultlen) { - unsigned char privkey[2+2]; + unsigned char privkey[2*(1+3)]; size_t privkey_len; - unsigned char exthdr[2+2+1]; + unsigned char exthdr[2+2+3]; size_t exthdr_len; - unsigned char suffix[2+1]; + unsigned char suffix[2+3]; size_t suffix_len; unsigned char *tp; size_t datalen; @@ -4345,6 +4370,89 @@ check_against_given_fingerprint (app_t app, const char *fpr, int key) } +/* Check KEYIDSTR, if it's valid. + When KEYNO is 0, it means it's for PIN check. + Otherwise, KEYNO corresponds to the slot (signing, decipher and auth). + KEYIDSTR is either: + (1) Serial number + (2) Serial number "/" fingerprint + (3) Serial number "[CHV3]" + (4) keygrip + + When KEYNO is 0 and KEYIDSTR is for a keygrip, the keygrip should + be to be compared is the first one (keygrip for signing). + When KEYNO is 1, KEYIDSTR is for a keygrip, and R_USE_AUTH is not + NULL, OpenPGP.1 is first tested and then OpenPGP.3. In the latter + case 1 is stored at R_USE_AUTH + */ +static int +check_keyidstr (app_t app, const char *keyidstr, int keyno, int *r_use_auth) +{ + int rc; + const char *s; + int n; + const char *fpr = NULL; + + if (r_use_auth) + *r_use_auth = 0; + + if (strlen (keyidstr) < 32) + return gpg_error (GPG_ERR_INV_ID); + else + { + char *serial; + + for (s=keyidstr, n=0; hexdigitp (s); s++, n++) + ; + + /* Check if it's a keygrip */ + if (n == 40) + { + const unsigned char *keygrip_str; + + keygrip_str = app->app_local->pk[keyno?keyno-1:0].keygrip_str; + if (!strncmp (keygrip_str, keyidstr, 40)) + return 0; + else if (keyno == 1 && r_use_auth + && !strncmp (app->app_local->pk[2].keygrip_str, + keyidstr, 40)) + { + *r_use_auth = 1; + return 0; + } + else + return gpg_error (GPG_ERR_INV_ID); + } + + if (n != 32 || strncmp (keyidstr, "D27600012401", 12)) + return gpg_error (GPG_ERR_INV_ID); + else if (!*s) + ; /* no fingerprint given: we allow this for now. */ + else if (*s == '/') + fpr = s + 1; + + serial = app_get_serialno (app); + if (strncmp (serial, keyidstr, 32)) + { + xfree (serial); + return gpg_error (GPG_ERR_WRONG_CARD); + } + + xfree (serial); + } + + /* If a fingerprint has been specified check it against the one on + the card. This is allows for a meaningful error message in case + the key on the card has been replaced but the shadow information + known to gpg was not updated. If there is no fingerprint, gpg + will detect a bogus signature anyway due to the + verify-after-signing feature. */ + rc = (fpr&&keyno)? check_against_given_fingerprint (app, fpr, keyno) : 0; + + return rc; +} + + /* Compute a digital signature on INDATA which is expected to be the raw message digest. For this application the KEYIDSTR consists of the serialnumber and the fingerprint delimited by a slash. @@ -4389,10 +4497,6 @@ do_sign (app_t app, const char *keyidstr, int hashalgo, int rc; unsigned char data[19+64]; size_t datalen; - unsigned char tmp_sn[20]; /* Actually 16 bytes but also for the fpr. */ - const char *s; - int n; - const char *fpr = NULL; unsigned long sigcount; int use_auth = 0; int exmode, le_value; @@ -4437,40 +4541,13 @@ do_sign (app_t app, const char *keyidstr, int hashalgo, ; else if (!strcmp (keyidstr, "OPENPGP.3")) use_auth = 1; - else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) - return gpg_error (GPG_ERR_INV_ID); else { - for (s=keyidstr, n=0; hexdigitp (s); s++, n++) - ; - if (n != 32) - return gpg_error (GPG_ERR_INV_ID); - else if (!*s) - ; /* no fingerprint given: we allow this for now. */ - else if (*s == '/') - fpr = s + 1; - else - return gpg_error (GPG_ERR_INV_ID); - - for (s=keyidstr, n=0; n < 16; s += 2, n++) - tmp_sn[n] = xtoi_2 (s); - - if (app->serialnolen != 16) - return gpg_error (GPG_ERR_INV_CARD); - if (memcmp (app->serialno, tmp_sn, 16)) - return gpg_error (GPG_ERR_WRONG_CARD); + rc = check_keyidstr (app, keyidstr, 1, &use_auth); + if (rc) + return rc; } - /* If a fingerprint has been specified check it against the one on - the card. This is allows for a meaningful error message in case - the key on the card has been replaced but the shadow information - known to gpg was not updated. If there is no fingerprint, gpg - will detect a bogus signature anyway due to the - verify-after-signing feature. */ - rc = fpr? check_against_given_fingerprint (app, fpr, 1) : 0; - if (rc) - return rc; - /* Concatenate prefix and digest. */ #define X(a,b,d) \ if (hashalgo == GCRY_MD_ ## a && (d) ) \ @@ -4585,10 +4662,6 @@ do_auth (app_t app, const char *keyidstr, unsigned char **outdata, size_t *outdatalen ) { int rc; - unsigned char tmp_sn[20]; /* Actually 16 but we use it also for the fpr. */ - const char *s; - int n; - const char *fpr = NULL; if (!keyidstr || !*keyidstr) return gpg_error (GPG_ERR_INV_VALUE); @@ -4614,42 +4687,15 @@ do_auth (app_t app, const char *keyidstr, } /* Check whether an OpenPGP card of any version has been requested. */ - if (!strcmp (keyidstr, "OPENPGP.3")) + if (!ascii_strcasecmp (keyidstr, "OPENPGP.3")) ; - else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) - return gpg_error (GPG_ERR_INV_ID); else { - for (s=keyidstr, n=0; hexdigitp (s); s++, n++) - ; - if (n != 32) - return gpg_error (GPG_ERR_INV_ID); - else if (!*s) - ; /* no fingerprint given: we allow this for now. */ - else if (*s == '/') - fpr = s + 1; - else - return gpg_error (GPG_ERR_INV_ID); - - for (s=keyidstr, n=0; n < 16; s += 2, n++) - tmp_sn[n] = xtoi_2 (s); - - if (app->serialnolen != 16) - return gpg_error (GPG_ERR_INV_CARD); - if (memcmp (app->serialno, tmp_sn, 16)) - return gpg_error (GPG_ERR_WRONG_CARD); + rc = check_keyidstr (app, keyidstr, 3, NULL); + if (rc) + return rc; } - /* If a fingerprint has been specified check it against the one on - the card. This is allows for a meaningful error message in case - the key on the card has been replaced but the shadow information - known to gpg was not updated. If there is no fingerprint, gpg - will detect a bogus signature anyway due to the - verify-after-signing feature. */ - rc = fpr? check_against_given_fingerprint (app, fpr, 3) : 0; - if (rc) - return rc; - rc = verify_chv2 (app, pincb, pincb_arg); if (!rc) { @@ -4684,10 +4730,7 @@ do_decipher (app_t app, const char *keyidstr, unsigned int *r_info) { int rc; - unsigned char tmp_sn[20]; /* actually 16 but we use it also for the fpr. */ - const char *s; int n; - const char *fpr = NULL; int exmode, le_value; unsigned char *fixbuf = NULL; int padind = 0; @@ -4697,41 +4740,15 @@ do_decipher (app_t app, const char *keyidstr, return gpg_error (GPG_ERR_INV_VALUE); /* Check whether an OpenPGP card of any version has been requested. */ - if (!strcmp (keyidstr, "OPENPGP.2")) + if (!ascii_strcasecmp (keyidstr, "OPENPGP.2")) ; - else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) - return gpg_error (GPG_ERR_INV_ID); else { - for (s=keyidstr, n=0; hexdigitp (s); s++, n++) - ; - if (n != 32) - return gpg_error (GPG_ERR_INV_ID); - else if (!*s) - ; /* no fingerprint given: we allow this for now. */ - else if (*s == '/') - fpr = s + 1; - else - return gpg_error (GPG_ERR_INV_ID); - - for (s=keyidstr, n=0; n < 16; s += 2, n++) - tmp_sn[n] = xtoi_2 (s); - - if (app->serialnolen != 16) - return gpg_error (GPG_ERR_INV_CARD); - if (memcmp (app->serialno, tmp_sn, 16)) - return gpg_error (GPG_ERR_WRONG_CARD); + rc = check_keyidstr (app, keyidstr, 2, NULL); + if (rc) + return rc; } - /* If a fingerprint has been specified check it against the one on - the card. This is allows for a meaningful error message in case - the key on the card has been replaced but the shadow information - known to gpg was not updated. If there is no fingerprint, the - decryption won't produce the right plaintext anyway. */ - rc = fpr? check_against_given_fingerprint (app, fpr, 2) : 0; - if (rc) - return rc; - rc = verify_chv2 (app, pincb, pincb_arg); if (rc) return rc; @@ -4945,38 +4962,19 @@ do_check_pin (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg) { - unsigned char tmp_sn[20]; - const char *s; - int n; + int rc; int admin_pin = 0; if (!keyidstr || !*keyidstr) return gpg_error (GPG_ERR_INV_VALUE); - /* Check whether an OpenPGP card of any version has been requested. */ - if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) - return gpg_error (GPG_ERR_INV_ID); + rc = check_keyidstr (app, keyidstr, 0, NULL); + if (rc) + return rc; - for (s=keyidstr, n=0; hexdigitp (s); s++, n++) - ; - if (n != 32) - return gpg_error (GPG_ERR_INV_ID); - else if (!*s) - ; /* No fingerprint given: we allow this for now. */ - else if (*s == '/') - ; /* We ignore a fingerprint. */ - else if (!strcmp (s, "[CHV3]") ) + if ((strlen (keyidstr) >= 32+6 && !strcmp (keyidstr+32, "[CHV3]")) + || (strlen (keyidstr) >= 40+6 && !strcmp (keyidstr+40, "[CHV3]"))) admin_pin = 1; - else - return gpg_error (GPG_ERR_INV_ID); - - for (s=keyidstr, n=0; n < 16; s += 2, n++) - tmp_sn[n] = xtoi_2 (s); - - if (app->serialnolen != 16) - return gpg_error (GPG_ERR_INV_CARD); - if (memcmp (app->serialno, tmp_sn, 16)) - return gpg_error (GPG_ERR_WRONG_CARD); /* Yes, there is a race conditions: The user might pull the card right here and we won't notice that. However this is not a @@ -973,18 +973,18 @@ report_change (int slot, int old_status, int cur_status) char *homestr, *envstr; char *fname; char templ[50]; - FILE *fp; + estream_t fp; snprintf (templ, sizeof templ, "reader_%d.status", slot); fname = make_filename (gnupg_homedir (), templ, NULL ); - fp = fopen (fname, "w"); + fp = es_fopen (fname, "w"); if (fp) { - fprintf (fp, "%s\n", + es_fprintf (fp, "%s\n", (cur_status & 1)? "USABLE": (cur_status & 4)? "ACTIVE": (cur_status & 2)? "PRESENT": "NOCARD"); - fclose (fp); + es_fclose (fp); } xfree (fname); diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index 466efaa..e255ace 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -100,18 +100,16 @@ /* Max length of buffer with out CCID message header of 10-byte Sending: 547 for RSA-4096 key import APDU size = 540 (24+4+256+256) - commnd + lc + le = 4 + 3 + 0 + command + lc + le = 4 + 3 + 0 Sending: write data object of cardholder certificate APDU size = 2048 - commnd + lc + le = 4 + 3 + 0 + command + lc + le = 4 + 3 + 0 Receiving: 2048 for cardholder certificate */ #define CCID_MAX_BUF (2048+7+10) /* CCID command timeout. */ #define CCID_CMD_TIMEOUT (5*1000) -/* OpenPGPcard v2.1 requires huge timeout for key generation. */ -#define CCID_CMD_TIMEOUT_LONGER (60*1000) /* Depending on how this source is used we either define our error output to go to stderr or to the GnuPG based logging functions. We @@ -285,6 +283,24 @@ static int send_escape_cmd (ccid_driver_t handle, const unsigned char *data, size_t datalen, unsigned char *result, size_t resultmax, size_t *resultlen); + +static int +map_libusb_error (int usberr) +{ + switch (usberr) + { + case 0: return 0; + case LIBUSB_ERROR_IO: return CCID_DRIVER_ERR_USB_IO; + case LIBUSB_ERROR_ACCESS: return CCID_DRIVER_ERR_USB_ACCESS; + case LIBUSB_ERROR_NO_DEVICE:return CCID_DRIVER_ERR_USB_NO_DEVICE; + case LIBUSB_ERROR_BUSY: return CCID_DRIVER_ERR_USB_BUSY; + case LIBUSB_ERROR_TIMEOUT: return CCID_DRIVER_ERR_USB_TIMEOUT; + case LIBUSB_ERROR_OVERFLOW: return CCID_DRIVER_ERR_USB_OVERFLOW; + } + return CCID_DRIVER_ERR_USB_OTHER; +} + + /* Convert a little endian stored 4 byte value into an unsigned integer. */ static unsigned int @@ -960,7 +976,7 @@ get_escaped_usb_string (libusb_device_handle *idev, int idx, rc = libusb_control_transfer (idev, LIBUSB_ENDPOINT_IN, LIBUSB_REQUEST_GET_DESCRIPTOR, (LIBUSB_DT_STRING << 8), 0, - (char*)buf, sizeof buf, 1000 /* ms timeout */); + buf, sizeof buf, 1000 /* ms timeout */); #ifdef USE_NPTH npth_protect (); #endif @@ -975,7 +991,7 @@ get_escaped_usb_string (libusb_device_handle *idev, int idx, rc = libusb_control_transfer (idev, LIBUSB_ENDPOINT_IN, LIBUSB_REQUEST_GET_DESCRIPTOR, (LIBUSB_DT_STRING << 8) + idx, langid, - (char*)buf, sizeof buf, 1000 /* ms timeout */); + buf, sizeof buf, 1000 /* ms timeout */); #ifdef USE_NPTH npth_protect (); #endif @@ -1250,9 +1266,10 @@ ccid_get_reader_list (void) static int ccid_vendor_specific_init (ccid_driver_t handle) { + int r = 0; + if (handle->id_vendor == VENDOR_VEGA && handle->id_product == VEGA_ALPHA) { - int r; /* * Vega alpha has a feature to show retry counter on the pinpad * display. But it assumes that the card returns the value of @@ -1264,11 +1281,33 @@ ccid_vendor_specific_init (ccid_driver_t handle) const unsigned char cmd[] = { '\xb5', '\x01', '\x00', '\x03', '\x00' }; r = send_escape_cmd (handle, cmd, sizeof (cmd), NULL, 0, NULL); - if (r != 0 && r != CCID_DRIVER_ERR_CARD_INACTIVE - && r != CCID_DRIVER_ERR_NO_CARD) - return r; } + else if (handle->id_vendor == VENDOR_SCM && handle->id_product == SCM_SPR532) + { + /* + * It seems that SEQ may be out of sync between host and the card reader, + * and SET_INTERFACE doesn't reset it. Make sure it works at the init. + */ + abort_cmd (handle, 0); + } + + if (r != 0 && r != CCID_DRIVER_ERR_CARD_INACTIVE + && r != CCID_DRIVER_ERR_NO_CARD) + return r; + else + return 0; +} + +static int +ccid_vendor_specific_setup (ccid_driver_t handle) +{ + if (handle->id_vendor == VENDOR_SCM && handle->id_product == SCM_SPR532) + { + DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n"); + send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3, + NULL, 0, NULL); + } return 0; } @@ -1290,7 +1329,7 @@ static libusb_device **ccid_usb_dev_list; static struct ccid_dev_table ccid_dev_table[MAX_DEVICE]; gpg_error_t -ccid_dev_scan (int *idx_max_p, struct ccid_dev_table **t_p) +ccid_dev_scan (int *idx_max_p, void **t_p) { ssize_t n; libusb_device *dev; @@ -1417,9 +1456,10 @@ ccid_dev_scan (int *idx_max_p, struct ccid_dev_table **t_p) } void -ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max) +ccid_dev_scan_finish (void *tbl0, int max) { int i; + struct ccid_dev_table *tbl = tbl0; for (i = 0; i < max; i++) { @@ -1438,12 +1478,13 @@ ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max) } unsigned int -ccid_get_BAI (int idx, struct ccid_dev_table *tbl) +ccid_get_BAI (int idx, void *tbl0) { int n; int bus, addr, intf; unsigned int bai; libusb_device *dev; + struct ccid_dev_table *tbl = tbl0; n = tbl[idx].n; dev = ccid_usb_dev_list[n]; @@ -1468,7 +1509,8 @@ intr_cb (struct libusb_transfer *transfer) { ccid_driver_t handle = transfer->user_data; - DEBUGOUT_1 ("CCID: interrupt callback %d\n", transfer->status); + DEBUGOUT_2 ("CCID: interrupt callback %d (%d)\n", + transfer->status, transfer->actual_length); if (transfer->status == LIBUSB_TRANSFER_TIMED_OUT) { @@ -1484,13 +1526,50 @@ intr_cb (struct libusb_transfer *transfer) } else if (transfer->status == LIBUSB_TRANSFER_COMPLETED) { - if (transfer->actual_length == 2 - && transfer->buffer[0] == 0x50 - && (transfer->buffer[1] & 1) == 0) + size_t len = transfer->actual_length; + unsigned char *p = transfer->buffer; + int card_removed = 0; + + while (len) + { + if (*p == RDR_to_PC_NotifySlotChange) + { + if (len < 2) + break; + + DEBUGOUT_1 ("CCID: NotifySlotChange: %02x\n", p[1]); + + if ((p[1] & 1)) + card_removed = 0; + else + card_removed = 1; + + p += 2; + len -= 2; + } + else if (*p == RDR_to_PC_HardwareError) + { + if (len < 4) + break; + + DEBUGOUT_1 ("CCID: hardware error detected: %02x\n", p[3]); + p += 4; + len -= 4; + } + else + { + DEBUGOUT_1 ("CCID: unknown intr: %02x\n", p[0]); + break; + } + } + + if (card_removed) { DEBUGOUT ("CCID: card removed\n"); handle->powered_off = 1; +#if defined(GNUPG_MAJOR_VERSION) scd_kick_the_loop (); +#endif } else { @@ -1505,7 +1584,9 @@ intr_cb (struct libusb_transfer *transfer) device_removed: DEBUGOUT ("CCID: device removed\n"); handle->powered_off = 1; +#if defined(GNUPG_MAJOR_VERSION) scd_kick_the_loop (); +#endif } } @@ -1515,6 +1596,7 @@ ccid_setup_intr (ccid_driver_t handle) struct libusb_transfer *transfer; int err; + libusb_clear_halt (handle->idev, handle->ep_intr); transfer = libusb_alloc_transfer (0); handle->transfer = transfer; libusb_fill_interrupt_transfer (transfer, handle->idev, handle->ep_intr, @@ -1547,7 +1629,7 @@ ccid_usb_thread (void *arg) static int ccid_open_usb_reader (const char *spec_reader_name, - int idx, struct ccid_dev_table *ccid_table, + int idx, void *ccid_table0, ccid_driver_t *handle, char **rdrname_p) { libusb_device *dev; @@ -1559,6 +1641,7 @@ ccid_open_usb_reader (const char *spec_reader_name, int n; int bus, addr; unsigned int bai; + struct ccid_dev_table *ccid_table = ccid_table0; n = ccid_table[idx].n; ifc_no = ccid_table[idx].interface_number; @@ -1575,7 +1658,7 @@ ccid_open_usb_reader (const char *spec_reader_name, DEBUGOUT_1 ("usb_open failed: %s\n", libusb_error_name (rc)); free (*handle); *handle = NULL; - return rc; + return map_libusb_error (rc); } if (ccid_usb_thread_is_alive++ == 0) @@ -1610,6 +1693,7 @@ ccid_open_usb_reader (const char *spec_reader_name, if (rc) { DEBUGOUT ("get_device_descripor failed\n"); + rc = map_libusb_error (rc); goto leave; } @@ -1649,19 +1733,17 @@ ccid_open_usb_reader (const char *spec_reader_name, if (rc) { DEBUGOUT_1 ("usb_claim_interface failed: %d\n", rc); - rc = CCID_DRIVER_ERR_CARD_IO_ERROR; + rc = map_libusb_error (rc); goto leave; } - if (set_no != 0) + /* Submit SET_INTERFACE control transfer which can reset the device. */ + rc = libusb_set_interface_alt_setting (idev, ifc_no, set_no); + if (rc) { - rc = libusb_set_interface_alt_setting (idev, ifc_no, set_no); - if (rc) - { - DEBUGOUT_1 ("usb_set_interface_alt_setting failed: %d\n", rc); - rc = CCID_DRIVER_ERR_CARD_IO_ERROR; - goto leave; - } + DEBUGOUT_1 ("usb_set_interface_alt_setting failed: %d\n", rc); + rc = map_libusb_error (rc); + goto leave; } rc = ccid_vendor_specific_init (*handle); @@ -1671,6 +1753,7 @@ ccid_open_usb_reader (const char *spec_reader_name, { --ccid_usb_thread_is_alive; free (rid); + libusb_release_interface (idev, ifc_no); libusb_close (idev); free (*handle); *handle = NULL; @@ -1690,9 +1773,11 @@ ccid_open_usb_reader (const char *spec_reader_name, pointer to be used as handle in HANDLE. Returns 0 on success. */ int ccid_open_reader (const char *spec_reader_name, int idx, - struct ccid_dev_table *ccid_table, + void *ccid_table0, ccid_driver_t *handle, char **rdrname_p) { + struct ccid_dev_table *ccid_table = ccid_table0; + *handle = calloc (1, sizeof **handle); if (!*handle) { @@ -1714,7 +1799,25 @@ ccid_require_get_status (ccid_driver_t handle) detect removal of a card and can detect removal of a reader. */ if (handle->ep_intr >= 0) - return 0; + { + if (handle->id_vendor != VENDOR_SCM) + return 0; + + /* + * For card reader with interrupt transfer support, ideally, + * removal is detected by intr_cb, but some card reader + * (e.g. SPR532) has a possible case of missing report to + * intr_cb, and another case of valid report to intr_cb. + * + * For such a reader, the removal should be able to be detected + * by PC_to_RDR_GetSlotStatus, too. Thus, calls to + * ccid_slot_status should go on wire even if "on_wire" is not + * requested. + * + */ + if (handle->transfer == NULL) + return 0; + } /* Libusb actually detects the removal of USB device in use. However, there is no good API to handle the removal (yet), @@ -1733,31 +1836,37 @@ ccid_require_get_status (ccid_driver_t handle) return 1; } - -static void -do_close_reader (ccid_driver_t handle) +static int +send_power_off (ccid_driver_t handle) { int rc; unsigned char msg[100]; size_t msglen; unsigned char seqno; - if (!handle->powered_off) - { - msg[0] = PC_to_RDR_IccPowerOff; - msg[5] = 0; /* slot */ - msg[6] = seqno = handle->seqno++; - msg[7] = 0; /* RFU */ - msg[8] = 0; /* RFU */ - msg[9] = 0; /* RFU */ - set_msg_len (msg, 0); - msglen = 10; + msg[0] = PC_to_RDR_IccPowerOff; + msg[5] = 0; /* slot */ + msg[6] = seqno = handle->seqno++; + msg[7] = 0; /* RFU */ + msg[8] = 0; /* RFU */ + msg[9] = 0; /* RFU */ + set_msg_len (msg, 0); + msglen = 10; - rc = bulk_out (handle, msg, msglen, 0); - if (!rc) - bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus, - seqno, 2000, 0); - } + rc = bulk_out (handle, msg, msglen, 0); + if (!rc) + bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus, + seqno, 2000, 0); + return rc; +} + +static void +do_close_reader (ccid_driver_t handle) +{ + int rc; + + if (!handle->powered_off) + send_power_off (handle); if (handle->transfer) { @@ -1909,7 +2018,7 @@ bulk_out (ccid_driver_t handle, unsigned char *msg, size_t msglen, npth_unprotect (); #endif rc = libusb_bulk_transfer (handle->idev, handle->ep_bulk_out, - (char*)msg, msglen, &transferred, + msg, msglen, &transferred, 5000 /* ms timeout */); #ifdef USE_NPTH npth_protect (); @@ -1965,12 +2074,9 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length, { DEBUGOUT_1 ("usb_bulk_read error: %s\n", libusb_error_name (rc)); if (rc == LIBUSB_ERROR_NO_DEVICE) - { - handle->enodev_seen = 1; - return CCID_DRIVER_ERR_NO_READER; - } + handle->enodev_seen = 1; - return CCID_DRIVER_ERR_CARD_IO_ERROR; + return map_libusb_error (rc); } if (msglen < 0) return CCID_DRIVER_ERR_INV_VALUE; /* Faulty libusb. */ @@ -2072,17 +2178,16 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length, /* * Communication failure by device side. * Possibly, it was forcibly suspended and resumed. - * - * Only detect this kind of failure when interrupt transfer is - * not supported. For card reader with interrupt transfer - * support removal is detected by intr_cb. */ if (handle->ep_intr < 0) { DEBUGOUT ("CCID: card inactive/removed\n"); handle->powered_off = 1; - scd_kick_the_loop (); } + +#if defined(GNUPG_MAJOR_VERSION) + scd_kick_the_loop (); +#endif } return rc; @@ -2095,7 +2200,7 @@ static int abort_cmd (ccid_driver_t handle, int seqno) { int rc; - char dummybuf[8]; + unsigned char dummybuf[8]; unsigned char msg[100]; int msglen; @@ -2121,7 +2226,7 @@ abort_cmd (ccid_driver_t handle, int seqno) if (rc) { DEBUGOUT_1 ("usb_control_msg error: %s\n", libusb_error_name (rc)); - return CCID_DRIVER_ERR_CARD_IO_ERROR; + return map_libusb_error (rc); } /* Now send the abort command to the bulk out pipe using the same @@ -2146,7 +2251,7 @@ abort_cmd (ccid_driver_t handle, int seqno) npth_unprotect (); #endif rc = libusb_bulk_transfer (handle->idev, handle->ep_bulk_out, - (char*)msg, msglen, &transferred, + msg, msglen, &transferred, 5000 /* ms timeout */); #ifdef USE_NPTH npth_protect (); @@ -2158,13 +2263,13 @@ abort_cmd (ccid_driver_t handle, int seqno) libusb_error_name (rc)); if (rc) - return rc; + return map_libusb_error (rc); #ifdef USE_NPTH npth_unprotect (); #endif rc = libusb_bulk_transfer (handle->idev, handle->ep_bulk_in, - (char*)msg, sizeof msg, &msglen, + msg, sizeof msg, &msglen, 5000 /*ms timeout*/); #ifdef USE_NPTH npth_protect (); @@ -2173,7 +2278,7 @@ abort_cmd (ccid_driver_t handle, int seqno) { DEBUGOUT_1 ("usb_bulk_read error in abort_cmd: %s\n", libusb_error_name (rc)); - return CCID_DRIVER_ERR_CARD_IO_ERROR; + return map_libusb_error (rc); } if (msglen < 10) @@ -2285,7 +2390,7 @@ ccid_poll (ccid_driver_t handle) int i, j; rc = libusb_interrupt_transfer (handle->idev, handle->ep_intr, - (char*)msg, sizeof msg, &msglen, + msg, sizeof msg, &msglen, 0 /* ms timeout */ ); if (rc == LIBUSB_ERROR_TIMEOUT) return 0; @@ -2348,7 +2453,7 @@ ccid_slot_status (ccid_driver_t handle, int *statusbits, int on_wire) { /* Setup interrupt transfer at the initial call of slot_status with ON_WIRE == 0 */ - if (handle->transfer == NULL && handle->ep_intr >= 0) + if (handle->transfer == NULL) ccid_setup_intr (handle); *statusbits = 0; @@ -2372,7 +2477,8 @@ ccid_slot_status (ccid_driver_t handle, int *statusbits, int on_wire) status and debugging enabled. */ rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus, seqno, retries? 1000 : 200, 1); - if (rc == CCID_DRIVER_ERR_CARD_IO_ERROR && retries < 3) + if ((rc == CCID_DRIVER_ERR_CARD_IO_ERROR || rc == CCID_DRIVER_ERR_USB_TIMEOUT) + && retries < 3) { if (!retries) { @@ -2618,6 +2724,21 @@ ccid_get_atr (ccid_driver_t handle, NULL, 0, NULL)) goto again; } + else if (statusbits == 0 && CCID_COMMAND_FAILED (msg)) + { + /* Card was active already, and something went wrong with + PC_to_RDR_IccPowerOn command. It may be baud-rate mismatch + between the card and the reader. To recover from this state, + send PC_to_RDR_IccPowerOff command to reset the card and try + again. + */ + rc = send_power_off (handle); + if (rc) + return rc; + + statusbits = 1; + goto again; + } else if (CCID_COMMAND_FAILED (msg)) return CCID_DRIVER_ERR_CARD_IO_ERROR; @@ -2802,6 +2923,7 @@ ccid_get_atr (ccid_driver_t handle, DEBUGOUT_1 ("IFSD has been set to %d\n", tpdu[3]); } + ccid_vendor_specific_setup (handle); return 0; } @@ -3101,7 +3223,7 @@ ccid_transceive (ccid_driver_t handle, msg[0] = PC_to_RDR_XfrBlock; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; - msg[7] = wait_more; /* bBWI */ + msg[7] = (wait_more ? wait_more : 1); /* bBWI */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ set_msg_len (msg, tpdulen); @@ -3127,7 +3249,7 @@ ccid_transceive (ccid_driver_t handle, msg = recv_buffer; rc = bulk_in (handle, msg, sizeof recv_buffer, &msglen, via_escape? RDR_to_PC_Escape : RDR_to_PC_DataBlock, seqno, - wait_more? CCID_CMD_TIMEOUT_LONGER: CCID_CMD_TIMEOUT, 0); + (wait_more ? wait_more : 1) * CCID_CMD_TIMEOUT, 0); if (rc) return rc; @@ -3157,6 +3279,7 @@ ccid_transceive (ccid_driver_t handle, (!(msg[pcboff] & 0x80) && (msg[pcboff] & 0x20)? " [more]":"")); + wait_more = 0; if (!(tpdu[1] & 0x80)) { /* This is an I-block. */ retries = 0; @@ -3302,9 +3425,7 @@ ccid_transceive (ccid_driver_t handle, /* Wait time extension request. */ unsigned char bwi = tpdu[3]; - /* Check if it's unsual value which can't be expressed in ATR. */ - if (bwi > 15) - wait_more = 1; + wait_more = bwi; msg = send_buffer; tpdu = msg + hdrlen; @@ -3463,15 +3584,6 @@ ccid_transceive_secure (ccid_driver_t handle, return CCID_DRIVER_ERR_NOT_SUPPORTED; msg = send_buffer; - if (handle->id_vendor == VENDOR_SCM) - { - DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n"); - rc = send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3, - NULL, 0, NULL); - if (rc) - return rc; - } - msg[0] = cherry_mode? 0x89 : PC_to_RDR_Secure; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; @@ -3698,7 +3810,7 @@ print_error (int err) switch (err) { - case 0: p = "success"; + case 0: p = "success"; break; case CCID_DRIVER_ERR_OUT_OF_CORE: p = "out of core"; break; case CCID_DRIVER_ERR_INV_VALUE: p = "invalid value"; break; case CCID_DRIVER_ERR_NO_DRIVER: p = "no driver"; break; @@ -3747,7 +3859,7 @@ print_result (int rc, const unsigned char *data, size_t length) int main (int argc, char **argv) { - int rc; + gpg_error_t err; ccid_driver_t ccid; int slotstat; unsigned char result[512]; @@ -3756,6 +3868,8 @@ main (int argc, char **argv) int verify_123456 = 0; int did_verify = 0; int no_poll = 0; + int idx_max; + struct ccid_dev_table *ccid_table; if (argc) { @@ -3799,27 +3913,36 @@ main (int argc, char **argv) break; } - rc = ccid_open_reader (&ccid, argc? *argv:NULL, NULL); - if (rc) + err = ccid_dev_scan (&idx_max, &ccid_table); + if (err) + return 1; + + if (idx_max == 0) + return 1; + + err = ccid_open_reader (argc? *argv:NULL, 0, ccid_table, &ccid, NULL); + if (err) return 1; + ccid_dev_scan_finish (ccid_table, idx_max); + if (!no_poll) ccid_poll (ccid); fputs ("getting ATR ...\n", stderr); - rc = ccid_get_atr (ccid, NULL, 0, NULL); - if (rc) + err = ccid_get_atr (ccid, NULL, 0, NULL); + if (err) { - print_error (rc); + print_error (err); return 1; } if (!no_poll) ccid_poll (ccid); fputs ("getting slot status ...\n", stderr); - rc = ccid_slot_status (ccid, &slotstat, 1); - if (rc) + err = ccid_slot_status (ccid, &slotstat, 1); + if (err) { - print_error (rc); + print_error (err); return 1; } @@ -3830,10 +3953,10 @@ main (int argc, char **argv) { static unsigned char apdu[] = { 0, 0xA4, 4, 0, 6, 0xD2, 0x76, 0x00, 0x01, 0x24, 0x01}; - rc = ccid_transceive (ccid, - apdu, sizeof apdu, - result, sizeof result, &resultlen); - print_result (rc, result, resultlen); + err = ccid_transceive (ccid, + apdu, sizeof apdu, + result, sizeof result, &resultlen); + print_result (err, result, resultlen); } @@ -3843,9 +3966,9 @@ main (int argc, char **argv) fputs ("getting OpenPGP DO 0x65 ....\n", stderr); { static unsigned char apdu[] = { 0, 0xCA, 0, 0x65, 254 }; - rc = ccid_transceive (ccid, apdu, sizeof apdu, - result, sizeof result, &resultlen); - print_result (rc, result, resultlen); + err = ccid_transceive (ccid, apdu, sizeof apdu, + result, sizeof result, &resultlen); + print_result (err, result, resultlen); } if (!no_pinpad) @@ -3855,22 +3978,18 @@ main (int argc, char **argv) if (!no_pinpad) { static unsigned char apdu[] = { 0, 0x20, 0, 0x81 }; + pininfo_t pininfo = { 0, 0, 0 }; - - if (ccid_transceive_secure (ccid, - apdu, sizeof apdu, - 1, 0, 0, 0, + if (ccid_transceive_secure (ccid, apdu, sizeof apdu, &pininfo, NULL, 0, NULL)) fputs ("can't verify using a PIN-Pad reader\n", stderr); else { - fputs ("verifying CHV1 using the PINPad ....\n", stderr); + fputs ("verifying CHV1 using the PINPad ....\n", stderr); - rc = ccid_transceive_secure (ccid, - apdu, sizeof apdu, - 1, 0, 0, 0, - result, sizeof result, &resultlen); - print_result (rc, result, resultlen); + err = ccid_transceive_secure (ccid, apdu, sizeof apdu, &pininfo, + result, sizeof result, &resultlen); + print_result (err, result, resultlen); did_verify = 1; } } @@ -3881,20 +4000,20 @@ main (int argc, char **argv) { static unsigned char apdu[] = {0, 0x20, 0, 0x81, 6, '1','2','3','4','5','6'}; - rc = ccid_transceive (ccid, apdu, sizeof apdu, - result, sizeof result, &resultlen); - print_result (rc, result, resultlen); + err = ccid_transceive (ccid, apdu, sizeof apdu, + result, sizeof result, &resultlen); + print_result (err, result, resultlen); } } - if (!rc) + if (!err) { fputs ("getting OpenPGP DO 0x5E ....\n", stderr); { static unsigned char apdu[] = { 0, 0xCA, 0, 0x5E, 254 }; - rc = ccid_transceive (ccid, apdu, sizeof apdu, - result, sizeof result, &resultlen); - print_result (rc, result, resultlen); + err = ccid_transceive (ccid, apdu, sizeof apdu, + result, sizeof result, &resultlen); + print_result (err, result, resultlen); } } @@ -3905,7 +4024,7 @@ main (int argc, char **argv) /* * Local Variables: - * compile-command: "gcc -DTEST -Wall -I/usr/local/include -lusb -g ccid-driver.c" + * compile-command: "gcc -DTEST -DGPGRT_ENABLE_ES_MACROS -DHAVE_NPTH -DUSE_NPTH -Wall -I/usr/include/libusb-1.0 -I/usr/local/include -lusb-1.0 -g ccid-driver.c -lnpth -lgpg-error" * End: */ #endif /*TEST*/ diff --git a/scd/ccid-driver.h b/scd/ccid-driver.h index 32b9475..dc17c27 100644 --- a/scd/ccid-driver.h +++ b/scd/ccid-driver.h @@ -108,6 +108,13 @@ enum { #define CCID_DRIVER_ERR_NO_READER 0x1000c #define CCID_DRIVER_ERR_ABORTED 0x1000d #define CCID_DRIVER_ERR_NO_PINPAD 0x1000e +#define CCID_DRIVER_ERR_USB_OTHER 0x10020 +#define CCID_DRIVER_ERR_USB_IO 0x10021 +#define CCID_DRIVER_ERR_USB_ACCESS 0x10023 +#define CCID_DRIVER_ERR_USB_NO_DEVICE 0x10024 +#define CCID_DRIVER_ERR_USB_BUSY 0x10026 +#define CCID_DRIVER_ERR_USB_TIMEOUT 0x10027 +#define CCID_DRIVER_ERR_USB_OVERFLOW 0x10028 struct ccid_driver_s; typedef struct ccid_driver_s *ccid_driver_t; @@ -117,12 +124,12 @@ struct ccid_dev_table; int ccid_set_debug_level (int level); char *ccid_get_reader_list (void); -gpg_error_t ccid_dev_scan (int *idx_max, struct ccid_dev_table **t_p); -void ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max); -unsigned int ccid_get_BAI (int, struct ccid_dev_table *tbl); +gpg_error_t ccid_dev_scan (int *idx_max, void **t_p); +void ccid_dev_scan_finish (void *tbl0, int max); +unsigned int ccid_get_BAI (int, void *tbl0); int ccid_compare_BAI (ccid_driver_t handle, unsigned int); int ccid_open_reader (const char *spec_reader_name, - int idx, struct ccid_dev_table *ccid_table, + int idx, void *ccid_table0, ccid_driver_t *handle, char **rdrname_p); int ccid_set_progress_cb (ccid_driver_t handle, void (*cb)(void *, const char *, int, int, int), diff --git a/scd/command.c b/scd/command.c index 1dfa652..769113f 100644 --- a/scd/command.c +++ b/scd/command.c @@ -138,9 +138,10 @@ hex_to_buffer (const char *string, size_t *r_length) /* Reset the card and free the application context. With SEND_RESET set to true actually send a RESET to the reader; this is the normal - way of calling the function. */ + way of calling the function. If KEEP_LOCK is set and the session + is locked that lock wil not be released. */ static void -do_reset (ctrl_t ctrl, int send_reset) +do_reset (ctrl_t ctrl, int send_reset, int keep_lock) { app_t app = ctrl->app_ctx; @@ -148,7 +149,7 @@ do_reset (ctrl_t ctrl, int send_reset) app_reset (app, ctrl, IS_LOCKED (ctrl)? 0: send_reset); /* If we hold a lock, unlock now. */ - if (locked_session && ctrl->server_local == locked_session) + if (!keep_lock && locked_session && ctrl->server_local == locked_session) { locked_session = NULL; log_info ("implicitly unlocking due to RESET\n"); @@ -160,9 +161,7 @@ reset_notify (assuan_context_t ctx, char *line) { ctrl_t ctrl = assuan_get_pointer (ctx); - (void) line; - - do_reset (ctrl, 1); + do_reset (ctrl, 1, has_option (line, "--keep-lock")); return 0; } @@ -291,6 +290,8 @@ cmd_serialno (assuan_context_t ctx, char *line) else demand = NULL; + line = skip_options (line); + /* Clear the remove flag so that the open_card is able to reread it. */ if (ctrl->server_local->card_removed) ctrl->server_local->card_removed = 0; @@ -1262,7 +1263,7 @@ static const char hlp_checkpin[] = " entry system, only the regular CHV will get blocked and not the\n" " dangerous CHV3. IDSTR is the usual card's serial number in hex\n" " notation; an optional fingerprint part will get ignored. There\n" - " is however a special mode if the IDSTR is sffixed with the\n" + " is however a special mode if the IDSTR is suffixed with the\n" " literal string \"[CHV3]\": In this case the Admin PIN is checked\n" " if and only if the retry counter is still at 3.\n" "\n" @@ -1340,9 +1341,10 @@ cmd_lock (assuan_context_t ctx, char *line) npth_sleep (1); /* Better implement an event mechanism. However, for card operations this should be sufficient. */ - /* FIXME: Need to check that the connection is still alive. - This can be done by issuing status messages. */ - goto retry; + /* Send a progress so that we can detect a connection loss. */ + rc = send_status_printf (ctrl, "PROGRESS", "scd_locked . 0 0"); + if (!rc) + goto retry; } #endif /*USE_NPTH*/ @@ -1814,7 +1816,7 @@ scd_command_handler (ctrl_t ctrl, int fd) } /* Cleanup. We don't send an explicit reset to the card. */ - do_reset (ctrl, 0); + do_reset (ctrl, 0, 0); /* Release the server object. */ if (session_list == ctrl->server_local) diff --git a/scd/iso7816.c b/scd/iso7816.c index 092a119..2070670 100644 --- a/scd/iso7816.c +++ b/scd/iso7816.c @@ -97,6 +97,13 @@ map_sw (int sw) case SW_HOST_ABORTED: ec = GPG_ERR_INV_RESPONSE; break; case SW_HOST_NO_PINPAD: ec = GPG_ERR_NOT_SUPPORTED; break; case SW_HOST_CANCELLED: ec = GPG_ERR_CANCELED; break; + case SW_HOST_USB_OTHER: ec = GPG_ERR_EIO; break; + case SW_HOST_USB_IO: ec = GPG_ERR_EIO; break; + case SW_HOST_USB_ACCESS: ec = GPG_ERR_EACCES; break; + case SW_HOST_USB_NO_DEVICE: ec = GPG_ERR_ENODEV; break; + case SW_HOST_USB_BUSY: ec = GPG_ERR_EBUSY; break; + case SW_HOST_USB_TIMEOUT: ec = GPG_ERR_TIMEOUT; break; + case SW_HOST_USB_OVERFLOW: ec = GPG_ERR_EOVERFLOW; break; default: if ((sw & 0x010000)) diff --git a/scd/scdaemon-w32info.rc b/scd/scdaemon-w32info.rc index aa0eba4..c1dae54 100644 --- a/scd/scdaemon-w32info.rc +++ b/scd/scdaemon-w32info.rc @@ -48,3 +48,5 @@ VALUE "Translation", 0x409, 0x4b0 END END + +1 RT_MANIFEST "scdaemon.w32-manifest" diff --git a/scd/scdaemon.c b/scd/scdaemon.c index ab3e1d9..c1a3f43 100644 --- a/scd/scdaemon.c +++ b/scd/scdaemon.c @@ -524,7 +524,7 @@ main (int argc, char **argv ) if (configname) { configlineno = 0; - configfp = fopen (configname, "r"); + configfp = gnupg_fopen (configname, "r"); if (!configfp) { if (default_config) diff --git a/scd/scdaemon.w32-manifest.in b/scd/scdaemon.w32-manifest.in new file mode 100644 index 0000000..22dabb6 --- /dev/null +++ b/scd/scdaemon.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (Scmartcard daemon)</description> +<assemblyIdentity + type="win32" + name="GnuPG.scdaemon" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/sm/Makefile.am b/sm/Makefile.am index 475924a..0bc7640 100644 --- a/sm/Makefile.am +++ b/sm/Makefile.am @@ -17,7 +17,7 @@ ## Process this file with automake to produce Makefile.in -EXTRA_DIST = ChangeLog-2011 gpgsm-w32info.rc +EXTRA_DIST = ChangeLog-2011 gpgsm-w32info.rc gpgsm.w32-manifest.in bin_PROGRAMS = gpgsm @@ -27,7 +27,10 @@ AM_CPPFLAGS = -DKEYBOX_WITH_X509=1 include $(top_srcdir)/am/cmacros.am if HAVE_W32_SYSTEM -resource_objs += gpgsm-w32info.o +gpgsm_robjs = $(resource_objs) gpgsm-w32info.o +gpgsm-w32info.o : gpgsm.w32-manifest +else +gpgsm_robjs = endif gpgsm_SOURCES = \ @@ -62,7 +65,7 @@ common_libs = ../kbx/libkeybox509.a $(libcommon) gpgsm_LDADD = $(common_libs) ../common/libgpgrl.a \ $(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(LIBASSUAN_LIBS) \ $(GPG_ERROR_LIBS) $(LIBREADLINE) $(LIBINTL) \ - $(LIBICONV) $(resource_objs) $(extra_sys_libs) $(NETLIBS) + $(LIBICONV) $(gpgsm_robjs) $(extra_sys_libs) $(NETLIBS) gpgsm_LDFLAGS = $(extra_bin_ldflags) # Make sure that all libs are build before we use them. This is diff --git a/sm/certchain.c b/sm/certchain.c index 5f83202..d2a1800 100644 --- a/sm/certchain.c +++ b/sm/certchain.c @@ -308,7 +308,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist) { gpg_error_t err; char *policies; - FILE *fp; + estream_t fp; int any_critical; err = ksba_cert_get_cert_policies (cert, &policies); @@ -340,7 +340,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist) return 0; } - fp = fopen (opt.policy_file, "r"); + fp = es_fopen (opt.policy_file, "r"); if (!fp) { if (opt.verbose || errno != ENOENT) @@ -369,14 +369,14 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist) /* read line */ do { - if (!fgets (line, DIM(line)-1, fp) ) + if (!es_fgets (line, DIM(line)-1, fp) ) { - gpg_error_t tmperr = gpg_error (gpg_err_code_from_errno (errno)); + gpg_error_t tmperr = gpg_error_from_syserror (); xfree (policies); - if (feof (fp)) + if (es_feof (fp)) { - fclose (fp); + es_fclose (fp); /* With no critical policies this is only a warning */ if (!any_critical) { @@ -388,16 +388,16 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist) _("certificate policy not allowed")); return gpg_error (GPG_ERR_NO_POLICY_MATCH); } - fclose (fp); + es_fclose (fp); return tmperr; } if (!*line || line[strlen(line)-1] != '\n') { /* eat until end of line */ - while ( (c=getc (fp)) != EOF && c != '\n') + while ((c = es_getc (fp)) != EOF && c != '\n') ; - fclose (fp); + es_fclose (fp); xfree (policies); return gpg_error (*line? GPG_ERR_LINE_TOO_LONG : GPG_ERR_INCOMPLETE_LINE); @@ -417,7 +417,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist) p = strpbrk (allowed, " :\n"); if (!*p || p == allowed) { - fclose (fp); + es_fclose (fp); xfree (policies); return gpg_error (GPG_ERR_CONFIGURATION); } @@ -430,7 +430,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist) if (p[strlen (allowed)] != ':') continue; /* The length does not match. */ /* Yep - it does match so return okay. */ - fclose (fp); + es_fclose (fp); xfree (policies); return 0; } diff --git a/sm/gpgsm-w32info.rc b/sm/gpgsm-w32info.rc index d813b0d..537afdb 100644 --- a/sm/gpgsm-w32info.rc +++ b/sm/gpgsm-w32info.rc @@ -48,3 +48,5 @@ VALUE "Translation", 0x409, 0x4b0 END END + +1 RT_MANIFEST "gpgsm.w32-manifest" @@ -1037,7 +1037,7 @@ main ( int argc, char **argv) next_pass: if (configname) { configlineno = 0; - configfp = fopen (configname, "r"); + configfp = gnupg_fopen (configname, "r"); if (!configfp) { if (default_config) @@ -1707,7 +1707,7 @@ main ( int argc, char **argv) filelist[0] = make_filename (gnupg_datadir (),"com-certs.pem", NULL); filelist[1] = NULL; - if (!access (filelist[0], F_OK)) + if (!gnupg_access (filelist[0], F_OK)) { log_info (_("importing common certificates '%s'\n"), filelist[0]); @@ -2213,7 +2213,7 @@ open_read (const char *filename) fd = check_special_filename (filename, 0, 0); if (fd != -1) return fd; - fd = open (filename, O_RDONLY | O_BINARY); + fd = gnupg_open (filename, O_RDONLY | O_BINARY, 0); if (fd == -1) { log_error (_("can't open '%s': %s\n"), filename, strerror (errno)); diff --git a/sm/gpgsm.w32-manifest.in b/sm/gpgsm.w32-manifest.in new file mode 100644 index 0000000..3055788 --- /dev/null +++ b/sm/gpgsm.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (X409/CMS tool)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpgsm" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> @@ -75,33 +75,10 @@ static void unlock_all (KEYDB_HANDLE hd); static void try_make_homedir (const char *fname) { - const char *defhome = standard_homedir (); - - /* Create the directory only if the supplied directory name is the - same as the default one. This way we avoid to create arbitrary - directories when a non-default home directory is used. To cope - with HOME, we do compare only the suffix if we see that the - default homedir does start with a tilde. */ if ( opt.dry_run || opt.no_homedir_creation ) return; - if ( -#ifdef HAVE_W32_SYSTEM - ( !compare_filenames (fname, defhome) ) -#else - ( *defhome == '~' - && (strlen(fname) >= strlen (defhome+1) - && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) )) - || (*defhome != '~' && !compare_filenames( fname, defhome ) ) -#endif - ) - { - if (gnupg_mkdir (fname, "-rwx")) - log_info (_("can't create directory '%s': %s\n"), - fname, strerror(errno) ); - else if (!opt.quiet ) - log_info (_("directory '%s' created\n"), fname); - } + gnupg_maybe_make_homedir (fname, opt.quiet); } @@ -113,8 +90,9 @@ try_make_homedir (const char *fname) static gpg_error_t maybe_create_keybox (char *filename, int force, int *r_created) { + gpg_err_code_t ec; dotlock_t lockhd = NULL; - FILE *fp; + estream_t fp; int rc; mode_t oldmask; char *last_slash_in_filename; @@ -124,8 +102,8 @@ maybe_create_keybox (char *filename, int force, int *r_created) *r_created = 0; /* A quick test whether the filename already exists. */ - if (!access (filename, F_OK)) - return !access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES); + if (!gnupg_access (filename, F_OK)) + return !gnupg_access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES); /* If we don't want to create a new file at all, there is no need to go any further - bail out right here. */ @@ -151,7 +129,7 @@ maybe_create_keybox (char *filename, int force, int *r_created) not happen though. */ save_slash = *last_slash_in_filename; *last_slash_in_filename = 0; - if (access(filename, F_OK)) + if (gnupg_access(filename, F_OK)) { static int tried; @@ -160,9 +138,9 @@ maybe_create_keybox (char *filename, int force, int *r_created) tried = 1; try_make_homedir (filename); } - if (access (filename, F_OK)) + if ((ec = gnupg_access (filename, F_OK))) { - rc = gpg_error_from_syserror (); + rc = gpg_error (ec); *last_slash_in_filename = save_slash; goto leave; } @@ -205,7 +183,7 @@ maybe_create_keybox (char *filename, int force, int *r_created) /* The file does not yet exist, create it now. */ oldmask = umask (077); - fp = fopen (filename, "wb"); + fp = es_fopen (filename, "wb"); if (!fp) { rc = gpg_error_from_syserror (); @@ -222,7 +200,7 @@ maybe_create_keybox (char *filename, int force, int *r_created) rc = _keybox_write_header_blob (fp, 0); if (rc) { - fclose (fp); + es_fclose (fp); log_error (_("error creating keybox '%s': %s\n"), filename, gpg_strerror (rc)); goto leave; @@ -233,7 +211,7 @@ maybe_create_keybox (char *filename, int force, int *r_created) if (r_created) *r_created = 1; - fclose (fp); + es_fclose (fp); rc = 0; leave: @@ -300,14 +278,15 @@ keydb_add_resource (ctrl_t ctrl, const char *url, int force, int *auto_created) /* see whether we can determine the filetype */ if (rt == KEYDB_RESOURCE_TYPE_NONE) { - FILE *fp = fopen( filename, "rb" ); + estream_t fp; + fp = es_fopen( filename, "rb" ); if (fp) { u32 magic; /* FIXME: check for the keybox magic */ - if (fread (&magic, 4, 1, fp) == 1 ) + if (es_fread (&magic, 4, 1, fp) == 1 ) { if (magic == 0x13579ace || magic == 0xce9a5713) ; /* GDBM magic - no more support */ @@ -316,7 +295,8 @@ keydb_add_resource (ctrl_t ctrl, const char *url, int force, int *auto_created) } else /* maybe empty: assume keybox */ rt = KEYDB_RESOURCE_TYPE_KEYBOX; - fclose (fp); + + es_fclose (fp); } else /* no file yet: create keybox */ rt = KEYDB_RESOURCE_TYPE_KEYBOX; diff --git a/sm/minip12.c b/sm/minip12.c index f066892..7087e44 100644 --- a/sm/minip12.c +++ b/sm/minip12.c @@ -2565,7 +2565,7 @@ main (int argc, char **argv) gcry_control (GCRYCTL_DISABLE_SECMEM, NULL); gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL); - fp = fopen (argv[1], "rb"); + fp = gnupg_fopen (argv[1], "rb"); if (!fp) { fprintf (stderr, "can't open '%s': %s\n", argv[1], strerror (errno)); diff --git a/sm/qualified.c b/sm/qualified.c index 564e779..b433717 100644 --- a/sm/qualified.c +++ b/sm/qualified.c @@ -35,7 +35,7 @@ NULL indicates that this module has been initialized and if the LISTFP is also NULL, no list of qualified signatures exists. */ static char *listname; -static FILE *listfp; +static estream_t listfp; /* Read the trustlist and return entry by entry. KEY must point to a @@ -59,7 +59,7 @@ read_list (char *key, char *country, int *lnr) if (!listname) { listname = make_filename (gnupg_datadir (), "qualified.txt", NULL); - listfp = fopen (listname, "r"); + listfp = es_fopen (listname, "r"); if (!listfp && errno != ENOENT) { err = gpg_error_from_syserror (); @@ -73,9 +73,9 @@ read_list (char *key, char *country, int *lnr) do { - if (!fgets (line, DIM(line)-1, listfp) ) + if (!es_fgets (line, DIM(line)-1, listfp) ) { - if (feof (listfp)) + if (es_feof (listfp)) return gpg_error (GPG_ERR_EOF); return gpg_error_from_syserror (); } @@ -83,7 +83,7 @@ read_list (char *key, char *country, int *lnr) if (!*line || line[strlen(line)-1] != '\n') { /* Eat until end of line. */ - while ( (c=getc (listfp)) != EOF && c != '\n') + while ((c = es_getc (listfp)) != EOF && c != '\n') ; return gpg_error (*line? GPG_ERR_LINE_TOO_LONG : GPG_ERR_INCOMPLETE_LINE); @@ -163,8 +163,8 @@ gpgsm_is_in_qualified_list (ctrl_t ctrl, ksba_cert_t cert, char *country) if (listfp) { /* W32ce has no rewind, thus we use the equivalent code. */ - fseek (listfp, 0, SEEK_SET); - clearerr (listfp); + es_fseek (listfp, 0, SEEK_SET); + es_clearerr (listfp); } while (!(err = read_list (key, mycountry, &lnr))) { diff --git a/tests/openpgp/README b/tests/openpgp/README index 94a00fa..22b7211 100644 --- a/tests/openpgp/README +++ b/tests/openpgp/README @@ -25,6 +25,9 @@ spawned programs to their standard error stream, verbose=2 to see what programs are executed, or verbose=3 to see even more program output and exit codes. +If you want to run gpg under valgrind add with_valgrind=1. + + ** Inspecting the test environment To inspect the environment in which tests are running, or to quickly diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm index 8fe953e..b864005 100644 --- a/tests/openpgp/defs.scm +++ b/tests/openpgp/defs.scm @@ -123,6 +123,7 @@ (define bin-prefix (getenv "BIN_PREFIX")) (define installed? (not (string=? "" bin-prefix))) +(define with-valgrind? (not (string=? (getenv "with_valgrind") ""))) (define (tool-hardcoded which) (let ((t (assoc which tools))) @@ -138,7 +139,8 @@ ;; (set! gpg `(,@valgrind ,@gpg)) ;; (define valgrind - '("/usr/bin/valgrind" --leak-check=full --error-exitcode=154)) + '("/usr/bin/valgrind" -q --leak-check=no --track-origins=yes + --error-exitcode=154 --exit-on-first-error=yes)) (unless installed? (setenv "GNUPG_BUILDDIR" (getenv "objdir") #t)) @@ -496,4 +498,12 @@ "but got" trust)))) +;; +;; Enable checking with valgrind if the envvar "with_valgrind" is set +;; +(when with-valgrind? + (set! gpg `(,@valgrind ,@gpg))) + + + ;; end diff --git a/tools/Makefile.am b/tools/Makefile.am index 0b31eca..60bd1e2 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -20,14 +20,35 @@ EXTRA_DIST = \ Manifest watchgnupg.c no-libgcrypt.c \ addgnupghome applygnupgdefaults \ lspgpot mail-signed-keys convert-from-106 sockprox.c \ - ccidmon.c ChangeLog-2011 gpg-connect-agent-w32info.rc + ccidmon.c ChangeLog-2011 \ + gpgconf-w32info.rc gpgconf.w32-manifest.in \ + gpgtar-w32info.rc gpgtar.w32-manifest.in \ + gpg-connect-agent-w32info.rc gpg-connect-agent.w32-manifest.in \ + gpg-check-pattern-w32info.rc gpg-check-pattern.w32-manifest.in \ + gpg-wks-client-w32info.rc gpg-wks-client.w32-manifest.in AM_CPPFLAGS = include $(top_srcdir)/am/cmacros.am if HAVE_W32_SYSTEM -resource_objs += gpg-connect-agent-w32info.o +gpgconf_robjs = $(resource_objs) gpgconf-w32info.o +gpgtar_robjs = $(resource_objs) gpgtar-w32info.o +gpg_connect_agent_robjs = $(resource_objs) gpg-connect-agent-w32info.o +gpg_check_pattern_robjs = $(resource_objs) gpg-check-pattern-w32info.o +gpg_wks_client_robjs = $(resource_objs) gpg-wks-client-w32info.o + +gpgconf-w32info.o: gpgconf.w32-manifest +gpgtar-w32info.o: gpgtar.w32-manifest +gpg-connect-agent-w32info.o: gpg-connect-agent.w32-manifest +gpg-check-pattern-w32info.o: gpg-check-pattern.w32-manifest +gpg-wks-client-w32info.o: gpg-wks-client.w32-manifest +else +gpg_connect_agent_robjs = +gpgconf_robjs = +gpg_check_pattern_robjs = +gpgtar_robjs = +gpg_wks_client_robjs = endif AM_CFLAGS = $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) $(LIBASSUAN_CFLAGS) @@ -56,6 +77,8 @@ libexec_PROGRAMS = gpg-wks-client bin_PROGRAMS = gpgconf gpg-connect-agent ${symcryptrun} if !HAVE_W32_SYSTEM bin_PROGRAMS += watchgnupg gpgparsemail ${gpg_wks_server} gpgsplit +else +bin_PROGRAMS += gpgconf-w32 endif libexec_PROGRAMS += gpg-check-pattern @@ -105,9 +128,14 @@ gpgconf_SOURCES = gpgconf.c gpgconf.h gpgconf-comp.c # do not eliminate the supposed-to-be-unused-inline-functions). gpgconf_LDADD = $(maybe_commonpth_libs) $(opt_libassuan_libs) \ $(LIBINTL) $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) $(NETLIBS) \ - $(LIBICONV) $(W32SOCKLIBS) + $(LIBICONV) $(W32SOCKLIBS) \ + $(gpgconf_robjs) gpgconf_LDFLAGS = $(extra_bin_ldflags) +gpgconf_w32_SOURCES = $(gpgconf_SOURCES) +gpgconf_w32_LDADD = $(gpgconf_LDADD) +gpgconf_w32_LDFLAGS = $(gpgconf_LDFLAGS) -Wl,-subsystem,windows + gpgparsemail_SOURCES = gpgparsemail.c rfc822parse.c rfc822parse.h gpgparsemail_LDADD = @@ -124,15 +152,14 @@ gpg_connect_agent_LDADD = ../common/libgpgrl.a $(common_libs) \ $(LIBASSUAN_LIBS) $(LIBGCRYPT_LIBS) \ $(GPG_ERROR_LIBS) \ $(LIBREADLINE) $(LIBINTL) $(NETLIBS) $(LIBICONV) \ - $(resource_objs) - + $(gpg_connect_agent_robjs) gpg_check_pattern_SOURCES = gpg-check-pattern.c gpg_check_pattern_CFLAGS = $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) $(INCICONV) gpg_check_pattern_LDADD = $(common_libs) $(regexp_libs) $(LIBGCRYPT_LIBS) \ $(GPG_ERROR_LIBS) \ $(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS) \ - $(LIBICONV) + $(LIBICONV) $(gpg_check_pattern_robjs) gpgtar_SOURCES = \ gpgtar.c gpgtar.h \ @@ -141,7 +168,8 @@ gpgtar_SOURCES = \ gpgtar-list.c gpgtar_CFLAGS = $(GPG_ERROR_CFLAGS) gpgtar_LDADD = $(libcommon) $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) \ - $(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS) + $(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS) \ + $(gpgtar_robjs) gpg_wks_server_SOURCES = \ gpg-wks-server.c \ @@ -171,7 +199,8 @@ gpg_wks_client_SOURCES = \ gpg_wks_client_CFLAGS = $(LIBASSUAN_CFLAGS) $(GPG_ERROR_CFLAGS) $(INCICONV) gpg_wks_client_LDADD = $(libcommon) \ $(LIBASSUAN_LIBS) $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) \ - $(LIBINTL) $(LIBICONV) $(NETLIBS) + $(LIBINTL) $(LIBICONV) $(NETLIBS) \ + $(gpg_wks_client_robjs) # Make sure that all libs are build before we use them. This is diff --git a/tools/gpg-check-pattern-w32info.rc b/tools/gpg-check-pattern-w32info.rc new file mode 100644 index 0000000..ed50301 --- /dev/null +++ b/tools/gpg-check-pattern-w32info.rc @@ -0,0 +1,52 @@ +/* gpg-check-pattern-w32info.rc -*- c -*- + * Copyright (C) 2020 g10 Code GmbH + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "afxres.h" +#include "../common/w32info-rc.h" + +1 ICON "../common/gnupg.ico" + +1 VERSIONINFO + FILEVERSION W32INFO_VI_FILEVERSION + PRODUCTVERSION W32INFO_VI_PRODUCTVERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/ +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */ + FILETYPE 0x1L /* VFT_APP (0x1) */ + FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ + BEGIN + VALUE "FileDescription", L"GnuPG\x2019s pattern checker\0" + VALUE "InternalName", "gpg-check-pattern\0" + VALUE "OriginalFilename", "gpg-check-pattern.exe\0" + VALUE "ProductName", W32INFO_PRODUCTNAME + VALUE "ProductVersion", W32INFO_PRODUCTVERSION + VALUE "CompanyName", W32INFO_COMPANYNAME + VALUE "FileVersion", W32INFO_FILEVERSION + VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT + VALUE "Comments", W32INFO_COMMENTS + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0x4b0 + END + END + +1 RT_MANIFEST "gpg-check-pattern.w32-manifest" diff --git a/tools/gpg-check-pattern.c b/tools/gpg-check-pattern.c index e4906d2..46b9e58 100644 --- a/tools/gpg-check-pattern.c +++ b/tools/gpg-check-pattern.c @@ -227,7 +227,7 @@ main (int argc, char **argv ) static char * read_file (const char *fname, size_t *r_length) { - FILE *fp; + estream_t fp; char *buf; size_t buflen; @@ -235,10 +235,8 @@ read_file (const char *fname, size_t *r_length) { size_t nread, bufsize = 0; - fp = stdin; -#ifdef HAVE_DOSISH_SYSTEM - setmode ( fileno(fp) , O_BINARY ); -#endif + fp = es_stdin; + es_set_binary (fp); buf = NULL; buflen = 0; #define NCHUNK 8192 @@ -250,8 +248,8 @@ read_file (const char *fname, size_t *r_length) else buf = xrealloc (buf, bufsize+1); - nread = fread (buf+buflen, 1, NCHUNK, fp); - if (nread < NCHUNK && ferror (fp)) + nread = es_fread (buf+buflen, 1, NCHUNK, fp); + if (nread < NCHUNK && es_ferror (fp)) { log_error ("error reading '[stdin]': %s\n", strerror (errno)); xfree (buf); @@ -267,30 +265,30 @@ read_file (const char *fname, size_t *r_length) { struct stat st; - fp = fopen (fname, "rb"); + fp = es_fopen (fname, "rb"); if (!fp) { log_error ("can't open '%s': %s\n", fname, strerror (errno)); return NULL; } - if (fstat (fileno(fp), &st)) + if (fstat (es_fileno (fp), &st)) { log_error ("can't stat '%s': %s\n", fname, strerror (errno)); - fclose (fp); + es_fclose (fp); return NULL; } buflen = st.st_size; buf = xmalloc (buflen+1); - if (fread (buf, buflen, 1, fp) != 1) + if (es_fread (buf, buflen, 1, fp) != 1) { log_error ("error reading '%s': %s\n", fname, strerror (errno)); - fclose (fp); + es_fclose (fp); xfree (buf); return NULL; } - fclose (fp); + es_fclose (fp); } buf[buflen] = 0; *r_length = buflen; diff --git a/tools/gpg-check-pattern.w32-manifest.in b/tools/gpg-check-pattern.w32-manifest.in new file mode 100644 index 0000000..2a5f8ec --- /dev/null +++ b/tools/gpg-check-pattern.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (Pattern checker)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpg-check-pattern" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/tools/gpg-connect-agent-w32info.rc b/tools/gpg-connect-agent-w32info.rc index 4e7b19d..06612f8 100644 --- a/tools/gpg-connect-agent-w32info.rc +++ b/tools/gpg-connect-agent-w32info.rc @@ -1,4 +1,4 @@ -/* scdaemon-w32info.rc -*- c -*- +/* gpg-connect-agent-w32info.rc -*- c -*- * Copyright (C) 2013 g10 Code GmbH * * This file is free software; as a special exception the author gives @@ -32,8 +32,7 @@ BEGIN BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ BEGIN - VALUE "FileDescription", L"GnuPG\x2019s command line access \ -to the agent\0" + VALUE "FileDescription", L"GnuPG\x2019s IPC tool\0" VALUE "InternalName", "gpg-connect-agent\0" VALUE "OriginalFilename", "gpg-connect-agent.exe\0" VALUE "ProductName", W32INFO_PRODUCTNAME @@ -49,3 +48,5 @@ to the agent\0" VALUE "Translation", 0x409, 0x4b0 END END + +1 RT_MANIFEST "gpg-connect-agent.w32-manifest" diff --git a/tools/gpg-connect-agent.c b/tools/gpg-connect-agent.c index 7eb7ffa..0dabdad 100644 --- a/tools/gpg-connect-agent.c +++ b/tools/gpg-connect-agent.c @@ -166,7 +166,7 @@ typedef struct loopline_s *loopline_t; static pid_t server_pid = (pid_t)(-1); /* The current datasink file or NULL. */ -static FILE *current_datasink; +static estream_t current_datasink; /* A list of open file descriptors. */ static struct @@ -874,7 +874,7 @@ clear_definq (void) static void do_sendfd (assuan_context_t ctx, char *line) { - FILE *fp; + estream_t fp; char *name, *mode, *p; int rc, fd; @@ -900,14 +900,14 @@ do_sendfd (assuan_context_t ctx, char *line) } /* Open and send. */ - fp = fopen (name, mode); + fp = es_fopen (name, mode); if (!fp) { log_error ("can't open '%s' in \"%s\" mode: %s\n", name, mode, strerror (errno)); return; } - fd = fileno (fp); + fd = es_fileno (fp); if (opt.verbose) log_error ("file '%s' opened in \"%s\" mode, fd=%d\n", @@ -916,7 +916,7 @@ do_sendfd (assuan_context_t ctx, char *line) rc = assuan_sendfd (ctx, INT2FD (fd) ); if (rc) log_error ("sending descriptor %d failed: %s\n", fd, gpg_strerror (rc)); - fclose (fp); + es_fclose (fp); } @@ -932,7 +932,7 @@ do_recvfd (assuan_context_t ctx, char *line) static void do_open (char *line) { - FILE *fp; + estream_t fp; char *varname, *name, *mode, *p; int fd; @@ -976,14 +976,14 @@ do_open (char *line) } /* Open and send. */ - fp = fopen (name, mode); + fp = es_fopen (name, mode); if (!fp) { log_error ("can't open '%s' in \"%s\" mode: %s\n", name, mode, strerror (errno)); return; } - fd = dup (fileno (fp)); + fd = dup (es_fileno (fp)); if (fd >= 0 && fd < DIM (open_fd_table)) { open_fd_table[fd].inuse = 1; @@ -1033,7 +1033,7 @@ do_open (char *line) if (fd != -1) close (fd); /* Table was full. */ } - fclose (fp); + es_fclose (fp); } @@ -1182,6 +1182,7 @@ main (int argc, char **argv) assuan_set_gpg_err_source (0); + gnupg_init_signals (0, NULL); opt.autostart = 1; opt.connect_flags = 1; @@ -1565,17 +1566,17 @@ main (int argc, char **argv) if (current_datasink) { - if (current_datasink != stdout) - fclose (current_datasink); + if (current_datasink != es_stdout) + es_fclose (current_datasink); current_datasink = NULL; } tmpline = opt.enable_varsubst? substitute_line (p) : NULL; fname = tmpline? tmpline : p; if (fname && !strcmp (fname, "-")) - current_datasink = stdout; + current_datasink = es_stdout; else if (fname && *fname) { - current_datasink = fopen (fname, "wb"); + current_datasink = es_fopen (fname, "wb"); if (!current_datasink) log_error ("can't open '%s': %s\n", fname, strerror (errno)); @@ -1904,6 +1905,7 @@ handle_inquire (assuan_context_t ctx, char *line) { const char *name; definq_t d; + /* FIXME: Due to the use of popen we can't easily switch to estream. */ FILE *fp = NULL; char buffer[1024]; int rc, n; @@ -1965,7 +1967,7 @@ handle_inquire (assuan_context_t ctx, char *line) } else { - fp = fopen (d->file, "rb"); + fp = gnupg_fopen (d->file, "rb"); if (!fp) log_error ("error opening '%s': %s\n", d->file, strerror (errno)); else if (opt.verbose) @@ -2055,7 +2057,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr) } else c = *s; - putc (c, current_datasink); + es_putc (c, current_datasink); } } else if (opt.hex) @@ -2126,7 +2128,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr) { if (need_lf) { - if (!current_datasink || current_datasink != stdout) + if (!current_datasink || current_datasink != es_stdout) putchar ('\n'); need_lf = 0; } @@ -2135,7 +2137,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr) && line[0] == 'S' && (line[1] == '\0' || line[1] == ' ')) { - if (!current_datasink || current_datasink != stdout) + if (!current_datasink || current_datasink != es_stdout) { fwrite (line, linelen, 1, stdout); putchar ('\n'); @@ -2145,7 +2147,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr) && line[0] == 'O' && line[1] == 'K' && (line[2] == '\0' || line[2] == ' ')) { - if (!current_datasink || current_datasink != stdout) + if (!current_datasink || current_datasink != es_stdout) { fwrite (line, linelen, 1, stdout); putchar ('\n'); @@ -2163,7 +2165,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr) if (!errval) errval = -1; set_int_var ("?", errval); - if (!current_datasink || current_datasink != stdout) + if (!current_datasink || current_datasink != es_stdout) { fwrite (line, linelen, 1, stdout); putchar ('\n'); @@ -2177,7 +2179,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr) && line[6] == 'E' && (line[7] == '\0' || line[7] == ' ')) { - if (!current_datasink || current_datasink != stdout) + if (!current_datasink || current_datasink != es_stdout) { fwrite (line, linelen, 1, stdout); putchar ('\n'); @@ -2189,7 +2191,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr) && line[0] == 'E' && line[1] == 'N' && line[2] == 'D' && (line[3] == '\0' || line[3] == ' ')) { - if (!current_datasink || current_datasink != stdout) + if (!current_datasink || current_datasink != es_stdout) { fwrite (line, linelen, 1, stdout); putchar ('\n'); diff --git a/tools/gpg-connect-agent.w32-manifest.in b/tools/gpg-connect-agent.w32-manifest.in new file mode 100644 index 0000000..aba5420 --- /dev/null +++ b/tools/gpg-connect-agent.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (IPC tool)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpg-connect-agent" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/tools/gpg-wks-client-w32info.rc b/tools/gpg-wks-client-w32info.rc new file mode 100644 index 0000000..60021a7 --- /dev/null +++ b/tools/gpg-wks-client-w32info.rc @@ -0,0 +1,52 @@ +/* gpg-wks-client-w32info.rc -*- c -*- + * Copyright (C) 2020 g10 Code GmbH + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "afxres.h" +#include "../common/w32info-rc.h" + +1 ICON "../common/gnupg.ico" + +1 VERSIONINFO + FILEVERSION W32INFO_VI_FILEVERSION + PRODUCTVERSION W32INFO_VI_PRODUCTVERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/ +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */ + FILETYPE 0x1L /* VFT_APP (0x1) */ + FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ + BEGIN + VALUE "FileDescription", L"GnuPG\x2019s Web Key Service client\0" + VALUE "InternalName", "gpg-wks-client\0" + VALUE "OriginalFilename", "gpg-wks-client.exe\0" + VALUE "ProductName", W32INFO_PRODUCTNAME + VALUE "ProductVersion", W32INFO_PRODUCTVERSION + VALUE "CompanyName", W32INFO_COMPANYNAME + VALUE "FileVersion", W32INFO_FILEVERSION + VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT + VALUE "Comments", W32INFO_COMMENTS + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0x4b0 + END + END + +1 RT_MANIFEST "gpg-wks-client.w32-manifest" diff --git a/tools/gpg-wks-client.c b/tools/gpg-wks-client.c index 5ec670e..56768aa 100644 --- a/tools/gpg-wks-client.c +++ b/tools/gpg-wks-client.c @@ -307,7 +307,7 @@ main (int argc, char **argv) { struct stat sb; - if (stat (opt.directory, &sb)) + if (gnupg_stat (opt.directory, &sb)) { err = gpg_error_from_syserror (); log_error ("error accessing directory '%s': %s\n", diff --git a/tools/gpg-wks-client.w32-manifest.in b/tools/gpg-wks-client.w32-manifest.in new file mode 100644 index 0000000..ba2508e --- /dev/null +++ b/tools/gpg-wks-client.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (Web Key Service client)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpg-wks-client" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/tools/gpg-wks-server.c b/tools/gpg-wks-server.c index 8cdbfaf..addafa2 100644 --- a/tools/gpg-wks-server.c +++ b/tools/gpg-wks-server.c @@ -332,7 +332,7 @@ main (int argc, char **argv) { struct stat sb; - if (stat (opt.directory, &sb)) + if (gnupg_stat (opt.directory, &sb)) { err = gpg_error_from_syserror (); log_error ("error accessing directory '%s': %s\n", @@ -1177,7 +1177,7 @@ process_new_key (server_ctx_t ctx, estream_t key) goto leave; } - if (access (dname, W_OK)) + if (gnupg_access (dname, W_OK)) { log_info ("skipping address '%s': Domain not configured\n", sl->mbox); continue; @@ -1454,7 +1454,7 @@ check_and_publish (server_ctx_t ctx, const char *address, const char *nonce) err = gpg_error_from_syserror (); goto leave; } - if (!access (fnewname, W_OK)) + if (!gnupg_access (fnewname, W_OK)) { /* Yes, we have a dane directory. */ s = strchr (address, '@'); @@ -1608,22 +1608,22 @@ static gpg_error_t get_domain_list (strlist_t *r_list) { gpg_error_t err; - DIR *dir = NULL; + gnupg_dir_t dir = NULL; char *fname = NULL; - struct dirent *dentry; + gnupg_dirent_t dentry; struct stat sb; strlist_t list = NULL; *r_list = NULL; - dir = opendir (opt.directory); + dir = gnupg_opendir (opt.directory); if (!dir) { err = gpg_error_from_syserror (); goto leave; } - while ((dentry = readdir (dir))) + while ((dentry = gnupg_readdir (dir))) { if (*dentry->d_name == '.') continue; @@ -1640,7 +1640,7 @@ get_domain_list (strlist_t *r_list) goto leave; } - if (stat (fname, &sb)) + if (gnupg_stat (fname, &sb)) { err = gpg_error_from_syserror (); log_error ("error accessing '%s': %s\n", fname, gpg_strerror (err)); @@ -1663,8 +1663,7 @@ get_domain_list (strlist_t *r_list) leave: free_strlist (list); - if (dir) - closedir (dir); + gnupg_closedir (dir); xfree (fname); return err; } @@ -1677,8 +1676,8 @@ expire_one_domain (const char *top_dirname, const char *domain) gpg_error_t err; char *dirname; char *fname = NULL; - DIR *dir = NULL; - struct dirent *dentry; + gnupg_dir_t dir = NULL; + gnupg_dirent_t dentry; struct stat sb; time_t now = gnupg_get_time (); @@ -1691,7 +1690,7 @@ expire_one_domain (const char *top_dirname, const char *domain) goto leave; } - dir = opendir (dirname); + dir = gnupg_opendir (dirname); if (!dir) { err = gpg_error_from_syserror (); @@ -1700,7 +1699,7 @@ expire_one_domain (const char *top_dirname, const char *domain) goto leave; } - while ((dentry = readdir (dir))) + while ((dentry = gnupg_readdir (dir))) { if (*dentry->d_name == '.') continue; @@ -1718,7 +1717,7 @@ expire_one_domain (const char *top_dirname, const char *domain) log_info ("garbage file '%s' ignored\n", fname); continue; } - if (stat (fname, &sb)) + if (gnupg_stat (fname, &sb)) { err = gpg_error_from_syserror (); log_error ("error accessing '%s': %s\n", fname, gpg_strerror (err)); @@ -1749,8 +1748,7 @@ expire_one_domain (const char *top_dirname, const char *domain) err = 0; leave: - if (dir) - closedir (dir); + gnupg_closedir (dir); xfree (dirname); xfree (fname); return err; @@ -1790,7 +1788,7 @@ command_list_domains (void) { "pending", "-rwx" }, { "hu", "-rwxr-xr-x" } }; - + gpg_err_code_t ec; gpg_error_t err; strlist_t domaindirs; strlist_t sl; @@ -1827,9 +1825,9 @@ command_list_domains (void) err = gpg_error_from_syserror (); goto leave; } - if (access (fname, W_OK)) + if ((ec = gnupg_access (fname, W_OK))) { - err = gpg_error_from_syserror (); + err = gpg_error (ec); if (gpg_err_code (err) == GPG_ERR_ENOENT) { if (gnupg_mkdir (fname, requireddirs[i].perm)) @@ -1857,9 +1855,9 @@ command_list_domains (void) err = gpg_error_from_syserror (); goto leave; } - if (access (fname, F_OK)) + if ((ec = gnupg_access (fname, F_OK))) { - err = gpg_error_from_syserror (); + err = gpg_error (ec); if (gpg_err_code (err) == GPG_ERR_ENOENT) log_error ("domain %s: submission address not configured\n", domain); @@ -1936,6 +1934,7 @@ command_cron (void) static gpg_error_t command_check_key (const char *userid) { + gpg_err_code_t ec; gpg_error_t err; char *addrspec = NULL; char *fname = NULL; @@ -1944,9 +1943,9 @@ command_check_key (const char *userid) if (err) goto leave; - if (access (fname, R_OK)) + if ((ec = gnupg_access (fname, R_OK))) { - err = gpg_error_from_syserror (); + err = gpg_error (ec); if (opt_with_file) es_printf ("%s n %s\n", addrspec, fname); if (gpg_err_code (err) == GPG_ERR_ENOENT) diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c index 135d800..5903cf4 100644 --- a/tools/gpgconf-comp.c +++ b/tools/gpgconf-comp.c @@ -2115,7 +2115,7 @@ retrieve_options_from_program (gc_component_t component, gc_backend_t backend, argv[i++] = "--gpgconf-list"; argv[i++] = NULL; - if (only_installed && access (pgmname, X_OK)) + if (only_installed && gnupg_access (pgmname, X_OK)) { return; /* The component is not installed. */ } @@ -3016,8 +3016,9 @@ change_options_program (gc_component_t component, gc_backend_t backend, *dest_filenamep = dest_filename; *orig_filenamep = orig_filename; - /* Use open() so that we can use O_EXCL. */ - fd = open (src_filename, O_CREAT | O_EXCL | O_WRONLY, 0644); + /* Use open() so that we can use O_EXCL. + * FIXME: gpgrt has an x flag for quite some time now - use that. */ + fd = gnupg_open (src_filename, O_CREAT | O_EXCL | O_WRONLY, 0644); if (fd < 0) return -1; src_file = gpgrt_fdopen (fd, "w"); @@ -4055,7 +4056,7 @@ gc_apply_profile (const char *fname) * is installed and use that instead of the given file name. */ fname_buffer = xstrconcat (gnupg_datadir (), DIRSEP_S, fname, ".prf", NULL); - if (!access (fname_buffer, F_OK)) + if (!gnupg_access (fname_buffer, F_OK)) fname = fname_buffer; } diff --git a/tools/gpgconf-w32info.rc b/tools/gpgconf-w32info.rc new file mode 100644 index 0000000..cd8df29 --- /dev/null +++ b/tools/gpgconf-w32info.rc @@ -0,0 +1,52 @@ +/* gpgconf-w32info.rc -*- c -*- + * Copyright (C) 2020 g10 Code GmbH + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "afxres.h" +#include "../common/w32info-rc.h" + +1 ICON "../common/gnupg.ico" + +1 VERSIONINFO + FILEVERSION W32INFO_VI_FILEVERSION + PRODUCTVERSION W32INFO_VI_PRODUCTVERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/ +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */ + FILETYPE 0x1L /* VFT_APP (0x1) */ + FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ + BEGIN + VALUE "FileDescription", L"GnuPG\x2019s config tool\0" + VALUE "InternalName", "gpgconf\0" + VALUE "OriginalFilename", "gpgconf.exe\0" + VALUE "ProductName", W32INFO_PRODUCTNAME + VALUE "ProductVersion", W32INFO_PRODUCTVERSION + VALUE "CompanyName", W32INFO_COMPANYNAME + VALUE "FileVersion", W32INFO_FILEVERSION + VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT + VALUE "Comments", W32INFO_COMMENTS + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0x4b0 + END + END + +1 RT_MANIFEST "gpgconf.w32-manifest" diff --git a/tools/gpgconf.c b/tools/gpgconf.c index 945d0e5..b6afc8b 100644 --- a/tools/gpgconf.c +++ b/tools/gpgconf.c @@ -31,6 +31,7 @@ #include "../common/sysutils.h" #include "../common/init.h" #include "../common/status.h" +#include "../common/exechelp.h" /* Constants to identify the commands and options. */ @@ -65,7 +66,8 @@ enum cmd_and_opt_values aCreateSocketDir, aRemoveSocketDir, aApplyProfile, - aReload + aReload, + aShowVersions }; @@ -96,6 +98,8 @@ static ARGPARSE_OPTS opts[] = { aKill, "kill", 256, N_("kill a given component")}, { aCreateSocketDir, "create-socketdir", 256, "@"}, { aRemoveSocketDir, "remove-socketdir", 256, "@"}, + ARGPARSE_c (aShowVersions, "show-versions", "@"), + { 301, NULL, 0, N_("@\nOptions:\n ") }, @@ -120,6 +124,9 @@ static ARGPARSE_OPTS opts[] = * this is NULL. */ static estream_t statusfp; +static void show_versions (estream_t fp); + + /* Print usage information and provide strings for help. */ static const char * @@ -594,6 +601,7 @@ main (int argc, char **argv) case aKill: case aCreateSocketDir: case aRemoveSocketDir: + case aShowVersions: cmd = pargs.r_opt; break; @@ -773,12 +781,16 @@ main (int argc, char **argv) es_putc ('\n', es_stderr); gpgconf_failure (GPG_ERR_USER_2); } + if (!opt.dry_run && gnupg_access (gnupg_homedir (), F_OK)) + gnupg_maybe_make_homedir (gnupg_homedir (), opt.quiet); gc_component_retrieve_options (-1); if (gc_process_gpgconf_conf (NULL, 1, 1, NULL)) gpgconf_failure (0); break; case aApplyProfile: + if (!opt.dry_run && gnupg_access (gnupg_homedir (), F_OK)) + gnupg_maybe_make_homedir (gnupg_homedir (), opt.quiet); gc_component_retrieve_options (-1); if (gc_apply_profile (fname)) gpgconf_failure (0); @@ -897,6 +909,13 @@ main (int argc, char **argv) } break; + case aShowVersions: + { + get_outfp (&outfp); + show_versions (outfp); + } + break; + } if (outfp != es_stdout) @@ -923,3 +942,155 @@ gpgconf_failure (gpg_error_t err) gpg_err_code (err) == GPG_ERR_USER_2? GPG_ERR_EINVAL : err); exit (gpg_err_code (err) == GPG_ERR_USER_2? 2 : 1); } + + + +/* Parse the revision part from the extended version blurb. */ +static const char * +get_revision_from_blurb (const char *blurb, int *r_len) +{ + const char *s = blurb? blurb : ""; + int n; + + for (; *s; s++) + if (*s == '\n' && s[1] == '(') + break; + if (s) + { + s += 2; + for (n=0; s[n] && s[n] != ' '; n++) + ; + } + else + { + s = "?"; + n = 1; + } + *r_len = n; + return s; +} + + +static void +show_version_gnupg (estream_t fp) +{ + es_fprintf (fp, "* GnuPG %s (%s)\n%s\n", + strusage (13), BUILD_REVISION, strusage (17)); +#ifdef HAVE_W32_SYSTEM + { + OSVERSIONINFO osvi = { sizeof (osvi) }; + + GetVersionEx (&osvi); + es_fprintf (fp, "Windows %lu.%lu build %lu%s%s%s\n", + (unsigned long)osvi.dwMajorVersion, + (unsigned long)osvi.dwMinorVersion, + (unsigned long)osvi.dwBuildNumber, + *osvi.szCSDVersion? " (":"", + osvi.szCSDVersion, + *osvi.szCSDVersion? ")":"" + ); + } +#endif /*HAVE_W32_SYSTEM*/ +} + + +static void +show_version_libgcrypt (estream_t fp) +{ + const char *s; + int n; + + s = get_revision_from_blurb (gcry_check_version ("\x01\x01"), &n); + es_fprintf (fp, "* Libgcrypt %s (%.*s)\n", + gcry_check_version (NULL), n, s); + s = gcry_get_config (0, NULL); + if (s) + es_fputs (s, fp); +} + + +static void +show_version_gpgrt (estream_t fp) +{ + const char *s; + int n; + + s = get_revision_from_blurb (gpg_error_check_version ("\x01\x01"), &n); + es_fprintf (fp, "* GpgRT %s (%.*s)\n", + gpg_error_check_version (NULL), n, s); +} + + +/* Printing version information for other libraries is problematic + * because we don't want to link gpgconf to all these libraries. The + * best solution is delegating this to dirmngr which uses libassuan, + * libksba, libnpth and ntbtls anyway. */ +static void +show_versions_via_dirmngr (estream_t fp) +{ + gpg_error_t err; + const char *pgmname; + const char *argv[2]; + estream_t outfp; + pid_t pid; + char *line = NULL; + size_t line_len = 0; + ssize_t length; + int exitcode; + + pgmname = gnupg_module_name (GNUPG_MODULE_NAME_DIRMNGR); + argv[0] = "--gpgconf-versions"; + argv[1] = NULL; + err = gnupg_spawn_process (pgmname, argv, NULL, NULL, 0, + NULL, &outfp, NULL, &pid); + if (err) + { + log_error ("error spawning %s: %s", pgmname, gpg_strerror (err)); + es_fprintf (fp, "[error: can't get further info]\n"); + return; + } + + while ((length = es_read_line (outfp, &line, &line_len, NULL)) > 0) + { + /* Strip newline and carriage return, if present. */ + while (length > 0 + && (line[length - 1] == '\n' || line[length - 1] == '\r')) + line[--length] = '\0'; + es_fprintf (fp, "%s\n", line); + } + if (length < 0 || es_ferror (outfp)) + { + err = gpg_error_from_syserror (); + log_error ("error reading from %s: %s\n", pgmname, gpg_strerror (err)); + } + if (es_fclose (outfp)) + { + err = gpg_error_from_syserror (); + log_error ("error closing output stream of %s: %s\n", + pgmname, gpg_strerror (err)); + } + + err = gnupg_wait_process (pgmname, pid, 1, &exitcode); + if (err) + { + log_error ("running %s failed (exitcode=%d): %s\n", + pgmname, exitcode, gpg_strerror (err)); + es_fprintf (fp, "[error: can't get further info]\n"); + } + gnupg_release_process (pid); + xfree (line); +} + + +/* Show all kind of version information. */ +static void +show_versions (estream_t fp) +{ + show_version_gnupg (fp); + es_fputc ('\n', fp); + show_version_libgcrypt (fp); + es_fputc ('\n', fp); + show_version_gpgrt (fp); + es_fputc ('\n', fp); + show_versions_via_dirmngr (fp); +} diff --git a/tools/gpgconf.w32-manifest.in b/tools/gpgconf.w32-manifest.in new file mode 100644 index 0000000..d7a1b01 --- /dev/null +++ b/tools/gpgconf.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (Config tool)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpgconf" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/tools/gpgsplit.c b/tools/gpgsplit.c index 674be62..e844008 100644 --- a/tools/gpgsplit.c +++ b/tools/gpgsplit.c @@ -552,7 +552,7 @@ write_part (FILE *fpin, unsigned long pktlen, { if (opt_verbose) log_info ("writing '%s'\n", outname); - fpout = fopen (outname, "wb"); + fpout = gnupg_fopen (outname, "wb"); if (!fpout) { log_error ("error creating '%s': %s\n", outname, strerror(errno)); @@ -873,7 +873,7 @@ split_packets (const char *fname) fp = stdin; fname = "-"; } - else if ( !(fp = fopen (fname,"rb")) ) + else if ( !(fp = gnupg_fopen (fname,"rb")) ) { log_error ("can't open '%s': %s\n", fname, strerror (errno)); return; diff --git a/tools/gpgtar-create.c b/tools/gpgtar-create.c index 8a54c70..c196b96 100644 --- a/tools/gpgtar-create.c +++ b/tools/gpgtar-create.c @@ -42,7 +42,7 @@ #include "gpgtar.h" #ifndef HAVE_LSTAT -#define lstat(a,b) stat ((a), (b)) +#define lstat(a,b) gnupg_stat ((a), (b)) #endif @@ -301,6 +301,8 @@ scan_directory (const char *dname, scanctrl_t scanctrl) gpg_error_t err = 0; #ifdef HAVE_W32_SYSTEM + /* Note that we introduced gnupg_opendir only after we had deployed + * this code and thus we don't change it for now. */ WIN32_FIND_DATAW fi; HANDLE hd = INVALID_HANDLE_VALUE; char *p; diff --git a/tools/gpgtar-w32info.rc b/tools/gpgtar-w32info.rc new file mode 100644 index 0000000..211528b --- /dev/null +++ b/tools/gpgtar-w32info.rc @@ -0,0 +1,52 @@ +/* gpgtar-w32info.rc -*- c -*- + * Copyright (C) 2020 g10 Code GmbH + * + * This file is free software; as a special exception the author gives + * unlimited permission to copy and/or distribute it, with or without + * modifications, as long as this notice is preserved. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include "afxres.h" +#include "../common/w32info-rc.h" + +1 ICON "../common/gnupg.ico" + +1 VERSIONINFO + FILEVERSION W32INFO_VI_FILEVERSION + PRODUCTVERSION W32INFO_VI_PRODUCTVERSION + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/ +#else + FILEFLAGS 0x00L +#endif + FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */ + FILETYPE 0x1L /* VFT_APP (0x1) */ + FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" /* US English (0409), Unicode (04b0) */ + BEGIN + VALUE "FileDescription", L"GnuPG\x2019s archive tool\0" + VALUE "InternalName", "gpgtar\0" + VALUE "OriginalFilename", "gpgtar.exe\0" + VALUE "ProductName", W32INFO_PRODUCTNAME + VALUE "ProductVersion", W32INFO_PRODUCTVERSION + VALUE "CompanyName", W32INFO_COMPANYNAME + VALUE "FileVersion", W32INFO_FILEVERSION + VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT + VALUE "Comments", W32INFO_COMMENTS + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 0x4b0 + END + END + +1 RT_MANIFEST "gpgtar.w32-manifest" diff --git a/tools/gpgtar.w32-manifest.in b/tools/gpgtar.w32-manifest.in new file mode 100644 index 0000000..62d5937 --- /dev/null +++ b/tools/gpgtar.w32-manifest.in @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> +<description>GNU Privacy Guard (Archive tool)</description> +<assemblyIdentity + type="win32" + name="GnuPG.gpgtar" + version="@BUILD_VERSION@" + /> +<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 --> + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 --> + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 --> + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 --> + <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista --> + </application> +</compatibility> +</assembly> diff --git a/tools/symcryptrun.c b/tools/symcryptrun.c index c5780fd..d1f953c 100644 --- a/tools/symcryptrun.c +++ b/tools/symcryptrun.c @@ -363,7 +363,7 @@ confucius_copy_file (char *infile, char *outfile, int plain) } else { - in = fopen (infile, "rb"); + in = gnupg_fopen (infile, "rb"); if (!in) { log_error (_("could not open %s for writing: %s\n"), @@ -380,7 +380,7 @@ confucius_copy_file (char *infile, char *outfile, int plain) } else { - out = fopen (outfile, "wb"); + out = gnupg_fopen (outfile, "wb"); if (!out) { log_error (_("could not open %s for writing: %s\n"), @@ -936,7 +936,7 @@ main (int argc, char **argv) if (configname) { configlineno = 0; - configfp = fopen (configname, "r"); + configfp = gnupg_fopen (configname, "r"); if (!configfp) { if (!default_config) diff --git a/tools/wks-util.c b/tools/wks-util.c index 52c89ba..085301f 100644 --- a/tools/wks-util.c +++ b/tools/wks-util.c @@ -843,13 +843,13 @@ wks_compute_hu_fname (char **r_fname, const char *addrspec) /* Try to create missing directories below opt.directory. */ fname = make_filename_try (opt.directory, domain, NULL); - if (fname && stat (fname, &sb) + if (fname && gnupg_stat (fname, &sb) && gpg_err_code_from_syserror () == GPG_ERR_ENOENT) if (!gnupg_mkdir (fname, "-rwxr--r--") && opt.verbose) log_info ("directory '%s' created\n", fname); xfree (fname); fname = make_filename_try (opt.directory, domain, "hu", NULL); - if (fname && stat (fname, &sb) + if (fname && gnupg_stat (fname, &sb) && gpg_err_code_from_syserror () == GPG_ERR_ENOENT) if (!gnupg_mkdir (fname, "-rwxr--r--") && opt.verbose) log_info ("directory '%s' created\n", fname); @@ -873,6 +873,7 @@ wks_compute_hu_fname (char **r_fname, const char *addrspec) static gpg_error_t ensure_policy_file (const char *addrspec) { + gpg_err_code_t ec; gpg_error_t err; const char *domain; char *fname; @@ -890,12 +891,12 @@ ensure_policy_file (const char *addrspec) goto leave; /* First a quick check whether it already exists. */ - if (!access (fname, F_OK)) + if (!(ec = gnupg_access (fname, F_OK))) { err = 0; /* File already exists. */ goto leave; } - err = gpg_error_from_syserror (); + err = gpg_error (ec); if (gpg_err_code (err) == GPG_ERR_ENOENT) err = 0; else @@ -911,7 +912,7 @@ ensure_policy_file (const char *addrspec) { err = gpg_error_from_syserror (); if (gpg_err_code (err) == GPG_ERR_EEXIST) - err = 0; /* Was created between the access() and fopen(). */ + err = 0; /* Was created between the gnupg_access() and es_fopen(). */ else log_error ("domain %s: error creating '%s': %s\n", domain, fname, gpg_strerror (err)); |