]> git.eshelyaron.com Git - emacs.git/commitdiff
Add debugging to the gnutls library, and finish handshaking when it's done.
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Mon, 27 Sep 2010 14:35:22 +0000 (16:35 +0200)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Mon, 27 Sep 2010 14:35:22 +0000 (16:35 +0200)
lisp/ChangeLog
lisp/net/gnutls.el
src/ChangeLog
src/gnutls.c

index d7cde04306b5c08ce2b3bc8f5244724ac3b4a68b..cd30925d9fb37ffd6388f255958aad237e38c476 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * net/gnutls.el (starttls-negotiate): Stop looping when we get a t
+       back.
+
 2010-09-26  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * emacs-lisp/pcase.el (pcase-let*, pcase-let): plet -> pcase-let.
index 7a2571f8a7c97d02e0d7bfc14b5cb95639a60aa6..b393d237d9027bf384f8dea9b29da09de27f058c 100644 (file)
@@ -80,13 +80,11 @@ CREDENTIALS-FILE is a filename with meaning dependent on CREDENTIALS."
 
     (let ((ret 'gnutls-e-again)
           (n 25000))
-      (while (and (not (gnutls-error-fatalp ret))
+      (while (and (not (eq ret t))
+                 (not (gnutls-error-fatalp ret))
                   (> n 0))
         (setq n (1- n))
-        (gnutls-message-maybe
-         (setq ret (gnutls-handshake proc))
-         "handshake: %s")
-        ;(debug "handshake ret" ret (gnutls-error-string ret)))
+       (setq ret (gnutls-handshake proc))
         )
       (if (gnutls-errorp ret)
           (progn
index b5962a1dd8bd1adcbdfb512e6aed1e30608afdb2..85a623bed501df17523a862769dcd39d90e61b45 100644 (file)
@@ -1,3 +1,7 @@
+2010-09-27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnutls.c (gnutls_log_function): Added more debugging.
+
 2010-09-27  Kenichi Handa  <handa@m17n.org>
 
        These changes are to remove restriction on the number of glyphs in
index 50bf7940119da9ea0d5d97d13a2eafb5a09013fb..ff5383289846a6e0f356668b0f42845f1b5ea3ff 100644 (file)
@@ -221,6 +221,10 @@ Lisp_Object gnutls_emacs_global_deinit (void)
   return gnutls_make_error (GNUTLS_E_SUCCESS);
 }
 
+static void gnutls_log_function (int level, const char* string) {
+  message("debug: %s", string);
+}
+
 DEFUN ("gnutls-boot", Fgnutls_boot, Sgnutls_boot, 3, 6, 0,
        doc: /* Initializes client-mode GnuTLS for process PROC.
 Currently only client mode is supported.  Returns a success/failure
@@ -264,6 +268,9 @@ KEYFILE and optionally CALLBACK.  */)
 
   state = XPROCESS (proc)->gnutls_state;
 
+  gnutls_global_set_log_level(4);
+  gnutls_global_set_log_function(gnutls_log_function);
+  
   /* always initialize globals.  */
   global_init = gnutls_emacs_global_init ();
   if (! NILP (Fgnutls_errorp (global_init)))
@@ -272,19 +279,13 @@ KEYFILE and optionally CALLBACK.  */)
   /* deinit and free resources.  */
   if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_CRED_ALLOC)
   {
-      message ("gnutls: deallocating certificates");
-
       if (EQ (type, Qgnutls_x509pki))
       {
-          message ("gnutls: deallocating x509 certificates");
-
           x509_cred = XPROCESS (proc)->x509_cred;
           gnutls_certificate_free_credentials (x509_cred);
       }
       else if (EQ (type, Qgnutls_anon))
       {
-          message ("gnutls: deallocating anon certificates");
-
           anon_cred = XPROCESS (proc)->anon_cred;
           gnutls_anon_free_client_credentials (anon_cred);
       }
@@ -296,28 +297,20 @@ KEYFILE and optionally CALLBACK.  */)
 
       if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_INIT)
       {
-          message ("gnutls: deinitializing");
-
           Fgnutls_deinit (proc);
       }
   }
 
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_EMPTY;
 
-  message ("gnutls: allocating credentials");
-
   if (EQ (type, Qgnutls_x509pki))
   {
-      message ("gnutls: allocating x509 credentials");
-
       x509_cred = XPROCESS (proc)->x509_cred;
       if (gnutls_certificate_allocate_credentials (&x509_cred) < 0)
         memory_full ();
   }
   else if (EQ (type, Qgnutls_anon))
   {
-      message ("gnutls: allocating anon credentials");
-
       anon_cred = XPROCESS (proc)->anon_cred;
       if (gnutls_anon_allocate_client_credentials (&anon_cred) < 0)
         memory_full ();
@@ -333,8 +326,6 @@ KEYFILE and optionally CALLBACK.  */)
 
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_ALLOC;
 
-  message ("gnutls: setting the trustfile");
-
   if (EQ (type, Qgnutls_x509pki))
   {
       if (STRINGP (trustfile))
@@ -346,12 +337,8 @@ KEYFILE and optionally CALLBACK.  */)
 
           if (ret < GNUTLS_E_SUCCESS)
             return gnutls_make_error (ret);
-
-          message ("gnutls: processed %d CA certificates", ret);
       }
 
-      message ("gnutls: setting the keyfile");
-
       if (STRINGP (keyfile))
       {
           ret = gnutls_certificate_set_x509_crl_file
@@ -361,15 +348,11 @@ KEYFILE and optionally CALLBACK.  */)
 
           if (ret < GNUTLS_E_SUCCESS)
             return gnutls_make_error (ret);
-
-          message ("gnutls: processed %d CRL(s)", ret);
       }
   }
 
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_FILES;
 
-  message ("gnutls: gnutls_init");
-
   ret = gnutls_init (&state, GNUTLS_CLIENT);
 
   if (ret < GNUTLS_E_SUCCESS)
@@ -379,8 +362,6 @@ KEYFILE and optionally CALLBACK.  */)
 
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT;
 
-  message ("gnutls: setting the priority string");
-
   ret = gnutls_priority_set_direct(state,
                                    (char*) SDATA (priority_string),
                                    NULL);
@@ -490,15 +471,14 @@ or `gnutls-e-interrupted'. In that case you may resume the handshake
     GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_TRANSPORT_POINTERS_SET;
   }
 
-  message ("gnutls: handshake: handshaking");
   ret = gnutls_handshake (state);
-
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_HANDSHAKE_TRIED;
 
-  if (GNUTLS_E_SUCCESS == ret)
+  if (GNUTLS_E_SUCCESS == ret || ret == 0)
   {
     /* here we're finally done.  */
     GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_READY;
+    return Qt;
   }
 
   return gnutls_make_error (ret);