[telepathy-gabble/master] connector_error_disconnect: check certificate errors

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Fri Sep 11 09:07:50 PDT 2009


---
 src/connection.c |   39 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 38 insertions(+), 1 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index 38ac3b8..7504bc7 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -1425,8 +1425,45 @@ connector_error_disconnect (GabbleConnection *self,
             break;
         }
     }
+  else if (error->domain == WOCKY_TLS_CERT_ERROR)
+    {
+      /* certificate error */
+      switch (error->code)
+        {
+          case WOCKY_TLS_CERT_NO_CERTIFICATE:
+            DEBUG ("The server doesn't provide a certificate.");
+            reason = TP_CONNECTION_STATUS_REASON_CERT_NOT_PROVIDED;
+            break;
+          case WOCKY_TLS_CERT_INSECURE:
+          case WOCKY_TLS_CERT_SIGNER_UNKNOWN:
+          case WOCKY_TLS_CERT_SIGNER_UNAUTHORISED:
+          case WOCKY_TLS_CERT_REVOKED:
+          case WOCKY_TLS_CERT_MAYBE_DOS:
+            DEBUG ("The certificate cannot be trusted.");
+            reason = TP_CONNECTION_STATUS_REASON_CERT_UNTRUSTED;
+            break;
+          case WOCKY_TLS_CERT_EXPIRED:
+            DEBUG ("The certificate has expired.");
+            reason = TP_CONNECTION_STATUS_REASON_CERT_EXPIRED;
+            break;
+          case WOCKY_TLS_CERT_NOT_ACTIVE:
+            DEBUG ("The certificate has not been activated.");
+            reason = TP_CONNECTION_STATUS_REASON_CERT_NOT_ACTIVATED;
+            break;
+          case WOCKY_TLS_CERT_NAME_MISMATCH:
+            DEBUG ("The server hostname doesn't match the one in the"
+                " certificate.");
+            reason = TP_CONNECTION_STATUS_REASON_CERT_HOSTNAME_MISMATCH;
+            break;
+          case WOCKY_TLS_CERT_INTERNAL_ERROR:
+          case WOCKY_TLS_CERT_UNKNOWN_ERROR:
+          default:
+            DEBUG ("Unknown certificate error: %s", error->message);
+            reason = TP_CONNECTION_STATUS_REASON_CERT_OTHER_ERROR;
+            break;
+        }
+    }
 
-  /* FIXME: check SSL errors */
   tp_base_connection_change_status (base,
       TP_CONNECTION_STATUS_DISCONNECTED, reason);
 }
-- 
1.5.6.5




More information about the telepathy-commits mailing list