diff --git a/agent/cache.c b/agent/cache.c new file mode 100644 index 000000000..b6ab55085 --- /dev/null +++ b/agent/cache.c @@ -0,0 +1,314 @@ +/* cache.c - keep a cache of passphrases + * Copyright (C) 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include + +#include +#include +#include +#include +#include + +#include "agent.h" + +struct secret_data_s { + int totallen; /* this includes the padding */ + int datalen; /* actual data length */ + char data[1]; +}; + +typedef struct cache_item_s *ITEM; +struct cache_item_s { + ITEM next; + time_t created; + time_t accessed; + int ttl; /* max. lifetime given in seonds */ + int lockcount; + struct secret_data_s *pw; + char key[1]; +}; + + +static ITEM thecache; + + +static void +release_data (struct secret_data_s *data) +{ + xfree (data); +} + +static struct secret_data_s * +new_data (const void *data, size_t length) +{ + struct secret_data_s *d; + int total; + + /* we pad the data to 32 bytes so that it get more complicated + finding something out by watching allocation patterns. This is + usally not possible but we better assume nothing about our + secure storage provider*/ + total = length + 32 - (length % 32); + + d = gcry_malloc_secure (sizeof *d + total - 1); + if (d) + { + d->totallen = total; + d->datalen = length; + memcpy (d->data, data, length); + } + return d; +} + + +/* check whether there are items to expire */ +static void +housekeeping (void) +{ + ITEM r, rprev; + time_t current = gnupg_get_time (); + + /* first expire the actual data */ + for (r=thecache; r; r = r->next) + { + if (!r->lockcount && r->pw && r->accessed + r->ttl < current) + { + if (DBG_CACHE) + log_debug (" expired `%s' (%ds after last access)\n", + r->key, r->ttl); + release_data (r->pw); + r->pw = NULL; + r->accessed = current; + } + } + + /* second, make sure that we also remove them based on the created stamp so + that the user has to enter it from time to time. We do this every hour */ + for (r=thecache; r; r = r->next) + { + if (!r->lockcount && r->pw && r->created + 60*60 < current) + { + if (DBG_CACHE) + log_debug (" expired `%s' (1h after creation)\n", r->key); + release_data (r->pw); + r->pw = NULL; + r->accessed = current; + } + } + + /* third, make sure that we don't have too many items in the list. + Expire old and unused entries after 30 minutes */ + for (rprev=NULL, r=thecache; r; ) + { + if (!r->pw && r->accessed + 60*30 < current) + { + if (r->lockcount) + { + log_error ("can't remove unused cache entry `%s' due to" + " lockcount=%d\n", + r->key, r->lockcount); + r->accessed += 60*10; /* next error message in 10 minutes */ + rprev = r; + r = r->next; + } + else + { + ITEM r2 = r->next; + if (DBG_CACHE) + log_debug (" removed `%s' (slot not used for 30m)\n", r->key); + xfree (r); + if (!rprev) + thecache = r2; + else + rprev->next = r2; + r = r2; + } + } + else + { + rprev = r; + r = r->next; + } + } +} + + +void +agent_flush_cache (void) +{ + ITEM r; + + if (DBG_CACHE) + log_debug ("agent_flush_cache\n"); + + for (r=thecache; r; r = r->next) + { + if (!r->lockcount && r->pw) + { + if (DBG_CACHE) + log_debug (" flushing `%s'\n", r->key); + release_data (r->pw); + r->pw = NULL; + r->accessed = 0; + } + else if (r->lockcount && r->pw) + { + if (DBG_CACHE) + log_debug (" marked `%s' for flushing\n", r->key); + r->accessed = 0; + r->ttl = 0; + } + } +} + + + +/* Store DATA of length DATALEN in the cache under KEY and mark it + with a maximum lifetime of TTL seconds. If there is already data + under this key, it will be replaced. Using a DATA of NULL deletes + the entry */ +int +agent_put_cache (const char *key, const char *data, int ttl) +{ + ITEM r; + + if (DBG_CACHE) + log_debug ("agent_put_cache `%s'\n", key); + housekeeping (); + + if (ttl < 1) + ttl = opt.def_cache_ttl; + if (!ttl) + return 0; + + for (r=thecache; r; r = r->next) + { + if (!r->lockcount && !strcmp (r->key, key)) + break; + } + if (r) + { /* replace */ + if (r->pw) + { + release_data (r->pw); + r->pw = NULL; + } + if (data) + { + r->created = r->accessed = gnupg_get_time (); + r->ttl = ttl; + r->pw = new_data (data, strlen (data)+1); + if (!r->pw) + log_error ("out of core while allocating new cache item\n"); + } + } + else if (data) + { /* simply insert */ + r = xtrycalloc (1, sizeof *r + strlen (key)); + if (!r) + log_error ("out of core while allocating new cache control\n"); + else + { + strcpy (r->key, key); + r->created = r->accessed = gnupg_get_time (); + r->ttl = ttl; + r->pw = new_data (data, strlen (data)+1); + if (!r->pw) + { + log_error ("out of core while allocating new cache item\n"); + xfree (r); + } + else + { + r->next = thecache; + thecache = r; + } + } + } + return 0; +} + + +/* Try to find an item in the cache */ +const char * +agent_get_cache (const char *key, void **cache_id) +{ + ITEM r; + + if (DBG_CACHE) + log_debug ("agent_get_cache `%s'...\n", key); + housekeeping (); + + /* first try to find one with no locks - this is an updated cache + entry: We might have entries with a lockcount and without a + lockcount. */ + for (r=thecache; r; r = r->next) + { + if (!r->lockcount && r->pw && !strcmp (r->key, key)) + { + /* put_cache does only put strings into the cache, so we + don't need the lengths */ + r->accessed = gnupg_get_time (); + if (DBG_CACHE) + log_debug ("... hit\n"); + r->lockcount++; + *cache_id = r; + return r->pw->data; + } + } + /* again, but this time get even one with a lockcount set */ + for (r=thecache; r; r = r->next) + { + if (r->pw && !strcmp (r->key, key)) + { + r->accessed = gnupg_get_time (); + if (DBG_CACHE) + log_debug ("... hit (locked)\n"); + r->lockcount++; + *cache_id = r; + return r->pw->data; + } + } + if (DBG_CACHE) + log_debug ("... miss\n"); + + *cache_id = NULL; + return NULL; +} + + +void +agent_unlock_cache_entry (void **cache_id) +{ + ITEM r; + + for (r=thecache; r; r = r->next) + { + if (r == *cache_id) + { + if (!r->lockcount) + log_error ("trying to unlock non-locked cache entry `%s'\n", + r->key); + else + r->lockcount--; + return; + } + } +} diff --git a/common/isascii.c b/common/isascii.c new file mode 100644 index 000000000..565c71664 --- /dev/null +++ b/common/isascii.c @@ -0,0 +1,29 @@ +/* isascii.c - Replacement for isascii. + * Copyright (C) 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +int +isascii (int c) +{ + return (((c) & ~0x7f) == 0); +} diff --git a/common/putc_unlocked.c b/common/putc_unlocked.c new file mode 100644 index 000000000..02c646130 --- /dev/null +++ b/common/putc_unlocked.c @@ -0,0 +1,31 @@ +/* putc_unlocked.c - Replacement for putc_unlocked. + * Copyright (C) 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +int +putc_unlocked (int c, FILE *stream) +{ + return putc (c, stream); +} diff --git a/common/signal.c b/common/signal.c new file mode 100644 index 000000000..dc026c10f --- /dev/null +++ b/common/signal.c @@ -0,0 +1,226 @@ +/* signal.c - signal handling + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util.h" + + +static volatile int caught_fatal_sig; +static volatile int caught_sigusr1; +static void (*cleanup_fnc)(void); + + +static void +init_one_signal (int sig, RETSIGTYPE (*handler)(int), int check_ign ) +{ +#ifndef HAVE_DOSISH_SYSTEM +# ifdef HAVE_SIGACTION + struct sigaction oact, nact; + + if (check_ign) + { + /* we don't want to change an IGN handler */ + sigaction (sig, NULL, &oact ); + if (oact.sa_handler == SIG_IGN ) + return; + } + + nact.sa_handler = handler; + sigemptyset (&nact.sa_mask); + nact.sa_flags = 0; + sigaction ( sig, &nact, NULL); +# else + RETSIGTYPE (*ohandler)(int); + + ohandler = signal (sig, handler); + if (check_ign && ohandler == SIG_IGN) + { + /* Change it back if it was already set to IGN */ + signal (sig, SIG_IGN); + } +# endif +#endif /*!HAVE_DOSISH_SYSTEM*/ +} + +static const char * +get_signal_name( int signum ) +{ +#if defined(SYS_SIGLIST_DECLARED) && defined(NSIG) + return (signum >= 0 && signum < NSIG) ? sys_siglist[signum] : "?"; +#else + return "some signal"; +#endif +} + +static RETSIGTYPE +got_fatal_signal (int sig) +{ + const char *s; + + if (caught_fatal_sig) + raise (sig); + caught_fatal_sig = 1; + + if (cleanup_fnc) + cleanup_fnc (); + /* better don't translate these messages */ + write (2, "\n", 1 ); + s = log_get_prefix (NULL); + if (s) + write(2, s, strlen (s)); + write (2, ": ", 2 ); + s = get_signal_name(sig); + write (2, s, strlen(s) ); + write (2, " caught ... exiting\n", 20); + + /* reset action to default action and raise signal again */ + init_one_signal (sig, SIG_DFL, 0); + /* fixme: remove_lockfiles ();*/ +#ifdef __riscos__ + close_fds (); +#endif /* __riscos__ */ + raise( sig ); +} + + +static RETSIGTYPE +got_usr_signal (int sig) +{ + caught_sigusr1 = 1; +} + + +void +gnupg_init_signals (int mode, void (*fast_cleanup)(void)) +{ + assert (!mode); + + cleanup_fnc = fast_cleanup; +#ifndef HAVE_DOSISH_SYSTEM + init_one_signal (SIGINT, got_fatal_signal, 1 ); + init_one_signal (SIGHUP, got_fatal_signal, 1 ); + init_one_signal (SIGTERM, got_fatal_signal, 1 ); + init_one_signal (SIGQUIT, got_fatal_signal, 1 ); + init_one_signal (SIGSEGV, got_fatal_signal, 1 ); + init_one_signal (SIGUSR1, got_usr_signal, 0 ); + init_one_signal (SIGPIPE, SIG_IGN, 0 ); +#endif +} + +void +gnupg_pause_on_sigusr (int which) +{ +#ifndef HAVE_DOSISH_SYSTEM +# ifdef HAVE_SIGPROCMASK + sigset_t mask, oldmask; + + assert (which == 1); + sigemptyset( &mask ); + sigaddset( &mask, SIGUSR1 ); + + sigprocmask( SIG_BLOCK, &mask, &oldmask ); + while (!caught_sigusr1) + sigsuspend (&oldmask); + caught_sigusr1 = 0; + sigprocmask (SIG_UNBLOCK, &mask, NULL); +# else + assert (which == 1); + sighold (SIGUSR1); + while (!caught_sigusr1) + sigpause(SIGUSR1); + caught_sigusr1 = 0; + sigrelease(SIGUSR1); +# endif /*!HAVE_SIGPROCMASK*/ +#endif +} + + +static void +do_block( int block ) +{ +#ifndef HAVE_DOSISH_SYSTEM + static int is_blocked; +#ifdef HAVE_SIGPROCMASK + static sigset_t oldmask; + + if (block) + { + sigset_t newmask; + + if (is_blocked) + log_bug ("signals are already blocked\n"); + sigfillset( &newmask ); + sigprocmask( SIG_BLOCK, &newmask, &oldmask ); + is_blocked = 1; + } + else + { + if (!is_blocked) + log_bug("signals are not blocked\n"); + sigprocmask (SIG_SETMASK, &oldmask, NULL); + is_blocked = 0; + } +#else /*!HAVE_SIGPROCMASK*/ + static void (*disposition[MAXSIG])(); + int sig; + + if (block) + { + if (is_blocked) + log_bug("signals are already blocked\n"); + for (sig=1; sig < MAXSIG; sig++) + { + disposition[sig] = sigset (sig, SIG_HOLD); + } + is_blocked = 1; + } + else + { + if (!is_blocked) + log_bug ("signals are not blocked\n"); + for (sig=1; sig < MAXSIG; sig++) { + sigset (sig, disposition[sig]); + } + is_blocked = 0; + } +#endif /*!HAVE_SIGPROCMASK*/ +#endif /*HAVE_DOSISH_SYSTEM*/ +} + + +void +gnupg_block_all_signals () +{ + do_block(1); +} + +void +gnupg_unblock_all_signals () +{ + do_block(0); +} diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 000000000..628793a90 --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,593 @@ +2003-01-06 David Shaw + + * DETAILS: Document disabled flag in capabilities field. + +2002-12-27 David Shaw + + * gpg.sgml: Clarify --no-permission-warning to note that the + permission warnings are not intended to be the be-all and end-all + in security checks. Add note to --group that when used on the + command line, it may be necessary to quote the argument so it is + not treated as multiple arguments. Noted by Stefan Bellon. + +2002-12-23 Werner Koch + + * samplekeys.asc: Updated. + +2002-12-10 David Shaw + + * gpg.sgml: Clarify include-revoked and include-disabled so they + match what the program actually does. Noted by Dick Gevers. + + * gpg.sgml: Document %-expandos for policy URLs and notations. + + * gpg.sgml: Document --pgp8. Clarify that --pgp6 and --pgp7 + disable --throw-keyid. + +2002-12-05 Werner Koch + + * gpg.sgml: Document --no-mangle-dos-filenames. + +2002-12-01 David Shaw + + * gpg.sgml: Point out that if the user absolutely must, it's + better to use --pgpX than forcing an algorithm manually. Better + still not to use anything, of course. + +2002-11-25 David Shaw + + * gpg.sgml: Document --primary-keyring. Clarify + --s2k-cipher-algo, --s2k-digest-algo, + --personal-cipher-preferences, --personal-digest-preferences, and + --personal-compress-preferences. + + * gpg.sgml: Document --sig-policy-url, --cert-policy-url, + --sig-notation, --cert-notation. Clarify --show-notation and + --show-policy-url that policy URLs and notations can be used in + data signatures as well. Add note about '@' being a required + character in notation names. + +2002-11-21 David Shaw + + * gpg.sgml: Add an interoperability section. + +2002-11-17 David Shaw + + * gpg.sgml: Correct defaults for --s2k-mode and --s2k-digest-mode. + Noted by Haakon Riiser. + +2002-11-14 David Shaw + + * gpg.sgml: --compress-algo now allows algorithm names. + +2002-11-13 David Shaw + + * gpg.sgml: Document --trust-model. + +2002-11-04 David Shaw + + * KEYSERVER: New. Documents the --with-colons format for + keyserver listings. + + * DETAILS: Clarify meaning of 'u'. Noted by Timo. + +2002-11-03 David Shaw + + * gpg.sgml: Document "tsign", clarify "setpref", clarify + --recipient, document --hidden-recipient, document + --hidden-encrypt-to, clarify --no-encrypt-to, clarify + --throw-keyid, document --no-throw-keyid. + +2002-10-25 Werner Koch + + * README.W32: Add blurb on how to create a ZIP file, changed + requirement for mingw32 to 0.3.2. + +2002-10-24 David Shaw + + * gpg.sgml: Document --refresh-keys. + +2002-10-19 David Shaw + + * gpg.sgml: Clarify --force-mdc, and document --disable-mdc. + +2002-10-12 Werner Koch + + * DETAILS (KEY_CREATED): Enhanced by fingerprint. + +2002-10-03 David Shaw + + * gpg.sgml: Note that '#' means secret-key-unavailable, and that + keyserver schemes are case-insensitive. + +2002-09-30 David Shaw + + * gpg.sgml: Note that --pgp2 disables --textmode when encrypting. + +2002-09-20 David Shaw + + * gpg.sgml: Some minor language cleanup. + +2002-09-20 Werner Koch + + * DETAILS: s/XORed/ORed/. + +2002-09-15 Werner Koch + + * gpg.sgml: Add rebuild-keydb-caches. + +2002-09-12 David Shaw + + * DETAILS: Fix batch key generation example. + +2002-09-11 Werner Koch + + * Makefile.am (EXTRA_DIST): Include gnupg-32.reg + +2002-09-02 Werner Koch + + * gpg.sgml: Updated the charset option. + + * DETAILS: Added status IMPORT_OK. + + * gnupg.7: New mini man page. + +2002-08-30 David Shaw + + * gpg.sgml: Document keyserver-option include-subkeys. Note that + honor-http-proxy is a keyserver-option now. + + * DETAILS: Add "Key not trusted" to INV_RECP status code. + +2002-08-23 Werner Koch + + * faq.raw: Updated. New Maintainer is David D. Scribner. + +2002-08-22 David Shaw + + * gpg.sgml: Clarify meaning of keyserver option include-revoked. + +2002-08-21 Werner Koch + + * DETAILS: Added IMPORT_PROBLEM. + +2002-08-20 David Shaw + + * DETAILS: Clarify that trust letters 'q' and '-' can be treated + identically. + + * gpg.sgml: Document --ignore-mdc-error. + +2002-08-06 David Shaw + + * gpg.sgml: Clarify that only long-form options can go in the + config file. + +2002-08-06 Werner Koch + + * gpg.sgml: Fixed doc regarding the name change of the option + file. + +2002-07-30 David Shaw + + * gpg.sgml: Clarify --edit/addrevoker (sensitive), and + --keyserver-options (--import/export-options may be used as well). + Document --import-options and --export-options with their various + options. --show-photos now works during signature verification as + well. Document --exec-path. Note in --simple-sk-checksum that + the passphrase must be changed for this to take effect. Note that + --pgp7 does not disable MDC. Document --no-mdc-warning. + +2002-07-25 Werner Koch + + * gpg.sgml: Document new --delete behaviour. + +2002-07-25 David Shaw + + * gpg.sgml: Clarify the differences between "pref" and "showpref". + Note in "setpref" that a list of available algorithms can be + printed with "gpg -v --version". Note in "updpref" that we don't + select keys via attribute uids, so preferences there will be + ignored. + +2002-07-01 David Shaw + + * gpg.sgml: Clarify "group". + +2002-07-01 Werner Koch + + * Makefile.am: Due to problems with VPATH builds we don't try to + build the texi vesions of the manual pages anymore automatically. + +2002-06-30 Werner Koch + + * README.W32: Adjusted some descriptions. Fixed the regsitry + entry descriptions. + +2002-06-21 David Shaw + + * DETAILS: Document "uat". + + * gpg.sgml: Document + --personal-{compress|digest|compress}-preferences, --group, and + add comments to --expert. + +2002-06-17 Werner Koch + + * gpg.sgml: Grammar fix. + +2002-06-03 David Shaw + + * DETAILS: Details of ATTRIBUTE. + + * gpg.sgml: Document --attribute-fd + +2002-06-03 Timo Schulz + + * DETAILS: Add ATTRIBUTE. + +2002-05-31 David Shaw + + * gpg.sgml: Add "edit/addrevoker". Document --desig-revoke. Note + that -z and --compress are the same option. Note that + --digest-algo can no longer violate OpenPGP with a non-160 bit + hash with DSA. Document --cert-digest-algo with suitable warnings + not to use it. Note the default s2k-cipher-algo is now CAST5. + Note that --force-v3-sigs overrides --ask-sig-expire. Revise + --expert documentation, as it is now definitely legal to have more + than one photo ID on a key. --preference-list is now + --default-preference-list with the new meaning. Document + --personal-preference-list. + + * DETAILS: Document "Revoker" for batch key generation. + +2002-05-22 Werner Koch + + * gpg.sgml: sgml syntax fix. + +2002-05-12 Werner Koch + + * gpg.sgml: Fixed URL in the description section. + + * faq.raw: Minor typo fixes noted by kromJx@myrealbox.com. + +2002-05-11 Werner Koch + + * gpg.sgml: Typo fix. + +2002-05-07 David Shaw + + * gpg.sgml: Add entries for --sk-comments, --no-sk-comments, + --pgp7, and --no-pgp7. Fix --pgp2 and --pgp6: the proper name is + --escape-from-lines and not --escape-from. + +2002-04-30 Timo Schulz + + * gpg.sgml: Add an entry for --encrypt-files and --decrypt-files. + +2002-04-29 David Shaw + + * gpg.sgml: Fix minor error in --pgp6 documentation: it does not + imply --digest-algo MD5 + +2002-04-29 Werner Koch + + * samplekeys.asc: Added gnupg distribution key 57548DCD. + + * faq.raw: Inserted Douglas Calvert as new maintainer. Acknowledge + Nils. Add entry about trust packet parsing problems. + +2002-04-24 David Shaw + + * gpg.sgml: Add some documentation for + --edit/{addphoto|showphoto|nrsign|nrlsign}, and the difference + between %t and %T in photo viewer command lines. + +2002-04-23 Stefan Bellon + + * gpg.sgml: Moved options from section "COMMANDS" to + section "OPTIONS". + +2002-04-20 David Shaw + + * samplekeys.asc: Added 0x5B0358A2 + +2002-04-19 David Shaw + + * gpg.sgml: Add "%t" flag for photo IDs, a note about primary + having different meanings for photo and regular IDs, rename + --default-check-level to --default-cert-check-level, add + --auto-check-trustdb, and --pgp6. + + * DETAILS: Add EXPSIG, EXPKEYSIG, and KEYEXPIRED. Add notes to + SIGEXPIRED (deprecated), and VALIDSIG (added expiration date). + Add "Preferences" command to unattended key generation + instructions. Also fixed a few typos. + + * samplekeys.asc: new (added to EXTRA_DIST in Makefile.am as well) + +2002-01-31 Marcus Brinkmann + + * DETAILS: Fix a spelling error, correct IMPORTED_RES to IMPORT_RES, + correct INV_RECP (the second occurence) to NO_RECP. + +2002-04-03 David Shaw + + * gpg.sgml: auto-key-retrieve is a keyserver-option (noted by + Roger Sondermann). + +2002-03-27 David Shaw + + * gpg.sgml: --pgp2 also means --disable-mdc, --no-ask-sig-expire, + and --no-ask-cert-expire. It does not mean --no-force-v3-sigs + (noted by Timo). + +2002-03-27 David Shaw + + * gpg.sgml: Add a few notes about --pgp2 meaning MIT PGP 2.6.2, + and keyserver details about HKP and NAI HKP. + +2002-03-18 David Shaw + + * gpg.sgml: Change meaning of --allow-non-selfsigned-uid to match + change in code, and add --no-allow-non-selfsigned-uid. + +2002-03-13 Werner Koch + + * faq.raw: Due to a lack of time Nils can't serve anymore as a + maintainer. Removed his address and setup a generic address. + +2002-03-06 Werner Koch + + * gpg.sgml: Add an entry for --export-ownertrust. Suggested by + Bernhard Reiter. + +2002-01-26 Timo Schulz + + * gnupg-w32.reg: New. Registry file for W32 in registry format. + +2002-01-26 Werner Koch + + * gpg.sgml: A few words about --gpg-agent-info and GPG_AGENT_INFO. + +2002-01-25 Timo Schulz + + * README.W32: Modify the filename because now the .exe extension + is automatically added to the binary. + +2002-01-14 Werner Koch + + * gpg.sgml: Talk about PGP 5 and higher. + +2002-01-11 David Shaw + + * gpg.sgml: Added documentation for --{no-}ask-cert-expire, + --{no-}ask-sig-expire, and revise --expert (it doesn't switch on + the expiration prompt anymore) and --default-check-level (to be + clearer as to what makes a good key check before signing). + +2002-01-07 Werner Koch + + * DETAILS: Removed the comment that unattended key generation is + experimental. It is now a standard feature. + +2001-12-22 David Shaw + + * gpg.sgml: Fixed a few typos. + + * gpg.sgml: Added documentation for --show-photos, + --no-show-photos, --photo-viewer, --nrsign-key, + --default-check-level, --search-keys, --keyserver-options, + --show-notation, --no-show-notation, --show-policy-url, + --no-show-policy-url, --for-your-eyes-only, + --no-for-your-eyes-only, --pgp2, --no-pgp2, + --no-permission-warning, --expert, --no-expert. + +2001-10-31 Werner Koch + + * gpg.sgml: Add a remark on how to get the long key ID. Suggested + by Sebastian Klemke. + +2001-10-23 Werner Koch + + * gpg.sgml: Add missing tag. + +2001-09-28 Werner Koch + + * gpg.sgml: Add a note on option parsing. + +2001-09-24 Werner Koch + + * gpg.sgml: Described --{update,check}-trustdb. + +2001-09-03 Werner Koch + + * gpg.sgml, gpgv.sgml: Removed GDBM stuff. + +2001-08-29 Werner Koch + + * faq.raw: Described how to delete a secret key w/o a public key + and changed the entry on updating the preferences. + +2001-08-08 Werner Koch + + * gpg.sgml: Documented --print-mds and marked the --print-md * as + deprecated because it does not work in the W32 version. Suggested + by John Kane. + (WARNINGS): Typo fix. + (--with-colons): Clarified that the output is in UTF-8. + +2001-08-01 Werner Koch + + * gpg.sgml: Added --ignore-valid-from + +2001-04-20 Werner Koch + + * faq.raw (Maintained-by): Removed note that load-extension is not + available under Windoze. + + * gpg.sgml: Add new --charset UTF-8. + +2001-04-19 Werner Koch + + * faq.raw: Add a note about dates displayed as ????-??-??. + +2001-04-17 Werner Koch + + * Makefile.am (%.texi): Add rules to create .texi from .sgml. + However we can't automate this because automake does not like + .texi files as BUILT_SOURCES. + (%.dvi,%.ps): Removed these rules, because they are not needed + and get in the way of automake's dvi target + + * HACKING: Changed CVS description. + +2001-04-06 Werner Koch + + * gpg.sgml: Small typo fixes by Florian Weimer. + +2001-03-27 Werner Koch + + * gpg.sgml: Add --no-sig-cache and --no-sig-create-check. + +2001-03-23 Werner Koch + + * DETAILS: New status UNEXPECTED. + +2001-03-13 Werner Koch + + * gpg.sgml: Described --fixed-list-mode. + +2001-03-06 Werner Koch + + * gpgv.sgml: Changed some gpg to gpgv. Thanks to John A. Murdie. + +2001-03-03 Werner Koch + + * gpg.sgml: Tell something about the 0x12345678! key ID syntax. + +2001-01-18 Werner Koch + + * README.W32: Changed building instructions for MinGW32/CPD 0.3 + +2001-01-09 Werner Koch + + * DETAILS: Fixed docs for NEED_PASSPHRASE and added USERID_HINT. + +2000-11-30 Werner Koch + + * gpg.sgml: Fixed the description of --verify. Add a short note + the warnings sections. + +2000-10-19 Werner Koch + + * gpg.sgml: Fixed doc for --allow-non-selfsigned-uid. + Add entry for --ignore-crc-error. + +2000-10-18 Werner Koch + + * OpenPGP: Dropped the paragraph that RSA is not implemented. + +2000-10-14 Werner Koch + + * faq.raw: Add an answer to the problem of multiple signatures. + +Wed Oct 4 15:50:18 CEST 2000 Werner Koch + + * gpgv.sgml: New. + * Makefile.am: build it. + +Thu Sep 14 14:20:38 CEST 2000 Werner Koch + + * faq.raw: New. + * Makefile.am: Support to build FAQs + +Wed Jul 12 13:32:06 CEST 2000 Werner Koch + + * gpg.sgml: Add a note about the availability of the GPH. + +2000-07-03 13:59:24 Werner Koch (wk@habibti.openit.de) + + * DETAILS, FAQ: Typo fixes by Yosiaki IIDA. + +2000-05-12 10:57:21 Werner Koch (wk@habibti.openit.de) + + * gpg.sgml: Documented --no-tty. + +2000-03-09 15:01:51 Werner Koch (wk@habibti.openit.de) + + * DETAILS: Ad a short blurb about unattended key generation. + +Wed Feb 9 15:33:44 CET 2000 Werner Koch + + * gpg.sgml: Describe --ignore-time-conflict. + + * gpg.sgml: Fixed a few typos. Thanks to Holger Trapp. + +Wed Jan 5 11:51:17 CET 2000 Werner Koch + + * FAQ: Enhanced answer for the 3des-s2k bug. + +Sat Dec 4 12:30:28 CET 1999 Werner Koch + + * gpg.sgml: Add section about the user ID + +Mon Nov 22 11:14:53 CET 1999 Werner Koch + + * gph: Removed the directory from the dist becuase it will + go into it's own package. + +Thu Sep 23 09:52:58 CEST 1999 Werner Koch + + * README.W32: New. + +Mon Sep 6 19:59:08 CEST 1999 Werner Koch + + + * Makefile.am (SUBDIRS): New subdir gph for the manual. + +Thu Jul 22 20:03:03 CEST 1999 Werner Koch + + + * gpg.sgml (--always-trust): Added. + +Wed Jul 14 19:42:08 CEST 1999 Werner Koch + + + * Makefile.am: Create a dummy man page if docbook-to-man is missing. + +Wed Jun 16 20:16:21 CEST 1999 Werner Koch + + + * gpg1.pod: Removed. + * gpg.sgml: New. Replaces the pod file + * Makefile.am: Add rule to make a man file from sgml + +Tue Jun 15 12:21:08 CEST 1999 Werner Koch + + + * Makefile.in.in: Use DESTDIR. + +Mon May 31 19:41:10 CEST 1999 Werner Koch + + * gpg.1pod: Enhanced the Bugs section (Michael). + +Wed Feb 10 17:15:39 CET 1999 Werner Koch + + + * gpg.1pod: Spelling and grammar corrections (John A. Martin) + * FAQ: Ditto. + * DETAILS: Ditto. + + + Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file 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. + + diff --git a/g10/delkey.c b/g10/delkey.c new file mode 100644 index 000000000..35c903cc0 --- /dev/null +++ b/g10/delkey.c @@ -0,0 +1,209 @@ +/* delkey.c - delete keys + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "options.h" +#include "packet.h" +#include "errors.h" +#include "iobuf.h" +#include "keydb.h" +#include "memory.h" +#include "util.h" +#include "main.h" +#include "trustdb.h" +#include "filter.h" +#include "ttyio.h" +#include "status.h" +#include "i18n.h" + + +/**************** + * Delete a public or secret key from a keyring. + * r_sec_avail will be set if a secret key is available and the public + * key can't be deleted for that reason. + */ +static int +do_delete_key( const char *username, int secret, int *r_sec_avail ) +{ + int rc = 0; + KBNODE keyblock = NULL; + KBNODE node; + KEYDB_HANDLE hd = keydb_new (secret); + PKT_public_key *pk = NULL; + PKT_secret_key *sk = NULL; + u32 keyid[2]; + int okay=0; + int yes; + KEYDB_SEARCH_DESC desc; + int exactmatch; + + *r_sec_avail = 0; + + /* search the userid */ + classify_user_id (username, &desc); + exactmatch = (desc.mode == KEYDB_SEARCH_MODE_FPR + || desc.mode == KEYDB_SEARCH_MODE_FPR16 + || desc.mode == KEYDB_SEARCH_MODE_FPR20); + rc = desc.mode? keydb_search (hd, &desc, 1):G10ERR_INV_USER_ID; + if (rc) { + log_error (_("key `%s' not found: %s\n"), username, g10_errstr (rc)); + write_status_text( STATUS_DELETE_PROBLEM, "1" ); + goto leave; + } + + /* read the keyblock */ + rc = keydb_get_keyblock (hd, &keyblock ); + if (rc) { + log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); + goto leave; + } + + /* get the keyid from the keyblock */ + node = find_kbnode( keyblock, secret? PKT_SECRET_KEY:PKT_PUBLIC_KEY ); + if( !node ) { + log_error("Oops; key not found anymore!\n"); + rc = G10ERR_GENERAL; + goto leave; + } + + if( secret ) { + sk = node->pkt->pkt.secret_key; + keyid_from_sk( sk, keyid ); + } + else { + pk = node->pkt->pkt.public_key; + keyid_from_pk( pk, keyid ); + rc = seckey_available( keyid ); + if( !rc ) { + *r_sec_avail = 1; + rc = -1; + goto leave; + } + else if( rc != G10ERR_NO_SECKEY ) { + log_error("%s: get secret key: %s\n", username, g10_errstr(rc) ); + } + else + rc = 0; + } + + if( rc ) + rc = 0; + else if (opt.batch && exactmatch) + okay++; + else if( opt.batch && secret ) + { + log_error(_("can't do that in batchmode\n")); + log_info (_("(unless you specify the key by fingerprint)\n")); + } + else if( opt.batch && opt.answer_yes ) + okay++; + else if( opt.batch ) + { + log_error(_("can't do that in batchmode without \"--yes\"\n")); + log_info (_("(unless you specify the key by fingerprint)\n")); + } + else { + if( secret ) + print_seckey_info( sk ); + else + print_pubkey_info( pk ); + tty_printf( "\n" ); + + yes = cpr_get_answer_is_yes( secret? "delete_key.secret.okay" + : "delete_key.okay", + _("Delete this key from the keyring? ")); + if( !cpr_enabled() && secret && yes ) { + /* I think it is not required to check a passphrase; if + * the user is so stupid as to let others access his secret keyring + * (and has no backup) - it is up him to read some very + * basic texts about security. + */ + yes = cpr_get_answer_is_yes("delete_key.secret.okay", + _("This is a secret key! - really delete? ")); + } + if( yes ) + okay++; + } + + + if( okay ) { + rc = keydb_delete_keyblock (hd); + if (rc) { + log_error (_("deleting keyblock failed: %s\n"), g10_errstr(rc) ); + goto leave; + } + + /* Note that the ownertrust being cleared will trigger a + revalidation_mark(). This makes sense - only deleting keys + that have ownertrust set should trigger this. */ + + if (!secret && pk && clear_ownertrusts (pk)) { + if (opt.verbose) + log_info (_("ownertrust information cleared\n")); + } + } + + leave: + keydb_release (hd); + release_kbnode (keyblock); + return rc; +} + +/**************** + * Delete a public or secret key from a keyring. + */ +int +delete_keys( STRLIST names, int secret, int allow_both ) +{ + int rc, avail; + + for(;names;names=names->next) { + rc = do_delete_key (names->d, secret, &avail ); + if ( rc && avail ) { + if ( allow_both ) { + rc = do_delete_key (names->d, 1, &avail ); + if ( !rc ) + rc = do_delete_key (names->d, 0, &avail ); + } + else { + log_error(_( + "there is a secret key for public key \"%s\"!\n"),names->d); + log_info(_( + "use option \"--delete-secret-keys\" to delete it first.\n")); + write_status_text( STATUS_DELETE_PROBLEM, "2" ); + return rc; + } + } + + if(rc) { + log_error("%s: delete key failed: %s\n", names->d, g10_errstr(rc) ); + return rc; + } + } + + return 0; +} diff --git a/g10/pubkey-enc.c b/g10/pubkey-enc.c new file mode 100644 index 000000000..1c52ce4de --- /dev/null +++ b/g10/pubkey-enc.c @@ -0,0 +1,307 @@ +/* pubkey-enc.c - public key encoded packet handling + * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include +#include +#include "util.h" +#include "memory.h" +#include "packet.h" +#include "mpi.h" +#include "keydb.h" +#include "trustdb.h" +#include "cipher.h" +#include "status.h" +#include "options.h" +#include "main.h" +#include "i18n.h" + +static int get_it( PKT_pubkey_enc *k, + DEK *dek, PKT_secret_key *sk, u32 *keyid ); + + +/* check that the given algo is mentioned in one of the valid user IDs */ +static int +is_algo_in_prefs ( KBNODE keyblock, preftype_t type, int algo ) +{ + KBNODE k; + + for (k=keyblock; k; k=k->next) { + if (k->pkt->pkttype == PKT_USER_ID) { + PKT_user_id *uid = k->pkt->pkt.user_id; + prefitem_t *prefs = uid->prefs; + + if (uid->created && prefs && + !uid->is_revoked && !uid->is_expired ) { + for (; prefs->type; prefs++ ) + if (prefs->type == type && prefs->value == algo) + return 1; + } + } + } + return 0; +} + + +/**************** + * Get the session key from a pubkey enc packet and return + * it in DEK, which should have been allocated in secure memory. + */ +int +get_session_key( PKT_pubkey_enc *k, DEK *dek ) +{ + PKT_secret_key *sk = NULL; + int rc; + + rc = check_pubkey_algo2 (k->pubkey_algo, PUBKEY_USAGE_ENC); + if( rc ) + goto leave; + + if( (k->keyid[0] || k->keyid[1]) && !opt.try_all_secrets ) { + sk = m_alloc_clear( sizeof *sk ); + sk->pubkey_algo = k->pubkey_algo; /* we want a pubkey with this algo*/ + if( !(rc = get_seckey( sk, k->keyid )) ) + rc = get_it( k, dek, sk, k->keyid ); + } + else { /* anonymous receiver: Try all available secret keys */ + void *enum_context = NULL; + u32 keyid[2]; + char *p; + + for(;;) { + if( sk ) + free_secret_key( sk ); + sk = m_alloc_clear( sizeof *sk ); + rc=enum_secret_keys( &enum_context, sk, 1, 0); + if( rc ) { + rc = G10ERR_NO_SECKEY; + break; + } + if( sk->pubkey_algo != k->pubkey_algo ) + continue; + keyid_from_sk( sk, keyid ); + log_info(_("anonymous recipient; trying secret key %08lX ...\n"), + (ulong)keyid[1] ); + + if(!opt.try_all_secrets && !is_status_enabled()) + { + p=get_last_passphrase(); + set_next_passphrase(p); + m_free(p); + } + + rc = check_secret_key( sk, opt.try_all_secrets?1:-1 ); /* ask + only + once */ + if( !rc ) + rc = get_it( k, dek, sk, keyid ); + if( !rc ) { + log_info(_("okay, we are the anonymous recipient.\n") ); + break; + } + } + enum_secret_keys( &enum_context, NULL, 0, 0 ); /* free context */ + } + + leave: + if( sk ) + free_secret_key( sk ); + return rc; +} + + +static int +get_it( PKT_pubkey_enc *enc, DEK *dek, PKT_secret_key *sk, u32 *keyid ) +{ + int rc; + MPI plain_dek = NULL; + byte *frame = NULL; + unsigned n, nframe; + u16 csum, csum2; + + rc = pubkey_decrypt(sk->pubkey_algo, &plain_dek, enc->data, sk->skey ); + if( rc ) + goto leave; + frame = mpi_get_buffer( plain_dek, &nframe, NULL ); + mpi_free( plain_dek ); plain_dek = NULL; + + /* Now get the DEK (data encryption key) from the frame + * + * Old versions encode the DEK in in this format (msb is left): + * + * 0 1 DEK(16 bytes) CSUM(2 bytes) 0 RND(n bytes) 2 + * + * Later versions encode the DEK like this: + * + * 0 2 RND(n bytes) 0 A DEK(k bytes) CSUM(2 bytes) + * + * (mpi_get_buffer already removed the leading zero). + * + * RND are non-zero randow bytes. + * A is the cipher algorithm + * DEK is the encryption key (session key) with length k + * CSUM + */ + if( DBG_CIPHER ) + log_hexdump("DEK frame:", frame, nframe ); + n=0; + if( n + 7 > nframe ) + { rc = G10ERR_WRONG_SECKEY; goto leave; } + if( frame[n] == 1 && frame[nframe-1] == 2 ) { + log_info(_("old encoding of the DEK is not supported\n")); + rc = G10ERR_CIPHER_ALGO; + goto leave; + } + if( frame[n] != 2 ) /* somethink is wrong */ + { rc = G10ERR_WRONG_SECKEY; goto leave; } + for(n++; n < nframe && frame[n]; n++ ) /* skip the random bytes */ + ; + n++; /* and the zero byte */ + if( n + 4 > nframe ) + { rc = G10ERR_WRONG_SECKEY; goto leave; } + + dek->keylen = nframe - (n+1) - 2; + dek->algo = frame[n++]; + if( dek->algo == CIPHER_ALGO_IDEA ) + write_status(STATUS_RSA_OR_IDEA); + rc = check_cipher_algo( dek->algo ); + if( rc ) { + if( !opt.quiet && rc == G10ERR_CIPHER_ALGO ) { + log_info(_("cipher algorithm %d%s is unknown or disabled\n"), + dek->algo, dek->algo == CIPHER_ALGO_IDEA? " (IDEA)":""); + if(dek->algo==CIPHER_ALGO_IDEA) + idea_cipher_warn(0); + } + dek->algo = 0; + goto leave; + } + if( (dek->keylen*8) != cipher_get_keylen( dek->algo ) ) { + rc = G10ERR_WRONG_SECKEY; + goto leave; + } + + /* copy the key to DEK and compare the checksum */ + csum = frame[nframe-2] << 8; + csum |= frame[nframe-1]; + memcpy( dek->key, frame+n, dek->keylen ); + for( csum2=0, n=0; n < dek->keylen; n++ ) + csum2 += dek->key[n]; + if( csum != csum2 ) { + rc = G10ERR_WRONG_SECKEY; + goto leave; + } + if( DBG_CIPHER ) + log_hexdump("DEK is:", dek->key, dek->keylen ); + /* check that the algo is in the preferences and whether it has expired */ + { + PKT_public_key *pk = NULL; + KBNODE pkb = get_pubkeyblock (keyid); + + if( !pkb ) { + rc = -1; + log_error("oops: public key not found for preference check\n"); + } + else if( pkb->pkt->pkt.public_key->selfsigversion > 3 + && dek->algo != CIPHER_ALGO_3DES + && !is_algo_in_prefs( pkb, PREFTYPE_SYM, dek->algo ) ) { + /* Don't print a note while we are not on verbose mode, + * the cipher is blowfish and the preferences have twofish + * listed */ + if( opt.verbose || dek->algo != CIPHER_ALGO_BLOWFISH + || !is_algo_in_prefs( pkb, PREFTYPE_SYM, CIPHER_ALGO_TWOFISH)) + log_info(_( + "NOTE: cipher algorithm %d not found in preferences\n"), + dek->algo ); + } + + if (!rc) { + KBNODE k; + + for (k=pkb; k; k = k->next) { + if (k->pkt->pkttype == PKT_PUBLIC_KEY + || k->pkt->pkttype == PKT_PUBLIC_SUBKEY){ + u32 aki[2]; + keyid_from_pk(k->pkt->pkt.public_key, aki); + + if (aki[0]==keyid[0] && aki[1]==keyid[1]) { + pk = k->pkt->pkt.public_key; + break; + } + } + } + if (!pk) + BUG (); + if ( pk->expiredate && pk->expiredate <= make_timestamp() ) { + log_info(_("NOTE: secret key %08lX expired at %s\n"), + (ulong)keyid[1], asctimestamp( pk->expiredate) ); + } + } + + if ( pk && pk->is_revoked ) { + log_info( _("NOTE: key has been revoked") ); + putc( '\n', log_stream() ); + show_revocation_reason( pk, 1 ); + } + + release_kbnode (pkb); + rc = 0; + } + + + leave: + mpi_free(plain_dek); + m_free(frame); + return rc; +} + + +/**************** + * Get the session key from the given string. + * String is supposed to be formatted as this: + * : + */ +int +get_override_session_key( DEK *dek, const char *string ) +{ + const char *s; + int i; + + if ( !string ) + return G10ERR_BAD_KEY; + dek->algo = atoi(string); + if ( dek->algo < 1 ) + return G10ERR_BAD_KEY; + if ( !(s = strchr ( string, ':' )) ) + return G10ERR_BAD_KEY; + s++; + for(i=0; i < DIM(dek->key) && *s; i++, s +=2 ) { + int c = hextobyte ( s ); + if (c == -1) + return G10ERR_BAD_KEY; + dek->key[i] = c; + } + if ( *s ) + return G10ERR_BAD_KEY; + dek->keylen = i; + return 0; +} + diff --git a/g10/status.h b/g10/status.h new file mode 100644 index 000000000..44a7d6d32 --- /dev/null +++ b/g10/status.h @@ -0,0 +1,127 @@ +/* status.h + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef G10_STATUS_H +#define G10_STATUS_H + + +#define STATUS_ENTER 1 +#define STATUS_LEAVE 2 +#define STATUS_ABORT 3 + +#define STATUS_GOODSIG 4 +#define STATUS_BADSIG 5 +#define STATUS_ERRSIG 6 + + +#define STATUS_BADARMOR 7 + +#define STATUS_RSA_OR_IDEA 8 +#define STATUS_KEYEXPIRED 9 +#define STATUS_KEYREVOKED 10 + +#define STATUS_TRUST_UNDEFINED 11 +#define STATUS_TRUST_NEVER 12 +#define STATUS_TRUST_MARGINAL 13 +#define STATUS_TRUST_FULLY 14 +#define STATUS_TRUST_ULTIMATE 15 + +#define STATUS_SHM_INFO 16 +#define STATUS_SHM_GET 17 +#define STATUS_SHM_GET_BOOL 18 +#define STATUS_SHM_GET_HIDDEN 19 + +#define STATUS_NEED_PASSPHRASE 20 +#define STATUS_VALIDSIG 21 +#define STATUS_SIG_ID 22 +#define STATUS_ENC_TO 23 +#define STATUS_NODATA 24 +#define STATUS_BAD_PASSPHRASE 25 +#define STATUS_NO_PUBKEY 26 +#define STATUS_NO_SECKEY 27 +#define STATUS_NEED_PASSPHRASE_SYM 28 +#define STATUS_DECRYPTION_FAILED 29 +#define STATUS_DECRYPTION_OKAY 30 +#define STATUS_MISSING_PASSPHRASE 31 +#define STATUS_GOOD_PASSPHRASE 32 +#define STATUS_GOODMDC 33 +#define STATUS_BADMDC 34 +#define STATUS_ERRMDC 35 +#define STATUS_IMPORTED 36 +#define STATUS_IMPORT_RES 37 +#define STATUS_FILE_START 38 +#define STATUS_FILE_DONE 39 +#define STATUS_FILE_ERROR 40 + +#define STATUS_BEGIN_DECRYPTION 41 +#define STATUS_END_DECRYPTION 42 +#define STATUS_BEGIN_ENCRYPTION 43 +#define STATUS_END_ENCRYPTION 44 + +#define STATUS_DELETE_PROBLEM 45 +#define STATUS_GET_BOOL 46 +#define STATUS_GET_LINE 47 +#define STATUS_GET_HIDDEN 48 +#define STATUS_GOT_IT 49 +#define STATUS_PROGRESS 50 +#define STATUS_SIG_CREATED 51 +#define STATUS_SESSION_KEY 52 +#define STATUS_NOTATION_NAME 53 +#define STATUS_NOTATION_DATA 54 +#define STATUS_POLICY_URL 55 +#define STATUS_BEGIN_STREAM 56 +#define STATUS_END_STREAM 57 +#define STATUS_KEY_CREATED 58 +#define STATUS_USERID_HINT 59 +#define STATUS_UNEXPECTED 60 +#define STATUS_INV_RECP 61 +#define STATUS_NO_RECP 62 +#define STATUS_ALREADY_SIGNED 63 +#define STATUS_SIGEXPIRED 64 +#define STATUS_EXPSIG 65 +#define STATUS_EXPKEYSIG 66 +#define STATUS_ATTRIBUTE 67 +#define STATUS_IMPORT_OK 68 +#define STATUS_IMPORT_CHECK 69 + +/*-- status.c --*/ +void set_status_fd ( int fd ); +int is_status_enabled ( void ); +void write_status ( int no ); +void write_status_text ( int no, const char *text ); +void write_status_buffer ( int no, + const char *buffer, size_t len, int wrap ); +void write_status_text_and_buffer ( int no, const char *text, + const char *buffer, size_t len, int wrap ); + +#ifdef USE_SHM_COPROCESSING + void init_shm_coprocessing ( ulong requested_shm_size, int lock_mem ); +#endif /*USE_SHM_COPROCESSING*/ + +int cpr_enabled(void); +char *cpr_get( const char *keyword, const char *prompt ); +char *cpr_get_no_help( const char *keyword, const char *prompt ); +char *cpr_get_utf8( const char *keyword, const char *prompt ); +char *cpr_get_hidden( const char *keyword, const char *prompt ); +void cpr_kill_prompt(void); +int cpr_get_answer_is_yes( const char *keyword, const char *prompt ); +int cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt ); + + +#endif /*G10_STATUS_H*/ diff --git a/include/_regex.h b/include/_regex.h new file mode 100644 index 000000000..fac441dc6 --- /dev/null +++ b/include/_regex.h @@ -0,0 +1,574 @@ +/* Definitions for data structures and routines for the regular + expression library. + Copyright (C) 1985,1989-93,1995-98,2000,2001,2002 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _REGEX_H +#define _REGEX_H 1 + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* POSIX says that must be included (by the caller) before + . */ + +#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS +/* VMS doesn't have `size_t' in , even though POSIX says it + should be there. */ +# include +#endif + +/* The following two types have to be signed and unsigned integer type + wide enough to hold a value of a pointer. For most ANSI compilers + ptrdiff_t and size_t should be likely OK. Still size of these two + types is 2 for Microsoft C. Ugh... */ +typedef long int s_reg_t; +typedef unsigned long int active_reg_t; + +/* The following bits are used to determine the regexp syntax we + recognize. The set/not-set meanings are chosen so that Emacs syntax + remains the value 0. The bits are given in alphabetical order, and + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ +typedef unsigned long int reg_syntax_t; + +/* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ +#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) + +/* If this bit is not set, then + and ? are operators, and \+ and \? are + literals. + If set, then \+ and \? are operators and + and ? are literals. */ +#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) + +/* If this bit is set, then character classes are supported. They are: + [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], + [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. + If not set, then character classes are not supported. */ +#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) + +/* If this bit is set, then ^ and $ are always anchors (outside bracket + expressions, of course). + If this bit is not set, then it depends: + ^ is an anchor if it is at the beginning of a regular + expression or after an open-group or an alternation operator; + $ is an anchor if it is at the end of a regular expression, or + before a close-group or an alternation operator. + + This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because + POSIX draft 11.2 says that * etc. in leading positions is undefined. + We already implemented a previous draft which made those constructs + invalid, though, so we haven't changed the code back. */ +#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) + +/* If this bit is set, then special characters are always special + regardless of where they are in the pattern. + If this bit is not set, then special characters are special only in + some contexts; otherwise they are ordinary. Specifically, + * + ? and intervals are only special when not after the beginning, + open-group, or alternation operator. */ +#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) + +/* If this bit is set, then *, +, ?, and { cannot be first in an re or + immediately after an alternation or begin-group operator. */ +#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) + +/* If this bit is set, then . matches newline. + If not set, then it doesn't. */ +#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) + +/* If this bit is set, then . doesn't match NUL. + If not set, then it does. */ +#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) + +/* If this bit is set, nonmatching lists [^...] do not match newline. + If not set, they do. */ +#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) + +/* If this bit is set, either \{...\} or {...} defines an + interval, depending on RE_NO_BK_BRACES. + If not set, \{, \}, {, and } are literals. */ +#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) + +/* If this bit is set, +, ? and | aren't recognized as operators. + If not set, they are. */ +#define RE_LIMITED_OPS (RE_INTERVALS << 1) + +/* If this bit is set, newline is an alternation operator. + If not set, newline is literal. */ +#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) + +/* If this bit is set, then `{...}' defines an interval, and \{ and \} + are literals. + If not set, then `\{...\}' defines an interval. */ +#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) + +/* If this bit is set, (...) defines a group, and \( and \) are literals. + If not set, \(...\) defines a group, and ( and ) are literals. */ +#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) + +/* If this bit is set, then \ matches . + If not set, then \ is a back-reference. */ +#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) + +/* If this bit is set, then | is an alternation operator, and \| is literal. + If not set, then \| is an alternation operator, and | is literal. */ +#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) + +/* If this bit is set, then an ending range point collating higher + than the starting range point, as in [z-a], is invalid. + If not set, then when ending range point collates higher than the + starting range point, the range is ignored. */ +#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) + +/* If this bit is set, then an unmatched ) is ordinary. + If not set, then an unmatched ) is invalid. */ +#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) + +/* If this bit is set, succeed as soon as we match the whole pattern, + without further backtracking. */ +#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) + +/* If this bit is set, do not process the GNU regex operators. + If not set, then the GNU regex operators are recognized. */ +#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) + +/* If this bit is set, turn on internal regex debugging. + If not set, and debugging was on, turn it off. + This only works if regex.c is compiled -DDEBUG. + We define this bit always, so that all that's needed to turn on + debugging is to recompile regex.c; the calling code can always have + this bit set, and it won't affect anything in the normal case. */ +#define RE_DEBUG (RE_NO_GNU_OPS << 1) + +/* If this bit is set, a syntactically invalid interval is treated as + a string of ordinary characters. For example, the ERE 'a{1' is + treated as 'a\{1'. */ +#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +#define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) + +/* This global variable defines the particular regexp syntax to use (for + some interfaces). When a regexp is compiled, the syntax used is + stored in the pattern buffer, so changing this does not affect + already-compiled regexps. */ +extern reg_syntax_t re_syntax_options; + +/* Define combinations of the above bits for the standard possibilities. + (The [[[ comments delimit what gets put into the Texinfo file, so + don't delete them!) */ +/* [[[begin syntaxes]]] */ +#define RE_SYNTAX_EMACS 0 + +#define RE_SYNTAX_AWK \ + (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ + | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ + | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + +#define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ + & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS \ + | RE_CONTEXT_INVALID_OPS )) + +#define RE_SYNTAX_POSIX_AWK \ + (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INTERVALS | RE_NO_GNU_OPS) + +#define RE_SYNTAX_GREP \ + (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ + | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ + | RE_NEWLINE_ALT) + +#define RE_SYNTAX_EGREP \ + (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ + | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ + | RE_NO_BK_VBAR) + +#define RE_SYNTAX_POSIX_EGREP \ + (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ + | RE_INVALID_INTERVAL_ORD) + +/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ +#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC + +#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC + +/* Syntax bits common to both basic and extended POSIX regex syntax. */ +#define _RE_SYNTAX_POSIX_COMMON \ + (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ + | RE_INTERVALS | RE_NO_EMPTY_RANGES) + +#define RE_SYNTAX_POSIX_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) + +/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes + RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this + isn't minimal, since other operators, such as \`, aren't disabled. */ +#define RE_SYNTAX_POSIX_MINIMAL_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) + +#define RE_SYNTAX_POSIX_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) + +/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is + removed and RE_NO_BK_REFS is added. */ +#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) +/* [[[end syntaxes]]] */ + +/* Maximum number of duplicates an interval can allow. Some systems + (erroneously) define this in other header files, but we want our + value, so remove any previous define. */ +#ifdef RE_DUP_MAX +# undef RE_DUP_MAX +#endif +/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ +#define RE_DUP_MAX (0x7fff) + + +/* POSIX `cflags' bits (i.e., information for `regcomp'). */ + +/* If this bit is set, then use extended regular expression syntax. + If not set, then use basic regular expression syntax. */ +#define REG_EXTENDED 1 + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +#define REG_ICASE (REG_EXTENDED << 1) + +/* If this bit is set, then anchors do not match at newline + characters in the string. + If not set, then anchors do match at newlines. */ +#define REG_NEWLINE (REG_ICASE << 1) + +/* If this bit is set, then report only success or fail in regexec. + If not set, then returns differ between not matching and errors. */ +#define REG_NOSUB (REG_NEWLINE << 1) + + +/* POSIX `eflags' bits (i.e., information for regexec). */ + +/* If this bit is set, then the beginning-of-line operator doesn't match + the beginning of the string (presumably because it's not the + beginning of a line). + If not set, then the beginning-of-line operator does match the + beginning of the string. */ +#define REG_NOTBOL 1 + +/* Like REG_NOTBOL, except for the end-of-line. */ +#define REG_NOTEOL (1 << 1) + + +/* If any error codes are removed, changed, or added, update the + `re_error_msg' table in regex.c. */ +typedef enum +{ +#ifdef _XOPEN_SOURCE + REG_ENOSYS = -1, /* This will never happen for this implementation. */ +#endif + + REG_NOERROR = 0, /* Success. */ + REG_NOMATCH, /* Didn't find a match (for regexec). */ + + /* POSIX regcomp return error codes. (In the order listed in the + standard.) */ + REG_BADPAT, /* Invalid pattern. */ + REG_ECOLLATE, /* Not implemented. */ + REG_ECTYPE, /* Invalid character class name. */ + REG_EESCAPE, /* Trailing backslash. */ + REG_ESUBREG, /* Invalid back reference. */ + REG_EBRACK, /* Unmatched left bracket. */ + REG_EPAREN, /* Parenthesis imbalance. */ + REG_EBRACE, /* Unmatched \{. */ + REG_BADBR, /* Invalid contents of \{\}. */ + REG_ERANGE, /* Invalid range end. */ + REG_ESPACE, /* Ran out of memory. */ + REG_BADRPT, /* No preceding re for repetition op. */ + + /* Error codes we've added. */ + REG_EEND, /* Premature end. */ + REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ + REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ +} reg_errcode_t; + +/* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields `buffer', `allocated', `fastmap', + `translate', and `no_sub' can be set. After the pattern has been + compiled, the `re_nsub' field is available. All other fields are + private to the regex routines. */ + +#ifndef RE_TRANSLATE_TYPE +# define RE_TRANSLATE_TYPE char * +#endif + +struct re_pattern_buffer +{ +/* [[[begin pattern_buffer]]] */ + /* Space that holds the compiled pattern. It is declared as + `unsigned char *' because its elements are + sometimes used as array indexes. */ + unsigned char *buffer; + + /* Number of bytes to which `buffer' points. */ + unsigned long int allocated; + + /* Number of bytes actually used in `buffer'. */ + unsigned long int used; + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t syntax; + + /* Pointer to a fastmap, if any, otherwise zero. re_search uses + the fastmap, if there is one, to skip over impossible + starting points for matches. */ + char *fastmap; + + /* Either a translate table to apply to all characters before + comparing them, or zero for no translation. The translation + is applied to a pattern when it is compiled and to a string + when it is matched. */ + RE_TRANSLATE_TYPE translate; + + /* Number of subexpressions found by the compiler. */ + size_t re_nsub; + + /* Zero if this pattern cannot match the empty string, one else. + Well, in truth it's used only in `re_search_2', to see + whether or not we should use the fastmap, so we don't set + this absolutely perfectly; see `re_compile_fastmap' (the + `duplicate' case). */ + unsigned can_be_null : 1; + + /* If REGS_UNALLOCATED, allocate space in the `regs' structure + for `max (RE_NREGS, re_nsub + 1)' groups. + If REGS_REALLOCATE, reallocate space if necessary. + If REGS_FIXED, use what's there. */ +#define REGS_UNALLOCATED 0 +#define REGS_REALLOCATE 1 +#define REGS_FIXED 2 + unsigned regs_allocated : 2; + + /* Set to zero when `regex_compile' compiles a pattern; set to one + by `re_compile_fastmap' if it updates the fastmap. */ + unsigned fastmap_accurate : 1; + + /* If set, `re_match_2' does not return information about + subexpressions. */ + unsigned no_sub : 1; + + /* If set, a beginning-of-line anchor doesn't match at the + beginning of the string. */ + unsigned not_bol : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned not_eol : 1; + + /* If true, an anchor at a newline matches. */ + unsigned newline_anchor : 1; + +/* [[[end pattern_buffer]]] */ +}; + +typedef struct re_pattern_buffer regex_t; + +/* Type for byte offsets within the string. POSIX mandates this. */ +typedef int regoff_t; + + +/* This is the structure we store register match data in. See + regex.texinfo for a full description of what registers match. */ +struct re_registers +{ + unsigned num_regs; + regoff_t *start; + regoff_t *end; +}; + + +/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, + `re_match_2' returns information about at least this many registers + the first time a `regs' structure is passed. */ +#ifndef RE_NREGS +# define RE_NREGS 30 +#endif + + +/* POSIX specification for registers. Aside from the different names than + `re_registers', POSIX uses an array of structures, instead of a + structure of arrays. */ +typedef struct +{ + regoff_t rm_so; /* Byte offset from string's start to substring's start. */ + regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ +} regmatch_t; + +/* Declarations for routines. */ + +/* To avoid duplicating every routine declaration -- once with a + prototype (if we are ANSI), and once without (if we aren't) -- we + use the following macro to declare argument types. This + unfortunately clutters up the declarations a bit, but I think it's + worth it. */ + +#if __STDC__ + +# define _RE_ARGS(args) args + +#else /* not __STDC__ */ + +# define _RE_ARGS(args) () + +#endif /* not __STDC__ */ + +/* Sets the current default syntax to SYNTAX, and return the old syntax. + You can also simply assign to the `re_syntax_options' variable. */ +extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); + +/* Compile the regular expression PATTERN, with length LENGTH + and syntax given by the global `re_syntax_options', into the buffer + BUFFER. Return NULL if successful, and an error string if not. */ +extern const char *re_compile_pattern + _RE_ARGS ((const char *pattern, size_t length, + struct re_pattern_buffer *buffer)); + + +/* Compile a fastmap for the compiled pattern in BUFFER; used to + accelerate searches. Return 0 if successful and -2 if was an + internal error. */ +extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); + + +/* Search in the string STRING (with length LENGTH) for the pattern + compiled into BUFFER. Start searching at position START, for RANGE + characters. Return the starting position of the match, -1 for no + match, or -2 for an internal error. Also return register + information in REGS (if REGS and BUFFER->no_sub are nonzero). */ +extern int re_search + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, + int length, int start, int range, struct re_registers *regs)); + + +/* Like `re_search', but search in the concatenation of STRING1 and + STRING2. Also, stop searching at index START + STOP. */ +extern int re_search_2 + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, int range, struct re_registers *regs, int stop)); + + +/* Like `re_search', but return how many characters in STRING the regexp + in BUFFER matched, starting at position START. */ +extern int re_match + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, + int length, int start, struct re_registers *regs)); + + +/* Relates to `re_match' as `re_search_2' relates to `re_search'. */ +extern int re_match_2 + _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, + int length1, const char *string2, int length2, + int start, struct re_registers *regs, int stop)); + + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using BUFFER and REGS will use this memory + for recording register information. STARTS and ENDS must be + allocated with malloc, and must each be at least `NUM_REGS * sizeof + (regoff_t)' bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ +extern void re_set_registers + _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, + unsigned num_regs, regoff_t *starts, regoff_t *ends)); + +#if defined _REGEX_RE_COMP || defined _LIBC +# ifndef _CRAY +/* 4.2 bsd compatibility. */ +extern char *re_comp _RE_ARGS ((const char *)); +extern int re_exec _RE_ARGS ((const char *)); +# endif +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". */ +#ifndef __restrict +# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) +# if defined restrict || 199901L <= __STDC_VERSION__ +# define __restrict restrict +# else +# define __restrict +# endif +# endif +#endif +/* gcc 3.1 and up support the [restrict] syntax. */ +#ifndef __restrict_arr +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define __restrict_arr __restrict +# else +# define __restrict_arr +# endif +#endif + +/* POSIX compatibility. */ +extern int regcomp _RE_ARGS ((regex_t *__restrict __preg, + const char *__restrict __pattern, + int __cflags)); + +extern int regexec _RE_ARGS ((const regex_t *__restrict __preg, + const char *__restrict __string, size_t __nmatch, + regmatch_t __pmatch[__restrict_arr], + int __eflags)); + +extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg, + char *__errbuf, size_t __errbuf_size)); + +extern void regfree _RE_ARGS ((regex_t *__preg)); + + +#ifdef __cplusplus +} +#endif /* C++ */ + +#endif /* regex.h */ + +/* +Local variables: +make-backup-files: t +version-control: t +trim-versions-without-asking: nil +End: +*/ diff --git a/include/distfiles b/include/distfiles new file mode 100644 index 000000000..20a9091e6 --- /dev/null +++ b/include/distfiles @@ -0,0 +1,15 @@ +cipher.h +errors.h +iobuf.h +memory.h +mpi.h +ttyio.h +types.h +util.h +i18n.h +host2net.h +http.h +keyserver.h +_regex.h + +ChangeLog diff --git a/include/ttyio.h b/include/ttyio.h new file mode 100644 index 000000000..5f6557930 --- /dev/null +++ b/include/ttyio.h @@ -0,0 +1,40 @@ +/* ttyio.h + * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + * + * This file is part of GNUPG. + * + * GNUPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GNUPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef G10_TTYIO_H +#define G10_TTYIO_H + +const char *tty_get_ttyname (void); +int tty_batchmode( int onoff ); +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) + void tty_printf (const char *fmt, ... ) __attribute__ ((format (printf,1,2))); +#else + void tty_printf (const char *fmt, ... ); +#endif +void tty_print_string( byte *p, size_t n ); +void tty_print_utf8_string( byte *p, size_t n ); +void tty_print_utf8_string2( byte *p, size_t n, size_t max_n ); +char *tty_get( const char *prompt ); +char *tty_get_hidden( const char *prompt ); +void tty_kill_prompt(void); +int tty_get_answer_is_yes( const char *prompt ); +int tty_no_terminal(int onoff); + + +#endif /*G10_TTYIO_H*/ diff --git a/include/zlib-riscos.h b/include/zlib-riscos.h new file mode 100644 index 000000000..fad556bcb --- /dev/null +++ b/include/zlib-riscos.h @@ -0,0 +1,134 @@ +/* zlib-riscos.h + * Copyright (C) 2002 Free Software Foundation, Inc. + * + * This file is part of GNUPG. + * + * GNUPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GNUPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef G10_ZLIB_RISCOS_H +#define G10_ZLIB_RISCOS_H + +#include +#include + +static const char * const zlib_path[] = { + "System:310.Modules.ZLib", + NULL +}; + +#define ZLib_Compress 0x53AC0 +#define ZLib_Decompress 0x53AC1 +#define ZLib_CRC32 0x53AC2 +#define ZLib_Adler32 0x53AC3 +#define ZLib_Version 0x53AC4 +#define ZLib_ZCompress 0x53AC5 +#define ZLib_ZCompress2 0x53AC6 +#define ZLib_ZUncompress 0x53AC7 +#define ZLib_DeflateInit 0x53AC8 +#define ZLib_InflateInit 0x53AC9 +#define ZLib_DeflateInit2 0x53ACA +#define ZLib_InflateInit2 0x53ACB +#define ZLib_Deflate 0x53ACC +#define ZLib_DeflateEnd 0x53ACD +#define ZLib_Inflate 0x53ACE +#define ZLib_InflateEnd 0x53ACF +#define ZLib_DeflateSetDictionary 0x53AD0 +#define ZLib_DeflateCopy 0x53AD1 +#define ZLib_DeflateReset 0x53AD2 +#define ZLib_DeflateParams 0x53AD3 +#define ZLib_InflateSetDictionary 0x53AD4 +#define ZLib_InflateSync 0x53AD5 +#define ZLib_InflateReset 0x53AD6 +#define ZLib_GZOpen 0x53AD7 +#define ZLib_GZRead 0x53AD8 +#define ZLib_GRWrite 0x53AD9 +#define ZLib_GZFlush 0x53ADA +#define ZLib_GZClose 0x53ADB +#define ZLib_GZError 0x53ADC +#define ZLib_GZSeek 0x53ADD +#define ZLib_GZTell 0x53ADE +#define ZLib_GZEOF 0x53ADF +#define ZLib_TaskAssociate 0x53AE0 + +#define crc32(r0,r1,r2) \ + _swi(ZLib_CRC32, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define adler32(r0,r1,r2) \ + _swi(ZLib_Adler32, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define zlibVersion() \ + _swi(ZLib_Version, _RETURN(0)) +#define compress(r0,r1,r2,r3) \ + _swi(ZLib_ZCompress, _INR(0,3) | _RETURN(0)|_OUT(1), r0,r1,r2,r3, &r1) +#define compress2(r0,r1,r2,r3,r4) \ + _swi(ZLib_ZCompress2, _INR(0,4) | _RETURN(0)|_OUT(1), r0,r1,r2,r3,r4, &r1) +#define uncompress(r0,r1,r2,r3) \ + _swi(ZLib_ZUncompress, _INR(0,3) | _RETURN(0)|_OUT(1), r0,r1,r2,r3, &r1) +#define deflateInit_(r0,r1,r2,r3) \ + _swi(ZLib_DeflateInit, _INR(0,3) | _RETURN(0), r0,r1,r2,r3) +#define inflateInit_(r0,r1,r2) \ + _swi(ZLib_InflateInit, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define deflateInit2_(r0,r1,r2,r3,r4,r5,r6,r7) \ + _swi(ZLib_DeflateInit2, _INR(0,7) | _RETURN(0), r0,r1,r2,r3,r4,r5,r6,r7) +#define inflateInit2_(r0,r1,r2,r3) \ + _swi(ZLib_InflateInit2, _INR(0,3) | _RETURN(0), r0,r1,r2,r3) +#define deflate(r0,r1) \ + _swi(ZLib_Deflate, _INR(0,1) | _RETURN(0), r0,r1) +#define deflateEnd(r0) \ + _swi(ZLib_DeflateEnd, _IN(0) | _RETURN(0), r0) +#define inflate(r0,r1) \ + _swi(ZLib_Inflate, _INR(0,1) | _RETURN(0), r0,r1) +#define inflateEnd(r0) \ + _swi(ZLib_InflateEnd, _IN(0) | _RETURN(0), r0) +#define deflateSetDictionary(r0,r1,r2) \ + _swi(ZLib_DeflateSetDictionary, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define deflateCopy(r0,r1) \ + _swi(ZLib_DeflateCopy, _INR(0,1) | _RETURN(0), r0,r1) +#define deflateReset(r0) \ + _swi(ZLib_DeflateReset, _IN(0) | _RETURN(0), r0) +#define deflateParams(r0,r1,r2) \ + _swi(ZLib_DeflateParams, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define inflateSetDictionary(r0,r1,r2) \ + _swi(ZLib_InflateSetDictionary, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define inflateSync(r0) \ + _swi(ZLib_InflateSync, _IN(0) | _RETURN(0), r0) +#define inflateReset(r0) \ + _swi(ZLib_InflateReset, _IN(0) | _RETURN(0), r0) +#define gzopen(r0,r1) \ + _swi(ZLib_GZOpen, _INR(0,1) | _RETURN(0), r0) +#define gzdopen(r0,r1) BUG() +#define gzsetparams(r0,r1,r2) BUG() +#define gzread(r0,r1,r2) \ + _swi(ZLib_GZRead, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define gzwrite(r0,r1,r2) \ + _swi(ZLib_GZWrite, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define gzprintf(r0,r1,...) BUG() +#define gzputs(r0,r1) BUG() +#define gzgets(r0,r1,r2) BUG() +#define gzputc(r0,r1) BUG() +#define gzgetc(r0) BUG() +#define gzflush(r0,r1) \ + _swi(ZLib_GZFlush, _INR(0,1) | _RETURN(0), r0,r1) +#define gzclose(r0) \ + _swi(ZLib_GZClose, _IN(0) | _RETURN(0), r0) +#define gzerror(r0,r1) \ + _swi(ZLib_GZError, _IN(0) | _RETURN(0)|_OUT(1), r0, &r1) +#define gzseek(r0,r1,r2) \ + _swi(ZLib_GZSeek, _INR(0,2) | _RETURN(0), r0,r1,r2) +#define gzrewind(r0) BUG() +#define gztell(r0) \ + _swi(ZLib_GZTell, _IN(0) | _RETURN(0), r0) +#define gzeof(r0) \ + _swi(ZLib_GZEOF, _IN(0) | _RETURN(0), r0) + +#endif /* G10_ZLIB_RISCOS_H */ diff --git a/po/de.po b/po/de.po new file mode 100644 index 000000000..d11d8d9bc --- /dev/null +++ b/po/de.po @@ -0,0 +1,5254 @@ +# GnuPG german translation +# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +# Walter Koch , 1998, 1999, 2000, 2001 +msgid "" +msgstr "" +"Project-Id-Version: gnupg-1.0.7\n" +"POT-Creation-Date: 2002-11-11 19:56+0100\n" +"PO-Revision-Date: 2002-09-11 15:40+0200\n" +"Last-Translator: Walter Koch \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: util/secmem.c:90 +msgid "WARNING: using insecure memory!\n" +msgstr "WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.\n" + +#: util/secmem.c:91 +msgid "please see http://www.gnupg.org/faq.html for more information\n" +msgstr "siehe http://www.gnupg.org/de/faq.html für weitere Informationen\n" + +# " Um dies zu vermeiden, kann das Programm suid(root) installiert werden.\n" +# " Bitte wenden Sie sich hierzu an den Systemadministrator.\n" +#: util/secmem.c:328 +msgid "operation is not possible without initialized secure memory\n" +msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht möglich\n" + +#: util/secmem.c:329 +msgid "(you may have used the wrong program for this task)\n" +msgstr "" +"(möglicherweise haben Sie das falsche Programm für diese Aufgabe benutzt)\n" + +#: util/miscutil.c:296 util/miscutil.c:331 +msgid "yes" +msgstr "ja" + +#: util/miscutil.c:297 util/miscutil.c:334 +msgid "yY" +msgstr "jJyY" + +#: util/miscutil.c:298 util/miscutil.c:332 +msgid "no" +msgstr "nein" + +#: util/miscutil.c:299 util/miscutil.c:335 +msgid "nN" +msgstr "nN" + +#: g10/keyedit.c:1032 util/miscutil.c:333 +msgid "quit" +msgstr "quit" + +#: util/miscutil.c:336 +msgid "qQ" +msgstr "qQ" + +#: util/errors.c:54 +msgid "general error" +msgstr "Allgemeiner Fehler" + +#: util/errors.c:55 +msgid "unknown packet type" +msgstr "Unbekannter Pakettyp" + +#: util/errors.c:56 +msgid "unknown version" +msgstr "Unbekannte Version" + +#: util/errors.c:57 +msgid "unknown pubkey algorithm" +msgstr "Unbekanntes Public-Key-Verfahren" + +#: util/errors.c:58 +msgid "unknown digest algorithm" +msgstr "Unbekanntes Hashverfahren" + +#: util/errors.c:59 +msgid "bad public key" +msgstr "Falscher öffentlicher Schüssel" + +#: util/errors.c:60 +msgid "bad secret key" +msgstr "Falscher geheimer Schlüssel" + +#: util/errors.c:61 +msgid "bad signature" +msgstr "Falsche Unterschrift" + +#: util/errors.c:62 +msgid "checksum error" +msgstr "Prüfsummen-Fehler" + +#: util/errors.c:63 +msgid "bad passphrase" +msgstr "Falsches Mantra" + +#: util/errors.c:64 +msgid "public key not found" +msgstr "Öffentlicher Schlüssel nicht gefunden" + +#: util/errors.c:65 +msgid "unknown cipher algorithm" +msgstr "Unbekanntes Verschlüsselungsverfahren" + +#: util/errors.c:66 +msgid "can't open the keyring" +msgstr "Der Schlüsselbund kann nicht geöffnet werden" + +#: util/errors.c:67 +msgid "invalid packet" +msgstr "Ungültiges Paket" + +#: util/errors.c:68 +msgid "invalid armor" +msgstr "Ungültige ASCII-Hülle" + +#: util/errors.c:69 +msgid "no such user id" +msgstr "Keine solche User-ID" + +#: util/errors.c:70 +msgid "secret key not available" +msgstr "Geheimer Schlüssel ist nicht vorhanden" + +#: util/errors.c:71 +msgid "wrong secret key used" +msgstr "Falscher geheimer Schlüssel benutzt" + +#: util/errors.c:72 +msgid "not supported" +msgstr "Wird nicht unterstützt" + +#: util/errors.c:73 +msgid "bad key" +msgstr "Falscher Schlüssel" + +#: util/errors.c:74 +msgid "file read error" +msgstr "Dateilesefehler" + +#: util/errors.c:75 +msgid "file write error" +msgstr "Dateischreibfehler" + +#: util/errors.c:76 +msgid "unknown compress algorithm" +msgstr "Unbekanntes Komprimierverfahren" + +#: util/errors.c:77 +msgid "file open error" +msgstr "Fehler beim Öffnen der Datei" + +#: util/errors.c:78 +msgid "file create error" +msgstr "Fehler beim Erzeugen der Datei" + +#: util/errors.c:79 +msgid "invalid passphrase" +msgstr "Ungültiges Mantra" + +#: util/errors.c:80 +msgid "unimplemented pubkey algorithm" +msgstr "nicht implementiertes öffentliches Schlüsselverfahren" + +#: util/errors.c:81 +msgid "unimplemented cipher algorithm" +msgstr "Verschlüsselungsverfahren ist nicht implementiert" + +#: util/errors.c:82 +msgid "unknown signature class" +msgstr "Unbekannte Unterschriftenklasse" + +#: util/errors.c:83 +msgid "trust database error" +msgstr "Fehler in der Trust-DB" + +#: util/errors.c:84 +msgid "bad MPI" +msgstr "Falsche MPI" + +#: util/errors.c:85 +msgid "resource limit" +msgstr "festdefinierte Ressourcenobergrenze erreicht" + +#: util/errors.c:86 +msgid "invalid keyring" +msgstr "Ungültiger Schlüsselbund" + +#: util/errors.c:87 +msgid "bad certificate" +msgstr "Falsches Zertifikat" + +#: util/errors.c:88 +msgid "malformed user id" +msgstr "Ungünstig aufgebaute User-ID" + +#: util/errors.c:89 +msgid "file close error" +msgstr "Fehler beim Schließen der Datei" + +#: util/errors.c:90 +msgid "file rename error" +msgstr "Fehler beim Umbenennen einer Datei" + +#: util/errors.c:91 +msgid "file delete error" +msgstr "Fehler beim Löschen einer Datei" + +#: util/errors.c:92 +msgid "unexpected data" +msgstr "Unerwartete Daten" + +#: util/errors.c:93 +msgid "timestamp conflict" +msgstr "Zeitangaben differieren" + +#: util/errors.c:94 +msgid "unusable pubkey algorithm" +msgstr "Unbenutzbares öffentliches Schlüsselverfahren" + +#: util/errors.c:95 +msgid "file exists" +msgstr "Datei existiert bereits" + +#: util/errors.c:96 +msgid "weak key" +msgstr "Unsicherer Schlüssel" + +#: util/errors.c:97 +msgid "invalid argument" +msgstr "Ungültiges Argument" + +#: util/errors.c:98 +msgid "bad URI" +msgstr "fehlerhafter URI" + +#: util/errors.c:99 +msgid "unsupported URI" +msgstr "Nicht unterstützter URI" + +#: util/errors.c:100 +msgid "network error" +msgstr "Netzwerkfehler" + +#: util/errors.c:102 +msgid "not encrypted" +msgstr "nicht verschlüsselt" + +#: util/errors.c:103 +msgid "not processed" +msgstr "nicht bearbeitet" + +#. the key cannot be used for a specific usage +#: util/errors.c:105 +msgid "unusable public key" +msgstr "unbrauchbarer öffentlicher Schüssel" + +#: util/errors.c:106 +msgid "unusable secret key" +msgstr "unbrauchbarer geheimer Schlüssel" + +#: util/errors.c:107 +msgid "keyserver error" +msgstr "Schlüsselserverfehler" + +#: util/logger.c:183 +msgid "ERROR: " +msgstr "" + +#: util/logger.c:186 +msgid "WARNING: " +msgstr "" + +#: util/logger.c:279 +#, c-format +msgid "... this is a bug (%s:%d:%s)\n" +msgstr "... dies ist ein Bug (Programmfehler) (%s:%d:%s)\n" + +#: util/logger.c:285 +#, c-format +msgid "you found a bug ... (%s:%d)\n" +msgstr "Sie haben eine Bug (Programmfehler) gefunden ... (%s:%d)\n" + +#: cipher/random.c:157 +msgid "no entropy gathering module detected\n" +msgstr "Kein Modul zum sammeln von Entropie vorhanden\n" + +#: cipher/random.c:381 g10/import.c:200 g10/keygen.c:1820 +#, c-format +msgid "can't open `%s': %s\n" +msgstr "'%s' kann nicht geöffnet werden: %s\n" + +#: cipher/random.c:385 +#, c-format +msgid "can't stat `%s': %s\n" +msgstr "Status von '%s' ist nicht feststellbar: %s\n" + +#: cipher/random.c:390 +#, c-format +msgid "`%s' is not a regular file - ignored\n" +msgstr "'%s' ist keine normale Datei - sie bleibt unbeachtet\n" + +#: cipher/random.c:395 +msgid "note: random_seed file is empty\n" +msgstr "Hinweis: 'random_seed'-Datei ist leer\n" + +#: cipher/random.c:401 +msgid "WARNING: invalid size of random_seed file - not used\n" +msgstr "" +"WARNUNG: Falsche Größe der 'random_seed'-Datei - sie wird nicht verwendet\n" + +#: cipher/random.c:409 +#, c-format +msgid "can't read `%s': %s\n" +msgstr "'%s' ist unlesbar: %s\n" + +#: cipher/random.c:447 +msgid "note: random_seed file not updated\n" +msgstr "Hinweis: 'random_seed'-Datei bleibt unverändert\n" + +#: cipher/random.c:467 +#, c-format +msgid "can't create `%s': %s\n" +msgstr "'%s' kann nicht erzeugt werden: %s\n" + +#: cipher/random.c:474 +#, c-format +msgid "can't write `%s': %s\n" +msgstr "kann '%s' nicht schreiben: %s\n" + +#: cipher/random.c:477 +#, c-format +msgid "can't close `%s': %s\n" +msgstr "kann '%s' nicht schliessen: %s\n" + +#: cipher/random.c:723 +msgid "WARNING: using insecure random number generator!!\n" +msgstr "WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen!\n" + +#: cipher/random.c:724 +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 "" +"Der Zufallsgenerator (RNG) ist lediglich ein \"kludge\", damit das\n" +"Programms überhaupt läuft - es ist KEINESFALLS ein starker RNG!\n" +"\n" +"BENUTZEN SIE DIE DURCH DIESES PROGRAMM ERZEUGTEN DATEN NICHT!\n" +"\n" + +#: cipher/rndlinux.c:134 +#, c-format +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" +"Es sind nicht genügend Zufallswerte vorhanden. Bitte führen Sie andere\n" +"Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann!\n" +"(Es werden noch %d Byte benötigt.)\n" + +#: g10/g10.c:316 +msgid "" +"@Commands:\n" +" " +msgstr "" +"@Befehle:\n" +" " + +#: g10/g10.c:318 +msgid "|[file]|make a signature" +msgstr "|[Datei]|Eine Unterschrift erzeugen" + +#: g10/g10.c:319 +msgid "|[file]|make a clear text signature" +msgstr "|[Datei]|Eine Klartextunterschrift erzeugen" + +#: g10/g10.c:320 +msgid "make a detached signature" +msgstr "Eine abgetrennte Unterschrift erzeugen" + +#: g10/g10.c:321 +msgid "encrypt data" +msgstr "Daten verschlüsseln" + +#: g10/g10.c:322 +msgid "|[files]|encrypt files" +msgstr "|[Dateien]|Dateien verschlüsseln" + +#: g10/g10.c:323 +msgid "encryption only with symmetric cipher" +msgstr "Daten symmetrisch verschlüsseln" + +#: g10/g10.c:324 +msgid "store only" +msgstr "Nur speichern" + +#: g10/g10.c:325 +msgid "decrypt data (default)" +msgstr "Daten entschlüsseln (Voreinstellung)" + +#: g10/g10.c:326 +msgid "|[files]|decrypt files" +msgstr "|[Dateien]|Dateien entschlüsseln" + +#: g10/g10.c:327 +msgid "verify a signature" +msgstr "Signatur prüfen" + +#: g10/g10.c:329 +msgid "list keys" +msgstr "Liste der Schlüssel" + +#: g10/g10.c:331 +msgid "list keys and signatures" +msgstr "Liste der Schlüssel und ihrer Signaturen" + +#: g10/g10.c:332 +msgid "check key signatures" +msgstr "Signaturen der Schlüssel prüfen" + +#: g10/g10.c:333 +msgid "list keys and fingerprints" +msgstr "Liste der Schlüssel und ihrer \"Fingerabdrücke\"" + +#: g10/g10.c:334 +msgid "list secret keys" +msgstr "Liste der geheimen Schlüssel" + +#: g10/g10.c:335 +msgid "generate a new key pair" +msgstr "Ein neues Schlüsselpaar erzeugen" + +#: g10/g10.c:336 +msgid "remove keys from the public keyring" +msgstr "Schlüssel aus dem öff. Schlüsselbund entfernen" + +#: g10/g10.c:338 +msgid "remove keys from the secret keyring" +msgstr "Schlüssel aus dem geh. Schlüsselbund entfernen" + +#: g10/g10.c:339 +msgid "sign a key" +msgstr "Schlüssel signieren" + +#: g10/g10.c:340 +msgid "sign a key locally" +msgstr "Schlüssel nur für diesen Rechner signieren" + +#: g10/g10.c:341 +msgid "sign a key non-revocably" +msgstr "Schlüssel nicht widerrufbar signieren" + +#: g10/g10.c:342 +msgid "sign a key locally and non-revocably" +msgstr "Schlüssel nur für diesen Rechner und nicht-widerrufbar signieren" + +#: g10/g10.c:343 +msgid "sign or edit a key" +msgstr "Unterschreiben oder bearbeiten eines Schl." + +#: g10/g10.c:344 +msgid "generate a revocation certificate" +msgstr "Ein Schlüsselwiderruf-Zertifikat erzeugen" + +#: g10/g10.c:346 +msgid "export keys" +msgstr "Schlüssel exportieren" + +#: g10/g10.c:347 +msgid "export keys to a key server" +msgstr "Schlüssel zu einem Schlü.server exportieren" + +#: g10/g10.c:348 +msgid "import keys from a key server" +msgstr "Schlüssel von einem Schlü.server importieren" + +#: g10/g10.c:350 +msgid "search for keys on a key server" +msgstr "Schlüssel auf einem Schlü.server suchen" + +#: g10/g10.c:352 +msgid "update all keys from a keyserver" +msgstr "alle Schlüssel per Schlü.server aktualisieren" + +#: g10/g10.c:356 +msgid "import/merge keys" +msgstr "Schlüssel importieren/kombinieren" + +#: g10/g10.c:358 +msgid "list only the sequence of packets" +msgstr "Lediglich Struktur der Datenpakete anzeigen" + +#: g10/g10.c:360 +msgid "export the ownertrust values" +msgstr "Exportieren der \"Owner trust\"-Werte" + +#: g10/g10.c:362 +msgid "import ownertrust values" +msgstr "Importieren der \"Owner trust\"-Werte" + +#: g10/g10.c:364 +msgid "update the trust database" +msgstr "Ändern der \"Trust\"-Datenbank" + +#: g10/g10.c:366 +msgid "unattended trust database update" +msgstr "unbeaufsichtigtes Ändern der \"Trust\"-Datenbank" + +#: g10/g10.c:367 +msgid "fix a corrupted trust database" +msgstr "Reparieren einer beschädigten \"Trust\"-Datenb." + +#: g10/g10.c:368 +msgid "De-Armor a file or stdin" +msgstr "Datei oder stdin von der ASCII-Hülle befreien" + +#: g10/g10.c:370 +msgid "En-Armor a file or stdin" +msgstr "Datei oder stdin in eine ASCII-Hülle einpacken" + +#: g10/g10.c:372 +msgid "|algo [files]|print message digests" +msgstr "|algo [Dateien]|Message-Digests für die Dateien ausgeben" + +#: g10/g10.c:376 +msgid "" +"@\n" +"Options:\n" +" " +msgstr "" +"@\n" +"Optionen:\n" +" " + +#: g10/g10.c:378 +msgid "create ascii armored output" +msgstr "Ausgabe mit ASCII-Hülle versehen" + +#: g10/g10.c:380 +msgid "|NAME|encrypt for NAME" +msgstr "|NAME|Verschlüsseln für NAME" + +#: g10/g10.c:384 +msgid "|NAME|use NAME as default recipient" +msgstr "|NAME|NAME als voreingestellten Empfänger benutzen" + +#: g10/g10.c:386 +msgid "use the default key as default recipient" +msgstr "" +"Den Standardschlüssel als voreingestellten\n" +"Empfänger benutzen" + +#: g10/g10.c:393 +msgid "use this user-id to sign or decrypt" +msgstr "Mit dieser User-ID signieren" + +#: g10/g10.c:394 +msgid "|N|set compress level N (0 disables)" +msgstr "Kompressionsstufe auf N setzen (0=keine)" + +#: g10/g10.c:396 +msgid "use canonical text mode" +msgstr "Textmodus benutzen" + +#: g10/g10.c:403 +msgid "use as output file" +msgstr "Als Ausgabedatei benutzen" + +#: g10/g10.c:404 +msgid "verbose" +msgstr "Detaillierte Informationen" + +#: g10/g10.c:405 +msgid "be somewhat more quiet" +msgstr "Etwas weniger Infos" + +#: g10/g10.c:406 +msgid "don't use the terminal at all" +msgstr "das Terminal gar nicht benutzen" + +#: g10/g10.c:407 +msgid "force v3 signatures" +msgstr "v3 Signaturen erzwingen" + +#: g10/g10.c:408 +msgid "do not force v3 signatures" +msgstr "v3 Signaturen nicht erzwingen" + +#: g10/g10.c:409 +msgid "force v4 key signatures" +msgstr "v4 Signaturen erzwingen" + +#: g10/g10.c:410 +msgid "do not force v4 key signatures" +msgstr "v4 Signaturen nicht erzwingen" + +#: g10/g10.c:411 +msgid "always use a MDC for encryption" +msgstr "Beim Verschlüsseln ein Siegel (MDC) verwenden" + +#: g10/g10.c:413 +msgid "never use a MDC for encryption" +msgstr "Beim Verschlüsseln niemals ein Siegel (MDC) verwenden" + +#: g10/g10.c:415 +msgid "do not make any changes" +msgstr "Keine wirklichen Änderungen durchführen" + +#: g10/g10.c:416 +msgid "prompt before overwriting" +msgstr "vor Überschreiben nachfragen" + +#: g10/g10.c:417 +msgid "use the gpg-agent" +msgstr "den GPG-Agent verwenden" + +#: g10/g10.c:420 +msgid "batch mode: never ask" +msgstr "Stapelmodus: Keine Abfragen" + +#: g10/g10.c:421 +msgid "assume yes on most questions" +msgstr "\"Ja\" als Standardantwort annehmen" + +#: g10/g10.c:422 +msgid "assume no on most questions" +msgstr "\"Nein\" als Standardantwort annehmen" + +#: g10/g10.c:423 +msgid "add this keyring to the list of keyrings" +msgstr "Als öffentlichen Schlüsselbund mitbenutzen" + +#: g10/g10.c:425 +msgid "add this secret keyring to the list" +msgstr "Als geheimen Schlüsselbund mitbenutzen" + +#: g10/g10.c:426 +msgid "show which keyring a listed key is on" +msgstr "Anzeigen des Schlüsselbundes, in dem ein Schlüssel drin ist" + +#: g10/g10.c:427 +msgid "|NAME|use NAME as default secret key" +msgstr "|NAME|NAME als voreingestellten Schlüssel benutzen" + +#: g10/g10.c:428 +msgid "|HOST|use this keyserver to lookup keys" +msgstr "|HOST|Schlüssel bei diesem Server nachschlagen" + +#: g10/g10.c:432 +msgid "|NAME|set terminal charset to NAME" +msgstr "|NAME|Terminalzeichensatz NAME benutzen" + +#: g10/g10.c:433 +msgid "read options from file" +msgstr "Optionen aus der Datei lesen" + +#: g10/g10.c:437 +msgid "|FD|write status info to this FD" +msgstr "|FD|Statusinfo auf FD (Dateihandle) ausgeben" + +#: g10/g10.c:439 +msgid "|[file]|write status info to file" +msgstr "|[Datei]|Statusinfo in Datei schreiben" + +#: g10/g10.c:451 +msgid "|KEYID|ultimately trust this key" +msgstr "|KEYID|diesem Schlüssel uneingeschränkt vertrauen" + +#: g10/g10.c:452 +msgid "|FILE|load extension module FILE" +msgstr "|DATEI|Erweiterungsmodul DATEI laden" + +#: g10/g10.c:453 +msgid "emulate the mode described in RFC1991" +msgstr "Den in RFC1991 beschriebenen Modus nachahmen" + +#: g10/g10.c:454 +msgid "set all packet, cipher and digest options to OpenPGP behavior" +msgstr "" +"alle Paket-, Verschlüsselungs- und\n" +"Hashoptionen auf OpenPGP-Verhalten einstellen" + +#: g10/g10.c:455 +msgid "set all packet, cipher and digest options to PGP 2.x behavior" +msgstr "" +"alle Paket-, Verschlüsselungs- und\n" +"Hashoptionen auf PGP 2.X-Verhalten einstellen" + +#: g10/g10.c:461 +msgid "|N|use passphrase mode N" +msgstr "|N|Verwenden des Mantra-Modus N" + +#: g10/g10.c:463 +msgid "|NAME|use message digest algorithm NAME for passphrases" +msgstr "|NAME|Hashverfahren NAME für Mantras benutzen" + +#: g10/g10.c:465 +msgid "|NAME|use cipher algorithm NAME for passphrases" +msgstr "|NAME|Verschl.verfahren NAME für Mantras benutzen" + +#: g10/g10.c:467 +msgid "|NAME|use cipher algorithm NAME" +msgstr "|NAME|Verschl.verfahren NAME benutzen" + +#: g10/g10.c:468 +msgid "|NAME|use message digest algorithm NAME" +msgstr "|NAME|Hashverfahren NAME benutzen" + +#: g10/g10.c:470 +msgid "|N|use compress algorithm N" +msgstr "|N|Komprimierverfahren N benutzen" + +#: g10/g10.c:471 +msgid "throw keyid field of encrypted packets" +msgstr "Empfänger-ID verschlüsselter Pakete entfernen" + +#: g10/g10.c:473 +msgid "Show Photo IDs" +msgstr "Foto-IDs anzeigen" + +#: g10/g10.c:474 +msgid "Don't show Photo IDs" +msgstr "Foto-IDs nicht anzeigen" + +#: g10/g10.c:475 +msgid "Set command line to view Photo IDs" +msgstr "Kommandozeilentext für den Foto-Betrachter setzen" + +#: g10/g10.c:481 +msgid "" +"@\n" +"(See the man page for a complete listing of all commands and options)\n" +msgstr "" +"@\n" +"(Auf der \"man\"-Seite ist eine vollständige Liste aller Kommandos und " +"Optionen)\n" + +#: g10/g10.c:484 +msgid "" +"@\n" +"Examples:\n" +"\n" +" -se -r Bob [file] sign and encrypt for user Bob\n" +" --clearsign [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" +msgstr "" +"@\n" +"Beispiele:\n" +"\n" +" -se -r Bob [Datei] Signieren und verschlüsseln für Benutzer Bob\n" +" --clearsign [Datei] Eine Klartextsignatur erzeugen\n" +" --detach-sign [Datei] Eine abgetrennte Signatur erzeugen\n" +" --list-keys [Namen] Schlüssel anzeigen\n" +" --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\n" + +#: g10/g10.c:640 +msgid "Please report bugs to .\n" +msgstr "" +"Berichte über Programmfehler bitte in englisch an .\n" +"Sinn- oder Schreibfehler in den deutschen Texten bitte an .\n" + +#: g10/g10.c:644 +msgid "Usage: gpg [options] [files] (-h for help)" +msgstr "Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)" + +#: g10/g10.c:647 +msgid "" +"Syntax: gpg [options] [files]\n" +"sign, check, encrypt or decrypt\n" +"default operation depends on the input data\n" +msgstr "" +"Aufruf: gpg [Optionen] [Dateien]\n" +"Signieren, prüfen, verschlüsseln, entschlüsseln.\n" +"Die voreingestellte Operation ist abhängig von den Eingabedaten.\n" + +#: g10/g10.c:658 +msgid "" +"\n" +"Supported algorithms:\n" +msgstr "" +"\n" +"Unterstützte Verfahren:\n" + +#: g10/g10.c:762 +msgid "usage: gpg [options] " +msgstr "Aufruf: gpg [Optionen] " + +#: g10/g10.c:830 +msgid "conflicting commands\n" +msgstr "Widersprüchliche Befehle\n" + +#: g10/g10.c:848 +#, c-format +msgid "no = sign found in group definition \"%s\"\n" +msgstr "Kein '='-Zeichen in der Gruppendefinition \"%s\"\n" + +#: g10/g10.c:1008 +#, fuzzy, c-format +msgid "WARNING: unsafe ownership on homedir \"%s\"\n" +msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n" + +#: g10/g10.c:1011 +#, fuzzy, c-format +msgid "WARNING: unsafe ownership on configuration file \"%s\"\n" +msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n" + +#: g10/g10.c:1014 +#, fuzzy, c-format +msgid "WARNING: unsafe ownership on extension \"%s\"\n" +msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n" + +#: g10/g10.c:1020 +#, fuzzy, c-format +msgid "WARNING: unsafe permissions on homedir \"%s\"\n" +msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n" + +#: g10/g10.c:1023 +#, fuzzy, c-format +msgid "WARNING: unsafe permissions on configuration file \"%s\"\n" +msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n" + +#: g10/g10.c:1026 +#, fuzzy, c-format +msgid "WARNING: unsafe permissions on extension \"%s\"\n" +msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n" + +#: g10/g10.c:1032 +#, fuzzy, c-format +msgid "WARNING: unsafe enclosing directory ownership on homedir \"%s\"\n" +msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n" + +#: g10/g10.c:1035 +#, fuzzy, c-format +msgid "" +"WARNING: unsafe enclosing directory ownership on configuration file \"%s\"\n" +msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n" + +#: g10/g10.c:1038 +#, fuzzy, c-format +msgid "WARNING: unsafe enclosing directory ownership on extension \"%s\"\n" +msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n" + +#: g10/g10.c:1044 +#, fuzzy, c-format +msgid "WARNING: unsafe enclosing directory permissions on homedir \"%s\"\n" +msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n" + +#: g10/g10.c:1047 +#, fuzzy, c-format +msgid "" +"WARNING: unsafe enclosing directory permissions on configuration file \"%s" +"\"\n" +msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n" + +#: g10/g10.c:1050 +#, fuzzy, c-format +msgid "WARNING: unsafe enclosing directory permissions on extension \"%s\"\n" +msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n" + +#: g10/g10.c:1236 +#, c-format +msgid "NOTE: old default options file `%s' ignored\n" +msgstr "Hinweis: Alte voreingestellte Optionendatei '%s' wurde ignoriert\n" + +#: g10/g10.c:1272 +#, c-format +msgid "NOTE: no default option file `%s'\n" +msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n" + +#: g10/g10.c:1276 +#, c-format +msgid "option file `%s': %s\n" +msgstr "Optionendatei '%s': %s\n" + +#: g10/g10.c:1283 +#, c-format +msgid "reading options from `%s'\n" +msgstr "Optionen werden aus '%s' gelesen\n" + +#: g10/g10.c:1472 g10/g10.c:1805 g10/g10.c:1816 +#, c-format +msgid "NOTE: %s is not for normal use!\n" +msgstr "Hinweis: %s ist nicht für den üblichen Gebrauch gedacht!\n" + +#: g10/g10.c:1484 +#, c-format +msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n" +msgstr "" +"Verschlüsselungserweiterung \"%s\" wurde wegen falscher Rechte nicht " +"geladen\n" + +#: g10/g10.c:1627 +#, c-format +msgid "%s is not a valid character set\n" +msgstr "%s ist kein gültiger Zeichensatz.\n" + +#: g10/g10.c:1645 +msgid "could not parse keyserver URI\n" +msgstr "Schlüsselserver-URI konnte nicht zerlegt werden\n" + +#: g10/g10.c:1654 +#, c-format +msgid "%s:%d: invalid import options\n" +msgstr "%s:%d: ungültige Import Option.\n" + +#: g10/g10.c:1657 +msgid "invalid import options\n" +msgstr "Ungültige Import Option\n" + +#: g10/g10.c:1664 +#, c-format +msgid "%s:%d: invalid export options\n" +msgstr "%s:%d: ungültige Export Option.\n" + +#: g10/g10.c:1667 +msgid "invalid export options\n" +msgstr "Ungültige export Option\n" + +#: g10/g10.c:1673 +#, c-format +msgid "unable to set exec-path to %s\n" +msgstr "Der Ausführungspfad konnte nicht auf %s gesetzt werden.\n" + +#: g10/g10.c:1794 +msgid "WARNING: program may create a core file!\n" +msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n" + +#: g10/g10.c:1798 +#, c-format +msgid "WARNING: %s overrides %s\n" +msgstr "WARNUNG: %s ersetzt %s\n" + +#: g10/g10.c:1807 g10/g10.c:1826 +#, c-format +msgid "%s not allowed with %s!\n" +msgstr "%s kann nicht zusammen mit %s verwendet werden!\n" + +#: g10/g10.c:1810 +#, c-format +msgid "%s makes no sense with %s!\n" +msgstr "%s zusammen mit %s ist nicht sinnvoll!\n" + +#: g10/g10.c:1836 +msgid "you can only make detached or clear signatures while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus können Sie nur abgetrennte oder Klartextunterschriften " +"machen\n" + +#: g10/g10.c:1842 +msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus können Sie nicht gleichzeitig unterschreiben und " +"verschlüsseln\n" + +#: g10/g10.c:1848 +msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" +msgstr "" +"Im --pgp2-Modus müssen Sie Dateien benutzen und können keine Pipes " +"verwenden.\n" + +#: g10/g10.c:1861 +msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" +msgstr "" +"Verschlüssen einer Botschaft benötigt im --pgp2-Modus die IDEA-" +"Verschlüsselung\n" + +#: g10/encode.c:409 g10/encode.c:459 g10/encode.c:710 g10/g10.c:1886 +#: g10/pkclist.c:821 g10/pkclist.c:859 g10/sign.c:647 g10/sign.c:879 +#, c-format +msgid "this message may not be usable by %s\n" +msgstr "Diese Botschaft könnte für %s unbrauchbar sein\n" + +#: g10/g10.c:1934 g10/g10.c:1952 +msgid "selected cipher algorithm is invalid\n" +msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n" + +#: g10/g10.c:1940 g10/g10.c:1958 +msgid "selected digest algorithm is invalid\n" +msgstr "Das ausgewählte Hashverfahren ist ungültig\n" + +#: g10/g10.c:1946 +msgid "selected certification digest algorithm is invalid\n" +msgstr "Das ausgewählte Hashverfahren ist ungültig\n" + +#: g10/g10.c:1961 +#, c-format +msgid "compress algorithm must be in range %d..%d\n" +msgstr "Das Komprimierverfahren muß im Bereich %d bis %d liegen\n" + +#: g10/g10.c:1963 +msgid "completes-needed must be greater than 0\n" +msgstr "completes-needed müssen größer als 0 sein\n" + +#: g10/g10.c:1965 +msgid "marginals-needed must be greater than 1\n" +msgstr "marginals-needed müssen größer als 1 sein\n" + +#: g10/g10.c:1967 +msgid "max-cert-depth must be in range 1 to 255\n" +msgstr "max-cert-depth muß im Bereich 1 bis 255 liegen\n" + +#: g10/g10.c:1970 +msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" +msgstr "Hinweis: Vom \"simple S2K\"-Modus (0) ist strikt abzuraten\n" + +#: g10/g10.c:1974 +msgid "invalid S2K mode; must be 0, 1 or 3\n" +msgstr "ungültiger \"simple S2K\"-Modus; Wert muß 0, 1 oder 3 sein\n" + +#: g10/g10.c:1978 +msgid "invalid default-check-level; must be 0, 1, 2, or 3\n" +msgstr "ungültiger \"default-check-level\"; Wert muß 0, 1, 2 oder 3 sein\n" + +#: g10/g10.c:1984 +msgid "invalid default preferences\n" +msgstr "ungültige Standard Voreinstellungen\n" + +#: g10/g10.c:1992 +msgid "invalid personal cipher preferences\n" +msgstr "ungültige private Verschlüsselungsvoreinstellungen\n" + +#: g10/g10.c:1996 +msgid "invalid personal digest preferences\n" +msgstr "ungültige private Hashvoreinstellungen\n" + +#: g10/g10.c:2000 +msgid "invalid personal compress preferences\n" +msgstr "ungültige private Komprimierungsvoreinstellungen\n" + +#: g10/g10.c:2093 +#, c-format +msgid "failed to initialize the TrustDB: %s\n" +msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n" + +#: g10/g10.c:2103 +msgid "WARNING: recipients (-r) given without using public key encryption\n" +msgstr "" +"WARNUNG: Empfänger (-r) angegeben ohne Verwendung von Public-Key-Verfahren\n" + +#: g10/g10.c:2113 +msgid "--store [filename]" +msgstr "--store [Dateiname]" + +#: g10/g10.c:2120 +msgid "--symmetric [filename]" +msgstr "--symmetric [Dateiname]" + +#: g10/g10.c:2128 +msgid "--encrypt [filename]" +msgstr "--encrypt [Dateiname]" + +#: g10/g10.c:2145 +msgid "--sign [filename]" +msgstr "--sign [Dateiname]" + +#: g10/g10.c:2158 +msgid "--sign --encrypt [filename]" +msgstr "--sign --encrypt [Dateiname]" + +#: g10/g10.c:2172 +msgid "--sign --symmetric [filename]" +msgstr "--sign --symmetric [Dateiname]" + +#: g10/g10.c:2181 +msgid "--clearsign [filename]" +msgstr "--clearsign [Dateiname]" + +#: g10/g10.c:2199 +msgid "--decrypt [filename]" +msgstr "--decrypt [Dateiname]" + +#: g10/g10.c:2210 +msgid "--sign-key user-id" +msgstr "--sign-key User-ID" + +#: g10/g10.c:2218 +msgid "--lsign-key user-id" +msgstr "--lsign-key User-ID" + +#: g10/g10.c:2226 +msgid "--nrsign-key user-id" +msgstr "--nrsign-key User-ID" + +#: g10/g10.c:2234 +msgid "--nrlsign-key user-id" +msgstr "--nrlsign-key User-ID" + +#: g10/g10.c:2242 +msgid "--edit-key user-id [commands]" +msgstr "--edit-key User-ID [Befehle]" + +#: g10/encode.c:417 g10/g10.c:2298 g10/sign.c:790 +#, c-format +msgid "can't open %s: %s\n" +msgstr "'%s' kann nicht geöffnet werden: %s\n" + +#: g10/g10.c:2313 +msgid "-k[v][v][v][c] [user-id] [keyring]" +msgstr "-k[v][v][v][c] [User-ID] [Schlüsselbund]" + +#: g10/g10.c:2405 +#, c-format +msgid "dearmoring failed: %s\n" +msgstr "Entfernen der ASCII-Hülle ist fehlgeschlagen: %s\n" + +#: g10/g10.c:2413 +#, c-format +msgid "enarmoring failed: %s\n" +msgstr "Anbringen der ASCII-Hülle ist fehlgeschlagen: %s\n" + +#: g10/g10.c:2500 +#, c-format +msgid "invalid hash algorithm `%s'\n" +msgstr "Ungültiges Hashverfahren '%s'\n" + +#: g10/g10.c:2586 +msgid "[filename]" +msgstr "[Dateiname]" + +#: g10/g10.c:2590 +msgid "Go ahead and type your message ...\n" +msgstr "Auf geht's - Botschaft eintippen ...\n" + +#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2593 g10/verify.c:94 +#: g10/verify.c:139 +#, c-format +msgid "can't open `%s'\n" +msgstr "'%s' kann nicht geöffnet werden\n" + +#: g10/g10.c:2807 +msgid "" +"a notation name must have only printable characters or spaces, and end with " +"an '='\n" +msgstr "" +"Ein \"notation\"-Name darf nur Buchstaben, Zahlen, Punkte oder Unterstriche " +"enthalten und muß mit einem '=' enden\n" + +#: g10/g10.c:2816 +msgid "a notation value must not use any control characters\n" +msgstr "Ein \"notation\"-Wert darf keine Kontrollzeichen verwenden\n" + +#: g10/g10.c:2853 +msgid "the given certification policy URL is invalid\n" +msgstr "Die angegebene Zertifikat-Richtlinien-URL ist ungültig\n" + +#: g10/g10.c:2855 +msgid "the given signature policy URL is invalid\n" +msgstr "Die angegebene Unterschriften-Richtlinien-URL ist ungültig\n" + +#: g10/armor.c:314 +#, c-format +msgid "armor: %s\n" +msgstr "ASCII-Hülle: %s\n" + +#: g10/armor.c:343 +msgid "invalid armor header: " +msgstr "Ungültige ASCII-Hülle" + +#: g10/armor.c:350 +msgid "armor header: " +msgstr "ASCII-Hülle: " + +#: g10/armor.c:361 +msgid "invalid clearsig header\n" +msgstr "Ungültige Klartextsignatur-Einleitung\n" + +#: g10/armor.c:413 +msgid "nested clear text signatures\n" +msgstr "verschachtelte Klartextunterschriften\n" + +#: g10/armor.c:537 +msgid "invalid dash escaped line: " +msgstr "Ungültige mit Bindestrich \"escapte\" Zeile: " + +#: g10/armor.c:549 +msgid "unexpected armor:" +msgstr "Unerwartete ASCII-Hülle:" + +#: g10/armor.c:675 g10/armor.c:1242 +#, c-format +msgid "invalid radix64 character %02x skipped\n" +msgstr "Ungültiges \"radix64\" Zeichen %02x ignoriert\n" + +#: g10/armor.c:718 +msgid "premature eof (no CRC)\n" +msgstr "vorzeitiges Dateiende (keine Prüfsumme)\n" + +#: g10/armor.c:752 +msgid "premature eof (in CRC)\n" +msgstr "vorzeitiges Dateiende (innerhalb der Prüfsumme)\n" + +#: g10/armor.c:756 +msgid "malformed CRC\n" +msgstr "Falsch aufgebaute Prüfsumme\n" + +#: g10/armor.c:760 g10/armor.c:1279 +#, c-format +msgid "CRC error; %06lx - %06lx\n" +msgstr "Prüfsummenfehler; %06lx - %06lx\n" + +#: g10/armor.c:780 +msgid "premature eof (in Trailer)\n" +msgstr "vorzeitiges Dateiende (im Nachsatz)\n" + +#: g10/armor.c:784 +msgid "error in trailer line\n" +msgstr "Fehler in der Nachsatzzeile\n" + +#: g10/armor.c:1057 +msgid "no valid OpenPGP data found.\n" +msgstr "Keine gültigen OpenPGP-Daten gefunden.\n" + +#: g10/armor.c:1062 +#, c-format +msgid "invalid armor: line longer than %d characters\n" +msgstr "ungültige ASCII-Hülle: Zeile ist länger als %d Zeichen\n" + +#: g10/armor.c:1066 +msgid "" +"quoted printable character in armor - probably a buggy MTA has been used\n" +msgstr "" +"\"quoted printable\" Zeichen in der ASCII-Hülle gefunden - möglicherweise\n" +" war ein fehlerhafter E-Mail-Transporter(\"MTA\") die Ursache\n" + +#: g10/pkclist.c:62 +msgid "No reason specified" +msgstr "Kein Grund angegeben" + +#: g10/pkclist.c:64 +msgid "Key is superseded" +msgstr "Schlüssel ist überholt" + +#: g10/pkclist.c:66 +msgid "Key has been compromised" +msgstr "Hinweis: Dieser Schlüssel ist nicht mehr sicher" + +#: g10/pkclist.c:68 +msgid "Key is no longer used" +msgstr "Schlüssel wird nicht mehr benutzt" + +#: g10/pkclist.c:70 +msgid "User ID is no longer valid" +msgstr "User-ID ist nicht mehr gültig" + +#: g10/pkclist.c:74 +msgid "reason for revocation: " +msgstr "Grund für Widerruf: " + +#: g10/pkclist.c:91 +msgid "revocation comment: " +msgstr "Widerruf-Bemerkung: " + +#. a string with valid answers +#: g10/pkclist.c:264 +msgid "iImMqQsS" +msgstr "iImMqQsS" + +#: g10/pkclist.c:272 +#, c-format +msgid "" +"No trust value assigned to:\n" +"%4u%c/%08lX %s \"" +msgstr "" +"Es ist kein \"trust value\" zugewiesen für:\n" +"%4u%c/%08lX %s \"" + +#: g10/mainproc.c:1428 g10/pkclist.c:300 +msgid " aka \"" +msgstr " alias \"" + +#: g10/keyedit.c:297 g10/pkclist.c:311 +msgid "" +"Please decide how far you trust this user to correctly\n" +"verify other users' keys (by looking at passports,\n" +"checking fingerprints from different sources...)?\n" +"\n" +msgstr "" +"Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n" +"Schlüssel anderer User korrekt zu prüfen (durch Vergleich\n" +"mit Lichtbildausweisen, Vergleich der Fingerabdrücke aus\n" +"unterschiedlichen Quellen ...)?\n" +"\n" + +#: g10/pkclist.c:315 +#, fuzzy, c-format +msgid " %d = I don't know\n" +msgstr " %d = Weiß nicht so recht\n" + +#: g10/pkclist.c:317 +#, c-format +msgid " %d = I do NOT trust\n" +msgstr " %d = Nein, ihm traue ich NICHT\n" + +#: g10/pkclist.c:319 +#, c-format +msgid " %d = I trust marginally\n" +msgstr " %d = Ich vertraue ihm einigermaßen\n" + +#: g10/pkclist.c:321 +#, c-format +msgid " %d = I trust fully\n" +msgstr " %d = Ich vertraue ihm vollständig\n" + +#: g10/pkclist.c:323 +#, c-format +msgid " %d = I trust ultimately\n" +msgstr " %d = Ich vertraue ihm absolut\n" + +#. not yet implemented +#: g10/pkclist.c:326 +msgid " i = please show me more information\n" +msgstr " i = Bitte weitere Information anzeigen\n" + +#: g10/pkclist.c:329 +msgid " m = back to the main menu\n" +msgstr " m = Zurück zum Menü\n" + +#: g10/pkclist.c:332 +msgid " s = skip this key\n" +msgstr " s = diesen Schlüssel überSpringen\n" + +#: g10/pkclist.c:333 +msgid " q = quit\n" +msgstr " q = verlassen\n" + +#: g10/pkclist.c:337 +#, c-format +msgid "" +"The minimum trust level for this key is: %s\n" +"\n" +msgstr "" + +#: g10/pkclist.c:343 +msgid "Your decision? " +msgstr "Ihre Auswahl? " + +#: g10/pkclist.c:364 +msgid "Do you really want to set this key to ultimate trust? " +msgstr "Möchten Sie diesem Schlüssel wirklich uneingeschränkt vertrauen? " + +#: g10/pkclist.c:378 +msgid "Certificates leading to an ultimately trusted key:\n" +msgstr "Zertifikate führen zu einem letztlich vertrauenswürdigen Schlüssel:\n" + +#: g10/pkclist.c:453 +#, c-format +msgid "key %08lX: key has been revoked!\n" +msgstr "Schlüssel %08lX: Schlüssel wurde widerrufen\n" + +#: g10/pkclist.c:460 g10/pkclist.c:472 g10/pkclist.c:566 +msgid "Use this key anyway? " +msgstr "Diesen Schlüssel trotzdem benutzen? " + +#: g10/pkclist.c:465 +#, c-format +msgid "key %08lX: subkey has been revoked!\n" +msgstr "Schlüssel %08lX: Unterschlüssel wurde widerrufen\n" + +#: g10/pkclist.c:486 +#, c-format +msgid "%08lX: key has expired\n" +msgstr "%08lX: Schlüssel ist verfallen!\n" + +#: g10/pkclist.c:496 +#, c-format +msgid "" +"%08lX: There is no indication that this key really belongs to the owner\n" +msgstr "" +"%08lX: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen " +"Besitzer gehört.\n" + +#: g10/pkclist.c:502 +#, c-format +msgid "%08lX: We do NOT trust this key\n" +msgstr "%08lX: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n" + +#: g10/pkclist.c:508 +#, c-format +msgid "" +"%08lX: It is not sure that this key really belongs to the owner\n" +"but it is accepted anyway\n" +msgstr "" +"%08lX: Es ist nicht sicher, daß dieser Schlüssel wirklich dem vorgeblichen\n" +"Besitzer gehört, aber er wird trotzdem akzeptiert\n" + +#: g10/pkclist.c:514 +msgid "This key probably belongs to the owner\n" +msgstr "" +"Dieser Schlüssel gehört höchstwahrscheinlich dem angegebenen Besitzer\n" + +#: g10/pkclist.c:519 +msgid "This key belongs to us\n" +msgstr "" +"Dieser Schlüssel gehört uns (da wir nämlich den geheimen Schlüssel dazu " +"haben)\n" + +#: g10/pkclist.c:561 +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" +"\n" +msgstr "" +"Es ist NICHT sicher, daß der Schlüssel dem vorgeblichen Besitzer gehört.\n" +"Wenn Sie *wirklich* wissen, was Sie tun, können Sie die nächste\n" +"Frage mit ja beantworten\n" + +#: g10/pkclist.c:575 g10/pkclist.c:597 +msgid "WARNING: Using untrusted key!\n" +msgstr "WARNUNG: Ein Schlüssel ohne gesichertes Vertrauen wird benutzt!\n" + +#: g10/pkclist.c:616 +msgid "WARNING: This key has been revoked by its owner!\n" +msgstr "WARNUNG: Dieser Schlüssel wurde von seinem Besitzer widerrufen!\n" + +#: g10/pkclist.c:617 +msgid " This could mean that the signature is forgery.\n" +msgstr " Das könnte bedeuten, daß die Signatur gefälscht ist.\n" + +#: g10/pkclist.c:623 +msgid "WARNING: This subkey has been revoked by its owner!\n" +msgstr "WARNUNG: Dieser Unterschlüssel wurde von seinem Besitzer widerrufen!\n" + +#: g10/pkclist.c:628 +msgid "Note: This key has been disabled.\n" +msgstr "Hinweis: Dieser Schlüssel wurde abgeschaltet.\n" + +#: g10/pkclist.c:633 +msgid "Note: This key has expired!\n" +msgstr "Hinweis: Dieser Schlüssel ist verfallen!\n" + +#: g10/pkclist.c:644 +msgid "WARNING: This key is not certified with a trusted signature!\n" +msgstr "WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!\n" + +#: g10/pkclist.c:646 +msgid "" +" There is no indication that the signature belongs to the owner.\n" +msgstr "" +" Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen " +"Besitzer gehört.\n" + +#: g10/pkclist.c:654 +msgid "WARNING: We do NOT trust this key!\n" +msgstr "WARNUNG: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n" + +#: g10/pkclist.c:655 +msgid " The signature is probably a FORGERY.\n" +msgstr " Die Signatur ist wahrscheinlich eine FÄLSCHUNG.\n" + +#: g10/pkclist.c:663 +msgid "" +"WARNING: This key is not certified with sufficiently trusted signatures!\n" +msgstr "" +"WARNUNG: Dieser Schlüssel ist nicht durch hinreichend vertrauenswürdige " +"Signaturen zertifiziert!\n" + +#: g10/pkclist.c:665 +msgid " It is not certain that the signature belongs to the owner.\n" +msgstr "" +" Es ist nicht sicher, daß die Signatur wirklich dem vorgeblichen " +"Besitzer gehört.\n" + +#: g10/encode.c:706 g10/pkclist.c:817 g10/pkclist.c:855 +#, c-format +msgid "you may not use %s while in %s mode\n" +msgstr "Die Benutzung von %s ist im %s-Modus nicht erlaubt.\n" + +#: g10/pkclist.c:832 g10/pkclist.c:868 g10/pkclist.c:1020 g10/pkclist.c:1080 +#, c-format +msgid "%s: skipped: %s\n" +msgstr "%s: übersprungen: %s\n" + +#: g10/pkclist.c:842 g10/pkclist.c:1052 +#, c-format +msgid "%s: skipped: public key already present\n" +msgstr "%s: übersprungen: öffentlicher Schlüssel bereits vorhanden\n" + +#: g10/pkclist.c:885 +msgid "You did not specify a user ID. (you may use \"-r\")\n" +msgstr "" +"Sie haben keine User-ID angegeben (Sie können die Option \"-r\" verwenden).\n" + +#: g10/pkclist.c:898 +msgid "" +"\n" +"Enter the user ID. End with an empty line: " +msgstr "" +"\n" +"Geben Sie die User-ID ein. Beenden mit einer leeren Zeile: " + +#: g10/pkclist.c:914 +msgid "No such user ID.\n" +msgstr "Keine solche User-ID vorhanden.\n" + +#: g10/pkclist.c:919 g10/pkclist.c:995 +msgid "skipped: public key already set as default recipient\n" +msgstr "" +"übersprungen: öffentlicher Schlüssel bereits als Standardempfänger gesetzt\n" + +#: g10/pkclist.c:937 +msgid "Public key is disabled.\n" +msgstr "Öffentlicher Schlüssel ist abgeschaltet.\n" + +#: g10/pkclist.c:944 +msgid "skipped: public key already set\n" +msgstr "übersprungen: öffentlicher Schlüssel bereits gesetzt\n" + +#: g10/pkclist.c:987 +#, c-format +msgid "unknown default recipient `%s'\n" +msgstr "Unbekannter voreingestellter Empfänger '%s'\n" + +#: g10/pkclist.c:1032 +#, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: übersprungen: öffentlicher Schlüssel ist abgeschaltet\n" + +#: g10/pkclist.c:1087 +msgid "no valid addressees\n" +msgstr "Keine gültigen Adressaten\n" + +#: g10/keygen.c:184 +#, fuzzy, c-format +msgid "preference `%s' duplicated\n" +msgstr "Voreinstellung %c%lu ist doppelt\n" + +#: g10/keygen.c:191 +#, fuzzy +msgid "too many cipher preferences\n" +msgstr "zu viele `%c' Voreinstellungen\n" + +#: g10/keygen.c:193 +#, fuzzy +msgid "too many digest preferences\n" +msgstr "zu viele `%c' Voreinstellungen\n" + +#: g10/keygen.c:195 +#, fuzzy +msgid "too many compression preferences\n" +msgstr "zu viele `%c' Voreinstellungen\n" + +#: g10/keygen.c:265 +#, fuzzy, c-format +msgid "invalid item `%s' in preference string\n" +msgstr "Ungültiges Zeichen in den Voreinstellungen\n" + +#: g10/keygen.c:535 +msgid "writing direct signature\n" +msgstr "Die \"Direct Key Signature\" wird geschrieben\n" + +#: g10/keygen.c:574 +msgid "writing self signature\n" +msgstr "Die Eigenbeglaubigung wird geschrieben\n" + +#: g10/keygen.c:618 +msgid "writing key binding signature\n" +msgstr "Schreiben der \"key-binding\" Signatur\n" + +#: g10/keygen.c:672 g10/keygen.c:756 g10/keygen.c:847 +#, c-format +msgid "keysize invalid; using %u bits\n" +msgstr "Ungültig Schlüssellänge; %u Bit werden verwendet\n" + +#: g10/keygen.c:677 g10/keygen.c:761 g10/keygen.c:852 +#, c-format +msgid "keysize rounded up to %u bits\n" +msgstr "Schlüssellänge auf %u Bit aufgerundet\n" + +#: g10/keygen.c:952 +msgid "Please select what kind of key you want:\n" +msgstr "Bitte wählen Sie, welche Art von Schlüssel Sie möchten:\n" + +#: g10/keygen.c:954 +#, c-format +msgid " (%d) DSA and ElGamal (default)\n" +msgstr " (%d) DSA und ElGamal (voreingestellt)\n" + +#: g10/keygen.c:955 +#, c-format +msgid " (%d) DSA (sign only)\n" +msgstr " (%d) DSA (nur signieren/beglaubigen)\n" + +#: g10/keygen.c:957 +#, c-format +msgid " (%d) ElGamal (encrypt only)\n" +msgstr " (%d) ElGamal (nur verschlüsseln)\n" + +#: g10/keygen.c:959 +#, c-format +msgid " (%d) ElGamal (sign and encrypt)\n" +msgstr " (%d) ElGamal (signieren/beglaubigen und verschlüsseln)\n" + +#: g10/keygen.c:960 +#, c-format +msgid " (%d) RSA (sign only)\n" +msgstr " (%d) RSA (nur signieren/beglaubigen)\n" + +#: g10/keygen.c:962 +#, c-format +msgid " (%d) RSA (encrypt only)\n" +msgstr " (%d) RSA (nur verschlüsseln)\n" + +#: g10/keygen.c:964 +#, c-format +msgid " (%d) RSA (sign and encrypt)\n" +msgstr " (%d) RSA (signieren/beglaubigen und verschlüsseln)\n" + +#: g10/keyedit.c:306 g10/keyedit.c:327 g10/keyedit.c:343 g10/keyedit.c:700 +#: g10/keygen.c:967 +msgid "Your selection? " +msgstr "Ihre Auswahl? " + +#: g10/keygen.c:977 g10/keygen.c:995 +msgid "The use of this algorithm is deprecated - create anyway? " +msgstr "" +"Von der Benutzung dieses Verfahrens ist abzuraten - Trotzdem erzeugen? " + +#: g10/keyedit.c:713 g10/keygen.c:1009 +msgid "Invalid selection.\n" +msgstr "Ungültige Auswahl.\n" + +#: g10/keygen.c:1022 +#, c-format +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 "" +"Es wird ein neues %s Schlüsselpaar erzeugt.\n" +" kleinste Schlüssellänge ist 768 Bit\n" +" standard Schlüssellänge ist 1024 Bit\n" +" größte sinnvolle Schlüssellänge ist 2048 Bit\n" + +#: g10/keygen.c:1031 +msgid "What keysize do you want? (1024) " +msgstr "Welche Schlüssellänge wünschen Sie? (1024) " + +#: g10/keygen.c:1036 +msgid "DSA only allows keysizes from 512 to 1024\n" +msgstr "DSA erlaubt nur Schlüssellängen von 512 bis 1024\n" + +#: g10/keygen.c:1038 +msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" +msgstr "zu kurz; 1024 ist die kleinste für RSA mögliche Schlüssellänge.\n" + +#: g10/keygen.c:1041 +msgid "keysize too small; 768 is smallest value allowed.\n" +msgstr "zu kurz; 768 ist die kleinste mögliche Schlüssellänge.\n" + +#. It is ridiculous and an annoyance to use larger key sizes! +#. * GnuPG can handle much larger sizes; but it takes an eternity +#. * to create such a key (but less than the time the Sirius +#. * Computer Corporation needs to process one of the usual +#. * complaints) and {de,en}cryption although needs some time. +#. * So, before you complain about this limitation, I suggest that +#. * you start a discussion with Marvin about this theme and then +#. * do whatever you want. +#: g10/keygen.c:1052 +#, c-format +msgid "keysize too large; %d is largest value allowed.\n" +msgstr "Schüsselgröße zu hoch; %d ist der Maximalwert.\n" + +#: g10/keygen.c:1057 +msgid "" +"Keysizes larger than 2048 are not suggested because\n" +"computations take REALLY long!\n" +msgstr "" +"Schlüssellängen größer als 2048 werden nicht empfohlen, da die\n" +"Berechnungen dann WIRKLICH lange brauchen!\n" + +#: g10/keygen.c:1060 +msgid "Are you sure that you want this keysize? " +msgstr "Sind Sie sicher, daß Sie diese Schlüssellänge wünschen? " + +#: g10/keygen.c:1061 +msgid "" +"Okay, but keep in mind that your monitor and keyboard radiation is also very " +"vulnerable to attacks!\n" +msgstr "" +"Gut, aber bitte denken Sie auch daran, daß Monitor und Tastatur Daten " +"abstrahlen und diese leicht mitgelesen werden können.\n" + +#: g10/keygen.c:1070 +#, c-format +msgid "Requested keysize is %u bits\n" +msgstr "Die verlangte Schlüssellänge beträgt %u Bit\n" + +#: g10/keygen.c:1073 g10/keygen.c:1077 +#, c-format +msgid "rounded up to %u bits\n" +msgstr "aufgerundet auf %u Bit\n" + +#: g10/keygen.c:1128 +msgid "" +"Please specify how long the key should be valid.\n" +" 0 = key does not expire\n" +" = key expires in n days\n" +" w = key expires in n weeks\n" +" m = key expires in n months\n" +" y = key expires in n years\n" +msgstr "" +"Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.\n" +" 0 = Schlüssel verfällt nie\n" +" = Schlüssel verfällt nach n Tagen\n" +" w = Schlüssel verfällt nach n Wochen\n" +" m = Schlüssel verfällt nach n Monaten\n" +" y = Schlüssel verfällt nach n Jahren\n" + +#: g10/keygen.c:1137 +msgid "" +"Please specify how long the signature should be valid.\n" +" 0 = signature does not expire\n" +" = signature expires in n days\n" +" w = signature expires in n weeks\n" +" m = signature expires in n months\n" +" y = signature expires in n years\n" +msgstr "" +"Bitte wählen Sie, wie lange die Beglaubigung gültig bleiben soll.\n" +" 0 = Schlüssel verfällt nie\n" +" = Schlüssel verfällt nach n Tagen\n" +" w = Schlüssel verfällt nach n Wochen\n" +" m = Schlüssel verfällt nach n Monaten\n" +" y = Schlüssel verfällt nach n Jahren\n" + +#: g10/keygen.c:1159 +msgid "Key is valid for? (0) " +msgstr "Wie lange bleibt der Schlüssel gültig? (0) " + +#: g10/keygen.c:1161 +msgid "Signature is valid for? (0) " +msgstr "Wie lange bleibt die Beglaubigung gültig? (0) " + +#: g10/keygen.c:1166 +msgid "invalid value\n" +msgstr "Ungültiger Wert.\n" + +#: g10/keygen.c:1171 +#, c-format +msgid "%s does not expire at all\n" +msgstr "%s verfällt nie.\n" + +#. print the date when the key expires +#: g10/keygen.c:1178 +#, c-format +msgid "%s expires at %s\n" +msgstr "%s verfällt am %s\n" + +#: g10/keygen.c:1184 +msgid "" +"Your system can't display dates beyond 2038.\n" +"However, it will be correctly handled up to 2106.\n" +msgstr "" +"Ihr Rechner kann Daten jenseits des Jahres 2038 nicht anzeigen.\n" +"Trotzdem werden Daten bis 2106 korrekt verarbeitet.\n" + +#: g10/keygen.c:1189 +msgid "Is this correct (y/n)? " +msgstr "Ist dies richtig? (j/n) " + +#: g10/keygen.c:1232 +msgid "" +"\n" +"You need a User-ID to identify your key; the software constructs the user " +"id\n" +"from Real Name, Comment and Email Address in this form:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" +msgstr "" +"\n" +"Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das\n" +"Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und\n" +"Ihrer E-Mail-Adresse in dieser Form auf:\n" +" \"Heinrich Heine (Der Dichter) \"\n" +"\n" + +#: g10/keygen.c:1244 +msgid "Real name: " +msgstr "Ihr Name (\"Vorname Nachname\"): " + +#: g10/keygen.c:1252 +msgid "Invalid character in name\n" +msgstr "Ungültiges Zeichen im Namen\n" + +#: g10/keygen.c:1254 +msgid "Name may not start with a digit\n" +msgstr "Der Name darf nicht mit einer Ziffer beginnen.\n" + +#: g10/keygen.c:1256 +msgid "Name must be at least 5 characters long\n" +msgstr "Der Name muß min. 5 Zeichen lang sein.\n" + +#: g10/keygen.c:1264 +msgid "Email address: " +msgstr "E-Mail-Adresse: " + +#: g10/keygen.c:1275 +msgid "Not a valid email address\n" +msgstr "Diese E-Mail-Adresse ist ungültig\n" + +#: g10/keygen.c:1283 +msgid "Comment: " +msgstr "Kommentar: " + +#: g10/keygen.c:1289 +msgid "Invalid character in comment\n" +msgstr "Ungültiges Zeichen im Kommentar.\n" + +#: g10/keygen.c:1312 +#, c-format +msgid "You are using the `%s' character set.\n" +msgstr "Sie benutzen den Zeichensatz `%s'\n" + +#: g10/keygen.c:1318 +#, c-format +msgid "" +"You selected this USER-ID:\n" +" \"%s\"\n" +"\n" +msgstr "" +"Sie haben diese User-ID gewählt:\n" +" \"%s\"\n" +"\n" + +#: g10/keygen.c:1322 +msgid "Please don't put the email address into the real name or the comment\n" +msgstr "Bitte keine E-Mailadressen als Namen oder Kommentar verwenden\n" + +#: g10/keygen.c:1327 +msgid "NnCcEeOoQq" +msgstr "NnKkEeFfBb" + +#: g10/keygen.c:1337 +msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " +msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (B)eenden? " + +#: g10/keygen.c:1338 +msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " +msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? " + +#: g10/keygen.c:1357 +msgid "Please correct the error first\n" +msgstr "Bitte beseitigen Sie zuerst den Fehler\n" + +#: g10/keygen.c:1396 +msgid "" +"You need a Passphrase to protect your secret key.\n" +"\n" +msgstr "" +"Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen.\n" +"\n" + +#: g10/keyedit.c:918 g10/keygen.c:1404 +msgid "passphrase not correctly repeated; try again" +msgstr "Mantra wurde nicht richtig wiederholt; noch einmal versuchen" + +#: g10/keygen.c:1405 +#, c-format +msgid "%s.\n" +msgstr "%s.\n" + +#: g10/keygen.c:1411 +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 "" +"Sie möchten kein Mantra - Dies ist *nicht* zu empfehlen!\n" +"Es ist trotzdem möglich. Sie können Ihr Mantra jederzeit\n" +"ändern, indem sie dieses Programm mit dem Befehl \"--edit-key\"\n" +"aufrufen.\n" +"\n" + +#: g10/keygen.c:1432 +msgid "" +"We need to generate a lot of random bytes. It is a good idea to perform\n" +"some other action (type on the keyboard, move the mouse, utilize the\n" +"disks) during the prime generation; this gives the random number\n" +"generator a better chance to gain enough entropy.\n" +msgstr "" +"Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies\n" +"unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas\n" +"tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.\n" + +#: g10/keygen.c:1996 +msgid "DSA keypair will have 1024 bits.\n" +msgstr "Das DSA-Schlüsselpaar wird 1024 Bit haben.\n" + +#: g10/keygen.c:2050 +msgid "Key generation canceled.\n" +msgstr "Schlüsselerzeugung abgebrochen.\n" + +#: g10/keygen.c:2157 g10/keygen.c:2245 +#, c-format +msgid "writing public key to `%s'\n" +msgstr "schreiben des öffentlichen Schlüssels nach '%s'\n" + +#: g10/keygen.c:2158 g10/keygen.c:2247 +#, c-format +msgid "writing secret key to `%s'\n" +msgstr "schreiben des geheimen Schlüssels nach '%s'\n" + +#: g10/keygen.c:2234 +#, c-format +msgid "no writable public keyring found: %s\n" +msgstr "kein schreibbarer öffentlicher Schlüsselbund gefunden: %s\n" + +#: g10/keygen.c:2240 +#, c-format +msgid "no writable secret keyring found: %s\n" +msgstr "kein schreibbarer geheimer Schlüsselbund gefunden: %s\n" + +#: g10/keygen.c:2254 +#, c-format +msgid "error writing public keyring `%s': %s\n" +msgstr "Fehler beim Schreiben des öff. Schlüsselbundes `%s': %s\n" + +#: g10/keygen.c:2261 +#, c-format +msgid "error writing secret keyring `%s': %s\n" +msgstr "Fehler beim Schreiben des geheimen Schlüsselbundes `%s': %s\n" + +#: g10/keygen.c:2281 +msgid "public and secret key created and signed.\n" +msgstr "Öffentlichen und geheimen Schlüssel erzeugt und signiert.\n" + +#: g10/keygen.c:2282 +msgid "key marked as ultimately trusted.\n" +msgstr "Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.\n" + +#: g10/keygen.c:2293 +msgid "" +"Note that this key cannot be used for encryption. You may want to use\n" +"the command \"--edit-key\" to generate a secondary key for this purpose.\n" +msgstr "" +"Bitte beachten Sie, daß dieser Schlüssel nicht zum Verschlüsseln benutzt\n" +"werden kann. Sie können aber mit dem Befehl \"--edit-key\" einen\n" +"Zweitschlüssel für diesem Zweck erzeugen.\n" + +#: g10/keygen.c:2305 g10/keygen.c:2415 +#, c-format +msgid "Key generation failed: %s\n" +msgstr "Schlüsselerzeugung fehlgeschlagen: %s\n" + +#: g10/keygen.c:2351 g10/sign.c:257 +#, c-format +msgid "" +"key has been created %lu second in future (time warp or clock problem)\n" +msgstr "" +"Der Schlüssel wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder Uhren " +"stimmen nicht überein)\n" + +#: g10/keygen.c:2353 g10/sign.c:259 +#, c-format +msgid "" +"key has been created %lu seconds in future (time warp or clock problem)\n" +msgstr "" +"Der Schlüssel wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder " +"Uhren stimmen nicht überein)\n" + +#: g10/keygen.c:2362 +msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" +msgstr "HINWEIS: Unterschlüssel für v3-Schlüssen sind nicht OpenPGP-konform\n" + +#: g10/keygen.c:2391 +msgid "Really create? " +msgstr "Wirklich erzeugen? " + +#: g10/decrypt.c:92 g10/encode.c:765 +msgid "--output doesn't work for this command\n" +msgstr "--output funktioniert nicht bei diesem Kommando\n" + +#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496 +#: g10/tdbio.c:557 +#, c-format +msgid "%s: can't open: %s\n" +msgstr "%s: kann nicht geöffnet werden: %s\n" + +#: g10/encode.c:205 g10/sign.c:1036 +#, c-format +msgid "error creating passphrase: %s\n" +msgstr "Fehler beim Erzeugen des Mantras: %s\n" + +#: g10/encode.c:210 +msgid "can't use a symmetric ESK packet due to the S2K mode\n" +msgstr "" +"Aufgrund des S2K-Modus kann ein symmetrisches ESK Packet nicht benutzt " +"werden\n" + +#: g10/encode.c:229 g10/encode.c:487 +#, c-format +msgid "`%s' already compressed\n" +msgstr "`%s' ist bereits komprimiert\n" + +#: g10/encode.c:296 g10/encode.c:523 +#, c-format +msgid "%s: WARNING: empty file\n" +msgstr "%s: WARNUNG: Leere Datei\n" + +#: g10/encode.c:407 +msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus kann nur für RSA-Schlüssel mit maximal 2048 Bit " +"verschlüsselt werden\n" + +#: g10/encode.c:423 +#, c-format +msgid "reading from `%s'\n" +msgstr "Lesen von '%s'\n" + +#: g10/encode.c:457 +msgid "" +"unable to use the IDEA cipher for all of the keys you are encrypting to.\n" +msgstr "" +"Die IDEA-Verschlüsselung kann nicht mit allen Zielschlüsseln verwendet " +"werden.\n" + +#: g10/encode.c:468 g10/encode.c:647 +#, c-format +msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" +msgstr "" +"Erzwungene Verwendung des symmetrischen Verschlüsselungsverfahren %s (%d) " +"verletzt die Empfängervoreinstellungen\n" + +#: g10/encode.c:561 g10/sign.c:759 +#, c-format +msgid "forcing compression algorithm %s (%d) violates recipient preferences\n" +msgstr "" +"Erzwungenes Kompressionsverfahren %s (%d) verletzt die " +"Empfängervoreinstellungen.\n" + +#: g10/encode.c:738 +#, c-format +msgid "%s/%s encrypted for: \"%s\"\n" +msgstr "%s/%s verschlüsselt für: %s\n" + +#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2452 +#, c-format +msgid "key `%s' not found: %s\n" +msgstr "Schlüssel `%s' nicht gefunden: %s\n" + +#: g10/delkey.c:81 g10/export.c:213 +#, c-format +msgid "error reading keyblock: %s\n" +msgstr "Fehler beim Lesen des Schlüsselblocks: %s\n" + +#: g10/export.c:222 +#, c-format +msgid "key %08lX: not a rfc2440 key - skipped\n" +msgstr "Schlüssel %08lX: dies ist kein RFC2440-Schüssel - übersprungen\n" + +#: g10/export.c:238 +#, c-format +msgid "key %08lX: not protected - skipped\n" +msgstr "Schlüssel %08lX: ungeschützt - übersprungen\n" + +#: g10/export.c:246 +#, c-format +msgid "key %08lX: PGP 2.x style key - skipped\n" +msgstr "Schlüssel %08lX: PGP 2.x-artiger Schlüssel - übersprungen\n" + +#: g10/export.c:347 +msgid "WARNING: nothing exported\n" +msgstr "WARNUNG: Nichts exportiert\n" + +#: g10/getkey.c:150 +msgid "too many entries in pk cache - disabled\n" +msgstr "zu viele Einträge im pk-Cache - abgeschaltet\n" + +#. fixme: returning translatable constants instead of a user ID is +#. * not good because they are probably not utf-8 encoded. +#: g10/getkey.c:186 g10/getkey.c:2461 +msgid "[User id not found]" +msgstr "[User-ID nicht gefunden]" + +#: g10/getkey.c:1494 +#, c-format +msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n" +msgstr "" +"Ungültiger Schlüssel %08lX, gültig gemacht per --allow-non-selfsigned-uid\n" + +#: g10/getkey.c:2171 +#, c-format +msgid "using secondary key %08lX instead of primary key %08lX\n" +msgstr "" +"der Zweitschlüssel %08lX wird anstelle des Hauptschlüssels %08lX verwendet\n" + +#: g10/getkey.c:2218 +#, c-format +msgid "key %08lX: secret key without public key - skipped\n" +msgstr "" +"Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - " +"übersprungen\n" + +#: g10/import.c:270 +#, c-format +msgid "skipping block of type %d\n" +msgstr "überspringe den Block vom Typ %d\n" + +#: g10/import.c:279 +#, fuzzy, c-format +msgid "%lu keys processed so far\n" +msgstr "%lu Schlüssel bislang bearbeitet\n" + +#: g10/import.c:284 +#, c-format +msgid "error reading `%s': %s\n" +msgstr "Fehler beim Lesen von `%s': %s\n" + +#: g10/import.c:296 +#, c-format +msgid "Total number processed: %lu\n" +msgstr "Anzahl insgesamt bearbeiteter Schlüssel: %lu\n" + +#: g10/import.c:298 +#, c-format +msgid " skipped new keys: %lu\n" +msgstr " ignorierte neue Schlüssel: %lu\n" + +#: g10/import.c:301 +#, c-format +msgid " w/o user IDs: %lu\n" +msgstr " ohne User-ID: %lu\n" + +#: g10/import.c:303 +#, c-format +msgid " imported: %lu" +msgstr " importiert: %lu" + +#: g10/import.c:309 +#, c-format +msgid " unchanged: %lu\n" +msgstr " unverändert: %lu\n" + +#: g10/import.c:311 +#, c-format +msgid " new user IDs: %lu\n" +msgstr " neue User-IDs: %lu\n" + +#: g10/import.c:313 +#, c-format +msgid " new subkeys: %lu\n" +msgstr " neue Unterschlüssel: %lu\n" + +#: g10/import.c:315 +#, c-format +msgid " new signatures: %lu\n" +msgstr " neue Signaturen: %lu\n" + +#: g10/import.c:317 +#, c-format +msgid " new key revocations: %lu\n" +msgstr " neue Schlüsselwiderrufe: %lu\n" + +#: g10/import.c:319 +#, c-format +msgid " secret keys read: %lu\n" +msgstr " gelesene geheime Schlüssel: %lu\n" + +#: g10/import.c:321 +#, c-format +msgid " secret keys imported: %lu\n" +msgstr " geheime Schlüssel importiert: %lu\n" + +#: g10/import.c:323 +#, c-format +msgid " secret keys unchanged: %lu\n" +msgstr " unveränderte geh.Schl.: %lu\n" + +#: g10/import.c:325 +#, c-format +msgid " not imported: %lu\n" +msgstr " nicht importiert: %lu\n" + +#: g10/import.c:593 g10/import.c:908 +#, c-format +msgid "key %08lX: no user ID\n" +msgstr "Schlüssel %08lX: Keine User-ID\n" + +#: g10/import.c:609 +#, c-format +msgid "key %08lX: HKP subkey corruption repaired\n" +msgstr "Schlüssel %08lX: HKP Unterschlüsseldefekt repariert\n" + +#: g10/import.c:624 +#, c-format +msgid "key %08lX: accepted non self-signed user ID '%s'\n" +msgstr "Schlüssel %08lX: Nicht eigenbeglaubigte User-ID `%s' übernommen\n" + +#: g10/import.c:631 +#, c-format +msgid "key %08lX: no valid user IDs\n" +msgstr "Schlüssel %08lX: Keine gültigen User-IDs\n" + +#: g10/import.c:633 +msgid "this may be caused by a missing self-signature\n" +msgstr "dies könnte durch fehlende Eigenbeglaubigung verursacht worden sein\n" + +#: g10/import.c:643 g10/import.c:1001 +#, c-format +msgid "key %08lX: public key not found: %s\n" +msgstr "Schlüssel %08lX: Öffentlicher Schlüssel nicht gefunden: %s\n" + +#: g10/import.c:648 +#, c-format +msgid "key %08lX: new key - skipped\n" +msgstr "Schlüssel %08lX: neuer Schlüssel - übersprungen\n" + +#: g10/import.c:657 +#, c-format +msgid "no writable keyring found: %s\n" +msgstr "kein schreibbarer Schlüsselbund gefunden: %s\n" + +#: g10/import.c:662 g10/openfile.c:244 g10/sign.c:671 g10/sign.c:898 +#, c-format +msgid "writing to `%s'\n" +msgstr "Schreiben nach '%s'\n" + +#: g10/import.c:665 g10/import.c:750 g10/import.c:935 g10/import.c:1061 +#, c-format +msgid "error writing keyring `%s': %s\n" +msgstr "Fehler beim Schreiben des Schlüsselbundes `%s': %s\n" + +#: g10/import.c:682 +#, c-format +msgid "key %08lX: public key \"%s\" imported\n" +msgstr "Schlüssel %08lX: Öffentlicher Schlüssel \"%s\" importiert\n" + +#: g10/import.c:704 +#, c-format +msgid "key %08lX: doesn't match our copy\n" +msgstr "Schlüssel %08lX: Stimmt nicht mit unserer Kopie überein\n" + +#: g10/import.c:721 g10/import.c:1018 +#, c-format +msgid "key %08lX: can't locate original keyblock: %s\n" +msgstr "" +"Schlüssel %08lX: der lokale originale Schlüsselblocks wurde nicht gefunden: %" +"s\n" + +#: g10/import.c:728 g10/import.c:1024 +#, c-format +msgid "key %08lX: can't read original keyblock: %s\n" +msgstr "" +"Schlüssel %08lX: Lesefehler im lokalen originalen Schlüsselblocks: %s\n" + +#: g10/import.c:759 +#, c-format +msgid "key %08lX: \"%s\" 1 new user ID\n" +msgstr "Schlüssel %08lX: \"%s\" 1 neue User-ID\n" + +#: g10/import.c:762 +#, c-format +msgid "key %08lX: \"%s\" %d new user IDs\n" +msgstr "Schlüssel %08lX: \"%s\" %d neue User-IDs\n" + +#: g10/import.c:765 +#, c-format +msgid "key %08lX: \"%s\" 1 new signature\n" +msgstr "Schlüssel %08lX: \"%s\" 1 neue Signatur\n" + +#: g10/import.c:768 +#, c-format +msgid "key %08lX: \"%s\" %d new signatures\n" +msgstr "Schlüssel %08lX: \"%s\" %d neue Signaturen\n" + +#: g10/import.c:771 +#, c-format +msgid "key %08lX: \"%s\" 1 new subkey\n" +msgstr "Schlüssel %08lX: \"%s\" 1 neuer Unterschlüssel\n" + +#: g10/import.c:774 +#, c-format +msgid "key %08lX: \"%s\" %d new subkeys\n" +msgstr "Schlüssel %08lX: \"%s\" %d neue Unterschlüssel\n" + +#: g10/import.c:793 +#, c-format +msgid "key %08lX: \"%s\" not changed\n" +msgstr "Schlüssel %08lX: \"%s\" Nicht geändert\n" + +#: g10/import.c:914 +#, fuzzy, c-format +msgid "key %08lX: secret key with invalid cipher %d - skipped\n" +msgstr "" +"Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - " +"übersprungen\n" + +#: g10/import.c:929 +#, c-format +msgid "no default secret keyring: %s\n" +msgstr "Kein voreingestellter geheimer Schlüsselbund: %s\n" + +#: g10/import.c:940 +#, c-format +msgid "key %08lX: secret key imported\n" +msgstr "Schlüssel %08lX: Geheimer Schlüssel importiert\n" + +#. we can't merge secret keys +#: g10/import.c:956 +#, c-format +msgid "key %08lX: already in secret keyring\n" +msgstr "Schlüssel %08lX: Ist bereits im geheimen Schlüsselbund\n" + +#: g10/import.c:966 +#, c-format +msgid "key %08lX: secret key not found: %s\n" +msgstr "Schlüssel %08lX: geheimer Schlüssel nicht gefunden: %s\n" + +#: g10/import.c:995 +#, c-format +msgid "key %08lX: no public key - can't apply revocation certificate\n" +msgstr "" +"Schlüssel %08lX: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann " +"nicht angebracht werden\n" + +#: g10/import.c:1035 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - rejected\n" +msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n" + +#: g10/import.c:1067 +#, c-format +msgid "key %08lX: \"%s\" revocation certificate imported\n" +msgstr "Schlüssel %08lX: \"%s\" Widerrufzertifikat importiert\n" + +#: g10/import.c:1115 +#, c-format +msgid "key %08lX: no user ID for signature\n" +msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n" + +#: g10/import.c:1128 +#, c-format +msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n" +msgstr "" +"Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren für User-ID \"%s" +"\"\n" + +#: g10/import.c:1130 +#, c-format +msgid "key %08lX: invalid self-signature on user id \"%s\"\n" +msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung für User-ID \"%s\"\n" + +#: g10/import.c:1145 +#, fuzzy, c-format +msgid "key %08lX: no subkey for subkey binding signature\n" +msgstr "Schlüssel %08lX: Kein Unterschlüssel für die Schlüsselanbindung\n" + +#: g10/import.c:1153 g10/import.c:1194 +#, c-format +msgid "key %08lX: unsupported public key algorithm\n" +msgstr "Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren\n" + +#: g10/import.c:1154 +#, c-format +msgid "key %08lX: invalid subkey binding\n" +msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung\n" + +#. Delete the last binding +#. sig since this one is +#. newer +#: g10/import.c:1166 +#, c-format +msgid "key %08lX: removed multiple subkey binding\n" +msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung entfernt\n" + +#: g10/import.c:1186 g10/sig-check.c:550 +#, fuzzy, c-format +msgid "key %08lX: no subkey for subkey revocation signature\n" +msgstr "Schlüssel %08lX: Kein Unterschlüssel für den Schlüsselwiderruf\n" + +#: g10/import.c:1195 +#, c-format +msgid "key %08lX: invalid subkey revocation\n" +msgstr "Schlüssel %08lX: Ungültiger Unterschlüsselwiderruf\n" + +#. Delete the last revocation +#. sig since this one is +#. newer +#: g10/import.c:1206 +#, fuzzy, c-format +msgid "key %08lX: removed multiple subkey revocation signatures\n" +msgstr "Schlüssel %08lX: Mehrfacher Unterschlüssel-Widerruf entfernt\n" + +#: g10/import.c:1243 +#, c-format +msgid "key %08lX: skipped user ID '" +msgstr "Schlüssel %08lX: User-ID übergangen '" + +#: g10/import.c:1266 +#, c-format +msgid "key %08lX: skipped subkey\n" +msgstr "Schlüssel %08lX: Unterschlüssel ignoriert\n" + +#. here we violate the rfc a bit by still allowing +#. * to import non-exportable signature when we have the +#. * the secret key used to create this signature - it +#. * seems that this makes sense +#: g10/import.c:1292 +#, c-format +msgid "key %08lX: non exportable signature (class %02x) - skipped\n" +msgstr "" +"Schlüssel %08lX: Nicht exportfähige Unterschrift (Klasse %02x) - übergangen\n" + +#: g10/import.c:1301 +#, c-format +msgid "key %08lX: revocation certificate at wrong place - skipped\n" +msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n" + +#: g10/import.c:1318 +#, c-format +msgid "key %08lX: invalid revocation certificate: %s - skipped\n" +msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - übergangen\n" + +#: g10/import.c:1330 +#, c-format +msgid "key %08lX: subkey signature in wrong place - skipped\n" +msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n" + +#: g10/import.c:1428 +#, c-format +msgid "key %08lX: duplicated user ID detected - merged\n" +msgstr "Schlüssel %08lX: Doppelte User-ID entdeckt - zusammengeführt\n" + +#: g10/import.c:1487 +#, c-format +msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n" +msgstr "" +"WARNUNG: Schlüssel %08lX ist u.U. widerrufen: hole Widerrufschlüssel %08lX\n" + +#: g10/import.c:1501 +#, c-format +msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n" +msgstr "" +"WARNUNG: Schlüssel %08lX ist u.U. widerrufen: Widerrufschlüssel %08lX ist " +"nicht vorhanden\n" + +#: g10/import.c:1558 +#, c-format +msgid "key %08lX: \"%s\" revocation certificate added\n" +msgstr "Schlüssel %08lX: \"%s\" Widerrufzertifikat hinzugefügt\n" + +#: g10/import.c:1589 +#, c-format +msgid "key %08lX: direct key signature added\n" +msgstr "Schlüssel %08lX: \"direct-key\"-Signaturen hinzugefügt\n" + +#: g10/keyedit.c:151 +msgid "[revocation]" +msgstr "[Widerruf]" + +#: g10/keyedit.c:152 +msgid "[self-signature]" +msgstr "[Eigenbeglaubigung]" + +#: g10/keyedit.c:223 g10/keylist.c:190 +msgid "1 bad signature\n" +msgstr "1 falsche Beglaubigung\n" + +#: g10/keyedit.c:225 g10/keylist.c:192 +#, c-format +msgid "%d bad signatures\n" +msgstr "%d falsche Beglaubigungen\n" + +#: g10/keyedit.c:227 g10/keylist.c:194 +msgid "1 signature not checked due to a missing key\n" +msgstr "1 Beglaubigung wegen fehlendem Schlüssel nicht geprüft\n" + +#: g10/keyedit.c:229 g10/keylist.c:196 +#, c-format +msgid "%d signatures not checked due to missing keys\n" +msgstr "%d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft\n" + +#: g10/keyedit.c:231 g10/keylist.c:198 +msgid "1 signature not checked due to an error\n" +msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n" + +#: g10/keyedit.c:233 g10/keylist.c:200 +#, c-format +msgid "%d signatures not checked due to errors\n" +msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n" + +#: g10/keyedit.c:235 +msgid "1 user ID without valid self-signature detected\n" +msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n" + +#: g10/keyedit.c:237 +#, c-format +msgid "%d user IDs without valid self-signatures detected\n" +msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n" + +#: g10/keyedit.c:300 +#, fuzzy, c-format +msgid " (%d) I trust marginally\n" +msgstr " %d = Ich vertraue ihm einigermaßen\n" + +#: g10/keyedit.c:301 +#, fuzzy, c-format +msgid " (%d) I trust fully\n" +msgstr " %d = Ich vertraue ihm vollständig\n" + +#: g10/keyedit.c:320 +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 "" + +#: g10/keyedit.c:338 +msgid "Please enter a domain to restrict this signature, or enter for none.\n" +msgstr "" + +#: g10/keyedit.c:481 +#, c-format +msgid "User ID \"%s\" is revoked." +msgstr "User-ID \"%s\" ist widerrufen." + +#: g10/keyedit.c:488 g10/keyedit.c:605 g10/keyedit.c:663 g10/keyedit.c:1273 +msgid "Are you sure you still want to sign it? (y/N) " +msgstr "Wollen Sie ihn immmer noch beglaubigen? (j/N) " + +#: g10/keyedit.c:496 g10/keyedit.c:611 g10/keyedit.c:1279 +msgid " Unable to sign.\n" +msgstr " Beglaubigen ist nicht möglich.\n" + +#: g10/keyedit.c:501 +#, c-format +msgid "WARNING: user ID \"%s\" is not self-signed.\n" +msgstr "WARNUNG: User-ID \"%s\" ist nicht eigenbeglaubigt.\n" + +#: g10/keyedit.c:520 +#, c-format +msgid "" +"The self-signature on \"%s\"\n" +"is a PGP 2.x-style signature.\n" +msgstr "" +"Die Eigenbeglaubigung von \"%s\"\n" +"ist eine PGP 2.x artige Signatur.\n" + +#: g10/keyedit.c:529 +msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " +msgstr "Soll sie zu einer OpenPGP Eigenbeglaubigung geändert werden? (j/N) " + +#. It's a local sig, and we want to make a +#. exportable sig. +#: g10/keyedit.c:543 +#, c-format +msgid "" +"Your current signature on \"%s\"\n" +"is a local signature.\n" +msgstr "" +"Die derzeitige Beglaubigung von \"%s\"\n" +"ist nur für diesen Rechner gültig.\n" + +#: g10/keyedit.c:547 +msgid "Do you want to promote it to a full exportable signature? (y/N) " +msgstr "" +"Soll sie zu einer voll exportierbaren Beglaubigung erhoben werden? (j/N) " + +#: g10/keyedit.c:567 +#, c-format +msgid "\"%s\" was already locally signed by key %08lX\n" +msgstr "\"%s\" wurde bereits durch Schlüssel %08lX lokal beglaubigt\n" + +#: g10/keyedit.c:571 +#, c-format +msgid "\"%s\" was already signed by key %08lX\n" +msgstr "\"%s\" wurde bereits durch Schlüssel %08lX beglaubigt\n" + +#: g10/keyedit.c:584 +#, c-format +msgid "Nothing to sign with key %08lX\n" +msgstr "Nichts zu beglaubigen für Schlüssel %08lX\n" + +#: g10/keyedit.c:599 +msgid "This key has expired!" +msgstr "Dieser Schlüssel ist verfallen!" + +#: g10/keyedit.c:619 +#, c-format +msgid "This key is due to expire on %s.\n" +msgstr "Dieser Schlüssel wird %s verfallen.\n" + +#: g10/keyedit.c:623 +msgid "Do you want your signature to expire at the same time? (Y/n) " +msgstr "Soll Ihre Beglaubigung zur selben Zeit verfallen? (J/n) " + +#: g10/keyedit.c:656 +msgid "" +"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " +"mode.\n" +msgstr "" +"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln unterschrieben " +"werden\n" + +#: g10/keyedit.c:658 +msgid "This would make the key unusable in PGP 2.x.\n" +msgstr "Dies würde den Schlüssel für PGP 2.x unbrauchbar machen\n" + +#: g10/keyedit.c:683 +msgid "" +"How carefully have you verified the key you are about to sign actually " +"belongs\n" +"to the person named above? If you don't know what to answer, enter \"0\".\n" +msgstr "" +"Wie genau haben Sie überprüft, ob der Schlüssel, den Sie jetzt beglaubigen\n" +"wollen, wirklich der o.g. Person gehört?\n" +"Wenn Sie darauf keine Antwort wissen, geben Sie \"0\" ein.\n" + +#: g10/keyedit.c:688 +#, c-format +msgid " (0) I will not answer.%s\n" +msgstr " (0) Ich antworte nicht.%s\n" + +#: g10/keyedit.c:690 +#, c-format +msgid " (1) I have not checked at all.%s\n" +msgstr " (1) Ich habe es überhaupt nicht überprüft.%s\n" + +#: g10/keyedit.c:692 +#, c-format +msgid " (2) I have done casual checking.%s\n" +msgstr " (2) Ich habe es flüchtig überprüft.%s\n" + +#: g10/keyedit.c:694 +#, c-format +msgid " (3) I have done very careful checking.%s\n" +msgstr " (3) Ich habe es sehr sorgfältig überprüft.%s\n" + +#: g10/keyedit.c:723 +msgid "" +"Are you really sure that you want to sign this key\n" +"with your key: \"" +msgstr "" +"Sind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem\n" +"Schlüssel beglaubigen wollen: \"" + +#: g10/keyedit.c:732 +msgid "" +"\n" +"This will be a self-signature.\n" +msgstr "" +"\n" +"Dies wird eine Eigenbeglaubigung sein.\n" + +#: g10/keyedit.c:736 +msgid "" +"\n" +"WARNING: the signature will not be marked as non-exportable.\n" +msgstr "" +"\n" +"WARNUNG: Die Unterschrift wird nicht als nicht-exportierbar markiert " +"werden.\n" + +#: g10/keyedit.c:741 +msgid "" +"\n" +"WARNING: the signature will not be marked as non-revocable.\n" +msgstr "" +"\n" +"Die Unterschrift wird nicht als nicht-widerrufbar markiert werden.\n" + +#: g10/keyedit.c:748 +msgid "" +"\n" +"The signature will be marked as non-exportable.\n" +msgstr "" +"\n" +"Die Unterschrift wird als nicht exportfähig markiert werden.\n" + +#: g10/keyedit.c:752 +msgid "" +"\n" +"The signature will be marked as non-revocable.\n" +msgstr "" +"\n" +"Die Unterschrift wird als nicht exportfähig markiert werden.\n" + +#: g10/keyedit.c:757 +msgid "" +"\n" +"I have not checked this key at all.\n" +msgstr "" +"\n" +"Ich habe diesen Schlüssel überhaupt nicht überprüft.\n" + +#: g10/keyedit.c:761 +msgid "" +"\n" +"I have checked this key casually.\n" +msgstr "" +"\n" +"Ich habe diesen Schlüssel flüchtig überprüft.\n" + +#: g10/keyedit.c:765 +msgid "" +"\n" +"I have checked this key very carefully.\n" +msgstr "" +"\n" +"Ich habe diesen Schlüssel sehr sorgfältig überprüft.\n" + +#: g10/keyedit.c:774 +msgid "Really sign? " +msgstr "Wirklich unterschreiben? " + +#: g10/keyedit.c:819 g10/keyedit.c:3263 g10/keyedit.c:3325 g10/sign.c:308 +#, c-format +msgid "signing failed: %s\n" +msgstr "Beglaubigung fehlgeschlagen: %s\n" + +#: g10/keyedit.c:875 +msgid "This key is not protected.\n" +msgstr "Dieser Schlüssel ist nicht geschützt.\n" + +#: g10/keyedit.c:879 +msgid "Secret parts of primary key are not available.\n" +msgstr "Geheime Teile des Haupschlüssels sind nicht vorhanden\n" + +#: g10/keyedit.c:883 +msgid "Key is protected.\n" +msgstr "Schlüssel ist geschützt.\n" + +#: g10/keyedit.c:903 +#, c-format +msgid "Can't edit this key: %s\n" +msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n" + +#: g10/keyedit.c:909 +msgid "" +"Enter the new passphrase for this secret key.\n" +"\n" +msgstr "" +"Geben Sie das neue Mantra für diesen geheimen Schlüssel ein.\n" +"\n" + +#: g10/keyedit.c:923 +msgid "" +"You don't want a passphrase - this is probably a *bad* idea!\n" +"\n" +msgstr "" +"Sie wollen kein Mantra - dies ist bestimmt *keine* gute Idee!\n" +"\n" + +#: g10/keyedit.c:926 +msgid "Do you really want to do this? " +msgstr "Möchten Sie dies wirklich tun? " + +#: g10/keyedit.c:990 +msgid "moving a key signature to the correct place\n" +msgstr "schiebe eine Beglaubigung an die richtige Stelle\n" + +#: g10/keyedit.c:1032 +msgid "quit this menu" +msgstr "Menü verlassen" + +#: g10/keyedit.c:1033 +msgid "q" +msgstr "q" + +#: g10/keyedit.c:1034 +msgid "save" +msgstr "save" + +#: g10/keyedit.c:1034 +msgid "save and quit" +msgstr "speichern und Menü verlassen" + +#: g10/keyedit.c:1035 +msgid "help" +msgstr "help" + +#: g10/keyedit.c:1035 +msgid "show this help" +msgstr "Diese Hilfe zeigen" + +#: g10/keyedit.c:1037 +msgid "fpr" +msgstr "fpr" + +#: g10/keyedit.c:1037 +msgid "show fingerprint" +msgstr "\"Fingerabdruck\" anzeigen" + +#: g10/keyedit.c:1038 +msgid "list" +msgstr "Liste der Schlüssel" + +#: g10/keyedit.c:1038 +msgid "list key and user IDs" +msgstr "Schlüssel und User-IDs auflisten" + +#: g10/keyedit.c:1039 +msgid "l" +msgstr "l" + +#: g10/keyedit.c:1040 +msgid "uid" +msgstr "uid" + +#: g10/keyedit.c:1040 +msgid "select user ID N" +msgstr "User-ID N auswählen" + +#: g10/keyedit.c:1041 +msgid "key" +msgstr "key" + +#: g10/keyedit.c:1041 +msgid "select secondary key N" +msgstr "Zweitschlüssel N auswählen" + +#: g10/keyedit.c:1042 +msgid "check" +msgstr "check" + +#: g10/keyedit.c:1042 +msgid "list signatures" +msgstr "Liste der Signaturen" + +#: g10/keyedit.c:1043 +msgid "c" +msgstr "c" + +#: g10/keyedit.c:1044 +msgid "sign" +msgstr "sign" + +#: g10/keyedit.c:1044 +msgid "sign the key" +msgstr "Den Schlüssel signieren" + +#: g10/keyedit.c:1045 +msgid "s" +msgstr "s" + +#: g10/keyedit.c:1046 +#, fuzzy +msgid "tsign" +msgstr "sign" + +#: g10/keyedit.c:1046 +#, fuzzy +msgid "make a trust signature" +msgstr "Eine abgetrennte Unterschrift erzeugen" + +#: g10/keyedit.c:1047 +msgid "lsign" +msgstr "lsign" + +#: g10/keyedit.c:1047 +msgid "sign the key locally" +msgstr "Den Schlüssel nur für diesen Rechner beglaubigen" + +#: g10/keyedit.c:1048 +msgid "nrsign" +msgstr "nrsign" + +#: g10/keyedit.c:1048 +msgid "sign the key non-revocably" +msgstr "Den Schlüssel nicht-widerrufbar beglaubigen" + +#: g10/keyedit.c:1049 +msgid "nrlsign" +msgstr "nrlsign" + +#: g10/keyedit.c:1049 +msgid "sign the key locally and non-revocably" +msgstr "Den Schlüssel nicht-widerrufbar und nur für diesen Rechner signieren" + +#: g10/keyedit.c:1050 +msgid "debug" +msgstr "debug" + +#: g10/keyedit.c:1051 +msgid "adduid" +msgstr "adduid" + +#: g10/keyedit.c:1051 +msgid "add a user ID" +msgstr "Eine User-ID hinzufügen" + +#: g10/keyedit.c:1052 +msgid "addphoto" +msgstr "addphoto" + +#: g10/keyedit.c:1052 +msgid "add a photo ID" +msgstr "Eine Foto-ID hinzufügen" + +#: g10/keyedit.c:1053 +msgid "deluid" +msgstr "deluid" + +#: g10/keyedit.c:1053 +msgid "delete user ID" +msgstr "User-ID entfernen" + +#. delphoto is really deluid in disguise +#: g10/keyedit.c:1055 +msgid "delphoto" +msgstr "delphoto" + +#: g10/keyedit.c:1056 +msgid "addkey" +msgstr "addkey" + +#: g10/keyedit.c:1056 +msgid "add a secondary key" +msgstr "Einen Zweitschlüssel hinzufügen" + +#: g10/keyedit.c:1057 +msgid "delkey" +msgstr "delkey" + +#: g10/keyedit.c:1057 +msgid "delete a secondary key" +msgstr "Einen Zweitschlüssel entfernen" + +#: g10/keyedit.c:1058 +msgid "addrevoker" +msgstr "addrevoker" + +#: g10/keyedit.c:1058 +msgid "add a revocation key" +msgstr "Einen Widerrufschlüssel hinzufügen" + +#: g10/keyedit.c:1059 +msgid "delsig" +msgstr "delsig" + +#: g10/keyedit.c:1059 +msgid "delete signatures" +msgstr "Signatur entfernen" + +#: g10/keyedit.c:1060 +msgid "expire" +msgstr "expire" + +#: g10/keyedit.c:1060 +msgid "change the expire date" +msgstr "Ändern des Verfallsdatums" + +#: g10/keyedit.c:1061 +msgid "primary" +msgstr "primary" + +#: g10/keyedit.c:1061 +msgid "flag user ID as primary" +msgstr "User-ID als Haupt-User-ID kennzeichnen" + +#: g10/keyedit.c:1062 +msgid "toggle" +msgstr "toggle" + +#: g10/keyedit.c:1062 +msgid "toggle between secret and public key listing" +msgstr "Umschalten zwischen Anzeige geheimer und öffentlicher Schlüssel" + +#: g10/keyedit.c:1064 +msgid "t" +msgstr "t" + +#: g10/keyedit.c:1065 +msgid "pref" +msgstr "pref" + +#: g10/keyedit.c:1065 +msgid "list preferences (expert)" +msgstr "Liste der Voreinstellungen (für Experten)" + +#: g10/keyedit.c:1066 +msgid "showpref" +msgstr "showpref" + +#: g10/keyedit.c:1066 +msgid "list preferences (verbose)" +msgstr "Liste der Voreinstellungen (ausführlich)" + +#: g10/keyedit.c:1067 +msgid "setpref" +msgstr "setpref" + +#: g10/keyedit.c:1067 +msgid "set preference list" +msgstr "Liste der Voreinstellungen einstellen" + +#: g10/keyedit.c:1068 +msgid "updpref" +msgstr "updpref" + +#: g10/keyedit.c:1068 +msgid "updated preferences" +msgstr "geänderte Voreinstellungen" + +#: g10/keyedit.c:1069 +msgid "passwd" +msgstr "passwd" + +#: g10/keyedit.c:1069 +msgid "change the passphrase" +msgstr "Das Mantra ändern" + +#: g10/keyedit.c:1070 +msgid "trust" +msgstr "trust" + +#: g10/keyedit.c:1070 +msgid "change the ownertrust" +msgstr "Den \"Owner trust\" ändern" + +#: g10/keyedit.c:1071 +msgid "revsig" +msgstr "revsig" + +#: g10/keyedit.c:1071 +msgid "revoke signatures" +msgstr "Signaturen widerrufen" + +#: g10/keyedit.c:1072 +msgid "revkey" +msgstr "revkey" + +#: g10/keyedit.c:1072 +msgid "revoke a secondary key" +msgstr "Einen Zweitschlüssel widerrufen" + +#: g10/keyedit.c:1073 +msgid "disable" +msgstr "disable" + +#: g10/keyedit.c:1073 +msgid "disable a key" +msgstr "Schlüssel abschalten" + +#: g10/keyedit.c:1074 +msgid "enable" +msgstr "enable" + +#: g10/keyedit.c:1074 +msgid "enable a key" +msgstr "Schlüssel anschalten" + +#: g10/keyedit.c:1075 +msgid "showphoto" +msgstr "showphoto" + +#: g10/keyedit.c:1075 +msgid "show photo ID" +msgstr "Foto-ID anzeigen" + +#: g10/delkey.c:119 g10/keyedit.c:1095 +msgid "can't do that in batchmode\n" +msgstr "Dies kann im Batchmodus nicht durchgeführt werden.\n" + +#: g10/keyedit.c:1132 +#, c-format +msgid "error reading secret keyblock `%s': %s\n" +msgstr "Fehler beim Lesen des geheimen Schlüsselblocks `%s': %s\n" + +#: g10/keyedit.c:1150 +msgid "Secret key is available.\n" +msgstr "Geheimer Schlüssel ist vorhanden.\n" + +#: g10/keyedit.c:1181 +msgid "Command> " +msgstr "Befehl> " + +#: g10/keyedit.c:1213 +msgid "Need the secret key to do this.\n" +msgstr "Hierzu wird der geheime Schlüssel benötigt.\n" + +#: g10/keyedit.c:1217 +msgid "Please use the command \"toggle\" first.\n" +msgstr "Bitte verwenden sie zunächst den Befehl \"toggle\"\n" + +#: g10/keyedit.c:1267 +msgid "Key is revoked." +msgstr "Schlüssel wurde widerrufen." + +#: g10/keyedit.c:1286 +msgid "Really sign all user IDs? " +msgstr "Wirklich alle User-IDs beglaubigen? " + +#: g10/keyedit.c:1287 +msgid "Hint: Select the user IDs to sign\n" +msgstr "Tip: Wählen Sie die User-IDs, die beglaubigt werden sollen\n" + +#: g10/keyedit.c:1313 +#, c-format +msgid "This command is not allowed while in %s mode.\n" +msgstr "Dieses Kommando ist im %s-Modus nicht erlaubt.\n" + +#: g10/keyedit.c:1333 g10/keyedit.c:1354 +msgid "You must select at least one user ID.\n" +msgstr "Zumindestens eine User-ID muß ausgewählt werden.\n" + +#: g10/keyedit.c:1335 +msgid "You can't delete the last user ID!\n" +msgstr "Die letzte User-ID kann nicht gelöscht werden!\n" + +#: g10/keyedit.c:1338 +msgid "Really remove all selected user IDs? " +msgstr "Möchten Sie alle ausgewählten User-IDs wirklich entfernen? " + +#: g10/keyedit.c:1339 +msgid "Really remove this user ID? " +msgstr "Diese User-ID wirklich entfernen? " + +#: g10/keyedit.c:1377 g10/keyedit.c:1414 +msgid "You must select at least one key.\n" +msgstr "Zumindestens ein Schlüssel muß ausgewählt werden.\n" + +#: g10/keyedit.c:1381 +msgid "Do you really want to delete the selected keys? " +msgstr "Möchten Sie die ausgewählten Schlüssel wirklich entfernen? " + +#: g10/keyedit.c:1382 +msgid "Do you really want to delete this key? " +msgstr "Möchten Sie diesen Schlüssel wirklich entfernen? " + +#: g10/keyedit.c:1418 +msgid "Do you really want to revoke the selected keys? " +msgstr "Möchten Sie die ausgewählten Schlüssel wirklich widerrufen? " + +#: g10/keyedit.c:1419 +msgid "Do you really want to revoke this key? " +msgstr "Möchten Sie diesen Schlüssel wirklich wiederrufen? " + +#: g10/keyedit.c:1483 +#, fuzzy +msgid "Current preference list:\n" +msgstr "Liste der Voreinstellungen einstellen" + +#: g10/keyedit.c:1489 +msgid "Really update the preferences for the selected user IDs? " +msgstr "" +"Möchten Sie die Voreinstellungen der ausgewählten User-IDs wirklich ändern? " + +#: g10/keyedit.c:1491 +msgid "Really update the preferences? " +msgstr "Die Voreinstellungen wirklich ändern? " + +#: g10/keyedit.c:1529 +msgid "Save changes? " +msgstr "Änderungen speichern? " + +#: g10/keyedit.c:1532 +msgid "Quit without saving? " +msgstr "Beenden ohne zu speichern? " + +#: g10/keyedit.c:1543 +#, c-format +msgid "update failed: %s\n" +msgstr "Änderung fehlgeschlagen: %s\n" + +#: g10/keyedit.c:1550 +#, c-format +msgid "update secret failed: %s\n" +msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n" + +#: g10/keyedit.c:1557 +msgid "Key not changed so no update needed.\n" +msgstr "Schlüssel ist nicht geändert worden, also ist kein Speichern nötig.\n" + +#: g10/keyedit.c:1569 +msgid "Invalid command (try \"help\")\n" +msgstr "Ungültiger Befehl (versuchen Sie's mal mit \"help\")\n" + +#: g10/keyedit.c:1885 +#, c-format +msgid "This key may be revoked by %s key " +msgstr "Dieser Schlüssel könnte widerrufen worden sein von %s Schlüssel " + +#: g10/keyedit.c:1889 +msgid " (sensitive)" +msgstr "(empfindlich)" + +#. Note, we use the same format string as in other show +#. functions to make the translation job easier. +#: g10/keyedit.c:1895 g10/keyedit.c:1921 g10/keyedit.c:2006 g10/keyedit.c:2021 +#, c-format +msgid "%s%c %4u%c/%08lX created: %s expires: %s" +msgstr "%s%c %4u%c/%08lX erstellt: %s verfällt: %s" + +#: g10/keyedit.c:1904 +#, c-format +msgid " trust: %c/%c" +msgstr " Vertrauen: %c/%c" + +#: g10/keyedit.c:1908 +msgid "This key has been disabled" +msgstr "Hinweis: Dieser Schlüssel ist abgeschaltet" + +#: g10/keyedit.c:1937 +#, c-format +msgid "rev! subkey has been revoked: %s\n" +msgstr "rev! Unterschlüssel wurde widerrufen: %s\n" + +#: g10/keyedit.c:1940 +msgid "rev- faked revocation found\n" +msgstr "rev- gefälschter Schlüsselwiderruf entdeckt\n" + +#: g10/keyedit.c:1942 +#, c-format +msgid "rev? problem checking revocation: %s\n" +msgstr "rev? Schwierigkeiten bei der Widerruf-Überprüfung: %s\n" + +#: g10/keyedit.c:1972 +msgid "There are no preferences on a PGP 2.x-style user ID.\n" +msgstr "PGP 2.x-artige Schlüssel haben keine Voreinstellungen.\n" + +#: g10/keyedit.c:1980 +msgid "" +"Please note that the shown key validity is not necessarily correct\n" +"unless you restart the program.\n" +msgstr "" +"Bitte beachten Sie, daß ohne einen Programmneustart die angezeigte\n" +"Schlüsselgültigkeit nicht notwendigerweise korrekt ist.\n" + +#: g10/keyedit.c:2137 +msgid "" +"WARNING: This is a PGP2-style key. Adding a photo ID may cause some " +"versions\n" +" of PGP to reject this key.\n" +msgstr "" +"WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID " +"könnte\n" +" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n" + +#: g10/keyedit.c:2142 g10/keyedit.c:2415 +msgid "Are you sure you still want to add it? (y/N) " +msgstr "Wollen Sie ihn immmer noch hinzufügen? (j/N) " + +#: g10/keyedit.c:2148 +msgid "You may not add a photo ID to a PGP2-style key.\n" +msgstr "Sie können einem PGP2-artigen Schlüüsel keine Foto-ID hinzufügen.\n" + +#: g10/keyedit.c:2283 +msgid "Delete this good signature? (y/N/q)" +msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)" + +#: g10/keyedit.c:2293 +msgid "Delete this invalid signature? (y/N/q)" +msgstr "Diese ungültige Beglaubigung entfernen= (j/N/q)" + +#: g10/keyedit.c:2297 +msgid "Delete this unknown signature? (y/N/q)" +msgstr "Diese unbekannte Beglaubigung entfernen? (j/N/q)" + +#: g10/keyedit.c:2303 +msgid "Really delete this self-signature? (y/N)" +msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)" + +#: g10/keyedit.c:2317 +#, c-format +msgid "Deleted %d signature.\n" +msgstr "%d Beglaubigungen entfernt.\n" + +#: g10/keyedit.c:2318 +#, c-format +msgid "Deleted %d signatures.\n" +msgstr "%d Beglaubigungen entfernt.\n" + +#: g10/keyedit.c:2321 +msgid "Nothing deleted.\n" +msgstr "Nichts entfernt.\n" + +#: g10/keyedit.c:2410 +#, fuzzy +msgid "" +"WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " +"cause\n" +" some versions of PGP to reject this key.\n" +msgstr "" +"WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID " +"könnte\n" +" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n" + +#: g10/keyedit.c:2421 +#, fuzzy +msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" +msgstr "Sie können einem PGP2-artigen Schlüüsel keine Foto-ID hinzufügen.\n" + +#: g10/keyedit.c:2444 +msgid "Enter the user ID of the designated revoker: " +msgstr "Geben sie die User-ID des designierten Widerrufers ein: " + +#: g10/keyedit.c:2459 +msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" +msgstr "" +"Ein PGP 2.x-artiger Schlüssel kann nicht als designierter Widerrufer " +"eingetragen werden\n" + +#. This actually causes no harm (after all, a key that +#. designates itself as a revoker is the same as a +#. regular key), but it's easy enough to check. +#: g10/keyedit.c:2474 +msgid "you cannot appoint a key as its own designated revoker\n" +msgstr "" +"Ein Schlüssel kann nicht als sein eigener designierter Widerrufer agieren\n" + +#: g10/keyedit.c:2496 +#, fuzzy +msgid "this key has already been designated as a revoker\n" +msgstr "" +"Ein Schlüssel kann nicht als sein eigener designierter Widerrufer agieren\n" + +#: g10/keyedit.c:2592 +msgid "Please remove selections from the secret keys.\n" +msgstr "Bitte entfernen Sie die Auswahl von den geheimen Schlüsseln.\n" + +#: g10/keyedit.c:2598 +msgid "Please select at most one secondary key.\n" +msgstr "Bitte wählen Sie höchstens einen Zweitschlüssel aus.\n" + +#: g10/keyedit.c:2602 +msgid "Changing expiration time for a secondary key.\n" +msgstr "Ändern des Verfallsdatums des Zweitschlüssels.\n" + +#: g10/keyedit.c:2604 +msgid "Changing expiration time for the primary key.\n" +msgstr "Ändern des Verfallsdatums des Hauptschlüssels.\n" + +#: g10/keyedit.c:2646 +msgid "You can't change the expiration date of a v3 key\n" +msgstr "Sie können das Verfallsdatum eines v3-Schlüssels nicht ändern\n" + +#: g10/keyedit.c:2662 +msgid "No corresponding signature in secret ring\n" +msgstr "Keine entsprechende Signatur im geheimen Schlüsselbund\n" + +#: g10/keyedit.c:2745 +msgid "Please select exactly one user ID.\n" +msgstr "Bitte genau eine User-ID auswählen.\n" + +#: g10/keyedit.c:2782 g10/keyedit.c:2889 +#, c-format +msgid "skipping v3 self-signature on user id \"%s\"\n" +msgstr "Überspringen der v3 Eigenbeglaubigung von User-ID \"%s\"\n" + +#: g10/keyedit.c:2949 +#, c-format +msgid "No user ID with index %d\n" +msgstr "Keine User-ID mit Index %d\n" + +#: g10/keyedit.c:2995 +#, c-format +msgid "No secondary key with index %d\n" +msgstr "Kein Zweitschlüssel mit Index %d\n" + +#: g10/keyedit.c:3109 +msgid "user ID: \"" +msgstr "User-ID: \"" + +#: g10/keyedit.c:3114 +#, c-format +msgid "" +"\"\n" +"signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"unterschrieben mit Ihrem Schlüssel %08lX um %s\n" + +#: g10/keyedit.c:3117 +#, c-format +msgid "" +"\"\n" +"locally signed with your key %08lX at %s\n" +msgstr "" +"\"\n" +"lokal unterschrieben mit Ihrem Schlüssel %08lX um %s\n" + +#: g10/keyedit.c:3122 +#, c-format +msgid "This signature expired on %s.\n" +msgstr "Diese Unterschrift ist seit %s verfallen.\n" + +#: g10/keyedit.c:3126 +msgid "Are you sure you still want to revoke it? (y/N) " +msgstr "Wollen Sie ihn immmer noch widerrufen? (j/N) " + +#: g10/keyedit.c:3130 +msgid "Create a revocation certificate for this signature? (y/N) " +msgstr "Ein Widerrufszertifikat für diese Unterschrift erzeugen (j/N)" + +#. FIXME: detect duplicates here +#: g10/keyedit.c:3155 +msgid "You have signed these user IDs:\n" +msgstr "Sie haben folgende User-IDs beglaubigt:\n" + +#: g10/keyedit.c:3174 +#, c-format +msgid " signed by %08lX at %s%s%s\n" +msgstr " beglaubigt durch %08lX um %s%s%s\n" + +#: g10/keyedit.c:3182 +#, c-format +msgid " revoked by %08lX at %s\n" +msgstr " widerrufen durch %08lX um %s\n" + +#: g10/keyedit.c:3202 +msgid "You are about to revoke these signatures:\n" +msgstr "Es werden nun folgende Beglaubigungen entfernt:\n" + +#: g10/keyedit.c:3212 +#, c-format +msgid " signed by %08lX at %s%s\n" +msgstr " beglaubigt durch %08lX am %s%s\n" + +#: g10/keyedit.c:3214 +msgid " (non-exportable)" +msgstr " (nicht-exportierbar)" + +#: g10/keyedit.c:3221 +msgid "Really create the revocation certificates? (y/N) " +msgstr "Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) " + +#: g10/keyedit.c:3251 +msgid "no secret key\n" +msgstr "Kein geheimer Schlüssel\n" + +#: g10/keyedit.c:3406 +#, c-format +msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n" +msgstr "" +"Anzeigen einer %s Photo ID (%ld Byte) für Schlüssel %08lX (User-ID %d)\n" + +#: g10/keylist.c:133 +msgid "Critical signature policy: " +msgstr "Krititische Beglaubigungsrichtlinie: " + +#: g10/keylist.c:135 +msgid "Signature policy: " +msgstr "Beglaubigungsrichtlinie: " + +#: g10/keylist.c:160 g10/keylist.c:183 g10/mainproc.c:769 g10/mainproc.c:778 +msgid "WARNING: invalid notation data found\n" +msgstr "WARNUNG: Ungültige \"Notation\"-Daten gefunden\n" + +#: g10/keylist.c:169 +msgid "Critical signature notation: " +msgstr "Krititische Beglaubigungs-\"Notation\": " + +#: g10/keylist.c:171 +msgid "Signature notation: " +msgstr "Beglaubigungs-\"Notation\": " + +#: g10/keylist.c:178 +msgid "not human readable" +msgstr "nicht als Klartext darstellbar" + +#: g10/keylist.c:267 +msgid "Keyring" +msgstr "Schlüsselbund" + +#. of subkey +#: g10/keylist.c:536 g10/mainproc.c:905 +#, c-format +msgid " [expires: %s]" +msgstr " [verfällt: %s]" + +#: g10/keylist.c:1063 +msgid "Primary key fingerprint:" +msgstr "Haupt-Fingerabdruck =" + +#: g10/keylist.c:1065 +msgid " Subkey fingerprint:" +msgstr "Unter-Fingerabdruck =" + +#: g10/keylist.c:1072 +msgid " Primary key fingerprint:" +msgstr " Haupt-Fingerabdruck =" + +#: g10/keylist.c:1074 +msgid " Subkey fingerprint:" +msgstr " Unter-Fingerabdruck =" + +#. use tty +#: g10/keylist.c:1078 g10/keylist.c:1082 +#, fuzzy +msgid " Key fingerprint =" +msgstr " Schl.-Fingerabdruck =" + +#: g10/mainproc.c:248 +#, c-format +msgid "weird size for an encrypted session key (%d)\n" +msgstr "Seltsame Länge des verschlüsselten Session-Keys (%d)\n" + +#: g10/mainproc.c:259 +#, c-format +msgid "invalid symkey algorithm detected (%d)\n" +msgstr "Ungültiger Veschlüsselungsalgorithmus entdeckt (%d)\n" + +#: g10/encr-data.c:66 g10/mainproc.c:288 +#, c-format +msgid "%s encrypted data\n" +msgstr "%s verschlüsselte Daten\n" + +#: g10/encr-data.c:68 g10/mainproc.c:290 +#, c-format +msgid "encrypted with unknown algorithm %d\n" +msgstr "Mit unbekanntem Verfahren verschlüsselt %d\n" + +#: g10/mainproc.c:318 +#, c-format +msgid "public key is %08lX\n" +msgstr "Öffentlicher Schlüssel ist %08lX\n" + +#: g10/mainproc.c:364 +msgid "public key encrypted data: good DEK\n" +msgstr "Mit öffentlichem Schüssel verschlüsselte Daten: Korrekte DEK\n" + +#: g10/mainproc.c:416 +#, c-format +msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n" +msgstr "verschlüsselt mit %u-Bit %s Schlüssel, ID %08lX, erzeugt %s\n" + +# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( +# [kw] +#: g10/mainproc.c:426 +#, c-format +msgid "encrypted with %s key, ID %08lX\n" +msgstr "verschlüsselt mit %s Schlüssel, ID %08lX\n" + +#: g10/mainproc.c:440 +#, c-format +msgid "public key decryption failed: %s\n" +msgstr "Entschlüsselung mit öffentlichem Schlüssel fehlgeschlagen: %s\n" + +#: g10/mainproc.c:467 g10/mainproc.c:486 +#, c-format +msgid "assuming %s encrypted data\n" +msgstr "vermutlich %s-verschlüsselte Daten\n" + +#: g10/mainproc.c:474 +#, c-format +msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" +msgstr "IDEA-Verschlüsselung nicht verfügbar; versucht wird stattdessen %s\n" + +#: g10/mainproc.c:504 +msgid "decryption okay\n" +msgstr "Entschlüsselung erfolgreich\n" + +#: g10/mainproc.c:511 +msgid "WARNING: encrypted message has been manipulated!\n" +msgstr "Warnung: Verschlüsselte Botschaft ist manipuliert worden!\n" + +#: g10/mainproc.c:517 +#, c-format +msgid "decryption failed: %s\n" +msgstr "Entschlüsselung fehlgeschlagen: %s\n" + +#: g10/mainproc.c:536 +msgid "NOTE: sender requested \"for-your-eyes-only\"\n" +msgstr "" +"Hinweis: Der Absender verlangte Vertraulichkeit(\"for-your-eyes-only\")\n" + +#: g10/mainproc.c:538 +#, c-format +msgid "original file name='%.*s'\n" +msgstr "Ursprünglicher Dateiname='%.*s'\n" + +#: g10/mainproc.c:713 +msgid "standalone revocation - use \"gpg --import\" to apply\n" +msgstr "" +"Einzelner Widerruf - verwenden Sie \"gpg --import\" um ihn anzuwenden\n" + +#: g10/mainproc.c:781 +msgid "Notation: " +msgstr "\"Notation\": " + +#: g10/mainproc.c:793 +msgid "Policy: " +msgstr "Richtlinie: " + +#: g10/mainproc.c:1248 +msgid "signature verification suppressed\n" +msgstr "Unterschriften-Überprüfung unterdrückt\n" + +#. plaintext before signatures but no one-pass packets +#: g10/mainproc.c:1290 g10/mainproc.c:1300 +msgid "can't handle these multiple signatures\n" +msgstr "diese Mehrfachunterschriften können nicht behandelt werden\n" + +# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( +#: g10/mainproc.c:1311 +#, c-format +msgid "Signature made %.*s using %s key ID %08lX\n" +msgstr "Unterschrift vom %.*s, %s Schlüssel ID %08lX\n" + +#: g10/mainproc.c:1360 g10/mainproc.c:1393 +msgid "BAD signature from \"" +msgstr "FALSCHE Unterschrift von \"" + +#: g10/mainproc.c:1361 g10/mainproc.c:1394 +msgid "Expired signature from \"" +msgstr "Verfallene Unterschrift von \"" + +#: g10/mainproc.c:1362 g10/mainproc.c:1395 +msgid "Good signature from \"" +msgstr "Korrekte Unterschrift von \"" + +#: g10/mainproc.c:1397 +msgid "[uncertain]" +msgstr "[ungewiß] " + +#: g10/mainproc.c:1489 +#, c-format +msgid "Can't check signature: %s\n" +msgstr "Unterschrift kann nicht geprüft werden: %s\n" + +#: g10/mainproc.c:1558 g10/mainproc.c:1574 g10/mainproc.c:1636 +msgid "not a detached signature\n" +msgstr "keine abgetrennte Unterschrift\n" + +#: g10/mainproc.c:1585 +#, c-format +msgid "standalone signature of class 0x%02x\n" +msgstr "Einzelne Unterschrift der Klasse 0x%02x\n" + +#: g10/mainproc.c:1642 +msgid "old style (PGP 2.x) signature\n" +msgstr "Unterschrift nach alter (PGP 2.x) Art\n" + +#: g10/mainproc.c:1649 +msgid "invalid root packet detected in proc_tree()\n" +msgstr "ungültiges root-Paket in proc_tree() entdeckt\n" + +#: g10/misc.c:98 +#, c-format +msgid "can't disable core dumps: %s\n" +msgstr "core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s\n" + +#: g10/misc.c:162 +msgid "Experimental algorithms should not be used!\n" +msgstr "Experimentiermethoden sollten nicht benutzt werden!\n" + +#: g10/misc.c:192 +msgid "this cipher algorithm is deprecated; please use a more standard one!\n" +msgstr "Es ist davon abzuraten, diese Verschlüsselungsmethode zu benutzen!\n" + +#: g10/misc.c:300 +msgid "the IDEA cipher plugin is not present\n" +msgstr "das IDEA-Verschlüsselungs-Plugin ist nicht vorhanden\n" + +#: g10/misc.c:301 +msgid "" +"please see http://www.gnupg.org/why-not-idea.html for more information\n" +msgstr "Für weitere Info siehe http://www.gnupg.org/why-not-idea.html\n" + +#: g10/misc.c:509 +#, c-format +msgid "%s:%d: deprecated option \"%s\"\n" +msgstr "%s:%d: mißbilligte Option \"%s\".\n" + +#: g10/misc.c:513 +#, c-format +msgid "WARNING: \"%s\" is a deprecated option\n" +msgstr "WARNUNG: \"%s\" ist eine mißbilligte Option.\n" + +#: g10/misc.c:515 +#, c-format +msgid "please use \"%s%s\" instead\n" +msgstr "Bitte benutzen Sie stattdessen \"%s%s\".\n" + +#: g10/parse-packet.c:120 +#, c-format +msgid "can't handle public key algorithm %d\n" +msgstr "dieses Public-Key Verfahren %d kann nicht benutzt werden\n" + +#: g10/parse-packet.c:1072 +#, c-format +msgid "subpacket of type %d has critical bit set\n" +msgstr "Im Unterpaket des Typs %d ist das \"critical bit\" gesetzt\n" + +#: g10/passphrase.c:442 g10/passphrase.c:489 +msgid "gpg-agent is not available in this session\n" +msgstr "GPG-Agent ist in dieser Sitzung nicht vorhanden\n" + +#: g10/passphrase.c:450 +msgid "can't set client pid for the agent\n" +msgstr "Client-PID für den Agent kann nicht gesetzt werden\n" + +#: g10/passphrase.c:458 +msgid "can't get server read FD for the agent\n" +msgstr "Server-Lese-Handle für den Agent nicht verfügbar\n" + +#: g10/passphrase.c:465 +msgid "can't get server write FD for the agent\n" +msgstr "Server-Schreib-Handle für den Agent nicht verfügbar\n" + +#: g10/passphrase.c:498 +msgid "malformed GPG_AGENT_INFO environment variable\n" +msgstr "fehlerhaft aufgebaute GPG_AGENT_INFO - Umgebungsvariable\n" + +#: g10/passphrase.c:511 +#, c-format +msgid "gpg-agent protocol version %d is not supported\n" +msgstr "GPG-Agent-Protokoll-Version %d wird nicht unterstützt\n" + +#: g10/passphrase.c:532 +#, c-format +msgid "can't connect to `%s': %s\n" +msgstr "Verbindung zu '%s' kann nicht aufgebaut werden: %s\n" + +#: g10/passphrase.c:554 +msgid "communication problem with gpg-agent\n" +msgstr "Kommunikationsproblem mit GPG-Agent\n" + +#: g10/passphrase.c:561 g10/passphrase.c:812 g10/passphrase.c:920 +msgid "problem with the agent - disabling agent use\n" +msgstr "" +"Schwierigkeiten mit dem Agenten - Agent-Ansteuerung wird abgeschaltet\n" + +#: g10/passphrase.c:631 g10/passphrase.c:1019 +#, c-format +msgid " (main key ID %08lX)" +msgstr " (Hauptschlüssel-ID %08lX)" + +#: g10/passphrase.c:641 +#, c-format +msgid "" +"You need a passphrase to unlock the secret key for user:\n" +"\"%.*s\"\n" +"%u-bit %s key, ID %08lX, created %s%s\n" +msgstr "" +"Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n" +"Benutzer: \"\"%.*s\"\n" +"%u-bit %s Schlüssel, ID %08lX, erzeugt %s%s\n" + +#: g10/passphrase.c:662 +msgid "Enter passphrase\n" +msgstr "Geben Sie das Mantra ein\n" + +#: g10/passphrase.c:664 +msgid "Repeat passphrase\n" +msgstr "Geben Sie das Mantra nochmal ein\n" + +#: g10/passphrase.c:705 +msgid "passphrase too long\n" +msgstr "Mantra ist zu lang\n" + +#: g10/passphrase.c:718 +msgid "invalid response from agent\n" +msgstr "Falsche Antwort des Agenten\n" + +#: g10/passphrase.c:727 g10/passphrase.c:809 +msgid "cancelled by user\n" +msgstr "Abbruch durch Benutzer\n" + +#: g10/passphrase.c:729 g10/passphrase.c:891 +#, c-format +msgid "problem with the agent: agent returns 0x%lx\n" +msgstr "Schwierigkeiten mit dem Agenten: Agent antwortet 0x%lx\n" + +#: g10/passphrase.c:1005 +msgid "" +"\n" +"You need a passphrase to unlock the secret key for\n" +"user: \"" +msgstr "" +"\n" +"Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n" +"Benutzer: \"" + +#: g10/passphrase.c:1014 +#, c-format +msgid "%u-bit %s key, ID %08lX, created %s" +msgstr "%u-Bit %s Schlüssel, ID %08lX, erzeugt %s" + +#: g10/passphrase.c:1065 +msgid "can't query password in batchmode\n" +msgstr "Mantra kann im Batchmodus nicht abgefragt werden\n" + +#: g10/passphrase.c:1069 +msgid "Enter passphrase: " +msgstr "Geben Sie das Mantra ein: " + +#: g10/passphrase.c:1073 +msgid "Repeat passphrase: " +msgstr "Geben Sie das Mantra nochmal ein: " + +#: g10/plaintext.c:70 +msgid "data not saved; use option \"--output\" to save it\n" +msgstr "" +"Daten wurden nicht gespeichert; verwenden Sie dafür die Option \"--output\"\n" + +#: g10/plaintext.c:112 g10/plaintext.c:125 +#, c-format +msgid "error creating `%s': %s\n" +msgstr "Fehler beim Erstellen von `%s': %s\n" + +#: g10/plaintext.c:362 +msgid "Detached signature.\n" +msgstr "Abgetrennte Beglaubigungen.\n" + +#: g10/plaintext.c:366 +msgid "Please enter name of data file: " +msgstr "Bitte geben Sie den Namen der Datendatei ein: " + +#: g10/plaintext.c:387 +msgid "reading stdin ...\n" +msgstr "lese stdin ...\n" + +#: g10/plaintext.c:421 +msgid "no signed data\n" +msgstr "keine unterschriebene Daten\n" + +#: g10/plaintext.c:429 +#, c-format +msgid "can't open signed data `%s'\n" +msgstr "kann signierte Datei '%s' nicht öffnen.\n" + +#: g10/pubkey-enc.c:102 +#, c-format +msgid "anonymous recipient; trying secret key %08lX ...\n" +msgstr "Ungenannter Empfänger; Versuch mit geheimen Schlüssel %08lX ...\n" + +#: g10/pubkey-enc.c:118 +msgid "okay, we are the anonymous recipient.\n" +msgstr "Alles klar, wir sind der ungenannte Empfänger.\n" + +#: g10/pubkey-enc.c:170 +msgid "old encoding of the DEK is not supported\n" +msgstr "alte Kodierung des DEK wird nicht unterstützt\n" + +#: g10/pubkey-enc.c:189 +#, c-format +msgid "cipher algorithm %d%s is unknown or disabled\n" +msgstr "Verschüsselungsverfahren %d%s ist unbekannt oder abgeschaltet\n" + +#: g10/pubkey-enc.c:232 +#, c-format +msgid "NOTE: cipher algorithm %d not found in preferences\n" +msgstr "Hinweis: Verfahren %d ist kein bevorzugtes Verschlüsselungsverfahren\n" + +#: g10/pubkey-enc.c:254 +#, c-format +msgid "NOTE: secret key %08lX expired at %s\n" +msgstr "Hinweis: geheimer Schlüssel %08lX verfällt am %s\n" + +#: g10/pubkey-enc.c:260 +msgid "NOTE: key has been revoked" +msgstr "Hinweis: Schlüssel wurde widerrufen" + +#: g10/seckey-cert.c:53 +msgid "secret key parts are not available\n" +msgstr "Teile des geheimen Schlüssels sind nicht vorhanden\n" + +#: g10/seckey-cert.c:59 +#, c-format +msgid "protection algorithm %d%s is not supported\n" +msgstr "Schutzverfahren %d%s wird nicht unterstützt\n" + +#: g10/seckey-cert.c:234 +msgid "Invalid passphrase; please try again" +msgstr "Ungültiges Mantra; versuchen Sie es bitte noch einmal" + +#: g10/seckey-cert.c:235 +#, c-format +msgid "%s ...\n" +msgstr "%s ...\n" + +#: g10/seckey-cert.c:292 +msgid "WARNING: Weak key detected - please change passphrase again.\n" +msgstr "" +"WARNUNG: Unsicherer Schlüssel entdeckt -\n" +" bitte Mantra nochmals wechseln.\n" + +#: g10/seckey-cert.c:330 +msgid "generating the deprecated 16-bit checksum for secret key protection\n" +msgstr "" +"Die mißbilligte 16-bit Prüfsumme wird zum Schutz des geheimen Schlüssels " +"benutzt\n" + +#: g10/sig-check.c:73 +msgid "WARNING: signature digest conflict in message\n" +msgstr "WARNUNG: Widersprechende Hashverfahren in der signierten Nachricht\n" + +#: g10/sig-check.c:213 +#, c-format +msgid "" +"key %08lX: this is a PGP generated ElGamal key which is NOT secure for " +"signatures!\n" +msgstr "" +"Schlüssel %08lX: Dieser durch PGP erzeugte ElGamal-Schlüssel ist für " +"Signaturen NICHT sicher genug!\n" + +#: g10/sig-check.c:222 +#, c-format +msgid "public key %08lX is %lu second newer than the signature\n" +msgstr "" +"Öffentlicher Schlüssel %08lX ist um %lu Sekunde jünger als die Unterschrift\n" + +#: g10/sig-check.c:223 +#, c-format +msgid "public key %08lX is %lu seconds newer than the signature\n" +msgstr "" +"Öffentlicher Schlüssel %08lX ist um %lu Sekunden jünger als die " +"Unterschrift\n" + +#: g10/sig-check.c:232 +#, c-format +msgid "" +"key %08lX has been created %lu second in future (time warp or clock " +"problem)\n" +msgstr "" +"Der Schlüssel %08lX wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder " +"Uhren stimmen nicht überein)\n" + +#: g10/sig-check.c:234 +#, c-format +msgid "" +"key %08lX has been created %lu seconds in future (time warp or clock " +"problem)\n" +msgstr "" +"Der Schlüssel %08lX wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise " +"oder Uhren stimmen nicht überein)\n" + +#: g10/sig-check.c:247 +#, c-format +msgid "NOTE: signature key %08lX expired %s\n" +msgstr "Hinweis: Signaturschlüssel %08lX ist am %s verfallen.\n" + +#: g10/sig-check.c:346 +#, c-format +msgid "assuming bad signature from key %08lX due to an unknown critical bit\n" +msgstr "" +"Vermutlich eine FALSCHE Unterschrift von Schlüssel %08lX, wegen unbekanntem " +"\"critical bit\"\n" + +#: g10/sign.c:103 +#, c-format +msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" +msgstr "" +"WARNUNG: \"Notation\" kann nicht %%-erweitert werden (zu groß). Verwende " +"\"unerweiterte\".\n" + +#: g10/sign.c:151 +#, c-format +msgid "" +"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n" +msgstr "" +"WARNUNG: Richtlinien-URL kann nicht %%-erweitert werden (zu gro0). Verwende " +"\"unerweiterte\".\n" + +#: g10/sign.c:303 +#, c-format +msgid "checking created signature failed: %s\n" +msgstr "Prüfung der erstellten Unterschrift ist fehlgeschlagen: %s\n" + +#: g10/sign.c:312 +#, c-format +msgid "%s signature from: \"%s\"\n" +msgstr "%s Unterschrift von: \"%s\"\n" + +#: g10/sign.c:462 +#, c-format +msgid "WARNING: `%s' is an empty file\n" +msgstr "WARNUNG: '%s' ist eine leere Datei.\n" + +#: g10/sign.c:645 +msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln eine abgetrennte " +"Unterschrift erzeugt werden\n" + +#: g10/sign.c:666 g10/sign.c:893 +#, c-format +msgid "can't create %s: %s\n" +msgstr "%s kann nicht erzeugt werden: %s\n" + +#: g10/sign.c:691 +#, c-format +msgid "forcing digest algorithm %s (%d) violates recipient preferences\n" +msgstr "" +"Erzwingen des Hashverfahrens %s (%d) verletzt die Empfängervoreinstellungen\n" + +#: g10/sign.c:785 +msgid "signing:" +msgstr "unterschreibe:" + +#: g10/sign.c:877 +msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" +msgstr "" +"Im --pgp2-Modus können Sie Klartextunterschriften nur mit PGP-2.x-artigen " +"Schlüssel machen\n" + +#: g10/sign.c:1030 +#, c-format +msgid "%s encryption will be used\n" +msgstr "%s Verschlüsselung wird verwendet\n" + +#: g10/textfilter.c:134 +#, c-format +msgid "can't handle text lines longer than %d characters\n" +msgstr "Textzeilen länger als %d Zeichen können nicht benutzt werden\n" + +#: g10/textfilter.c:231 +#, c-format +msgid "input line longer than %d characters\n" +msgstr "Eingabezeile ist länger als %d Zeichen\n" + +#: g10/tdbio.c:128 g10/tdbio.c:1389 +#, c-format +msgid "trustdb rec %lu: lseek failed: %s\n" +msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n" + +#: g10/tdbio.c:134 g10/tdbio.c:1396 +#, c-format +msgid "trustdb rec %lu: write failed (n=%d): %s\n" +msgstr "trustdb Satz %lu: write fehlgeschlagen (n=%d): %s\n" + +#: g10/tdbio.c:244 +msgid "trustdb transaction too large\n" +msgstr "trustdb Transaktion zu groß\n" + +#: g10/tdbio.c:459 +#, c-format +msgid "%s: can't access: %s\n" +msgstr "%s: kann nicht zugegriffen werden: %s\n" + +#: g10/tdbio.c:474 +#, c-format +msgid "%s: directory does not exist!\n" +msgstr "%s: Verzeichnis existiert nicht!\n" + +#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545 +#, c-format +msgid "%s: can't create lock\n" +msgstr "%s: Sperre kann nicht erzeugt werden\n" + +#: g10/tdbio.c:486 g10/tdbio.c:548 +#, c-format +msgid "%s: can't make lock\n" +msgstr "%s: Sperre kann nicht erzeugt werden\n" + +#: g10/keyring.c:1453 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492 +#, c-format +msgid "%s: can't create: %s\n" +msgstr "%s: kann nicht erzeugt werden: %s\n" + +#: g10/tdbio.c:507 +#, c-format +msgid "%s: failed to create version record: %s" +msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s" + +#: g10/tdbio.c:511 +#, c-format +msgid "%s: invalid trustdb created\n" +msgstr "%s: ungültige trust-db erzeugt\n" + +#: g10/tdbio.c:514 +#, c-format +msgid "%s: trustdb created\n" +msgstr "%s: trust-db erzeugt\n" + +#: g10/tdbio.c:554 +msgid "NOTE: trustdb not writable\n" +msgstr "Notiz: Die \"trustdb\" ist nicht schreibbar\n" + +#: g10/tdbio.c:570 +#, c-format +msgid "%s: invalid trustdb\n" +msgstr "%s: ungültige 'Trust'-Datenbank\n" + +#: g10/tdbio.c:602 +#, c-format +msgid "%s: failed to create hashtable: %s\n" +msgstr "%s: hashtable kann nicht erzeugt werden: %s\n" + +#: g10/tdbio.c:610 +#, c-format +msgid "%s: error updating version record: %s\n" +msgstr "%s: Fehler beim Ändern des Versionsatzes: %s\n" + +#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706 +#: g10/tdbio.c:1322 g10/tdbio.c:1349 +#, c-format +msgid "%s: error reading version record: %s\n" +msgstr "%s: Fehler beim Lesen des Versionsatzes: %s\n" + +#: g10/tdbio.c:639 g10/tdbio.c:685 +#, c-format +msgid "%s: error writing version record: %s\n" +msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n" + +#: g10/tdbio.c:1124 +#, c-format +msgid "trustdb: lseek failed: %s\n" +msgstr "trustdb: lseek fehlgeschlagen: %s\n" + +#: g10/tdbio.c:1132 +#, c-format +msgid "trustdb: read failed (n=%d): %s\n" +msgstr "trustdb: read failed (n=%d): %s\n" + +#: g10/tdbio.c:1153 +#, c-format +msgid "%s: not a trustdb file\n" +msgstr "%s: keine trustdb Datei\n" + +#: g10/tdbio.c:1170 +#, c-format +msgid "%s: version record with recnum %lu\n" +msgstr "%s: version record with recnum %lu\n" + +#: g10/tdbio.c:1175 +#, c-format +msgid "%s: invalid file version %d\n" +msgstr "%s: invalid file version %d\n" + +#: g10/tdbio.c:1355 +#, c-format +msgid "%s: error reading free record: %s\n" +msgstr "%s: Fehler beim Lesen eines freien Satzes: %s\n" + +#: g10/tdbio.c:1363 +#, c-format +msgid "%s: error writing dir record: %s\n" +msgstr "%s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s\n" + +#: g10/tdbio.c:1373 +#, c-format +msgid "%s: failed to zero a record: %s\n" +msgstr "%s: konnte einen Satz nicht Nullen: %s\n" + +#: g10/tdbio.c:1403 +#, c-format +msgid "%s: failed to append a record: %s\n" +msgstr "%s: konnte Satz nicht anhängen: %s\n" + +#: g10/tdbio.c:1448 +msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" +msgstr "" +"Die \"Trust\"-Datenbank ist beschädigt; verwenden Sie \"gpg --fix-trustdb" +"\".\n" + +#: g10/trustdb.c:213 +#, c-format +msgid "`%s' is not a valid long keyID\n" +msgstr "'%s' ist keine gültige lange Schlüssel-ID\n" + +#: g10/trustdb.c:248 +#, c-format +msgid "key %08lX: accepted as trusted key\n" +msgstr "Schlüssel %08lX: Akzeptiert als vertrauenswürdiger Schlüssel\n" + +#: g10/trustdb.c:286 +#, c-format +msgid "key %08lX occurs more than once in the trustdb\n" +msgstr "Schlüssel %08lX tritt mehr als einmal in der \"trustdb\" auf\n" + +#: g10/trustdb.c:302 +#, c-format +msgid "key %08lX: no public key for trusted key - skipped\n" +msgstr "" +"Schlüssel %08lX: kein öffentlicher Schlüssel für den vertrauenswürdigen " +"Schlüssel - übersprungen\n" + +#: g10/trustdb.c:311 +#, fuzzy, c-format +msgid "key %08lX marked as ultimately trusted\n" +msgstr "Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.\n" + +#: g10/trustdb.c:337 +#, c-format +msgid "trust record %lu, req type %d: read failed: %s\n" +msgstr "trust record %lu, req type %d: read failed: %s\n" + +#: g10/trustdb.c:343 +#, c-format +msgid "trust record %lu is not of requested type %d\n" +msgstr "Vertrauenssatz %lu ist nicht von der angeforderten Art %d\n" + +#: g10/trustdb.c:358 +#, c-format +msgid "trust record %lu, type %d: write failed: %s\n" +msgstr "trust record %lu, type %d: write failed: %s\n" + +#: g10/trustdb.c:373 +#, c-format +msgid "trustdb: sync failed: %s\n" +msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n" + +#: g10/trustdb.c:463 +#, fuzzy +msgid "unknown trust" +msgstr "Unbekannte Version" + +#: g10/trustdb.c:464 +#, fuzzy +msgid "expired" +msgstr "expire" + +#: g10/trustdb.c:465 +msgid "undefined trust" +msgstr "" + +#: g10/trustdb.c:466 +#, fuzzy +msgid "do NOT trust" +msgstr " %d = Nein, ihm traue ich NICHT\n" + +#: g10/trustdb.c:467 +msgid "marginal trust" +msgstr "" + +#: g10/trustdb.c:468 +#, fuzzy +msgid "full trust" +msgstr "trust" + +#: g10/trustdb.c:469 +#, fuzzy +msgid "ultimate trust" +msgstr "|KEYID|diesem Schlüssel uneingeschränkt vertrauen" + +#: g10/trustdb.c:504 +msgid "no need for a trustdb check\n" +msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n" + +#: g10/trustdb.c:510 g10/trustdb.c:1912 +#, c-format +msgid "next trustdb check due at %s\n" +msgstr "nächste \"Trust-DB\"-Pflichtüberprüfung am %s\n" + +#: g10/trustdb.c:519 +#, fuzzy, c-format +msgid "no need for a trustdb check with \"%s\" trust model\n" +msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n" + +#: g10/trustdb.c:536 +#, fuzzy, c-format +msgid "no need for a trustdb update with \"%s\" trust model\n" +msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n" + +#: g10/trustdb.c:708 g10/trustdb.c:1073 +#, c-format +msgid "public key %08lX not found: %s\n" +msgstr "Öffentlicher Schlüssel %08lX nicht gefunden: %s\n" + +#: g10/trustdb.c:919 +msgid "checking the trustdb\n" +msgstr "\"Trust-DB\" wird überprüft\n" + +#: g10/trustdb.c:1748 +#, c-format +msgid "public key of ultimately trusted key %08lX not found\n" +msgstr "" +"öff.Schlüssel des uneingeschränkt vertrautem Schlüssel %08lX nicht gefunden\n" + +#: g10/trustdb.c:1854 +#, c-format +msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" +msgstr "" +"überprüfen, Tiefe %d, unterschrieben =%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" + +#: g10/verify.c:108 +msgid "" +"the signature could not be verified.\n" +"Please remember that the signature file (.sig or .asc)\n" +"should be the first file given on the command line.\n" +msgstr "" +"Die Unterschrift konnte nicht überprüft werden.\n" +"Denken Sie daran, daß die Datei mit der Unterschrift (.sig oder .asc)\n" +"als erster in der Kommandozeile stehen sollte.\n" + +#: g10/verify.c:173 +#, c-format +msgid "input line %u too long or missing LF\n" +msgstr "Eingabezeile %u ist zu lang oder es fehlt ein LF\n" + +#: g10/skclist.c:129 g10/skclist.c:185 +msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" +msgstr "" +"Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem\n" +"echten Zufallsgenerator verwendbar\n" + +#: g10/skclist.c:157 +#, c-format +msgid "skipped `%s': duplicated\n" +msgstr "übersprungen '%s': doppelt\n" + +#: g10/skclist.c:164 g10/skclist.c:172 +#, c-format +msgid "skipped `%s': %s\n" +msgstr "übersprungen '%s': %s\n" + +#: g10/skclist.c:168 +msgid "skipped: secret key already present\n" +msgstr "übersprungen: geheimer Schlüssel bereits vorhanden\n" + +#: g10/skclist.c:179 +#, c-format +msgid "" +"skipped `%s': this is a PGP generated ElGamal key which is not secure for " +"signatures!\n" +msgstr "" +"'%s übersprungen: Dies ist ein durch PGP erzeugter ElGamal-Schlüssel. Das " +"ist für Signaturen NICHT sicher genug!\n" + +#. do not overwrite +#: g10/openfile.c:84 +#, c-format +msgid "File `%s' exists. " +msgstr "Datei '%s' existiert bereits. " + +#: g10/openfile.c:86 +msgid "Overwrite (y/N)? " +msgstr "Überschreiben (j/N)? " + +#: g10/openfile.c:119 +#, c-format +msgid "%s: unknown suffix\n" +msgstr "%s: unbekannte Dateinamenerweiterung\n" + +#: g10/openfile.c:141 +msgid "Enter new filename" +msgstr "Neuen Dateinamen eingeben" + +#: g10/openfile.c:184 +msgid "writing to stdout\n" +msgstr "Schreiben auf die Standardausgabe\n" + +#: g10/openfile.c:273 +#, c-format +msgid "assuming signed data in `%s'\n" +msgstr "die unterzeichneten Daten sind wohl in '%s'\n" + +#: g10/openfile.c:326 +#, c-format +msgid "new configuration file `%s' created\n" +msgstr "Neue Konfigurationsdatei `%s' erstellt\n" + +#: g10/openfile.c:353 +#, c-format +msgid "%s: can't create directory: %s\n" +msgstr "%s: Verzeichnis kann nicht erzeugt werden: %s\n" + +#: g10/openfile.c:356 +#, c-format +msgid "%s: directory created\n" +msgstr "%s: Verzeichnis erzeugt\n" + +#: g10/encr-data.c:91 +msgid "" +"WARNING: message was encrypted with a weak key in the symmetric cipher.\n" +msgstr "" +"Warnung: Botschaft wurde mit einem unsicheren Schlüssel verschlüsselt.\n" + +#: g10/encr-data.c:98 +msgid "problem handling encrypted packet\n" +msgstr "Problem beim Bearbeiten des verschlüsselten Pakets\n" + +#: g10/seskey.c:52 +msgid "weak key created - retrying\n" +msgstr "Unsicherer Schlüssel erzeugt - neuer Versuch\n" + +#: g10/seskey.c:57 +#, c-format +msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" +msgstr "" +"Trotz %d-fachen Versuch konnte die Erzeugung eines unsicheren Schlüssels für " +"sym.Verschlüsselung nicht vermieden werden!\n" + +#: g10/seskey.c:200 +msgid "DSA requires the use of a 160 bit hash algorithm\n" +msgstr "DSA benötigt einen 160-bit Hash Algorithmus\n" + +#: g10/delkey.c:120 g10/delkey.c:127 +msgid "(unless you specify the key by fingerprint)\n" +msgstr "(es sei denn, Sie geben den Schlüssel mittels Fingerprint an)\n" + +#: g10/delkey.c:126 +msgid "can't do that in batchmode without \"--yes\"\n" +msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgeführt werden.\n" + +#: g10/delkey.c:138 +msgid "Delete this key from the keyring? " +msgstr "Diesen Schlüssel aus dem Schlüsselbund löschen? " + +#: g10/delkey.c:146 +msgid "This is a secret key! - really delete? " +msgstr "Dies ist ein privater Schlüssel! - Wirklich löschen? " + +#: g10/delkey.c:156 +#, c-format +msgid "deleting keyblock failed: %s\n" +msgstr "löschen des Schlüsselblocks fehlgeschlagen: %s\n" + +#: g10/delkey.c:166 +msgid "ownertrust information cleared\n" +msgstr "Der \"Ownertrust\" wurde gelöscht\n" + +#: g10/delkey.c:194 +#, c-format +msgid "there is a secret key for public key \"%s\"!\n" +msgstr "" +"Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel \"%s\"!\n" + +#: g10/delkey.c:196 +msgid "use option \"--delete-secret-keys\" to delete it first.\n" +msgstr "" +"Verwenden Sie zunächst das Kommando \"--delete-secret-key\", um ihn zu " +"entfernen.\n" + +#: g10/helptext.c:47 +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 "" +"Sie müssen selbst entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n" +"wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert,\n" +"um das \"Netz des Vertrauens\" aufzubauen. Dieses hat nichts mit dem\n" +"(implizit erzeugten) \"Netz der Zertifikate\" zu tun." + +#: g10/helptext.c:53 +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 "" +"Um das Web-of-Trust aufzubauen muß GnuPG wissen, welchen Schlüsseln\n" +"uneingeschränkt vertraut wird. Das sind üblicherweise die Schlüssel\n" +"auf deren geheimen Schlüssel Sie Zugruff haben.\n" +"Antworten Sie mit \"yes\" um diesen Schlüssel uneingeschränkt zu vertrauen\n" + +#: g10/helptext.c:60 +msgid "If you want to use this revoked key anyway, answer \"yes\"." +msgstr "" +"Wenn Sie diesen widerrufenen Schlüssel trotzdem benutzen wollen,\n" +"so antworten Sie mit \"ja\"." + +#: g10/helptext.c:64 +msgid "If you want to use this untrusted key anyway, answer \"yes\"." +msgstr "" +"Wenn Sie diesen nicht vertrauenswürdigen Schlüssel trotzdem benutzen " +"wollen,\n" +"so antworten Sie mit \"ja\"." + +#: g10/helptext.c:68 +msgid "" +"Enter the user ID of the addressee to whom you want to send the message." +msgstr "Geben Sie die User-ID dessen ein, dem Sie die Botschaft senden wollen." + +#: g10/helptext.c:72 +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 "" +"Wählen Sie die zu verwendende Methode aus.\n" +"\n" +"DSA (alias DSS) bedeutet \"digital signature algorithm\" (Digitales\n" +" Unterschrift-Verfahren). Es kann nur zum Unterschreiben und Beglaubigen\n" +" benutzt werden. Dies ist das empfohlene Verfahren, da dessen Überprüfung\n" +" wesentlich schneller abläuft, als die von \"ElGamal\".\n" +"\n" +"ElGamal ist ein Verfahren für Unterschrift, Beglaubigung und " +"Verschlüsselung\n" +" OpenPGP unterscheidet zwischen zwei Arten von ElGamal: eines nur zum\n" +" Unterschreiben/Beglaubigen und eines zusätzlich zum Verschlüsseln.\n" +" Eigentlich sind diese Arten identisch; allerdings müssen einige Parameter\n" +" auf eine besondere Art gewählt werden, um einen sicheren Schlüssel für\n" +" Unterschriften zu erzeugen. Dieses Programm macht dies zwar so, aber " +"andere\n" +" Programme sind laut der OpenPGP-Spezifikation nicht verpflichtet, die\n" +" zweite Art (die mit zusätzlichem Verschlüsseln) zu verstehen.\n" +"\n" +"Der Hauptschlüssel (\"primary Key\") muß auf jeden Fall zum Unterschreiben " +"fähig\n" +"sein. Deshalb kann ein nur-Verschlüssel-ElGamal-Schlüssel dafür nicht\n" +"verwendet werden." + +#: g10/helptext.c:92 +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 "" +"Obwohl diese Schlüssel in RFC 2440 definiert sind, ist ihre Verwendung " +"nicht\n" +"empfohlen. Sie werden nämlich nicht von allen Programmen unterstützt.\n" +"Außerdem sind damit ezeugte Unterschriften recht groß und ihre Überprüfung\n" +"ist langsam." + +#: g10/helptext.c:98 +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 "" +"Normalerweise ist es nicht gut, denselben Schlüssel zum unterschreiben\n" +"und verschlüsseln zu nutzen. Dieses Verfahren sollte in speziellen\n" +"Anwendungsgebiten benutzt werden. Bitte lassen Sie sich zuerst von \n" +"einem Sicherheistexperten beraten." + +#: g10/helptext.c:105 +msgid "Enter the size of the key" +msgstr "Wählen Sie die gewünschte Schlüssellänge" + +#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158 +#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196 +msgid "Answer \"yes\" or \"no\"" +msgstr "Geben Sie \"ja\" oder \"nein\" ein" + +#: g10/helptext.c:119 +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 "" +"Geben Sie den benötigten Wert so an, wie er im Prompt erscheint.\n" +"Es ist zwar möglich ein \"ISO\"-Datum (JJJJ-MM-DD) einzugeben, aber man\n" +"erhält dann ggfs. keine brauchbaren Fehlermeldungen - stattdessen versucht\n" +"der Rechner den Wert als Intervall (von-bis) zu deuten." + +#: g10/helptext.c:131 +msgid "Enter the name of the key holder" +msgstr "Geben Sie den Namen des Schlüsselinhabers ein" + +#: g10/helptext.c:136 +msgid "please enter an optional but highly suggested email address" +msgstr "" +"Geben Sie eine E-Mail-Adresse ein. Dies ist zwar nicht unbedingt notwendig,\n" +"aber sehr empfehlenswert." + +#: g10/helptext.c:140 +msgid "Please enter an optional comment" +msgstr "Geben Sie - bei Bedarf - einen Kommentar ein" + +#: g10/helptext.c:145 +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 um den Namen zu ändern.\n" +"K um den Kommentar zu ändern.\n" +"E um die E-Mail-Adresse zu ändern.\n" +"F um mit der Schlüsselerzeugung fortzusetzen.\n" +"B um die Schlüsselerzeugung abbrechen." + +#: g10/helptext.c:154 +msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." +msgstr "" +"Geben Sie \"ja\" (oder nur \"j\") ein, um den Unterschlüssel zu erzeugen." + +#: g10/helptext.c:162 +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 "" +"Wenn Sie die User-ID eines Schlüssels beglaubigen wollen, sollten Sie " +"zunächst\n" +"sicherstellen, daß der Schlüssel demjenigen gehört, der in der User-ID " +"genannt\n" +"ist. Für Dritte ist es hilfreich zu wissen, wie gut diese Zuordnung " +"überprüft\n" +"wurde.\n" +"\n" +"\"0\" zeigt, daß Sie keine bestimmte Aussage über die Sorgfalt der \n" +" Schlüsselzuordnung machen.\n" +"\n" +"\"1\" Sie glauben, daß der Schlüssel der benannten Person gehört,\n" +" aber Sie konnten oder nahmen die Überpüfung überhaupt nicht vor.\n" +" Dies ist hilfreich für eine \"persona\"-Überprüfung, wobei man den\n" +" Schlüssel eines Pseudonym-Trägers beglaubigt\n" +"\n" +"\"2\" Sie nahmen eine flüchtige Überprüfung vor. Das heisst Sie haben z.B.\n" +" den Schlüsselfingerabdruck kontrolliert und die User-ID des Schlüssels\n" +" anhand des Fotos geprüft.\n" +"\n" +"\"3\" Sie haben eine ausführlich Kontrolle des Schlüssels vorgenommen.\n" +" Das kann z.B. die Kontrolle des Schlüsselfingerabdrucks mit dem\n" +" Schlüsselinhaber persönlich vorgenommen haben; daß Sie die User-ID des\n" +" Schlüssel anhand einer schwer zu fälschenden Urkunde mit Foto (wie z.B.\n" +" einem Paß) abgeglichen haben und schliesslich per E-Mail-Verkehr die\n" +" E-Mail-Adresse als zum Schlüsselbesitzer gehörig erkannt haben.\n" +"\n" +"Beachten Sie, daß diese Beispiele für die Antworten 2 und 3 *nur* Beispiele " +"sind.\n" +"Schlußendlich ist es Ihre Sache, was Sie unter \"flüchtig\" oder " +"\"ausführlich\"\n" +"verstehen, wenn Sie Schlüssel Dritter beglaubigen.\n" +"\n" +"Wenn Sie nicht wissen, wie Sie antworten sollen, wählen Sie \"0\"." + +#: g10/helptext.c:200 +msgid "Answer \"yes\" is you want to sign ALL the user IDs" +msgstr "Geben Sie \"ja\" (oder nur \"j\") ein, um alle User-IDs zu beglaubigen" + +#: g10/helptext.c:204 +msgid "" +"Answer \"yes\" if you really want to delete this user ID.\n" +"All certificates are then also lost!" +msgstr "" +"Geben Sie \"ja\" (oder nur \"j\") ein, um diese User-ID zu LÖSCHEN.\n" +"Alle Zertifikate werden dann auch weg sein!" + +#: g10/helptext.c:209 +msgid "Answer \"yes\" if it is okay to delete the subkey" +msgstr "" +"Geben Sie \"ja\" (oder nur \"j\") ein, um diesen Unterschlüssel zu löschen" + +#: g10/helptext.c:214 +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 "" +"Dies ist eine gültige Beglaubigung für den Schlüssel. Es ist normalerweise\n" +"unnötig sie zu löschen. Sie ist möglicherweise sogar notwendig, um einen\n" +"Trust-Weg zu diesem oder einem durch diesen Schlüssel beglaubigten " +"Schlüssel\n" +"herzustellen." + +#: g10/helptext.c:219 +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 "" +"Diese Beglaubigung kann nicht geprüft werden, da Sie den passenden " +"Schlüssel\n" +"nicht besitzen. Sie sollten die Löschung der Beglaubigung verschieben, bis\n" +"sie wissen, welcher Schlüssel verwendet wurde. Denn vielleicht würde genau\n" +"diese Beglaubigung den \"Trust\"-Weg kompletieren." + +#: g10/helptext.c:225 +msgid "" +"The signature is not valid. It does make sense to remove it from\n" +"your keyring." +msgstr "" +"Diese Beglaubigung ist ungültig. Es ist sinnvoll sie aus Ihrem\n" +"Schlüsselbund zu entfernen." + +#: g10/helptext.c:229 +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 "" +"Diese Beglaubigung bindet die User-ID an den Schlüssel. Normalerweise ist\n" +"es nicht gut, solche Beglaubigungen zu entfernen. Um ehrlich zu sein:\n" +"Es könnte dann sein, daß GnuPG diesen Schlüssel gar nicht mehr benutzen " +"kann.\n" +"Sie sollten diese Eigenbeglaubigung also nur dann entfernen, wenn sie aus\n" +"irgendeinem Grund nicht gültig ist und eine zweite Beglaubigung verfügbar " +"ist." + +#: g10/helptext.c:237 +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 "" +"Ändern der Voreinstellung aller User-IDs (oder nur der ausgewählten)\n" +"auf die aktuelle Liste der Voreinstellung. Die Zeitangaben aller " +"betroffenen\n" +"Eigenbeglaubigungen werden um eine Sekunde vorgestellt.\n" + +#: g10/helptext.c:244 +msgid "Please enter the passhrase; this is a secret sentence \n" +msgstr "Bitte geben Sie das Mantra ein. Dies ist ein geheimer Satz \n" + +#: g10/helptext.c:250 +msgid "Please repeat the last passphrase, so you are sure what you typed in." +msgstr "" +"Um sicher zu gehen, daß Sie sich bei der Eingabe des Mantras nicht\n" +"vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben\n" +"übereinstimmen, wird das Mantra akzeptiert." + +#: g10/helptext.c:254 +msgid "Give the name of the file to which the signature applies" +msgstr "" +"Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehört" + +#: g10/helptext.c:259 +msgid "Answer \"yes\" if it is okay to overwrite the file" +msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei überschreiben möchten" + +#: g10/helptext.c:264 +msgid "" +"Please enter a new filename. If you just hit RETURN the default\n" +"file (which is shown in brackets) will be used." +msgstr "" +"Geben Sie bitte einen neuen Dateinamen ein. Falls Sie nur die\n" +"Eingabetaste betätigen, wird der (in Klammern angezeigte) Standarddateiname\n" +"verwendet." + +#: g10/helptext.c:270 +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 "" +"Sie sollten einen Grund für die Zertifizierung angeben. Je nach\n" +"Zusammenhang können Sie aus dieser Liste auswählen:\n" +" \"Schlüssel wurde kompromitiert\"\n" +" Falls Sie Grund zu der Annahme haben, daß nicht berechtigte Personen\n" +" Zugriff zu Ihrem geheimen Schlüssel hatten\n" +" \"Schlüssel ist überholt\"\n" +" Falls Sie diesen Schlüssel durch einem neuen ersetzt haben.\n" +" \"Schlüssel wird nicht mehr benutzt\"\n" +" Falls Sie diesen Schlüssel zurückgezogen haben.\n" +" \"User-ID ist nicht mehr gültig\"\n" +" Um bekanntzugeben, daß die User-ID nicht mehr benutzt werden soll.\n" +" So weist man normalerweise auf eine ungültige E-Mailadresse hin.\n" + +#: g10/helptext.c:286 +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 "" +"Wenn Sie möchten, können Sie hier einen Text eingeben, der darlegt, warum\n" +"Sie diesen Widerruf herausgeben. Der Text sollte möglichst knapp sein.\n" +"Eine Leerzeile beendet die Eingabe.\n" + +#: g10/helptext.c:301 +msgid "No help available" +msgstr "Keine Hilfe vorhanden." + +#: g10/helptext.c:309 +#, c-format +msgid "No help available for `%s'" +msgstr "Keine Hilfe für '%s' vorhanden." + +#: g10/keydb.c:182 +#, c-format +msgid "error creating keyring `%s': %s\n" +msgstr "Fehler beim Erzeugen des Schlüsselbundes `%s': %s\n" + +#: g10/keydb.c:189 +#, c-format +msgid "keyring `%s' created\n" +msgstr "Schlüsselbund `%s' erstellt\n" + +#: g10/keydb.c:608 +#, c-format +msgid "failed to rebuild keyring cache: %s\n" +msgstr "Schlüsselbund-Cache konnte nicht neu erzeugt werden: %s\n" + +#: g10/keyring.c:1231 +msgid "WARNING: 2 files with confidential information exists.\n" +msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n" + +#: g10/keyring.c:1233 +#, c-format +msgid "%s is the unchanged one\n" +msgstr "%s ist der Unveränderte\n" + +#: g10/keyring.c:1234 +#, c-format +msgid "%s is the new one\n" +msgstr "%s ist der Neue\n" + +#: g10/keyring.c:1235 +msgid "Please fix this possible security flaw\n" +msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n" + +#: g10/keyring.c:1351 +#, c-format +msgid "checking keyring `%s'\n" +msgstr "Prüfen des Schlüsselbundes `%s'\n" + +#: g10/keyring.c:1382 +#, fuzzy, c-format +msgid "%lu keys checked so far (%lu signatures)\n" +msgstr "%lu Schlüssel geprüft (%lu Beglaubigungen)\n" + +#: g10/keyring.c:1393 +#, c-format +msgid "%lu keys checked (%lu signatures)\n" +msgstr "%lu Schlüssel geprüft (%lu Beglaubigungen)\n" + +#: g10/keyring.c:1458 +#, c-format +msgid "%s: keyring created\n" +msgstr "%s: Schlüsselbund erstellt\n" + +#~ msgid "preference %c%lu is not valid\n" +#~ msgstr "Voreinstellung %c%lu ist nicht gültig\n" + +#, fuzzy +#~ msgid " (default)" +#~ msgstr "Daten entschlüsseln (Voreinstellung)" + +#~ msgid "requesting key %08lX from %s\n" +#~ msgstr "Schlüssel %08lX wird von %s angefordert\n" + +#~ msgid "can't get key from keyserver: %s\n" +#~ msgstr "Schlüssel ist beim Schlüsselserver nicht erhältlich: %s\n" + +#~ msgid "error sending to `%s': %s\n" +#~ msgstr "Fehler beim Senden an `%s': %s\n" + +#~ msgid "success sending to `%s' (status=%u)\n" +#~ msgstr "Senden an `%s' erfolgreich (status=%u)\n" + +#~ msgid "failed sending to `%s': status=%u\n" +#~ msgstr "Senden an `%s' erfolglos (status=%u)\n" + +#~ msgid "this keyserver is not fully HKP compatible\n" +#~ msgstr "Dieser Schlüsselserver ist nicht vollständig HKP kompatibel\n" + +#~ msgid "searching for \"%s\" from HKP server %s\n" +#~ msgstr "suche nach \"%s\" auf HKP-Server %s\n" + +#~ msgid "can't search keyserver: %s\n" +#~ msgstr "kann Schlüsselserver nicht durchsuchen: %s\n" + +#~ msgid "%lu keys so far checked (%lu signatures)\n" +#~ msgstr "%lu Schlüssel bislang geprüft (%lu Beglaubigungen)\n" + +#~ msgid "no values for group \"%s\"\n" +#~ msgstr "Keine Werte für Gruppe \"%s\"\n" + +#, fuzzy +#~ msgid "" +#~ "you have to start GnuPG again, so it can read the new configuration file\n" +#~ msgstr "" +#~ "Sie müssen GnuPG noch einmal starten, damit es die neue " +#~ "Konfigurationsdatei liest\n" + +#~ msgid "changing permission of `%s' failed: %s\n" +#~ msgstr "Ändern der Zugriffsrechte für `%s' ist fehlgeschlagen: %s\n" + +#~ msgid "Fingerprint:" +#~ msgstr "Fingerabdruck:" + +#~ msgid " Fingerprint:" +#~ msgstr " Fingerabdruck:" + +#~ msgid "|NAME=VALUE|use this notation data" +#~ msgstr "|NAME=WERT|diese \"notation\"-Daten verwenden" + +#~ msgid "" +#~ "the first character of a notation name must be a letter or an underscore\n" +#~ msgstr "" +#~ "Das erste Zeichen eines \"notation\"-Namens muß ein Buchstabe oder\n" +#~ "ein Unterstrich sein\n" + +#~ msgid "dots in a notation name must be surrounded by other characters\n" +#~ msgstr "" +#~ "Punkte in einem \"notation\"-Namen müssen von anderen Zeichen umgeben " +#~ "sein\n" + +#~ msgid "" +#~ "WARNING: This key already has a photo ID.\n" +#~ " Adding another photo ID may confuse some versions of PGP.\n" +#~ msgstr "" +#~ "WARNUNG: Dieser Schlüssel besitzt bereits eine Foto-ID.\n" +#~ " Ein hinzugefügte Foto-ID könnte einige Versionen von PGP " +#~ "verwirren.\n" + +#~ msgid "You may only have one photo ID on a key.\n" +#~ msgstr "Sie können nur eine Foto-ID für diesen Schlüssel haben.\n" + +#~ msgid "Are you sure you still want to sign it?\n" +#~ msgstr "Sind Sie sicher, daß Sie dies wiklich unterschreiben möchten?\n" + +#~ msgid " Are you sure you still want to sign it?\n" +#~ msgstr " Sind Sie sicher, daß Sie dies immer noch unterschreiben wollen?\n" + +#~ msgid "Really sign? (y/N) " +#~ msgstr "Wirklich unterschreiben? (j/N) " + +#~ msgid "key %08lX: our copy has no self-signature\n" +#~ msgstr "Schlüssel %08lX: Unsere Kopie hat keine Eigenbeglaubigung\n" + +#~ msgid "Do you really need such a large keysize? " +#~ msgstr "Brauchen Sie wirklich einen derartig langen Schlüssel? " + +#~ msgid " signed by %08lX at %s\n" +#~ msgstr " beglaubigt durch %08lX um %s\n" + +#~ msgid "--delete-secret-key user-id" +#~ msgstr "--delete-secret-key User-ID" + +#~ msgid "--delete-key user-id" +#~ msgstr "--delete-key User-ID" + +#~ msgid "--delete-secret-and-public-key user-id" +#~ msgstr "--delete-secret-and-public-key User-ID" + +#~ msgid "Enter the user ID: " +#~ msgstr "Geben Sie die User-ID ein: " + +#~ msgid "skipped: public key already set with --encrypt-to\n" +#~ msgstr "" +#~ "übersprungen: öffentlicher Schlüssel bereits mittels --encrypt-to " +#~ "gesetzt\n" + +#~ msgid "" +#~ "\n" +#~ "WARNING: This is a PGP2-style key\n" +#~ msgstr "WARNUNG: '%s' ist eine leere Datei.\n" + +# valid user replies (not including 1..4) +#~ msgid "sSmMqQ" +#~ msgstr "sSmMqQ" + +#~ msgid "no keyserver known (use option --keyserver)\n" +#~ msgstr "Kein Schlüsselserver bekannt (Option --keyserver verwenden)\n" + +#~ msgid "%s: not a valid key ID\n" +#~ msgstr "%s: Dies ist keine gültige Schlüssel-ID\n" + +#~ msgid "duplicate (short) key ID %08lX\n" +#~ msgstr "Öffentlicher Schlüssel ist %08lX\n" + +#~ msgid "%lu key(s) to refresh\n" +#~ msgstr "\t%lu Schlüssel mit Fehlern\n" + +#~ msgid "|[NAMES]|check the trust database" +#~ msgstr "|[NAMEN]|Überprüfen der \"Trust\"-Datenbank" + +#~ msgid "" +#~ "Could not find a valid trust path to the key. Let's see whether we\n" +#~ "can assign some missing owner trust values.\n" +#~ "\n" +#~ msgstr "" +#~ "Für diesen Schlüssel konnte kein gültiger \"Trust Path\" gefunden " +#~ "werden.\n" +#~ "Mal sehen, ob wir sonst irgendwie ein paar fehlende \"Owner trust\" " +#~ "Werte \n" +#~ "ermitteln können.\n" +#~ "\n" + +#~ msgid "" +#~ "No path leading to one of our keys found.\n" +#~ "\n" +#~ msgstr "" +#~ "Kein Pfad führt zu einem unserer Schlüsseln.\n" +#~ "\n" + +#~ msgid "" +#~ "No certificates with undefined trust found.\n" +#~ "\n" +#~ msgstr "" +#~ "Keine Zertifikate mit undefiniertem Vertrauen gefunden.\n" +#~ "\n" + +#~ msgid "" +#~ "No trust values changed.\n" +#~ "\n" +#~ msgstr "" +#~ "Keine \"trust\" Werte geändert.\n" +#~ "\n" + +#~ msgid "%08lX: no info to calculate a trust probability\n" +#~ msgstr "" +#~ "%08lX: Keine Infos zur Berechnung der Vertrauenswahrscheinlichkeit " +#~ "vorgefunden\n" + +#~ msgid "%s: error checking key: %s\n" +#~ msgstr "%s: Fehler beim Prüfen des Schlüssels: %s\n" + +#~ msgid "too many entries in unk cache - disabled\n" +#~ msgstr "zu viele Einträge im unk-Lager - abgeschaltet\n" + +#~ msgid "secret key %08lX not imported (use %s to allow for it)\n" +#~ msgstr "" +#~ "Geheimer Schlüssel %08lX nicht importiert (%s verwenden, um das zu " +#~ "ermöglichen)\n" + +#~ msgid "update of trustdb failed: %s\n" +#~ msgstr "Änderung der \"Trust-DB\" fehlgeschlagen: %s\n" + +#~ msgid "assuming bad MDC due to an unknown critical bit\n" +#~ msgstr "" +#~ "Vermutlich ist das Siegel (MDC) BESCHÄDIGT (wegen unbekanntem \"critical " +#~ "bit\")\n" + +#~ msgid "error reading dir record for LID %lu: %s\n" +#~ msgstr "Fehler beim Lesen des Dir-Satzes für LID %lu: %s\n" + +#~ msgid "lid %lu: expected dir record, got type %d\n" +#~ msgstr "lid %lu: Dir-Satz erwartet, aber es kam Typ %d\n" + +#~ msgid "no primary key for LID %lu\n" +#~ msgstr "Kein Hauptschlüssel für LID %lu\n" + +#~ msgid "error reading primary key for LID %lu: %s\n" +#~ msgstr "Fehler beim Lesen den Hauptschlüssels der LID %lu: %s\n" + +#~ msgid "get_dir_record: search_record failed: %s\n" +#~ msgstr "get_dir_record: search_record fehlgeschlagen: %s\n" + +#~ msgid "key %08lX: query record failed\n" +#~ msgstr "Schlüssel %08lX: Satzabfrage fehlgeschlagen\n" + +#~ msgid "key %08lX: already in trusted key table\n" +#~ msgstr "Schlüssel %08lX: Ist bereits in geheimer Schlüsseltabelle\n" + +#~ msgid "NOTE: secret key %08lX is NOT protected.\n" +#~ msgstr "HINWEIS: Geheimer Schlüssel %08lX ist NICHT geschützt.\n" + +#~ msgid "key %08lX: secret and public key don't match\n" +#~ msgstr "" +#~ "Schlüssel %08lX: geheimer und öffentlicher Schlüssel passen nicht " +#~ "zusammen.\n" + +#~ msgid "enumerate secret keys failed: %s\n" +#~ msgstr "enum_secret_keys fehlgeschlagen: %s\n" + +#~ msgid "key %08lX.%lu: Good subkey binding\n" +#~ msgstr "Schlüssel %08lX.%lu: Korrekte Unterschlüssel-Anbindung\n" + +#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" +#~ msgstr "Schlüssel %08lX.%lu: Ungültige Unterschlüssel-Anbindung: %s\n" + +#~ msgid "key %08lX.%lu: Valid key revocation\n" +#~ msgstr "Schlüssel %08lX.%lu: Gültiger Schlüsselwiderruf\n" + +#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" +#~ msgstr "Schlüssel %08lX.%lu: Ungültiger Schlüsselwiderruf: %s\n" + +#~ msgid "Good self-signature" +#~ msgstr "Korrekte Eigenbeglaubigung" + +#~ msgid "Invalid self-signature" +#~ msgstr "Ungültige Eigenbeglaubigung" + +#~ msgid "Valid user ID revocation skipped due to a newer self signature" +#~ msgstr "" +#~ "Gültiger User-ID-Widerruf ignoriert, da eine neuere Eigenbeglaubigung " +#~ "vorliegt" + +#~ msgid "Valid user ID revocation" +#~ msgstr "Gültiger User-ID-Widerruf" + +#~ msgid "Invalid user ID revocation" +#~ msgstr "Ungültiger User-ID-Widerruf" + +#~ msgid "Valid certificate revocation" +#~ msgstr "Gültiger Zerifikat-Widerruf" + +#~ msgid "Good certificate" +#~ msgstr "Korrektes Zertifikat" + +#~ msgid "Invalid certificate revocation" +#~ msgstr "Ungültiger Zertifikatswiderruf" + +#~ msgid "Invalid certificate" +#~ msgstr "Ungültiges Zertifikat" + +#~ msgid "sig record %lu[%d] points to wrong record.\n" +#~ msgstr "Signatursatz %lu[%d] zeigt auf falschen Satz.\n" + +#~ msgid "duplicated certificate - deleted" +#~ msgstr "Doppelte Zertifikate - entfernt" + +#~ msgid "tdbio_search_dir failed: %s\n" +#~ msgstr "tdbio_search_dir fehlgeschlagen: %s\n" + +#~ msgid "lid ?: insert failed: %s\n" +#~ msgstr "lid ?: Einfügen fehlgeschlagen: %s\n" + +#~ msgid "lid %lu: insert failed: %s\n" +#~ msgstr "lid %lu: Einfügen fehlgeschlagen: %s\n" + +#~ msgid "lid %lu: inserted\n" +#~ msgstr "lid %lu: eingefügt\n" + +#~ msgid "error reading dir record: %s\n" +#~ msgstr "Fehler beim Lesen des Verz.Satzes: %s\n" + +#~ msgid "\t%lu keys inserted\n" +#~ msgstr "\t%lu Schlüssel eingefügt\n" + +#~ msgid "enumerate keyblocks failed: %s\n" +#~ msgstr "enumerate Schlüsselblock fehlgeschlagen: %s\n" + +#~ msgid "lid %lu: dir record w/o key - skipped\n" +#~ msgstr "lid %lu: Dir-Satz ohne Schlüssel - übergangen\n" + +#~ msgid "\t%lu due to new pubkeys\n" +#~ msgstr "\t%lu wegen neuer Schlüssel\n" + +#~ msgid "\t%lu keys skipped\n" +#~ msgstr "\t%lu Schlüssel übersprungen\n" + +#~ msgid "\t%lu keys updated\n" +#~ msgstr "\t%lu Schlüssel geändert\n" + +#~ msgid "Ooops, no keys\n" +#~ msgstr "Huch, keine Schlüssel\n" + +#~ msgid "Ooops, no user IDs\n" +#~ msgstr "Huch, keine User-IDs\n" + +#~ msgid "check_trust: search dir record failed: %s\n" +#~ msgstr "check_trust: Suche nach Dir-Satz fehlgeschlagen: %s\n" + +#~ msgid "key %08lX: insert trust record failed: %s\n" +#~ msgstr "Schlüssel %08lX: 'trust record' einfügen fehlgeschlagen: %s\n" + +#~ msgid "key %08lX.%lu: inserted into trustdb\n" +#~ msgstr "Schlüssel %08lX.%lu: in \"trustdb\" eingefügt\n" + +#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" +#~ msgstr "" +#~ "Schlüssel %08lX.%lu: wurde in der Zukunft erzeugt (Zeitreise oder Uhren " +#~ "stimmen nicht überein)\n" + +#~ msgid "key %08lX.%lu: expired at %s\n" +#~ msgstr "Schlüssel %08lX.%lu: verfallen am %s\n" + +#~ msgid "key %08lX.%lu: trust check failed: %s\n" +#~ msgstr "Schlüssel %08lX.%lu: Vertrauensprüfung fehlgeschlagen: %s\n" + +#~ msgid "user '%s' not found: %s\n" +#~ msgstr "Benutzer '%s' nicht gefunden: %s\n" + +#~ msgid "problem finding '%s' in trustdb: %s\n" +#~ msgstr "Problem, '%s' in der Trust-DB zu finden: %s\n" + +#~ msgid "user '%s' not in trustdb - inserting\n" +#~ msgstr "User '%s' ist nicht in der 'Trust'-Datenbank - wird eingefügt\n" + +#~ msgid "failed to put '%s' into trustdb: %s\n" +#~ msgstr "konnte '%s' nicht in die 'Trust'-Datenbank hineintun: %s\n" + +#~ msgid "too many random bits requested; the limit is %d\n" +#~ msgstr "Zu viele Zufallswerte angefordert: Die Grenze liegt bei %d\n" + +#~ msgid "For info see http://www.gnupg.org" +#~ msgstr "Weitere Infos: siehe http://www.gnupg.org" + +#~ msgid "Do you really want to create a sign and encrypt key? " +#~ msgstr "" +#~ "Möchten Sie wirklich einen Unterschriften-/Verschlüsselungschlüssel " +#~ "erzeugen? " + +#~ msgid "%s: user not found: %s\n" +#~ msgstr "%s: Benutzer nicht gefunden: %s\n" + +#~ msgid "certificate read problem: %s\n" +#~ msgstr "Zertifikat Leseproblem: %s\n" + +#~ msgid "can't lock keyring `%s': %s\n" +#~ msgstr "kann Schlüsselbund `%s' nicht sperren: %s\n" + +#~ msgid "%s: user not found\n" +#~ msgstr "%s: Benutzer nicht gefunden\n" + +#~ msgid "WARNING: can't yet handle long pref records\n" +#~ msgstr "WARNUNG: Lange 'Pref'-Records können noch nicht benutzt werden\n" + +#~ msgid "%s: can't create keyring: %s\n" +#~ msgstr "%s: Schlüsselbund kann nicht erzeugt werden: %s\n" + +#~ msgid "invalid" +#~ msgstr "ungültig" + +#~ msgid "RSA key cannot be used in this version\n" +#~ msgstr "RSA-Schlüssel können in dieser Version nicht verwendet werden\n" + +#~ msgid "No key for user ID\n" +#~ msgstr "Kein Schlüssel für User-ID\n" + +#~ msgid "No user ID for key\n" +#~ msgstr "Keine User-ID für Schlüssel\n" + +#~ msgid "no secret key for decryption available\n" +#~ msgstr "kein geheimer Schlüssel zur Entschlüsselung vorhanden\n" + +#~ msgid " (%d) ElGamal in a v3 packet\n" +#~ msgstr " (%d) ElGamal in einem v3-Paket\n" + +#~ msgid "Key generation can only be used in interactive mode\n" +#~ msgstr "" +#~ "Die Schlüsselerzeugung kann nur im interaktiven Modus benutzt werden.\n" diff --git a/scripts/config.guess b/scripts/config.guess new file mode 100755 index 000000000..27d87fa73 --- /dev/null +++ b/scripts/config.guess @@ -0,0 +1,1366 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. + +timestamp='2002-11-08' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# This shell variable is my proudest work .. or something. --bje + +set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ; +(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old) + || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ; +dummy=$tmpdir/dummy ; +files="$dummy.c $dummy.o $dummy.rel $dummy" ; +trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $files ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; +unset files' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + eval $set_cc_for_build + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + $CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null + if test "$?" = 0 ; then + case `$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; + 3-1307) + UNAME_MACHINE="alphaev7" + ;; + esac + fi + rm -f $dummy.s $dummy && rmdir $tmpdir + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy && rmdir $tmpdir + fi ;; + esac + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + rm -f $dummy.c && rmdir $tmpdir + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i386-pc-interix3 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + rm -f $dummy.c && rmdir $tmpdir + test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + rm -f $dummy.c && rmdir $tmpdir + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 +rm -f $dummy.c $dummy && rmdir $tmpdir + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/scripts/config.sub b/scripts/config.sub new file mode 100755 index 000000000..c4f0b2f52 --- /dev/null +++ b/scripts/config.sub @@ -0,0 +1,1471 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. + +timestamp='2002-11-08' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39 | mipstx39el \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3d) + basic_machine=alpha-cray + os=-unicos + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic4x | c4x*) + basic_machine=tic4x-unknown + os=-coff + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/tests/ChangeLog b/tests/ChangeLog new file mode 100644 index 000000000..c6b3b9af1 --- /dev/null +++ b/tests/ChangeLog @@ -0,0 +1,68 @@ +2002-12-04 Werner Koch + + * inittests (gpgsm.conf): Fake system time. + +2002-10-31 Neal H. Walfield + + * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH here. + (TESTS_ENVIRONMENT): Do it here. And also frob $(LIBGCRYPT_LIBS) + and $(PTH_LIBS). + +2002-10-31 Neal H. Walfield + + * asschk.c (die): New macro. + (read_assuan): If in verbose mode, dump the string that was read. + (write_assuan): Be more verbose on failure. + +2002-09-04 Neal H. Walfield + + * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH, but + rather prepend it. Be more robust and prefer printf over echo -n. + +2002-09-04 Marcus Brinkmann + + * asschk.c (start_server): Close the parent's file descriptors in + the child. + (read_assuan): Variable NREAD removed. Cut off the received line + currectly if more than one line was read. + +2002-09-03 Neal H. Walfield + + * Makefile.am (inittests.stamp): Construct an LD_LIBRARY_PATH from + LDFLAGS. + +2002-08-09 Werner Koch + + * asschk.c (cmd_getenv): New. + (expand_line): Allow / as variable name delimiter. + * sm-sign+verify, sm-verify: Use $srcdir so that a VPATH build works. + + * Makefile.am: Fixes for make dist. + * samplekets/Makefile.am: New. + +2002-08-08 Werner Koch + + * asschk.c: Added some new features. + * runtest, inittests: New. + * text-1.txt, text-2.txt, text-3.txt: New. + * text-1.osig.pem, text-1.dsig.pem, text-1.osig-bad.pem: New. + * text-2.osig.pem, text-2.osig-bad.pem: New. + * samplekeys : New directory + * sm-verify, sm-sign+verify: The first test scripts. + +2002-08-06 Werner Koch + + * Makefile.am, asschk.c: New. + + + Copyright 2002 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file 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. + + diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 000000000..622b5fe58 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,78 @@ +# Makefile.am -tests makefile for libxtime +# Copyright (C) 2002 Free Software Foundation, Inc. +# +# This file is part of GnuPG. +# +# GnuPG is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GnuPG is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +## Process this file with automake to produce Makefile.in + +GPGSM = ../sm/gpgsm + +# We can't unset a variable here so we unset GPG_AGENT_INFO in runtest +TESTS_ENVIRONMENT = GNUPGHOME=`pwd` LC_ALL=C GPGSM=$(GPGSM) \ + LD_LIBRARY_PATH=$$(seen=0; \ + for i in $(LDFLAGS) $(LIBGCRYPT_LIBS) $(PTH_LIBS); \ + do \ + if echo "$$i" | egrep '^-L' >/dev/null 2>&1; \ + then \ + if test $$seen = 0; \ + then \ + seen=1; \ + else \ + printf ":"; \ + fi; \ + printf "%s" "$${i}" | sed 's/^-L//'; \ + fi; \ + done; \ + if test $$seen != 0 \ + && test x$${LD_LIBRARY_PATH} != x; \ + then \ + printf ":"; \ + fi; \ + printf "%s" "$${LD_LIBRARY_PATH}") $(srcdir)/runtest + +testscripts = sm-sign+verify sm-verify + +EXTRA_DIST = runtest inittests $(testscripts) \ + text-1.txt text-2.txt text-3.txt \ + text-1.osig.pem text-1.dsig.pem text-1.osig-bad.pem \ + text-2.osig.pem text-2.osig-bad.pem \ + samplekeys/32100C27173EF6E9C4E9A25D3D69F86D37A4F939.key \ + samplekeys/cert_g10code_pete1.pem \ + samplekeys/cert_g10code_test1.pem \ + samplekeys/cert_g10code_theo1.pem + +TESTS = $(testscripts) + +CLEANFILES = inittests.stamp x y y z out err + *.lock .\#lk* + +DISTCLEANFILES = pubring.kbx~ random_seed + +noinst_PROGRAMS = asschk + +asschk_SOURCES = asschk.c + + +all-local: inittests.stamp + +clean-local: + srcdir=$(srcdir) $(TESTS_ENVIRONMENT) $(srcdir)/inittests --clean + +inittests.stamp: inittests + srcdir=$(srcdir) $(TESTS_ENVIRONMENT) $(srcdir)/inittests + echo timestamp >./inittests.stamp + diff --git a/tests/asschk.c b/tests/asschk.c new file mode 100644 index 000000000..83a8ca5af --- /dev/null +++ b/tests/asschk.c @@ -0,0 +1,1059 @@ +/* asschk.c - Assuan Server Checker + * Copyright (C) 2002 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* This is a simple stand-alone Assuan server test program. We don't + want to use the assuan library because we don't want to hide errors + in that library. + + The script language is line based. Empty lines or lines containing + only white spaces are ignored, line with a hash sign as first non + white space character are treated as comments. + + A simple macro mechanism is implemnted. Macros are expanded before + a line is processed but after comment processing. Macros are only + expanded once and non existing macros expand to the empty string. + A macro is dereferenced by prefixing its name with a dollar sign; + the end of the name is currently indicated by a white space, a + dollar sign or a slash. To use a dollor sign verbatim, double it. + + A macro is assigned by prefixing a statement with the macro name + and an equal sign. The value is assigned verbatim if it does not + resemble a command, otherwise the return value of the command will + get assigned. The command "let" may be used to assign values + unambigiously and it should be used if the value starts with a + letter. + + Conditions are not yes implemented except for a simple evaluation + which yields false for an empty string or the string "0". The + result may be negated by prefixing with a '!'. + + The general syntax of a command is: + + [ =] [] + + If NAME is not specifed but the statement returns a value it is + assigned to the name "?" so that it can be referenced using "$?". + The following commands are implemented: + + let + Return VALUE. + + echo + Print VALUE. + + openfile + Open file FILENAME for read access and retrun the file descriptor. + + createfile + Create file FILENAME, open for write access and retrun the file + descriptor. + + pipeserver + Connect to the Assuan server PROGRAM. + + send + Send LINE to the server. + + expect-ok + Expect an OK response from the server. Status and data out put + is ignored. + + expect-err + Expect an ERR response from the server. Status and data out put + is ignored. + + count-status + Initialize the assigned variable to 0 and assign it as an counter for + status code CODE. This command must be called with an assignment. + + quit + Terminate the process. + + quit-if + Terminate the process if CONDITION evaluates to true. + + fail-if + Terminate the process with an exit code of 1 if CONDITION + evaluates to true. + + cmpfiles + Returns true when the content of the files FIRST and SECOND match. + + getenv + Return the value of the environment variable NAME. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) +# define ATTR_PRINTF(f,a) __attribute__ ((format (printf,f,a))) +#else +# define ATTR_PRINTF(f,a) +#endif + +#define spacep(p) (*(p) == ' ' || *(p) == '\t') + +#define MAX_LINELEN 2048 + +typedef enum { + LINE_OK = 0, + LINE_ERR, + LINE_STAT, + LINE_DATA, + LINE_END, +} LINETYPE; + +typedef enum { + VARTYPE_SIMPLE = 0, + VARTYPE_FD, + VARTYPE_COUNTER +} VARTYPE; + + +struct variable_s { + struct variable_s *next; + VARTYPE type; + unsigned int count; + char *value; + char name[1]; +}; +typedef struct variable_s *VARIABLE; + + +static void die (const char *format, ...) ATTR_PRINTF(1,2); + + +/* Name of this program to be printed in error messages. */ +static const char *invocation_name; + +/* Talk a bit about what is going on. */ +static int opt_verbose; + +/* Option to ignore the echo command. */ +static int opt_no_echo; + +/* File descriptors used to communicate with the current server. */ +static int server_send_fd = -1; +static int server_recv_fd = -1; + +/* The Assuan protocol limits the line length to 1024, so we can + safely use a (larger) buffer. The buffer is filled using the + read_assuan(). */ +static char recv_line[MAX_LINELEN]; +/* Tell the status of the current line. */ +static LINETYPE recv_type; + +/* This is our variable storage. */ +static VARIABLE variable_list; + + +static void +die (const char *format, ...) +{ + va_list arg_ptr; + + fflush (stdout); + fprintf (stderr, "%s: ", invocation_name); + + va_start (arg_ptr, format); + vfprintf (stderr, format, arg_ptr); + va_end (arg_ptr); + putc ('\n', stderr); + + exit (1); +} + +#define die(format, args...) (die) ("%s: " format, __FUNCTION__ , ##args) + +static void +err (const char *format, ...) +{ + va_list arg_ptr; + + fflush (stdout); + fprintf (stderr, "%s: ", invocation_name); + + va_start (arg_ptr, format); + vfprintf (stderr, format, arg_ptr); + va_end (arg_ptr); + putc ('\n', stderr); +} + +static void * +xmalloc (size_t n) +{ + void *p = malloc (n); + if (!p) + die ("out of core"); + return p; +} + +static void * +xcalloc (size_t n, size_t m) +{ + void *p = calloc (n, m); + if (!p) + die ("out of core"); + return p; +} + +static char * +xstrdup (const char *s) +{ + char *p = xmalloc (strlen (s)+1); + strcpy (p, s); + return p; +} + + +/* Write LENGTH bytes from BUFFER to FD. */ +static int +writen (int fd, const char *buffer, size_t length) +{ + while (length) + { + int nwritten = write (fd, buffer, length); + + if (nwritten < 0) + { + if (errno == EINTR) + continue; + return -1; /* write error */ + } + length -= nwritten; + buffer += nwritten; + } + return 0; /* okay */ +} + + + + +/* Assuan specific stuff. */ + +/* Read a line from FD, store it in the global recv_line, analyze the + type and store that in recv_type. The function terminates on a + communication error. Returns a pointer into the inputline to the + first byte of the arguments. The parsing is very strict to match + excalty what we want to send. */ +static char * +read_assuan (int fd) +{ + static char pending[MAX_LINELEN]; + static size_t pending_len; + size_t nleft = sizeof recv_line; + char *buf = recv_line; + char *p; + + while (nleft > 0) + { + int n; + + if (pending_len) + { + if (pending_len >= nleft) + die ("received line too large"); + memcpy (buf, pending, pending_len); + n = pending_len; + pending_len = 0; + } + else + n = read (fd, buf, nleft); + + if (opt_verbose) + { + int i; + printf ("%s: read \"", __FUNCTION__); + for (i = 0; i < n; i ++) + putc (buf[i], stdout); + printf ("\"\n"); + } + + if (n < 0) + { + if (errno == EINTR) + continue; + die ("reading fd %d failed: %s", fd, strerror (errno)); + } + else if (!n) + die ("received incomplete line on fd %d", fd); + p = buf; + nleft -= n; + buf += n; + + for (; n && *p != '\n'; n--, p++) + ; + if (n) + { + if (n>1) + { + n--; + memcpy (pending, p + 1, n); + pending_len = n; + } + *p = '\0'; + break; + } + } + if (!nleft) + die ("received line too large"); + + p = recv_line; + if (p[0] == 'O' && p[1] == 'K' && (p[2] == ' ' || !p[2])) + { + recv_type = LINE_OK; + p += 3; + } + else if (p[0] == 'E' && p[1] == 'R' && p[2] == 'R' + && (p[3] == ' ' || !p[3])) + { + recv_type = LINE_ERR; + p += 4; + } + else if (p[0] == 'S' && (p[1] == ' ' || !p[1])) + { + recv_type = LINE_STAT; + p += 2; + } + else if (p[0] == 'D' && p[1] == ' ') + { + recv_type = LINE_DATA; + p += 2; + } + else if (p[0] == 'E' && p[1] == 'N' && p[2] == 'D' && !p[3]) + { + recv_type = LINE_END; + p += 3; + } + else + die ("invalid line type (%.5s)", p); + + return p; +} + +/* Write LINE to the server using FD. It is expected that the line + contains the terminating linefeed as last character. */ +static void +write_assuan (int fd, const char *line) +{ + char buffer[1026]; + size_t n = strlen (line); + + if (n > 1024) + die ("line too long for Assuan protocol"); + strcpy (buffer, line); + if (!n || buffer[n-1] != '\n') + buffer[n++] = '\n'; + + if (writen (fd, buffer, n)) + die ("sending line (\"%s\") to %d failed: %s", buffer, fd, + strerror (errno)); +} + + +/* Start the server with path PGMNAME and connect its stdout and + strerr to a newly created pipes; the file descriptors are then + store in the gloabl variables SERVER_SEND_FD and + SERVER_RECV_FD. The initial handcheck is performed.*/ +static void +start_server (const char *pgmname) +{ + int rp[2]; + int wp[2]; + pid_t pid; + + if (pipe (rp) < 0) + die ("pipe creation failed: %s", strerror (errno)); + if (pipe (wp) < 0) + die ("pipe creation failed: %s", strerror (errno)); + + fflush (stdout); + fflush (stderr); + pid = fork (); + if (pid < 0) + die ("fork failed"); + + if (!pid) + { + const char *arg0; + + arg0 = strrchr (pgmname, '/'); + if (arg0) + arg0++; + else + arg0 = pgmname; + + if (wp[0] != STDIN_FILENO) + { + if (dup2 (wp[0], STDIN_FILENO) == -1) + die ("dup2 failed in child: %s", strerror (errno)); + close (wp[0]); + } + if (rp[1] != STDOUT_FILENO) + { + if (dup2 (rp[1], STDOUT_FILENO) == -1) + die ("dup2 failed in child: %s", strerror (errno)); + close (rp[1]); + } + if (!opt_verbose) + { + int fd = open ("/dev/null", O_WRONLY); + if (fd == -1) + die ("can't open `/dev/null': %s", strerror (errno)); + if (dup2 (fd, STDERR_FILENO) == -1) + die ("dup2 failed in child: %s", strerror (errno)); + close (fd); + } + + close (wp[1]); + close (rp[0]); + execl (pgmname, arg0, "--server", NULL); + die ("exec failed for `%s': %s", pgmname, strerror (errno)); + } + close (wp[0]); + close (rp[1]); + server_send_fd = wp[1]; + server_recv_fd = rp[0]; + + read_assuan (server_recv_fd); + if (recv_type != LINE_OK) + die ("no greating message"); +} + + + + + +/* Script intepreter. */ + +static void +unset_var (const char *name) +{ + VARIABLE var; + + for (var=variable_list; var && strcmp (var->name, name); var = var->next) + ; + if (!var) + return; +/* fprintf (stderr, "unsetting `%s'\n", name); */ + + if (var->type == VARTYPE_FD && var->value) + { + int fd; + + fd = atoi (var->value); + if (fd != -1 && fd != 0 && fd != 1 && fd != 2) + close (fd); + } + + free (var->value); + var->value = NULL; + var->type = 0; + var->count = 0; +} + + +static void +set_type_var (const char *name, const char *value, VARTYPE type) +{ + VARIABLE var; + + if (!name) + name = "?"; + for (var=variable_list; var && strcmp (var->name, name); var = var->next) + ; + if (!var) + { + var = xcalloc (1, sizeof *var + strlen (name)); + strcpy (var->name, name); + var->next = variable_list; + variable_list = var; + } + else + free (var->value); + + if (var->type == VARTYPE_FD && var->value) + { + int fd; + + fd = atoi (var->value); + if (fd != -1 && fd != 0 && fd != 1 && fd != 2) + close (fd); + } + + var->type = type; + var->count = 0; + if (var->type == VARTYPE_COUNTER) + { + /* We need some extra sapce as scratch area for get_var. */ + var->value = xmalloc (strlen (value) + 1 + 20); + strcpy (var->value, value); + } + else + var->value = xstrdup (value); +} + +static void +set_var (const char *name, const char *value) +{ + set_type_var (name, value, 0); +} + + +static const char * +get_var (const char *name) +{ + VARIABLE var; + + for (var=variable_list; var && strcmp (var->name, name); var = var->next) + ; + if (!var) + return NULL; + if (var->type == VARTYPE_COUNTER && var->value) + { /* Use the scratch space allocated by set_var. */ + char *p = var->value + strlen(var->value)+1; + sprintf (p, "%u", var->count); + return p; + } + else + return var->value; +} + + +/* Incremente all counter type variables with NAME in their VALUE. */ +static void +inc_counter (const char *name) +{ + VARIABLE var; + + if (!*name) + return; + for (var=variable_list; var; var = var->next) + { + if (var->type == VARTYPE_COUNTER + && var->value && !strcmp (var->value, name)) + var->count++; + } +} + + +/* Expand variables in LINE and return a new allocated buffer if + required. The function might modify LINE if the expanded version + fits into it. */ +static char * +expand_line (char *buffer) +{ + char *line = buffer; + char *p, *pend; + const char *value; + size_t valuelen, n; + char *result = NULL; + + while (*line) + { + p = strchr (line, '$'); + if (!p) + return result; /* nothing more to expand */ + + if (p[1] == '$') /* quoted */ + { + memmove (p, p+1, strlen (p+1)+1); + line = p + 1; + continue; + } + for (pend=p+1; *pend && !spacep (pend) + && *pend != '$' && *pend != '/'; pend++) + ; + if (*pend) + { + int save = *pend; + *pend = 0; + value = get_var (p+1); + *pend = save; + } + else + value = get_var (p+1); + if (!value) + value = ""; + valuelen = strlen (value); + if (valuelen <= pend - p) + { + memcpy (p, value, valuelen); + p += valuelen; + n = pend - p; + if (n) + memmove (p, p+n, strlen (p+n)+1); + line = p; + } + else + { + char *src = result? result : buffer; + char *dst; + + dst = xmalloc (strlen (src) + valuelen + 1); + n = p - src; + memcpy (dst, src, n); + memcpy (dst + n, value, valuelen); + n += valuelen; + strcpy (dst + n, pend); + line = dst + n; + free (result); + result = dst; + } + } + return result; +} + + +/* Evaluate COND and return the result. */ +static int +eval_boolean (const char *cond) +{ + int true = 1; + + for ( ; *cond == '!'; cond++) + true = !true; + if (!*cond || (*cond == '0' && !cond[1])) + return !true; + return true; +} + + + + + +static void +cmd_let (const char *assign_to, char *arg) +{ + set_var (assign_to, arg); +} + + +static void +cmd_echo (const char *assign_to, char *arg) +{ + if (!opt_no_echo) + printf ("%s\n", arg); +} + +static void +cmd_send (const char *assign_to, char *arg) +{ + if (opt_verbose) + fprintf (stderr, "sending `%s'\n", arg); + write_assuan (server_send_fd, arg); +} + +static void +handle_status_line (char *arg) +{ + char *p; + + for (p=arg; *p && !spacep (p); p++) + ; + if (*p) + { + int save = *p; + *p = 0; + inc_counter (arg); + *p = save; + } + else + inc_counter (arg); +} + +static void +cmd_expect_ok (const char *assign_to, char *arg) +{ + if (opt_verbose) + fprintf (stderr, "expecting OK\n"); + do + { + char *p = read_assuan (server_recv_fd); + if (opt_verbose > 1) + fprintf (stderr, "got line `%s'\n", recv_line); + if (recv_type == LINE_STAT) + handle_status_line (p); + } + while (recv_type != LINE_OK && recv_type != LINE_ERR); + if (recv_type != LINE_OK) + die ("expected OK but got `%s'", recv_line); +} + +static void +cmd_expect_err (const char *assign_to, char *arg) +{ + if (opt_verbose) + fprintf (stderr, "expecting ERR\n"); + do + { + char *p = read_assuan (server_recv_fd); + if (opt_verbose > 1) + fprintf (stderr, "got line `%s'\n", recv_line); + if (recv_type == LINE_STAT) + handle_status_line (p); + } + while (recv_type != LINE_OK && recv_type != LINE_ERR); + if (recv_type != LINE_ERR) + die ("expected ERR but got `%s'", recv_line); +} + +static void +cmd_count_status (const char *assign_to, char *arg) +{ + char *p; + + if (!*assign_to || !*arg) + die ("syntax error: count-status requires an argument and a variable"); + + for (p=arg; *p && !spacep (p); p++) + ; + if (*p) + { + for (*p++ = 0; spacep (p); p++) + ; + if (*p) + die ("cmpfiles: syntax error"); + } + set_type_var (assign_to, arg, VARTYPE_COUNTER); +} + +static void +cmd_openfile (const char *assign_to, char *arg) +{ + int fd; + char numbuf[20]; + + do + fd = open (arg, O_RDONLY); + while (fd == -1 && errno == EINTR); + if (fd == -1) + die ("error opening `%s': %s", arg, strerror (errno)); + + sprintf (numbuf, "%d", fd); + set_type_var (assign_to, numbuf, VARTYPE_FD); +} + +static void +cmd_createfile (const char *assign_to, char *arg) +{ + int fd; + char numbuf[20]; + + do + fd = open (arg, O_WRONLY|O_CREAT|O_TRUNC, 0666); + while (fd == -1 && errno == EINTR); + if (fd == -1) + die ("error creating `%s': %s", arg, strerror (errno)); + + sprintf (numbuf, "%d", fd); + set_type_var (assign_to, numbuf, VARTYPE_FD); +} + + +static void +cmd_pipeserver (const char *assign_to, char *arg) +{ + if (!*arg) + die ("syntax error: servername missing"); + + start_server (arg); +} + + +static void +cmd_quit_if(const char *assign_to, char *arg) +{ + if (eval_boolean (arg)) + exit (0); +} + +static void +cmd_fail_if(const char *assign_to, char *arg) +{ + if (eval_boolean (arg)) + exit (1); +} + + +static void +cmd_cmpfiles (const char *assign_to, char *arg) +{ + char *p = arg; + char *second; + FILE *fp1, *fp2; + char buffer1[2048]; /* note: both must be of equal size. */ + char buffer2[2048]; + size_t nread1, nread2; + int rc = 0; + + set_var (assign_to, "0"); + for (p=arg; *p && !spacep (p); p++) + ; + if (!*p) + die ("cmpfiles: syntax error"); + for (*p++ = 0; spacep (p); p++) + ; + second = p; + for (; *p && !spacep (p); p++) + ; + if (*p) + { + for (*p++ = 0; spacep (p); p++) + ; + if (*p) + die ("cmpfiles: syntax error"); + } + + fp1 = fopen (arg, "rb"); + if (!fp1) + { + err ("can't open `%s': %s", arg, strerror (errno)); + return; + } + fp2 = fopen (second, "rb"); + if (!fp2) + { + err ("can't open `%s': %s", second, strerror (errno)); + fclose (fp1); + return; + } + while ( (nread1 = fread (buffer1, 1, sizeof buffer1, fp1))) + { + if (ferror (fp1)) + break; + nread2 = fread (buffer2, 1, sizeof buffer2, fp2); + if (ferror (fp2)) + break; + if (nread1 != nread2 || memcmp (buffer1, buffer2, nread1)) + { + rc = 1; + break; + } + } + if (feof (fp1) && feof (fp2) && !rc) + { + if (opt_verbose) + err ("files match"); + set_var (assign_to, "1"); + } + else if (!rc) + err ("cmpfiles: read error: %s", strerror (errno)); + else + err ("cmpfiles: mismatch"); + fclose (fp1); + fclose (fp2); +} + +static void +cmd_getenv (const char *assign_to, char *arg) +{ + const char *s; + s = *arg? getenv (arg):""; + set_var (assign_to, s? s:""); +} + + + + +/* Process the current script line LINE. */ +static int +interpreter (char *line) +{ + static struct { + const char *name; + void (*fnc)(const char*, char*); + } cmdtbl[] = { + { "let" , cmd_let }, + { "echo" , cmd_echo }, + { "send" , cmd_send }, + { "expect-ok" , cmd_expect_ok }, + { "expect-err", cmd_expect_err }, + { "count-status", cmd_count_status }, + { "openfile" , cmd_openfile }, + { "createfile", cmd_createfile }, + { "pipeserver", cmd_pipeserver }, + { "quit" , NULL }, + { "quit-if" , cmd_quit_if }, + { "fail-if" , cmd_fail_if }, + { "cmpfiles" , cmd_cmpfiles }, + { "getenv" , cmd_getenv }, + { NULL } + }; + char *p, *save_p; + int i, save_c; + char *stmt = NULL; + char *assign_to = NULL; + char *must_free = NULL; + + for ( ;spacep (line); line++) + ; + if (!*line || *line == '#') + return 0; /* empty or comment */ + p = expand_line (line); + if (p) + { + must_free = p; + line = p; + for ( ;spacep (line); line++) + ; + if (!*line || *line == '#') + { + free (must_free); + return 0; /* empty or comment */ + } + } + for (p=line; *p && !spacep (p) && *p != '='; p++) + ; + if (*p == '=') + { + *p = 0; + assign_to = line; + } + else if (*p) + { + for (*p++ = 0; spacep (p); p++) + ; + if (*p == '=') + assign_to = line; + } + if (!*line) + die ("syntax error"); + stmt = line; + save_c = 0; + save_p = NULL; + if (assign_to) + { /* this is an assignment */ + for (p++; spacep (p); p++) + ; + if (!*p) + { + unset_var (assign_to); + free (must_free); + return 0; + } + stmt = p; + for (; *p && !spacep (p); p++) + ; + if (*p) + { + save_p = p; + save_c = *p; + for (*p++ = 0; spacep (p); p++) + ; + } + } + for (i=0; cmdtbl[i].name && strcmp (stmt, cmdtbl[i].name); i++) + ; + if (!cmdtbl[i].name) + { + if (!assign_to) + die ("invalid statement `%s'\n", stmt); + if (save_p) + *save_p = save_c; + set_var (assign_to, stmt); + free (must_free); + return 0; + } + + if (cmdtbl[i].fnc) + cmdtbl[i].fnc (assign_to, p); + free (must_free); + return cmdtbl[i].fnc? 0:1; +} + + + +int +main (int argc, char **argv) +{ + char buffer[2048]; + char *p, *pend; + + if (!argc) + invocation_name = "asschk"; + else + { + invocation_name = *argv++; + argc--; + p = strrchr (invocation_name, '/'); + if (p) + invocation_name = p+1; + } + + + set_var ("?","1"); /* defaults to true */ + + for (; argc; argc--, argv++) + { + p = *argv; + if (*p != '-') + break; + if (!strcmp (p, "--verbose")) + opt_verbose++; + else if (!strcmp (p, "--no-echo")) + opt_no_echo++; + else if (*p == '-' && p[1] == 'D') + { + p += 2; + pend = strchr (p, '='); + if (pend) + { + int tmp = *pend; + *pend = 0; + set_var (p, pend+1); + *pend = tmp; + } + else + set_var (p, "1"); + } + else if (*p == '-' && p[1] == '-' && !p[2]) + { + argc--; argv++; + break; + } + else + break; + } + if (argc) + die ("usage: asschk [--verbose] {-D[=]}"); + + + while (fgets (buffer, sizeof buffer, stdin)) + { + p = strchr (buffer,'\n'); + if (!p) + die ("incomplete script line"); + *p = 0; + if (interpreter (buffer)) + break; + fflush (stdout); + } + return 0; +} + diff --git a/tests/inittests b/tests/inittests new file mode 100755 index 000000000..05a94eb68 --- /dev/null +++ b/tests/inittests @@ -0,0 +1,99 @@ +#!/bin/sh +# Copyright (C) 2002 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file 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. + +set -e + +sample_certs=' +cert_g10code_test1.pem +cert_g10code_pete1.pem +cert_g10code_theo1.pem +' + +private_keys=' +32100C27173EF6E9C4E9A25D3D69F86D37A4F939 +' + +clean_files=' +gpgsm.conf gpg-agent.conf trustlist.txt pubring.kbx +msg msg.sig msg.unsig +' + + +[ -z "$srcdir" ] && srcdir=. +[ -z "$GPGSM" ] && GPGSM=../sm/gpgsm + +if [ -d $srcdir/samplekeys ] \ + && grep TESTS_ENVIRONMENT Makefile >/dev/null 2>&1; then + : +else + # During make distclean the Makefile has already been removed, + # so we need this extra test. + if ! grep gnupg-test-directory testdir.stamp >/dev/null 2>&1; then + echo "inittests: please cd to the tests directory first" >&2 + exit 1 + fi +fi + +if [ "$1" = "--clean" ]; then + if [ -d private-keys-v1.d ]; then + rm private-keys-v1.d/* 2>/dev/null || true + rmdir private-keys-v1.d + fi + rm ${clean_files} testdir.stamp 2>/dev/null || true + exit 0 +fi + +if [ "$GNUPGHOME" != "`pwd`" ]; then + echo "inittests: please set GNUPGHOME to the test directory" >&2 + exit 1 +fi + +if [ -n "$GPG_AGENT_INFO" ]; then + echo "inittests: please unset GPG_AGENT_INFO" >&2 + exit 1 +fi + +# A stamp file used with --clean +echo gnupg-test-directory > testdir.stamp + + +# Create the private key directy if it does not exists and copy +# the sample keys. +[ -d private-keys-v1.d ] || mkdir private-keys-v1.d +for i in ${private_keys}; do + cat ${srcdir}/samplekeys/$i.key >private-keys-v1.d/$i.key +done + +# Create the configuration scripts +# Note, die to an expired test certificate, we need to use +# the faked system time option. +cat > gpgsm.conf < gpg-agent.conf < trustlist.txt <