diff --git a/ChangeLog b/ChangeLog index f96332e20..db51b56d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2010-03-12 Werner Koch + + * configure.ac (AC_INIT): Prepare for using git. + 2010-03-10 Werner Koch * jnlib/: Move all code to common/. diff --git a/common/ChangeLog b/common/ChangeLog index 6f33deee8..d9ff6a729 100644 --- a/common/ChangeLog +++ b/common/ChangeLog @@ -1,10 +1,26 @@ +2010-03-12 Werner Koch + + * status.h (STATUS_ENTER): New. + + * ttyio.c (tty_fprintf): Change to use estream. + + * miscellaneous.c (print_utf8_string): Rename to print_utf8_buffer + and change FP arg to an estream. Change all callers. + (print_utf8_string2): Ditto; new name is to print_utf8_buffer2. + 2010-03-11 Werner Koch + * miscellaneous.c (print_string): Remove. + * estream.c (es_setvbuf): Fix parameter check. (es_set_buffering): Allow a SIZE of 0. * asshelp.c (setup_libassuan_logging, my_libassuan_log_handler): New. * logging.c (do_logv): Add arg IGNORE_ARG_PTR. Change all callers. (log_string): New. + (log_flush): New. + (set_file_fd): Simplify by using estreams es_stderr. + + * estream.h (es_stdout, es_stderr, es_stdin): New. 2010-03-10 Werner Koch diff --git a/common/asshelp.c b/common/asshelp.c index 76518485f..f9878f3b3 100644 --- a/common/asshelp.c +++ b/common/asshelp.c @@ -42,6 +42,8 @@ my_libassuan_log_handler (assuan_context_t ctx, void *hook, { unsigned int dbgval; + (void)ctx; + if (cat != ASSUAN_LOG_CONTROL) return 0; /* We only want the control channel messages. */ dbgval = hook? *(unsigned int*)hook : 0; diff --git a/common/estream.c b/common/estream.c index 32567e631..075a56564 100644 --- a/common/estream.c +++ b/common/estream.c @@ -213,6 +213,8 @@ struct estream_internal unsigned int eof: 1; } indicators; unsigned int deallocate_buffer: 1; + unsigned int is_stdstream:1; /* This is a standard stream. */ + unsigned int stdstream_fd:2; /* 0, 1 or 2 for a standard stream. */ unsigned int print_err: 1; /* Error in print_fun_writer. */ int print_errno; /* Errno from print_fun_writer. */ size_t print_ntotal; /* Bytes written from in print_fun_writer. */ @@ -302,9 +304,11 @@ mem_free (void *p) * List manipulation. */ -/* Add STREAM to the list of registered stream objects. */ +/* Add STREAM to the list of registered stream objects. If + WITH_LOCKED_LIST is true we assumed that the list of streams is + already locked. */ static int -es_list_add (estream_t stream) +es_list_add (estream_t stream, int with_locked_list) { estream_list_t list_obj; int ret; @@ -314,14 +318,16 @@ es_list_add (estream_t stream) ret = -1; else { - ESTREAM_LIST_LOCK; + if (!with_locked_list) + ESTREAM_LIST_LOCK; list_obj->car = stream; list_obj->cdr = estream_list; list_obj->prev_cdr = &estream_list; if (estream_list) estream_list->prev_cdr = &list_obj->cdr; estream_list = list_obj; - ESTREAM_LIST_UNLOCK; + if (!with_locked_list) + ESTREAM_LIST_UNLOCK; ret = 0; } @@ -330,11 +336,12 @@ es_list_add (estream_t stream) /* Remove STREAM from the list of registered stream objects. */ static void -es_list_remove (estream_t stream) +es_list_remove (estream_t stream, int with_locked_list) { estream_list_t list_obj; - ESTREAM_LIST_LOCK; + if (!with_locked_list) + ESTREAM_LIST_LOCK; for (list_obj = estream_list; list_obj; list_obj = list_obj->cdr) if (list_obj->car == stream) { @@ -344,7 +351,8 @@ es_list_remove (estream_t stream) mem_free (list_obj); break; } - ESTREAM_LIST_UNLOCK; + if (!with_locked_list) + ESTREAM_LIST_UNLOCK; } /* Type of an stream-iterator-function. */ @@ -1211,6 +1219,8 @@ es_initialize (estream_t stream, stream->intern->print_fp = NULL; stream->intern->indicators.err = 0; stream->intern->indicators.eof = 0; + stream->intern->is_stdstream = 0; + stream->intern->stdstream_fd = 0; stream->intern->deallocate_buffer = 0; stream->data_len = 0; @@ -1219,7 +1229,7 @@ es_initialize (estream_t stream, stream->unread_data_len = 0; /* Depending on the modeflags we set whether we start in writing or reading mode. This is required in case we are working on a - wronly stream which is not seeekable (like stdout). Without this + stream which is not seeekable (like stdout). Without this pre-initialization we would do a seek at the first write call and as this will fail no utput will be delivered. */ if ((modeflags & O_WRONLY) || (modeflags & O_RDWR) ) @@ -1258,7 +1268,8 @@ es_deinitialize (estream_t stream) /* Create a new stream object, initialize it. */ static int es_create (estream_t *stream, void *cookie, int fd, - es_cookie_io_functions_t functions, unsigned int modeflags) + es_cookie_io_functions_t functions, unsigned int modeflags, + int with_locked_list) { estream_internal_t stream_internal_new; estream_t stream_new; @@ -1290,7 +1301,7 @@ es_create (estream_t *stream, void *cookie, int fd, ESTREAM_MUTEX_INITIALIZE (stream_new->intern->lock); es_initialize (stream_new, cookie, fd, functions, modeflags); - err = es_list_add (stream_new); + err = es_list_add (stream_new, with_locked_list); if (err) goto out; @@ -1312,13 +1323,13 @@ es_create (estream_t *stream, void *cookie, int fd, /* Deinitialize a stream object and destroy it. */ static int -es_destroy (estream_t stream) +es_destroy (estream_t stream, int with_locked_list) { int err = 0; if (stream) { - es_list_remove (stream); + es_list_remove (stream, with_locked_list); err = es_deinitialize (stream); mem_free (stream->intern); mem_free (stream); @@ -1838,7 +1849,7 @@ doreadline (estream_t ES__RESTRICT stream, size_t max_length, goto out; err = es_create (&line_stream, line_stream_cookie, -1, - estream_functions_mem, O_RDWR); + estream_functions_mem, O_RDWR, 0); if (err) goto out; @@ -1923,7 +1934,7 @@ doreadline (estream_t ES__RESTRICT stream, size_t max_length, out: if (line_stream) - es_destroy (line_stream); + es_destroy (line_stream, 0); else if (line_stream_cookie) es_func_mem_destroy (line_stream_cookie); @@ -2122,7 +2133,7 @@ es_fopen (const char *ES__RESTRICT path, const char *ES__RESTRICT mode) goto out; create_called = 1; - err = es_create (&stream, cookie, fd, estream_functions_file, modeflags); + err = es_create (&stream, cookie, fd, estream_functions_file, modeflags, 0); if (err) goto out; @@ -2162,7 +2173,7 @@ es_mopen (unsigned char *ES__RESTRICT data, size_t data_n, size_t data_len, goto out; create_called = 1; - err = es_create (&stream, cookie, -1, estream_functions_mem, modeflags); + err = es_create (&stream, cookie, -1, estream_functions_mem, modeflags, 0); out: @@ -2193,7 +2204,7 @@ es_fopenmem (size_t memlimit, const char *ES__RESTRICT mode) memlimit)) return NULL; - if (es_create (&stream, cookie, -1, estream_functions_mem, modeflags)) + if (es_create (&stream, cookie, -1, estream_functions_mem, modeflags, 0)) (*estream_functions_mem.func_close) (cookie); return stream; @@ -2217,7 +2228,7 @@ es_fopencookie (void *ES__RESTRICT cookie, if (err) goto out; - err = es_create (&stream, cookie, -1, functions, modeflags); + err = es_create (&stream, cookie, -1, functions, modeflags, 0); if (err) goto out; @@ -2249,7 +2260,8 @@ do_fdopen (int filedes, const char *mode, int no_close) goto out; create_called = 1; - err = es_create (&stream, cookie, filedes, estream_functions_fd, modeflags); + err = es_create (&stream, cookie, filedes, estream_functions_fd, + modeflags, 0); out: @@ -2274,7 +2286,7 @@ es_fdopen_nc (int filedes, const char *mode) estream_t -do_fpopen (FILE *fp, const char *mode, int no_close) +do_fpopen (FILE *fp, const char *mode, int no_close, int with_locked_list) { unsigned int modeflags; int create_called; @@ -2298,7 +2310,7 @@ do_fpopen (FILE *fp, const char *mode, int no_close) create_called = 1; err = es_create (&stream, cookie, fp? fileno (fp):-1, estream_functions_fp, - modeflags); + modeflags, with_locked_list); out: @@ -2320,7 +2332,7 @@ do_fpopen (FILE *fp, const char *mode, int no_close) estream_t es_fpopen (FILE *fp, const char *mode) { - return do_fpopen (fp, mode, 0); + return do_fpopen (fp, mode, 0, 0); } @@ -2328,7 +2340,52 @@ es_fpopen (FILE *fp, const char *mode) estream_t es_fpopen_nc (FILE *fp, const char *mode) { - return do_fpopen (fp, mode, 1); + return do_fpopen (fp, mode, 1, 0); +} + + +estream_t +_es_get_std_stream (int fd) +{ + estream_list_t list_obj; + estream_t stream = NULL; + + fd %= 3; /* We only allow 0, 1 or 2 but we don't want to return an error. */ + ESTREAM_LIST_LOCK; + for (list_obj = estream_list; list_obj; list_obj = list_obj->cdr) + if (list_obj->car->intern->is_stdstream + && list_obj->car->intern->stdstream_fd == fd) + { + stream = list_obj->car; + break; + } + if (!stream) + { + /* Standard stream not yet created - do it now. */ + if (!fd) + stream = do_fpopen (stdin, "r", 1, 1); + else if (fd == 1) + stream = do_fpopen (stdout, "a", 1, 1); + else + stream = do_fpopen (stderr, "a", 1, 1); + + if (!stream) /* Fallback: Create a bit bucket. */ + { + stream = do_fpopen (NULL, fd? "a":"r", 0, 1); + if (!stream) + { + fprintf (stderr, "fatal: error creating a dummy estream" + " for %d: %s\n", fd, strerror (errno)); + abort(); + } + } + stream->intern->is_stdstream = 1; + stream->intern->stdstream_fd = fd; + if (fd == 2) + es_set_buffering (stream, NULL, _IOLBF, 0); + } + ESTREAM_LIST_UNLOCK; + return stream; } @@ -2370,7 +2427,7 @@ es_freopen (const char *ES__RESTRICT path, const char *ES__RESTRICT mode, if (create_called) es_func_fd_destroy (cookie); - es_destroy (stream); + es_destroy (stream, 0); stream = NULL; } else @@ -2381,7 +2438,7 @@ es_freopen (const char *ES__RESTRICT path, const char *ES__RESTRICT mode, /* FIXME? We don't support re-opening at the moment. */ _set_errno (EINVAL); es_deinitialize (stream); - es_destroy (stream); + es_destroy (stream, 0); stream = NULL; } @@ -2394,7 +2451,7 @@ es_fclose (estream_t stream) { int err; - err = es_destroy (stream); + err = es_destroy (stream, 0); return err; } @@ -2496,6 +2553,23 @@ es_clearerr (estream_t stream) } +static int +do_fflush (estream_t stream) +{ + int err; + + if (stream->flags.writing) + err = es_flush (stream); + else + { + es_empty (stream); + err = 0; + } + + return err; +} + + int es_fflush (estream_t stream) { @@ -2504,17 +2578,11 @@ es_fflush (estream_t stream) if (stream) { ESTREAM_LOCK (stream); - if (stream->flags.writing) - err = es_flush (stream); - else - { - es_empty (stream); - err = 0; - } + err = do_fflush (stream); ESTREAM_UNLOCK (stream); } else - err = es_list_iterate (es_fflush); + err = es_list_iterate (do_fflush); return err ? EOF : 0; } @@ -3186,7 +3254,7 @@ es_tmpfile (void) goto out; create_called = 1; - err = es_create (&stream, cookie, fd, estream_functions_fd, modeflags); + err = es_create (&stream, cookie, fd, estream_functions_fd, modeflags, 0); out: diff --git a/common/estream.h b/common/estream.h index 477aface8..67856bf76 100644 --- a/common/estream.h +++ b/common/estream.h @@ -80,6 +80,7 @@ #define es_fdopen_nc _ESTREAM_PREFIX(es_fdopen_nc) #define es_fpopen _ESTREAM_PREFIX(es_fpopen) #define es_fpopen_nc _ESTREAM_PREFIX(es_fpopen_nc) +#define _es_get_std_stream _ESTREAM_PREFIX(_es_get_std_stream) #define es_freopen _ESTREAM_PREFIX(es_freopen) #define es_fopencookie _ESTREAM_PREFIX(es_fopencookie) #define es_fclose _ESTREAM_PREFIX(es_fclose) @@ -250,6 +251,13 @@ int es_fclose (estream_t stream); int es_fileno (estream_t stream); int es_fileno_unlocked (estream_t stream); +estream_t _es_get_std_stream (int fd); + +#define es_stdin _es_get_std_stream (0) +#define es_stdout _es_get_std_stream (1) +#define es_stderr _es_get_std_stream (2) + + void es_flockfile (estream_t stream); int es_ftrylockfile (estream_t stream); void es_funlockfile (estream_t stream); diff --git a/common/logging.c b/common/logging.c index 3b767cb97..6bc35eee5 100644 --- a/common/logging.c +++ b/common/logging.c @@ -283,32 +283,7 @@ set_file_fd (const char *name, int fd) /* On error default to a stderr based estream. */ if (!fp) - { - fp = es_fpopen (stderr, "a"); - if (fp) - { - if (name) - es_fprintf (fp, "failed to open log file `%s': %s\n", - name, strerror (errno)); - else - es_fprintf (fp, "failed to fdopen file descriptor %d: %s\n", - fd, strerror (errno)); - } - else - { - fprintf (stderr, "failed to use stderr as log stream: %s\n", - strerror (errno)); - /* No way to log something. Create a dummy estream so that - there is something we can use. */ - fp = es_fpopen (NULL, "a"); - if (!fp) - { - fprintf (stderr, "fatal: failed to open dummy stream: %s\n", - strerror (errno)); - abort(); - } - } - } + fp = es_stderr; es_setvbuf (fp, NULL, _IOLBF, 0); @@ -605,6 +580,16 @@ log_printf (const char *fmt, ...) } +/* Flush the log - this is useful to make sure that the trailing + linefeed has been printed. */ +void +log_flush (void) +{ + volatile va_list dummy_arg_ptr; + do_logv (JNLIB_LOG_CONT, 1, NULL, dummy_arg_ptr); +} + + /* Print a hexdump of BUFFER. With TEXT of NULL print just the raw dump, with TEXT just an empty string, print a trailing linefeed, otherwise print an entire debug line. */ diff --git a/common/logging.h b/common/logging.h index f089cf0b5..2c29a0b1b 100644 --- a/common/logging.h +++ b/common/logging.h @@ -75,6 +75,7 @@ void log_error( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); void log_info( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); void log_debug( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); void log_printf( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); +void log_flush (void); /* Print a hexdump of BUFFER. With TEXT passes as NULL print just the raw dump, with TEXT being an empty string, print a trailing diff --git a/common/miscellaneous.c b/common/miscellaneous.c index 396f7224f..01d8c97be 100644 --- a/common/miscellaneous.c +++ b/common/miscellaneous.c @@ -117,23 +117,22 @@ print_fname_stdin (const char *s) return s; } -/* fixme: Globally replace it by print_sanitized_buffer. */ -void -print_string( FILE *fp, const byte *p, size_t n, int delim ) -{ - print_sanitized_buffer (fp, p, n, delim); -} void -print_utf8_string2 ( FILE *fp, const byte *p, size_t n, int delim ) +print_utf8_buffer2 (estream_t stream, const void *p, size_t n, int delim) { - print_sanitized_utf8_buffer (fp, p, n, delim); + char tmp[2]; + + tmp[0] = delim; + tmp[1] = 0; + es_write_sanitized_utf8_buffer (stream, p, n, tmp, NULL); } + void -print_utf8_string( FILE *fp, const byte *p, size_t n ) +print_utf8_buffer (estream_t stream, const void *p, size_t n) { - print_utf8_string2 (fp, p, n, 0); + es_write_sanitized_utf8_buffer (stream, p, n, NULL, NULL); } /* Write LENGTH bytes of BUFFER to FP as a hex encoded string. diff --git a/common/status.h b/common/status.h index bb5429dc0..0533c4a92 100644 --- a/common/status.h +++ b/common/status.h @@ -126,7 +126,8 @@ enum STATUS_TRUNCATED, STATUS_MOUNTPOINT, - STATUS_ERROR + STATUS_ERROR, + STATUS_SUCCESS }; diff --git a/common/ttyio.c b/common/ttyio.c index ec26b06e8..4f30b4b44 100644 --- a/common/ttyio.c +++ b/common/ttyio.c @@ -1,6 +1,6 @@ /* ttyio.c - tty i/O functions * Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2006,2007, - * 2009 Free Software Foundation, Inc. + * 2009, 2010 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -244,14 +244,14 @@ tty_printf( const char *fmt, ... ) /* Same as tty_printf but if FP is not NULL, behave like a regular fprintf. */ void -tty_fprintf (FILE *fp, const char *fmt, ... ) +tty_fprintf (estream_t fp, const char *fmt, ... ) { va_list arg_ptr; if (fp) { va_start (arg_ptr, fmt) ; - vfprintf (fp, fmt, arg_ptr ); + es_vfprintf (fp, fmt, arg_ptr ); va_end (arg_ptr); return; } @@ -259,32 +259,32 @@ tty_fprintf (FILE *fp, const char *fmt, ... ) if (no_terminal) return; - if( !initialized ) - init_ttyfp(); + if (!initialized) + init_ttyfp (); - va_start( arg_ptr, fmt ) ; + va_start (arg_ptr, fmt); #ifdef _WIN32 - { - char *buf = NULL; - int n; - DWORD nwritten; - - n = vasprintf(&buf, fmt, arg_ptr); - if( !buf ) - log_bug("vasprintf() failed\n"); - - if( !WriteConsoleA( con.out, buf, n, &nwritten, NULL ) ) - log_fatal("WriteConsole failed: rc=%d", (int)GetLastError() ); - if( n != nwritten ) - log_fatal("WriteConsole failed: %d != %d\n", n, (int)nwritten ); - last_prompt_len += n; - xfree (buf); - } + { + char *buf = NULL; + int n; + DWORD nwritten; + + n = vasprintf(&buf, fmt, arg_ptr); + if (!buf) + log_bug("vasprintf() failed\n"); + + if (!WriteConsoleA( con.out, buf, n, &nwritten, NULL )) + log_fatal("WriteConsole failed: rc=%d", (int)GetLastError() ); + if (n != nwritten) + log_fatal("WriteConsole failed: %d != %d\n", n, (int)nwritten ); + last_prompt_len += n; + xfree (buf); + } #else - last_prompt_len += vfprintf(ttyfp,fmt,arg_ptr) ; - fflush(ttyfp); + last_prompt_len += vfprintf(ttyfp,fmt,arg_ptr) ; + fflush(ttyfp); #endif - va_end(arg_ptr); + va_end(arg_ptr); } diff --git a/common/ttyio.h b/common/ttyio.h index eb2116a02..e1dc0f053 100644 --- a/common/ttyio.h +++ b/common/ttyio.h @@ -28,13 +28,13 @@ int tty_batchmode (int onoff); #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) void tty_printf (const char *fmt, ... ) __attribute__ ((format (printf,1,2))); -void tty_fprintf (FILE *fp, const char *fmt, ... ) +void tty_fprintf (estream_t fp, const char *fmt, ... ) __attribute__ ((format (printf,2,3))); char *tty_getf (const char *promptfmt, ... ) __attribute__ ((format (printf,1,2))); #else void tty_printf (const char *fmt, ... ); -void tty_fprintf (FILE *fp, const char *fmt, ... ); +void tty_fprintf (estream_t fp, const char *fmt, ... ); char *tty_getf (const char *promptfmt, ... ); #endif void tty_print_string (const unsigned char *p, size_t n); diff --git a/common/util.h b/common/util.h index 32d4085e7..6deee38e1 100644 --- a/common/util.h +++ b/common/util.h @@ -278,9 +278,8 @@ char *xtryasprintf (const char *fmt, ...) JNLIB_GCC_A_PRINTF(1,2); const char *print_fname_stdout (const char *s); const char *print_fname_stdin (const char *s); -void print_string (FILE *fp, const byte *p, size_t n, int delim); -void print_utf8_string2 ( FILE *fp, const byte *p, size_t n, int delim); -void print_utf8_string (FILE *fp, const byte *p, size_t n); +void print_utf8_buffer2 (estream_t fp, const void *p, size_t n, int delim); +void print_utf8_buffer (estream_t fp, const void *p, size_t n); void print_hexstring (FILE *fp, const void *buffer, size_t length, int reserved); char *make_printable_string (const void *p, size_t n, int delim); diff --git a/configure.ac b/configure.ac index c02fb1423..982a5923e 100644 --- a/configure.ac +++ b/configure.ac @@ -29,8 +29,11 @@ m4_define([my_issvn], [yes]) m4_define([svn_revision], m4_esyscmd([printf "%d" $(svn info 2>/dev/null \ | sed -n '/^Revision:/ s/[^0-9]//gp'|head -1)])) +m4_define([git_revision], m4_esyscmd([git branch -v 2>/dev/null \ + | awk '/^\* / {printf "%s",$3}'])) AC_INIT([gnupg], - [my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision])], + [my_version[]m4_if(my_issvn,[yes], + [m4_if(git_revision,[],[-svn[]svn_revision],[-git[]git_revision])])], [http://bugs.gnupg.org]) # Set development_version to yes if the minor number is odd or you # feel that the default check for a development version is not diff --git a/doc/DETAILS b/doc/DETAILS index ae978f2d5..ef8d3cdb3 100644 --- a/doc/DETAILS +++ b/doc/DETAILS @@ -617,6 +617,12 @@ more arguments in future versions. prefixed with a numerical error code and an underscore; e.g.: "151011327_EOF". + SUCCESS [] + Postive confirimation that an operation succeeded. + is optional but if given should not contain spaces. + Used only with a few commands. + + ATTRIBUTE This is one long line issued for each attribute subpacket when diff --git a/g10/ChangeLog b/g10/ChangeLog index 878627c12..dbb913e6e 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,5 +1,39 @@ +2010-03-15 Werner Koch + + * card-util.c: Replace stdio by estream. + * keylist.c: Ditto. + +2010-03-12 Werner Koch + + * plaintext.c (setup_plaintext_name): Do not encode pipe like + filenames. This helps with bug#1201. + + * seckey-cert.c (do_check): Return GPG_ERR_CANCELED. + * keyedit.c (change_passphrase): Add arg R_ERR. + (keyedit_passwd): Return the correct error or emit a success + status message. + 2010-03-11 Werner Koch + * misc.c (mpi_print): Change to take a estream_t arg. + + * parse-packet.c (listfp): Change to an estream_t. Change all + users to use estream functions. + + * kbnode.c (dump_kbnode): Change to use log functions. + * pkclist.c (do_show_revocation_reason): Ditto + + * armor.c (parse_header_line): Replace print_string by + es_print_sanitized. + (fake_packet): Ditto. + * keyedit.c (print_and_check_one_sig_colon): Ditto. + (show_key_with_all_names_colon): Ditto. + (ask_revoke_sig): Ditto. + * keylist.c (list_keyblock_colon): Ditto. + * mainproc.c (print_userid, list_node): Ditto. + * trustdb.c (dump_key_array): Ditto. + * gpg.c (list_config): ditto. + * gpg.c: Include "asshelp.h". (main): Remove assuan_set_assuan_log_prefix. Add assuan_set_log_cb. diff --git a/g10/armor.c b/g10/armor.c index 2dde9fe05..19cca3fd4 100644 --- a/g10/armor.c +++ b/g10/armor.c @@ -415,9 +415,9 @@ parse_header_line( armor_filter_context_t *afx, byte *line, unsigned int len ) if( !p || (RFC2440 && p[1]!=' ') || (!RFC2440 && p[1]!=' ' && p[1]!='\n' && p[1]!='\r')) { - log_error(_("invalid armor header: ")); - print_string( stderr, line, len, 0 ); - putc('\n', stderr); + log_error (_("invalid armor header: ")); + es_write_sanitized (log_get_stream (), line, len, NULL, NULL); + log_printf ("\n"); return -1; } @@ -427,8 +427,8 @@ parse_header_line( armor_filter_context_t *afx, byte *line, unsigned int len ) if( opt.verbose ) { log_info(_("armor header: ")); - print_string( stderr, line, len, 0 ); - putc('\n', stderr); + es_write_sanitized (log_get_stream (), line, len, NULL, NULL); + log_printf ("\n"); } if( afx->in_cleartext ) @@ -453,8 +453,8 @@ parse_header_line( armor_filter_context_t *afx, byte *line, unsigned int len ) signed data section is "Hash". */ log_info(_("unknown armor header: ")); - print_string( stderr, line, len, 0 ); - putc('\n', stderr); + es_write_sanitized (log_get_stream (), line, len, NULL, NULL); + log_printf ("\n"); } return 1; @@ -641,8 +641,9 @@ fake_packet( armor_filter_context_t *afx, IOBUF a, if( type != BEGIN_SIGNATURE ) { log_info(_("unexpected armor: ")); - print_string( stderr, p, n, 0 ); - putc('\n', stderr); + es_write_sanitized (log_get_stream (), p, n, + NULL, NULL); + log_printf ("\n"); } lastline = 1; @@ -652,9 +653,9 @@ fake_packet( armor_filter_context_t *afx, IOBUF a, else if(!afx->not_dash_escaped) { /* Bad dash-escaping. */ - log_info(_("invalid dash escaped line: ")); - print_string( stderr, p, n, 0 ); - putc('\n', stderr); + log_info (_("invalid dash escaped line: ")); + es_write_sanitized (log_get_stream (), p, n, NULL, NULL); + log_printf ("\n"); } } diff --git a/g10/card-util.c b/g10/card-util.c index 9bd5013a1..0723a1c51 100644 --- a/g10/card-util.c +++ b/g10/card-util.c @@ -218,7 +218,7 @@ get_manufacturer (unsigned int no) static void -print_sha1_fpr (FILE *fp, const unsigned char *fpr) +print_sha1_fpr (estream_t fp, const unsigned char *fpr) { int i; @@ -238,21 +238,21 @@ print_sha1_fpr (FILE *fp, const unsigned char *fpr) static void -print_sha1_fpr_colon (FILE *fp, const unsigned char *fpr) +print_sha1_fpr_colon (estream_t fp, const unsigned char *fpr) { int i; if (fpr) { for (i=0; i < 20 ; i++, fpr++) - fprintf (fp, "%02X", *fpr); + es_fprintf (fp, "%02X", *fpr); } - putc (':', fp); + es_putc (':', fp); } static void -print_name (FILE *fp, const char *text, const char *name) +print_name (estream_t fp, const char *text, const char *name) { tty_fprintf (fp, "%s", text); @@ -261,7 +261,7 @@ print_name (FILE *fp, const char *text, const char *name) if (name && *name) { if (fp) - print_utf8_string2 (fp, name, strlen (name), '\n'); + print_utf8_buffer2 (fp, name, strlen (name), '\n'); else tty_print_utf8_string2 (name, strlen (name), 0); } @@ -271,10 +271,11 @@ print_name (FILE *fp, const char *text, const char *name) } static void -print_isoname (FILE *fp, const char *text, const char *tag, const char *name) +print_isoname (estream_t fp, const char *text, + const char *tag, const char *name) { if (opt.with_colons) - fprintf (fp, "%s:", tag); + es_fprintf (fp, "%s:", tag); else tty_fprintf (fp, "%s", text); @@ -291,22 +292,22 @@ print_isoname (FILE *fp, const char *text, const char *tag, const char *name) *given = 0; given += 2; if (opt.with_colons) - print_string (fp, given, strlen (given), ':'); + es_write_sanitized (fp, given, strlen (given), ":", NULL); else if (fp) - print_utf8_string2 (fp, given, strlen (given), '\n'); + print_utf8_buffer2 (fp, given, strlen (given), '\n'); else tty_print_utf8_string2 (given, strlen (given), 0); if (opt.with_colons) - putc (':', fp); + es_putc (':', fp); else if (*buf) tty_fprintf (fp, " "); } if (opt.with_colons) - print_string (fp, buf, strlen (buf), ':'); + es_write_sanitized (fp, buf, strlen (buf), ":", NULL); else if (fp) - print_utf8_string2 (fp, buf, strlen (buf), '\n'); + print_utf8_buffer2 (fp, buf, strlen (buf), '\n'); else tty_print_utf8_string2 (buf, strlen (buf), 0); xfree (buf); @@ -314,13 +315,13 @@ print_isoname (FILE *fp, const char *text, const char *tag, const char *name) else { if (opt.with_colons) - putc (':', fp); + es_putc (':', fp); else tty_fprintf (fp, _("[not set]")); } if (opt.with_colons) - fputs (":\n", fp); + es_fputs (":\n", fp); else tty_fprintf (fp, "\n"); } @@ -351,7 +352,7 @@ fpr_is_ff (const char *fpr) /* Print all available information about the current card. */ void -card_status (FILE *fp, char *serialno, size_t serialnobuflen) +card_status (estream_t fp, char *serialno, size_t serialnobuflen) { struct agent_card_info_s info; PKT_public_key *pk = xcalloc (1, sizeof *pk); @@ -367,15 +368,14 @@ card_status (FILE *fp, char *serialno, size_t serialnobuflen) if (rc) { if (opt.with_colons) - fputs ("AID:::\n", fp); - log_error (_("OpenPGP card not available: %s\n"), - gpg_strerror (rc)); + es_fputs ("AID:::\n", fp); + log_error (_("OpenPGP card not available: %s\n"), gpg_strerror (rc)); xfree (pk); return; } if (opt.with_colons) - fprintf (fp, "AID:%s:", info.serialno? info.serialno : ""); + es_fprintf (fp, "AID:%s:", info.serialno? info.serialno : ""); else tty_fprintf (fp, "Application ID ...: %s\n", info.serialno? info.serialno : "[none]"); @@ -385,31 +385,31 @@ card_status (FILE *fp, char *serialno, size_t serialnobuflen) if (info.apptype && !strcmp (info.apptype, "NKS")) { if (opt.with_colons) - fputs ("netkey-card:\n", fp); + es_fputs ("netkey-card:\n", fp); log_info ("this is a NetKey card\n"); } else if (info.apptype && !strcmp (info.apptype, "DINSIG")) { if (opt.with_colons) - fputs ("dinsig-card:\n", fp); + es_fputs ("dinsig-card:\n", fp); log_info ("this is a DINSIG compliant card\n"); } else if (info.apptype && !strcmp (info.apptype, "P15")) { if (opt.with_colons) - fputs ("pkcs15-card:\n", fp); + es_fputs ("pkcs15-card:\n", fp); log_info ("this is a PKCS#15 compliant card\n"); } else if (info.apptype && !strcmp (info.apptype, "GELDKARTE")) { if (opt.with_colons) - fputs ("geldkarte-card:\n", fp); + es_fputs ("geldkarte-card:\n", fp); log_info ("this is a Geldkarte compliant card\n"); } else { if (opt.with_colons) - fputs ("unknown:\n", fp); + es_fputs ("unknown:\n", fp); } log_info ("not an OpenPGP card\n"); agent_release_card_info (&info); @@ -425,69 +425,72 @@ card_status (FILE *fp, char *serialno, size_t serialnobuflen) strcpy (serialno, info.serialno); if (opt.with_colons) - fputs ("openpgp-card:\n", fp); + es_fputs ("openpgp-card:\n", fp); if (opt.with_colons) { - fprintf (fp, "version:%.4s:\n", info.serialno+12); + es_fprintf (fp, "version:%.4s:\n", info.serialno+12); uval = xtoi_2(info.serialno+16)*256 + xtoi_2 (info.serialno+18); - fprintf (fp, "vendor:%04x:%s:\n", uval, get_manufacturer (uval)); - fprintf (fp, "serial:%.8s:\n", info.serialno+20); + es_fprintf (fp, "vendor:%04x:%s:\n", uval, get_manufacturer (uval)); + es_fprintf (fp, "serial:%.8s:\n", info.serialno+20); print_isoname (fp, "Name of cardholder: ", "name", info.disp_name); - fputs ("lang:", fp); + es_fputs ("lang:", fp); if (info.disp_lang) - print_string (fp, info.disp_lang, strlen (info.disp_lang), ':'); - fputs (":\n", fp); + es_write_sanitized (fp, info.disp_lang, strlen (info.disp_lang), + ":", NULL); + es_fputs (":\n", fp); - fprintf (fp, "sex:%c:\n", (info.disp_sex == 1? 'm': + es_fprintf (fp, "sex:%c:\n", (info.disp_sex == 1? 'm': info.disp_sex == 2? 'f' : 'u')); - fputs ("url:", fp); + es_fputs ("url:", fp); if (info.pubkey_url) - print_string (fp, info.pubkey_url, strlen (info.pubkey_url), ':'); - fputs (":\n", fp); + es_write_sanitized (fp, info.pubkey_url, strlen (info.pubkey_url), + ":", NULL); + es_fputs (":\n", fp); - fputs ("login:", fp); + es_fputs ("login:", fp); if (info.login_data) - print_string (fp, info.login_data, strlen (info.login_data), ':'); - fputs (":\n", fp); + es_write_sanitized (fp, info.login_data, strlen (info.login_data), + ":", NULL); + es_fputs (":\n", fp); - fprintf (fp, "forcepin:%d:::\n", !info.chv1_cached); + es_fprintf (fp, "forcepin:%d:::\n", !info.chv1_cached); for (i=0; i < DIM (info.key_attr); i++) if (info.key_attr[0].algo) - fprintf (fp, "keyattr:%d:%d:%u:\n", i+1, - info.key_attr[i].algo, info.key_attr[i].nbits); - fprintf (fp, "maxpinlen:%d:%d:%d:\n", - info.chvmaxlen[0], info.chvmaxlen[1], info.chvmaxlen[2]); - fprintf (fp, "pinretry:%d:%d:%d:\n", - info.chvretry[0], info.chvretry[1], info.chvretry[2]); - fprintf (fp, "sigcount:%lu:::\n", info.sig_counter); + es_fprintf (fp, "keyattr:%d:%d:%u:\n", i+1, + info.key_attr[i].algo, info.key_attr[i].nbits); + es_fprintf (fp, "maxpinlen:%d:%d:%d:\n", + info.chvmaxlen[0], info.chvmaxlen[1], info.chvmaxlen[2]); + es_fprintf (fp, "pinretry:%d:%d:%d:\n", + info.chvretry[0], info.chvretry[1], info.chvretry[2]); + es_fprintf (fp, "sigcount:%lu:::\n", info.sig_counter); for (i=0; i < 4; i++) { if (info.private_do[i]) { - fprintf (fp, "private_do:%d:", i+1); - print_string (fp, info.private_do[i], - strlen (info.private_do[i]), ':'); - fputs (":\n", fp); + es_fprintf (fp, "private_do:%d:", i+1); + es_write_sanitized (fp, info.private_do[i], + strlen (info.private_do[i]), ":", NULL); + es_fputs (":\n", fp); } } - fputs ("cafpr:", fp); + es_fputs ("cafpr:", fp); print_sha1_fpr_colon (fp, info.cafpr1valid? info.cafpr1:NULL); print_sha1_fpr_colon (fp, info.cafpr2valid? info.cafpr2:NULL); print_sha1_fpr_colon (fp, info.cafpr3valid? info.cafpr3:NULL); - putc ('\n', fp); - fputs ("fpr:", fp); + es_putc ('\n', fp); + es_fputs ("fpr:", fp); print_sha1_fpr_colon (fp, info.fpr1valid? info.fpr1:NULL); print_sha1_fpr_colon (fp, info.fpr2valid? info.fpr2:NULL); print_sha1_fpr_colon (fp, info.fpr3valid? info.fpr3:NULL); - putc ('\n', fp); - fprintf (fp, "fprtime:%lu:%lu:%lu:\n", + es_putc ('\n', fp); + es_fprintf (fp, "fprtime:%lu:%lu:%lu:\n", (unsigned long)info.fpr1time, (unsigned long)info.fpr2time, (unsigned long)info.fpr3time); } @@ -764,13 +767,13 @@ fetch_url(void) static int get_data_from_file (const char *fname, size_t maxlen, char **r_buffer) { - FILE *fp; + estream_t fp; char *data; int n; *r_buffer = NULL; - fp = fopen (fname, "rb"); + fp = es_fopen (fname, "rb"); #if GNUPG_MAJOR_VERSION == 1 if (fp && is_secured_file (fileno (fp))) { @@ -789,15 +792,15 @@ get_data_from_file (const char *fname, size_t maxlen, char **r_buffer) if (!data) { tty_printf (_("error allocating enough memory: %s\n"), strerror (errno)); - fclose (fp); + es_fclose (fp); return -1; } if (maxlen) - n = fread (data, 1, maxlen, fp); + n = es_fread (data, 1, maxlen, fp); else n = 0; - fclose (fp); + es_fclose (fp); if (n < 0) { tty_printf (_("error reading `%s': %s\n"), fname, strerror (errno)); @@ -814,9 +817,9 @@ get_data_from_file (const char *fname, size_t maxlen, char **r_buffer) static int put_data_to_file (const char *fname, const void *buffer, size_t length) { - FILE *fp; + estream_t fp; - fp = fopen (fname, "wb"); + fp = es_fopen (fname, "wb"); #if GNUPG_MAJOR_VERSION == 1 if (fp && is_secured_file (fileno (fp))) { @@ -831,13 +834,13 @@ put_data_to_file (const char *fname, const void *buffer, size_t length) return -1; } - if (length && fwrite (buffer, length, 1, fp) != 1) + if (length && es_fwrite (buffer, length, 1, fp) != 1) { tty_printf (_("error writing `%s': %s\n"), fname, strerror (errno)); - fclose (fp); + es_fclose (fp); return -1; } - fclose (fp); + es_fclose (fp); return 0; } @@ -1785,7 +1788,7 @@ card_edit (strlist_t commands) { if (opt.with_colons) { - card_status (stdout, serialnobuf, DIM (serialnobuf)); + card_status (es_stdout, serialnobuf, DIM (serialnobuf)); fflush (stdout); } else diff --git a/g10/gpg.c b/g10/gpg.c index b24157b29..e365a8b8d 100644 --- a/g10/gpg.c +++ b/g10/gpg.c @@ -1497,9 +1497,10 @@ list_config(char *items) { strlist_t sl; - printf("cfg:group:"); - print_string(stdout,iter->name,strlen(iter->name),':'); - printf(":"); + es_fprintf (es_stdout, "cfg:group:"); + es_write_sanitized (es_stdout, iter->name, strlen(iter->name), + ":", NULL); + es_putc (':', es_stdout); for(sl=iter->values;sl;sl=sl->next) { @@ -1517,7 +1518,7 @@ list_config(char *items) if(show_all || ascii_strcasecmp(name,"version")==0) { printf("cfg:version:"); - print_string(stdout,VERSION,strlen(VERSION),':'); + es_write_sanitized (es_stdout, VERSION, strlen(VERSION), ":", NULL); printf("\n"); any=1; } @@ -3828,29 +3829,30 @@ main (int argc, char **argv) { int mode = argc < 2 ? 0 : atoi(*argv); if( mode == 1 && argc == 2 ) { - mpi_print( stdout, generate_public_prime( atoi(argv[1]) ), 1); + mpi_print (es_stdout, + generate_public_prime( atoi(argv[1]) ), 1); } else if( mode == 2 && argc == 3 ) { - mpi_print( stdout, generate_elg_prime( + mpi_print (es_stdout, generate_elg_prime( 0, atoi(argv[1]), atoi(argv[2]), NULL,NULL ), 1); } else if( mode == 3 && argc == 3 ) { MPI *factors; - mpi_print( stdout, generate_elg_prime( + mpi_print (es_stdout, generate_elg_prime( 1, atoi(argv[1]), atoi(argv[2]), NULL,&factors ), 1); putchar('\n'); - mpi_print( stdout, factors[0], 1 ); /* print q */ + mpi_print (es_stdout, factors[0], 1 ); /* print q */ } else if( mode == 4 && argc == 3 ) { MPI g = mpi_alloc(1); - mpi_print( stdout, generate_elg_prime( + mpi_print (es_stdout, generate_elg_prime( 0, atoi(argv[1]), atoi(argv[2]), g, NULL ), 1); putchar('\n'); - mpi_print( stdout, g, 1 ); - mpi_free(g); + mpi_print (es_stdout, g, 1 ); + mpi_free (g); } else wrong_args("--gen-prime mode bits [qbits] "); @@ -3987,7 +3989,7 @@ main (int argc, char **argv) case aCardStatus: if (argc) wrong_args ("--card-status"); - card_status (stdout, NULL, 0); + card_status (es_stdout, NULL, 0); break; case aCardEdit: diff --git a/g10/import.c b/g10/import.c index 8de1d29f0..a46542f65 100644 --- a/g10/import.c +++ b/g10/import.c @@ -718,7 +718,7 @@ import_one( const char *fname, KBNODE keyblock, struct stats_s *stats, pubkey_letter( pk->pubkey_algo ), keystr_from_pk(pk), datestr_from_pk(pk) ); if (uidnode) - print_utf8_string (log_get_stream (), + print_utf8_buffer (log_get_stream (), uidnode->pkt->pkt.user_id->name, uidnode->pkt->pkt.user_id->len ); log_printf ("\n"); @@ -1127,7 +1127,7 @@ import_secret_one( const char *fname, KBNODE keyblock, pubkey_letter( sk->pubkey_algo ), keystr_from_sk(sk), datestr_from_sk(sk) ); if( uidnode ) - print_utf8_string( stderr, uidnode->pkt->pkt.user_id->name, + print_utf8_buffer (es_stderr, uidnode->pkt->pkt.user_id->name, uidnode->pkt->pkt.user_id->len ); log_printf ("\n"); } diff --git a/g10/kbnode.c b/g10/kbnode.c index 3d7d9be5c..f481c9fdb 100644 --- a/g10/kbnode.c +++ b/g10/kbnode.c @@ -1,6 +1,6 @@ /* kbnode.c - keyblock node utility functions * Copyright (C) 1998, 1999, 2000, 2001, 2002, - * 2005 Free Software Foundation, Inc. + * 2005, 2010 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -336,63 +336,71 @@ move_kbnode( KBNODE *root, KBNODE node, KBNODE where ) void -dump_kbnode( KBNODE node ) +dump_kbnode (KBNODE node) { - for(; node; node = node->next ) { - const char *s; - switch( node->pkt->pkttype ) { - case 0: s="empty"; break; - case PKT_PUBLIC_KEY: s="public-key"; break; - case PKT_SECRET_KEY: s="secret-key"; break; - case PKT_SECRET_SUBKEY: s= "secret-subkey"; break; - case PKT_PUBKEY_ENC: s="public-enc"; break; - case PKT_SIGNATURE: s="signature"; break; - case PKT_ONEPASS_SIG: s="onepass-sig"; break; - case PKT_USER_ID: s="user-id"; break; - case PKT_PUBLIC_SUBKEY: s="public-subkey"; break; - case PKT_COMMENT: s="comment"; break; - case PKT_RING_TRUST: s="trust"; break; - case PKT_PLAINTEXT: s="plaintext"; break; - case PKT_COMPRESSED: s="compressed"; break; - case PKT_ENCRYPTED: s="encrypted"; break; - case PKT_GPG_CONTROL: s="gpg-control"; break; - default: s="unknown"; break; + for (; node; node = node->next ) + { + const char *s; + switch (node->pkt->pkttype) + { + case 0: s="empty"; break; + case PKT_PUBLIC_KEY: s="public-key"; break; + case PKT_SECRET_KEY: s="secret-key"; break; + case PKT_SECRET_SUBKEY: s= "secret-subkey"; break; + case PKT_PUBKEY_ENC: s="public-enc"; break; + case PKT_SIGNATURE: s="signature"; break; + case PKT_ONEPASS_SIG: s="onepass-sig"; break; + case PKT_USER_ID: s="user-id"; break; + case PKT_PUBLIC_SUBKEY: s="public-subkey"; break; + case PKT_COMMENT: s="comment"; break; + case PKT_RING_TRUST: s="trust"; break; + case PKT_PLAINTEXT: s="plaintext"; break; + case PKT_COMPRESSED: s="compressed"; break; + case PKT_ENCRYPTED: s="encrypted"; break; + case PKT_GPG_CONTROL: s="gpg-control"; break; + default: s="unknown"; break; } - fprintf(stderr, "node %p %02x/%02x type=%s", - node, node->flag, node->private_flag, s); - if( node->pkt->pkttype == PKT_USER_ID ) { - PKT_user_id *uid = node->pkt->pkt.user_id; - fputs(" \"", stderr); - print_string( stderr, uid->name, uid->len, 0 ); - fprintf (stderr, "\" %c%c%c%c\n", - uid->is_expired? 'e':'.', - uid->is_revoked? 'r':'.', - uid->created? 'v':'.', - uid->is_primary? 'p':'.' ); - } - else if( node->pkt->pkttype == PKT_SIGNATURE ) { - fprintf(stderr, " class=%02x keyid=%08lX ts=%lu\n", - node->pkt->pkt.signature->sig_class, - (ulong)node->pkt->pkt.signature->keyid[1], - (ulong)node->pkt->pkt.signature->timestamp); - } - else if( node->pkt->pkttype == PKT_GPG_CONTROL ) { - fprintf(stderr, " ctrl=%d len=%u\n", - node->pkt->pkt.gpg_control->control, - (unsigned int)node->pkt->pkt.gpg_control->datalen); - } - else if( node->pkt->pkttype == PKT_PUBLIC_KEY - || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { - PKT_public_key *pk = node->pkt->pkt.public_key; - fprintf(stderr, " keyid=%08lX a=%d u=%d %c%c%c%c\n", - (ulong)keyid_from_pk( pk, NULL ), - pk->pubkey_algo, pk->pubkey_usage, - pk->has_expired? 'e':'.', - pk->is_revoked? 'r':'.', - pk->is_valid? 'v':'.', - pk->mdc_feature? 'm':'.'); - } - else - fputs("\n", stderr); + log_debug ("node %p %02x/%02x type=%s", + node, node->flag, node->private_flag, s); + if (node->pkt->pkttype == PKT_USER_ID) + { + PKT_user_id *uid = node->pkt->pkt.user_id; + log_printf (" \""); + es_write_sanitized (log_get_stream (), uid->name, uid->len, + NULL, NULL); + log_printf ("\" %c%c%c%c\n", + uid->is_expired? 'e':'.', + uid->is_revoked? 'r':'.', + uid->created? 'v':'.', + uid->is_primary? 'p':'.' ); + } + else if (node->pkt->pkttype == PKT_SIGNATURE) + { + log_printf (" class=%02x keyid=%08lX ts=%lu\n", + node->pkt->pkt.signature->sig_class, + (ulong)node->pkt->pkt.signature->keyid[1], + (ulong)node->pkt->pkt.signature->timestamp); + } + else if (node->pkt->pkttype == PKT_GPG_CONTROL) + { + log_printf (" ctrl=%d len=%u\n", + node->pkt->pkt.gpg_control->control, + (unsigned int)node->pkt->pkt.gpg_control->datalen); + } + else if (node->pkt->pkttype == PKT_PUBLIC_KEY + || node->pkt->pkttype == PKT_PUBLIC_SUBKEY) + { + PKT_public_key *pk = node->pkt->pkt.public_key; + + log_printf (" keyid=%08lX a=%d u=%d %c%c%c%c\n", + (ulong)keyid_from_pk( pk, NULL ), + pk->pubkey_algo, pk->pubkey_usage, + pk->has_expired? 'e':'.', + pk->is_revoked? 'r':'.', + pk->is_valid? 'v':'.', + pk->mdc_feature? 'm':'.'); + } + + log_flush (); } } diff --git a/g10/keyedit.c b/g10/keyedit.c index 270b3bacb..e9b92b232 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -188,7 +188,9 @@ print_and_check_one_sig_colon( KBNODE keyblock, KBNODE node, printf(":"); if(sig->trust_regexp) - print_string(stdout,sig->trust_regexp,strlen(sig->trust_regexp),':'); + es_write_sanitized (es_stdout, + sig->trust_regexp, strlen (sig->trust_regexp), + ":", NULL); printf("::%02x%c\n",sig->sig_class,sig->flags.exportable?'x':'l'); @@ -1100,7 +1102,7 @@ sign_uids( KBNODE keyblock, strlist_t locusr, int *ret_modified, * We use only one passphrase for all keys. */ static int -change_passphrase( KBNODE keyblock ) +change_passphrase (KBNODE keyblock, int *r_err) { int rc = 0; int changed=0; @@ -1264,6 +1266,8 @@ change_passphrase( KBNODE keyblock ) leave: xfree( passphrase ); set_next_passphrase( NULL ); + if (r_err) + *r_err = rc; return changed && !rc; } @@ -2150,7 +2154,7 @@ keyedit_menu( const char *username, strlist_t locusr, break; case cmdPASSWD: - if( change_passphrase( sec_keyblock ) ) + if (change_passphrase (sec_keyblock, NULL)) sec_modified = 1; break; @@ -2372,11 +2376,8 @@ keyedit_passwd (const char *username) if (err) goto leave; - if (!change_passphrase (keyblock)) - { - err = gpg_error (GPG_ERR_GENERAL); - goto leave; - } + if (!change_passphrase (keyblock, &err)) + goto leave; err = keydb_update_keyblock (kdh, keyblock); if (err) @@ -2393,6 +2394,8 @@ keyedit_passwd (const char *username) username, gpg_strerror (err)); write_status_error ("keyedit.passwd", err); } + else + write_status_text (STATUS_SUCCESS, "keyedit.passwd"); } @@ -2685,7 +2688,7 @@ show_key_with_all_names_colon (KBNODE keyblock) if(uid->attrib_data) printf ("%u %lu",uid->numattribs,uid->attrib_len); else - print_string (stdout, uid->name, uid->len, ':'); + es_write_sanitized (es_stdout, uid->name, uid->len, ":", NULL); putchar (':'); /* signature class */ @@ -4791,7 +4794,7 @@ ask_revoke_sig( KBNODE keyblock, KBNODE node ) else { printf("uid:::::::::"); - print_string (stdout, uid->name, uid->len, ':'); + es_write_sanitized (es_stdout, uid->name, uid->len, ":", NULL); } printf("\n"); diff --git a/g10/keylist.c b/g10/keylist.c index f5a977362..6d70b2bb4 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -54,7 +54,7 @@ struct sig_stats }; /* The stream used to write attribute packets to. */ -static FILE *attrib_fp = NULL; +static estream_t attrib_fp; /* List the keys. If list is NULL, all available keys are listed. @@ -71,32 +71,32 @@ public_key_list (strlist_t list, int locate_mode) read_trust_options (&trust_model, &created, &nextcheck, &marginals, &completes, &cert_depth); - printf ("tru:"); + es_fprintf (es_stdout, "tru:"); if (nextcheck && nextcheck <= make_timestamp ()) - printf ("o"); + es_fprintf (es_stdout, "o"); if (trust_model != opt.trust_model) - printf ("t"); + es_fprintf (es_stdout, "t"); if (opt.trust_model == TM_PGP || opt.trust_model == TM_CLASSIC) { if (marginals != opt.marginals_needed) - printf ("m"); + es_fprintf (es_stdout, "m"); if (completes != opt.completes_needed) - printf ("c"); + es_fprintf (es_stdout, "c"); if (cert_depth != opt.max_cert_depth) - printf ("d"); + es_fprintf (es_stdout, "d"); } - printf (":%d:%lu:%lu", trust_model, created, nextcheck); + es_fprintf (es_stdout, ":%d:%lu:%lu", trust_model, created, nextcheck); /* Only show marginals, completes, and cert_depth in the classic or PGP trust models since they are not meaningful otherwise. */ if (trust_model == TM_PGP || trust_model == TM_CLASSIC) - printf (":%d:%d:%d", marginals, completes, cert_depth); + es_fprintf (es_stdout, ":%d:%d:%d", marginals, completes, cert_depth); - printf ("\n"); + es_fprintf (es_stdout, "\n"); } /* We need to do the stale check right here because it might need to @@ -147,7 +147,7 @@ print_seckey_info (PKT_public_key *pk) the tty output interface is used, otherwise output is directted to the given stream. */ void -print_pubkey_info (FILE * fp, PKT_public_key * pk) +print_pubkey_info (estream_t fp, PKT_public_key * pk) { u32 keyid[2]; char *p; @@ -162,15 +162,11 @@ print_pubkey_info (FILE * fp, PKT_public_key * pk) p = get_user_id_native (keyid); if (fp) - fprintf (fp, "pub %4u%c/%s %s %s\n", - nbits_from_pk (pk), - pubkey_letter (pk->pubkey_algo), - keystr (keyid), datestr_from_pk (pk), p); - else - tty_printf ("\npub %4u%c/%s %s %s\n", - nbits_from_pk (pk), pubkey_letter (pk->pubkey_algo), - keystr (keyid), datestr_from_pk (pk), p); - + tty_printf ("\n"); + tty_fprintf (fp, "pub %4u%c/%s %s %s\n", + nbits_from_pk (pk), + pubkey_letter (pk->pubkey_algo), + keystr (keyid), datestr_from_pk (pk), p); xfree (p); } @@ -178,7 +174,7 @@ print_pubkey_info (FILE * fp, PKT_public_key * pk) /* Print basic information of a secret key including the card serial number information. */ void -print_card_key_info (FILE * fp, KBNODE keyblock) +print_card_key_info (estream_t fp, KBNODE keyblock) { KBNODE node; int i; @@ -239,7 +235,8 @@ status_one_subpacket (sigsubpkttype_t type, size_t len, int flags, if (len > 256) return; - sprintf (status, "%d %u %u ", type, flags, (unsigned int) len); + snprintf (status, sizeof status, + "%d %u %u ", type, flags, (unsigned int) len); write_status_text_and_buffer (STATUS_SIG_SUBPACKET, status, buf, len, 0); } @@ -256,7 +253,7 @@ show_policy_url (PKT_signature * sig, int indent, int mode) const byte *p; size_t len; int seq = 0, crit; - FILE *fp = mode ? log_get_stream () : stdout; + estream_t fp = mode ? log_get_stream () : es_stdout; while ((p = enum_sig_subpkt (sig->hashed, SIGSUBPKT_POLICY, &len, &seq, &crit))) @@ -267,7 +264,7 @@ show_policy_url (PKT_signature * sig, int indent, int mode) const char *str; for (i = 0; i < indent; i++) - putchar (' '); + es_putc (' ', fp); if (crit) str = _("Critical signature policy: "); @@ -276,9 +273,9 @@ show_policy_url (PKT_signature * sig, int indent, int mode) if (mode) log_info ("%s", str); else - printf ("%s", str); - print_utf8_string (fp, p, len); - fprintf (fp, "\n"); + es_fprintf (fp, "%s", str); + print_utf8_buffer (fp, p, len); + es_fprintf (fp, "\n"); } if (mode) @@ -299,7 +296,7 @@ show_keyserver_url (PKT_signature * sig, int indent, int mode) const byte *p; size_t len; int seq = 0, crit; - FILE *fp = mode ? log_get_stream () : stdout; + estream_t fp = mode ? log_get_stream () : es_stdout; while ((p = enum_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_KS, &len, &seq, @@ -311,7 +308,7 @@ show_keyserver_url (PKT_signature * sig, int indent, int mode) const char *str; for (i = 0; i < indent; i++) - putchar (' '); + es_putc (' ', es_stdout); if (crit) str = _("Critical preferred keyserver: "); @@ -320,9 +317,9 @@ show_keyserver_url (PKT_signature * sig, int indent, int mode) if (mode) log_info ("%s", str); else - printf ("%s", str); - print_utf8_string (fp, p, len); - fprintf (fp, "\n"); + es_fprintf (es_stdout, "%s", str); + print_utf8_buffer (fp, p, len); + es_fprintf (fp, "\n"); } if (mode) @@ -343,7 +340,7 @@ show_keyserver_url (PKT_signature * sig, int indent, int mode) void show_notation (PKT_signature * sig, int indent, int mode, int which) { - FILE *fp = mode ? log_get_stream () : stdout; + estream_t fp = mode ? log_get_stream () : es_stdout; struct notation *nd, *notations; if (which == 0) @@ -364,7 +361,7 @@ show_notation (PKT_signature * sig, int indent, int mode, int which) const char *str; for (i = 0; i < indent; i++) - putchar (' '); + es_putc (' ', es_stdout); if (nd->flags.critical) str = _("Critical signature notation: "); @@ -373,12 +370,12 @@ show_notation (PKT_signature * sig, int indent, int mode, int which) if (mode) log_info ("%s", str); else - printf ("%s", str); + es_fprintf (es_stdout, "%s", str); /* This is all UTF8 */ - print_utf8_string (fp, nd->name, strlen (nd->name)); - fprintf (fp, "="); - print_utf8_string (fp, nd->value, strlen (nd->value)); - fprintf (fp, "\n"); + print_utf8_buffer (fp, nd->name, strlen (nd->name)); + es_fprintf (fp, "="); + print_utf8_buffer (fp, nd->value, strlen (nd->value)); + es_fprintf (fp, "\n"); } } @@ -455,10 +452,10 @@ list_all (int secret) { int i; - printf ("%s\n", resname); + es_fprintf (es_stdout, "%s\n", resname); for (i = strlen (resname); i; i--) - putchar ('-'); - putchar ('\n'); + es_putc ('-', es_stdout); + es_putc ('\n', es_stdout); lastresname = resname; } } @@ -517,10 +514,10 @@ list_one (strlist_t names, int secret) if ((opt.list_options & LIST_SHOW_KEYRING) && !opt.with_colons) { resname = keydb_get_resource_name (get_ctx_handle (ctx)); - printf ("%s: %s\n", keyring_str, resname); + es_fprintf (es_stdout, "%s: %s\n", keyring_str, resname); for (i = strlen (resname) + strlen (keyring_str) + 2; i; i--) - putchar ('-'); - putchar ('\n'); + es_putc ('-', es_stdout); + es_putc ('\n', es_stdout); } list_keyblock (keyblock, secret, opt.fingerprint, (!secret && opt.check_sigs)? &stats : NULL); @@ -580,10 +577,10 @@ print_key_data (PKT_public_key * pk) for (i = 0; i < n; i++) { - printf ("pkd:%d:%u:", i, mpi_get_nbits (pk->pkey[i])); - mpi_print (stdout, pk->pkey[i], 1); - putchar (':'); - putchar ('\n'); + es_fprintf (es_stdout, "pkd:%d:%u:", i, mpi_get_nbits (pk->pkey[i])); + mpi_print (es_stdout, pk->pkey[i], 1); + es_putc (':', es_stdout); + es_putc ('\n', es_stdout); } } @@ -594,14 +591,14 @@ print_capabilities (PKT_public_key *pk, KBNODE keyblock) int c_printed = 0; if (use & PUBKEY_USAGE_ENC) - putchar ('e'); + es_putc ('e', es_stdout); if (use & PUBKEY_USAGE_SIG) { - putchar ('s'); + es_putc ('s', es_stdout); if (pk->is_primary) { - putchar ('c'); + es_putc ('c', es_stdout); /* The PUBKEY_USAGE_CERT flag was introduced later and we used to always print 'c' for a primary key. To avoid any regression here we better track whether we printed 'c' @@ -611,10 +608,10 @@ print_capabilities (PKT_public_key *pk, KBNODE keyblock) } if ((use & PUBKEY_USAGE_CERT) && !c_printed) - putchar ('c'); + es_putc ('c', es_stdout); if ((use & PUBKEY_USAGE_AUTH)) - putchar ('a'); + es_putc ('a', es_stdout); if (keyblock) { @@ -650,18 +647,18 @@ print_capabilities (PKT_public_key *pk, KBNODE keyblock) } } if (enc) - putchar ('E'); + es_putc ('E', es_stdout); if (sign) - putchar ('S'); + es_putc ('S', es_stdout); if (cert) - putchar ('C'); + es_putc ('C', es_stdout); if (auth) - putchar ('A'); + es_putc ('A', es_stdout); if (disabled) - putchar ('D'); + es_putc ('D', es_stdout); } - putchar (':'); + es_putc (':', es_stdout); } @@ -673,18 +670,18 @@ print_one_subpacket (sigsubpkttype_t type, size_t len, int flags, { size_t i; - printf ("spk:%d:%u:%u:", type, flags, (unsigned int) len); + es_fprintf (es_stdout, "spk:%d:%u:%u:", type, flags, (unsigned int) len); for (i = 0; i < len; i++) { /* printable ascii other than : and % */ if (buf[i] >= 32 && buf[i] <= 126 && buf[i] != ':' && buf[i] != '%') - printf ("%c", buf[i]); + es_fprintf (es_stdout, "%c", buf[i]); else - printf ("%%%02X", buf[i]); + es_fprintf (es_stdout, "%%%02X", buf[i]); } - printf ("\n"); + es_fprintf (es_stdout, "\n"); } @@ -748,8 +745,8 @@ dump_attribs (const PKT_user_id *uid, PKT_public_key *pk) write_status_text (STATUS_ATTRIBUTE, buf); } - fwrite (uid->attribs[i].data, uid->attribs[i].len, 1, attrib_fp); - fflush (attrib_fp); + es_fwrite (uid->attribs[i].data, uid->attribs[i].len, 1, attrib_fp); + es_fflush (attrib_fp); } } @@ -782,7 +779,7 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) check_trustdb_stale (); - printf ("%s%c %4u%c/%s %s", + es_fprintf (es_stdout, "%s%c %4u%c/%s %s", secret? "sec":"pub", s2k_char, nbits_from_pk (pk), pubkey_letter (pk->pubkey_algo), @@ -790,21 +787,21 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) if (pk->is_revoked) { - printf (" ["); - printf (_("revoked: %s"), revokestr_from_pk (pk)); - printf ("]"); + es_fprintf (es_stdout, " ["); + es_fprintf (es_stdout, _("revoked: %s"), revokestr_from_pk (pk)); + es_fprintf (es_stdout, "]"); } else if (pk->has_expired) { - printf (" ["); - printf (_("expired: %s"), expirestr_from_pk (pk)); - printf ("]"); + es_fprintf (es_stdout, " ["); + es_fprintf (es_stdout, _("expired: %s"), expirestr_from_pk (pk)); + es_fprintf (es_stdout, "]"); } else if (pk->expiredate) { - printf (" ["); - printf (_("expires: %s"), expirestr_from_pk (pk)); - printf ("]"); + es_fprintf (es_stdout, " ["); + es_fprintf (es_stdout, _("expires: %s"), expirestr_from_pk (pk)); + es_fprintf (es_stdout, "]"); } #if 0 @@ -813,11 +810,11 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) if (opt.list_options & LIST_SHOW_VALIDITY) { int validity = get_validity (pk, NULL); - printf (" [%s]", trust_value_to_string (validity)); + es_fprintf (es_stdout, " [%s]", trust_value_to_string (validity)); } #endif - printf ("\n"); + es_fprintf (es_stdout, "\n"); if (fpr) print_fingerprint (pk, NULL, 0); @@ -860,13 +857,13 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) if (indent < 0 || indent > 40) indent = 0; - printf ("uid%*s%s ", indent, "", validity); + es_fprintf (es_stdout, "uid%*s%s ", indent, "", validity); } else - printf ("uid%*s", (int) keystrlen () + 10, ""); + es_fprintf (es_stdout, "uid%*s", (int) keystrlen () + 10, ""); - print_utf8_string (stdout, uid->name, uid->len); - putchar ('\n'); + print_utf8_buffer (es_stdout, uid->name, uid->len); + es_putc ('\n', es_stdout); if ((opt.list_options & LIST_SHOW_PHOTOS) && uid->attribs != NULL) show_photos (uid->attribs, uid->numattribs, pk, NULL, uid); @@ -888,30 +885,30 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) s2k_char = (/*(sk->protect.s2k.mode == 1001)? '#' : (sk->protect.s2k.mode == 1002)? '>' : */' '); - printf ("%s%c %4u%c/%s %s", + es_fprintf (es_stdout, "%s%c %4u%c/%s %s", secret? "ssb":"sub", s2k_char, nbits_from_pk (pk2), pubkey_letter (pk2->pubkey_algo), keystr_from_pk (pk2), datestr_from_pk (pk2)); if (pk2->is_revoked) { - printf (" ["); - printf (_("revoked: %s"), revokestr_from_pk (pk2)); - printf ("]"); + es_fprintf (es_stdout, " ["); + es_fprintf (es_stdout, _("revoked: %s"), revokestr_from_pk (pk2)); + es_fprintf (es_stdout, "]"); } else if (pk2->has_expired) { - printf (" ["); - printf (_("expired: %s"), expirestr_from_pk (pk2)); - printf ("]"); + es_fprintf (es_stdout, " ["); + es_fprintf (es_stdout, _("expired: %s"), expirestr_from_pk (pk2)); + es_fprintf (es_stdout, "]"); } else if (pk2->expiredate) { - printf (" ["); - printf (_("expires: %s"), expirestr_from_pk (pk2)); - printf ("]"); + es_fprintf (es_stdout, " ["); + es_fprintf (es_stdout, _("expires: %s"), expirestr_from_pk (pk2)); + es_fprintf (es_stdout, "]"); } - putchar ('\n'); + es_putc ('\n', es_stdout); if (fpr > 1) { print_fingerprint (pk2, NULL, 0); @@ -972,14 +969,14 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) sigstr = "sig"; else { - printf ("sig " + es_fprintf (es_stdout, "sig " "[unexpected signature class 0x%02x]\n", sig->sig_class); continue; } - fputs (sigstr, stdout); - printf ("%c%c %c%c%c%c%c%c %s %s", + es_fputs (sigstr, es_stdout); + es_fprintf (es_stdout, "%c%c %c%c%c%c%c%c %s %s", sigrc, (sig->sig_class - 0x10 > 0 && sig->sig_class - 0x10 < 4) ? '0' + sig->sig_class - 0x10 : ' ', @@ -993,20 +990,20 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) sig->trust_depth : ' ', keystr (sig->keyid), datestr_from_sig (sig)); if (opt.list_options & LIST_SHOW_SIG_EXPIRE) - printf (" %s", expirestr_from_sig (sig)); - printf (" "); + es_fprintf (es_stdout, " %s", expirestr_from_sig (sig)); + es_fprintf (es_stdout, " "); if (sigrc == '%') - printf ("[%s] ", g10_errstr (rc)); + es_fprintf (es_stdout, "[%s] ", g10_errstr (rc)); else if (sigrc == '?') ; else if (!opt.fast_list_mode) { size_t n; char *p = get_user_id (sig->keyid, &n); - print_utf8_string (stdout, p, n); + print_utf8_buffer (es_stdout, p, n); xfree (p); } - putchar ('\n'); + es_putc ('\n', es_stdout); if (sig->flags.policy_url && (opt.list_options & LIST_SHOW_POLICY_URLS)) @@ -1028,7 +1025,7 @@ list_keyblock_print (KBNODE keyblock, int secret, int fpr, void *opaque) /* fixme: check or list other sigs here */ } } - putchar ('\n'); + es_putc ('\n', es_stdout); } void @@ -1045,11 +1042,11 @@ print_revokers (PKT_public_key * pk) { byte *p; - printf ("rvk:::%d::::::", pk->revkey[i].algid); + es_fprintf (es_stdout, "rvk:::%d::::::", pk->revkey[i].algid); p = pk->revkey[i].fpr; for (j = 0; j < 20; j++, p++) - printf ("%02X", *p); - printf (":%02x%s:\n", pk->revkey[i].class, + es_fprintf (es_stdout, "%02X", *p); + es_fprintf (es_stdout, ":%02x%s:\n", pk->revkey[i].class, (pk->revkey[i].class & 0x40) ? "s" : ""); } } @@ -1079,13 +1076,13 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) pk = node->pkt->pkt.public_key; keyid_from_pk (pk, keyid); - fputs (secret? "sec:":"pub:", stdout); + es_fputs (secret? "sec:":"pub:", es_stdout); if (!pk->is_valid) - putchar ('i'); + es_putc ('i', es_stdout); else if (pk->is_revoked) - putchar ('r'); + es_putc ('r', es_stdout); else if (pk->has_expired) - putchar ('e'); + es_putc ('e', es_stdout); else if (opt.fast_list_mode || opt.no_expensive_trust_checks) ; else @@ -1093,39 +1090,39 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) trustletter = get_validity_info (pk, NULL); if (trustletter == 'u') ulti_hack = 1; - putchar (trustletter); + es_putc (trustletter, es_stdout); } - printf (":%u:%d:%08lX%08lX:%s:%s::", + es_fprintf (es_stdout, ":%u:%d:%08lX%08lX:%s:%s::", nbits_from_pk (pk), pk->pubkey_algo, (ulong) keyid[0], (ulong) keyid[1], colon_datestr_from_pk (pk), colon_strtime (pk->expiredate)); if (!opt.fast_list_mode && !opt.no_expensive_trust_checks) - putchar (get_ownertrust_info (pk)); - putchar (':'); + es_putc (get_ownertrust (pk), es_stdout); + es_putc (':', es_stdout); - putchar (':'); - putchar (':'); + es_putc (':', es_stdout); + es_putc (':', es_stdout); print_capabilities (pk, keyblock); if (secret) { - putchar (':'); /* End of field 13. */ - putchar (':'); /* End of field 14. */ + es_putc (':', es_stdout); /* End of field 13. */ + es_putc (':', es_stdout); /* End of field 14. */ if (/*FIXME sk->protect.s2k.mode*/1 == 1001) - putchar ('#'); /* Key is just a stub. */ + es_putc ('#', es_stdout); /* Key is just a stub. */ else if (/*FIXME sk->protect.s2k.mode*/1 == 1002) { /* Key is stored on an external token (card) or handled by the gpg-agent. Print the serial number of that token here. */ /* FIXME: for (i = 0; i < sk->protect.ivlen; i++) */ - /* printf ("%02X", sk->protect.iv[i]); */ + /* es_fprintf (es_stdout, "%02X", sk->protect.iv[i]); */ } - putchar (':'); /* End of field 15. */ + es_putc (':', es_stdout); /* End of field 15. */ } - putchar ('\n'); + es_putc ('\n', es_stdout); print_revokers (pk); if (fpr) @@ -1147,11 +1144,11 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) */ str = uid->attrib_data ? "uat" : "uid"; if (uid->is_revoked) - printf ("%s:r::::", str); + es_fprintf (es_stdout, "%s:r::::", str); else if (uid->is_expired) - printf ("%s:e::::", str); + es_fprintf (es_stdout, "%s:e::::", str); else if (opt.no_expensive_trust_checks) - printf ("%s:::::", str); + es_fprintf (es_stdout, "%s:::::", str); else { int uid_validity; @@ -1160,25 +1157,25 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) uid_validity = get_validity_info (pk, uid); else uid_validity = 'u'; - printf ("%s:%c::::", str, uid_validity); + es_fprintf (es_stdout, "%s:%c::::", str, uid_validity); } - printf ("%s:", colon_strtime (uid->created)); - printf ("%s:", colon_strtime (uid->expiredate)); + es_fprintf (es_stdout, "%s:", colon_strtime (uid->created)); + es_fprintf (es_stdout, "%s:", colon_strtime (uid->expiredate)); namehash_from_uid (uid); for (i = 0; i < 20; i++) - printf ("%02X", uid->namehash[i]); + es_fprintf (es_stdout, "%02X", uid->namehash[i]); - printf ("::"); + es_fprintf (es_stdout, "::"); if (uid->attrib_data) - printf ("%u %lu", uid->numattribs, uid->attrib_len); + es_fprintf (es_stdout, "%u %lu", uid->numattribs, uid->attrib_len); else - print_string (stdout, uid->name, uid->len, ':'); - putchar (':'); - putchar ('\n'); + es_write_sanitized (es_stdout, uid->name, uid->len, ":", NULL); + es_putc (':', es_stdout); + es_putc ('\n', es_stdout); } else if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) { @@ -1186,22 +1183,22 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) PKT_public_key *pk2 = node->pkt->pkt.public_key; keyid_from_pk (pk2, keyid2); - fputs (secret? "ssb:":"sub:", stdout); + es_fputs (secret? "ssb:":"sub:", es_stdout); if (!pk2->is_valid) - putchar ('i'); + es_putc ('i', es_stdout); else if (pk2->is_revoked) - putchar ('r'); + es_putc ('r', es_stdout); else if (pk2->has_expired) - putchar ('e'); + es_putc ('e', es_stdout); else if (opt.fast_list_mode || opt.no_expensive_trust_checks) ; else { /* TRUSTLETTER should always be defined here. */ if (trustletter) - printf ("%c", trustletter); + es_fprintf (es_stdout, "%c", trustletter); } - printf (":%u:%d:%08lX%08lX:%s:%s:::::", + es_fprintf (es_stdout, ":%u:%d:%08lX%08lX:%s:%s:::::", nbits_from_pk (pk2), pk2->pubkey_algo, (ulong) keyid2[0], (ulong) keyid2[1], @@ -1211,21 +1208,21 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) print_capabilities (pk2, NULL); if (secret) { - putchar (':'); /* End of field 13. */ - putchar (':'); /* End of field 14. */ + es_putc (':', es_stdout); /* End of field 13. */ + es_putc (':', es_stdout); /* End of field 14. */ if (/*FIXME:sk2->protect.s2k.mode*/1 == 1001) - putchar ('#'); /* Key is just a stub. */ + es_putc ('#', es_stdout); /* Key is just a stub. */ else if (/*FIXME: sk2->protect.s2k.mode*/1 == 1002) { /* Key is stored on an external token (card) or handled by the gpg-agent. Print the serial number of that token here. */ /* FIXME: for (i = 0; i < sk2->protect.ivlen; i++) - printf ("%02X", sk2->protect.iv[i]); */ + es_fprintf (es_stdout, "%02X", sk2->protect.iv[i]); */ } - putchar (':'); /* End of field 15. */ + es_putc (':', es_stdout); /* End of field 15. */ } - putchar ('\n'); + es_putc ('\n', es_stdout); if (fpr > 1) print_fingerprint (pk2, NULL, 0); if (opt.with_key_data) @@ -1250,7 +1247,7 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) sigstr = "sig"; else { - printf ("sig::::::::::%02x%c:\n", + es_fprintf (es_stdout, "sig::::::::::%02x%c:\n", sig->sig_class, sig->flags.exportable ? 'x' : 'l'); continue; } @@ -1297,49 +1294,49 @@ list_keyblock_colon (KBNODE keyblock, int secret, int fpr) rc = 0; sigrc = ' '; } - fputs (sigstr, stdout); - putchar (':'); + es_fputs (sigstr, es_stdout); + es_putc (':', es_stdout); if (sigrc != ' ') - putchar (sigrc); - printf ("::%d:%08lX%08lX:%s:%s:", sig->pubkey_algo, + es_putc (sigrc, es_stdout); + es_fprintf (es_stdout, "::%d:%08lX%08lX:%s:%s:", sig->pubkey_algo, (ulong) sig->keyid[0], (ulong) sig->keyid[1], colon_datestr_from_sig (sig), colon_expirestr_from_sig (sig)); if (sig->trust_depth || sig->trust_value) - printf ("%d %d", sig->trust_depth, sig->trust_value); - printf (":"); + es_fprintf (es_stdout, "%d %d", sig->trust_depth, sig->trust_value); + es_fprintf (es_stdout, ":"); if (sig->trust_regexp) - print_string (stdout, sig->trust_regexp, - strlen (sig->trust_regexp), ':'); - printf (":"); + es_write_sanitized (es_stdout, sig->trust_regexp, + strlen (sig->trust_regexp), ":", NULL); + es_fprintf (es_stdout, ":"); if (sigrc == '%') - printf ("[%s] ", g10_errstr (rc)); + es_fprintf (es_stdout, "[%s] ", g10_errstr (rc)); else if (sigrc == '?') ; else if (!opt.fast_list_mode) { size_t n; char *p = get_user_id (sig->keyid, &n); - print_string (stdout, p, n, ':'); + es_write_sanitized (es_stdout, p, n, ":", NULL); xfree (p); } - printf (":%02x%c:", sig->sig_class, + es_fprintf (es_stdout, ":%02x%c:", sig->sig_class, sig->flags.exportable ? 'x' : 'l'); if (opt.no_sig_cache && opt.check_sigs && fprokay) { - putchar (':'); + es_putc (':', es_stdout); for (i = 0; i < fplen; i++) - printf ("%02X", fparray[i]); + es_fprintf (es_stdout, "%02X", fparray[i]); - putchar (':'); + es_putc (':', es_stdout); } - printf ("\n"); + es_fprintf (es_stdout, "\n"); if (opt.show_subpackets) print_subpackets_colon (sig); @@ -1428,7 +1425,7 @@ print_fingerprint (PKT_public_key * pk, PKT_secret_key * sk, int mode) { byte array[MAX_FINGERPRINT_LEN], *p; size_t i, n; - FILE *fp; + estream_t fp; const char *text; int primary = 0; @@ -1497,7 +1494,7 @@ print_fingerprint (PKT_public_key * pk, PKT_secret_key * sk, int mode) } else { - fp = stdout; + fp = es_stdout; text = _(" Key fingerprint ="); } @@ -1508,58 +1505,26 @@ print_fingerprint (PKT_public_key * pk, PKT_secret_key * sk, int mode) p = array; if (opt.with_colons && !mode) { - fprintf (fp, "fpr:::::::::"); + es_fprintf (fp, "fpr:::::::::"); for (i = 0; i < n; i++, p++) - fprintf (fp, "%02X", *p); - putc (':', fp); + es_fprintf (fp, "%02X", *p); + es_putc (':', fp); } else { - if (fp) - fputs (text, fp); - else - tty_printf ("%s", text); + tty_fprintf (fp, "%s", text); if (n == 20) { for (i = 0; i < n; i++, i++, p += 2) - { - if (fp) - { - if (i == 10) - putc (' ', fp); - fprintf (fp, " %02X%02X", *p, p[1]); - } - else - { - if (i == 10) - tty_printf (" "); - tty_printf (" %02X%02X", *p, p[1]); - } - } + tty_fprintf (fp, "%s %02X%02X", i==10? " ":"", *p, p[1]); } else { for (i = 0; i < n; i++, p++) - { - if (fp) - { - if (i && !(i % 8)) - putc (' ', fp); - fprintf (fp, " %02X", *p); - } - else - { - if (i && !(i % 8)) - tty_printf (" "); - tty_printf (" %02X", *p); - } - } + tty_fprintf (fp, "%s %02X", (i && !(i % 8))? " ":"", *p); } } - if (fp) - putc ('\n', fp); - else - tty_printf ("\n"); + tty_fprintf (fp, "\n"); } /* Print the serial number of an OpenPGP card if available. */ @@ -1575,8 +1540,8 @@ print_card_serialno (PKT_secret_key * sk) if (opt.with_colons) return; /* Handled elsewhere. */ - fputs (_(" Card serial no. ="), stdout); - putchar (' '); + es_fputs (_(" Card serial no. ="), es_stdout); + es_putc (' ', es_stdout); if (sk->protect.ivlen == 16 && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6)) { @@ -1584,17 +1549,17 @@ print_card_serialno (PKT_secret_key * sk) for (i = 8; i < 14; i++) { if (i == 10) - putchar (' '); - printf ("%02X", sk->protect.iv[i]); + es_putc (' ', es_stdout); + es_fprintf (es_stdout, "%02X", sk->protect.iv[i]); } } else { /* Something is wrong: Print all. */ for (i = 0; i < sk->protect.ivlen; i++) - printf ("%02X", sk->protect.iv[i]); + es_fprintf (es_stdout, "%02X", sk->protect.iv[i]); } - putchar ('\n'); + es_putc ('\n', es_stdout); } @@ -1607,9 +1572,9 @@ set_attrib_fd (int fd) if (fd != -1 && last_fd == fd) return; - if (attrib_fp && attrib_fp != stdout && attrib_fp != stderr - && attrib_fp != log_get_stream ()) - fclose (attrib_fp); + /* Fixme: Do we need to check for the log stream here? */ + if (attrib_fp && attrib_fp != log_get_stream ()) + es_fclose (attrib_fp); attrib_fp = NULL; if (fd == -1) return; @@ -1618,11 +1583,11 @@ set_attrib_fd (int fd) setmode (fd, O_BINARY); #endif if (fd == 1) - attrib_fp = stdout; + attrib_fp = es_stdout; else if (fd == 2) - attrib_fp = stderr; + attrib_fp = es_stderr; else - attrib_fp = fdopen (fd, "wb"); + attrib_fp = es_fdopen (fd, "wb"); if (!attrib_fp) { log_fatal ("can't open fd %d for attribute output: %s\n", diff --git a/g10/main.h b/g10/main.h index ec09124bd..8ce422f2c 100644 --- a/g10/main.h +++ b/g10/main.h @@ -149,7 +149,7 @@ int pubkey_get_nskey( int algo ); int pubkey_get_nsig( int algo ); int pubkey_get_nenc( int algo ); unsigned int pubkey_nbits( int algo, gcry_mpi_t *pkey ); -int mpi_print( FILE *fp, gcry_mpi_t a, int mode ); +int mpi_print (estream_t stream, gcry_mpi_t a, int mode); /*-- status.c --*/ void set_status_fd ( int fd ); @@ -308,8 +308,8 @@ void show_notation(PKT_signature *sig,int indent,int mode,int which); void dump_attribs (const PKT_user_id *uid, PKT_public_key *pk); void set_attrib_fd(int fd); void print_seckey_info (PKT_public_key *pk); -void print_pubkey_info (FILE *fp, PKT_public_key *pk); -void print_card_key_info (FILE *fp, KBNODE keyblock); +void print_pubkey_info (estream_t fp, PKT_public_key *pk); +void print_card_key_info (estream_t fp, KBNODE keyblock); /*-- verify.c --*/ void print_file_status( int status, const char *name, int what ); @@ -341,7 +341,7 @@ int gpg_server (ctrl_t); #ifdef ENABLE_CARD_SUPPORT /*-- card-util.c --*/ void change_pin (int no, int allow_admin); -void card_status (FILE *fp, char *serialno, size_t serialnobuflen); +void card_status (estream_t fp, char *serialno, size_t serialnobuflen); void card_edit (strlist_t commands); int card_generate_subkey (KBNODE pub_keyblock, KBNODE sec_keyblock); int card_store_subkey (KBNODE node, int use); diff --git a/g10/mainproc.c b/g10/mainproc.c index 5d568474b..a61325aba 100644 --- a/g10/mainproc.c +++ b/g10/mainproc.c @@ -892,12 +892,12 @@ print_userid( PACKET *pkt ) pkt->pkt.user_id->numattribs, pkt->pkt.user_id->attrib_len); else - print_string( stdout, pkt->pkt.user_id->name, - pkt->pkt.user_id->len, ':'); + es_write_sanitized (es_stdout, pkt->pkt.user_id->name, + pkt->pkt.user_id->len, ":", NULL); } else - print_utf8_string( stdout, pkt->pkt.user_id->name, - pkt->pkt.user_id->len ); + print_utf8_buffer (es_stdout, pkt->pkt.user_id->name, + pkt->pkt.user_id->len ); } @@ -1135,8 +1135,8 @@ list_node( CTX c, KBNODE node ) printf(":"); if(sig->trust_regexp) - print_string(stdout,sig->trust_regexp, - strlen(sig->trust_regexp),':'); + es_write_sanitized (es_stdout,sig->trust_regexp, + strlen(sig->trust_regexp), ":", NULL); printf(":"); } else @@ -1155,7 +1155,8 @@ list_node( CTX c, KBNODE node ) } else if( !opt.fast_list_mode ) { p = get_user_id( sig->keyid, &n ); - print_string( stdout, p, n, opt.with_colons ); + es_write_sanitized (es_stdout, p, n, + opt.with_colons?":":NULL, NULL ); xfree(p); } if( opt.with_colons ) @@ -1633,7 +1634,7 @@ check_sig_and_print( CTX c, KBNODE node ) page, but "from" if it is located on a keyserver. I'm not going to even try to make two strings here :) */ log_info(_("Key available at: ") ); - print_utf8_string( log_get_stream(), p, n ); + print_utf8_buffer (log_get_stream(), p, n); log_printf ("\n"); if(opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE diff --git a/g10/misc.c b/g10/misc.c index f34e1e36d..5e0ba9449 100644 --- a/g10/misc.c +++ b/g10/misc.c @@ -1394,26 +1394,28 @@ pubkey_nbits( int algo, gcry_mpi_t *key ) /* FIXME: Use gcry_mpi_print directly. */ int -mpi_print( FILE *fp, gcry_mpi_t a, int mode ) +mpi_print (estream_t fp, gcry_mpi_t a, int mode) { - int n=0; - - if( !a ) - return fprintf(fp, "[MPI_NULL]"); - if( !mode ) { - unsigned int n1; - n1 = gcry_mpi_get_nbits(a); - n += fprintf(fp, "[%u bits]", n1); + int n=0; + + if (!a) + return es_fprintf (fp, "[MPI_NULL]"); + if (!mode) + { + unsigned int n1; + n1 = gcry_mpi_get_nbits(a); + n += es_fprintf (fp, "[%u bits]", n1); } - else { - unsigned char *buffer; - - if (gcry_mpi_aprint (GCRYMPI_FMT_HEX, &buffer, NULL, a)) - BUG (); - fputs( buffer, fp ); - n += strlen(buffer); - gcry_free( buffer ); + else + { + unsigned char *buffer; + + if (gcry_mpi_aprint (GCRYMPI_FMT_HEX, &buffer, NULL, a)) + BUG (); + es_fputs (buffer, fp); + n += strlen (buffer); + gcry_free (buffer); } - return n; + return n; } diff --git a/g10/parse-packet.c b/g10/parse-packet.c index e2a5ea39d..2065c22ef 100644 --- a/g10/parse-packet.c +++ b/g10/parse-packet.c @@ -1,6 +1,6 @@ /* parse-packet.c - read packets * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - * 2007, 2009 Free Software Foundation, Inc. + * 2007, 2009, 2010 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -37,7 +37,7 @@ static int mpi_print_mode; static int list_mode; -static FILE *listfp; +static estream_t listfp; static int parse (IOBUF inp, PACKET * pkt, int onlykeypkts, off_t * retpos, int *skip, IOBUF out, int do_skip @@ -169,7 +169,7 @@ set_packet_list_mode (int mode) list_mode = mode; /* FIXME(gcrypt) 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 + but switch to stderr in all other 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 @@ -180,11 +180,11 @@ set_packet_list_mode (int mode) 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 + logging code but it is a special thing anyway. 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; + listfp = opt.list_packets == 2 ? es_stdout : es_stderr; return old; } @@ -639,14 +639,14 @@ dump_hex_line (int c, int *i) if (*i && !(*i % 8)) { if (*i && !(*i % 24)) - fprintf (listfp, "\n%4d:", *i); + es_fprintf (listfp, "\n%4d:", *i); else - putc (' ', listfp); + es_putc (' ', listfp); } if (c == -1) - fprintf (listfp, " EOF"); + es_fprintf (listfp, " EOF"); else - fprintf (listfp, " %02x", c); + es_fprintf (listfp, " %02x", c); ++*i; } @@ -694,12 +694,12 @@ skip_packet (IOBUF inp, int pkttype, unsigned long pktlen, int partial) { if (list_mode) { - fprintf (listfp, ":unknown packet: type %2d, length %lu\n", - pkttype, pktlen); + es_fprintf (listfp, ":unknown packet: type %2d, length %lu\n", + pkttype, pktlen); if (pkttype) { int c, i = 0; - fputs ("dump:", listfp); + es_fputs ("dump:", listfp); if (partial) { while ((c = iobuf_get (inp)) != -1) @@ -714,7 +714,7 @@ skip_packet (IOBUF inp, int pkttype, unsigned long pktlen, int partial) break; } } - putc ('\n', listfp); + es_putc ('\n', listfp); return; } } @@ -770,7 +770,7 @@ parse_marker (IOBUF inp, int pkttype, unsigned long pktlen) } if (list_mode) - fputs (":marker packet: PGP\n", listfp); + es_fputs (":marker packet: PGP\n", listfp); return 0; @@ -870,22 +870,21 @@ parse_symkeyenc (IOBUF inp, int pkttype, unsigned long pktlen, if (list_mode) { - fprintf (listfp, - ":symkey enc packet: version %d, cipher %d, s2k %d, hash %d", - version, cipher_algo, s2kmode, hash_algo); + es_fprintf (listfp, + ":symkey enc packet: version %d, cipher %d, s2k %d, hash %d", + version, cipher_algo, s2kmode, hash_algo); if (seskeylen) - fprintf (listfp, ", seskey %d bits", (seskeylen - 1) * 8); - fprintf (listfp, "\n"); + es_fprintf (listfp, ", seskey %d bits", (seskeylen - 1) * 8); + es_fprintf (listfp, "\n"); if (s2kmode == 1 || s2kmode == 3) { - fprintf (listfp, "\tsalt "); - for (i = 0; i < 8; i++) - fprintf (listfp, "%02x", k->s2k.salt[i]); + es_fprintf (listfp, "\tsalt "); + es_write_hexstring (listfp, k->s2k.salt, 8, 0, NULL); if (s2kmode == 3) - fprintf (listfp, ", count %lu (%lu)", - S2K_DECODE_COUNT ((ulong) k->s2k.count), - (ulong) k->s2k.count); - fprintf (listfp, "\n"); + es_fprintf (listfp, ", count %lu (%lu)", + S2K_DECODE_COUNT ((ulong) k->s2k.count), + (ulong) k->s2k.count); + es_fprintf (listfp, "\n"); } } @@ -927,16 +926,16 @@ parse_pubkeyenc (IOBUF inp, int pkttype, unsigned long pktlen, pktlen--; k->throw_keyid = 0; /* Only used as flag for build_packet. */ if (list_mode) - 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]); + es_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) - fprintf (listfp, "\tunsupported algorithm %d\n", k->pubkey_algo); + es_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. */ } @@ -949,9 +948,9 @@ parse_pubkeyenc (IOBUF inp, int pkttype, unsigned long pktlen, pktlen -= n; if (list_mode) { - fprintf (listfp, "\tdata: "); + es_fprintf (listfp, "\tdata: "); mpi_print (listfp, k->data[i], mpi_print_mode); - putc ('\n', listfp); + es_putc ('\n', listfp); } if (!k->data[i]) rc = gpg_error (GPG_ERR_INV_PACKET); @@ -976,98 +975,98 @@ dump_sig_subpkt (int hashed, int type, int critical, * and add an additional notice. */ if (type == SIGSUBPKT_ARR && !hashed) { - 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); + es_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--; - fprintf (listfp, "\t%s%ssubpkt %d len %u (", /*) */ - critical ? "critical " : "", - hashed ? "hashed " : "", type, (unsigned) length); + es_fprintf (listfp, "\t%s%ssubpkt %d len %u (", /*) */ + critical ? "critical " : "", + hashed ? "hashed " : "", type, (unsigned) length); if (length > buflen) { - fprintf (listfp, "too short: buffer is only %u)\n", (unsigned) buflen); + es_fprintf (listfp, "too short: buffer is only %u)\n", (unsigned) buflen); return; } switch (type) { case SIGSUBPKT_SIG_CREATED: if (length >= 4) - fprintf (listfp, "sig created %s", - strtimestamp (buffer_to_u32 (buffer))); + es_fprintf (listfp, "sig created %s", + strtimestamp (buffer_to_u32 (buffer))); break; case SIGSUBPKT_SIG_EXPIRE: if (length >= 4) { if (buffer_to_u32 (buffer)) - fprintf (listfp, "sig expires after %s", - strtimevalue (buffer_to_u32 (buffer))); + es_fprintf (listfp, "sig expires after %s", + strtimevalue (buffer_to_u32 (buffer))); else - fprintf (listfp, "sig does not expire"); + es_fprintf (listfp, "sig does not expire"); } break; case SIGSUBPKT_EXPORTABLE: if (length) - fprintf (listfp, "%sexportable", *buffer ? "" : "not "); + es_fprintf (listfp, "%sexportable", *buffer ? "" : "not "); break; case SIGSUBPKT_TRUST: if (length != 2) p = "[invalid trust subpacket]"; else - fprintf (listfp, "trust signature of depth %d, value %d", buffer[0], - buffer[1]); + es_fprintf (listfp, "trust signature of depth %d, value %d", buffer[0], + buffer[1]); break; case SIGSUBPKT_REGEXP: if (!length) p = "[invalid regexp subpacket]"; else - fprintf (listfp, "regular expression: \"%s\"", buffer); + es_fprintf (listfp, "regular expression: \"%s\"", buffer); break; case SIGSUBPKT_REVOCABLE: if (length) - fprintf (listfp, "%srevocable", *buffer ? "" : "not "); + es_fprintf (listfp, "%srevocable", *buffer ? "" : "not "); break; case SIGSUBPKT_KEY_EXPIRE: if (length >= 4) { if (buffer_to_u32 (buffer)) - fprintf (listfp, "key expires after %s", - strtimevalue (buffer_to_u32 (buffer))); + es_fprintf (listfp, "key expires after %s", + strtimevalue (buffer_to_u32 (buffer))); else - fprintf (listfp, "key does not expire"); + es_fprintf (listfp, "key does not expire"); } break; case SIGSUBPKT_PREF_SYM: - fputs ("pref-sym-algos:", listfp); + es_fputs ("pref-sym-algos:", listfp); for (i = 0; i < length; i++) - fprintf (listfp, " %d", buffer[i]); + es_fprintf (listfp, " %d", buffer[i]); break; case SIGSUBPKT_REV_KEY: - fputs ("revocation key: ", listfp); + es_fputs ("revocation key: ", listfp); if (length < 22) p = "[too short]"; else { - fprintf (listfp, "c=%02x a=%d f=", buffer[0], buffer[1]); + es_fprintf (listfp, "c=%02x a=%d f=", buffer[0], buffer[1]); for (i = 2; i < length; i++) - fprintf (listfp, "%02X", buffer[i]); + es_fprintf (listfp, "%02X", buffer[i]); } break; case SIGSUBPKT_ISSUER: if (length >= 8) - fprintf (listfp, "issuer key ID %08lX%08lX", - (ulong) buffer_to_u32 (buffer), - (ulong) buffer_to_u32 (buffer + 4)); + es_fprintf (listfp, "issuer key ID %08lX%08lX", + (ulong) buffer_to_u32 (buffer), + (ulong) buffer_to_u32 (buffer + 4)); break; case SIGSUBPKT_NOTATION: { - fputs ("notation: ", listfp); + es_fputs ("notation: ", listfp); if (length < 8) p = "[too short]"; else @@ -1082,11 +1081,11 @@ dump_sig_subpkt (int hashed, int type, int critical, p = "[error]"; else { - print_string (listfp, s, n1, ')'); - putc ('=', listfp); + es_write_sanitized (listfp, s, n1, ")", NULL); + es_putc ('=', listfp); if (*buffer & 0x80) - print_string (listfp, s + n1, n2, ')'); + es_write_sanitized (listfp, s + n1, n2, ")", NULL); else p = "[not human readable]"; } @@ -1094,35 +1093,35 @@ dump_sig_subpkt (int hashed, int type, int critical, } break; case SIGSUBPKT_PREF_HASH: - fputs ("pref-hash-algos:", listfp); + es_fputs ("pref-hash-algos:", listfp); for (i = 0; i < length; i++) - fprintf (listfp, " %d", buffer[i]); + es_fprintf (listfp, " %d", buffer[i]); break; case SIGSUBPKT_PREF_COMPR: - fputs ("pref-zip-algos:", listfp); + es_fputs ("pref-zip-algos:", listfp); for (i = 0; i < length; i++) - fprintf (listfp, " %d", buffer[i]); + es_fprintf (listfp, " %d", buffer[i]); break; case SIGSUBPKT_KS_FLAGS: - fputs ("key server preferences:", listfp); + es_fputs ("key server preferences:", listfp); for (i = 0; i < length; i++) - fprintf (listfp, " %02X", buffer[i]); + es_fprintf (listfp, " %02X", buffer[i]); break; case SIGSUBPKT_PREF_KS: - fputs ("preferred key server: ", listfp); - print_string (listfp, buffer, length, ')'); + es_fputs ("preferred key server: ", listfp); + es_write_sanitized (listfp, buffer, length, ")", NULL); break; case SIGSUBPKT_PRIMARY_UID: p = "primary user ID"; break; case SIGSUBPKT_POLICY: - fputs ("policy: ", listfp); - print_string (listfp, buffer, length, ')'); + es_fputs ("policy: ", listfp); + es_write_sanitized (listfp, buffer, length, ")", NULL); break; case SIGSUBPKT_KEY_FLAGS: - fputs ("key flags:", listfp); + es_fputs ("key flags:", listfp); for (i = 0; i < length; i++) - fprintf (listfp, " %02X", buffer[i]); + es_fprintf (listfp, " %02X", buffer[i]); break; case SIGSUBPKT_SIGNERS_UID: p = "signer's user ID"; @@ -1130,37 +1129,37 @@ dump_sig_subpkt (int hashed, int type, int critical, case SIGSUBPKT_REVOC_REASON: if (length) { - fprintf (listfp, "revocation reason 0x%02x (", *buffer); - print_string (listfp, buffer + 1, length - 1, ')'); + es_fprintf (listfp, "revocation reason 0x%02x (", *buffer); + es_write_sanitized (listfp, buffer + 1, length - 1, ")", NULL); p = ")"; } break; case SIGSUBPKT_ARR: - fputs ("Big Brother's key (ignored): ", listfp); + es_fputs ("Big Brother's key (ignored): ", listfp); if (length < 22) p = "[too short]"; else { - fprintf (listfp, "c=%02x a=%d f=", buffer[0], buffer[1]); - for (i = 2; i < length; i++) - fprintf (listfp, "%02X", buffer[i]); + es_fprintf (listfp, "c=%02x a=%d f=", buffer[0], buffer[1]); + if (length > 2) + es_write_hexstring (listfp, buffer+2, length-2, 0, NULL); } break; case SIGSUBPKT_FEATURES: - fputs ("features:", listfp); + es_fputs ("features:", listfp); for (i = 0; i < length; i++) - fprintf (listfp, " %02x", buffer[i]); + es_fprintf (listfp, " %02x", buffer[i]); break; case SIGSUBPKT_SIGNATURE: - fputs ("signature: ", listfp); + es_fputs ("signature: ", listfp); if (length < 17) p = "[too short]"; else - 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], - buffer[0] == 3 ? buffer[16] : buffer[3]); + es_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], + buffer[0] == 3 ? buffer[16] : buffer[3]); break; default: if (type >= 100 && type <= 110) @@ -1170,7 +1169,7 @@ dump_sig_subpkt (int hashed, int type, int critical, break; } - fprintf (listfp, "%s)\n", p ? p : ""); + es_fprintf (listfp, "%s)\n", p ? p : ""); } @@ -1654,13 +1653,13 @@ parse_signature (IOBUF inp, int pkttype, unsigned long pktlen, if (list_mode) { - fprintf (listfp, ":signature packet: algo %d, keyid %08lX%08lX\n" - "\tversion %d, created %lu, md5len %d, sigclass 0x%02x\n" - "\tdigest algo %d, begin of digest %02x %02x\n", - sig->pubkey_algo, - (ulong) sig->keyid[0], (ulong) sig->keyid[1], - sig->version, (ulong) sig->timestamp, md5_len, sig->sig_class, - sig->digest_algo, sig->digest_start[0], sig->digest_start[1]); + es_fprintf (listfp, ":signature packet: algo %d, keyid %08lX%08lX\n" + "\tversion %d, created %lu, md5len %d, sigclass 0x%02x\n" + "\tdigest algo %d, begin of digest %02x %02x\n", + sig->pubkey_algo, + (ulong) sig->keyid[0], (ulong) sig->keyid[1], + sig->version, (ulong) sig->timestamp, md5_len, sig->sig_class, + sig->digest_algo, sig->digest_start[0], sig->digest_start[1]); if (is_v4) { parse_sig_subpkt (sig->hashed, SIGSUBPKT_LIST_HASHED, NULL); @@ -1672,7 +1671,7 @@ parse_signature (IOBUF inp, int pkttype, unsigned long pktlen, if (!ndata) { if (list_mode) - fprintf (listfp, "\tunknown algorithm %d\n", sig->pubkey_algo); + es_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 @@ -1701,9 +1700,9 @@ parse_signature (IOBUF inp, int pkttype, unsigned long pktlen, pktlen -= n; if (list_mode) { - fprintf (listfp, "\tdata: "); + es_fprintf (listfp, "\tdata: "); mpi_print (listfp, sig->data[i], mpi_print_mode); - putc ('\n', listfp); + es_putc ('\n', listfp); } if (!sig->data[i]) rc = G10ERR_INVALID_PACKET; @@ -1750,13 +1749,13 @@ parse_onepass_sig (IOBUF inp, int pkttype, unsigned long pktlen, ops->last = iobuf_get_noeof (inp); pktlen--; if (list_mode) - fprintf (listfp, - ":onepass_sig packet: keyid %08lX%08lX\n" - "\tversion %d, sigclass 0x%02x, digest %d, pubkey %d, " - "last=%d\n", - (ulong) ops->keyid[0], (ulong) ops->keyid[1], - version, ops->sig_class, - ops->digest_algo, ops->pubkey_algo, ops->last); + es_fprintf (listfp, + ":onepass_sig packet: keyid %08lX%08lX\n" + "\tversion %d, sigclass 0x%02x, digest %d, pubkey %d, " + "last=%d\n", + (ulong) ops->keyid[0], (ulong) ops->keyid[1], + version, ops->sig_class, + ops->digest_algo, ops->pubkey_algo, ops->last); leave: @@ -1834,17 +1833,17 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, * luckily all those comments are started by a hash. */ if (list_mode) { - fprintf (listfp, ":rfc1991 comment packet: \""); + es_fprintf (listfp, ":rfc1991 comment packet: \""); for (; pktlen; pktlen--) { int c; c = iobuf_get_noeof (inp); if (c >= ' ' && c <= 'z') - putc (c, listfp); + es_putc (c, listfp); else - fprintf (listfp, "\\x%02x", c); + es_fprintf (listfp, "\\x%02x", c); } - fprintf (listfp, "\"\n"); + es_fprintf (listfp, "\"\n"); } iobuf_skip_rest (inp, pktlen, 0); return 0; @@ -1887,13 +1886,13 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, algorithm = iobuf_get_noeof (inp); pktlen--; if (list_mode) - 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" : - pkttype == PKT_PUBLIC_SUBKEY ? "public sub" : - pkttype == PKT_SECRET_SUBKEY ? "secret sub" : "??", - version, algorithm, timestamp, expiredate); + es_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" : + pkttype == PKT_PUBLIC_SUBKEY ? "public sub" : + pkttype == PKT_SECRET_SUBKEY ? "secret sub" : "??", + version, algorithm, timestamp, expiredate); if (pkttype == PKT_SECRET_KEY || pkttype == PKT_SECRET_SUBKEY) { @@ -1932,7 +1931,7 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, if (!npkey) { if (list_mode) - fprintf (listfp, "\tunknown algorithm %d\n", algorithm); + es_fprintf (listfp, "\tunknown algorithm %d\n", algorithm); unknown_pubkey_warning (algorithm); } @@ -1958,9 +1957,9 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, pktlen -= n; if (list_mode) { - fprintf (listfp, "\tskey[%d]: ", i); + es_fprintf (listfp, "\tskey[%d]: ", i); mpi_print (listfp, sk->skey[i], mpi_print_mode); - putc ('\n', listfp); + es_putc ('\n', listfp); } if (!sk->skey[i]) rc = G10ERR_INVALID_PACKET; @@ -1999,8 +1998,8 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, if (i < 4 || memcmp (temp, "GNU", 3)) { if (list_mode) - fprintf (listfp, "\tunknown S2K %d\n", - sk->protect.s2k.mode); + es_fprintf (listfp, "\tunknown S2K %d\n", + sk->protect.s2k.mode); rc = G10ERR_INVALID_PACKET; goto leave; } @@ -2023,46 +2022,46 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, { case 0: if (list_mode) - fprintf (listfp, "\tsimple S2K"); + es_fprintf (listfp, "\tsimple S2K"); break; case 1: if (list_mode) - fprintf (listfp, "\tsalted S2K"); + es_fprintf (listfp, "\tsalted S2K"); break; case 3: if (list_mode) - fprintf (listfp, "\titer+salt S2K"); + es_fprintf (listfp, "\titer+salt S2K"); break; case 1001: if (list_mode) - fprintf (listfp, "\tgnu-dummy S2K"); + es_fprintf (listfp, "\tgnu-dummy S2K"); break; case 1002: if (list_mode) - fprintf (listfp, "\tgnu-divert-to-card S2K"); + es_fprintf (listfp, "\tgnu-divert-to-card S2K"); break; default: if (list_mode) - fprintf (listfp, "\tunknown %sS2K %d\n", - sk->protect.s2k.mode < 1000 ? "" : "GNU ", - sk->protect.s2k.mode); + es_fprintf (listfp, "\tunknown %sS2K %d\n", + sk->protect.s2k.mode < 1000 ? "" : "GNU ", + sk->protect.s2k.mode); rc = G10ERR_INVALID_PACKET; goto leave; } if (list_mode) { - fprintf (listfp, ", algo: %d,%s hash: %d", - sk->protect.algo, - sk->protect.sha1chk ? " SHA1 protection," - : " simple checksum,", sk->protect.s2k.hash_algo); + es_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) { - fprintf (listfp, ", salt: "); - for (i = 0; i < 8; i++) - fprintf (listfp, "%02x", sk->protect.s2k.salt[i]); + es_fprintf (listfp, ", salt: "); + es_write_hexstring (listfp, sk->protect.s2k.salt, 8, + 0, NULL); } - putc ('\n', listfp); + es_putc ('\n', listfp); } if (sk->protect.s2k.mode == 3) @@ -2075,8 +2074,8 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, sk->protect.s2k.count = iobuf_get (inp); pktlen--; if (list_mode) - fprintf (listfp, "\tprotect count: %lu\n", - (ulong) sk->protect.s2k.count); + es_fprintf (listfp, "\tprotect count: %lu\n", + (ulong) sk->protect.s2k.count); } else if (sk->protect.s2k.mode == 1002) { @@ -2103,8 +2102,8 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, sk->protect.s2k.mode = 0; sk->protect.s2k.hash_algo = DIGEST_ALGO_MD5; if (list_mode) - fprintf (listfp, "\tprotect algo: %d (hash algo: %d)\n", - sk->protect.algo, sk->protect.s2k.hash_algo); + es_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 @@ -2131,12 +2130,12 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, temp[i] = iobuf_get_noeof (inp); if (list_mode) { - fprintf (listfp, + es_fprintf (listfp, sk->protect.s2k.mode == 1002 ? "\tserial-number: " : "\tprotect IV: "); for (i = 0; i < sk->protect.ivlen; i++) - fprintf (listfp, " %02x", temp[i]); - putc ('\n', listfp); + es_fprintf (listfp, " %02x", temp[i]); + es_putc ('\n', listfp); } memcpy (sk->protect.iv, temp, sk->protect.ivlen); } @@ -2166,7 +2165,7 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, pktlen = 0; if (list_mode) { - fprintf (listfp, "\tencrypted stuff follows\n"); + es_fprintf (listfp, "\tencrypted stuff follows\n"); } } else /* The v3 method: The mpi length is not encrypted. */ @@ -2177,7 +2176,7 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, { sk->skey[i] = read_protected_v3_mpi (inp, &pktlen); if (list_mode) - fprintf (listfp, "\tskey[%d]: [encrypted]\n", i); + es_fprintf (listfp, "\tskey[%d]: [encrypted]\n", i); } else { @@ -2186,9 +2185,9 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, pktlen -= n; if (list_mode) { - fprintf (listfp, "\tskey[%d]: ", i); + es_fprintf (listfp, "\tskey[%d]: ", i); mpi_print (listfp, sk->skey[i], mpi_print_mode); - putc ('\n', listfp); + es_putc ('\n', listfp); } } @@ -2202,7 +2201,7 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, pktlen -= 2; if (list_mode) { - fprintf (listfp, "\tchecksum: %04hx\n", sk->csum); + es_fprintf (listfp, "\tchecksum: %04hx\n", sk->csum); } } @@ -2229,9 +2228,9 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, pktlen -= n; if (list_mode) { - fprintf (listfp, "\tpkey[%d]: ", i); + es_fprintf (listfp, "\tpkey[%d]: ", i); mpi_print (listfp, pk->pkey[i], mpi_print_mode); - putc ('\n', listfp); + es_putc ('\n', listfp); } if (!pk->pkey[i]) rc = G10ERR_INVALID_PACKET; @@ -2243,8 +2242,8 @@ parse_key (IOBUF inp, int pkttype, unsigned long pktlen, } if (list_mode) - fprintf (listfp, "\tkeyid: %08lX%08lX\n", - (ulong) keyid[0], (ulong) keyid[1]); + es_fprintf (listfp, "\tkeyid: %08lX%08lX\n", + (ulong) keyid[0], (ulong) keyid[1]); leave: iobuf_skip_rest (inp, pktlen, 0); @@ -2352,16 +2351,16 @@ parse_user_id (IOBUF inp, int pkttype, unsigned long pktlen, PACKET * packet) if (list_mode) { int n = packet->pkt.user_id->len; - fprintf (listfp, ":user ID packet: \""); - /* fixme: Hey why don't we replace this with print_string?? */ + es_fprintf (listfp, ":user ID packet: \""); + /* fixme: Hey why don't we replace this with es_write_sanitized?? */ for (p = packet->pkt.user_id->name; n; p++, n--) { if (*p >= ' ' && *p <= 'z') - putc (*p, listfp); + es_putc (*p, listfp); else - fprintf (listfp, "\\x%02x", *p); + es_fprintf (listfp, "\\x%02x", *p); } - fprintf (listfp, "\"\n"); + es_fprintf (listfp, "\"\n"); } return 0; } @@ -2429,7 +2428,7 @@ parse_attribute (IOBUF inp, int pkttype, unsigned long pktlen, if (list_mode) { - fprintf (listfp, ":attribute packet: %s\n", packet->pkt.user_id->name); + es_fprintf (listfp, ":attribute packet: %s\n", packet->pkt.user_id->name); } return 0; } @@ -2459,16 +2458,16 @@ parse_comment (IOBUF inp, int pkttype, unsigned long pktlen, PACKET * packet) if (list_mode) { int n = packet->pkt.comment->len; - fprintf (listfp, ":%scomment packet: \"", pkttype == PKT_OLD_COMMENT ? - "OpenPGP draft " : ""); + es_fprintf (listfp, ":%scomment packet: \"", pkttype == PKT_OLD_COMMENT ? + "OpenPGP draft " : ""); for (p = packet->pkt.comment->data; n; p++, n--) { if (*p >= ' ' && *p <= 'z') - putc (*p, listfp); + es_putc (*p, listfp); else - fprintf (listfp, "\\x%02x", *p); + es_fprintf (listfp, "\\x%02x", *p); } - fprintf (listfp, "\"\n"); + es_fprintf (listfp, "\"\n"); } return 0; } @@ -2498,14 +2497,14 @@ parse_trust (IOBUF inp, int pkttype, unsigned long pktlen, PACKET * pkt) pkt->pkt.ring_trust->sigcache = c; } if (list_mode) - fprintf (listfp, ":trust packet: flag=%02x sigcache=%02x\n", - pkt->pkt.ring_trust->trustval, - pkt->pkt.ring_trust->sigcache); + es_fprintf (listfp, ":trust packet: flag=%02x sigcache=%02x\n", + pkt->pkt.ring_trust->trustval, + pkt->pkt.ring_trust->sigcache); } else { if (list_mode) - fprintf (listfp, ":trust packet: empty\n"); + es_fprintf (listfp, ":trust packet: empty\n"); } iobuf_skip_rest (inp, pktlen, 0); } @@ -2562,22 +2561,22 @@ parse_plaintext (IOBUF inp, int pkttype, unsigned long pktlen, if (list_mode) { - fprintf (listfp, ":literal data packet:\n" - "\tmode %c (%X), created %lu, name=\"", - mode >= ' ' && mode < 'z' ? mode : '?', mode, - (ulong) pt->timestamp); + es_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') - putc (*p, listfp); + es_putc (*p, listfp); else - fprintf (listfp, "\\x%02x", *p); + es_fprintf (listfp, "\\x%02x", *p); } - fprintf (listfp, "\",\n\traw data: "); + es_fprintf (listfp, "\",\n\traw data: "); if (partial) - fprintf (listfp, "unknown length\n"); + es_fprintf (listfp, "unknown length\n"); else - fprintf (listfp, "%lu bytes\n", (ulong) pt->len); + es_fprintf (listfp, "%lu bytes\n", (ulong) pt->len); } leave: @@ -2603,7 +2602,7 @@ parse_compressed (IOBUF inp, int pkttype, unsigned long pktlen, zd->new_ctb = new_ctb; zd->buf = inp; if (list_mode) - fprintf (listfp, ":compressed packet: algo=%d\n", zd->algorithm); + es_fprintf (listfp, ":compressed packet: algo=%d\n", zd->algorithm); return 0; } @@ -2663,12 +2662,12 @@ parse_encrypted (IOBUF inp, int pkttype, unsigned long pktlen, if (list_mode) { if (orig_pktlen) - fprintf (listfp, ":encrypted data packet:\n\tlength: %lu\n", - orig_pktlen); + es_fprintf (listfp, ":encrypted data packet:\n\tlength: %lu\n", + orig_pktlen); else - fprintf (listfp, ":encrypted data packet:\n\tlength: unknown\n"); + es_fprintf (listfp, ":encrypted data packet:\n\tlength: unknown\n"); if (ed->mdc_method) - fprintf (listfp, "\tmdc_method: %d\n", ed->mdc_method); + es_fprintf (listfp, "\tmdc_method: %d\n", ed->mdc_method); } ed->buf = inp; @@ -2693,7 +2692,7 @@ parse_mdc (IOBUF inp, int pkttype, unsigned long pktlen, mdc = pkt->pkt.mdc = xmalloc (sizeof *pkt->pkt.mdc); if (list_mode) - fprintf (listfp, ":mdc packet: length=%lu\n", pktlen); + es_fprintf (listfp, ":mdc packet: length=%lu\n", pktlen); if (!new_ctb || pktlen != 20) { log_error ("mdc_packet with invalid encoding\n"); @@ -2732,7 +2731,7 @@ parse_gpg_control (IOBUF inp, int pkttype, unsigned long pktlen, (void) pkttype; if (list_mode) - fprintf (listfp, ":packet 63: length %lu ", pktlen); + es_fprintf (listfp, ":packet 63: length %lu ", pktlen); sesmark = get_session_marker (&sesmarklen); if (pktlen < sesmarklen + 1) /* 1 is for the control bytes */ @@ -2765,7 +2764,7 @@ parse_gpg_control (IOBUF inp, int pkttype, unsigned long pktlen, int c; i = 0; - fprintf (listfp, "- private (rest length %lu)\n", pktlen); + es_fprintf (listfp, "- private (rest length %lu)\n", pktlen); if (partial) { while ((c = iobuf_get (inp)) != -1) @@ -2780,7 +2779,7 @@ parse_gpg_control (IOBUF inp, int pkttype, unsigned long pktlen, break; } } - putc ('\n', listfp); + es_putc ('\n', listfp); } iobuf_skip_rest (inp, pktlen, 0); return gpg_error (GPG_ERR_INV_PACKET); diff --git a/g10/pkclist.c b/g10/pkclist.c index cbc76c76d..ca5624a4b 100644 --- a/g10/pkclist.c +++ b/g10/pkclist.c @@ -81,12 +81,11 @@ do_show_revocation_reason( PKT_signature *sig ) else text = NULL; - log_info( _("reason for revocation: ") ); - if( text ) - fputs( text, log_get_stream() ); + log_info ( _("reason for revocation: ")); + if (text) + log_printf ("%s\n", text); else - fprintf( log_get_stream(), "code=%02x", *p ); - log_printf ("\n"); + log_printf ("code=%02x\n", *p ); n--; p++; pp = NULL; do { @@ -99,7 +98,7 @@ do_show_revocation_reason( PKT_signature *sig ) pp = memchr( p, '\n', n ); nn = pp? pp - p : n; log_info ( _("revocation comment: ") ); - print_string ( log_get_stream(), p, nn, 0 ); + es_write_sanitized (log_get_stream(), p, nn, NULL, NULL); log_printf ("\n"); p += nn; n -= nn; } diff --git a/g10/plaintext.c b/g10/plaintext.c index ee0d41357..0a7415c9e 100644 --- a/g10/plaintext.c +++ b/g10/plaintext.c @@ -689,7 +689,8 @@ setup_plaintext_name (const char *filename, IOBUF iobuf) { PKT_plaintext *pt; - if (filename || opt.set_filename) + if ((filename && !iobuf_is_pipe_filename (filename)) + || (opt.set_filename && !iobuf_is_pipe_filename (opt.set_filename))) { char *s; diff --git a/g10/seckey-cert.c b/g10/seckey-cert.c index 1398b181b..9995aa416 100644 --- a/g10/seckey-cert.c +++ b/g10/seckey-cert.c @@ -83,7 +83,7 @@ do_check( PKT_secret_key *sk, const char *tryagain_text, int mode, &sk->protect.s2k, mode, tryagain_text, canceled ); if (!dek && canceled && *canceled) - return G10ERR_GENERAL; + return GPG_ERR_CANCELED; err = openpgp_cipher_open (&cipher_hd, sk->protect.algo, diff --git a/g10/trustdb.c b/g10/trustdb.c index 2a1fc87bd..f1377aa1f 100644 --- a/g10/trustdb.c +++ b/g10/trustdb.c @@ -1376,7 +1376,8 @@ dump_key_array (int depth, struct key_array *keys) (node->flag & 4)? 'f': (node->flag & 2)? 'm': (node->flag & 1)? 'q':'-'); - print_string (stdout, node->pkt->pkt.user_id->name, len, ':'); + es_write_sanitized (es_stdout, node->pkt->pkt.user_id->name, + len, ":", NULL); putchar (':'); putchar ('\n'); } diff --git a/sm/ChangeLog b/sm/ChangeLog index ab25af8d4..c47aa464f 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,5 +1,7 @@ 2010-03-11 Werner Koch + * verify.c (gpgsm_verify): Use gpgsm_es_print_name. + * gpgsm.c: Include "asshelp.h". (main): Remove assuan_set_assuan_log_prefix. Add assuan_set_log_cb. diff --git a/sm/verify.c b/sm/verify.c index e7e9512f8..a2b07d884 100644 --- a/sm/verify.c +++ b/sm/verify.c @@ -595,7 +595,7 @@ gpgsm_verify (ctrl_t ctrl, int in_fd, int data_fd, estream_t out_fp) log_info (!i? _("Good signature from") : _(" aka")); log_printf (" \""); - gpgsm_print_name (log_get_stream (), p); + gpgsm_es_print_name (log_get_stream (), p); log_printf ("\"\n"); ksba_free (p); }