From 97dea9eae1fdbd6da508f60c7a8ae16ab547edd8 Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Tue, 12 Oct 2010 12:10:34 +0200 Subject: [PATCH] Use handler mutex for checks, not session mutex --- src/modules/rlm_eap/mem.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/modules/rlm_eap/mem.c b/src/modules/rlm_eap/mem.c index e0f4c6b..5f6d6d8 100644 --- a/src/modules/rlm_eap/mem.c +++ b/src/modules/rlm_eap/mem.c @@ -171,38 +171,50 @@ typedef struct check_handler_t { static void check_handler(void *data) { + int do_warning = FALSE; + uint8_t state[8]; check_handler_t *check = data; if (!check) return; + if (!check->inst || !check->handler) { free(check); return; } - pthread_mutex_lock(&(check->inst->session_mutex)); + pthread_mutex_lock(&(check->inst->handler_mutex)); if (!rbtree_finddata(check->inst->handler_tree, check->handler)) { goto done; } + /* + * The session has continued *after* this packet. + * Don't do a warning. + */ if (check->handler->trips > check->trips) { goto done; } if (check->handler->tls && !check->handler->finished) { + do_warning = TRUE; + memcpy(state, check->handler->state, sizeof(state)); + } + +done: + pthread_mutex_unlock(&(check->inst->handler_mutex)); + free(check); + + if (do_warning) { DEBUG("WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); DEBUG("WARNING: !! EAP session for state 0x%02x%02x%02x%02x%02x%02x%02x%02x did not finish!", - check->handler->state[0], check->handler->state[1], - check->handler->state[2], check->handler->state[3], - check->handler->state[4], check->handler->state[5], - check->handler->state[6], check->handler->state[7]); + state[0], state[1], + state[2], state[3], + state[4], state[5], + state[6], state[7]); DEBUG("WARNING: !! Please read http://wiki.freeradius.org/Certificate_Compatibility"); DEBUG("WARNING: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); } - -done: - pthread_mutex_unlock(&(check->inst->session_mutex)); - free(check); } void eaptype_free(EAP_TYPES *i) -- 2.1.4