* crypto: improved signature / verify output

This commit is contained in:
djcb
2012-09-19 11:36:02 +03:00
parent 7d8a58896e
commit 1ef9dae6bd
3 changed files with 52 additions and 32 deletions

View File

@ -215,10 +215,10 @@ get_digestkey_algo_name (GMimeDigestAlgo algo)
static char* static char*
get_cert_data (GMimeCertificate *cert) get_cert_data (GMimeCertificate *cert)
{ {
const char *email, *name, *digest_algo, *pubkey_algo, const char /**email,*/ *name, *digest_algo, *pubkey_algo,
*keyid, *trust; *keyid, *trust;
email = g_mime_certificate_get_email (cert); /* email = g_mime_certificate_get_email (cert); */
name = g_mime_certificate_get_name (cert); name = g_mime_certificate_get_name (cert);
keyid = g_mime_certificate_get_key_id (cert); keyid = g_mime_certificate_get_key_id (cert);
@ -239,10 +239,11 @@ get_cert_data (GMimeCertificate *cert)
} }
return g_strdup_printf ( return g_strdup_printf (
"signed by: %s <%s>; " "signer:%s, key:%s (%s,%s), trust:%s",
"algos: <%s,%s>; key-id: %s; trust: %s", name ? name : "?",
name ? name : "?", email ? email : "?", /* email ? email : "?", */
pubkey_algo, digest_algo, keyid, trust); keyid, pubkey_algo, digest_algo,
trust);
} }
@ -269,7 +270,7 @@ get_verdict_report (GMimeSignature *msig)
expires = (t == 0 || t == (time_t)-1) ? "?" : mu_date_str_s ("%x", t); expires = (t == 0 || t == (time_t)-1) ? "?" : mu_date_str_s ("%x", t);
certdata = get_cert_data (g_mime_signature_get_certificate (msig)); certdata = get_cert_data (g_mime_signature_get_certificate (msig));
report = g_strdup_printf ("status: %s; created: %s, expires: %s (%s)", report = g_strdup_printf ("%s; created:%s, expires:%s, %s",
status, created, expires, status, created, expires,
certdata ? certdata : "?"); certdata ? certdata : "?");
g_free (certdata); g_free (certdata);
@ -287,7 +288,8 @@ get_status_report (GMimeSignatureList *sigs)
status = MU_MSG_PART_SIG_STATUS_GOOD; /* let's start positive! */ status = MU_MSG_PART_SIG_STATUS_GOOD; /* let's start positive! */
for (i = 0, report = NULL; i != g_mime_signature_list_length (sigs); ++i) { for (i = 0, report = NULL; i != g_mime_signature_list_length (sigs);
++i) {
GMimeSignature *msig; GMimeSignature *msig;
GMimeSignatureStatus sigstat; GMimeSignatureStatus sigstat;
@ -308,8 +310,10 @@ get_status_report (GMimeSignatureList *sigs)
} }
rep = get_verdict_report (msig); rep = get_verdict_report (msig);
report = g_strdup_printf ("%s%s[%d] %s", report ? report : "", report = g_strdup_printf ("%s%s%d: %s",
report ? "; " : "", i, rep); report ? report : "",
report ? "; " : "", i + 1,
rep);
g_free (rep); g_free (rep);
} }

View File

