about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/event/server_events.c15
-rw-r--r--src/event/server_events.h3
-rw-r--r--src/xmpp/connection.c12
3 files changed, 29 insertions, 1 deletions
diff --git a/src/event/server_events.c b/src/event/server_events.c
index 160d4472..6c575179 100644
--- a/src/event/server_events.c
+++ b/src/event/server_events.c
@@ -638,3 +638,18 @@ sv_ev_muc_occupant_online(const char * const room, const char * const nick, cons
         occupantswin_occupants(room);
     }
 }
+
+int
+sv_ev_certfail(const char * const errormsg, const char * const certname, const char * const certfp,
+    const char * const notbefore, const char * const notafter)
+{
+    cons_show("");
+    cons_show_error("TLS certficiate verification failed: %s", errormsg);
+    cons_show("  Issuer      : %s", certname);
+    cons_show("  Fingerprint : %s", certfp);
+    cons_show("  Start       : %s", notbefore);
+    cons_show("  End         : %s", notafter);
+    cons_show("");
+
+    return 1;
+}
diff --git a/src/event/server_events.h b/src/event/server_events.h
index 3ef8eae4..e9ada1ce 100644
--- a/src/event/server_events.h
+++ b/src/event/server_events.h
@@ -86,5 +86,8 @@ void sv_ev_muc_occupant_online(const char * const room, const char * const nick,
 void sv_ev_roster_update(const char * const barejid, const char * const name,
     GSList *groups, const char * const subscription, gboolean pending_out);
 void sv_ev_roster_received(void);
+int sv_ev_certfail(const char * const errormsg, const char * const certname, const char * const certfp,
+    const char * const notbefore, const char * const notafter);
+
 
 #endif
diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c
index 6f9de18d..be60ad21 100644
--- a/src/xmpp/connection.c
+++ b/src/xmpp/connection.c
@@ -94,13 +94,16 @@ static GTimer *reconnect_timer;
 
 static log_level_t _get_log_level(xmpp_log_level_t xmpp_level);
 static xmpp_log_level_t _get_xmpp_log_level();
+
 static void _xmpp_file_logger(void * const userdata,
     const xmpp_log_level_t level, const char * const area,
     const char * const msg);
+
 static xmpp_log_t * _xmpp_get_file_logger();
 
 static jabber_conn_status_t _jabber_connect(const char * const fulljid,
     const char * const passwd, const char * const altdomain, int port);
+
 static void _jabber_reconnect(void);
 
 static void _connection_handler(xmpp_conn_t * const conn,
@@ -357,6 +360,13 @@ _connection_free_session_data(void)
     presence_clear_sub_requests();
 }
 
+static int
+_connection_certfail_cb(const char * const certname, const char * const certfp,
+    char * const notbefore, const char * const notafter, const char * const errormsg)
+{
+    return sv_ev_certfail(errormsg, certname, certfp, notbefore, notafter);
+}
+
 static jabber_conn_status_t
 _jabber_connect(const char * const fulljid, const char * const passwd,
     const char * const altdomain, int port)
@@ -408,7 +418,7 @@ _jabber_connect(const char * const fulljid, const char * const passwd,
     }
 
     int connect_status = xmpp_connect_client(jabber_conn.conn, altdomain, port,
-        _connection_handler, jabber_conn.ctx);
+        _connection_certfail_cb, _connection_handler, jabber_conn.ctx);
 
     if (connect_status == 0)
         jabber_conn.conn_status = JABBER_CONNECTING;