projects
/
libeap.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
EAP-TNC server: Fix processing when last message is fragmented
[libeap.git]
/
src
/
eap_server
/
eap_tnc.c
diff --git
a/src/eap_server/eap_tnc.c
b/src/eap_server/eap_tnc.c
index
93f0cf0
..
4eddf8b
100644
(file)
--- a/
src/eap_server/eap_tnc.c
+++ b/
src/eap_server/eap_tnc.c
@@
-1,6
+1,6
@@
/*
* EAP server method: EAP-TNC (Trusted Network Connect)
/*
* EAP server method: EAP-TNC (Trusted Network Connect)
- * Copyright (c) 2007-20
08
, Jouni Malinen <j@w1.fi>
+ * Copyright (c) 2007-20
10
, Jouni Malinen <j@w1.fi>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@
-29,6
+29,8
@@
struct eap_tnc_data {
struct wpabuf *out_buf;
size_t out_used;
size_t fragment_size;
struct wpabuf *out_buf;
size_t out_used;
size_t fragment_size;
+ int was_done:1;
+ int was_fail:1;
};
};
@@
-231,6
+233,10
@@
static struct wpabuf * eap_tnc_build_msg(struct eap_tnc_data *data, u8 id)
"(%lu more to send)", (unsigned long) send_len,
(unsigned long) wpabuf_len(data->out_buf) -
data->out_used);
"(%lu more to send)", (unsigned long) send_len,
(unsigned long) wpabuf_len(data->out_buf) -
data->out_used);
+ if (data->state == FAIL)
+ data->was_fail = 1;
+ else if (data->state == DONE)
+ data->was_done = 1;
data->state = WAIT_FRAG_ACK;
}
data->state = WAIT_FRAG_ACK;
}
@@
-460,7
+466,12
@@
static void eap_tnc_process(struct eap_sm *sm, void *priv,
return;
}
wpa_printf(MSG_DEBUG, "EAP-TNC: Fragment acknowledged");
return;
}
wpa_printf(MSG_DEBUG, "EAP-TNC: Fragment acknowledged");
- data->state = CONTINUE;
+ if (data->was_fail)
+ data->state = FAIL;
+ else if (data->was_done)
+ data->state = DONE;
+ else
+ data->state = CONTINUE;
return;
}
return;
}