aboutsummaryrefslogtreecommitdiffstats
path: root/sm
diff options
context:
space:
mode:
Diffstat (limited to 'sm')
-rw-r--r--sm/call-dirmngr.c57
-rw-r--r--sm/gpgsm.h1
-rw-r--r--sm/misc.c21
3 files changed, 79 insertions, 0 deletions
diff --git a/sm/call-dirmngr.c b/sm/call-dirmngr.c
index 9675d0404..5dd8a3938 100644
--- a/sm/call-dirmngr.c
+++ b/sm/call-dirmngr.c
@@ -425,6 +425,51 @@ unhexify_fpr (const char *hexstr, unsigned char *fpr)
}
+/* This is a helper to print diagnostics from dirmngr indicated by
+ * WARNING or NOTE status lines. Returns true if the status LINE was
+ * processed. */
+static int
+warning_and_note_printer (const char *line)
+{
+ const char *s, *s2;
+ const char *warn = NULL;
+ int is_note = 0;
+
+ if ((s = has_leading_keyword (line, "WARNING")))
+ ;
+ else if ((is_note = !!(s = has_leading_keyword (line, "NOTE"))))
+ ;
+ else
+ return 0; /* Nothing to process. */
+
+ if ((s2 = has_leading_keyword (s, "no_crl_due_to_tor"))
+ || (s2 = has_leading_keyword (s, "no_ldap_due_to_tor"))
+ || (s2 = has_leading_keyword (s, "no_ocsp_due_to_tor")))
+ warn = _("Tor might be in use - network access is limited");
+ else
+ warn = NULL;
+
+ if (warn)
+ {
+ if (is_note)
+ log_info (_("Note: %s\n"), warn);
+ else
+ log_info (_("WARNING: %s\n"), warn);
+ if (s2)
+ {
+ while (*s2 && !spacep (s2))
+ s2++;
+ while (*s2 && spacep (s2))
+ s2++;
+ if (*s2)
+ gpgsm_print_further_info ("%s", s2);
+ }
+ }
+
+ return 1; /* Status line processed. */
+}
+
+
static gpg_error_t
isvalid_status_cb (void *opaque, const char *line)
{
@@ -446,6 +491,10 @@ isvalid_status_cb (void *opaque, const char *line)
if (!*s || !unhexify_fpr (s, parm->fpr))
parm->seen++; /* Bump it to indicate an error. */
}
+ else if (warning_and_note_printer (line))
+ {
+ }
+
return 0;
}
@@ -722,6 +771,10 @@ lookup_status_cb (void *opaque, const char *line)
gpgsm_status (parm->ctrl, STATUS_TRUNCATED, line);
}
}
+ else if (warning_and_note_printer (line))
+ {
+ }
+
return 0;
}
@@ -969,6 +1022,10 @@ run_command_status_cb (void *opaque, const char *line)
return gpg_error (GPG_ERR_ASS_CANCELED);
}
}
+ else if (warning_and_note_printer (line))
+ {
+ }
+
return 0;
}
diff --git a/sm/gpgsm.h b/sm/gpgsm.h
index 0eec0c025..bb32db3ed 100644
--- a/sm/gpgsm.h
+++ b/sm/gpgsm.h
@@ -489,6 +489,7 @@ int gpgsm_dirmngr_run_command (ctrl_t ctrl, const char *command,
/*-- misc.c --*/
+void gpgsm_print_further_info (const char *format, ...) GPGRT_ATTR_PRINTF(1,2);
void setup_pinentry_env (void);
gpg_error_t transform_sigval (const unsigned char *sigval, size_t sigvallen,
int mdalgo,
diff --git a/sm/misc.c b/sm/misc.c
index d4898202e..3fdfd769d 100644
--- a/sm/misc.c
+++ b/sm/misc.c
@@ -35,6 +35,27 @@
#include "../common/sexp-parse.h"
+/* Print a message
+ * "(further info: %s)\n
+ * in verbose mode to further explain an error. That message is
+ * intended to help debug a problem and should not be translated.
+ */
+void
+gpgsm_print_further_info (const char *format, ...)
+{
+ va_list arg_ptr;
+
+ if (!opt.verbose)
+ return;
+
+ log_info (_("(further info: "));
+ va_start (arg_ptr, format);
+ log_logv (GPGRT_LOGLVL_CONT, format, arg_ptr);
+ va_end (arg_ptr);
+ log_printf (")\n");
+}
+
+
/* Setup the environment so that the pinentry is able to get all
required information. This is used prior to an exec of the
protect-tool. */