gnupg (7 files)
cvs user wk
cvs at cvs.gnupg.org
Thu Feb 3 10:23:37 CET 2005
Date: Thursday, February 3, 2005 @ 10:32:53
Author: wk
Path: /cvs/gnupg/gnupg
Modified: NEWS THANKS doc/ChangeLog doc/README.W32 g10/ChangeLog
g10/mainproc.c g10/parse-packet.c
Updated to match the switch to the NSIS installer.
--------------------+
NEWS | 3
THANKS | 1
doc/ChangeLog | 4
doc/README.W32 | 219 +++++++++++++++++++++++++++----------
g10/ChangeLog | 4
g10/mainproc.c | 2
g10/parse-packet.c | 294 +++++++++++++++++++++++++++------------------------
7 files changed, 329 insertions(+), 198 deletions(-)
Index: gnupg/NEWS
diff -u gnupg/NEWS:1.230 gnupg/NEWS:1.231
--- gnupg/NEWS:1.230 Sun Jan 23 02:19:32 2005
+++ gnupg/NEWS Thu Feb 3 10:32:53 2005
@@ -23,6 +23,9 @@
available, missing secret key stubs will be created on the fly.
Details of the key are listed too.
+ * The implicit packet dumping in double verbose mode is now send
+ to stderr and not to stdout.
+
* [W32] The algorithm for the default home directory changed:
First we look at the environment variable GNUPGHOME, if this one
is not set, we check whether the registry entry
Index: gnupg/THANKS
diff -u gnupg/THANKS:1.80 gnupg/THANKS:1.81
--- gnupg/THANKS:1.80 Mon Jan 17 11:13:59 2005
+++ gnupg/THANKS Thu Feb 3 10:32:53 2005
@@ -34,6 +34,7 @@
Daniel Eisenbud eisenbud at cs.swarthmore.edu
Daniel Koening dan at mail.isis.de
Daniel Resare daniel at resare.com
+Dany Nativel dany at natzo.com
Dave Dykstra dwd at bell-labs.com
David C Niemi niemi at tuxers.net
David Champion dgc at uchicago.edu
Index: gnupg/doc/ChangeLog
diff -u gnupg/doc/ChangeLog:1.92 gnupg/doc/ChangeLog:1.93
--- gnupg/doc/ChangeLog:1.92 Thu Jan 27 11:30:27 2005
+++ gnupg/doc/ChangeLog Thu Feb 3 10:32:53 2005
@@ -1,3 +1,7 @@
+2005-02-03 Werner Koch <wk at g10code.com>
+
+ * README.W32: Updated to match the switch to the NSIS installer.
+
2005-01-27 Werner Koch <wk at g10code.com>
* faq.raw: Updated to the version from 1.2.7.
Index: gnupg/doc/README.W32
diff -u gnupg/doc/README.W32:1.6 gnupg/doc/README.W32:1.7
--- gnupg/doc/README.W32:1.6 Thu Jan 20 18:21:40 2005
+++ gnupg/doc/README.W32 Thu Feb 3 10:32:53 2005
@@ -1,5 +1,7 @@
-This is a binary version of GnuPG for MS-Windows 95, 98, WNT, W2000
-and XP.
+README.W32 -*- text -*-
+
+This is a binary package with GnuPG for MS-Windows 95, 98, WNT, W2000
+and XP. See the file README for generic instructions and usage hints.
A FAQ comes with this package and a probably more recent one can be
found online at http://www.gnupg.org/faq.html. See
@@ -7,85 +9,178 @@
particular the list gnupg-users at gnupg.org might be useful to answer
questions - but please read the FAQ first.
-Note: Due to the use of the NSIS installer, the information below are
-mostly out of date.
-Installation instructions:
---------------------------
- 1. Unpack the ZIP archive (alright, you already did this).
- 2. Copy "gpg.exe", "gpgv.exe" and "gpgkeys_ldap.exe" to a place
- where you usually store your binaries.
- 3. Create a directory "c:\gnupg" (or any other as you like)
- 4. If you did not use the default directory "c:\gnupg", you
- should enter a string with the directory into the Registry
- under the key:
- HKEY_CURRENT_USER -> Software -> GNU -> GnuPG
- (you probably need to create the keys GNU and GnuPG) and insert a
- new string under the name "HomeDir" with the value of the default
- directory you want to use. Please use forward slashes and not the
- backslashes when setting filenames for GnuPG into the Registry.
- 5. Enter "gpg" and see what happens
- 6. Read the file README and the online HOWTOs
+Installation directory:
+=======================
+
+The installation directory of GnuPG is stored in the Registry under
+the key HKEY_LCOAL_MACHINE\Software\GNU\GnuPG with the name "Install
+Directory". The installer does not change the PATH environment
+variable to include this directory. You might want to do this
+manually.
+
+Below the Installation directory, you will find directories named
+"Doc", "gnupg.nls" and "Src". The latter will be used for distributed
+patched, if any, and to store the source file if they have been
+included in this package. The source files usually require further
+unpacking using a the TAR utility.
Internationalization support:
------------------------------
- 1
+=============================
-Store the locale id (like "de") into the registry under the key
-HKEY_CURRENT_USER\Software\GNU\GnuPG with the name "Lang".
+Store the locale id (like "de") into the Registry under the key
+HKEY_CURRENT_USER\Software\GNU\GnuPG with the name "Lang". This must
+match one of the installed languages files in the directory named
+"gnupg.nls" below the installation directory. Note, that the ".mo"
+extension is not part of the lcoale id.
+
+
+Home directory:
+===============
+
+GnuPG makes use of a per user home directory to store its keys as well
+as configuration files. The default home directory is a directory
+named "gnupg" below the application data directory of the user. This
+directory will be created if it does not exist. Being only a default,
+it may be changed by setting the name of the home directory into the
+Registry under the key HKEY_CURRENT_USER\Software\GNU\GnuPG using the
+name "HomeDir". If an environment varaibale "GNUPGHOME" exists, this
+even overrides the registry setting. The command line option
+"--homedir" may be used to override all other settings of the home
+directory.
+
+
+Reporting bugs:
+===============
+
+Please check the documentation first before asking or reporting a
+bugs. In particular check the archives of the mailing lists (see
+www.gnupg.org) and the bug tracking system at http://bugs.gnupg.org
+(login is "guest" password is "guest") whether the problem is already
+known. Asking on the gnupg-users mailing list is also strongly
+encouraged; if you are not subscribed it may some time until a posting
+is approved (this is an anti-spam measure). Bug reporting addresses
+are listed in the file AUTHORS.
+
+If you want to report a bug or have other problems, always give
+detailed description of the problem, the version of GnuPG you used,
+the version of the OS, whether it is the official version from
+gnupg.org or how you built it. Don't edit error messages - replacing
+sensitive information like user IDs, fingerprints and keyids is okay.
+If possible, switch to English messages by changing the "Lang" entry
+to empty (see under Internationalization support).
+
+
+How to build GnuPG from the source:
+===================================
+
+Until recently all official GnuPG versions have been build using the
+Mingw32/CPD kit as available at
+ftp://ftp.gnupg.org/people/werner/cpd/mingw32-cqpd-0.3.2.tar.gz .
+However, for maintenance reasons we switched to Debian's mingw32 cross
+compiler package and that is now the recommended way of building GnuPG
+for W32 platforms. It might be possible to build it nativly on a W32
+platform but this is not supported. Please don't file any bug reports
+if it does not build with any other system than the recommended one.
+
+According to the conditions of the GNU General Public License you
+either got the source files with this package, a written offer to send
+you the source on demand or the source is available at the same site
+you downloaded the binary package. If you downloaded the package from
+the official GnuPG site or one of its mirrors, the corresponding
+source tarball is available in the sibling directory named gnupg. The
+source used to build all versions is always the same and the version
+numbers should match. If the version number of the binary package has
+a letter suffix, you will find a patch file installed in the "Src"
+directory with the changes relative to the generic version.
+
+The source is distributed as a BZIP2 or GZIP compressed tar archive.
+See the instructions in file README on how to check the integrity of
+that file. Wir a properly setup build environment, you unpack the
+tarball change to the created directory and run
+ $ ./autogen.sh --build-w32
+ $ make
+ $ cp g10/gpg*.exe /some_windows_drive/
-How to build it from the source:
---------------------------------
-This version has been build with the Mingw32/CPD kit using the latest
-stable version of GnuPG.
+Building a version with the installer is a bit more complex and
+basically works by creating a top directory, unpacking in that top
+directory, switching to the gnupg-1.x.y directory, running
+"./autogen.sh --build-w32" and "make", switching back to the top
+directory, running a "mkdir dist-w32; mkdir iconv", copying the
+required iconv files (iconv.dll, README.iconv, COPYING.LIB) into the
+iconv directory, running gnupg-1.x.y/scripts/mk-w32-dist and voila,
+the installer package will be available in the dist-w32 directory.
-First get the source: It has to be available at the same location you
-found this binary package - if not you should have received a written
-offer to get the source delivered to you See the file COPYING (section
-3) for details.
-If you got this package from its canonical place (ftp.gnupg.org), the
-source is available at:
+Copying:
+========
- ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-1.2.n.tar.gz
+GnuPG is
-or for development snapshots
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005 Free Software Foundation, Inc.
- ftp://ftp.gnupg.org/gcrypt/alpha/gnupg/gnupg-1.x.n.tar.gz
+ 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.
-this is the same source as for the Unix version. If your binary
-version of GnuPG is called something like gnupg-w32-1.0.4-1.zip, you
-should find a patch file named gnupg-w32-1.0.4-1.0.4-1.diff.gz at the
-same location, which has to be applied to the stock gpg source file.
-Instructions are at the top of this file.
+ 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.
-To build it, you need the MingW32/CPD kit, which is available at
+ 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
- ftp://ftp.gnupg.org/people/werner/cpd/mingw32-cpd-0.3.2.tar.gz
- ftp://ftp.gnupg.org/people/werner/cpd/gcc-core-2.95.2.tar.gz
- ftp://ftp.gnupg.org/people/werner/cpd/binutils-2.9.1.tar.gz
+See the files AUTHORS and THANKS for credits, further legal
+information and bug reporting addresses pertaining to GnuPG.
-gcc and binutils are stock GNU source which are available
-at every GNU mirror.
+For copying conditions of the GNU LIBICONV library see the file
+README.iconv.
+
+The installer software used to create the official binary packages for
+W32 is NSIS (http://nsis.sourceforge.net/):
-After you have installed this environment you should be able to do this:
+ Copyright (C) 1999-2005 Nullsoft, Inc.
- $ scripts/autogen.sh --build-w32
- $ make
- $ mingw32 strip g10/gpg.exe
- $ cp g10/gpg.exe /some_windows_drive/
+ This license applies to everything in the NSIS package, except where
+ otherwise noted.
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any
+ damages arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any
+ purpose, including commercial applications, and to alter it and
+ redistribute it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product
+ documentation would be appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
+
+The user interface used with the installer is
-And everything hopefully works. If there is a make problem in the
-"po" directory you can eiterignore it or do a "touch po/all". To
-build the distribtion ZIP file, you have to create a directory
-"dist-w32" and run "scripts/mk-w32-dist" right after a successul make
-run.
+ Copyright (C) 2002-2005 Joost Verburg
-Don't forget that MS-Windows ist just a temporary workaround until
-you can switch to a GNU system ;-)
+ [It is distributed along with NSIS and the same conditions as stated
+ above apply]
-Be the source always with you.
- Werner
+The term "W32" is used to describe the API used by current Microsoft
+Windows versions. We don't use the Microsft terminology here; in
+hacker terminology, calling something a "win" is a form of praise.
+Keep in mind that Windows ist just a temporary workaround until you
+can switch to a complete Free Software system. Be the source always
+with you.
Index: gnupg/g10/ChangeLog
diff -u gnupg/g10/ChangeLog:1.692 gnupg/g10/ChangeLog:1.693
--- gnupg/g10/ChangeLog:1.692 Tue Feb 1 06:26:25 2005
+++ gnupg/g10/ChangeLog Thu Feb 3 10:32:53 2005
@@ -18,6 +18,10 @@
2005-01-27 Werner Koch <wk at g10code.com>
+ * parse-packet.c (listfp): New.
+ (set_packet_list_mode): Intialize it to stdout or stderr depending
+ on a global option. Made all printing in list mode use LISTFP.
+
* keygen.c (generate_subkeypair): Detect primary key on-card and
ask for the passphrase. Return an error if the primary key is a
plain stub.
Index: gnupg/g10/mainproc.c
diff -u gnupg/g10/mainproc.c:1.161 gnupg/g10/mainproc.c:1.162
--- gnupg/g10/mainproc.c:1.161 Thu Oct 21 21:18:47 2004
+++ gnupg/g10/mainproc.c Thu Feb 3 10:32:53 2005
@@ -1151,7 +1151,7 @@
if( rc ) {
free_packet(pkt);
/* stop processing when an invalid packet has been encountered
- * but don't do so when we are doing a --list-packet. */
+ * but don't do so when we are doing a --list-packets. */
if( rc == G10ERR_INVALID_PACKET && opt.list_packets != 2 )
break;
continue;
Index: gnupg/g10/parse-packet.c
diff -u gnupg/g10/parse-packet.c:1.114 gnupg/g10/parse-packet.c:1.115
--- gnupg/g10/parse-packet.c:1.114 Sun Oct 17 00:48:20 2004
+++ gnupg/g10/parse-packet.c Thu Feb 3 10:32:53 2005
@@ -1,6 +1,6 @@
/* parse-packet.c - read packets
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003,
- * 2004 Free Software Foundation, Inc.
+ * 2004, 2005 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@@ -37,8 +37,9 @@
#include "main.h"
#include "i18n.h"
-static int mpi_print_mode = 0;
-static int list_mode = 0;
+static int mpi_print_mode;
+static int list_mode;
+static FILE *listfp;
static int parse( IOBUF inp, PACKET *pkt, int onlykeypkts,
off_t *retpos, int *skip, IOBUF out, int do_skip
@@ -105,6 +106,23 @@
int old = list_mode;
list_mode = mode;
mpi_print_mode = DBG_MPI;
+ /* We use stdout print only if invoked by the --list-packets
+ command but switch to stderr in all otehr cases. This breaks
+ the previous behaviour but that seems to be more of a bug than
+ intentional. I don't believe that any application makes use of
+ this long standing annoying way of printing to stdout except
+ when doing a --list-packets. If this assumption fails, it will
+ be easy to add an option for the listing stream. Note that we
+ initialize it only once; mainly because some code may switch
+ the option value later back to 1 and we want to have all output
+ to the same stream.
+
+ Using stderr is not actually very clean because it bypasses the
+ logging code but it is a special thing anyay. I am not sure
+ whether using log_stream() would be better. Perhaps we should
+ enable the list mdoe only with a special option. */
+ if (!listfp)
+ listfp = opt.list_packets == 2 ? stdout : stderr;
return old;
}
@@ -523,14 +541,14 @@
{
if( *i && !(*i%8) ) {
if( *i && !(*i%24) )
- printf("\n%4d:", *i );
+ fprintf (listfp, "\n%4d:", *i );
else
- putchar(' ');
+ putc (' ', listfp);
}
if( c == -1 )
- printf(" EOF" );
+ fprintf (listfp, " EOF" );
else
- printf(" %02x", c );
+ fprintf (listfp, " %02x", c );
++*i;
}
@@ -573,13 +591,14 @@
{
if( list_mode ) {
if( pkttype == PKT_MARKER )
- fputs(":marker packet:\n", stdout );
+ fputs(":marker packet:\n", listfp );
else
- printf(":unknown packet: type %2d, length %lu\n", pkttype, pktlen);
+ fprintf (listfp, ":unknown packet: type %2d, length %lu\n",
+ pkttype, pktlen);
if( pkttype ) {
int c, i=0 ;
if( pkttype != PKT_MARKER )
- fputs("dump:", stdout );
+ fputs("dump:", listfp );
if( partial ) {
while( (c=iobuf_get(inp)) != -1 )
dump_hex_line(c, &i);
@@ -588,7 +607,7 @@
for( ; pktlen; pktlen-- )
dump_hex_line(iobuf_get(inp), &i);
}
- putchar('\n');
+ putc ('\n', listfp);
return;
}
}
@@ -691,18 +710,18 @@
assert( !pktlen );
if( list_mode ) {
- printf(":symkey enc packet: version %d, cipher %d, s2k %d, hash %d",
+ fprintf (listfp, ":symkey enc packet: version %d, cipher %d, s2k %d, hash %d",
version, cipher_algo, s2kmode, hash_algo);
if(seskeylen)
- printf(", seskey %d bits",(seskeylen-1)*8);
- printf("\n");
+ fprintf (listfp, ", seskey %d bits",(seskeylen-1)*8);
+ fprintf (listfp, "\n");
if( s2kmode == 1 || s2kmode == 3 ) {
- printf("\tsalt ");
+ fprintf (listfp, "\tsalt ");
for(i=0; i < 8; i++ )
- printf("%02x", k->s2k.salt[i]);
+ fprintf (listfp, "%02x", k->s2k.salt[i]);
if( s2kmode == 3 )
- printf(", count %lu", (ulong)k->s2k.count );
- printf("\n");
+ fprintf (listfp, ", count %lu", (ulong)k->s2k.count );
+ fprintf (listfp, "\n");
}
}
@@ -736,13 +755,13 @@
k->pubkey_algo = iobuf_get_noeof(inp); pktlen--;
k->throw_keyid = 0; /* only used as flag for build_packet */
if( list_mode )
- printf(":pubkey enc packet: version %d, algo %d, keyid %08lX%08lX\n",
+ fprintf (listfp, ":pubkey enc packet: version %d, algo %d, keyid %08lX%08lX\n",
k->version, k->pubkey_algo, (ulong)k->keyid[0], (ulong)k->keyid[1]);
ndata = pubkey_get_nenc(k->pubkey_algo);
if( !ndata ) {
if( list_mode )
- printf("\tunsupported algorithm %d\n", k->pubkey_algo );
+ fprintf (listfp, "\tunsupported algorithm %d\n", k->pubkey_algo );
unknown_pubkey_warning( k->pubkey_algo );
k->data[0] = NULL; /* no need to store the encrypted data */
}
@@ -751,9 +770,9 @@
n = pktlen;
k->data[i] = mpi_read(inp, &n, 0); pktlen -=n;
if( list_mode ) {
- printf("\tdata: ");
- mpi_print(stdout, k->data[i], mpi_print_mode );
- putchar('\n');
+ fprintf (listfp, "\tdata: ");
+ mpi_print(listfp, k->data[i], mpi_print_mode );
+ putc ('\n', listfp);
}
if (!k->data[i])
rc = G10ERR_INVALID_PACKET;
@@ -777,82 +796,83 @@
* detect the ARRs - we print our old message here when it is a faked
* ARR and add an additional notice */
if ( type == SIGSUBPKT_ARR && !hashed ) {
- printf("\tsubpkt %d len %u (additional recipient request)\n"
- "WARNING: PGP versions > 5.0 and < 6.5.8 will automagically "
- "encrypt to this key and thereby reveal the plaintext to "
- "the owner of this ARR key. Detailed info follows:\n",
- type, (unsigned)length );
+ fprintf (listfp,
+ "\tsubpkt %d len %u (additional recipient request)\n"
+ "WARNING: PGP versions > 5.0 and < 6.5.8 will automagically "
+ "encrypt to this key and thereby reveal the plaintext to "
+ "the owner of this ARR key. Detailed info follows:\n",
+ type, (unsigned)length );
}
buffer++;
length--;
- printf("\t%s%ssubpkt %d len %u (", /*)*/
+ fprintf (listfp, "\t%s%ssubpkt %d len %u (", /*)*/
critical ? "critical ":"",
hashed ? "hashed ":"", type, (unsigned)length );
if( length > buflen ) {
- printf("too short: buffer is only %u)\n", (unsigned)buflen );
+ fprintf (listfp, "too short: buffer is only %u)\n", (unsigned)buflen );
return;
}
switch( type ) {
case SIGSUBPKT_SIG_CREATED:
if( length >= 4 )
- printf("sig created %s", strtimestamp( buffer_to_u32(buffer) ) );
+ fprintf (listfp, "sig created %s", strtimestamp( buffer_to_u32(buffer) ) );
break;
case SIGSUBPKT_SIG_EXPIRE:
if( length >= 4 )
- printf("sig expires after %s",
+ fprintf (listfp, "sig expires after %s",
strtimevalue( buffer_to_u32(buffer) ) );
break;
case SIGSUBPKT_EXPORTABLE:
if( length )
- printf("%sexportable", *buffer? "":"not ");
+ fprintf (listfp, "%sexportable", *buffer? "":"not ");
break;
case SIGSUBPKT_TRUST:
if(length!=2)
p="[invalid trust subpacket]";
else
- printf("trust signature of depth %d, value %d",buffer[0],buffer[1]);
+ fprintf (listfp, "trust signature of depth %d, value %d",buffer[0],buffer[1]);
break;
case SIGSUBPKT_REGEXP:
if(!length)
p="[invalid regexp subpacket]";
else
- printf("regular expression: \"%s\"",buffer);
+ fprintf (listfp, "regular expression: \"%s\"",buffer);
break;
case SIGSUBPKT_REVOCABLE:
if( length )
- printf("%srevocable", *buffer? "":"not ");
+ fprintf (listfp, "%srevocable", *buffer? "":"not ");
break;
case SIGSUBPKT_KEY_EXPIRE:
if( length >= 4 )
- printf("key expires after %s",
+ fprintf (listfp, "key expires after %s",
strtimevalue( buffer_to_u32(buffer) ) );
break;
case SIGSUBPKT_PREF_SYM:
- fputs("pref-sym-algos:", stdout );
+ fputs("pref-sym-algos:", listfp );
for( i=0; i < length; i++ )
- printf(" %d", buffer[i] );
+ fprintf (listfp, " %d", buffer[i] );
break;
case SIGSUBPKT_REV_KEY:
- fputs("revocation key: ", stdout );
+ fputs("revocation key: ", listfp );
if( length < 22 )
p = "[too short]";
else {
- printf("c=%02x a=%d f=", buffer[0], buffer[1] );
+ fprintf (listfp, "c=%02x a=%d f=", buffer[0], buffer[1] );
for( i=2; i < length; i++ )
- printf("%02X", buffer[i] );
+ fprintf (listfp, "%02X", buffer[i] );
}
break;
case SIGSUBPKT_ISSUER:
if( length >= 8 )
- printf("issuer key ID %08lX%08lX",
+ fprintf (listfp, "issuer key ID %08lX%08lX",
(ulong)buffer_to_u32(buffer),
(ulong)buffer_to_u32(buffer+4) );
break;
case SIGSUBPKT_NOTATION:
{
- fputs("notation: ", stdout );
+ fputs("notation: ", listfp );
if( length < 8 )
p = "[too short]";
else {
@@ -865,11 +885,11 @@
if( 8+n1+n2 != length )
p = "[error]";
else {
- print_string( stdout, s, n1, ')' );
- putc( '=', stdout );
+ print_string( listfp, s, n1, ')' );
+ putc( '=', listfp );
if( *buffer & 0x80 )
- print_string( stdout, s+n1, n2, ')' );
+ print_string( listfp, s+n1, n2, ')' );
else
p = "[not human readable]";
}
@@ -877,67 +897,67 @@
}
break;
case SIGSUBPKT_PREF_HASH:
- fputs("pref-hash-algos:", stdout );
+ fputs("pref-hash-algos:", listfp );
for( i=0; i < length; i++ )
- printf(" %d", buffer[i] );
+ fprintf (listfp, " %d", buffer[i] );
break;
case SIGSUBPKT_PREF_COMPR:
- fputs("pref-zip-algos:", stdout );
+ fputs("pref-zip-algos:", listfp );
for( i=0; i < length; i++ )
- printf(" %d", buffer[i] );
+ fprintf (listfp, " %d", buffer[i] );
break;
case SIGSUBPKT_KS_FLAGS:
- fputs("key server preferences:",stdout);
+ fputs("key server preferences:",listfp);
for(i=0;i<length;i++)
- printf(" %02X", buffer[i]);
+ fprintf (listfp, " %02X", buffer[i]);
break;
case SIGSUBPKT_PREF_KS:
- fputs("preferred key server: ", stdout );
- print_string( stdout, buffer, length, ')' );
+ fputs("preferred key server: ", listfp );
+ print_string( listfp, buffer, length, ')' );
break;
case SIGSUBPKT_PRIMARY_UID:
p = "primary user ID";
break;
case SIGSUBPKT_POLICY:
- fputs("policy: ", stdout );
- print_string( stdout, buffer, length, ')' );
+ fputs("policy: ", listfp );
+ print_string( listfp, buffer, length, ')' );
break;
case SIGSUBPKT_KEY_FLAGS:
- fputs ( "key flags:", stdout );
+ fputs ( "key flags:", listfp );
for( i=0; i < length; i++ )
- printf(" %02X", buffer[i] );
+ fprintf (listfp, " %02X", buffer[i] );
break;
case SIGSUBPKT_SIGNERS_UID:
p = "signer's user ID";
break;
case SIGSUBPKT_REVOC_REASON:
if( length ) {
- printf("revocation reason 0x%02x (", *buffer );
- print_string( stdout, buffer+1, length-1, ')' );
+ fprintf (listfp, "revocation reason 0x%02x (", *buffer );
+ print_string( listfp, buffer+1, length-1, ')' );
p = ")";
}
break;
case SIGSUBPKT_ARR:
- fputs("Big Brother's key (ignored): ", stdout );
+ fputs("Big Brother's key (ignored): ", listfp );
if( length < 22 )
p = "[too short]";
else {
- printf("c=%02x a=%d f=", buffer[0], buffer[1] );
+ fprintf (listfp, "c=%02x a=%d f=", buffer[0], buffer[1] );
for( i=2; i < length; i++ )
- printf("%02X", buffer[i] );
+ fprintf (listfp, "%02X", buffer[i] );
}
break;
case SIGSUBPKT_FEATURES:
- fputs ( "features:", stdout );
+ fputs ( "features:", listfp );
for( i=0; i < length; i++ )
- printf(" %02x", buffer[i] );
+ fprintf (listfp, " %02x", buffer[i] );
break;
case SIGSUBPKT_SIGNATURE:
- fputs("signature: ",stdout);
+ fputs("signature: ",listfp);
if(length<17)
p="[too short]";
else
- printf("v%d, class 0x%02X, algo %d, digest algo %d",
+ fprintf (listfp, "v%d, class 0x%02X, algo %d, digest algo %d",
buffer[0],
buffer[0]==3?buffer[2]:buffer[1],
buffer[0]==3?buffer[15]:buffer[2],
@@ -951,7 +971,7 @@
break;
}
- printf("%s)\n", p? p: "");
+ fprintf (listfp, "%s)\n", p? p: "");
}
/****************
@@ -1369,7 +1389,7 @@
}
if( list_mode ) {
- printf(":signature packet: algo %d, keyid %08lX%08lX\n"
+ fprintf (listfp, ":signature packet: algo %d, keyid %08lX%08lX\n"
"\tversion %d, created %lu, md5len %d, sigclass %02x\n"
"\tdigest algo %d, begin of digest %02x %02x\n",
sig->pubkey_algo,
@@ -1386,7 +1406,7 @@
ndata = pubkey_get_nsig(sig->pubkey_algo);
if( !ndata ) {
if( list_mode )
- printf("\tunknown algorithm %d\n", sig->pubkey_algo );
+ fprintf (listfp, "\tunknown algorithm %d\n", sig->pubkey_algo );
unknown_pubkey_warning( sig->pubkey_algo );
/* we store the plain material in data[0], so that we are able
* to write it back with build_packet() */
@@ -1399,9 +1419,9 @@
sig->data[i] = mpi_read(inp, &n, 0 );
pktlen -=n;
if( list_mode ) {
- printf("\tdata: ");
- mpi_print(stdout, sig->data[i], mpi_print_mode );
- putchar('\n');
+ fprintf (listfp, "\tdata: ");
+ mpi_print(listfp, sig->data[i], mpi_print_mode );
+ putc ('\n', listfp);
}
if (!sig->data[i])
rc = G10ERR_INVALID_PACKET;
@@ -1439,7 +1459,7 @@
ops->keyid[1] = read_32(inp); pktlen -= 4;
ops->last = iobuf_get_noeof(inp); pktlen--;
if( list_mode )
- printf(":onepass_sig packet: keyid %08lX%08lX\n"
+ fprintf (listfp, ":onepass_sig packet: keyid %08lX%08lX\n"
"\tversion %d, sigclass %02x, digest %d, pubkey %d, last=%d\n",
(ulong)ops->keyid[0], (ulong)ops->keyid[1],
version, ops->sig_class,
@@ -1515,16 +1535,16 @@
/* early versions of G10 use old PGP comments packets;
* luckily all those comments are started by a hash */
if( list_mode ) {
- printf(":rfc1991 comment packet: \"" );
+ fprintf (listfp, ":rfc1991 comment packet: \"" );
for( ; pktlen; pktlen-- ) {
int c;
c = iobuf_get_noeof(inp);
if( c >= ' ' && c <= 'z' )
- putchar(c);
+ putc (c, listfp);
else
- printf("\\x%02x", c );
+ fprintf (listfp, "\\x%02x", c );
}
- printf("\"\n");
+ fprintf (listfp, "\"\n");
}
iobuf_skip_rest(inp, pktlen, 0);
return 0;
@@ -1560,7 +1580,7 @@
}
algorithm = iobuf_get_noeof(inp); pktlen--;
if( list_mode )
- printf(":%s key packet:\n"
+ fprintf (listfp, ":%s key packet:\n"
"\tversion %d, algo %d, created %lu, expires %lu\n",
pkttype == PKT_PUBLIC_KEY? "public" :
pkttype == PKT_SECRET_KEY? "secret" :
@@ -1602,7 +1622,7 @@
npkey = pubkey_get_npkey( algorithm );
if( !npkey ) {
if( list_mode )
- printf("\tunknown algorithm %d\n", algorithm );
+ fprintf (listfp, "\tunknown algorithm %d\n", algorithm );
unknown_pubkey_warning( algorithm );
}
@@ -1622,9 +1642,9 @@
for(i=0; i < npkey; i++ ) {
n = pktlen; sk->skey[i] = mpi_read(inp, &n, 0 ); pktlen -=n;
if( list_mode ) {
- printf( "\tskey[%d]: ", i);
- mpi_print(stdout, sk->skey[i], mpi_print_mode );
- putchar('\n');
+ fprintf (listfp, "\tskey[%d]: ", i);
+ mpi_print(listfp, sk->skey[i], mpi_print_mode );
+ putc ('\n', listfp);
}
if (!sk->skey[i])
rc = G10ERR_INVALID_PACKET;
@@ -1654,7 +1674,7 @@
temp[i] = iobuf_get_noeof(inp);
if( i < 4 || memcmp( temp, "GNU", 3 ) ) {
if( list_mode )
- printf( "\tunknown S2K %d\n",
+ fprintf (listfp, "\tunknown S2K %d\n",
sk->protect.s2k.mode );
rc = G10ERR_INVALID_PACKET;
goto leave;
@@ -1675,19 +1695,21 @@
break;
}
switch( sk->protect.s2k.mode ) {
- case 0: if( list_mode ) printf( "\tsimple S2K" );
+ case 0: if( list_mode ) fprintf (listfp, "\tsimple S2K" );
break;
- case 1: if( list_mode ) printf( "\tsalted S2K" );
+ case 1: if( list_mode ) fprintf (listfp, "\tsalted S2K" );
break;
- case 3: if( list_mode ) printf( "\titer+salt S2K" );
+ case 3: if( list_mode ) fprintf (listfp, "\titer+salt S2K" );
break;
- case 1001: if( list_mode ) printf( "\tgnu-dummy S2K" );
+ case 1001: if( list_mode ) fprintf (listfp,
+ "\tgnu-dummy S2K" );
break;
- case 1002: if (list_mode) printf("\tgnu-divert-to-card S2K");
+ case 1002: if (list_mode) fprintf (listfp,
+ "\tgnu-divert-to-card S2K");
break;
default:
if( list_mode )
- printf( "\tunknown %sS2K %d\n",
+ fprintf (listfp, "\tunknown %sS2K %d\n",
sk->protect.s2k.mode < 1000? "":"GNU ",
sk->protect.s2k.mode );
rc = G10ERR_INVALID_PACKET;
@@ -1695,18 +1717,18 @@
}
if( list_mode ) {
- printf(", algo: %d,%s hash: %d",
+ fprintf (listfp, ", algo: %d,%s hash: %d",
sk->protect.algo,
sk->protect.sha1chk?" SHA1 protection,"
:" simple checksum,",
sk->protect.s2k.hash_algo );
if( sk->protect.s2k.mode == 1
|| sk->protect.s2k.mode == 3 ) {
- printf(", salt: ");
+ fprintf (listfp, ", salt: ");
for(i=0; i < 8; i++ )
- printf("%02x", sk->protect.s2k.salt[i]);
+ fprintf (listfp, "%02x", sk->protect.s2k.salt[i]);
}
- putchar('\n');
+ putc ('\n', listfp);
}
if( sk->protect.s2k.mode == 3 ) {
@@ -1717,7 +1739,7 @@
sk->protect.s2k.count = iobuf_get(inp);
pktlen--;
if( list_mode )
- printf("\tprotect count: %lu\n",
+ fprintf (listfp, "\tprotect count: %lu\n",
(ulong)sk->protect.s2k.count);
}
else if( sk->protect.s2k.mode == 1002 ) {
@@ -1741,7 +1763,7 @@
sk->protect.s2k.mode = 0;
sk->protect.s2k.hash_algo = DIGEST_ALGO_MD5;
if( list_mode )
- printf( "\tprotect algo: %d (hash algo: %d)\n",
+ fprintf (listfp, "\tprotect algo: %d (hash algo: %d)\n",
sk->protect.algo, sk->protect.s2k.hash_algo );
}
/* It is really ugly that we don't know the size
@@ -1772,11 +1794,12 @@
for(i=0; i < sk->protect.ivlen && pktlen; i++, pktlen-- )
temp[i] = iobuf_get_noeof(inp);
if( list_mode ) {
- printf( sk->protect.s2k.mode == 1002? "\tserial-number: "
- : "\tprotect IV: ");
+ fprintf (listfp,
+ sk->protect.s2k.mode == 1002? "\tserial-number: "
+ : "\tprotect IV: ");
for(i=0; i < sk->protect.ivlen; i++ )
- printf(" %02x", temp[i] );
- putchar('\n');
+ fprintf (listfp, " %02x", temp[i] );
+ putc ('\n', listfp);
}
memcpy(sk->protect.iv, temp, sk->protect.ivlen );
}
@@ -1800,7 +1823,7 @@
read_rest(inp, pktlen, 0),pktlen);
pktlen = 0;
if( list_mode ) {
- printf("\tencrypted stuff follows\n");
+ fprintf (listfp, "\tencrypted stuff follows\n");
}
}
else { /* v3 method: the mpi length is not encrypted */
@@ -1808,16 +1831,16 @@
if ( sk->is_protected ) {
sk->skey[i] = read_protected_v3_mpi (inp, &pktlen);
if( list_mode )
- printf( "\tskey[%d]: [encrypted]\n", i);
+ fprintf (listfp, "\tskey[%d]: [encrypted]\n", i);
}
else {
n = pktlen;
sk->skey[i] = mpi_read(inp, &n, 0 );
pktlen -=n;
if( list_mode ) {
- printf( "\tskey[%d]: ", i);
- mpi_print(stdout, sk->skey[i], mpi_print_mode );
- putchar('\n');
+ fprintf (listfp, "\tskey[%d]: ", i);
+ mpi_print(listfp, sk->skey[i], mpi_print_mode );
+ putc ('\n', listfp);
}
}
@@ -1829,7 +1852,7 @@
sk->csum = read_16(inp); pktlen -= 2;
if( list_mode ) {
- printf("\tchecksum: %04hx\n", sk->csum);
+ fprintf (listfp, "\tchecksum: %04hx\n", sk->csum);
}
}
}
@@ -1846,9 +1869,9 @@
for(i=0; i < npkey; i++ ) {
n = pktlen; pk->pkey[i] = mpi_read(inp, &n, 0 ); pktlen -=n;
if( list_mode ) {
- printf( "\tpkey[%d]: ", i);
- mpi_print(stdout, pk->pkey[i], mpi_print_mode );
- putchar('\n');
+ fprintf (listfp, "\tpkey[%d]: ", i);
+ mpi_print(listfp, pk->pkey[i], mpi_print_mode );
+ putc ('\n', listfp);
}
if (!pk->pkey[i])
rc = G10ERR_INVALID_PACKET;
@@ -1959,15 +1982,15 @@
if( list_mode ) {
int n = packet->pkt.user_id->len;
- printf(":user ID packet: \"");
+ fprintf (listfp, ":user ID packet: \"");
/* fixme: Hey why don't we replace this with print_string?? */
for(p=packet->pkt.user_id->name; n; p++, n-- ) {
if( *p >= ' ' && *p <= 'z' )
- putchar(*p);
+ putc (*p, listfp);
else
- printf("\\x%02x", *p );
+ fprintf (listfp, "\\x%02x", *p );
}
- printf("\"\n");
+ fprintf (listfp, "\"\n");
}
return 0;
}
@@ -2030,7 +2053,7 @@
make_attribute_uidname(packet->pkt.user_id, EXTRA_UID_NAME_SPACE);
if( list_mode ) {
- printf(":attribute packet: %s\n", packet->pkt.user_id->name );
+ fprintf (listfp, ":attribute packet: %s\n", packet->pkt.user_id->name );
}
return 0;
}
@@ -2049,15 +2072,15 @@
if( list_mode ) {
int n = packet->pkt.comment->len;
- printf(":%scomment packet: \"", pkttype == PKT_OLD_COMMENT?
+ fprintf (listfp, ":%scomment packet: \"", pkttype == PKT_OLD_COMMENT?
"OpenPGP draft " : "" );
for(p=packet->pkt.comment->data; n; p++, n-- ) {
if( *p >= ' ' && *p <= 'z' )
- putchar(*p);
+ putc (*p, listfp);
else
- printf("\\x%02x", *p );
+ fprintf (listfp, "\\x%02x", *p );
}
- printf("\"\n");
+ fprintf (listfp, "\"\n");
}
return 0;
}
@@ -2084,14 +2107,14 @@
pkt->pkt.ring_trust->sigcache = c;
}
if( list_mode )
- printf(":trust packet: flag=%02x sigcache=%02x\n",
+ fprintf (listfp, ":trust packet: flag=%02x sigcache=%02x\n",
pkt->pkt.ring_trust->trustval,
pkt->pkt.ring_trust->sigcache);
}
else
{
if( list_mode )
- printf(":trust packet: empty\n");
+ fprintf (listfp, ":trust packet: empty\n");
}
iobuf_skip_rest (inp, pktlen, 0);
}
@@ -2136,21 +2159,21 @@
pktlen = 0;
if( list_mode ) {
- printf(":literal data packet:\n"
+ fprintf (listfp, ":literal data packet:\n"
"\tmode %c (%X), created %lu, name=\"",
mode >= ' ' && mode <'z'? mode : '?', mode,
(ulong)pt->timestamp );
for(p=pt->name,i=0; i < namelen; p++, i++ ) {
if( *p >= ' ' && *p <= 'z' )
- putchar(*p);
+ putc (*p, listfp);
else
- printf("\\x%02x", *p );
+ fprintf (listfp, "\\x%02x", *p );
}
- printf("\",\n\traw data: ");
+ fprintf (listfp, "\",\n\traw data: ");
if(partial)
- printf("unknown length\n");
+ fprintf (listfp, "unknown length\n");
else
- printf("%lu bytes\n", (ulong)pt->len );
+ fprintf (listfp, "%lu bytes\n", (ulong)pt->len );
}
leave:
@@ -2174,7 +2197,7 @@
zd->new_ctb = new_ctb;
zd->buf = inp;
if( list_mode )
- printf(":compressed packet: algo=%d\n", zd->algorithm);
+ fprintf (listfp, ":compressed packet: algo=%d\n", zd->algorithm);
return 0;
}
@@ -2223,11 +2246,12 @@
}
if( list_mode ) {
if( orig_pktlen )
- printf(":encrypted data packet:\n\tlength: %lu\n", orig_pktlen);
+ fprintf (listfp, ":encrypted data packet:\n\tlength: %lu\n",
+ orig_pktlen);
else
- printf(":encrypted data packet:\n\tlength: unknown\n");
+ fprintf (listfp, ":encrypted data packet:\n\tlength: unknown\n");
if( ed->mdc_method )
- printf("\tmdc_method: %d\n", ed->mdc_method );
+ fprintf (listfp, "\tmdc_method: %d\n", ed->mdc_method );
}
ed->buf = inp;
@@ -2247,7 +2271,7 @@
mdc = pkt->pkt.mdc= m_alloc(sizeof *pkt->pkt.mdc );
if( list_mode )
- printf(":mdc packet: length=%lu\n", pktlen);
+ fprintf (listfp, ":mdc packet: length=%lu\n", pktlen);
if( !new_ctb || pktlen != 20 ) {
log_error("mdc_packet with invalid encoding\n");
rc = G10ERR_INVALID_PACKET;
@@ -2283,7 +2307,7 @@
int i;
if ( list_mode )
- printf(":packet 63: length %lu ", pktlen);
+ fprintf (listfp, ":packet 63: length %lu ", pktlen);
sesmark = get_session_marker ( &sesmarklen );
if ( pktlen < sesmarklen+1 ) /* 1 is for the control bytes */
@@ -2310,7 +2334,7 @@
int c;
i=0;
- printf("- private (rest length %lu)\n", pktlen);
+ fprintf (listfp, "- private (rest length %lu)\n", pktlen);
if( partial ) {
while( (c=iobuf_get(inp)) != -1 )
dump_hex_line(c, &i);
@@ -2319,7 +2343,7 @@
for( ; pktlen; pktlen-- )
dump_hex_line(iobuf_get(inp), &i);
}
- putchar('\n');
+ putc ('\n', listfp);
}
iobuf_skip_rest(inp,pktlen, 0);
return G10ERR_INVALID_PACKET;
More information about the Gnupg-commits
mailing list