* crypto: improved signature / verify output
This commit is contained in:
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
39
mu/mu-cmd.c
39
mu/mu-cmd.c
@ -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;
|
||||||
|
|
||||||
|
if (vdata->oneline)
|
||||||
vdata->report = g_strdup_printf
|
vdata->report = g_strdup_printf
|
||||||
("%s%s%s",
|
("%s%s%s",
|
||||||
vdata->report ? vdata->report : "",
|
vdata->report ? vdata->report : "",
|
||||||
vdata->report ? "; " : "",
|
vdata->report ? "; " : "",
|
||||||
report->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);
|
||||||
|
|
||||||
|
|||||||
@ -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)))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user