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