From 1ef9dae6bd70c65e56751305563461db6b370f3c Mon Sep 17 00:00:00 2001 From: djcb Date: Wed, 19 Sep 2012 11:36:02 +0300 Subject: [PATCH] * crypto: improved signature / verify output --- lib/mu-msg-crypto.c | 24 +++++++++++++--------- mu/mu-cmd.c | 49 +++++++++++++++++++++++++++++---------------- mu4e/mu4e-view.el | 11 +++++----- 3 files changed, 52 insertions(+), 32 deletions(-) diff --git a/lib/mu-msg-crypto.c b/lib/mu-msg-crypto.c index 3bd7fd65..2e1b33fa 100644 --- a/lib/mu-msg-crypto.c +++ b/lib/mu-msg-crypto.c @@ -215,10 +215,10 @@ get_digestkey_algo_name (GMimeDigestAlgo algo) static char* get_cert_data (GMimeCertificate *cert) { - const char *email, *name, *digest_algo, *pubkey_algo, + const char /**email,*/ *name, *digest_algo, *pubkey_algo, *keyid, *trust; - email = g_mime_certificate_get_email (cert); + /* email = g_mime_certificate_get_email (cert); */ name = g_mime_certificate_get_name (cert); keyid = g_mime_certificate_get_key_id (cert); @@ -239,10 +239,11 @@ get_cert_data (GMimeCertificate *cert) } return g_strdup_printf ( - "signed by: %s <%s>; " - "algos: <%s,%s>; key-id: %s; trust: %s", - name ? name : "?", email ? email : "?", - pubkey_algo, digest_algo, keyid, trust); + "signer:%s, key:%s (%s,%s), trust:%s", + name ? name : "?", + /* email ? email : "?", */ + 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); 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, certdata ? certdata : "?"); g_free (certdata); @@ -287,7 +288,8 @@ get_status_report (GMimeSignatureList *sigs) 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; GMimeSignatureStatus sigstat; @@ -308,8 +310,10 @@ get_status_report (GMimeSignatureList *sigs) } rep = get_verdict_report (msig); - report = g_strdup_printf ("%s%s[%d] %s", report ? report : "", - report ? "; " : "", i, rep); + report = g_strdup_printf ("%s%s%d: %s", + report ? report : "", + report ? "; " : "", i + 1, + rep); g_free (rep); } diff --git a/mu/mu-cmd.c b/mu/mu-cmd.c index 879ba5e0..7d412545 100644 --- a/mu/mu-cmd.c +++ b/mu/mu-cmd.c @@ -403,6 +403,7 @@ mu_cmd_remove (MuStore *store, MuConfig *opts, GError **err) struct _VData { MuMsgPartSigStatus combined_status; char *report; + gboolean oneline; }; typedef struct _VData VData; @@ -410,15 +411,23 @@ static void each_sig (MuMsg *msg, MuMsgPart *part, VData *vdata) { MuMsgPartSigStatusReport *report; + report = part->sig_status_report; if (!report) return; - vdata->report = g_strdup_printf - ("%s%s%s", - vdata->report ? vdata->report : "", - vdata->report ? "; " : "", - report->report); + if (vdata->oneline) + vdata->report = g_strdup_printf + ("%s%s%s", + vdata->report ? vdata->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 || vdata->combined_status == MU_MSG_PART_SIG_STATUS_ERROR) @@ -431,33 +440,36 @@ each_sig (MuMsg *msg, MuMsgPart *part, VData *vdata) static void print_verdict (VData *vdata, gboolean color) { - char *str; + g_print ("verdict: "); switch (vdata->combined_status) { - case MU_MSG_PART_SIG_STATUS_UNSIGNED: - str = g_strdup ("no signature found"); + g_print ("%s", "no signature found"); break; case MU_MSG_PART_SIG_STATUS_GOOD: - str = g_strdup_printf ("signature verified; %s", - vdata->report); + color_maybe (MU_COLOR_GREEN); + g_print ("%s", "signature(s) verified"); break; case MU_MSG_PART_SIG_STATUS_BAD: - str = g_strdup_printf ("bad signature; %s", - vdata->report); + color_maybe (MU_COLOR_RED); + g_print ("%s", "bad signature"); break; case MU_MSG_PART_SIG_STATUS_ERROR: - str = g_strdup_printf ("verification failed; %s", - vdata->report); + color_maybe (MU_COLOR_RED); + g_print ("%s", "verification failed"); break; 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; default: g_return_if_reached (); } - print_field ("verdict", str, color); - g_free (str); + color_maybe (MU_COLOR_DEFAULT); + 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; msgopts = mu_config_get_msg_options (opts) | MU_MSG_OPTION_VERIFY; + vdata.report = NULL; vdata.combined_status = MU_MSG_PART_SIG_STATUS_UNSIGNED; + vdata.oneline = FALSE; + mu_msg_part_foreach (msg, msgopts, (MuMsgPartForeachFunc)each_sig, &vdata); diff --git a/mu4e/mu4e-view.el b/mu4e/mu4e-view.el index f2c9e482..ef5e0bdb 100644 --- a/mu4e/mu4e-view.el +++ b/mu4e/mu4e-view.el @@ -62,7 +62,7 @@ toggle between long/short display by klicking / M-RET on the contact." :type 'boolean :group 'mu4e-view) - + (make-obsolete-variable 'mu4e-view-wrap-lines 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'." :type 'string :group 'mu4e-view) - + (defcustom mu4e-view-image-max-width 800 "The maximum width for images to display; this is only effective if you're using an emacs with Imagemagick support, and @@ -772,7 +772,7 @@ N (prefix argument), to the Nth previous header." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Interactive functions - + (defun mu4e-view-toggle-hide-cited () "Toggle hiding of cited lines in the message body." (interactive) @@ -871,7 +871,7 @@ message-at-point if nil) to disk." (mu4e~view-get-attach-num "Attachment to save" msg))) (att (mu4e~view-get-attach msg attnum)) _ (path (concat mu4e-attachment-dir "/")) - (fname (plist-get att :name)) + (fname (plist-get att :name)) (index (plist-get att :index)) (retry t)) (while retry @@ -1133,7 +1133,8 @@ or message-at-point." (erase-buffer) (insert output) (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)))