commit f5b8cdb85f2a18f55fe19fd195c009d0f0c73860
parent 2157343a9aad5a7d071dd1d8dc60c5ec02b1e05e
Author: Oliver Lowe <o@olowe.co>
Date: Fri, 29 Aug 2025 14:30:18 +1000
Just use TLS cert manager from the OS
Diffstat:
14 files changed, 8 insertions(+), 1144 deletions(-)
diff --git a/src/Makefile.am b/src/Makefile.am
@@ -117,7 +117,6 @@ claws_mail_SOURCES = \
send_message.c \
setup.c \
sourcewindow.c \
- ssl_manager.c \
statusbar.c \
stock_pixmap.c \
summary_search.c \
@@ -216,7 +215,6 @@ claws_mailinclude_HEADERS = \
send_message.h \
setup.h \
sourcewindow.h \
- ssl_manager.h \
statusbar.h \
stock_pixmap.h \
summary_search.h \
diff --git a/src/account.c b/src/account.c
@@ -934,7 +934,6 @@ static void account_clone(GtkWidget *widget, gpointer data)
ACP_FASSIGN(ssl_imap);
ACP_FASSIGN(ssl_nntp);
ACP_FASSIGN(ssl_smtp);
- ACP_FASSIGN(ssl_certs_auto_accept);
ACP_FASSIGN(use_nonblocking_ssl);
ACP_FASSIGN(use_tls_sni);
ACP_FASSIGN(in_ssl_client_cert_file);
diff --git a/src/common/session.c b/src/common/session.c
@@ -169,7 +169,7 @@ static gint session_connect_cb(SockInfo *sock, gpointer data)
session->sock = sock;
sock->account = session->account;
sock->is_smtp = session->is_smtp;
- sock->ssl_cert_auto_accept = session->ssl_cert_auto_accept;
+ sock->ssl_cert_auto_accept = TRUE;
#ifdef USE_GNUTLS
sock->gnutls_priority = session->gnutls_priority;
diff --git a/src/etpan/imap-thread.c b/src/etpan/imap-thread.c
@@ -588,7 +588,7 @@ int imap_threaded_connect_ssl(Folder * folder, const char * server, int port)
param.account = folder->account;
if (folder->account)
- accept_if_valid = folder->account->ssl_certs_auto_accept;
+ accept_if_valid = TRUE;
refresh_resolvers();
if (threaded_run(folder, ¶m, &result, connect_ssl_run))
@@ -1146,7 +1146,7 @@ int imap_threaded_starttls(Folder * folder, const gchar *host, int port)
param.account = folder->account;
if (folder->account)
- accept_if_valid = folder->account->ssl_certs_auto_accept;
+ accept_if_valid = TRUE;
if (threaded_run(folder, ¶m, &result, starttls_run))
return MAILIMAP_ERROR_INVAL;
diff --git a/src/gtk/Makefile.am b/src/gtk/Makefile.am
@@ -30,7 +30,6 @@ libclawsgtk_la_SOURCES = \
prefswindow.c \
progressdialog.c \
quicksearch.c \
- sslcertwindow.c \
claws-marshal.c
clawsgtkincludedir = $(pkgincludedir)/gtk
@@ -53,7 +52,6 @@ clawsgtkinclude_HEADERS = \
prefswindow.h \
progressdialog.h \
quicksearch.h \
- sslcertwindow.h \
claws-marshal.h \
gtkcmctree.h \
gtkcmclist.h \
diff --git a/src/gtk/sslcertwindow.c b/src/gtk/sslcertwindow.c
@@ -1,557 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2022 the Claws Mail team and Colin Leroy
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#include "claws-features.h"
-#endif
-
-#ifdef USE_GNUTLS
-
-#include <gnutls/gnutls.h>
-#include <gnutls/x509.h>
-#include <gnutls/crypto.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "prefs_common.h"
-#include "defs.h"
-#include "ssl_certificate.h"
-#include "utils.h"
-#include "alertpanel.h"
-#include "hooks.h"
-
-static gboolean sslcertwindow_ask_new_cert(SSLCertificate *cert);
-static gboolean sslcertwindow_ask_expired_cert(SSLCertificate *cert);
-static gboolean sslcertwindow_ask_changed_cert(SSLCertificate *old_cert, SSLCertificate *new_cert);
-
-static GtkWidget *cert_presenter(SSLCertificate *cert)
-{
- GtkWidget *vbox = NULL;
- GtkWidget *hbox = NULL;
- GtkWidget *frame_owner = NULL;
- GtkWidget *frame_signer = NULL;
- GtkWidget *frame_status = NULL;
- GtkWidget *owner_table = NULL;
- GtkWidget *signer_table = NULL;
- GtkWidget *status_table = NULL;
- GtkWidget *label = NULL;
-
- char *issuer_commonname, *issuer_location, *issuer_organization;
- char *subject_commonname, *subject_location, *subject_organization;
- char *sig_status, *exp_date;
- char *sha1_fingerprint, *sha256_fingerprint, *fingerprint;
- size_t n;
- char buf[100];
- unsigned char md[128];
- char *tmp;
- time_t exp_time_t;
- struct tm lt;
- guint ret;
-
- /* issuer */
- issuer_commonname = g_malloc(BUFFSIZE);
- issuer_location = g_malloc(BUFFSIZE);
- issuer_organization = g_malloc(BUFFSIZE);
- subject_commonname = g_malloc(BUFFSIZE);
- subject_location = g_malloc(BUFFSIZE);
- subject_organization = g_malloc(BUFFSIZE);
-
- n = BUFFSIZE;
- if (gnutls_x509_crt_get_issuer_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_COMMON_NAME, 0, 0, issuer_commonname, &n))
- strncpy(issuer_commonname, _("<not in certificate>"), BUFFSIZE-1);
- n = BUFFSIZE;
-
- if (gnutls_x509_crt_get_issuer_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_LOCALITY_NAME, 0, 0, issuer_location, &n)) {
- if (gnutls_x509_crt_get_issuer_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_COUNTRY_NAME, 0, 0, issuer_location, &n)) {
- strncpy(issuer_location, _("<not in certificate>"), BUFFSIZE-1);
- }
- } else {
- tmp = g_malloc(BUFFSIZE);
- if (gnutls_x509_crt_get_issuer_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_COUNTRY_NAME, 0, 0, tmp, &n) == 0) {
- strncat(issuer_location, ", ", BUFFSIZE-strlen(issuer_location)-1);
- strncat(issuer_location, tmp, BUFFSIZE-strlen(issuer_location)-1);
- }
- g_free(tmp);
- }
-
- n = BUFFSIZE;
- if (gnutls_x509_crt_get_issuer_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_ORGANIZATION_NAME, 0, 0, issuer_organization, &n))
- strncpy(issuer_organization, _("<not in certificate>"), BUFFSIZE-1);
-
- n = BUFFSIZE;
- if (gnutls_x509_crt_get_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_COMMON_NAME, 0, 0, subject_commonname, &n))
- strncpy(subject_commonname, _("<not in certificate>"), BUFFSIZE-1);
- n = BUFFSIZE;
-
- if (gnutls_x509_crt_get_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_LOCALITY_NAME, 0, 0, subject_location, &n)) {
- if (gnutls_x509_crt_get_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_COUNTRY_NAME, 0, 0, subject_location, &n)) {
- strncpy(subject_location, _("<not in certificate>"), BUFFSIZE-1);
- }
- } else {
- tmp = g_malloc(BUFFSIZE);
- if (gnutls_x509_crt_get_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_COUNTRY_NAME, 0, 0, tmp, &n) == 0) {
- strncat(subject_location, ", ", BUFFSIZE-strlen(subject_location)-1);
- strncat(subject_location, tmp, BUFFSIZE-strlen(subject_location)-1);
- }
- g_free(tmp);
- }
-
- n = BUFFSIZE;
- if (gnutls_x509_crt_get_dn_by_oid(cert->x509_cert,
- GNUTLS_OID_X520_ORGANIZATION_NAME, 0, 0, subject_organization, &n))
- strncpy(subject_organization, _("<not in certificate>"), BUFFSIZE-1);
-
- exp_time_t = gnutls_x509_crt_get_expiration_time(cert->x509_cert);
-
- memset(buf, 0, sizeof(buf));
- if (exp_time_t > 0) {
- fast_strftime(buf, sizeof(buf)-1, prefs_common.date_format, localtime_r(&exp_time_t, <));
- exp_date = (*buf) ? g_strdup(buf):g_strdup("?");
- } else
- exp_date = g_strdup("");
-
- /* fingerprints */
- n = 0;
- memset(md, 0, sizeof(md));
- if ((ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA1, md, &n)) == GNUTLS_E_SHORT_MEMORY_BUFFER) {
- if (n <= sizeof(md))
- ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA1, md, &n);
- }
-
- if (ret != 0) {
- g_warning("failed to obtain SHA1 fingerprint: %d", ret);
- sha1_fingerprint = g_strdup("-");
- } else {
- sha1_fingerprint = readable_fingerprint(md, (int)n);
- }
-
- n = 0;
- memset(md, 0, sizeof(md));
- if ((ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA256, md, &n)) == GNUTLS_E_SHORT_MEMORY_BUFFER) {
- if (n <= sizeof(md))
- ret = gnutls_x509_crt_get_fingerprint(cert->x509_cert, GNUTLS_DIG_SHA256, md, &n);
- }
-
- if (ret != 0) {
- g_warning("failed to obtain SHA256 fingerprint: %d", ret);
- sha256_fingerprint = g_strdup("-");
- } else {
- sha256_fingerprint = readable_fingerprint(md, (int)n);
- }
-
-
- /* signature */
- sig_status = ssl_certificate_check_signer(cert, cert->status);
-
- if (sig_status==NULL)
- sig_status = g_strdup_printf(_("Correct%s"),exp_time_t < time(NULL)? _(" (expired)"): "");
- else if (exp_time_t < time(NULL))
- sig_status = g_strconcat(sig_status,_(" (expired)"),NULL);
-
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
- hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
-
- frame_owner = gtk_frame_new(_("Owner"));
- frame_signer = gtk_frame_new(_("Signer"));
- frame_status = gtk_frame_new(_("Status"));
-
- owner_table = gtk_grid_new();
- signer_table = gtk_grid_new();
- status_table = gtk_grid_new();
-
- label = gtk_label_new(_("Name: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(owner_table), label, 0, 0, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(subject_commonname);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(owner_table), label, 1, 0, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(_("Organization: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(owner_table), label, 0, 1, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(subject_organization);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(owner_table), label, 1, 1, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(_("Location: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(owner_table), label, 0, 2, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(subject_location);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(owner_table), label, 1, 2, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(_("Name: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(signer_table), label, 0, 0, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(issuer_commonname);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(signer_table), label, 1, 0, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(_("Organization: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(signer_table), label, 0, 1, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(issuer_organization);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(signer_table), label, 1, 1, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(_("Location: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(signer_table), label, 0, 2, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(issuer_location);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(signer_table), label, 1, 2, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(_("Fingerprint: \n"));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(status_table), label, 0, 0, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- fingerprint = g_strdup_printf("SHA1: %s\nSHA256: %s",
- sha1_fingerprint, sha256_fingerprint);
- label = gtk_label_new(fingerprint);
- g_free(fingerprint);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(status_table), label, 1, 0, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(_("Signature status: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(status_table), label, 0, 1, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(sig_status);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(status_table), label, 1, 1, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(exp_time_t < time(NULL)? _("Expired on: "): _("Expires on: "));
- gtk_label_set_xalign(GTK_LABEL(label), 1.0);
- gtk_grid_attach(GTK_GRID(status_table), label, 0, 2, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- label = gtk_label_new(exp_date);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_grid_attach(GTK_GRID(status_table), label, 1, 2, 1, 1);
- gtk_widget_set_hexpand(label, TRUE);
- gtk_widget_set_halign(label, GTK_ALIGN_FILL);
-
- gtk_container_add(GTK_CONTAINER(frame_owner), GTK_WIDGET(owner_table));
- gtk_container_add(GTK_CONTAINER(frame_signer), GTK_WIDGET(signer_table));
- gtk_container_add(GTK_CONTAINER(frame_status), GTK_WIDGET(status_table));
-
- gtk_box_pack_end(GTK_BOX(hbox), frame_signer, TRUE, TRUE, 0);
- gtk_box_pack_end(GTK_BOX(hbox), frame_owner, TRUE, TRUE, 0);
- gtk_box_pack_end(GTK_BOX(vbox), frame_status, TRUE, TRUE, 0);
- gtk_box_pack_end(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
-
- gtk_widget_show_all(vbox);
-
- g_free(issuer_commonname);
- g_free(issuer_location);
- g_free(issuer_organization);
- g_free(subject_commonname);
- g_free(subject_location);
- g_free(subject_organization);
- g_free(sha1_fingerprint);
- g_free(sha256_fingerprint);
- g_free(sig_status);
- g_free(exp_date);
- return vbox;
-}
-
-static gboolean sslcert_ask_hook(gpointer source, gpointer data)
-{
- SSLCertHookData *hookdata = (SSLCertHookData *)source;
-
- if (hookdata == NULL) {
- return FALSE;
- }
-
- if (prefs_common.skip_ssl_cert_check) {
- hookdata->accept = TRUE;
- return TRUE;
- }
-
- if (hookdata->old_cert == NULL) {
- if (hookdata->expired)
- hookdata->accept = sslcertwindow_ask_expired_cert(hookdata->cert);
- else
- hookdata->accept = sslcertwindow_ask_new_cert(hookdata->cert);
- } else {
- hookdata->accept = sslcertwindow_ask_changed_cert(hookdata->old_cert, hookdata->cert);
- }
-
- return TRUE;
-}
-
-void sslcertwindow_register_hook(void)
-{
- hooks_register_hook(SSLCERT_ASK_HOOKLIST, sslcert_ask_hook, NULL);
-}
-
-void sslcertwindow_show_cert(SSLCertificate *cert)
-{
- GtkWidget *cert_widget = cert_presenter(cert);
- gchar *buf;
-
- buf = g_strdup_printf(_("TLS certificate for %s"), cert->host);
- alertpanel_full(buf, NULL, "window-close-symbolic", _("_Close"), NULL, NULL, NULL, NULL,
- ALERTFOCUS_FIRST, FALSE, cert_widget, ALERT_NOTICE);
- g_free(buf);
-}
-
-static gchar *sslcertwindow_get_invalid_str(SSLCertificate *cert)
-{
- gchar *subject_cn = NULL;
- gchar *str = NULL;
-
- if (ssl_certificate_check_subject_cn(cert))
- return g_strdup("");
-
- subject_cn = ssl_certificate_get_subject_cn(cert);
-
- str = g_strdup_printf(_("Certificate is for %s, but connection is to %s.\n"
- "You may be connecting to a rogue server.\n\n"),
- subject_cn, cert->host);
- g_free(subject_cn);
-
- return str;
-}
-
-static gboolean sslcertwindow_ask_new_cert(SSLCertificate *cert)
-{
- gchar *buf, *sig_status;
- AlertValue val;
- GtkWidget *vbox;
- GtkWidget *label;
- GtkWidget *button;
- GtkWidget *cert_widget;
- gchar *invalid_str = sslcertwindow_get_invalid_str(cert);
- const gchar *title;
-
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
- buf = g_strdup_printf(_("Certificate for %s is unknown.\n%sDo you want to accept it?"), cert->host, invalid_str);
- g_free(invalid_str);
-
- label = gtk_label_new(buf);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
- g_free(buf);
-
- sig_status = ssl_certificate_check_signer(cert, cert->status);
- if (sig_status==NULL)
- sig_status = g_strdup(_("Correct"));
-
- buf = g_strdup_printf(_("Signature status: %s"), sig_status);
- label = gtk_label_new(buf);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
- g_free(buf);
- g_free(sig_status);
-
- button = gtk_expander_new_with_mnemonic(_("_View certificate"));
- gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
- cert_widget = cert_presenter(cert);
- gtk_container_add(GTK_CONTAINER(button), cert_widget);
-
- if (!ssl_certificate_check_subject_cn(cert))
- title = _("TLS certificate is invalid");
- else
- title = _("TLS certificate is unknown");
-
- val = alertpanel_full(title, NULL,
- NULL, _("_Cancel connection"), NULL, _("_Accept and save"),
- NULL, NULL, ALERTFOCUS_FIRST, FALSE, vbox, ALERT_QUESTION);
-
- return (val == G_ALERTALTERNATE);
-}
-
-static gboolean sslcertwindow_ask_expired_cert(SSLCertificate *cert)
-{
- gchar *buf, *sig_status;
- AlertValue val;
- GtkWidget *vbox;
- GtkWidget *label;
- GtkWidget *button;
- GtkWidget *cert_widget;
- gchar *invalid_str = sslcertwindow_get_invalid_str(cert);
- const gchar *title;
-
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
- buf = g_strdup_printf(_("Certificate for %s is expired.\n%sDo you want to continue?"), cert->host, invalid_str);
- g_free(invalid_str);
-
- label = gtk_label_new(buf);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
- g_free(buf);
-
- sig_status = ssl_certificate_check_signer(cert, cert->status);
-
- if (sig_status==NULL)
- sig_status = g_strdup(_("Correct"));
-
- buf = g_strdup_printf(_("Signature status: %s"), sig_status);
- label = gtk_label_new(buf);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
- g_free(buf);
- g_free(sig_status);
-
- button = gtk_expander_new_with_mnemonic(_("_View certificate"));
- gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
- cert_widget = cert_presenter(cert);
- gtk_container_add(GTK_CONTAINER(button), cert_widget);
-
- if (!ssl_certificate_check_subject_cn(cert))
- title = _("TLS certificate is invalid and expired");
- else
- title = _("TLS certificate is expired");
-
- val = alertpanel_full(title, NULL,
- NULL, _("_Cancel connection"), NULL, _("_Accept"),
- NULL, NULL, ALERTFOCUS_FIRST, FALSE, vbox, ALERT_QUESTION);
-
- return (val == G_ALERTALTERNATE);
-}
-
-static gboolean sslcertwindow_ask_changed_cert(SSLCertificate *old_cert, SSLCertificate *new_cert)
-{
- GtkWidget *old_cert_widget = cert_presenter(old_cert);
- GtkWidget *new_cert_widget = cert_presenter(new_cert);
- GtkWidget *vbox;
- gchar *buf, *sig_status;
- GtkWidget *vbox2;
- GtkWidget *label;
- GtkWidget *button;
- AlertValue val;
- gchar *invalid_str = sslcertwindow_get_invalid_str(new_cert);
- const gchar *title;
-
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
- label = gtk_label_new(_("New certificate:"));
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_end(GTK_BOX(vbox), new_cert_widget, TRUE, TRUE, 0);
- gtk_box_pack_end(GTK_BOX(vbox), label, TRUE, TRUE, 0);
- gtk_box_pack_end(GTK_BOX(vbox), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), TRUE, TRUE, 0);
- label = gtk_label_new(_("Known certificate:"));
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_end(GTK_BOX(vbox), old_cert_widget, TRUE, TRUE, 0);
- gtk_box_pack_end(GTK_BOX(vbox), label, TRUE, TRUE, 0);
- gtk_widget_show_all(vbox);
-
- vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
- buf = g_strdup_printf(_("Certificate for %s has changed.\n%sDo you want to accept it?"), new_cert->host, invalid_str);
- g_free(invalid_str);
-
- label = gtk_label_new(buf);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0);
- g_free(buf);
-
- sig_status = ssl_certificate_check_signer(new_cert, new_cert->status);
-
- if (sig_status==NULL)
- sig_status = g_strdup(_("Correct"));
-
- buf = g_strdup_printf(_("Signature status: %s"), sig_status);
- label = gtk_label_new(buf);
- gtk_label_set_selectable(GTK_LABEL(label), TRUE);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_box_pack_start(GTK_BOX(vbox2), label, TRUE, TRUE, 0);
- g_free(buf);
- g_free(sig_status);
-
- button = gtk_expander_new_with_mnemonic(_("_View certificates"));
- gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0);
- gtk_container_add(GTK_CONTAINER(button), vbox);
-
- if (!ssl_certificate_check_subject_cn(new_cert))
- title = _("TLS certificate changed and is invalid");
- else
- title = _("TLS certificate changed");
- val = alertpanel_full(title, NULL,
- NULL, _("_Cancel connection"), NULL, _("_Accept and save"),
- NULL, NULL, ALERTFOCUS_FIRST, FALSE, vbox2, ALERT_WARNING);
-
- return (val == G_ALERTALTERNATE);
-}
-#endif
diff --git a/src/gtk/sslcertwindow.h b/src/gtk/sslcertwindow.h
@@ -1,37 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net>
- * and the Claws Mail team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef __SSL_CERTWINDOW_H__
-#define __SSL_CERTWINDOW_H__
-
-#ifdef HAVE_CONFIG_H
-#include "claws-features.h"
-#endif
-
-#ifdef USE_GNUTLS
-#include <glib.h>
-#include <gtk/gtk.h>
-#include "ssl_certificate.h"
-
-void sslcertwindow_show_cert(SSLCertificate *cert);
-void sslcertwindow_register_hook(void);
-
-#endif /* USE_GNUTLS */
-#endif /* __SSL_CERTWINDOW_H__ */
diff --git a/src/mainwindow.c b/src/mainwindow.c
@@ -66,8 +66,6 @@
#include "about.h"
#include "manual.h"
#include "version.h"
-#include "ssl_manager.h"
-#include "sslcertwindow.h"
#include "prefs_gtk.h"
#include "hooks.h"
#include "progressindicator.h"
@@ -319,10 +317,6 @@ static void prefs_actions_open_cb (GtkAction *action,
static void prefs_account_open_cb (GtkAction *action,
gpointer data);
-#ifdef USE_GNUTLS
-static void ssl_manager_open_cb (GtkAction *action,
- gpointer data);
-#endif
static void new_account_cb (GtkAction *action,
gpointer data);
@@ -663,10 +657,6 @@ static GtkActionEntry mainwin_entries[] =
{"Tools/Execute", NULL, N_("E_xecute"), "X", NULL, G_CALLBACK(execute_summary_cb) },
{"Tools/Expunge", NULL, N_("Exp_unge"), "<control>E", NULL, G_CALLBACK(expunge_summary_cb) },
-#ifdef USE_GNUTLS
- /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
- {"Tools/TLSCertificates", NULL, N_("TLS cer_tificates"), NULL, NULL, G_CALLBACK(ssl_manager_open_cb) },
-#endif
/* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
{"Tools/NetworkLog", NULL, N_("Network _Log"), "<shift><control>L", NULL, G_CALLBACK(log_window_show_cb) },
@@ -1296,10 +1286,7 @@ MainWindow *main_window_create()
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Tools", "Execute", "Tools/Execute", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Tools", "Expunge", "Tools/Expunge", GTK_UI_MANAGER_MENUITEM)
-#ifdef USE_GNUTLS
- MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Tools", "Separator6", "Tools/---", GTK_UI_MANAGER_SEPARATOR)
- MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Tools", "TLSCertificates", "Tools/TLSCertificates", GTK_UI_MANAGER_MENUITEM)
-#endif
+
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Tools", "Separator7", "Tools/---", GTK_UI_MANAGER_SEPARATOR)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Tools", "NetworkLog", "Tools/NetworkLog", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Tools", "Separator8", "Tools/---", GTK_UI_MANAGER_SEPARATOR)
@@ -1568,9 +1555,7 @@ MainWindow *main_window_create()
folderview_init(folderview);
summary_init(summaryview);
messageview_init(messageview);
-#ifdef USE_GNUTLS
- sslcertwindow_register_hook();
-#endif
+
mainwin->lock_count = 0;
mainwin->menu_lock_count = 0;
mainwin->cursor_count = 0;
@@ -4171,13 +4156,6 @@ static void prefs_actions_open_cb(GtkAction *action, gpointer data)
prefs_actions_open(mainwin);
}
-#ifdef USE_GNUTLS
-static void ssl_manager_open_cb(GtkAction *action, gpointer data)
-{
- MainWindow *mainwin = (MainWindow *)data;
- ssl_manager_open(mainwin);
-}
-#endif
static void prefs_account_open_cb(GtkAction *action, gpointer data)
{
MainWindow *mainwin = (MainWindow *)data;
diff --git a/src/pop.c b/src/pop.c
@@ -540,7 +540,7 @@ Session *pop3_session_new(PrefsAccount *account)
SESSION(session)->recv_msg = pop3_session_recv_msg;
SESSION(session)->recv_data_finished = pop3_session_recv_data_finished;
SESSION(session)->send_data_finished = NULL;
- SESSION(session)->ssl_cert_auto_accept = account->ssl_certs_auto_accept;
+ SESSION(session)->ssl_cert_auto_accept = TRUE;
SESSION(session)->destroy = pop3_session_destroy;
#ifdef USE_GNUTLS
diff --git a/src/prefs_account.c b/src/prefs_account.c
@@ -310,7 +310,6 @@ typedef struct SSLPage
GtkWidget *entry_out_cert_file;
GtkWidget *entry_out_cert_pass;
- GtkWidget *ssl_certs_auto_accept_checkbtn;
GtkWidget *use_nonblocking_ssl_checkbtn;
} SSLPage;
@@ -779,10 +778,6 @@ static PrefParam ssl_param[] = {
prefs_account_enum_set_data_from_radiobtn,
prefs_account_enum_set_radiobtn},
- {"ssl_certs_auto_accept", "1", &tmp_ac_prefs.ssl_certs_auto_accept, P_BOOL,
- &ssl_page.ssl_certs_auto_accept_checkbtn,
- prefs_set_data_from_toggle, prefs_set_toggle},
-
{"use_nonblocking_ssl", "1", &tmp_ac_prefs.use_nonblocking_ssl, P_BOOL,
&ssl_page.use_nonblocking_ssl_checkbtn,
prefs_set_data_from_toggle, prefs_set_toggle},
@@ -826,9 +821,6 @@ static PrefParam ssl_param[] = {
{"out_ssl_client_cert_pass", "", &tmp_ac_prefs.out_ssl_client_cert_pass, P_PASSWORD,
NULL, NULL, NULL},
- {"ssl_certs_auto_accept", "1", &tmp_ac_prefs.ssl_certs_auto_accept, P_BOOL,
- NULL, NULL, NULL},
-
{"use_nonblocking_ssl", "1", &tmp_ac_prefs.use_nonblocking_ssl, P_BOOL,
NULL, NULL, NULL},
#endif /* USE_GNUTLS */
@@ -2666,7 +2658,6 @@ static void ssl_create_widget_func(PrefsPage * _page,
GtkWidget *entry_out_cert_pass;
GtkWidget *vbox7;
- GtkWidget *ssl_certs_auto_accept_checkbtn;
GtkWidget *use_nonblocking_ssl_checkbtn;
GtkWidget *hbox;
GtkWidget *hbox_spc;
@@ -2823,11 +2814,7 @@ static void ssl_create_widget_func(PrefsPage * _page,
gtk_widget_show (vbox7);
gtk_box_pack_start (GTK_BOX (vbox1), vbox7, FALSE, FALSE, 0);
- PACK_CHECK_BUTTON(vbox7, ssl_certs_auto_accept_checkbtn,
- _("Automatically accept valid TLS certificates"));
-
- PACK_CHECK_BUTTON(vbox7, use_nonblocking_ssl_checkbtn,
- _("Use non-blocking TLS"));
+ PACK_CHECK_BUTTON(vbox7, use_nonblocking_ssl_checkbtn, "Use non-blocking TLS");
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_show (hbox);
@@ -2868,7 +2855,6 @@ static void ssl_create_widget_func(PrefsPage * _page,
page->entry_out_cert_file = entry_out_cert_file;
page->entry_out_cert_pass = entry_out_cert_pass;
- page->ssl_certs_auto_accept_checkbtn = ssl_certs_auto_accept_checkbtn;
page->use_nonblocking_ssl_checkbtn = use_nonblocking_ssl_checkbtn;
tmp_ac_prefs = *ac_prefs;
diff --git a/src/prefs_account.h b/src/prefs_account.h
@@ -90,7 +90,6 @@ struct _PrefsAccount
gchar *in_ssl_client_cert_file;
gchar *in_ssl_client_cert_pass;
- gboolean ssl_certs_auto_accept;
gboolean use_nonblocking_ssl;
gboolean use_tls_sni;
diff --git a/src/send_message.c b/src/send_message.c
@@ -253,7 +253,7 @@ gint send_message_smtp_full(PrefsAccount *ac_prefs, GSList *to_list, FILE *fp, g
if (!ac_prefs->session) {
/* we can't reuse a previously initialised session */
session = smtp_session_new(ac_prefs);
- session->ssl_cert_auto_accept = ac_prefs->ssl_certs_auto_accept;
+ session->ssl_cert_auto_accept = TRUE;
smtp_session = SMTP_SESSION(session);
diff --git a/src/ssl_manager.c b/src/ssl_manager.c
@@ -1,470 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2025 the Claws Mail team and Colin Leroy
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#include "claws-features.h"
-#endif
-
-#ifdef USE_GNUTLS
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-#include <sys/types.h>
-
-#include "ssl_manager.h"
-#include "ssl_certificate.h"
-#include "manage_window.h"
-#include "utils.h"
-#include "mainwindow.h"
-#include "alertpanel.h"
-#include "sslcertwindow.h"
-#include "prefs_common.h"
-
-enum {
- SSL_MANAGER_HOST,
- SSL_MANAGER_PORT,
- SSL_MANAGER_CERT,
- SSL_MANAGER_STATUS,
- SSL_MANAGER_EXPIRY,
- SSL_MANAGER_FONT_WEIGHT,
- N_SSL_MANAGER_COLUMNS
-};
-
-
-static struct SSLManager
-{
- GtkWidget *window;
- GtkWidget *hbox1;
- GtkWidget *vbox1;
- GtkWidget *certlist;
- GtkWidget *view_btn;
- GtkWidget *delete_btn;
- GtkWidget *close_btn;
-} manager;
-
-static void ssl_manager_view_cb (GtkWidget *widget, gpointer data);
-static void ssl_manager_delete_cb (GtkWidget *widget, gpointer data);
-static void ssl_manager_close_cb (GtkWidget *widget, gpointer data);
-static gboolean key_pressed (GtkWidget *widget, GdkEventKey *event,
- gpointer data);
-static void ssl_manager_load_certs (void);
-static void ssl_manager_double_clicked(GtkTreeView *list_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer data);
-
-void ssl_manager_open(MainWindow *mainwin)
-{
- if (!manager.window)
- ssl_manager_create();
-
- manage_window_set_transient(GTK_WINDOW(manager.window));
- gtk_widget_grab_focus(manager.close_btn);
-
- ssl_manager_load_certs();
-
- gtk_widget_show(manager.window);
-
-}
-
-static GtkListStore* ssl_manager_create_data_store(void)
-{
- return gtk_list_store_new(N_SSL_MANAGER_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_POINTER,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_INT,
- -1);
-}
-
-static void ssl_manager_create_list_view_columns(GtkWidget *list_view)
-{
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
-
- renderer = gtk_cell_renderer_text_new();
- g_object_set(renderer, "weight", PANGO_WEIGHT_NORMAL,
- "weight-set", TRUE, NULL);
-
- column = gtk_tree_view_column_new_with_attributes
- (_("Server"),
- renderer,
- "text", SSL_MANAGER_HOST,
- "weight", SSL_MANAGER_FONT_WEIGHT,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
-
- column = gtk_tree_view_column_new_with_attributes
- (_("Port"),
- renderer,
- "text", SSL_MANAGER_PORT,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
-
- column = gtk_tree_view_column_new_with_attributes
- (_("Status"),
- renderer,
- "text", SSL_MANAGER_STATUS,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
-
- column = gtk_tree_view_column_new_with_attributes
- (_("Expiry"),
- renderer,
- "text", SSL_MANAGER_EXPIRY,
- NULL);
- gtk_tree_view_column_set_attributes
- (column, renderer,
- "text", SSL_MANAGER_EXPIRY,
- NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);
-}
-
-static GtkWidget *ssl_manager_list_view_create (void)
-{
- GtkTreeView *list_view;
- GtkTreeSelection *selector;
- GtkTreeModel *model;
-
- model = GTK_TREE_MODEL(ssl_manager_create_data_store());
- list_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(model));
-
- gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),
- 0, GTK_SORT_ASCENDING);
- g_object_unref(model);
- selector = gtk_tree_view_get_selection(list_view);
- gtk_tree_selection_set_mode(selector, GTK_SELECTION_BROWSE);
-
- g_signal_connect(G_OBJECT(list_view), "row_activated",
- G_CALLBACK(ssl_manager_double_clicked),
- list_view);
-
- /* create the columns */
- ssl_manager_create_list_view_columns(GTK_WIDGET(list_view));
-
- return GTK_WIDGET(list_view);
-}
-
-/*!
- *\brief Save Gtk object size to prefs dataset
- */
-static void ssl_manager_size_allocate_cb(GtkWidget *widget,
- GtkAllocation *allocation)
-{
- cm_return_if_fail(allocation != NULL);
-
- gtk_window_get_size(GTK_WINDOW(widget),
- &prefs_common.sslmanwin_width, &prefs_common.sslmanwin_height);
-}
-
-void ssl_manager_create(void)
-{
- GtkWidget *window;
- GtkWidget *scroll;
- GtkWidget *hbox1;
- GtkWidget *vbox1;
- GtkWidget *certlist;
- GtkWidget *view_btn;
- GtkWidget *delete_btn;
- GtkWidget *close_btn;
- static GdkGeometry geometry;
-
- window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "ssl_manager");
- gtk_window_set_title (GTK_WINDOW(window),
- _("Saved TLS certificates"));
-
- gtk_container_set_border_width (GTK_CONTAINER (window), 8);
- gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
- gtk_window_set_resizable(GTK_WINDOW (window), TRUE);
- gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
- g_signal_connect(G_OBJECT(window), "delete_event",
- G_CALLBACK(ssl_manager_close_cb), NULL);
- g_signal_connect(G_OBJECT(window), "size_allocate",
- G_CALLBACK(ssl_manager_size_allocate_cb), NULL);
- g_signal_connect(G_OBJECT(window), "key_press_event",
- G_CALLBACK(key_pressed), NULL);
- MANAGE_WINDOW_SIGNALS_CONNECT (window);
-
- hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
- vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
- delete_btn = gtkut_stock_button("edit-delete", _("D_elete"));
-
- g_signal_connect(G_OBJECT(delete_btn), "clicked",
- G_CALLBACK(ssl_manager_delete_cb), NULL);
-
- view_btn = gtkut_stock_button("dialog-information", _("_Information"));
- g_signal_connect(G_OBJECT(view_btn), "clicked",
- G_CALLBACK(ssl_manager_view_cb), NULL);
-
- close_btn = gtk_button_new_with_mnemonic(_("_Close"));
- gtk_button_set_image(GTK_BUTTON(close_btn),
- gtk_image_new_from_icon_name("window-close-symbolic", GTK_ICON_SIZE_BUTTON));
- g_signal_connect(G_OBJECT(close_btn), "clicked",
- G_CALLBACK(ssl_manager_close_cb), NULL);
-
- certlist = ssl_manager_list_view_create();
-
- scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
-
- gtk_container_add(GTK_CONTAINER (scroll), certlist);
-
- gtk_box_pack_start(GTK_BOX(hbox1), scroll, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(hbox1), vbox1, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(vbox1), view_btn, FALSE, FALSE, 4);
- gtk_box_pack_start(GTK_BOX(vbox1), delete_btn, FALSE, FALSE, 4);
- gtk_box_pack_end(GTK_BOX(vbox1), close_btn, FALSE, FALSE, 4);
-
- if (!geometry.min_height) {
- geometry.min_width = 700;
- geometry.min_height = 250;
- }
-
- gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
- GDK_HINT_MIN_SIZE);
- gtk_window_set_default_size(GTK_WINDOW(window),
- prefs_common.sslmanwin_width,
- prefs_common.sslmanwin_height);
-
- gtk_widget_show(certlist);
- gtk_widget_show(scroll);
- gtk_widget_show(hbox1);
- gtk_widget_show(vbox1);
- gtk_widget_show(close_btn);
- gtk_widget_show(delete_btn);
- gtk_widget_show(view_btn);
- gtk_container_add(GTK_CONTAINER (window), hbox1);
-
- manager.window = window;
- manager.hbox1 = hbox1;
- manager.vbox1 = vbox1;
- manager.certlist = certlist;
- manager.view_btn = view_btn;
- manager.delete_btn = delete_btn;
- manager.close_btn = close_btn;
-
- gtk_widget_show(window);
-}
-
-static void ssl_manager_list_view_insert_cert(GtkWidget *list_view,
- GtkTreeIter *row_iter,
- gchar *host,
- gchar *port,
- SSLCertificate *cert)
-{
- char *sig_status, *exp_date;
- char buf[100];
- time_t exp_time_t;
- struct tm lt;
- PangoWeight weight = PANGO_WEIGHT_NORMAL;
- GtkTreeIter iter, *iterptr;
- GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model
- (GTK_TREE_VIEW(list_view)));
-
- g_return_if_fail(cert != NULL);
-
- exp_time_t = gnutls_x509_crt_get_expiration_time(cert->x509_cert);
-
- memset(buf, 0, sizeof(buf));
- if (exp_time_t > 0) {
- fast_strftime(buf, sizeof(buf)-1, prefs_common.date_format, localtime_r(&exp_time_t, <));
- exp_date = (*buf) ? g_strdup(buf):g_strdup("?");
- } else
- exp_date = g_strdup("");
-
- if (exp_time_t < time(NULL))
- weight = PANGO_WEIGHT_BOLD;
-
- sig_status = ssl_certificate_check_signer(cert, cert->status);
-
- if (sig_status == NULL)
- sig_status = g_strdup_printf(_("Correct%s"),exp_time_t < time(NULL)? _(" (expired)"): "");
- else {
- weight = PANGO_WEIGHT_BOLD;
- if (exp_time_t < time(NULL))
- sig_status = g_strconcat(sig_status,_(" (expired)"),NULL);
- }
-
- if (row_iter == NULL) {
- /* append new */
- gtk_list_store_append(list_store, &iter);
- iterptr = &iter;
- } else
- iterptr = row_iter;
-
- gtk_list_store_set(list_store, iterptr,
- SSL_MANAGER_HOST, host,
- SSL_MANAGER_PORT, port,
- SSL_MANAGER_CERT, cert,
- SSL_MANAGER_STATUS, sig_status,
- SSL_MANAGER_EXPIRY, exp_date,
- SSL_MANAGER_FONT_WEIGHT, weight,
- -1);
-
- g_free(sig_status);
- g_free(exp_date);
-}
-
-static void ssl_manager_load_certs (void)
-{
- GDir *dir;
- const gchar *d;
- GError *error = NULL;
- gchar *path;
- GtkListStore *store;
-
- store = GTK_LIST_STORE(gtk_tree_view_get_model
- (GTK_TREE_VIEW(manager.certlist)));
-
- gtk_list_store_clear(store);
-
- path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
- "certs", G_DIR_SEPARATOR_S, NULL);
-
- if((dir = g_dir_open(path, 0, &error)) == NULL) {
- debug_print("couldn't open dir '%s': %s (%d)\n", path,
- error->message, error->code);
- g_error_free(error);
- g_free(path);
- return;
- }
-
- while ((d = g_dir_read_name(dir)) != NULL) {
- gchar *server = NULL, *port = NULL, *fp = NULL;
- SSLCertificate *cert;
-
- if(strstr(d, ".cert") != d + (strlen(d) - strlen(".cert")))
- continue;
-
- if (get_serverportfp_from_filename(d, &server, &port, &fp)) {
-
- if (server != NULL && port != NULL) {
- gint portnum = atoi(port);
- if (portnum > 0 && portnum <= 65535) {
- cert = ssl_certificate_find(server, portnum, fp);
- ssl_manager_list_view_insert_cert(manager.certlist, NULL,
- server, port, cert);
- }
- }
- }
- if (server)
- g_free(server);
- if (port)
- g_free(port);
- if (fp)
- g_free(fp);
- }
- g_dir_close(dir);
- g_free(path);
-}
-
-static void ssl_manager_close(void)
-{
- gtk_widget_hide(manager.window);
-}
-
-static void ssl_manager_close_cb(GtkWidget *widget,
- gpointer data)
-{
- ssl_manager_close();
-}
-
-static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
-{
- if (event->keyval == GDK_KEY_Delete)
- ssl_manager_delete_cb(manager.delete_btn, NULL);
-
- return FALSE;
-}
-
-static void ssl_manager_double_clicked(GtkTreeView *list_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer data)
-{
- SSLCertificate *cert;
- GtkTreeIter iter;
- GtkTreeModel *model = gtk_tree_view_get_model(list_view);
-
- if (!gtk_tree_model_get_iter(model, &iter, path))
- return;
-
- gtk_tree_model_get(model, &iter,
- SSL_MANAGER_CERT, &cert,
- -1);
-
- if (!cert)
- return;
-
- sslcertwindow_show_cert(cert);
-
- return;
-}
-
-
-
-static void ssl_manager_delete_cb(GtkWidget *widget,
- gpointer data)
-{
- SSLCertificate *cert;
- int val;
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- cert = gtkut_tree_view_get_selected_pointer(
- GTK_TREE_VIEW(manager.certlist), SSL_MANAGER_CERT,
- &model, NULL, &iter);
-
- if (!cert)
- return;
-
- val = alertpanel_full(_("Delete certificate"),
- _("Do you really want to delete this certificate?"),
- NULL, _("_Cancel"), "edit-delete-symbolic", _("D_elete"), NULL, NULL,
- ALERTFOCUS_FIRST, FALSE, NULL, ALERT_WARNING);
-
-
- if (val != G_ALERTALTERNATE)
- return;
-
- ssl_certificate_delete_from_disk(cert);
- ssl_certificate_destroy(cert);
- gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
-}
-
-static void ssl_manager_view_cb(GtkWidget *widget,
- gpointer data)
-{
- SSLCertificate *cert;
-
- cert = gtkut_tree_view_get_selected_pointer(
- GTK_TREE_VIEW(manager.certlist), SSL_MANAGER_CERT,
- NULL, NULL, NULL);
-
- if (!cert)
- return;
-
- sslcertwindow_show_cert(cert);
-}
-#endif
diff --git a/src/ssl_manager.h b/src/ssl_manager.h
@@ -1,30 +0,0 @@
-/*
- * Claws Mail -- a GTK based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Colin Leroy <colin@colino.net>
- * and the Claws Mail team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef SSL_MANAGER_H
-#define SSL_MANAGER_H
-#ifdef USE_GNUTLS
-#include "mainwindow.h"
-
-void ssl_manager_create (void);
-void ssl_manager_open (MainWindow *mainwin);
-
-#endif
-#endif