[gnutls-dev] [algernon@sirc.hu: Bug#188838: libgnutls5: Server name indication does not appear to work]

Nikos Mavroyanopoulos nmav@gnutls.org
Mon Apr 14 09:45:02 2003


--dDRMvlgZJXvWKvBx
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, Apr 13, 2003 at 04:16:16PM +0200, Ivo Timmermans wrote:

> FYI, what do you think of the attached patch?
A patch the corrects the problem is attached. It seems that
the problem was indeed in the send part :)


> 	Ivo

-- 
Nikos Mavroyanopoulos

--dDRMvlgZJXvWKvBx
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=diff

Index: ext_server_name.c
===================================================================
RCS file: /cvs/gnutls/gnutls/lib/ext_server_name.c,v
retrieving revision 2.11
diff -u -u -r2.11 ext_server_name.c
--- ext_server_name.c	25 Mar 2003 18:01:47 -0000	2.11
+++ ext_server_name.c	14 Apr 2003 07:38:42 -0000
@@ -46,7 +46,7 @@
    if (session->security_parameters.entity == GNUTLS_SERVER) {
       DECR_LENGTH_RET(data_size, 2, 0);
       len = _gnutls_read_uint16(data);
-      
+
       if ( len != data_size) {
          /* This is unexpected packet length, but
           * just ignore it, for now.
@@ -121,7 +121,8 @@
    ssize_t data_size = _data_size;
    int total_size = 0;
 
-   /* this function sends the client extension data (dnsname) */
+   /* this function sends the client extension data (dnsname) 
+    */
    if (session->security_parameters.entity == GNUTLS_CLIENT) {
 
       /* uint16 */
@@ -130,9 +131,12 @@
 	   i < session->security_parameters.extensions.server_names_size;
 	   i++) 
       {
-	   /* count the total size */
+	   /* count the total size 
+	    */
 	   len = session->security_parameters.extensions.server_names[i].name_length;
-	   /* uint8 + uint16 + size */
+
+	   /* uint8 + uint16 + size 
+	    */
 	   total_size += 1 + 2 + len;
       }
 
@@ -141,7 +145,7 @@
       /* UINT16: write total size of all names 
        */
       DECR_LENGTH_RET( data_size, 2, GNUTLS_E_SHORT_MEMORY_BUFFER);
-      _gnutls_write_uint16(total_size, p);
+      _gnutls_write_uint16(total_size-2, p);
       p += 2;
 
       for (i = 0;
@@ -179,8 +183,7 @@
 	 }
       }
    }
-   if (total_size == 0)
-      return 0;
+
    return total_size;
 }
 

--dDRMvlgZJXvWKvBx--