]> git.0d.be Git - empathy.git/commitdiff
Verify the certificate from the helper.
authorCosimo Cecchi <cosimoc@gnome.org>
Wed, 11 Aug 2010 16:35:20 +0000 (18:35 +0200)
committerCosimo Cecchi <cosimoc@gnome.org>
Fri, 13 Aug 2010 14:22:23 +0000 (16:22 +0200)
src/empathy-auth-helper.c

index aaee48ec12d42b8829d20c632c8f3485e128ed17..6cbffea94e214c99e98bf48b5b7f03a195ec4603 100644 (file)
 #include <libempathy/empathy-debug.h>
 #include <libempathy/empathy-auth-factory.h>
 #include <libempathy/empathy-server-tls-handler.h>
+#include <libempathy/empathy-tls-verifier.h>
 
 #include <libempathy-gtk/empathy-ui-utils.h>
 
+#include <gnutls/gnutls.h>
+
+#include <extensions/extensions.h>
+
+static void
+verifier_verify_cb (GObject *source,
+    GAsyncResult *result,
+    gpointer user_data)
+{
+  gboolean res;
+  EmpTLSCertificateRejectReason reason;
+  GError *error = NULL;
+  EmpathyTLSCertificate *certificate = NULL;
+
+  g_object_get (source,
+      "certificate", &certificate,
+      NULL);
+
+  res = empathy_tls_verifier_verify_finish (EMPATHY_TLS_VERIFIER (source),
+      result, &reason, &error);
+
+  if (error != NULL)
+    {
+      DEBUG ("Error: %s", error->message);
+      empathy_tls_certificate_reject (certificate, reason, FALSE);
+
+      g_error_free (error);
+    }
+  else
+    {
+      empathy_tls_certificate_accept (certificate);
+    }
+
+  g_object_unref (certificate);
+}
+
 static void
 auth_factory_new_handler_cb (EmpathyAuthFactory *factory,
     EmpathyServerTLSHandler *handler,
     gpointer user_data)
 {
-  EmpathyTLSCertificate *certificate;
+  EmpathyTLSCertificate *certificate = NULL;
+  gchar *hostname = NULL;
+  EmpathyTLSVerifier *verifier;
 
   DEBUG ("New TLS server handler received from the factory");
 
-  certificate = g_object_ref (
-      empathy_server_tls_handler_get_certificate (handler));
+  g_object_get (handler,
+      "certificate", &certificate,
+      "hostname", &hostname,
+      NULL);
 
-  empathy_tls_certificate_accept (certificate);
+  verifier = empathy_tls_verifier_new (certificate, hostname);
+  empathy_tls_verifier_verify_async (verifier,
+      verifier_verify_cb, NULL);
 
+  g_object_unref (verifier);
   g_object_unref (certificate);
+  g_free (hostname);
 }
 
 int
@@ -75,6 +120,7 @@ main (int argc,
   g_option_context_free (context);
 
   empathy_gtk_init ();
+  gnutls_global_init ();
   g_set_application_name (_("Empathy authentication helper"));
 
   gtk_window_set_default_icon_name ("empathy");
@@ -98,5 +144,7 @@ main (int argc,
 
   gtk_main ();
 
+  g_object_unref (factory);
+
   return EXIT_SUCCESS;
 }