Miika Räisänen wrote:
> and gdb after core dump:
> http://cc.oulu.fi/~mraisane/tmp/gdb-radiusd.1st-patch.log

  Please try the following patch.  I believe it will fix the problem.

  If so, I'll commit it to CVS.

  Alan DeKok.
--
  http://deployingradius.com       - The web site of the book
  http://deployingradius.com/blog/ - The blog
? eap.patch
? radeapclient
Index: libeap/tls.c
===================================================================
RCS file: /source/radiusd/src/modules/rlm_eap/libeap/tls.c,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 tls.c
--- libeap/tls.c        27 Apr 2006 18:53:23 -0000      1.1.2.3
+++ libeap/tls.c        24 Jan 2007 09:00:27 -0000
@@ -92,7 +92,7 @@
 /*
  *     Print out some text describing the error.
  */
-static void int_ssl_check(SSL *s, int ret, const char *text)
+static int int_ssl_check(SSL *s, int ret, const char *text)
 {
        int e;
 
@@ -117,7 +117,7 @@
        case SSL_ERROR_WANT_WRITE:
        case SSL_ERROR_WANT_X509_LOOKUP:
        case SSL_ERROR_ZERO_RETURN:
-               return;
+               break;
 
                /*
                 *      These seem to be indications of a genuine
@@ -127,14 +127,12 @@
        case SSL_ERROR_SYSCALL:
                radlog(L_ERR, "rlm_eap_tls: %s failed in a system call (%d), 
TLS session fails.",
                       text, ret);
-               SSL_set_app_data(s, (char *)1);
-               return;
+               return 0;
 
        case SSL_ERROR_SSL:
                radlog(L_ERR, "rlm_eap_tls: %s failed inside of TLS (%d), TLS 
session fails.",
                       text, ret);
-               SSL_set_app_data(s, (char *)1);
-               return;
+               return 0;
 
        default:
                /*
@@ -144,8 +142,10 @@
                 *      the code needs updating here.
                 */
                radlog(L_ERR, "rlm_eap_tls: FATAL SSL error ..... %d\n", e);
-               break;
+               return 0;
        }
+
+       return 1;
 }
 
 /*
@@ -170,8 +170,8 @@
                       sizeof(ssn->clean_out.data));
        if (err > 0) {
                ssn->clean_out.used = err;
-       } else {
-               int_ssl_check(ssn->ssl, err, "SSL_read");
+       } else if (!int_ssl_check(ssn->ssl, err, "SSL_read")) {
+               return 0;
        }
 
        /* Some Extra STATE information for easy debugging */
- 
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to