@ -403,6 +403,7 @@ mu_cmd_remove (MuStore *store, MuConfig *opts, GError **err)
struct _VData { struct _VData {
MuMsgPartSigStatus combined_status; MuMsgPartSigStatus combined_status;
char *report; char *report;
gboolean oneline;
}; };
typedef struct _VData VData; typedef struct _VData VData;
@ -410,15 +411,23 @@ static void
each_sig (MuMsg *msg, MuMsgPart *part, VData *vdata) each_sig (MuMsg *msg, MuMsgPart *part, VData *vdata)
{ {
MuMsgPartSigStatusReport *report; MuMsgPartSigStatusReport *report;
report = part->sig_status_report; report = part->sig_status_report;
if (!report) if (!report)
return; return;
vdata->report = g_strdup_printf if (vdata->oneline)
("%s%s%s", vdata->report = g_strdup_printf
vdata->report ? vdata->report : "", ("%s%s%s",
vdata->report ? "; " : "", vdata->report ? vdata->report : "",
report->report); vdata->report ? "; " : "",
report->report);
else
vdata->report = g_strdup_printf
("%s%s\t%s",
vdata->report ? vdata->report : "",
vdata->report ? "\n" : "",
report->report);
if (vdata->combined_status == MU_MSG_PART_SIG_STATUS_BAD || if (vdata->combined_status == MU_MSG_PART_SIG_STATUS_BAD ||
vdata->combined_status == MU_MSG_PART_SIG_STATUS_ERROR) vdata->combined_status == MU_MSG_PART_SIG_STATUS_ERROR)
@ -431,33 +440,36 @@ each_sig (MuMsg *msg, MuMsgPart *part, VData *vdata)
static void static void
print_verdict (VData *vdata, gboolean color) print_verdict (VData *vdata, gboolean color)
{ {
char *str; g_print ("verdict: ");
switch (vdata->combined_status) { switch (vdata->combined_status) {
case MU_MSG_PART_SIG_STATUS_UNSIGNED: case MU_MSG_PART_SIG_STATUS_UNSIGNED:
str = g_strdup ("no signature found"); g_print ("%s", "no signature found");
break; break;
case MU_MSG_PART_SIG_STATUS_GOOD: case MU_MSG_PART_SIG_STATUS_GOOD:
str = g_strdup_printf ("signature verified; %s", color_maybe (MU_COLOR_GREEN);
vdata->report); g_print ("%s", "signature(s) verified");
break; break;
case MU_MSG_PART_SIG_STATUS_BAD: case MU_MSG_PART_SIG_STATUS_BAD:
str = g_strdup_printf ("bad signature; %s", color_maybe (MU_COLOR_RED);
vdata->report); g_print ("%s", "bad signature");
break; break;
case MU_MSG_PART_SIG_STATUS_ERROR: case MU_MSG_PART_SIG_STATUS_ERROR:
str = g_strdup_printf ("verification failed; %s", color_maybe (MU_COLOR_RED);
vdata->report); g_print ("%s", "verification failed");
break; break;
case MU_MSG_PART_SIG_STATUS_FAIL: case MU_MSG_PART_SIG_STATUS_FAIL:
str = g_strdup ("error in verification process"); color_maybe(MU_COLOR_RED);
g_print ("%s", "error in verification process");
break; break;
default: g_return_if_reached (); default: g_return_if_reached ();
} }
print_field ("verdict", str, color); color_maybe (MU_COLOR_DEFAULT);
g_free (str); if (vdata->report)
g_print ("%s%s\n",
(vdata->oneline) ? ";" : "\n",
vdata->report);
} }
@ -483,8 +495,11 @@ mu_cmd_verify (MuConfig *opts, GError **err)
return MU_ERROR; return MU_ERROR;
msgopts = mu_config_get_msg_options (opts) | MU_MSG_OPTION_VERIFY; msgopts = mu_config_get_msg_options (opts) | MU_MSG_OPTION_VERIFY;
vdata.report = NULL; vdata.report = NULL;
vdata.combined_status = MU_MSG_PART_SIG_STATUS_UNSIGNED; vdata.combined_status = MU_MSG_PART_SIG_STATUS_UNSIGNED;
vdata.oneline = FALSE;
mu_msg_part_foreach (msg, msgopts, mu_msg_part_foreach (msg, msgopts,
(MuMsgPartForeachFunc)each_sig, &vdata); (MuMsgPartForeachFunc)each_sig, &vdata);

View File

@ -62,7 +62,7 @@ toggle between long/short display by klicking / M-RET on the
contact." contact."
:type 'boolean :type 'boolean
:group 'mu4e-view) :group 'mu4e-view)
(make-obsolete-variable 'mu4e-view-wrap-lines nil "0.9.9-dev7") (make-obsolete-variable 'mu4e-view-wrap-lines nil "0.9.9-dev7")
(make-obsolete-variable 'mu4e-view-hide-cited nil "0.9.9-dev7") (make-obsolete-variable 'mu4e-view-hide-cited nil "0.9.9-dev7")
@ -71,7 +71,7 @@ contact."
`format-time-string'." `format-time-string'."
:type 'string :type 'string
:group 'mu4e-view) :group 'mu4e-view)
(defcustom mu4e-view-image-max-width 800 (defcustom mu4e-view-image-max-width 800
"The maximum width for images to display; this is only effective "The maximum width for images to display; this is only effective
if you're using an emacs with Imagemagick support, and if you're using an emacs with Imagemagick support, and
@ -772,7 +772,7 @@ N (prefix argument), to the Nth previous header."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Interactive functions ;; Interactive functions
(defun mu4e-view-toggle-hide-cited () (defun mu4e-view-toggle-hide-cited ()
"Toggle hiding of cited lines in the message body." "Toggle hiding of cited lines in the message body."
(interactive) (interactive)
@ -871,7 +871,7 @@ message-at-point if nil) to disk."
(mu4e~view-get-attach-num "Attachment to save" msg))) (mu4e~view-get-attach-num "Attachment to save" msg)))
(att (mu4e~view-get-attach msg attnum)) (att (mu4e~view-get-attach msg attnum))
_ (path (concat mu4e-attachment-dir "/")) _ (path (concat mu4e-attachment-dir "/"))
(fname (plist-get att :name)) (fname (plist-get att :name))
(index (plist-get att :index)) (index (plist-get att :index))
(retry t)) (retry t))
(while retry (while retry
@ -1133,7 +1133,8 @@ or message-at-point."
(erase-buffer) (erase-buffer)
(insert output) (insert output)
(goto-char (point-min)) (goto-char (point-min))
(local-set-key "q" 'kill-buffer-and-window))) (local-set-key "q" 'kill-buffer-and-window))
(setq buffer-read-only t))
(select-window win))) (select-window win)))