emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r101676: Make sure all reads/writes t


From: Lars Magne Ingebrigtsen
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r101676: Make sure all reads/writes to gnutls streams go via the gnutls functions.
Date: Wed, 29 Sep 2010 14:48:29 +0200
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 101676
committer: Lars Magne Ingebrigtsen <address@hidden>
branch nick: trunk
timestamp: Wed 2010-09-29 14:48:29 +0200
message:
  Make sure all reads/writes to gnutls streams go via the gnutls functions.
modified:
  lisp/ChangeLog
  lisp/net/gnutls.el
  src/ChangeLog
  src/gnutls.c
  src/gnutls.h
  src/process.c
  src/process.h
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-09-29 04:19:30 +0000
+++ b/lisp/ChangeLog    2010-09-29 12:48:29 +0000
@@ -1,3 +1,7 @@
+2010-09-29  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * net/gnutls.el (starttls-negotiate): Loop a lot longer.
+
 2010-09-29  Glenn Morris  <address@hidden>
 
        * calendar/diary-lib.el (diary-list-entries): Use temp buffers when

=== modified file 'lisp/net/gnutls.el'
--- a/lisp/net/gnutls.el        2010-09-27 16:44:31 +0000
+++ b/lisp/net/gnutls.el        2010-09-29 12:48:29 +0000
@@ -37,7 +37,7 @@
   :prefix "gnutls-"
   :group 'net-utils)
 
