gboolean privacy_auto_check_signatures(MimeInfo *mimeinfo) { PrivacySystem *system; cm_return_val_if_fail(mimeinfo != NULL, FALSE); if (mimeinfo->privacy == NULL) privacy_mimeinfo_is_signed(mimeinfo); if (mimeinfo->privacy == NULL) return FALSE; system = privacy_data_get_system(mimeinfo->privacy); if (system == NULL) return FALSE; if (system->auto_check_signatures == NULL) return FALSE; return system->auto_check_signatures(); }
gchar *privacy_mimeinfo_sig_info_full(MimeInfo *mimeinfo) { PrivacySystem *system; cm_return_val_if_fail(mimeinfo != NULL, NULL); if (mimeinfo->privacy == NULL) privacy_mimeinfo_is_signed(mimeinfo); if (mimeinfo->privacy == NULL) return g_strdup(_("No signature found")); system = privacy_data_get_system(mimeinfo->privacy); if (system == NULL) return g_strdup(_("No signature found")); if (system->get_sig_info_full == NULL) return g_strdup(_("No information available")); return system->get_sig_info_full(mimeinfo); }
SignatureStatus privacy_mimeinfo_get_sig_status(MimeInfo *mimeinfo) { PrivacySystem *system; cm_return_val_if_fail(mimeinfo != NULL, -1); if (mimeinfo->privacy == NULL) privacy_mimeinfo_is_signed(mimeinfo); if (mimeinfo->privacy == NULL) return SIGNATURE_UNCHECKED; system = privacy_data_get_system(mimeinfo->privacy); if (system == NULL) return SIGNATURE_UNCHECKED; if (system->get_sig_status == NULL) return SIGNATURE_UNCHECKED; return system->get_sig_status(mimeinfo); }
static void msginfo_set_signed_flag(GNode *node, gpointer data) { struct SignedState *sstate = (struct SignedState *)data; MsgInfo *msginfo = sstate->msginfo; MimeInfo *mimeinfo = node->data; if (privacy_mimeinfo_is_signed(mimeinfo)) { procmsg_msginfo_set_flags(msginfo, 0, MSG_SIGNED); if (sstate->system && !*(sstate->system) && mimeinfo->privacy) *(sstate->system) = g_strdup(mimeinfo->privacy->system->id); } if (privacy_mimeinfo_is_encrypted(mimeinfo)) { procmsg_msginfo_set_flags(msginfo, 0, MSG_ENCRYPTED); if (sstate->system && !*(sstate->system) && mimeinfo->privacy) *(sstate->system) = g_strdup(mimeinfo->privacy->system->id); } else { /* searching inside encrypted parts doesn't really make sense */ g_node_children_foreach(mimeinfo->node, G_TRAVERSE_ALL, msginfo_set_signed_flag, sstate); } }
/** * Check the signature of a MimeInfo. privacy_mimeinfo_is_signed * should be called before otherwise it is done by this function. * If the MimeInfo is not signed an error code will be returned. * * \return Error code indicating the result of the check, * < 0 if an error occured */ gint privacy_mimeinfo_check_signature(MimeInfo *mimeinfo) { PrivacySystem *system; cm_return_val_if_fail(mimeinfo != NULL, -1); if (mimeinfo->privacy == NULL) privacy_mimeinfo_is_signed(mimeinfo); if (mimeinfo->privacy == NULL) return -1; system = privacy_data_get_system(mimeinfo->privacy); if (system == NULL) return -1; if (system->check_signature == NULL) return -1; return system->check_signature(mimeinfo); }
static void update_signature_info(MimeView *mimeview, MimeInfo *selected) { MimeInfo *siginfo; g_return_if_fail(mimeview != NULL); g_return_if_fail(selected != NULL); siginfo = selected; while (siginfo != NULL) { if (privacy_mimeinfo_is_signed(siginfo)) break; siginfo = procmime_mimeinfo_parent(siginfo); } mimeview->siginfo = siginfo; if (siginfo == NULL) { noticeview_hide(mimeview->siginfoview); return; } update_signature_noticeview(mimeview, siginfo); noticeview_show(mimeview->siginfoview); }
static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo) { GtkWidget *pixmap; GtkWidget *vbox; GtkWidget *button; gchar *tip; gchar *tiptmp; const gchar *desc = NULL; gchar *sigshort = NULL; gchar *content_type; StockPixmap stockp; MimeInfo *partinfo; MimeInfo *siginfo = NULL; MimeInfo *encrypted = NULL; vbox = mimeview->icon_vbox; mimeview->icon_count++; button = gtk_toggle_button_new(); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); gtk_object_set_data(GTK_OBJECT(button), "icon_number", GINT_TO_POINTER(mimeview->icon_count)); gtk_object_set_data(GTK_OBJECT(button), "partinfo", mimeinfo); switch (mimeinfo->type) { case MIMETYPE_TEXT: if (mimeinfo->subtype && !g_strcasecmp(mimeinfo->subtype, "html")) stockp = STOCK_PIXMAP_MIME_TEXT_HTML; else if (mimeinfo->subtype && !g_strcasecmp(mimeinfo->subtype, "enriched")) stockp = STOCK_PIXMAP_MIME_TEXT_ENRICHED; else stockp = STOCK_PIXMAP_MIME_TEXT_PLAIN; break; case MIMETYPE_MESSAGE: stockp = STOCK_PIXMAP_MIME_MESSAGE; break; case MIMETYPE_APPLICATION: stockp = STOCK_PIXMAP_MIME_APPLICATION; break; case MIMETYPE_IMAGE: stockp = STOCK_PIXMAP_MIME_IMAGE; break; case MIMETYPE_AUDIO: stockp = STOCK_PIXMAP_MIME_AUDIO; break; default: stockp = STOCK_PIXMAP_MIME_UNKNOWN; break; } partinfo = mimeinfo; while (partinfo != NULL) { if (privacy_mimeinfo_is_signed(partinfo)) { siginfo = partinfo; break; } if (privacy_mimeinfo_is_encrypted(partinfo)) { encrypted = partinfo; break; } partinfo = procmime_mimeinfo_parent(partinfo); } if (siginfo != NULL) { switch (privacy_mimeinfo_get_sig_status(siginfo)) { case SIGNATURE_UNCHECKED: case SIGNATURE_CHECK_FAILED: pixmap = stock_pixmap_widget_with_overlay(mimeview->mainwin->window, stockp, STOCK_PIXMAP_PRIVACY_EMBLEM_SIGNED, OVERLAY_BOTTOM_RIGHT, 6, 3); break; case SIGNATURE_OK: pixmap = stock_pixmap_widget_with_overlay(mimeview->mainwin->window, stockp, STOCK_PIXMAP_PRIVACY_EMBLEM_PASSED, OVERLAY_BOTTOM_RIGHT, 6, 3); break; case SIGNATURE_WARN: pixmap = stock_pixmap_widget_with_overlay(mimeview->mainwin->window, stockp, STOCK_PIXMAP_PRIVACY_EMBLEM_WARN, OVERLAY_BOTTOM_RIGHT, 6, 3); break; case SIGNATURE_INVALID: pixmap = stock_pixmap_widget_with_overlay(mimeview->mainwin->window, stockp, STOCK_PIXMAP_PRIVACY_EMBLEM_FAILED, OVERLAY_BOTTOM_RIGHT, 6, 3); break; } sigshort = privacy_mimeinfo_sig_info_short(siginfo); } else if (encrypted != NULL) { pixmap = stock_pixmap_widget_with_overlay(mimeview->mainwin->window, stockp, STOCK_PIXMAP_PRIVACY_EMBLEM_ENCRYPTED, OVERLAY_BOTTOM_RIGHT, 6, 3); } else { pixmap = stock_pixmap_widget_with_overlay(mimeview->mainwin->window, stockp, 0, OVERLAY_NONE, 6, 3); } gtk_container_add(GTK_CONTAINER(button), pixmap); if (!desc) { if (prefs_common.attach_desc) desc = get_part_description(mimeinfo); else desc = get_part_name(mimeinfo); } content_type = procmime_get_content_type_str(mimeinfo->type, mimeinfo->subtype); tip = g_strjoin("\n", content_type, to_human_readable(mimeinfo->length), NULL); g_free(content_type); if (desc && *desc) { tiptmp = g_strjoin("\n", desc, tip, NULL); g_free(tip); tip = tiptmp; } if (sigshort && *sigshort) { tiptmp = g_strjoin("\n", tip, sigshort, NULL); g_free(tip); tip = tiptmp; } g_free(sigshort); gtk_tooltips_set_tip(mimeview->tooltips, button, tip, NULL); g_free(tip); gtk_widget_show_all(button); gtk_signal_connect(GTK_OBJECT(button), "button_release_event", GTK_SIGNAL_FUNC(icon_clicked_cb), mimeview); gtk_signal_connect(GTK_OBJECT(button), "key_press_event", GTK_SIGNAL_FUNC(icon_key_pressed), mimeview); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0); }