mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
Added iconv support and doc cleanups.
This commit is contained in:
parent
c9f8a69f0f
commit
2db8df0ba3
5
NEWS
5
NEWS
@ -1,6 +1,9 @@
|
|||||||
Noteworthy changes in version 1.9.24
|
Noteworthy changes in version 1.9.90
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
|
* Made readline work for gpg.
|
||||||
|
|
||||||
|
* Cleanups und minor bug fixes.
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 1.9.23 (2006-09-18)
|
Noteworthy changes in version 1.9.23 (2006-09-18)
|
||||||
|
16
TODO
16
TODO
@ -77,10 +77,6 @@ might want to have an agent context for each service request
|
|||||||
|
|
||||||
** Add a test to check the extkeyusage.
|
** Add a test to check the extkeyusage.
|
||||||
|
|
||||||
* doc/
|
|
||||||
** Explain how to setup a root CA key as trusted
|
|
||||||
** Explain how trustlist.txt might be managed.
|
|
||||||
|
|
||||||
* Windows port
|
* Windows port
|
||||||
** gpgsm's LISTKEYS does not yet work
|
** gpgsm's LISTKEYS does not yet work
|
||||||
Fix is to change everything to libestream
|
Fix is to change everything to libestream
|
||||||
@ -90,12 +86,10 @@ might want to have an agent context for each service request
|
|||||||
|
|
||||||
* sm/
|
* sm/
|
||||||
** check that we issue NO_SECKEY xxx if a -u key was not found
|
** check that we issue NO_SECKEY xxx if a -u key was not found
|
||||||
We don't. The messages retruned are also wrong (recipient vs. signer).
|
We don't. The messages returned are also wrong (recipient vs. signer).
|
||||||
|
|
||||||
* jnlib/
|
* jnlib/
|
||||||
** provide jnlib_malloc and try to remove all jnlib_xmalloc.
|
** provide jnlib_malloc and try to remove all jnlib_xmalloc.
|
||||||
** Extend utf8conv.c to make use of iconv.
|
|
||||||
Need to merge with the code in 1.4/util/strgutil.c.
|
|
||||||
|
|
||||||
* g10/
|
* g10/
|
||||||
** issue a NO_SECKEY xxxx if a -u key was not found.
|
** issue a NO_SECKEY xxxx if a -u key was not found.
|
||||||
@ -109,13 +103,5 @@ might want to have an agent context for each service request
|
|||||||
As soon as we switch to libgcrypt 1.3 we should remove the hard
|
As soon as we switch to libgcrypt 1.3 we should remove the hard
|
||||||
coded constant in random_is_faked.
|
coded constant in random_is_faked.
|
||||||
|
|
||||||
|
|
||||||
* common/
|
|
||||||
** ttyio
|
|
||||||
Add completion support.
|
|
||||||
** yesno
|
|
||||||
Update to gpg 1.4.3 version
|
|
||||||
|
|
||||||
|
|
||||||
* Extend selinux support to other modules
|
* Extend selinux support to other modules
|
||||||
|
|
||||||
|
@ -895,9 +895,6 @@ fi
|
|||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS([string.h unistd.h langinfo.h termio.h locale.h getopt.h])
|
AC_CHECK_HEADERS([string.h unistd.h langinfo.h termio.h locale.h getopt.h])
|
||||||
AC_CHECK_HEADERS([pwd.h inttypes.h])
|
AC_CHECK_HEADERS([pwd.h inttypes.h])
|
||||||
# Note that we do not check for iconv here because this is done anyway
|
|
||||||
# by the gettext checks and thus it allows us to disable the use of
|
|
||||||
# iconv by using --disable-nls.
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
2006-09-22 Werner Koch <wk@g10code.com>
|
2006-09-22 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* instguide.texi (Installation): New.
|
||||||
|
* assuan.texi (Assuan): Removed. Use the libassuan manual instead.
|
||||||
|
* gnupg.texi: Reflect these changes.
|
||||||
|
|
||||||
* gpg.texi: Make some parts depend on the "gpgone" set
|
* gpg.texi: Make some parts depend on the "gpgone" set
|
||||||
command. This allows us to use the same source for gpg1 and gpg2.
|
command. This allows us to use the same source for gpg1 and gpg2.
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ info_TEXINFOS = gnupg.texi
|
|||||||
dist_pkgdata_DATA = qualified.txt FAQ faq.html com-certs.pem
|
dist_pkgdata_DATA = qualified.txt FAQ faq.html com-certs.pem
|
||||||
|
|
||||||
gnupg_TEXINFOS = \
|
gnupg_TEXINFOS = \
|
||||||
gpg.texi gpgsm.texi gpg-agent.texi scdaemon.texi assuan.texi \
|
gpg.texi gpgsm.texi gpg-agent.texi scdaemon.texi instguide.texi \
|
||||||
tools.texi debugging.texi glossary.texi contrib.texi gpl.texi \
|
tools.texi debugging.texi glossary.texi contrib.texi gpl.texi \
|
||||||
sysnotes.texi gnupg-card-architecture.fig
|
sysnotes.texi gnupg-card-architecture.fig
|
||||||
|
|
||||||
|
193
doc/assuan.texi
193
doc/assuan.texi
@ -1,193 +0,0 @@
|
|||||||
@c Copyright (C) 2002 Free Software Foundation, Inc.
|
|
||||||
@c This is part of the GnuPG manual.
|
|
||||||
@c For copying conditions, see the file gnupg.texi.
|
|
||||||
|
|
||||||
@node Assuan
|
|
||||||
@appendix Description of the Assuan protocol.
|
|
||||||
@cindex Assuan, IPC
|
|
||||||
|
|
||||||
The architecture of the modular GnuPG system is based on a couple of
|
|
||||||
highly specialized modules which make up a network of client server
|
|
||||||
communication. A common framework for intermodule communication is
|
|
||||||
therefore needed and should be implemented in a library.
|
|
||||||
|
|
||||||
@appendixsubsec Goals
|
|
||||||
|
|
||||||
@itemize @bullet
|
|
||||||
@item Common framework for module communication
|
|
||||||
@item Easy debugging
|
|
||||||
@item Easy module testing
|
|
||||||
@item Extendible
|
|
||||||
@item Optional authentication and encryption facility
|
|
||||||
@item Usable to access external hardware
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
|
|
||||||
@appendixsubsec Design criteria
|
|
||||||
|
|
||||||
@itemize @bullet
|
|
||||||
@item Client Server with back channel
|
|
||||||
@item Use a mainly text based protocol
|
|
||||||
@item Escape certain control characters
|
|
||||||
@item Allow indefinite data length
|
|
||||||
@item Request confidentiality for parts of the communication
|
|
||||||
@item Dummy module should allow direct linking of client and server.
|
|
||||||
@item Inline data or descriptor passing for bulk data
|
|
||||||
@item No protection against DoS needed
|
|
||||||
@item Subliminal channels are not an issue
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
|
|
||||||
@appendixsubsec Implementation
|
|
||||||
|
|
||||||
@noindent
|
|
||||||
The implementation is line based with a maximum line size of 1000
|
|
||||||
octects. The default IPC mechanism are Unix Domain Sockets.
|
|
||||||
|
|
||||||
On a connect request the server responds either with an okay or an error
|
|
||||||
status. For authentication check the server may send an Inquiry
|
|
||||||
Response prior to the first Okay, it may also issue Status messages.
|
|
||||||
The server must check that the client is allowed to connect, this is
|
|
||||||
done by requesting the credentials for the peer and comparing them to
|
|
||||||
those of the server. This avoids attacks based on wrong socket
|
|
||||||
permissions.
|
|
||||||
|
|
||||||
It may choose to delay the first response in case of an error. The
|
|
||||||
server never closes the connection - however the lower protocol may do
|
|
||||||
so after some time of inactivity or when the connection is in an error
|
|
||||||
state.
|
|
||||||
|
|
||||||
All textual messages are assumed to be in UTF-8 unless otherwise noted.
|
|
||||||
|
|
||||||
|
|
||||||
@appendixsubsec Server responses
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
@item OK [<arbitary debugging information>]
|
|
||||||
Request was successful.
|
|
||||||
|
|
||||||
@item ERR @var{errorcode} [<human readable error description>]
|
|
||||||
Request could not be fulfilled. The error codes are mostly application
|
|
||||||
specific except for a few common ones.
|
|
||||||
|
|
||||||
@item S @var{keyword} <status information depending on keyword>
|
|
||||||
Informational output by the server, still processing the request.
|
|
||||||
|
|
||||||
@item # <string>
|
|
||||||
Comment line issued only for debugging purposes. Totally ignored.
|
|
||||||
|
|
||||||
@item D <raw data>
|
|
||||||
Raw data returned to client. There must be exactly one space after the
|
|
||||||
'D'. The values for '%', CR and LF must be percent escaped; this is
|
|
||||||
encoded as %25, %0D and %0A. Only uppercase letters should be used in
|
|
||||||
the hexadecimal representation. Other characters may be percent escaped
|
|
||||||
for easier debugging. All these Data lines are considered one data
|
|
||||||
stream up to the OK or ERR response. Status and Inquiry Responses
|
|
||||||
may be mixed with the Data lines.
|
|
||||||
|
|
||||||
@item INQUIRE @var{keyword}> <parameters>
|
|
||||||
Server needs further information from the client. The client should
|
|
||||||
answer with a command which is allowed after an inquiry. Note that the
|
|
||||||
server does not confirm that client command but either continues
|
|
||||||
processing or ends processing with an error status. Not all commands
|
|
||||||
are allowed.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
|
|
||||||
A client should only check the first letter of each line and then skip
|
|
||||||
over to the next token (except for data lines where the raw data starts
|
|
||||||
exactly after 2 bytes). Lines larger than 1000 bytes should be
|
|
||||||
treated as a communication error. (The rationale for having a line
|
|
||||||
length limit is to allow for easier multiplexing of multiple channels).
|
|
||||||
|
|
||||||
|
|
||||||
@appendixsubsec Client requests
|
|
||||||
|
|
||||||
The server waits for client requests after he sent an Okay or Error.
|
|
||||||
The client should not issue a request in other cases with the
|
|
||||||
exception of the CANCEL command.
|
|
||||||
|
|
||||||
@example
|
|
||||||
@var{command} <parameters>
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@var{command} is a one word string without preceding white space.
|
|
||||||
Parameters are command specific, CR, LF and the percent signs should be
|
|
||||||
percent escaped as described above. To send a backslash as the last
|
|
||||||
character it should also be percent escaped. Percent escaping is
|
|
||||||
allowed anywhere in the parameters but not in the command. The line
|
|
||||||
ends with a CR, LF or just a LF.
|
|
||||||
|
|
||||||
Not yet implemented feature: If there is a need for a parameter list
|
|
||||||
longer than the line length limit (1000 characters including command and
|
|
||||||
CR, LF), the last character of the line (right before the CR/LF or LF)
|
|
||||||
must be a non-escape encoded backslash. The following line is then
|
|
||||||
expected to be a continuation of the line with the backslash replaced by
|
|
||||||
a blank and the line ending removed.
|
|
||||||
|
|
||||||
@example
|
|
||||||
D <raw data>
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Raw data to the server. There must be exactly one space after the 'D'.
|
|
||||||
The values for '%', CR and LF must be percent escaped; this is encoded
|
|
||||||
as %25, %0D and %0A. Only uppercase letters should be used in the
|
|
||||||
hexadecimal representation. Other characters may be percent escaped for
|
|
||||||
easier debugging. All these Data lines are considered one data stream
|
|
||||||
up to the OKAY or ERROR response. Status and Inquiry Responses may be
|
|
||||||
mixed with the Data lines.
|
|
||||||
|
|
||||||
@example
|
|
||||||
END
|
|
||||||
@end example
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Lines beginning with a @code{#} or empty lines are ignored. This is
|
|
||||||
useful to comment test scripts.
|
|
||||||
|
|
||||||
|
|
||||||
Although the commands are application specific, some of them are used by
|
|
||||||
all protocols and partly directly supported by the Assuan library:
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
@item CANCEL
|
|
||||||
his is the one special command which aborts the current request. it can
|
|
||||||
be sent at any time and the server will stop its operation right before
|
|
||||||
it would send the next response line (of any type).
|
|
||||||
|
|
||||||
@item BYE
|
|
||||||
Close the connect, the server will reply with an @code{OK}.
|
|
||||||
|
|
||||||
@item AUTH
|
|
||||||
Not yet specified as we don't implement it in the first phase. See my
|
|
||||||
mail to gpa-dev on 2001-10-25 about the rationale for measurements
|
|
||||||
against local attacks.
|
|
||||||
|
|
||||||
@item RESET
|
|
||||||
Reset the connection but not any existing authentication. The server
|
|
||||||
should release all resources associated with the connection.
|
|
||||||
|
|
||||||
@item END
|
|
||||||
Used by a client to mark the end of raw data. The server may send END
|
|
||||||
to indicate a partial end of data.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@appendixsubsec Error Codes
|
|
||||||
|
|
||||||
Here we keep a list of error codes used in any Assuan based
|
|
||||||
protocol. The format is the string @code{ERR}, white space, the error
|
|
||||||
number, white space, a textual description of the error.
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
|
|
||||||
@item 100 Unknown Command
|
|
||||||
@item 101 Not Implemented
|
|
||||||
|
|
||||||
@item 301 certificate has been revoked [DirMngr]
|
|
||||||
@item 302 no CRL known for this certificate [DirMngr]
|
|
||||||
@item 303 CRL is too old and a new one could not be retrieved [DirMngr]
|
|
||||||
|
|
||||||
@end table
|
|
@ -114,6 +114,8 @@ the administration and the architecture.
|
|||||||
@end ifnottex
|
@end ifnottex
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
|
* Installation:: A short installation guide.
|
||||||
|
|
||||||
* Invoking GPG:: Using the OpenPGP protocol.
|
* Invoking GPG:: Using the OpenPGP protocol.
|
||||||
* Invoking GPGSM:: Using the S/MIME protocol.
|
* Invoking GPGSM:: Using the S/MIME protocol.
|
||||||
* Invoking GPG-AGENT:: How to launch the secret key daemon.
|
* Invoking GPG-AGENT:: How to launch the secret key daemon.
|
||||||
@ -124,7 +126,7 @@ the administration and the architecture.
|
|||||||
|
|
||||||
* System Notes:: Notes pertaining to certain OSes.
|
* System Notes:: Notes pertaining to certain OSes.
|
||||||
* Debugging:: How to solve problems
|
* Debugging:: How to solve problems
|
||||||
* Assuan:: Description of the Assuan protocol.
|
|
||||||
* Copying:: GNU General Public License says
|
* Copying:: GNU General Public License says
|
||||||
how you can copy and share GnuPG
|
how you can copy and share GnuPG
|
||||||
* Contributors:: People who have contributed to GnuPG.
|
* Contributors:: People who have contributed to GnuPG.
|
||||||
@ -148,6 +150,8 @@ the administration and the architecture.
|
|||||||
@end ifhtml
|
@end ifhtml
|
||||||
|
|
||||||
|
|
||||||
|
@include instguide.texi
|
||||||
|
|
||||||
@include gpg.texi
|
@include gpg.texi
|
||||||
@include gpgsm.texi
|
@include gpgsm.texi
|
||||||
@include gpg-agent.texi
|
@include gpg-agent.texi
|
||||||
@ -165,7 +169,6 @@ the administration and the architecture.
|
|||||||
|
|
||||||
@include debugging.texi
|
@include debugging.texi
|
||||||
|
|
||||||
@include assuan.texi
|
|
||||||
@include gpl.texi
|
@include gpl.texi
|
||||||
|
|
||||||
@include contrib.texi
|
@include contrib.texi
|
||||||
|
19
doc/instguide.texi
Normal file
19
doc/instguide.texi
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
@c instguide.texi - Installation guide for GnuPG
|
||||||
|
@c Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
@c This is part of the GnuPG manual.
|
||||||
|
@c For copying conditions, see the file gnupg.texi.
|
||||||
|
|
||||||
|
@node Installation
|
||||||
|
@chapter A short installation guide.
|
||||||
|
|
||||||
|
[to be written]
|
||||||
|
|
||||||
|
Tell how to setup the system, install certificates, how dirmngr relates
|
||||||
|
to GnuPG etc.
|
||||||
|
|
||||||
|
** Explain how to setup a root CA key as trusted
|
||||||
|
** Explain how trustlist.txt might be managed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
|||||||
|
2006-09-22 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* utf8conv.c: Reworked to match the gnupg 1.4.5 code. This now
|
||||||
|
requires iconv support but this is reasonable for all modern
|
||||||
|
systems.
|
||||||
|
|
||||||
2006-08-29 Werner Koch <wk@g10code.com>
|
2006-08-29 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
* logging.c (do_logv): Emit a missing LF for fatal errors.
|
* logging.c (do_logv): Emit a missing LF for fatal errors.
|
||||||
|
544
jnlib/utf8conv.c
544
jnlib/utf8conv.c
@ -28,65 +28,164 @@
|
|||||||
#ifdef HAVE_LANGINFO_CODESET
|
#ifdef HAVE_LANGINFO_CODESET
|
||||||
#include <langinfo.h>
|
#include <langinfo.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <errno.h>
|
||||||
|
#include <iconv.h>
|
||||||
|
|
||||||
#include "libjnlib-config.h"
|
#include "libjnlib-config.h"
|
||||||
#include "stringhelp.h"
|
#include "stringhelp.h"
|
||||||
#include "utf8conv.h"
|
#include "utf8conv.h"
|
||||||
|
|
||||||
|
#ifndef MB_LEN_MAX
|
||||||
static ushort koi8_unicode[128] = {
|
#define MB_LEN_MAX 16
|
||||||
0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
|
#endif
|
||||||
0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
|
|
||||||
0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
|
|
||||||
0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
|
|
||||||
0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
|
|
||||||
0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
|
|
||||||
0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
|
|
||||||
0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
|
|
||||||
0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
|
|
||||||
0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
|
|
||||||
0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
|
|
||||||
0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
|
|
||||||
0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
|
|
||||||
0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
|
|
||||||
0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
|
|
||||||
0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
|
|
||||||
};
|
|
||||||
|
|
||||||
static ushort latin2_unicode[128] = {
|
|
||||||
0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
|
|
||||||
0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
|
|
||||||
0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
|
|
||||||
0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
|
|
||||||
0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
|
|
||||||
0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
|
|
||||||
0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
|
|
||||||
0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
|
|
||||||
0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
|
|
||||||
0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
|
|
||||||
0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
|
|
||||||
0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
|
|
||||||
0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
|
|
||||||
0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
|
|
||||||
0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
|
|
||||||
0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static const char *active_charset_name = "iso-8859-1";
|
static const char *active_charset_name = "iso-8859-1";
|
||||||
static ushort *active_charset = NULL;
|
static unsigned short *active_charset;
|
||||||
static int no_translation = 0;
|
static int no_translation; /* Set to true if we let simply pass through. */
|
||||||
|
static int use_iconv; /* iconv comversion fucntions required. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Error handler for iconv failures. This is needed to not clutter the
|
||||||
|
output with repeated diagnostics about a missing conversion. */
|
||||||
|
static void
|
||||||
|
handle_iconv_error (const char *to, const char *from, int use_fallback)
|
||||||
|
{
|
||||||
|
if (errno == EINVAL)
|
||||||
|
{
|
||||||
|
static int shown1, shown2;
|
||||||
|
int x;
|
||||||
|
|
||||||
|
if (to && !strcmp (to, "utf-8"))
|
||||||
|
{
|
||||||
|
x = shown1;
|
||||||
|
shown1 = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = shown2;
|
||||||
|
shown2 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!x)
|
||||||
|
log_info (_("conversion from `%s' to `%s' not available\n"),
|
||||||
|
from, to);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
static int shown;
|
||||||
|
|
||||||
|
if (!shown)
|
||||||
|
log_info (_("iconv_open failed: %s\n"), strerror (errno));
|
||||||
|
shown = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use_fallback)
|
||||||
|
{
|
||||||
|
/* To avoid further error messages we fallback to Latin-1 for the
|
||||||
|
native encoding. This is justified as one can expect that on a
|
||||||
|
utf-8 enabled system nl_langinfo() will work and thus we won't
|
||||||
|
never get to here. Thus Latin-1 seems to be a reasonable
|
||||||
|
default. */
|
||||||
|
active_charset_name = "iso-8859-1";
|
||||||
|
no_translation = 0;
|
||||||
|
active_charset = NULL;
|
||||||
|
use_iconv = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
set_native_charset (const char *newset)
|
set_native_charset (const char *newset)
|
||||||
{
|
{
|
||||||
|
const char *full_newset;
|
||||||
|
|
||||||
if (!newset)
|
if (!newset)
|
||||||
|
{
|
||||||
|
#ifdef HABE_W32_SYSTEM
|
||||||
|
static char codepage[30];
|
||||||
|
unsigned int cpno;
|
||||||
|
const char *aliases;
|
||||||
|
|
||||||
|
/* We are a console program thus we need to use the
|
||||||
|
GetConsoleOutputCP function and not the the GetACP which
|
||||||
|
would give the codepage for a GUI program. Note this is not
|
||||||
|
a bulletproof detection because GetConsoleCP might return a
|
||||||
|
different one for console input. Not sure how to cope with
|
||||||
|
that. If the console Code page is not known we fall back to
|
||||||
|
the system code page. */
|
||||||
|
cpno = GetConsoleOutputCP ();
|
||||||
|
if (!cpno)
|
||||||
|
cpno = GetACP ();
|
||||||
|
sprintf (codepage, "CP%u", cpno );
|
||||||
|
/* Resolve alias. We use a long string string and not the usual
|
||||||
|
array to optimize if the code is taken to a DSO. Taken from
|
||||||
|
libiconv 1.9.2. */
|
||||||
|
newset = codepage;
|
||||||
|
for (aliases = ("CP936" "\0" "GBK" "\0"
|
||||||
|
"CP1361" "\0" "JOHAB" "\0"
|
||||||
|
"CP20127" "\0" "ASCII" "\0"
|
||||||
|
"CP20866" "\0" "KOI8-R" "\0"
|
||||||
|
"CP21866" "\0" "KOI8-RU" "\0"
|
||||||
|
"CP28591" "\0" "ISO-8859-1" "\0"
|
||||||
|
"CP28592" "\0" "ISO-8859-2" "\0"
|
||||||
|
"CP28593" "\0" "ISO-8859-3" "\0"
|
||||||
|
"CP28594" "\0" "ISO-8859-4" "\0"
|
||||||
|
"CP28595" "\0" "ISO-8859-5" "\0"
|
||||||
|
"CP28596" "\0" "ISO-8859-6" "\0"
|
||||||
|
"CP28597" "\0" "ISO-8859-7" "\0"
|
||||||
|
"CP28598" "\0" "ISO-8859-8" "\0"
|
||||||
|
"CP28599" "\0" "ISO-8859-9" "\0"
|
||||||
|
"CP28605" "\0" "ISO-8859-15" "\0"
|
||||||
|
"CP65001" "\0" "UTF-8" "\0");
|
||||||
|
*aliases;
|
||||||
|
aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
|
||||||
|
{
|
||||||
|
if (!strcmp (codepage, aliases) ||(*aliases == '*' && !aliases[1]))
|
||||||
|
{
|
||||||
|
newset = aliases + strlen (aliases) + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /*!HAVE_W32_SYSTEM*/
|
||||||
|
|
||||||
#ifdef HAVE_LANGINFO_CODESET
|
#ifdef HAVE_LANGINFO_CODESET
|
||||||
newset = nl_langinfo (CODESET);
|
newset = nl_langinfo (CODESET);
|
||||||
#else
|
#else /*!HAVE_LANGINFO_CODESET*/
|
||||||
newset = "8859-1";
|
/* Try to get the used charset from environment variables. */
|
||||||
#endif
|
static char codepage[30];
|
||||||
|
const char *lc, *dot, *mod;
|
||||||
|
|
||||||
|
strcpy (codepage, "iso-8859-1");
|
||||||
|
lc = getenv ("LC_ALL");
|
||||||
|
if (!lc || !*lc)
|
||||||
|
{
|
||||||
|
lc = getenv ("LC_CTYPE");
|
||||||
|
if (!lc || !*lc)
|
||||||
|
lc = getenv ("LANG");
|
||||||
|
}
|
||||||
|
if (lc && *lc)
|
||||||
|
{
|
||||||
|
dot = strchr (lc, '.');
|
||||||
|
if (dot)
|
||||||
|
{
|
||||||
|
mod = strchr (++dot, '@');
|
||||||
|
if (!mod)
|
||||||
|
mod = dot + strlen (dot);
|
||||||
|
if (mod - dot < sizeof codepage && dot != mod)
|
||||||
|
{
|
||||||
|
memcpy (codepage, dot, mod - dot);
|
||||||
|
codepage [mod - dot] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newset = codepage;
|
||||||
|
#endif /*!HAVE_LANGINFO_CODESET*/
|
||||||
|
#endif /*!HAVE_W32_SYSTEM*/
|
||||||
|
}
|
||||||
|
|
||||||
|
full_newset = newset;
|
||||||
if (strlen (newset) > 3 && !ascii_memcasecmp (newset, "iso", 3))
|
if (strlen (newset) > 3 && !ascii_memcasecmp (newset, "iso", 3))
|
||||||
{
|
{
|
||||||
newset += 3;
|
newset += 3;
|
||||||
@ -94,25 +193,23 @@ set_native_charset (const char *newset)
|
|||||||
newset++;
|
newset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Note that we silently assume that plain ASCII is actually meant
|
||||||
|
as Latin-1. This makes sense because many Unix system don't have
|
||||||
|
their locale set up properly and thus would get annoying error
|
||||||
|
messages and we have to handle all the "bug" reports. Latin-1 has
|
||||||
|
always been the character set used for 8 bit characters on Unix
|
||||||
|
systems. */
|
||||||
if ( !*newset
|
if ( !*newset
|
||||||
|| !ascii_strcasecmp (newset, "8859-1" )
|
|| !ascii_strcasecmp (newset, "8859-1" )
|
||||||
|| !ascii_strcasecmp (newset, "8859-15"))
|
|| !ascii_strcasecmp (newset, "646" )
|
||||||
|
|| !ascii_strcasecmp (newset, "ASCII" )
|
||||||
|
|| !ascii_strcasecmp (newset, "ANSI_X3.4-1968" )
|
||||||
|
)
|
||||||
{
|
{
|
||||||
active_charset_name = "iso-8859-1";
|
active_charset_name = "iso-8859-1";
|
||||||
no_translation = 0;
|
no_translation = 0;
|
||||||
active_charset = NULL;
|
active_charset = NULL;
|
||||||
}
|
use_iconv = 0;
|
||||||
else if (!ascii_strcasecmp (newset, "8859-2"))
|
|
||||||
{
|
|
||||||
active_charset_name = "iso-8859-2";
|
|
||||||
no_translation = 0;
|
|
||||||
active_charset = latin2_unicode;
|
|
||||||
}
|
|
||||||
else if (!ascii_strcasecmp (newset, "koi8-r"))
|
|
||||||
{
|
|
||||||
active_charset_name = "koi8-r";
|
|
||||||
no_translation = 0;
|
|
||||||
active_charset = koi8_unicode;
|
|
||||||
}
|
}
|
||||||
else if ( !ascii_strcasecmp (newset, "utf8" )
|
else if ( !ascii_strcasecmp (newset, "utf8" )
|
||||||
|| !ascii_strcasecmp(newset, "utf-8") )
|
|| !ascii_strcasecmp(newset, "utf-8") )
|
||||||
@ -120,9 +217,36 @@ set_native_charset (const char *newset)
|
|||||||
active_charset_name = "utf-8";
|
active_charset_name = "utf-8";
|
||||||
no_translation = 1;
|
no_translation = 1;
|
||||||
active_charset = NULL;
|
active_charset = NULL;
|
||||||
|
use_iconv = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
iconv_t cd;
|
||||||
|
|
||||||
|
#ifdef HAVE_W32_SYSTEM
|
||||||
|
if (load_libiconv ())
|
||||||
return -1;
|
return -1;
|
||||||
|
#endif /*HAVE_W32_SYSTEM*/
|
||||||
|
|
||||||
|
cd = iconv_open (full_newset, "utf-8");
|
||||||
|
if (cd == (iconv_t)-1)
|
||||||
|
{
|
||||||
|
handle_iconv_error (full_newset, "utf-8", 0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
iconv_close (cd);
|
||||||
|
cd = iconv_open ("utf-8", full_newset);
|
||||||
|
if (cd == (iconv_t)-1)
|
||||||
|
{
|
||||||
|
handle_iconv_error ("utf-8", full_newset, 0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
iconv_close (cd);
|
||||||
|
active_charset_name = full_newset;
|
||||||
|
no_translation = 0;
|
||||||
|
active_charset = NULL;
|
||||||
|
use_iconv = 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,10 +256,9 @@ get_native_charset ()
|
|||||||
return active_charset_name;
|
return active_charset_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************
|
|
||||||
* Convert string, which is in native encoding to UTF8 and return the
|
/* Convert string, which is in native encoding to UTF8 and return a
|
||||||
* new allocated UTF8 string.
|
new allocated UTF-8 string. */
|
||||||
*/
|
|
||||||
char *
|
char *
|
||||||
native_to_utf8 (const char *orig_string)
|
native_to_utf8 (const char *orig_string)
|
||||||
{
|
{
|
||||||
@ -147,51 +270,22 @@ native_to_utf8 (const char *orig_string)
|
|||||||
|
|
||||||
if (no_translation)
|
if (no_translation)
|
||||||
{
|
{
|
||||||
|
/* Already utf-8 encoded. */
|
||||||
buffer = jnlib_xstrdup (orig_string);
|
buffer = jnlib_xstrdup (orig_string);
|
||||||
}
|
}
|
||||||
else if (active_charset)
|
else if (!active_charset && !use_iconv)
|
||||||
{
|
{
|
||||||
|
/* For Latin-1 we can avoid the iconv overhead. */
|
||||||
for (s = string; *s; s++)
|
for (s = string; *s; s++)
|
||||||
{
|
{
|
||||||
length++;
|
length++;
|
||||||
if (*s & 0x80)
|
if (*s & 0x80)
|
||||||
length += 2; /* we may need 3 bytes */
|
length++;
|
||||||
}
|
}
|
||||||
buffer = jnlib_xmalloc (length + 1);
|
buffer = jnlib_xmalloc (length + 1);
|
||||||
for (p = (unsigned char *)buffer, s = string; *s; s++)
|
for (p = (unsigned char *)buffer, s = string; *s; s++)
|
||||||
{
|
{
|
||||||
if ( (*s & 0x80 ))
|
if ( (*s & 0x80 ))
|
||||||
{
|
|
||||||
ushort val = active_charset[*s & 0x7f];
|
|
||||||
if (val < 0x0800)
|
|
||||||
{
|
|
||||||
*p++ = 0xc0 | ((val >> 6) & 0x1f);
|
|
||||||
*p++ = 0x80 | (val & 0x3f);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*p++ = 0xe0 | ((val >> 12) & 0x0f);
|
|
||||||
*p++ = 0x80 | ((val >> 6) & 0x3f);
|
|
||||||
*p++ = 0x80 | (val & 0x3f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*p++ = *s;
|
|
||||||
}
|
|
||||||
*p = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (s = string; *s; s++)
|
|
||||||
{
|
|
||||||
length++;
|
|
||||||
if (*s & 0x80)
|
|
||||||
length++;
|
|
||||||
}
|
|
||||||
buffer = jnlib_xmalloc (length + 1);
|
|
||||||
for (p = (unsigned char *)buffer, s = string; *s; s++)
|
|
||||||
{
|
|
||||||
if (*s & 0x80)
|
|
||||||
{
|
{
|
||||||
*p++ = 0xc0 | ((*s >> 6) & 3);
|
*p++ = 0xc0 | ((*s >> 6) & 3);
|
||||||
*p++ = 0x80 | (*s & 0x3f);
|
*p++ = 0x80 | (*s & 0x3f);
|
||||||
@ -201,22 +295,68 @@ native_to_utf8 (const char *orig_string)
|
|||||||
}
|
}
|
||||||
*p = 0;
|
*p = 0;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Need to use iconv. */
|
||||||
|
iconv_t cd;
|
||||||
|
const char *inptr;
|
||||||
|
char *outptr;
|
||||||
|
size_t inbytes, outbytes;
|
||||||
|
|
||||||
|
cd = iconv_open ("utf-8", active_charset_name);
|
||||||
|
if (cd == (iconv_t)-1)
|
||||||
|
{
|
||||||
|
handle_iconv_error ("utf-8", active_charset_name, 1);
|
||||||
|
return native_to_utf8 (string);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (s=string; *s; s++ )
|
||||||
|
{
|
||||||
|
length++;
|
||||||
|
if ((*s & 0x80))
|
||||||
|
length += 5; /* We may need up to 6 bytes for the utf8 output. */
|
||||||
|
}
|
||||||
|
buffer = jnlib_xmalloc (length + 1);
|
||||||
|
|
||||||
|
inptr = string;
|
||||||
|
inbytes = strlen (string);
|
||||||
|
outptr = buffer;
|
||||||
|
outbytes = length;
|
||||||
|
if ( iconv (cd, (ICONV_CONST char **)&inptr, &inbytes,
|
||||||
|
&outptr, &outbytes) == (size_t)-1)
|
||||||
|
{
|
||||||
|
static int shown;
|
||||||
|
|
||||||
|
if (!shown)
|
||||||
|
log_info (_("conversion from `%s' to `%s' failed: %s\n"),
|
||||||
|
active_charset_name, "utf-8", strerror (errno));
|
||||||
|
shown = 1;
|
||||||
|
/* We don't do any conversion at all but use the strings as is. */
|
||||||
|
strcpy (buffer, string);
|
||||||
|
}
|
||||||
|
else /* Success. */
|
||||||
|
{
|
||||||
|
*outptr = 0;
|
||||||
|
/* We could realloc the buffer now but I doubt that it makes
|
||||||
|
much sense given that it will get freed anyway soon
|
||||||
|
after. */
|
||||||
|
}
|
||||||
|
iconv_close (cd);
|
||||||
|
}
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Convert string, which is in UTF8 to native encoding. Replace
|
|
||||||
* illegal encodings by some "\xnn" and quote all control
|
static char *
|
||||||
* characters. A character with value DELIM will always be quoted, it
|
do_utf8_to_native (const char *string, size_t length, int delim,
|
||||||
* must be a vanilla ASCII character. */
|
int with_iconv)
|
||||||
char *
|
|
||||||
utf8_to_native (const char *string, size_t length, int delim)
|
|
||||||
{
|
{
|
||||||
int nleft;
|
int nleft;
|
||||||
int i;
|
int i;
|
||||||
unsigned char encbuf[8];
|
unsigned char encbuf[8];
|
||||||
int encidx;
|
int encidx;
|
||||||
const byte *s;
|
const unsigned char *s;
|
||||||
size_t n;
|
size_t n;
|
||||||
char *buffer = NULL;
|
char *buffer = NULL;
|
||||||
char *p = NULL;
|
char *p = NULL;
|
||||||
@ -224,19 +364,20 @@ utf8_to_native (const char *string, size_t length, int delim)
|
|||||||
size_t slen;
|
size_t slen;
|
||||||
int resync = 0;
|
int resync = 0;
|
||||||
|
|
||||||
/* 1. pass (p==NULL): count the extended utf-8 characters */
|
/* First pass (p==NULL): count the extended utf-8 characters. */
|
||||||
/* 2. pass (p!=NULL): create string */
|
/* Second pass (p!=NULL): create string. */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
for (slen = length, nleft = encidx = 0, n = 0,
|
for (slen = length, nleft = encidx = 0, n = 0,
|
||||||
s = (const unsigned char *)string; slen;
|
s = (const unsigned char *)string;
|
||||||
|
slen;
|
||||||
s++, slen--)
|
s++, slen--)
|
||||||
{
|
{
|
||||||
if (resync)
|
if (resync)
|
||||||
{
|
{
|
||||||
if (!(*s < 128 || (*s >= 0xc0 && *s <= 0xfd)))
|
if (!(*s < 128 || (*s >= 0xc0 && *s <= 0xfd)))
|
||||||
{
|
{
|
||||||
/* still invalid */
|
/* Still invalid. */
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
sprintf (p, "\\x%02x", *s);
|
sprintf (p, "\\x%02x", *s);
|
||||||
@ -250,45 +391,23 @@ utf8_to_native (const char *string, size_t length, int delim)
|
|||||||
if (!nleft)
|
if (!nleft)
|
||||||
{
|
{
|
||||||
if (!(*s & 0x80))
|
if (!(*s & 0x80))
|
||||||
{ /* plain ascii */
|
{
|
||||||
if (*s < 0x20 || *s == 0x7f || *s == delim ||
|
/* Plain ascii. */
|
||||||
(delim && *s == '\\'))
|
if ( delim != -1
|
||||||
|
&& (*s < 0x20 || *s == 0x7f || *s == delim
|
||||||
|
|| (delim && *s == '\\')))
|
||||||
{
|
{
|
||||||
n++;
|
n++;
|
||||||
if (p)
|
if (p)
|
||||||
*p++ = '\\';
|
*p++ = '\\';
|
||||||
switch (*s)
|
switch (*s)
|
||||||
{
|
{
|
||||||
case '\n':
|
case '\n': n++; if ( p ) *p++ = 'n'; break;
|
||||||
n++;
|
case '\r': n++; if ( p ) *p++ = 'r'; break;
|
||||||
if (p)
|
case '\f': n++; if ( p ) *p++ = 'f'; break;
|
||||||
*p++ = 'n';
|
case '\v': n++; if ( p ) *p++ = 'v'; break;
|
||||||
break;
|
case '\b': n++; if ( p ) *p++ = 'b'; break;
|
||||||
case '\r':
|
case 0: n++; if ( p ) *p++ = '0'; break;
|
||||||
n++;
|
|
||||||
if (p)
|
|
||||||
*p++ = 'r';
|
|
||||||
break;
|
|
||||||
case '\f':
|
|
||||||
n++;
|
|
||||||
if (p)
|
|
||||||
*p++ = 'f';
|
|
||||||
break;
|
|
||||||
case '\v':
|
|
||||||
n++;
|
|
||||||
if (p)
|
|
||||||
*p++ = 'v';
|
|
||||||
break;
|
|
||||||
case '\b':
|
|
||||||
n++;
|
|
||||||
if (p)
|
|
||||||
*p++ = 'b';
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
n++;
|
|
||||||
if (p)
|
|
||||||
*p++ = '0';
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
n += 3;
|
n += 3;
|
||||||
if (p)
|
if (p)
|
||||||
@ -306,43 +425,43 @@ utf8_to_native (const char *string, size_t length, int delim)
|
|||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((*s & 0xe0) == 0xc0)
|
else if ((*s & 0xe0) == 0xc0) /* 110x xxxx */
|
||||||
{ /* 110x xxxx */
|
{
|
||||||
val = *s & 0x1f;
|
val = *s & 0x1f;
|
||||||
nleft = 1;
|
nleft = 1;
|
||||||
encidx = 0;
|
encidx = 0;
|
||||||
encbuf[encidx++] = *s;
|
encbuf[encidx++] = *s;
|
||||||
}
|
}
|
||||||
else if ((*s & 0xf0) == 0xe0)
|
else if ((*s & 0xf0) == 0xe0) /* 1110 xxxx */
|
||||||
{ /* 1110 xxxx */
|
{
|
||||||
val = *s & 0x0f;
|
val = *s & 0x0f;
|
||||||
nleft = 2;
|
nleft = 2;
|
||||||
encidx = 0;
|
encidx = 0;
|
||||||
encbuf[encidx++] = *s;
|
encbuf[encidx++] = *s;
|
||||||
}
|
}
|
||||||
else if ((*s & 0xf8) == 0xf0)
|
else if ((*s & 0xf8) == 0xf0) /* 1111 0xxx */
|
||||||
{ /* 1111 0xxx */
|
{
|
||||||
val = *s & 0x07;
|
val = *s & 0x07;
|
||||||
nleft = 3;
|
nleft = 3;
|
||||||
encidx = 0;
|
encidx = 0;
|
||||||
encbuf[encidx++] = *s;
|
encbuf[encidx++] = *s;
|
||||||
}
|
}
|
||||||
else if ((*s & 0xfc) == 0xf8)
|
else if ((*s & 0xfc) == 0xf8) /* 1111 10xx */
|
||||||
{ /* 1111 10xx */
|
{
|
||||||
val = *s & 0x03;
|
val = *s & 0x03;
|
||||||
nleft = 4;
|
nleft = 4;
|
||||||
encidx = 0;
|
encidx = 0;
|
||||||
encbuf[encidx++] = *s;
|
encbuf[encidx++] = *s;
|
||||||
}
|
}
|
||||||
else if ((*s & 0xfe) == 0xfc)
|
else if ((*s & 0xfe) == 0xfc) /* 1111 110x */
|
||||||
{ /* 1111 110x */
|
{
|
||||||
val = *s & 0x01;
|
val = *s & 0x01;
|
||||||
nleft = 5;
|
nleft = 5;
|
||||||
encidx = 0;
|
encidx = 0;
|
||||||
encbuf[encidx++] = *s;
|
encbuf[encidx++] = *s;
|
||||||
}
|
}
|
||||||
else
|
else /* Invalid encoding: print as \xNN. */
|
||||||
{ /* invalid encoding: print as \xnn */
|
{
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
sprintf (p, "\\x%02x", *s);
|
sprintf (p, "\\x%02x", *s);
|
||||||
@ -352,8 +471,8 @@ utf8_to_native (const char *string, size_t length, int delim)
|
|||||||
resync = 1;
|
resync = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*s < 0x80 || *s >= 0xc0)
|
else if (*s < 0x80 || *s >= 0xc0) /* Invalid utf-8 */
|
||||||
{ /* invalid */
|
{
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
for (i = 0; i < encidx; i++)
|
for (i = 0; i < encidx; i++)
|
||||||
@ -374,8 +493,8 @@ utf8_to_native (const char *string, size_t length, int delim)
|
|||||||
encbuf[encidx++] = *s;
|
encbuf[encidx++] = *s;
|
||||||
val <<= 6;
|
val <<= 6;
|
||||||
val |= *s & 0x3f;
|
val |= *s & 0x3f;
|
||||||
if (!--nleft)
|
if (!--nleft) /* Ready. */
|
||||||
{ /* ready */
|
{
|
||||||
if (no_translation)
|
if (no_translation)
|
||||||
{
|
{
|
||||||
if (p)
|
if (p)
|
||||||
@ -386,43 +505,41 @@ utf8_to_native (const char *string, size_t length, int delim)
|
|||||||
n += encidx;
|
n += encidx;
|
||||||
encidx = 0;
|
encidx = 0;
|
||||||
}
|
}
|
||||||
else if (active_charset)
|
else if (with_iconv)
|
||||||
{ /* table lookup */
|
|
||||||
for (i = 0; i < 128; i++)
|
|
||||||
{
|
{
|
||||||
if (active_charset[i] == val)
|
/* Our strategy for using iconv is a bit strange
|
||||||
break;
|
but it better keeps compatibility with
|
||||||
}
|
previous versions in regard to how invalid
|
||||||
if (i < 128)
|
encodings are displayed. What we do is to
|
||||||
{ /* we can print this one */
|
keep the utf-8 as is and have the real
|
||||||
if (p)
|
translation step then at the end. Yes, I
|
||||||
*p++ = i + 128;
|
know that this is ugly. However we are short
|
||||||
n++;
|
of the 1.4 release and for this branch we
|
||||||
}
|
should not mess too much around with iconv
|
||||||
else
|
things. One reason for this is that we don't
|
||||||
{ /* we do not have a translation: print utf8 */
|
know enough about non-GNU iconv
|
||||||
|
implementation and want to minimize the risk
|
||||||
|
of breaking the code on too many platforms. */
|
||||||
if ( p )
|
if ( p )
|
||||||
{
|
{
|
||||||
for (i=0; i < encidx; i++ )
|
for (i=0; i < encidx; i++ )
|
||||||
{
|
*p++ = encbuf[i];
|
||||||
sprintf (p, "\\x%02x", encbuf[i]);
|
|
||||||
p += 4;
|
|
||||||
}
|
}
|
||||||
}
|
n += encidx;
|
||||||
n += encidx * 4;
|
|
||||||
encidx = 0;
|
encidx = 0;
|
||||||
}
|
}
|
||||||
}
|
else /* Latin-1 case. */
|
||||||
else
|
{
|
||||||
{ /* native set */
|
|
||||||
if (val >= 0x80 && val < 256)
|
if (val >= 0x80 && val < 256)
|
||||||
{
|
{
|
||||||
n++; /* we can simply print this character */
|
/* We can simply print this character */
|
||||||
|
n++;
|
||||||
if (p)
|
if (p)
|
||||||
*p++ = val;
|
*p++ = val;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ /* we do not have a translation: print utf8 */
|
{
|
||||||
|
/* We do not have a translation: print utf8. */
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
for (i = 0; i < encidx; i++)
|
for (i = 0; i < encidx; i++)
|
||||||
@ -440,13 +557,78 @@ utf8_to_native (const char *string, size_t length, int delim)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{ /* allocate the buffer after the first pass */
|
{
|
||||||
|
/* Allocate the buffer after the first pass. */
|
||||||
buffer = p = jnlib_xmalloc (n + 1);
|
buffer = p = jnlib_xmalloc (n + 1);
|
||||||
}
|
}
|
||||||
else
|
else if (with_iconv)
|
||||||
{
|
{
|
||||||
*p = 0; /* make a string */
|
/* Note: See above for comments. */
|
||||||
|
iconv_t cd;
|
||||||
|
const char *inptr;
|
||||||
|
char *outbuf, *outptr;
|
||||||
|
size_t inbytes, outbytes;
|
||||||
|
|
||||||
|
*p = 0; /* Terminate the buffer. */
|
||||||
|
|
||||||
|
cd = iconv_open (active_charset_name, "utf-8");
|
||||||
|
if (cd == (iconv_t)-1)
|
||||||
|
{
|
||||||
|
handle_iconv_error (active_charset_name, "utf-8", 1);
|
||||||
|
jnlib_free (buffer);
|
||||||
|
return utf8_to_native (string, length, delim);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate a new buffer large enough to hold all possible
|
||||||
|
encodings. */
|
||||||
|
n = p - buffer + 1;
|
||||||
|
inbytes = n - 1;;
|
||||||
|
inptr = buffer;
|
||||||
|
outbytes = n * MB_LEN_MAX;
|
||||||
|
if (outbytes / MB_LEN_MAX != n)
|
||||||
|
BUG (); /* Actually an overflow. */
|
||||||
|
outbuf = outptr = jnlib_xmalloc (outbytes);
|
||||||
|
if ( iconv (cd, (ICONV_CONST char **)&inptr, &inbytes,
|
||||||
|
&outptr, &outbytes) == (size_t)-1)
|
||||||
|
{
|
||||||
|
static int shown;
|
||||||
|
|
||||||
|
if (!shown)
|
||||||
|
log_info (_("conversion from `%s' to `%s' failed: %s\n"),
|
||||||
|
"utf-8", active_charset_name, strerror (errno));
|
||||||
|
shown = 1;
|
||||||
|
/* Didn't worked out. Try again but without iconv. */
|
||||||
|
jnlib_free (buffer);
|
||||||
|
buffer = NULL;
|
||||||
|
jnlib_free (outbuf);
|
||||||
|
outbuf = do_utf8_to_native (string, length, delim, 0);
|
||||||
|
}
|
||||||
|
else /* Success. */
|
||||||
|
{
|
||||||
|
*outptr = 0; /* Make sure it is a string. */
|
||||||
|
/* We could realloc the buffer now but I doubt that it
|
||||||
|
makes much sense given that it will get freed
|
||||||
|
anyway soon after. */
|
||||||
|
jnlib_free (buffer);
|
||||||
|
}
|
||||||
|
iconv_close (cd);
|
||||||
|
return outbuf;
|
||||||
|
}
|
||||||
|
else /* Not using iconv. */
|
||||||
|
{
|
||||||
|
*p = 0; /* Make sure it is a string. */
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Convert string, which is in UTF-8 to native encoding. Replace
|
||||||
|
illegal encodings by some "\xnn" and quote all control
|
||||||
|
characters. A character with value DELIM will always be quoted, it
|
||||||
|
must be a vanilla ASCII character. A DELIM value of -1 is special:
|
||||||
|
it disables all quoting of control characters. */
|
||||||
|
char *
|
||||||
|
utf8_to_native (const char *string, size_t length, int delim)
|
||||||
|
{
|
||||||
|
return do_utf8_to_native (string, length, delim, use_iconv);
|
||||||
|
}
|
||||||
|
134
po/de.po
134
po/de.po
@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnupg2 1.9.18\n"
|
"Project-Id-Version: gnupg2 1.9.18\n"
|
||||||
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
|
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
|
||||||
"POT-Creation-Date: 2006-09-18 14:18+0200\n"
|
"POT-Creation-Date: 2006-09-22 19:24+0200\n"
|
||||||
"PO-Revision-Date: 2006-06-20 20:04+0200\n"
|
"PO-Revision-Date: 2006-06-20 20:04+0200\n"
|
||||||
"Last-Translator: Werner Koch <wk@gnupg.org>\n"
|
"Last-Translator: Werner Koch <wk@gnupg.org>\n"
|
||||||
"Language-Team: de\n"
|
"Language-Team: de\n"
|
||||||
@ -34,12 +34,12 @@ msgstr "Im Server Modus ausführen"
|
|||||||
msgid "run in daemon mode (background)"
|
msgid "run in daemon mode (background)"
|
||||||
msgstr "Im Daemon Modus ausführen"
|
msgstr "Im Daemon Modus ausführen"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:113 kbx/kbxutil.c:82 scd/scdaemon.c:107 sm/gpgsm.c:334
|
#: agent/gpg-agent.c:113 kbx/kbxutil.c:82 scd/scdaemon.c:107 sm/gpgsm.c:335
|
||||||
#: tools/gpgconf.c:63
|
#: tools/gpgconf.c:63
|
||||||
msgid "verbose"
|
msgid "verbose"
|
||||||
msgstr "ausführlich"
|
msgstr "ausführlich"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:114 kbx/kbxutil.c:83 scd/scdaemon.c:108 sm/gpgsm.c:335
|
#: agent/gpg-agent.c:114 kbx/kbxutil.c:83 scd/scdaemon.c:108 sm/gpgsm.c:336
|
||||||
msgid "be somewhat more quiet"
|
msgid "be somewhat more quiet"
|
||||||
msgstr "Etwas weniger Ausgaben erzeugen"
|
msgstr "Etwas weniger Ausgaben erzeugen"
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ msgstr "Im Vordergrund laufen lassen"
|
|||||||
msgid "do not grab keyboard and mouse"
|
msgid "do not grab keyboard and mouse"
|
||||||
msgstr "Tastatur und Maus nicht \"grabben\""
|
msgstr "Tastatur und Maus nicht \"grabben\""
|
||||||
|
|
||||||
#: agent/gpg-agent.c:124 scd/scdaemon.c:120 sm/gpgsm.c:337
|
#: agent/gpg-agent.c:124 scd/scdaemon.c:120 sm/gpgsm.c:338
|
||||||
msgid "use a log file for the server"
|
msgid "use a log file for the server"
|
||||||
msgstr "Logausgaben in eine Datei umlenken"
|
msgstr "Logausgaben in eine Datei umlenken"
|
||||||
|
|
||||||
@ -116,12 +116,12 @@ msgid "|FILE|write environment settings also to FILE"
|
|||||||
msgstr "|DATEI|Schreibe die Umgebungsvariabeln auf DATEI"
|
msgstr "|DATEI|Schreibe die Umgebungsvariabeln auf DATEI"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:236 agent/protect-tool.c:143 scd/scdaemon.c:188
|
#: agent/gpg-agent.c:236 agent/protect-tool.c:143 scd/scdaemon.c:188
|
||||||
#: sm/gpgsm.c:516 tools/gpgconf.c:86
|
#: sm/gpgsm.c:517 tools/gpgconf.c:86
|
||||||
msgid "Please report bugs to <"
|
msgid "Please report bugs to <"
|
||||||
msgstr "Fehlerberichte bitte an <"
|
msgstr "Fehlerberichte bitte an <"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:236 agent/protect-tool.c:143 scd/scdaemon.c:188
|
#: agent/gpg-agent.c:236 agent/protect-tool.c:143 scd/scdaemon.c:188
|
||||||
#: sm/gpgsm.c:516 tools/gpgconf.c:86
|
#: sm/gpgsm.c:517 tools/gpgconf.c:86
|
||||||
msgid ">.\n"
|
msgid ">.\n"
|
||||||
msgstr ">.\n"
|
msgstr ">.\n"
|
||||||
|
|
||||||
@ -147,30 +147,30 @@ msgstr ""
|
|||||||
msgid "out of core while allocating %lu bytes"
|
msgid "out of core while allocating %lu bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: agent/gpg-agent.c:334 scd/scdaemon.c:262 sm/gpgsm.c:645
|
#: agent/gpg-agent.c:334 scd/scdaemon.c:262 sm/gpgsm.c:646
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "invalid debug-level `%s' given\n"
|
msgid "invalid debug-level `%s' given\n"
|
||||||
msgstr "ungültige Debugebene `%s' angegeben\n"
|
msgstr "ungültige Debugebene `%s' angegeben\n"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:505 agent/protect-tool.c:1073 kbx/kbxutil.c:432
|
#: agent/gpg-agent.c:505 agent/protect-tool.c:1073 kbx/kbxutil.c:432
|
||||||
#: scd/scdaemon.c:354 sm/gpgsm.c:766
|
#: scd/scdaemon.c:354 sm/gpgsm.c:767
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "libgcrypt is too old (need %s, have %s)\n"
|
msgid "libgcrypt is too old (need %s, have %s)\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Die Bibliothek \"libgcrypt\" is zu alt (benötigt wird %s, vorhanden ist %s)\n"
|
"Die Bibliothek \"libgcrypt\" is zu alt (benötigt wird %s, vorhanden ist %s)\n"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:599 scd/scdaemon.c:431 sm/gpgsm.c:868
|
#: agent/gpg-agent.c:599 scd/scdaemon.c:431 sm/gpgsm.c:869
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "NOTE: no default option file `%s'\n"
|
msgid "NOTE: no default option file `%s'\n"
|
||||||
msgstr "Notiz: Voreingestellte Konfigurationsdatei `%s' fehlt\n"
|
msgstr "Notiz: Voreingestellte Konfigurationsdatei `%s' fehlt\n"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:604 agent/gpg-agent.c:1115 scd/scdaemon.c:436
|
#: agent/gpg-agent.c:604 agent/gpg-agent.c:1115 scd/scdaemon.c:436
|
||||||
#: sm/gpgsm.c:872
|
#: sm/gpgsm.c:873
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "option file `%s': %s\n"
|
msgid "option file `%s': %s\n"
|
||||||
msgstr "Konfigurationsdatei `%s': %s\n"
|
msgstr "Konfigurationsdatei `%s': %s\n"
|
||||||
|
|
||||||
#: agent/gpg-agent.c:612 scd/scdaemon.c:444 sm/gpgsm.c:879
|
#: agent/gpg-agent.c:612 scd/scdaemon.c:444 sm/gpgsm.c:880
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "reading options from `%s'\n"
|
msgid "reading options from `%s'\n"
|
||||||
msgstr "Optionen werden aus `%s' gelesen\n"
|
msgstr "Optionen werden aus `%s' gelesen\n"
|
||||||
@ -547,7 +547,7 @@ msgstr ""
|
|||||||
"@Kommandos:\n"
|
"@Kommandos:\n"
|
||||||
" "
|
" "
|
||||||
|
|
||||||
#: kbx/kbxutil.c:77 sm/gpgsm.c:277 tools/gpgconf.c:60
|
#: kbx/kbxutil.c:77 sm/gpgsm.c:278 tools/gpgconf.c:60
|
||||||
msgid ""
|
msgid ""
|
||||||
"@\n"
|
"@\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
@ -557,7 +557,7 @@ msgstr ""
|
|||||||
"Optionen:\n"
|
"Optionen:\n"
|
||||||
" "
|
" "
|
||||||
|
|
||||||
#: kbx/kbxutil.c:84 sm/gpgsm.c:343 tools/gpgconf.c:65
|
#: kbx/kbxutil.c:84 sm/gpgsm.c:344 tools/gpgconf.c:65
|
||||||
msgid "do not make any changes"
|
msgid "do not make any changes"
|
||||||
msgstr "Keine Änderungen durchführen"
|
msgstr "Keine Änderungen durchführen"
|
||||||
|
|
||||||
@ -593,7 +593,7 @@ msgstr ""
|
|||||||
msgid "run in multi server mode (foreground)"
|
msgid "run in multi server mode (foreground)"
|
||||||
msgstr "Im Multiserver Modus ausführen"
|
msgstr "Im Multiserver Modus ausführen"
|
||||||
|
|
||||||
#: scd/scdaemon.c:111 sm/gpgsm.c:355
|
#: scd/scdaemon.c:111 sm/gpgsm.c:356
|
||||||
msgid "read options from file"
|
msgid "read options from file"
|
||||||
msgstr "Konfigurationsoptionen aus Datei lesen"
|
msgstr "Konfigurationsoptionen aus Datei lesen"
|
||||||
|
|
||||||
@ -1195,151 +1195,151 @@ msgstr "Rufe das gpg-protect-tool auf"
|
|||||||
msgid "change a passphrase"
|
msgid "change a passphrase"
|
||||||
msgstr "Das Mantra (Passphrase) ändern"
|
msgstr "Das Mantra (Passphrase) ändern"
|
||||||
|
|
||||||
#: sm/gpgsm.c:279
|
#: sm/gpgsm.c:280
|
||||||
msgid "create ascii armored output"
|
msgid "create ascii armored output"
|
||||||
msgstr "Ausgabe mit ASCII Hülle wird erzeugt"
|
msgstr "Ausgabe mit ASCII Hülle wird erzeugt"
|
||||||
|
|
||||||
#: sm/gpgsm.c:281
|
#: sm/gpgsm.c:282
|
||||||
msgid "create base-64 encoded output"
|
msgid "create base-64 encoded output"
|
||||||
msgstr "Ausgabe im Basis-64 format erzeugen"
|
msgstr "Ausgabe im Basis-64 format erzeugen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:283
|
#: sm/gpgsm.c:284
|
||||||
msgid "assume input is in PEM format"
|
msgid "assume input is in PEM format"
|
||||||
msgstr "Eingabedaten sind im PEM Format"
|
msgstr "Eingabedaten sind im PEM Format"
|
||||||
|
|
||||||
#: sm/gpgsm.c:285
|
#: sm/gpgsm.c:286
|
||||||
msgid "assume input is in base-64 format"
|
msgid "assume input is in base-64 format"
|
||||||
msgstr "Eingabedaten sind im Basis-64 Format"
|
msgstr "Eingabedaten sind im Basis-64 Format"
|
||||||
|
|
||||||
#: sm/gpgsm.c:287
|
#: sm/gpgsm.c:288
|
||||||
msgid "assume input is in binary format"
|
msgid "assume input is in binary format"
|
||||||
msgstr "Eingabedaten sind im Binärformat"
|
msgstr "Eingabedaten sind im Binärformat"
|
||||||
|
|
||||||
#: sm/gpgsm.c:289
|
#: sm/gpgsm.c:290
|
||||||
msgid "|NAME|encrypt for NAME"
|
msgid "|NAME|encrypt for NAME"
|
||||||
msgstr "|NAME|Verschlüsseln für NAME"
|
msgstr "|NAME|Verschlüsseln für NAME"
|
||||||
|
|
||||||
#: sm/gpgsm.c:292
|
#: sm/gpgsm.c:293
|
||||||
msgid "use system's dirmngr if available"
|
msgid "use system's dirmngr if available"
|
||||||
msgstr "Benutze den System Dirmngr when verfügbar"
|
msgstr "Benutze den System Dirmngr when verfügbar"
|
||||||
|
|
||||||
#: sm/gpgsm.c:293
|
#: sm/gpgsm.c:294
|
||||||
msgid "never consult a CRL"
|
msgid "never consult a CRL"
|
||||||
msgstr "Niemals eine CRL konsultieren"
|
msgstr "Niemals eine CRL konsultieren"
|
||||||
|
|
||||||
#: sm/gpgsm.c:300
|
#: sm/gpgsm.c:301
|
||||||
msgid "check validity using OCSP"
|
msgid "check validity using OCSP"
|
||||||
msgstr "Die Gültigkeit mittels OCSP prüfen"
|
msgstr "Die Gültigkeit mittels OCSP prüfen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:303
|
#: sm/gpgsm.c:304
|
||||||
msgid "|N|number of certificates to include"
|
msgid "|N|number of certificates to include"
|
||||||
msgstr "|N|Sende N Zertifikate mit"
|
msgstr "|N|Sende N Zertifikate mit"
|
||||||
|
|
||||||
#: sm/gpgsm.c:306
|
#: sm/gpgsm.c:307
|
||||||
msgid "|FILE|take policy information from FILE"
|
msgid "|FILE|take policy information from FILE"
|
||||||
msgstr "|DATEI|Richtlinieninformationen DATEI entnehmen"
|
msgstr "|DATEI|Richtlinieninformationen DATEI entnehmen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:309
|
#: sm/gpgsm.c:310
|
||||||
msgid "do not check certificate policies"
|
msgid "do not check certificate policies"
|
||||||
msgstr "Zertikikatrichtlinien nicht überprüfen"
|
msgstr "Zertikikatrichtlinien nicht überprüfen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:313
|
#: sm/gpgsm.c:314
|
||||||
msgid "fetch missing issuer certificates"
|
msgid "fetch missing issuer certificates"
|
||||||
msgstr "Fehlende Zertifikate automatisch holen"
|
msgstr "Fehlende Zertifikate automatisch holen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:317
|
#: sm/gpgsm.c:318
|
||||||
msgid "|NAME|use NAME as default recipient"
|
msgid "|NAME|use NAME as default recipient"
|
||||||
msgstr "|NAME|Benutze NAME als voreingestellten Empfänger"
|
msgstr "|NAME|Benutze NAME als voreingestellten Empfänger"
|
||||||
|
|
||||||
#: sm/gpgsm.c:319
|
#: sm/gpgsm.c:320
|
||||||
msgid "use the default key as default recipient"
|
msgid "use the default key as default recipient"
|
||||||
msgstr "Benuzte voreingestellten Schlüssel als Standardempfänger"
|
msgstr "Benuzte voreingestellten Schlüssel als Standardempfänger"
|
||||||
|
|
||||||
#: sm/gpgsm.c:325
|
#: sm/gpgsm.c:326
|
||||||
msgid "use this user-id to sign or decrypt"
|
msgid "use this user-id to sign or decrypt"
|
||||||
msgstr "Benuzte diese Benutzer ID zum Signieren oder Entschlüsseln"
|
msgstr "Benuzte diese Benutzer ID zum Signieren oder Entschlüsseln"
|
||||||
|
|
||||||
#: sm/gpgsm.c:328
|
#: sm/gpgsm.c:329
|
||||||
msgid "|N|set compress level N (0 disables)"
|
msgid "|N|set compress level N (0 disables)"
|
||||||
msgstr "|N|Benutze Komprimierungsstufe N"
|
msgstr "|N|Benutze Komprimierungsstufe N"
|
||||||
|
|
||||||
#: sm/gpgsm.c:330
|
#: sm/gpgsm.c:331
|
||||||
msgid "use canonical text mode"
|
msgid "use canonical text mode"
|
||||||
msgstr "Kanonischen Textmodus benutzen"
|
msgstr "Kanonischen Textmodus benutzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:333 tools/gpgconf.c:62
|
#: sm/gpgsm.c:334 tools/gpgconf.c:62
|
||||||
msgid "use as output file"
|
msgid "use as output file"
|
||||||
msgstr "als Ausgabedatei benutzen"
|
msgstr "als Ausgabedatei benutzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:336
|
#: sm/gpgsm.c:337
|
||||||
msgid "don't use the terminal at all"
|
msgid "don't use the terminal at all"
|
||||||
msgstr "Das Terminal überhaupt nicht benutzen"
|
msgstr "Das Terminal überhaupt nicht benutzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:340
|
#: sm/gpgsm.c:341
|
||||||
msgid "force v3 signatures"
|
msgid "force v3 signatures"
|
||||||
msgstr "Version 3 Signaturen erzwingen"
|
msgstr "Version 3 Signaturen erzwingen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:341
|
#: sm/gpgsm.c:342
|
||||||
msgid "always use a MDC for encryption"
|
msgid "always use a MDC for encryption"
|
||||||
msgstr "Immer das MDC Verfahren zum verschlüsseln mitbenutzen"
|
msgstr "Immer das MDC Verfahren zum verschlüsseln mitbenutzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:346
|
#: sm/gpgsm.c:347
|
||||||
msgid "batch mode: never ask"
|
msgid "batch mode: never ask"
|
||||||
msgstr "Stapelverarbeitungs Modus: Nie nachfragen"
|
msgstr "Stapelverarbeitungs Modus: Nie nachfragen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:347
|
#: sm/gpgsm.c:348
|
||||||
msgid "assume yes on most questions"
|
msgid "assume yes on most questions"
|
||||||
msgstr "\"Ja\" auf die meisten Anfragen annehmen"
|
msgstr "\"Ja\" auf die meisten Anfragen annehmen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:348
|
#: sm/gpgsm.c:349
|
||||||
msgid "assume no on most questions"
|
msgid "assume no on most questions"
|
||||||
msgstr "\"Nein\" auf die meisten Anfragen annehmen"
|
msgstr "\"Nein\" auf die meisten Anfragen annehmen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:350
|
#: sm/gpgsm.c:351
|
||||||
msgid "add this keyring to the list of keyrings"
|
msgid "add this keyring to the list of keyrings"
|
||||||
msgstr "Diesen Keyring in die Liste der Keyrings aufnehmen"
|
msgstr "Diesen Keyring in die Liste der Keyrings aufnehmen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:351
|
#: sm/gpgsm.c:352
|
||||||
msgid "add this secret keyring to the list"
|
msgid "add this secret keyring to the list"
|
||||||
msgstr "Diese geheimen Keyring in die Liste aufnehmen"
|
msgstr "Diese geheimen Keyring in die Liste aufnehmen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:352
|
#: sm/gpgsm.c:353
|
||||||
msgid "|NAME|use NAME as default secret key"
|
msgid "|NAME|use NAME as default secret key"
|
||||||
msgstr "|NAME|Benutze NAME als voreingestellten Schlüssel"
|
msgstr "|NAME|Benutze NAME als voreingestellten Schlüssel"
|
||||||
|
|
||||||
#: sm/gpgsm.c:353
|
#: sm/gpgsm.c:354
|
||||||
msgid "|HOST|use this keyserver to lookup keys"
|
msgid "|HOST|use this keyserver to lookup keys"
|
||||||
msgstr "|HOST|Benutze HOST als Schlüsselserver"
|
msgstr "|HOST|Benutze HOST als Schlüsselserver"
|
||||||
|
|
||||||
#: sm/gpgsm.c:354
|
#: sm/gpgsm.c:355
|
||||||
msgid "|NAME|set terminal charset to NAME"
|
msgid "|NAME|set terminal charset to NAME"
|
||||||
msgstr "|NAME|Den Zeichensatz für das Terminal auf NAME setzen"
|
msgstr "|NAME|Den Zeichensatz für das Terminal auf NAME setzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:358
|
#: sm/gpgsm.c:359
|
||||||
msgid "|LEVEL|set the debugging level to LEVEL"
|
msgid "|LEVEL|set the debugging level to LEVEL"
|
||||||
msgstr "|NAME|Die Debugstufe auf NAME setzen"
|
msgstr "|NAME|Die Debugstufe auf NAME setzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:366
|
#: sm/gpgsm.c:367
|
||||||
msgid "|FD|write status info to this FD"
|
msgid "|FD|write status info to this FD"
|
||||||
msgstr "|FD|Statusinformationen auf Dateidescriptor FD schreiben"
|
msgstr "|FD|Statusinformationen auf Dateidescriptor FD schreiben"
|
||||||
|
|
||||||
#: sm/gpgsm.c:373
|
#: sm/gpgsm.c:374
|
||||||
msgid "|FILE|load extension module FILE"
|
msgid "|FILE|load extension module FILE"
|
||||||
msgstr "|DATEI|Das Erweiterungsmodul DATEI laden"
|
msgstr "|DATEI|Das Erweiterungsmodul DATEI laden"
|
||||||
|
|
||||||
#: sm/gpgsm.c:379
|
#: sm/gpgsm.c:380
|
||||||
msgid "|NAME|use cipher algorithm NAME"
|
msgid "|NAME|use cipher algorithm NAME"
|
||||||
msgstr "|NAME|Den Verschlüsselungsalgrithmus NAME benutzen"
|
msgstr "|NAME|Den Verschlüsselungsalgrithmus NAME benutzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:381
|
#: sm/gpgsm.c:382
|
||||||
msgid "|NAME|use message digest algorithm NAME"
|
msgid "|NAME|use message digest algorithm NAME"
|
||||||
msgstr "|NAME|Den Hashalgorithmus NAME benutzen"
|
msgstr "|NAME|Den Hashalgorithmus NAME benutzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:383
|
#: sm/gpgsm.c:384
|
||||||
msgid "|N|use compress algorithm N"
|
msgid "|N|use compress algorithm N"
|
||||||
msgstr "|N|Den Kompressionsalgorithmus Nummer N benutzen"
|
msgstr "|N|Den Kompressionsalgorithmus Nummer N benutzen"
|
||||||
|
|
||||||
#: sm/gpgsm.c:391
|
#: sm/gpgsm.c:392
|
||||||
msgid ""
|
msgid ""
|
||||||
"@\n"
|
"@\n"
|
||||||
"(See the man page for a complete listing of all commands and options)\n"
|
"(See the man page for a complete listing of all commands and options)\n"
|
||||||
@ -1347,7 +1347,7 @@ msgstr ""
|
|||||||
"@\n"
|
"@\n"
|
||||||
"(Die \"man\" Seite beschreibt alle Kommands und Optionen)\n"
|
"(Die \"man\" Seite beschreibt alle Kommands und Optionen)\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:394
|
#: sm/gpgsm.c:395
|
||||||
msgid ""
|
msgid ""
|
||||||
"@\n"
|
"@\n"
|
||||||
"Examples:\n"
|
"Examples:\n"
|
||||||
@ -1367,11 +1367,11 @@ msgstr ""
|
|||||||
" --list-keys [Namen] Schlüssel anzeigenn\n"
|
" --list-keys [Namen] Schlüssel anzeigenn\n"
|
||||||
" --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\\n\n"
|
" --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\\n\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:519
|
#: sm/gpgsm.c:520
|
||||||
msgid "Usage: gpgsm [options] [files] (-h for help)"
|
msgid "Usage: gpgsm [options] [files] (-h for help)"
|
||||||
msgstr "Gebrauch: gpgsm [Optionen] [Dateien] (-h für Hilfe)"
|
msgstr "Gebrauch: gpgsm [Optionen] [Dateien] (-h für Hilfe)"
|
||||||
|
|
||||||
#: sm/gpgsm.c:522
|
#: sm/gpgsm.c:523
|
||||||
msgid ""
|
msgid ""
|
||||||
"Syntax: gpgsm [options] [files]\n"
|
"Syntax: gpgsm [options] [files]\n"
|
||||||
"sign, check, encrypt or decrypt using the S/MIME protocol\n"
|
"sign, check, encrypt or decrypt using the S/MIME protocol\n"
|
||||||
@ -1380,7 +1380,7 @@ msgstr ""
|
|||||||
"Gebrauch: gpgsm [Optionen] [Dateien]\n"
|
"Gebrauch: gpgsm [Optionen] [Dateien]\n"
|
||||||
"Signieren, prüfen, ver- und entschlüsseln mittels S/MIME protocol\n"
|
"Signieren, prüfen, ver- und entschlüsseln mittels S/MIME protocol\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:529
|
#: sm/gpgsm.c:530
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"Supported algorithms:\n"
|
"Supported algorithms:\n"
|
||||||
@ -1388,55 +1388,55 @@ msgstr ""
|
|||||||
"\n"
|
"\n"
|
||||||
"Unterstützte Algorithmen:\n"
|
"Unterstützte Algorithmen:\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:616
|
#: sm/gpgsm.c:617
|
||||||
msgid "usage: gpgsm [options] "
|
msgid "usage: gpgsm [options] "
|
||||||
msgstr "Gebrauch: gpgsm [Optionen] "
|
msgstr "Gebrauch: gpgsm [Optionen] "
|
||||||
|
|
||||||
#: sm/gpgsm.c:681
|
#: sm/gpgsm.c:682
|
||||||
msgid "conflicting commands\n"
|
msgid "conflicting commands\n"
|
||||||
msgstr "Widersprechende Kommandos\n"
|
msgstr "Widersprechende Kommandos\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:697
|
#: sm/gpgsm.c:698
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "can't encrypt to `%s': %s\n"
|
msgid "can't encrypt to `%s': %s\n"
|
||||||
msgstr "Verschlüsseln für `%s' nicht möglich: %s\n"
|
msgstr "Verschlüsseln für `%s' nicht möglich: %s\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:771
|
#: sm/gpgsm.c:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "libksba is too old (need %s, have %s)\n"
|
msgid "libksba is too old (need %s, have %s)\n"
|
||||||
msgstr "Die Bibliothek Libksba is nicht aktuell (benötige %s, habe %s)\n"
|
msgstr "Die Bibliothek Libksba is nicht aktuell (benötige %s, habe %s)\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:1234
|
#: sm/gpgsm.c:1235
|
||||||
msgid "WARNING: program may create a core file!\n"
|
msgid "WARNING: program may create a core file!\n"
|
||||||
msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n"
|
msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:1251
|
#: sm/gpgsm.c:1252
|
||||||
msgid "WARNING: running with faked system time: "
|
msgid "WARNING: running with faked system time: "
|
||||||
msgstr "WARNUNG: Ausführung mit gefälschter Systemzeit: "
|
msgstr "WARNUNG: Ausführung mit gefälschter Systemzeit: "
|
||||||
|
|
||||||
#: sm/gpgsm.c:1277
|
#: sm/gpgsm.c:1278
|
||||||
msgid "selected cipher algorithm is invalid\n"
|
msgid "selected cipher algorithm is invalid\n"
|
||||||
msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n"
|
msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:1285
|
#: sm/gpgsm.c:1286
|
||||||
msgid "selected digest algorithm is invalid\n"
|
msgid "selected digest algorithm is invalid\n"
|
||||||
msgstr "Das ausgewählte Hashverfahren ist ungültig\n"
|
msgstr "Das ausgewählte Hashverfahren ist ungültig\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:1316
|
#: sm/gpgsm.c:1317
|
||||||
#, fuzzy, c-format
|
#, fuzzy, c-format
|
||||||
msgid "importing common certificates `%s'\n"
|
msgid "importing common certificates `%s'\n"
|
||||||
msgstr "Fehler beim Importieren des Zertifikats: %s\n"
|
msgstr "Fehler beim Importieren des Zertifikats: %s\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:1334
|
#: sm/gpgsm.c:1335
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "can't sign using `%s': %s\n"
|
msgid "can't sign using `%s': %s\n"
|
||||||
msgstr "Signieren mit `%s' nicht möglich: %s\n"
|
msgstr "Signieren mit `%s' nicht möglich: %s\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:1518
|
#: sm/gpgsm.c:1519
|
||||||
msgid "this command has not yet been implemented\n"
|
msgid "this command has not yet been implemented\n"
|
||||||
msgstr "Dieses Kommando wurde noch nicht implementiert\n"
|
msgstr "Dieses Kommando wurde noch nicht implementiert\n"
|
||||||
|
|
||||||
#: sm/gpgsm.c:1754 sm/gpgsm.c:1791 sm/qualified.c:74
|
#: sm/gpgsm.c:1755 sm/gpgsm.c:1792 sm/qualified.c:74
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "can't open `%s': %s\n"
|
msgid "can't open `%s': %s\n"
|
||||||
msgstr "Datei `%s' kann nicht geöffnet werden: %s\n"
|
msgstr "Datei `%s' kann nicht geöffnet werden: %s\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user