diff --git a/agent/ChangeLog b/agent/ChangeLog index a1093389b..d5e17ef81 100644 --- a/agent/ChangeLog +++ b/agent/ChangeLog @@ -1,3 +1,7 @@ +2010-08-16 Werner Koch + + * gpg-agent.c: Repalce remaining printf by es_printf. + 2010-08-11 Werner Koch * call-pinentry.c (agent_get_passphrase, agent_askpin): Fix diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index 35871ab9a..df5afad36 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -823,9 +823,9 @@ main (int argc, char **argv ) if (greeting) { - fprintf (stderr, "%s %s; %s\n", - strusage(11), strusage(13), strusage(14) ); - fprintf (stderr, "%s\n", strusage(15) ); + es_fprintf (es_stderr, "%s %s; %s\n", + strusage(11), strusage(13), strusage(14) ); + es_fprintf (es_stderr, "%s\n", strusage(15) ); } #ifdef IS_DEVELOPMENT_VERSION /* We don't want to print it here because gpg-agent is useful of its @@ -874,12 +874,12 @@ main (int argc, char **argv ) filename = make_filename (opt.homedir, "gpg-agent.conf", NULL ); filename_esc = percent_escape (filename, NULL); - printf ("gpgconf-gpg-agent.conf:%lu:\"%s\n", + es_printf ("gpgconf-gpg-agent.conf:%lu:\"%s\n", GC_OPT_FLAG_DEFAULT, filename_esc); xfree (filename); xfree (filename_esc); - printf ("verbose:%lu:\n" + es_printf ("verbose:%lu:\n" "quiet:%lu:\n" "debug-level:%lu:\"none:\n" "log-file:%lu:\n", @@ -887,35 +887,35 @@ main (int argc, char **argv ) GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME, GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME ); - printf ("default-cache-ttl:%lu:%d:\n", + es_printf ("default-cache-ttl:%lu:%d:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, DEFAULT_CACHE_TTL ); - printf ("default-cache-ttl-ssh:%lu:%d:\n", + es_printf ("default-cache-ttl-ssh:%lu:%d:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, DEFAULT_CACHE_TTL_SSH ); - printf ("max-cache-ttl:%lu:%d:\n", + es_printf ("max-cache-ttl:%lu:%d:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, MAX_CACHE_TTL ); - printf ("max-cache-ttl-ssh:%lu:%d:\n", + es_printf ("max-cache-ttl-ssh:%lu:%d:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, MAX_CACHE_TTL_SSH ); - printf ("enforce-passphrase-constraints:%lu:\n", + es_printf ("enforce-passphrase-constraints:%lu:\n", GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); - printf ("min-passphrase-len:%lu:%d:\n", + es_printf ("min-passphrase-len:%lu:%d:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, MIN_PASSPHRASE_LEN ); - printf ("min-passphrase-nonalpha:%lu:%d:\n", + es_printf ("min-passphrase-nonalpha:%lu:%d:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, MIN_PASSPHRASE_NONALPHA); - printf ("check-passphrase-pattern:%lu:\n", + es_printf ("check-passphrase-pattern:%lu:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME); - printf ("max-passphrase-days:%lu:%d:\n", + es_printf ("max-passphrase-days:%lu:%d:\n", GC_OPT_FLAG_DEFAULT|GC_OPT_FLAG_RUNTIME, MAX_PASSPHRASE_DAYS); - printf ("enable-passphrase-history:%lu:\n", + es_printf ("enable-passphrase-history:%lu:\n", GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); - printf ("no-grab:%lu:\n", + es_printf ("no-grab:%lu:\n", GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); - printf ("ignore-cache-for-signing:%lu:\n", + es_printf ("ignore-cache-for-signing:%lu:\n", GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); - printf ("allow-mark-trusted:%lu:\n", + es_printf ("allow-mark-trusted:%lu:\n", GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); - printf ("disable-scdaemon:%lu:\n", + es_printf ("disable-scdaemon:%lu:\n", GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME); agent_exit (0); @@ -1026,7 +1026,7 @@ main (int argc, char **argv ) fflush (NULL); #ifdef HAVE_W32_SYSTEM pid = getpid (); - printf ("set GPG_AGENT_INFO=%s;%lu;1\n", socket_name, (ulong)pid); + es_printf ("set GPG_AGENT_INFO=%s;%lu;1\n", socket_name, (ulong)pid); #else /*!HAVE_W32_SYSTEM*/ pid = fork (); if (pid == (pid_t)-1) @@ -1098,24 +1098,24 @@ main (int argc, char **argv ) if (env_file_name) { - FILE *fp; + estream_t fp; - fp = fopen (env_file_name, "w"); + fp = es_fopen (env_file_name, "w"); if (!fp) log_error (_("error creating `%s': %s\n"), env_file_name, strerror (errno)); else { - fputs (infostr, fp); - putc ('\n', fp); + es_fputs (infostr, fp); + es_putc ('\n', fp); if (opt.ssh_support) { - fputs (infostr_ssh_sock, fp); - putc ('\n', fp); - fputs (infostr_ssh_pid, fp); - putc ('\n', fp); + es_fputs (infostr_ssh_sock, fp); + es_putc ('\n', fp); + es_fputs (infostr_ssh_pid, fp); + es_putc ('\n', fp); } - fclose (fp); + es_fclose (fp); } } @@ -1163,22 +1163,24 @@ main (int argc, char **argv ) if (csh_style) { *strchr (infostr, '=') = ' '; - printf ("setenv %s\n", infostr); + es_printf ("setenv %s\n", infostr); if (opt.ssh_support) { *strchr (infostr_ssh_sock, '=') = ' '; - printf ("setenv %s\n", infostr_ssh_sock); + es_printf ("setenv %s\n", infostr_ssh_sock); *strchr (infostr_ssh_pid, '=') = ' '; - printf ("setenv %s\n", infostr_ssh_pid); + es_printf ("setenv %s\n", infostr_ssh_pid); } } else { - printf ( "%s; export GPG_AGENT_INFO;\n", infostr); + es_printf ( "%s; export GPG_AGENT_INFO;\n", infostr); if (opt.ssh_support) { - printf ("%s; export SSH_AUTH_SOCK;\n", infostr_ssh_sock); - printf ("%s; export SSH_AGENT_PID;\n", infostr_ssh_pid); + es_printf ("%s; export SSH_AUTH_SOCK;\n", + infostr_ssh_sock); + es_printf ("%s; export SSH_AGENT_PID;\n", + infostr_ssh_pid); } } xfree (infostr); diff --git a/common/ChangeLog b/common/ChangeLog index 070305370..f53a19293 100644 --- a/common/ChangeLog +++ b/common/ChangeLog @@ -1,5 +1,16 @@ +2010-08-18 Werner Koch + + * logging.c (writen): Add arg IS_SOCKET. + (fun_writer): Pass the is_socket flag. + (do_logv) [W32]: Allow for a default log stream + + * estream.c (struct estream_internal): Remove obsolete fields + PRINT_FP, PRINT_ERRNO, PRINT_ERR and all remaining code cruft. + 2010-08-16 Werner Koch + * estream.c (es_printf_unlocked, es_printf): New. + * asshelp.c (lock_agent_t): Rename to lock_spawn_t. (lock_agent_spawning, unlock_agent_spawning): Factor code out to ... (lock_spawning, unlock_spawning): .. new. diff --git a/common/estream.c b/common/estream.c index f3ba109ee..ea5d4d00f 100644 --- a/common/estream.c +++ b/common/estream.c @@ -218,7 +218,7 @@ struct estream_internal es_cookie_seek_function_t func_seek; es_cookie_close_function_t func_close; int strategy; - int fd; + int fd; /* Value to return by es_fileno(). */ struct { unsigned int err: 1; @@ -227,11 +227,8 @@ struct estream_internal 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. */ unsigned int printable_fname_inuse: 1; /* es_fname_get has been used. */ - int print_errno; /* Errno from print_fun_writer. */ - size_t print_ntotal; /* Bytes written from in print_fun_writer. */ - FILE *print_fp; /* Stdio stream used by print_fun_writer. */ + size_t print_ntotal; /* Bytes written from in print_writer. */ }; @@ -899,7 +896,8 @@ typedef struct estream_cookie_fp int no_close; /* If set we won't close the file pointer. */ } *estream_cookie_fp_t; -/* Create function for fd objects. */ + +/* Create function for FILE objects. */ static int es_func_fp_create (void **cookie, FILE *fp, unsigned int modeflags, int no_close) @@ -924,7 +922,7 @@ es_func_fp_create (void **cookie, FILE *fp, *cookie = fp_cookie; err = 0; } - + return err; } @@ -948,12 +946,10 @@ es_func_fp_read (void *cookie, void *buffer, size_t size) /* Write function for FILE* objects. */ static ssize_t es_func_fp_write (void *cookie, const void *buffer, size_t size) - { estream_cookie_fp_t file_cookie = cookie; size_t bytes_written; - if (file_cookie->fp) { #ifdef HAVE_W32_SYSTEM @@ -1285,10 +1281,7 @@ es_initialize (estream_t stream, stream->intern->func_close = functions.func_close; stream->intern->strategy = _IOFBF; stream->intern->fd = fd; - stream->intern->print_err = 0; - stream->intern->print_errno = 0; stream->intern->print_ntotal = 0; - stream->intern->print_fp = NULL; stream->intern->indicators.err = 0; stream->intern->indicators.eof = 0; stream->intern->is_stdstream = 0; @@ -1319,14 +1312,6 @@ es_deinitialize (estream_t stream) es_cookie_close_function_t func_close; int err, tmp_err; - if (stream->intern->print_fp) - { - int save_errno = errno; - fclose (stream->intern->print_fp); - stream->intern->print_fp = NULL; - _set_errno (save_errno); - } - func_close = stream->intern->func_close; err = 0; @@ -3205,6 +3190,38 @@ es_fprintf (estream_t ES__RESTRICT stream, return ret; } + +int +es_printf_unlocked (const char *ES__RESTRICT format, ...) +{ + int ret; + + va_list ap; + va_start (ap, format); + ret = es_print (es_stdout, format, ap); + va_end (ap); + + return ret; +} + + +int +es_printf (const char *ES__RESTRICT format, ...) +{ + int ret; + estream_t stream = es_stdout; + + va_list ap; + va_start (ap, format); + ESTREAM_LOCK (stream); + ret = es_print (stream, format, ap); + ESTREAM_UNLOCK (stream); + va_end (ap); + + return ret; +} + + /* A variant of asprintf. The function returns the allocated buffer or NULL on error; ERRNO is set in the error case. The caller should use es_free to release the buffer. This function actually diff --git a/common/estream.h b/common/estream.h index f7ef162f5..34ff5ce77 100644 --- a/common/estream.h +++ b/common/estream.h @@ -121,6 +121,8 @@ #define es_free _ESTREAM_PREFIX(es_free) #define es_fprintf _ESTREAM_PREFIX(es_fprintf) #define es_fprintf_unlocked _ESTREAM_PREFIX(es_fprintf_unlocked) +#define es_printf _ESTREAM_PREFIX(es_printf) +#define es_printf_unlocked _ESTREAM_PREFIX(es_printf_unlocked) #define es_vfprintf _ESTREAM_PREFIX(es_vfprint) #define es_vfprintf_unlocked _ESTREAM_PREFIX(es_vfprint_unlocked) #define es_setvbuf _ESTREAM_PREFIX(es_setvbuf) @@ -345,6 +347,11 @@ int es_fprintf_unlocked (estream_t ES__RESTRICT stream, const char *ES__RESTRICT format, ...) _ESTREAM_GCC_A_PRINTF(2,3); +int es_printf (const char *ES__RESTRICT format, ...) + _ESTREAM_GCC_A_PRINTF(1,2); +int es_printf_unlocked (const char *ES__RESTRICT format, ...) + _ESTREAM_GCC_A_PRINTF(1,2); + int es_vfprintf (estream_t ES__RESTRICT stream, const char *ES__RESTRICT format, va_list ap) _ESTREAM_GCC_A_PRINTF(2,0); diff --git a/common/logging.c b/common/logging.c index 87e335b07..4c2d61b1e 100644 --- a/common/logging.c +++ b/common/logging.c @@ -120,19 +120,24 @@ struct fun_cookie_s /* Write NBYTES of BUFFER to file descriptor FD. */ static int -writen (int fd, const void *buffer, size_t nbytes) +writen (int fd, const void *buffer, size_t nbytes, int is_socket) { const char *buf = buffer; size_t nleft = nbytes; int nwritten; +#ifndef HAVE_W32_SYSTEM + (void)is_socket; /* Not required. */ +#endif while (nleft > 0) { #ifdef HAVE_W32_SYSTEM - nwritten = send (fd, buf, nleft, 0); -#else - nwritten = write (fd, buf, nleft); + if (is_socket) + nwritten = send (fd, buf, nleft, 0); + else #endif + nwritten = write (fd, buf, nleft); + if (nwritten < 0 && errno == EINTR) continue; if (nwritten < 0) @@ -171,6 +176,9 @@ fun_writer (void *cookie_arg, const void *buffer, size_t size) { struct fun_cookie_s *cookie = cookie_arg; + /* FIXME: Use only estream with a callback for socket writing. This + avoids the ugly mix of fd and estream code. */ + /* Note that we always try to reconnect to the socket but print error messages only the first time an error occured. If RUNNING_DETACHED is set we don't fall back to stderr and even do @@ -345,7 +353,7 @@ fun_writer (void *cookie_arg, const void *buffer, size_t size) } log_socket = cookie->fd; - if (cookie->fd != -1 && !writen (cookie->fd, buffer, size)) + if (cookie->fd != -1 && !writen (cookie->fd, buffer, size, cookie->is_socket)) return (ssize_t)size; /* Okay. */ if (!running_detached && cookie->fd != -1 @@ -561,7 +569,16 @@ do_logv (int level, int ignore_arg_ptr, const char *fmt, va_list arg_ptr) { if (!logstream) { +#ifdef HAVE_W32_SYSTEM + char *tmp; + + tmp = read_w32_registry_string (NULL, "Software\\GNU\\GnuPG", + "DefaultLogFile"); + log_set_file (tmp); + jnlib_free (tmp); +#else log_set_file (NULL); /* Make sure a log stream has been set. */ +#endif assert (logstream); } diff --git a/common/logging.h b/common/logging.h index 91619179a..3ee4db6ef 100644 --- a/common/logging.h +++ b/common/logging.h @@ -24,6 +24,7 @@ #include #include "estream.h" #include "mischelp.h" +#include "w32help.h" /* Flag values for log_set_prefix. */ #define JNLIB_LOG_WITH_PREFIX 1 diff --git a/doc/ChangeLog b/doc/ChangeLog index 2b3c3d269..a61f54fe8 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2010-08-18 Werner Koch + + * tools.texi (watchgnupg): Add examples section. + 2010-06-10 Werner Koch * Makefile.am (gnupg_TEXINFOS): Add dirmngr.texi. diff --git a/doc/tools.texi b/doc/tools.texi index 998d68328..efb37e699 100644 --- a/doc/tools.texi +++ b/doc/tools.texi @@ -42,11 +42,12 @@ GnuPG comes with a couple of smaller tools: @end ifset @mansect description -Most of the main utilities are able to write their log files to a -Unix Domain socket if configured that way. @command{watchgnupg} is a simple -listener for such a socket. It ameliorates the output with a time -stamp and makes sure that long lines are not interspersed with log -output from other utilities. +Most of the main utilities are able to write their log files to a Unix +Domain socket if configured that way. @command{watchgnupg} is a simple +listener for such a socket. It ameliorates the output with a time stamp +and makes sure that long lines are not interspersed with log output from +other utilities. This tool is not available for Windows. + @noindent @command{watchgnupg} is commonly invoked as @@ -70,6 +71,10 @@ This starts it on the current terminal for listening on the socket @opindex force Delete an already existing socket file. +@item --tcp @var{n} +Instead of reading from a local socket, listen for connects on TCP port +@var{n}. + @item --verbose @opindex verbose Enable extra informational output. @@ -84,6 +89,41 @@ Display a brief help page and exit. @end table +@noindent +@mansect examples +@chapheading Examples + +@example +$ watchgnupg --force /home/foo/.gnupg/S.log +@end example + +This waits for connections on the local socket +@file{/home/foo/.gnupg/S.log} and shows all log entries. To make this +work the option @option{log-file} needs to be used with all modules +which logs are to be shown. The value for that option must be given +with a special prefix (e.g. in the conf file): + +@example +log-file socket:///home/foo/.gnupg/S.log +@end example + +For debugging purposes it is also possible to do remote logging. Take +care if you use this feature because the information is send in the +clear over the network. Use this syntax in the conf files: + +@example +log-file tcp://192.168.1.1:4711 +@end example + +You may use any port and not just 4711 as shown above; only IP addresses +are supported (v4 and v6) and no host names. You need to start +@command{watchgnupg} with the @option{tcp} option. Note that under +Windows the registry entry @var{HKCU\Software\GNU\GnuPG:DefaultLogFile} +can be used to change the default log output from @code{stderr} to +whatever is given by that entry. However the only useful entry is a TCP +name for remote debugging. + + @mansect see also @ifset isman @command{gpg}(1), diff --git a/g10/ChangeLog b/g10/ChangeLog index 4ec287bea..eb19158b0 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,9 @@ +2010-08-16 Werner Koch + + * gpg.c (list_config, gpgconf_list): Use es_printf. + (print_hex, print_hashline, print_algo_numbers) + (print_algo_names): Use es_printf. + 2010-07-20 Werner Koch * mainproc.c (print_pkenc_list): Write a STATUS_ERROR. Fixes diff --git a/g10/gpg.c b/g10/gpg.c index 909736dc3..01c307b7b 100644 --- a/g10/gpg.c +++ b/g10/gpg.c @@ -1449,8 +1449,8 @@ print_algo_numbers(int (*checker)(int)) if(first) first=0; else - printf(";"); - printf("%d",i); + es_printf (";"); + es_printf ("%d",i); } } } @@ -1468,8 +1468,8 @@ print_algo_names(int (*checker)(int),const char *(*mapper)(int)) if(first) first=0; else - printf(";"); - printf("%s",mapper(i)); + es_printf (";"); + es_printf ("%s",mapper(i)); } } } @@ -1508,10 +1508,10 @@ list_config(char *items) { print_sanitized_string2 (stdout, sl->d, ':',';'); if(sl->next) - printf(";"); + es_printf(";"); } - printf("\n"); + es_printf("\n"); } any=1; @@ -1519,33 +1519,33 @@ list_config(char *items) if(show_all || ascii_strcasecmp(name,"version")==0) { - printf("cfg:version:"); + es_printf("cfg:version:"); es_write_sanitized (es_stdout, VERSION, strlen(VERSION), ":", NULL); - printf("\n"); + es_printf ("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"pubkey")==0) { - printf("cfg:pubkey:"); + es_printf ("cfg:pubkey:"); print_algo_numbers (openpgp_pk_test_algo); - printf("\n"); + es_printf ("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"cipher")==0) { - printf("cfg:cipher:"); + es_printf ("cfg:cipher:"); print_algo_numbers(openpgp_cipher_test_algo); - printf("\n"); + es_printf ("\n"); any=1; } if (show_all || !ascii_strcasecmp (name,"ciphername")) { - printf ("cfg:ciphername:"); + es_printf ("cfg:ciphername:"); print_algo_names (openpgp_cipher_test_algo,openpgp_cipher_algo_name); - printf ("\n"); + es_printf ("\n"); any = 1; } @@ -1553,9 +1553,9 @@ list_config(char *items) || ascii_strcasecmp(name,"digest")==0 || ascii_strcasecmp(name,"hash")==0) { - printf("cfg:digest:"); + es_printf ("cfg:digest:"); print_algo_numbers(openpgp_md_test_algo); - printf("\n"); + es_printf ("\n"); any=1; } @@ -1563,17 +1563,17 @@ list_config(char *items) || !ascii_strcasecmp(name,"digestname") || !ascii_strcasecmp(name,"hashname")) { - printf ("cfg:digestname:"); + es_printf ("cfg:digestname:"); print_algo_names (openpgp_md_test_algo, gcry_md_algo_name); - printf("\n"); + es_printf ("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"compress")==0) { - printf("cfg:compress:"); + es_printf ("cfg:compress:"); print_algo_numbers(check_compress_algo); - printf("\n"); + es_printf ("\n"); any=1; } @@ -1587,7 +1587,7 @@ list_config(char *items) for (p=list; p && (p2 = strchr (p, '\n')); p = p2+1) { *p2 = 0; - printf("cfg:ccid-reader-id:%s\n", p); + es_printf ("cfg:ccid-reader-id:%s\n", p); } free (list); #endif @@ -1613,23 +1613,24 @@ gpgconf_list (const char *configfile) { char *configfile_esc = percent_escape (configfile, NULL); - printf ("gpgconf-gpg.conf:%lu:\"%s\n", - GC_OPT_FLAG_DEFAULT, configfile_esc ? configfile_esc : "/dev/null"); - printf ("verbose:%lu:\n", GC_OPT_FLAG_NONE); - printf ("quiet:%lu:\n", GC_OPT_FLAG_NONE); - printf ("keyserver:%lu:\n", GC_OPT_FLAG_NONE); - printf ("reader-port:%lu:\n", GC_OPT_FLAG_NONE); - printf ("default-key:%lu:\n", GC_OPT_FLAG_NONE); - printf ("encrypt-to:%lu:\n", GC_OPT_FLAG_NONE); - printf ("auto-key-locate:%lu:\n", GC_OPT_FLAG_NONE); - printf ("log-file:%lu:\n", GC_OPT_FLAG_NONE); - printf ("debug-level:%lu:\"none:\n", GC_OPT_FLAG_DEFAULT); - printf ("group:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("gpgconf-gpg.conf:%lu:\"%s\n", + GC_OPT_FLAG_DEFAULT, + configfile_esc ? configfile_esc : "/dev/null"); + es_printf ("verbose:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("quiet:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("keyserver:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("reader-port:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("default-key:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("encrypt-to:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("auto-key-locate:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("log-file:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("debug-level:%lu:\"none:\n", GC_OPT_FLAG_DEFAULT); + es_printf ("group:%lu:\n", GC_OPT_FLAG_NONE); /* The next one is an info only item and should match the macros at the top of keygen.c */ - printf ("default_pubkey_algo:%lu:\"%s:\n", GC_OPT_FLAG_DEFAULT, - "RSA-2048"); + es_printf ("default_pubkey_algo:%lu:\"%s:\n", GC_OPT_FLAG_DEFAULT, + "RSA-2048"); xfree (configfile_esc); } @@ -2992,11 +2993,12 @@ main (int argc, char **argv) if( nogreeting ) greeting = 0; - if( greeting ) { - fprintf(stderr, "%s %s; %s\n", - strusage(11), strusage(13), strusage(14) ); - fprintf(stderr, "%s\n", strusage(15) ); - } + if( greeting ) + { + es_fprintf (es_stderr, "%s %s; %s\n", + strusage(11), strusage(13), strusage(14) ); + es_fprintf (es_stderr, "%s\n", strusage(15) ); + } #ifdef IS_DEVELOPMENT_VERSION if (!opt.batch) { @@ -4092,33 +4094,33 @@ g10_exit( int rc ) display, but there are a few other similar assumptions in the display code. */ static void -print_hex( gcry_md_hd_t md, int algo, const char *fname ) +print_hex (gcry_md_hd_t md, int algo, const char *fname) { int i,n,count,indent=0; const byte *p; - if(fname) - indent=printf("%s: ",fname); + if (fname) + indent = es_printf("%s: ",fname); - if(indent>40) + if (indent>40) { printf("\n"); indent=0; } - if(algo==DIGEST_ALGO_RMD160) - indent+=printf("RMD160 = "); - else if(algo>0) - indent+=printf("%6s = ", gcry_md_algo_name (algo)); + if (algo==DIGEST_ALGO_RMD160) + indent += es_printf("RMD160 = "); + else if (algo>0) + indent += es_printf("%6s = ", gcry_md_algo_name (algo)); else - algo=abs(algo); + algo = abs(algo); - count=indent; + count = indent; p = gcry_md_read (md, algo); n = gcry_md_get_algo_dlen (algo); - count += printf ("%02X",*p++); + count += es_printf ("%02X",*p++); for(i=1;i79) { - printf("\n%*s",indent," "); - count=indent; + es_printf ("\n%*s",indent," "); + count = indent; } else - count+=printf(" "); + count += es_printf(" "); - if(!(i%8)) - count+=printf(" "); + if (!(i%8)) + count += es_printf(" "); } else if (n==20) { @@ -4141,58 +4143,59 @@ print_hex( gcry_md_hd_t md, int algo, const char *fname ) { if(count+4>79) { - printf("\n%*s",indent," "); + es_printf ("\n%*s",indent," "); count=indent; } else - count+=printf(" "); + count += es_printf(" "); } - if(!(i%10)) - count+=printf(" "); + if (!(i%10)) + count += es_printf(" "); } else { if(!(i%4)) { - if(count+8>79) + if (count+8>79) { - printf("\n%*s",indent," "); + es_printf ("\n%*s",indent," "); count=indent; } else - count+=printf(" "); + count += es_printf(" "); } } - count+=printf("%02X",*p); + count += es_printf("%02X",*p); } - printf("\n"); + es_printf ("\n"); } static void print_hashline( gcry_md_hd_t md, int algo, const char *fname ) { - int i, n; - const byte *p; + int i, n; + const byte *p; - if ( fname ) { - for (p = fname; *p; p++ ) { - if ( *p <= 32 || *p > 127 || *p == ':' || *p == '%' ) - printf("%%%02X", *p ); - else - putchar( *p ); + if ( fname ) + { + for (p = fname; *p; p++ ) + { + if ( *p <= 32 || *p > 127 || *p == ':' || *p == '%' ) + es_printf ("%%%02X", *p ); + else + es_putc (*p, es_stdout); } } - putchar(':'); - printf("%d:", algo ); - p = gcry_md_read (md, algo); - n = gcry_md_get_algo_dlen (algo); - for(i=0; i < n ; i++, p++ ) - printf("%02X", *p ); - putchar(':'); - putchar('\n'); + es_putc (':', es_stdout); + es_printf ("%d:", algo); + p = gcry_md_read (md, algo); + n = gcry_md_get_algo_dlen (algo); + for(i=0; i < n ; i++, p++ ) + es_printf ("%02X", *p); + es_fputs (":\n", es_stdout); } static void diff --git a/scd/ChangeLog b/scd/ChangeLog index 7578b7fc2..63dfce719 100644 --- a/scd/ChangeLog +++ b/scd/ChangeLog @@ -1,3 +1,7 @@ +2010-08-16 Werner Koch + + * scdaemon.c: Replace remaining printf by es_printf. + 2010-06-09 Werner Koch * scdaemon.c (main): s/log_set_get_tid_callback/log_set_pid_suffix_cb/. diff --git a/scd/scdaemon.c b/scd/scdaemon.c index 93fc58a93..741b6d279 100644 --- a/scd/scdaemon.c +++ b/scd/scdaemon.c @@ -617,9 +617,9 @@ main (int argc, char **argv ) if (greeting) { - fprintf (stderr, "%s %s; %s\n", - strusage(11), strusage(13), strusage(14) ); - fprintf (stderr, "%s\n", strusage(15) ); + es_fprintf (es_stderr, "%s %s; %s\n", + strusage(11), strusage(13), strusage(14) ); + es_fprintf (es_stderr, "%s\n", strusage(15) ); } #ifdef IS_DEVELOPMENT_VERSION log_info ("NOTE: this is a development version!\n"); @@ -651,30 +651,30 @@ main (int argc, char **argv ) filename = make_filename (opt.homedir, "scdaemon.conf", NULL); filename_esc = percent_escape (filename, NULL); - printf ("gpgconf-scdaemon.conf:%lu:\"%s\n", - GC_OPT_FLAG_DEFAULT, filename_esc); + es_printf ("gpgconf-scdaemon.conf:%lu:\"%s\n", + GC_OPT_FLAG_DEFAULT, filename_esc); xfree (filename_esc); xfree (filename); - printf ("verbose:%lu:\n" - "quiet:%lu:\n" - "debug-level:%lu:\"none:\n" - "log-file:%lu:\n", - GC_OPT_FLAG_NONE, - GC_OPT_FLAG_NONE, - GC_OPT_FLAG_DEFAULT, - GC_OPT_FLAG_NONE ); + es_printf ("verbose:%lu:\n" + "quiet:%lu:\n" + "debug-level:%lu:\"none:\n" + "log-file:%lu:\n", + GC_OPT_FLAG_NONE, + GC_OPT_FLAG_NONE, + GC_OPT_FLAG_DEFAULT, + GC_OPT_FLAG_NONE ); - printf ("reader-port:%lu:\n", GC_OPT_FLAG_NONE ); - printf ("ctapi-driver:%lu:\n", GC_OPT_FLAG_NONE ); - printf ("pcsc-driver:%lu:\"%s:\n", + es_printf ("reader-port:%lu:\n", GC_OPT_FLAG_NONE ); + es_printf ("ctapi-driver:%lu:\n", GC_OPT_FLAG_NONE ); + es_printf ("pcsc-driver:%lu:\"%s:\n", GC_OPT_FLAG_DEFAULT, DEFAULT_PCSC_DRIVER ); #ifdef HAVE_LIBUSB - printf ("disable-ccid:%lu:\n", GC_OPT_FLAG_NONE ); + es_printf ("disable-ccid:%lu:\n", GC_OPT_FLAG_NONE ); #endif - printf ("deny-admin:%lu:\n", GC_OPT_FLAG_NONE ); - printf ("disable-keypad:%lu:\n", GC_OPT_FLAG_NONE ); - printf ("card-timeout:%lu:%d:\n", GC_OPT_FLAG_DEFAULT, 0); + es_printf ("deny-admin:%lu:\n", GC_OPT_FLAG_NONE ); + es_printf ("disable-keypad:%lu:\n", GC_OPT_FLAG_NONE ); + es_printf ("card-timeout:%lu:%d:\n", GC_OPT_FLAG_DEFAULT, 0); scd_exit (0); } @@ -831,11 +831,11 @@ main (int argc, char **argv ) if (csh_style) { *strchr (infostr, '=') = ' '; - printf ( "setenv %s\n", infostr); + es_printf ( "setenv %s\n", infostr); } else { - printf ( "%s; export SCDAEMON_INFO;\n", infostr); + es_printf ( "%s; export SCDAEMON_INFO;\n", infostr); } xfree (infostr); exit (0); diff --git a/sm/ChangeLog b/sm/ChangeLog index d4157c2ca..82a1f998b 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,5 +1,7 @@ 2010-08-16 Werner Koch + * gpgsm.c (main) : Use es_printf. + * call-dirmngr.c (start_dirmngr_ext): Use new start_new_dirmngr function. diff --git a/sm/gpgsm.c b/sm/gpgsm.c index bbce179b7..cc8c5404e 100644 --- a/sm/gpgsm.c +++ b/sm/gpgsm.c @@ -908,7 +908,7 @@ main ( int argc, char **argv) log_set_prefix ("gpgsm", 1); /* Make sure that our subsystems are ready. */ - i18n_init(); + i18n_init (); init_common_subsystems (&argc, &argv); /* Check that the libraries are suitable. Do it here because the @@ -1429,9 +1429,9 @@ main ( int argc, char **argv) if (greeting) { - fprintf(stderr, "%s %s; %s\n", - strusage(11), strusage(13), strusage(14) ); - fprintf(stderr, "%s\n", strusage(15) ); + es_fprintf (es_stderr, "%s %s; %s\n", + strusage(11), strusage(13), strusage(14) ); + es_fprintf (es_stderr, "%s\n", strusage(15) ); } # ifdef IS_DEVELOPMENT_VERSION if (!opt.batch) @@ -1638,33 +1638,33 @@ main ( int argc, char **argv) { /* List options and default values in the GPG Conf format. */ char *config_filename_esc = percent_escape (opt.config_filename, NULL); - printf ("gpgconf-gpgsm.conf:%lu:\"%s\n", - GC_OPT_FLAG_DEFAULT, config_filename_esc); + es_printf ("gpgconf-gpgsm.conf:%lu:\"%s\n", + GC_OPT_FLAG_DEFAULT, config_filename_esc); xfree (config_filename_esc); - printf ("verbose:%lu:\n", GC_OPT_FLAG_NONE); - printf ("quiet:%lu:\n", GC_OPT_FLAG_NONE); - printf ("debug-level:%lu:\"none:\n", GC_OPT_FLAG_DEFAULT); - printf ("log-file:%lu:\n", GC_OPT_FLAG_NONE); - printf ("disable-crl-checks:%lu:\n", GC_OPT_FLAG_NONE); - printf ("disable-trusted-cert-crl-check:%lu:\n", GC_OPT_FLAG_NONE); - printf ("enable-ocsp:%lu:\n", GC_OPT_FLAG_NONE); - printf ("include-certs:%lu:%d:\n", GC_OPT_FLAG_DEFAULT, - DEFAULT_INCLUDE_CERTS); - printf ("disable-policy-checks:%lu:\n", GC_OPT_FLAG_NONE); - printf ("auto-issuer-key-retrieve:%lu:\n", GC_OPT_FLAG_NONE); - printf ("disable-dirmngr:%lu:\n", GC_OPT_FLAG_NONE); - printf ("cipher-algo:%lu:\"%s:\n", GC_OPT_FLAG_DEFAULT, - DEFAULT_CIPHER_ALGO); - printf ("p12-charset:%lu:\n", GC_OPT_FLAG_DEFAULT); - printf ("default-key:%lu:\n", GC_OPT_FLAG_DEFAULT); - printf ("encrypt-to:%lu:\n", GC_OPT_FLAG_DEFAULT); - printf ("keyserver:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("verbose:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("quiet:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("debug-level:%lu:\"none:\n", GC_OPT_FLAG_DEFAULT); + es_printf ("log-file:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("disable-crl-checks:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("disable-trusted-cert-crl-check:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("enable-ocsp:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("include-certs:%lu:%d:\n", GC_OPT_FLAG_DEFAULT, + DEFAULT_INCLUDE_CERTS); + es_printf ("disable-policy-checks:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("auto-issuer-key-retrieve:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("disable-dirmngr:%lu:\n", GC_OPT_FLAG_NONE); + es_printf ("cipher-algo:%lu:\"%s:\n", GC_OPT_FLAG_DEFAULT, + DEFAULT_CIPHER_ALGO); + es_printf ("p12-charset:%lu:\n", GC_OPT_FLAG_DEFAULT); + es_printf ("default-key:%lu:\n", GC_OPT_FLAG_DEFAULT); + es_printf ("encrypt-to:%lu:\n", GC_OPT_FLAG_DEFAULT); + es_printf ("keyserver:%lu:\n", GC_OPT_FLAG_NONE); /* The next one is an info only item and should match what proc_parameters actually implements. */ - printf ("default_pubkey_algo:%lu:\"%s:\n", GC_OPT_FLAG_DEFAULT, - "RSA-2048"); + es_printf ("default_pubkey_algo:%lu:\"%s:\n", GC_OPT_FLAG_DEFAULT, + "RSA-2048"); } break; diff --git a/tools/ChangeLog b/tools/ChangeLog index 7bfb2abcd..7729665d3 100644 --- a/tools/ChangeLog +++ b/tools/ChangeLog @@ -1,3 +1,13 @@ +2010-08-16 Werner Koch + + * gpgconf.c (get_outfp): Change to use estream. + (main): Replace fprintf by es_fprintf. + * gpgconf-comp.c (gc_component_list_components) + (gc_check_programs, gc_component_list_options) + (gc_component_change_options, gc_component_check_options) + (list_one_option, gc_process_gpgconf_conf): Replace FILE* args by + estream_t. + 2010-08-13 Werner Koch * Makefile.am (gpgkey2ssh_LDADD): Add NETLIBS. diff --git a/tools/gpg-connect-agent.c b/tools/gpg-connect-agent.c index 80bb4e785..8210df598 100644 --- a/tools/gpg-connect-agent.c +++ b/tools/gpg-connect-agent.c @@ -994,7 +994,9 @@ do_open (char *line) if (fd >= 0 && fd < DIM (open_fd_table)) { open_fd_table[fd].inuse = 1; -#warning fixme: implement our pipe emulation. +#ifdef HAVE_W32CE_SYSTEM +# warning fixme: implement our pipe emulation. +#endif #if defined(HAVE_W32_SYSTEM) && !defined(HAVE_W32CE_SYSTEM) { HANDLE prochandle, handle, newhandle; @@ -1246,11 +1248,11 @@ main (int argc, char **argv) if (opt.exec) { - int no_close[3]; + assuan_fd_t no_close[3]; - no_close[0] = assuan_fd_from_posix_fd (fileno (stderr)); + no_close[0] = assuan_fd_from_posix_fd (es_fileno (es_stderr)); no_close[1] = assuan_fd_from_posix_fd (log_get_fd ()); - no_close[2] = -1; + no_close[2] = ASSUAN_INVALID_FD; rc = assuan_new (&ctx); if (rc) diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c index f37a929aa..803b2ca60 100644 --- a/tools/gpgconf-comp.c +++ b/tools/gpgconf-comp.c @@ -1284,7 +1284,7 @@ percent_deescape (const char *src) /* List all components that are available. */ void -gc_component_list_components (FILE *out) +gc_component_list_components (estream_t out) { gc_component_t component; gc_option_t *option; @@ -1320,9 +1320,9 @@ gc_component_list_components (FILE *out) desc = gc_component[component].desc; desc = my_dgettext (gc_component[component].desc_domain, desc); - fprintf (out, "%s:%s:", - gc_component[component].name, gc_percent_escape (desc)); - fprintf (out, "%s\n", gc_percent_escape (pgmname)); + es_fprintf (out, "%s:%s:", + gc_component[component].name, gc_percent_escape (desc)); + es_fprintf (out, "%s\n", gc_percent_escape (pgmname)); } } } @@ -1432,7 +1432,7 @@ collect_error_output (int fd, const char *tag) /* Check the options of a single component. Returns 0 if everything is OK. */ int -gc_component_check_options (int component, FILE *out, const char *conf_file) +gc_component_check_options (int component, estream_t out, const char *conf_file) { gpg_error_t err; unsigned int result; @@ -1525,24 +1525,24 @@ gc_component_check_options (int component, FILE *out, const char *conf_file) desc = gc_component[component].desc; desc = my_dgettext (gc_component[component].desc_domain, desc); - fprintf (out, "%s:%s:", - gc_component[component].name, gc_percent_escape (desc)); - fputs (gc_percent_escape (pgmname), out); - fprintf (out, ":%d:%d:", !(result & 1), !(result & 2)); + es_fprintf (out, "%s:%s:", + gc_component[component].name, gc_percent_escape (desc)); + es_fputs (gc_percent_escape (pgmname), out); + es_fprintf (out, ":%d:%d:", !(result & 1), !(result & 2)); for (errptr = errlines; errptr; errptr = errptr->next) { if (errptr != errlines) - fputs ("\n:::::", out); /* Continuation line. */ + es_fputs ("\n:::::", out); /* Continuation line. */ if (errptr->fname) - fputs (gc_percent_escape (errptr->fname), out); - putc (':', out); + es_fputs (gc_percent_escape (errptr->fname), out); + es_putc (':', out); if (errptr->fname) - fprintf (out, "%u", errptr->lineno); - putc (':', out); - fputs (gc_percent_escape (errptr->errtext), out); - putc (':', out); + es_fprintf (out, "%u", errptr->lineno); + es_putc (':', out); + es_fputs (gc_percent_escape (errptr->errtext), out); + es_putc (':', out); } - putc ('\n', out); + es_putc ('\n', out); } while (errlines) @@ -1558,7 +1558,7 @@ gc_component_check_options (int component, FILE *out, const char *conf_file) /* Check all components that are available. */ void -gc_check_programs (FILE *out) +gc_check_programs (estream_t out) { gc_component_t component; @@ -1587,7 +1587,7 @@ gc_component_find (const char *name) /* List the option OPTION. */ static void -list_one_option (const gc_option_t *option, FILE *out) +list_one_option (const gc_option_t *option, estream_t out) { const char *desc = NULL; char *arg_name = NULL; @@ -1617,16 +1617,16 @@ list_one_option (const gc_option_t *option, FILE *out) FIELDS. */ /* The name field. */ - fprintf (out, "%s", option->name); + es_fprintf (out, "%s", option->name); /* The flags field. */ - fprintf (out, ":%lu", option->flags); + es_fprintf (out, ":%lu", option->flags); if (opt.verbose) { - putc (' ', out); + es_putc (' ', out); if (!option->flags) - fprintf (out, "none"); + es_fprintf (out, "none"); else { unsigned long flags = option->flags; @@ -1640,8 +1640,8 @@ list_one_option (const gc_option_t *option, FILE *out) if (first) first = 0; else - putc (',', out); - fprintf (out, "%s", gc_flag[flag].name); + es_putc (',', out); + es_fprintf (out, "%s", gc_flag[flag].name); } flags >>= 1; flag++; @@ -1650,34 +1650,33 @@ list_one_option (const gc_option_t *option, FILE *out) } /* The level field. */ - fprintf (out, ":%u", option->level); + es_fprintf (out, ":%u", option->level); if (opt.verbose) - fprintf (out, " %s", gc_level[option->level].name); + es_fprintf (out, " %s", gc_level[option->level].name); /* The description field. */ - fprintf (out, ":%s", desc ? gc_percent_escape (desc) : ""); + es_fprintf (out, ":%s", desc ? gc_percent_escape (desc) : ""); /* The type field. */ - fprintf (out, ":%u", option->arg_type); + es_fprintf (out, ":%u", option->arg_type); if (opt.verbose) - fprintf (out, " %s", gc_arg_type[option->arg_type].name); + es_fprintf (out, " %s", gc_arg_type[option->arg_type].name); /* The alternate type field. */ - fprintf (out, ":%u", gc_arg_type[option->arg_type].fallback); + es_fprintf (out, ":%u", gc_arg_type[option->arg_type].fallback); if (opt.verbose) - fprintf (out, " %s", - gc_arg_type[gc_arg_type[option->arg_type].fallback].name); + es_fprintf (out, " %s", + gc_arg_type[gc_arg_type[option->arg_type].fallback].name); /* The argument name field. */ - fprintf (out, ":%s", arg_name ? gc_percent_escape (arg_name) : ""); - if (arg_name) - xfree (arg_name); + es_fprintf (out, ":%s", arg_name ? gc_percent_escape (arg_name) : ""); + xfree (arg_name); /* The default value field. */ - fprintf (out, ":%s", option->default_value ? option->default_value : ""); + es_fprintf (out, ":%s", option->default_value ? option->default_value : ""); /* The default argument field. */ - fprintf (out, ":%s", option->default_arg ? option->default_arg : ""); + es_fprintf (out, ":%s", option->default_arg ? option->default_arg : ""); /* The value field. */ if (gc_arg_type[option->arg_type].fallback == GC_ARG_TYPE_NONE @@ -1685,19 +1684,19 @@ list_one_option (const gc_option_t *option, FILE *out) && option->value) /* The special format "1,1,1,1,...,1" is converted to a number here. */ - fprintf (out, ":%u", (unsigned int)((strlen (option->value) + 1) / 2)); + es_fprintf (out, ":%u", (unsigned int)((strlen (option->value) + 1) / 2)); else - fprintf (out, ":%s", option->value ? option->value : ""); + es_fprintf (out, ":%s", option->value ? option->value : ""); /* ADD NEW FIELDS HERE. */ - putc ('\n', out); + es_putc ('\n', out); } /* List all options of the component COMPONENT. */ void -gc_component_list_options (int component, FILE *out) +gc_component_list_options (int component, estream_t out) { const gc_option_t *option = gc_component[component].options; @@ -2980,7 +2979,7 @@ change_one_value (gc_option_t *option, int *runtime, modifications are expected to already have been set to the global table. */ void -gc_component_change_options (int component, FILE *in, FILE *out) +gc_component_change_options (int component, estream_t in, estream_t out) { int err = 0; int runtime[GC_BACKEND_NR]; @@ -3004,7 +3003,7 @@ gc_component_change_options (int component, FILE *in, FILE *out) if (in) { /* Read options from the file IN. */ - while ((length = read_line (in, &line, &line_len, NULL)) > 0) + while ((length = es_read_line (in, &line, &line_len, NULL)) > 0) { char *linep; unsigned long flags = 0; @@ -3347,7 +3346,7 @@ key_matches_user_or_group (char *user) returned on error. */ int gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, - FILE *listfp) + estream_t listfp) { int result = 0; char *line = NULL; @@ -3560,19 +3559,19 @@ gc_process_gpgconf_conf (const char *fname_arg, int update, int defaults, *p = 0; /* We better strip any extra stuff. */ } - fprintf (listfp, "k:%s:", gc_percent_escape (key)); - fprintf (listfp, "%s\n", group? gc_percent_escape (group):""); + es_fprintf (listfp, "k:%s:", gc_percent_escape (key)); + es_fprintf (listfp, "%s\n", group? gc_percent_escape (group):""); } /* All other lines are rule records. */ - fprintf (listfp, "r:::%s:%s:%s:", - gc_component[component_id].name, - option_info->name? option_info->name : "", - flags? flags : ""); + es_fprintf (listfp, "r:::%s:%s:%s:", + gc_component[component_id].name, + option_info->name? option_info->name : "", + flags? flags : ""); if (value != empty) - fprintf (listfp, "\"%s", gc_percent_escape (value)); + es_fprintf (listfp, "\"%s", gc_percent_escape (value)); - putc ('\n', listfp); + es_putc ('\n', listfp); } /* Check whether the key matches but do this only if we are not diff --git a/tools/gpgconf.c b/tools/gpgconf.c index 31f88bb3d..fc10fbc75 100644 --- a/tools/gpgconf.c +++ b/tools/gpgconf.c @@ -118,19 +118,19 @@ my_strusage( int level ) /* Return the fp for the output. This is usually stdout unless --output has been used. In the latter case this function opens that file. */ -static FILE * -get_outfp (FILE **fp) +static estream_t +get_outfp (estream_t *fp) { if (!*fp) { if (opt.outfile) { - *fp = fopen (opt.outfile, "w"); + *fp = es_fopen (opt.outfile, "w"); if (!*fp) gc_error (1, errno, "can not open `%s'", opt.outfile); } else - *fp = stdout; + *fp = es_stdout; } return *fp; } @@ -144,7 +144,7 @@ main (int argc, char **argv) const char *fname; int no_more_options = 0; enum cmd_and_opt_values cmd = 0; - FILE *outfp = NULL; + estream_t outfp = NULL; gnupg_reopen_std ("gpgconf"); set_strusage (my_strusage); @@ -211,10 +211,10 @@ main (int argc, char **argv) case aCheckOptions: if (!fname) { - fputs (_("usage: gpgconf [options] "), stderr); - putc ('\n',stderr); - fputs (_("Need one component argument"), stderr); - putc ('\n',stderr); + es_fputs (_("usage: gpgconf [options] "), es_stderr); + es_putc ('\n', es_stderr); + es_fputs (_("Need one component argument"), es_stderr); + es_putc ('\n', es_stderr); exit (2); } else @@ -222,8 +222,8 @@ main (int argc, char **argv) int idx = gc_component_find (fname); if (idx < 0) { - fputs (_("Component not found"), stderr); - putc ('\n', stderr); + es_fputs (_("Component not found"), es_stderr); + es_putc ('\n', es_stderr); exit (1); } gc_component_retrieve_options (idx); @@ -232,7 +232,7 @@ main (int argc, char **argv) if (cmd == aListOptions) gc_component_list_options (idx, get_outfp (&outfp)); else if (cmd == aChangeOptions) - gc_component_change_options (idx, stdin, get_outfp (&outfp)); + gc_component_change_options (idx, es_stdin, get_outfp (&outfp)); else gc_component_check_options (idx, get_outfp (&outfp), NULL); } @@ -252,8 +252,8 @@ main (int argc, char **argv) idx = gc_component_find (fname); if (idx < 0) { - fputs (_("Component not found"), stderr); - putc ('\n', stderr); + es_fputs (_("Component not found"), es_stderr); + es_putc ('\n', es_stderr); exit (1); } else @@ -276,10 +276,10 @@ main (int argc, char **argv) case aApplyDefaults: if (fname) { - fputs (_("usage: gpgconf [options] "), stderr); - putc ('\n',stderr); - fputs (_("No argument allowed"), stderr); - putc ('\n',stderr); + es_fputs (_("usage: gpgconf [options] "), es_stderr); + es_putc ('\n', es_stderr); + es_fputs (_("No argument allowed"), es_stderr); + es_putc ('\n', es_stderr); exit (2); } gc_component_retrieve_options (-1); @@ -290,20 +290,20 @@ main (int argc, char **argv) case aListDirs: /* Show the system configuration directories for gpgconf. */ get_outfp (&outfp); - fprintf (outfp, "sysconfdir:%s\n", - gc_percent_escape (gnupg_sysconfdir ())); - fprintf (outfp, "bindir:%s\n", - gc_percent_escape (gnupg_bindir ())); - fprintf (outfp, "libexecdir:%s\n", - gc_percent_escape (gnupg_libexecdir ())); - fprintf (outfp, "libdir:%s\n", - gc_percent_escape (gnupg_libdir ())); - fprintf (outfp, "datadir:%s\n", - gc_percent_escape (gnupg_datadir ())); - fprintf (outfp, "localedir:%s\n", - gc_percent_escape (gnupg_localedir ())); - fprintf (outfp, "dirmngr-socket:%s\n", - gc_percent_escape (dirmngr_socket_name ())); + es_fprintf (outfp, "sysconfdir:%s\n", + gc_percent_escape (gnupg_sysconfdir ())); + es_fprintf (outfp, "bindir:%s\n", + gc_percent_escape (gnupg_bindir ())); + es_fprintf (outfp, "libexecdir:%s\n", + gc_percent_escape (gnupg_libexecdir ())); + es_fprintf (outfp, "libdir:%s\n", + gc_percent_escape (gnupg_libdir ())); + es_fprintf (outfp, "datadir:%s\n", + gc_percent_escape (gnupg_datadir ())); + es_fprintf (outfp, "localedir:%s\n", + gc_percent_escape (gnupg_localedir ())); + es_fprintf (outfp, "dirmngr-socket:%s\n", + gc_percent_escape (dirmngr_socket_name ())); { char *infostr = getenv ("GPG_AGENT_INFO"); @@ -323,21 +323,21 @@ main (int argc, char **argv) else *tmp = 0; } - fprintf (outfp, "agent-socket:%s\n", - infostr? gc_percent_escape (infostr) : ""); + es_fprintf (outfp, "agent-socket:%s\n", + infostr? gc_percent_escape (infostr) : ""); xfree (infostr); } { /* We need to use make_filename to expand a possible "~/". */ char *tmp = make_filename (default_homedir (), NULL); - fprintf (outfp, "homedir:%s\n", gc_percent_escape (tmp)); + es_fprintf (outfp, "homedir:%s\n", gc_percent_escape (tmp)); xfree (tmp); } break; } - if (outfp && outfp != stdout) - if (fclose (outfp)) + if (outfp != es_stdout) + if (es_fclose (outfp)) gc_error (1, errno, "error closing `%s'", opt.outfile); return 0; diff --git a/tools/gpgconf.h b/tools/gpgconf.h index be9172aa6..3b8d80b0e 100644 --- a/tools/gpgconf.h +++ b/tools/gpgconf.h @@ -48,10 +48,10 @@ void gc_error (int status, int errnum, const char *fmt, ...); void gc_component_reload (int component); /* List all components that are available. */ -void gc_component_list_components (FILE *out); +void gc_component_list_components (estream_t out); /* List all programs along with their status. */ -void gc_check_programs (FILE *out); +void gc_check_programs (estream_t out); /* Find the component with the name NAME. Returns -1 if not found. */ @@ -62,19 +62,19 @@ int gc_component_find (const char *name); void gc_component_retrieve_options (int component); /* List all options of the component COMPONENT. */ -void gc_component_list_options (int component, FILE *out); +void gc_component_list_options (int component, estream_t out); /* Read the modifications from IN and apply them. */ -void gc_component_change_options (int component, FILE *in, FILE *out); +void gc_component_change_options (int component, estream_t in, estream_t out); /* Check the options of a single component. Returns 0 if everything is OK. */ -int gc_component_check_options (int component, FILE *out, +int gc_component_check_options (int component, estream_t out, const char *conf_file); /* Process global configuration file. */ int gc_process_gpgconf_conf (const char *fname, int update, int defaults, - FILE *listfp); + estream_t listfp); #endif /*GPGCONF_H*/