-(defcustom gnutls-log-level 2
+(defcustom gnutls-log-level 0
   "Logging level to be used by `starttls-negotiate' and GnuTLS."
   :type 'integer
   :group 'gnutls)
@@ -91,20 +91,14 @@
       (error "Could not boot GnuTLS for this process"));
 
     (let ((ret 'gnutls-e-again)
-          (n 25000))
+          (n 250000))
       (while (and (not (eq ret t))
                  (not (gnutls-error-fatalp ret))
                   (> n 0))
         (setq n (1- n))
-       (setq ret (gnutls-handshake proc))
-        )
-      (if (gnutls-errorp ret)
-          (progn
-            (message "Ouch, error return %s (%s)"
-                     ret (gnutls-error-string ret))
-            (setq proc nil))
-        (message "Handshake complete %s." ret)))
-     proc))
+       (setq ret (gnutls-handshake proc)))
+      (message "Handshake complete %s." ret))
+    proc))
 
 (defun starttls-open-stream (name buffer host service)
   "Open a TLS connection for a service to a host.

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-09-29 09:52:43 +0000
+++ b/src/ChangeLog     2010-09-29 12:48:29 +0000
@@ -1,3 +1,17 @@
+2010-09-29  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * process.h (Lisp_Process): Add a gnutls_p field to Lisp_Process.
+
+       * process.c (make_process): Set the gnutls_p field to zero by
+       default.
+       (read_process_output): Always call the gnutls_read function if the
+       stream is a gnutls stream.
+       (send_process): Ditto for writes.
+
+       * gnutls.c (emacs_gnutls_write, emacs_gnutls_read): Refuse to read
+       or write anything until the state is GNUTLS_STAGE_READY.
+       (Fgnutls_boot): Mark the stream as being a gnutls stream.
+
 2010-09-29  Eli Zaretskii  <address@hidden>
 
        * xdisp.c (reseat_1): Initialize bidi_it.paragraph_dir to

=== modified file 'src/gnutls.c'
--- a/src/gnutls.c      2010-09-28 21:55:34 +0000
+++ b/src/gnutls.c      2010-09-29 12:48:29 +0000
@@ -33,10 +33,14 @@
 int global_initialized;
 
 int
-emacs_gnutls_write (int fildes, gnutls_session_t state, char *buf,
+emacs_gnutls_write (int fildes, struct Lisp_Process *proc, char *buf,
                     unsigned int nbyte)
 {
   register int rtnval, bytes_written;
+  gnutls_session_t state = proc->gnutls_state;
+
+  if (proc->gnutls_initstage != GNUTLS_STAGE_READY)
+    return 0;
 
   bytes_written = 0;
 
@@ -62,16 +66,20 @@
 }
 
 int
-emacs_gnutls_read (int fildes, gnutls_session_t state, char *buf,
+emacs_gnutls_read (int fildes, struct Lisp_Process *proc, char *buf,
                    unsigned int nbyte)
 {
   register int rtnval;
+  gnutls_session_t state = proc->gnutls_state;
+
+  if (proc->gnutls_initstage != GNUTLS_STAGE_READY)
+    return 0;
 
   rtnval = gnutls_read (state, buf, nbyte);
   if (rtnval >= 0)
     return rtnval;
   else
-    return -1;
+    return 0;
 }
 
 /* convert an integer error to a Lisp_Object; it will be either a
@@ -272,6 +280,7 @@
   CHECK_STRING (priority_string);
 
   state = XPROCESS (proc)->gnutls_state;
+  XPROCESS (proc)->gnutls_p = 1;
 
   if (NUMBERP (loglevel))
     {
@@ -281,7 +290,7 @@
       max_log_level = XINT (loglevel);
       XPROCESS (proc)->gnutls_log_level = max_log_level;
     }
-  
+
   /* always initialize globals.  */
   global_init = gnutls_emacs_global_init ();
   if (! NILP (Fgnutls_errorp (global_init)))
@@ -483,7 +492,7 @@
   if (GNUTLS_INITSTAGE (proc) < GNUTLS_STAGE_HANDSHAKE_CANDO)
     return Qgnutls_e_not_ready_for_handshake;
 
-  
+
   if (GNUTLS_INITSTAGE (proc) < GNUTLS_STAGE_TRANSPORT_POINTERS_SET)
   {
     /* for a network process in Emacs infd and outfd are the same
@@ -502,7 +511,7 @@
   ret = gnutls_handshake (state);
   GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_HANDSHAKE_TRIED;
 
-  if (GNUTLS_E_SUCCESS == ret)
+  if (ret == GNUTLS_E_SUCCESS)
   {
     /* here we're finally done.  */
     GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_READY;

=== modified file 'src/gnutls.h'
--- a/src/gnutls.h      2010-09-27 16:44:31 +0000
+++ b/src/gnutls.h      2010-09-29 12:48:29 +0000
@@ -49,10 +49,10 @@
 #define GNUTLS_LOG(level, max, string) if (level <= max) { gnutls_log_function 
(level, "(Emacs) " string); }
 
 int
-emacs_gnutls_write (int fildes, gnutls_session_t state, char *buf,
+emacs_gnutls_write (int fildes, struct Lisp_Process *proc, char *buf,
                     unsigned int nbyte);
 int
-emacs_gnutls_read (int fildes, gnutls_session_t state, char *buf,
+emacs_gnutls_read (int fildes, struct Lisp_Process *proc, char *buf,
                    unsigned int nbyte);
 
 extern void syms_of_gnutls (void);

=== modified file 'src/process.c'
--- a/src/process.c     2010-09-27 20:43:03 +0000
+++ b/src/process.c     2010-09-29 12:48:29 +0000
@@ -672,6 +672,7 @@
 #ifdef HAVE_GNUTLS
   p->gnutls_initstage = GNUTLS_STAGE_EMPTY;
   p->gnutls_log_level = 0;
+  p->gnutls_p = 0;
 #endif
 
   /* If name is already in use, modify it until it is unused.  */
@@ -5203,8 +5204,8 @@
   if (proc_buffered_char[channel] < 0)
     {
 #ifdef HAVE_GNUTLS
-      if (NETCONN_P(proc) && GNUTLS_PROCESS_USABLE (proc))
-       nbytes = emacs_gnutls_read (channel, XPROCESS (proc)->gnutls_state,
+      if (XPROCESS (proc)->gnutls_p)
+       nbytes = emacs_gnutls_read (channel, XPROCESS (proc),
                                     chars + carryover, readmax);
       else
 #endif
@@ -5242,8 +5243,8 @@
       chars[carryover] = proc_buffered_char[channel];
       proc_buffered_char[channel] = -1;
 #ifdef HAVE_GNUTLS
-      if (NETCONN_P(proc) && GNUTLS_PROCESS_USABLE (proc))
-       nbytes = emacs_gnutls_read (channel, XPROCESS (proc)->gnutls_state,
+      if (XPROCESS (proc)->gnutls_p)
+       nbytes = emacs_gnutls_read (channel, XPROCESS (proc),
                                     chars + carryover + 1, readmax - 1);
       else
 #endif
@@ -5658,9 +5659,9 @@
 #endif
                {
 #ifdef HAVE_GNUTLS
-                 if (NETCONN_P(proc) && GNUTLS_PROCESS_USABLE (proc))
+                 if (XPROCESS (proc)->gnutls_p)
                    rv = emacs_gnutls_write (outfd,
-                                            XPROCESS (proc)->gnutls_state, 
+                                            XPROCESS (proc), 
                                             (char *) buf, this);
                  else
 #endif

=== modified file 'src/process.h'
--- a/src/process.h     2010-09-27 16:44:31 +0000
+++ b/src/process.h     2010-09-29 12:48:29 +0000
@@ -136,6 +136,7 @@
     gnutls_certificate_client_credentials gnutls_x509_cred;
     gnutls_anon_client_credentials_t gnutls_anon_cred;
     int gnutls_log_level;
+    int gnutls_p;
 #endif
 };
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]