diff options
Diffstat (limited to 'g10')
-rw-r--r-- | g10/call-agent.c | 38 | ||||
-rw-r--r-- | g10/call-dirmngr.c | 37 | ||||
-rw-r--r-- | g10/call-keyboxd.c | 37 | ||||
-rw-r--r-- | g10/cpr.c | 44 | ||||
-rw-r--r-- | g10/main.h | 2 |
5 files changed, 55 insertions, 103 deletions
diff --git a/g10/call-agent.c b/g10/call-agent.c index 806475de9..4e3bdf9e4 100644 --- a/g10/call-agent.c +++ b/g10/call-agent.c @@ -220,41 +220,9 @@ default_inq_cb (void *opaque, const char *line) static gpg_error_t warn_version_mismatch (assuan_context_t ctx, const char *servername, int mode) { - gpg_error_t err; - char *serverversion; - const char *myversion = gpgrt_strusage (13); - - err = get_assuan_server_version (ctx, mode, &serverversion); - if (err) - log_log (gpg_err_code (err) == GPG_ERR_NOT_SUPPORTED? - GPGRT_LOGLVL_INFO : GPGRT_LOGLVL_ERROR, - _("error getting version from '%s': %s\n"), - servername, gpg_strerror (err)); - else if (compare_version_strings (serverversion, myversion) < 0) - { - char *warn; - - warn = xtryasprintf (_("server '%s' is older than us (%s < %s)"), - servername, serverversion, myversion); - if (!warn) - err = gpg_error_from_syserror (); - else - { - log_info (_("WARNING: %s\n"), warn); - if (!opt.quiet) - { - log_info (_("Note: Outdated servers may lack important" - " security fixes.\n")); - log_info (_("Note: Use the command \"%s\" to restart them.\n"), - "gpgconf --kill all"); - } - write_status_strings (STATUS_WARNING, "server_version_mismatch 0", - " ", warn, NULL); - xfree (warn); - } - } - xfree (serverversion); - return err; + return warn_server_version_mismatch (ctx, servername, mode, + write_status_strings2, NULL, + !opt.quiet); } diff --git a/g10/call-dirmngr.c b/g10/call-dirmngr.c index 02d1edb9f..1282ae192 100644 --- a/g10/call-dirmngr.c +++ b/g10/call-dirmngr.c @@ -144,40 +144,9 @@ gpg_dirmngr_deinit_session_data (ctrl_t ctrl) static gpg_error_t warn_version_mismatch (assuan_context_t ctx, const char *servername) { - gpg_error_t err; - char *serverversion; - const char *myversion = gpgrt_strusage (13); - - err = get_assuan_server_version (ctx, 0, &serverversion); - if (err) - log_error (_("error getting version from '%s': %s\n"), - servername, gpg_strerror (err)); - else if (compare_version_strings (serverversion, myversion) < 0) - { - char *warn; - - warn = xtryasprintf (_("server '%s' is older than us (%s < %s)"), - servername, serverversion, myversion); - if (!warn) - err = gpg_error_from_syserror (); - else - { - log_info (_("WARNING: %s\n"), warn); - if (!opt.quiet) - { - log_info (_("Note: Outdated servers may lack important" - " security fixes.\n")); - log_info (_("Note: Use the command \"%s\" to restart them.\n"), - "gpgconf --kill all"); - } - - write_status_strings (STATUS_WARNING, "server_version_mismatch 0", - " ", warn, NULL); - xfree (warn); - } - } - xfree (serverversion); - return err; + return warn_server_version_mismatch (ctx, servername, 0, + write_status_strings2, NULL, + !opt.quiet); } diff --git a/g10/call-keyboxd.c b/g10/call-keyboxd.c index 181f33fed..e09fa20e3 100644 --- a/g10/call-keyboxd.c +++ b/g10/call-keyboxd.c @@ -142,40 +142,9 @@ gpg_keyboxd_deinit_session_data (ctrl_t ctrl) static gpg_error_t warn_version_mismatch (assuan_context_t ctx, const char *servername) { - gpg_error_t err; - char *serverversion; - const char *myversion = gpgrt_strusage (13); - - err = get_assuan_server_version (ctx, 0, &serverversion); - if (err) - log_error (_("error getting version from '%s': %s\n"), - servername, gpg_strerror (err)); - else if (compare_version_strings (serverversion, myversion) < 0) - { - char *warn; - - warn = xtryasprintf (_("server '%s' is older than us (%s < %s)"), - servername, serverversion, myversion); - if (!warn) - err = gpg_error_from_syserror (); - else - { - log_info (_("WARNING: %s\n"), warn); - if (!opt.quiet) - { - log_info (_("Note: Outdated servers may lack important" - " security fixes.\n")); - log_info (_("Note: Use the command \"%s\" to restart them.\n"), - "gpgconf --kill all"); - } - - write_status_strings (STATUS_WARNING, "server_version_mismatch 0", - " ", warn, NULL); - xfree (warn); - } - } - xfree (serverversion); - return err; + return warn_server_version_mismatch (ctx, servername, 0, + write_status_strings2, NULL, + !opt.quiet); } @@ -181,6 +181,50 @@ write_status_strings (int no, const char *text, ...) } +/* Write a status line with code NO followed by the remaining + * arguments which must be a list of strings terminated by a NULL. + * Embedded CR and LFs in the strings are C-style escaped. All + * strings are printed with a space as delimiter. */ +gpg_error_t +write_status_strings2 (ctrl_t dummy, int no, ...) +{ + va_list arg_ptr; + const char *s; + + (void)dummy; + + if (!statusfp || !status_currently_allowed (no) ) + return 0; /* Not enabled or allowed. */ + + va_start (arg_ptr, no); + + es_fputs ("[GNUPG:] ", statusfp); + es_fputs (get_status_string (no), statusfp); + while ((s = va_arg (arg_ptr, const char*))) + { + if (*s) + es_putc (' ', statusfp); + for (; *s; s++) + { + if (*s == '\n') + es_fputs ("\\n", statusfp); + else if (*s == '\r') + es_fputs ("\\r", statusfp); + else + es_fputc (*(const byte *)s, statusfp); + } + } + es_putc ('\n', statusfp); + + va_end (arg_ptr); + + if (es_fflush (statusfp) && opt.exit_on_status_write_error) + g10_exit (0); + + return 0; +} + + void write_status_text (int no, const char *text) { diff --git a/g10/main.h b/g10/main.h index f13b1b929..7b5754648 100644 --- a/g10/main.h +++ b/g10/main.h @@ -208,6 +208,8 @@ void write_status_printf (int no, const char *format, ...) GPGRT_ATTR_PRINTF(2,3); void write_status_strings (int no, const char *text, ...) GPGRT_ATTR_SENTINEL(0); +gpg_error_t write_status_strings2 (ctrl_t dummy, int no, + ...) GPGRT_ATTR_SENTINEL(0); void write_status_buffer ( int no, const char *buffer, size_t len, int wrap ); void write_status_text_and_buffer ( int no, const char *text, |