eapol_auth_dump.c revision 281806
1283425Sdchagin/*
2283425Sdchagin * IEEE 802.1X-2004 Authenticator - State dump
3283425Sdchagin * Copyright (c) 2002-2013, Jouni Malinen <j@w1.fi>
4283425Sdchagin *
5283425Sdchagin * This software may be distributed under the terms of the BSD license.
6316291Sdchagin * See README for more details.
7283425Sdchagin */
8283425Sdchagin
9283425Sdchagin#include "includes.h"
10283425Sdchagin
11283425Sdchagin#include "common.h"
12283425Sdchagin#include "eap_server/eap.h"
13283425Sdchagin#include "eapol_auth_sm.h"
14283425Sdchagin#include "eapol_auth_sm_i.h"
15283425Sdchagin
16283425Sdchaginstatic inline const char * port_type_txt(PortTypes pt)
17283425Sdchagin{
18283425Sdchagin	switch (pt) {
19283425Sdchagin	case ForceUnauthorized: return "ForceUnauthorized";
20283425Sdchagin	case ForceAuthorized: return "ForceAuthorized";
21283425Sdchagin	case Auto: return "Auto";
22283425Sdchagin	default: return "Unknown";
23283425Sdchagin	}
24283425Sdchagin}
25283425Sdchagin
26283425Sdchagin
27283425Sdchaginstatic inline const char * port_state_txt(PortState ps)
28283425Sdchagin{
29283425Sdchagin	switch (ps) {
30283425Sdchagin	case Unauthorized: return "Unauthorized";
31283425Sdchagin	case Authorized: return "Authorized";
32283425Sdchagin	default: return "Unknown";
33283425Sdchagin	}
34283425Sdchagin}
35283425Sdchagin
36283425Sdchagin
37283425Sdchaginstatic inline const char * ctrl_dir_txt(ControlledDirection dir)
38283425Sdchagin{
39283425Sdchagin	switch (dir) {
40283425Sdchagin	case Both: return "Both";
41283425Sdchagin	case In: return "In";
42283425Sdchagin	default: return "Unknown";
43283425Sdchagin	}
44283425Sdchagin}
45283425Sdchagin
46283425Sdchagin
47283425Sdchaginstatic inline const char * auth_pae_state_txt(int s)
48283425Sdchagin{
49283425Sdchagin	switch (s) {
50283425Sdchagin	case AUTH_PAE_INITIALIZE: return "INITIALIZE";
51283425Sdchagin	case AUTH_PAE_DISCONNECTED: return "DISCONNECTED";
52283425Sdchagin	case AUTH_PAE_CONNECTING: return "CONNECTING";
53283425Sdchagin	case AUTH_PAE_AUTHENTICATING: return "AUTHENTICATING";
54283425Sdchagin	case AUTH_PAE_AUTHENTICATED: return "AUTHENTICATED";
55283425Sdchagin	case AUTH_PAE_ABORTING: return "ABORTING";
56283425Sdchagin	case AUTH_PAE_HELD: return "HELD";
57283425Sdchagin	case AUTH_PAE_FORCE_AUTH: return "FORCE_AUTH";
58283425Sdchagin	case AUTH_PAE_FORCE_UNAUTH: return "FORCE_UNAUTH";
59283425Sdchagin	case AUTH_PAE_RESTART: return "RESTART";
60283425Sdchagin	default: return "Unknown";
61283425Sdchagin	}
62283425Sdchagin}
63283425Sdchagin
64283425Sdchagin
65283425Sdchaginstatic inline const char * be_auth_state_txt(int s)
66283425Sdchagin{
67283425Sdchagin	switch (s) {
68283425Sdchagin	case BE_AUTH_REQUEST: return "REQUEST";
69283425Sdchagin	case BE_AUTH_RESPONSE: return "RESPONSE";
70283425Sdchagin	case BE_AUTH_SUCCESS: return "SUCCESS";
71283425Sdchagin	case BE_AUTH_FAIL: return "FAIL";
72283425Sdchagin	case BE_AUTH_TIMEOUT: return "TIMEOUT";
73283425Sdchagin	case BE_AUTH_IDLE: return "IDLE";
74283425Sdchagin	case BE_AUTH_INITIALIZE: return "INITIALIZE";
75283425Sdchagin	case BE_AUTH_IGNORE: return "IGNORE";
76283425Sdchagin	default: return "Unknown";
77283425Sdchagin	}
78283425Sdchagin}
79283425Sdchagin
80283425Sdchagin
81283425Sdchaginstatic inline const char * reauth_timer_state_txt(int s)
82283425Sdchagin{
83283425Sdchagin	switch (s) {
84283425Sdchagin	case REAUTH_TIMER_INITIALIZE: return "INITIALIZE";
85283425Sdchagin	case REAUTH_TIMER_REAUTHENTICATE: return "REAUTHENTICATE";
86283425Sdchagin	default: return "Unknown";
87283425Sdchagin	}
88283425Sdchagin}
89283425Sdchagin
90283425Sdchagin
91283425Sdchaginstatic inline const char * auth_key_tx_state_txt(int s)
92283425Sdchagin{
93283425Sdchagin	switch (s) {
94283425Sdchagin	case AUTH_KEY_TX_NO_KEY_TRANSMIT: return "NO_KEY_TRANSMIT";
95283425Sdchagin	case AUTH_KEY_TX_KEY_TRANSMIT: return "KEY_TRANSMIT";
96283425Sdchagin	default: return "Unknown";
97283425Sdchagin	}
98283425Sdchagin}
99283425Sdchagin
100283425Sdchagin
101283425Sdchaginstatic inline const char * key_rx_state_txt(int s)
102283425Sdchagin{
103283425Sdchagin	switch (s) {
104283425Sdchagin	case KEY_RX_NO_KEY_RECEIVE: return "NO_KEY_RECEIVE";
105283425Sdchagin	case KEY_RX_KEY_RECEIVE: return "KEY_RECEIVE";
106283425Sdchagin	default: return "Unknown";
107283425Sdchagin	}
108283425Sdchagin}
109283425Sdchagin
110283425Sdchagin
111283425Sdchaginstatic inline const char * ctrl_dir_state_txt(int s)
112283425Sdchagin{
113283425Sdchagin	switch (s) {
114283425Sdchagin	case CTRL_DIR_FORCE_BOTH: return "FORCE_BOTH";
115283425Sdchagin	case CTRL_DIR_IN_OR_BOTH: return "IN_OR_BOTH";
116283425Sdchagin	default: return "Unknown";
117283425Sdchagin	}
118283425Sdchagin}
119283425Sdchagin
120283425Sdchagin
121283425Sdchaginint eapol_auth_dump_state(struct eapol_state_machine *sm, char *buf,
122283425Sdchagin			  size_t buflen)
123283425Sdchagin{
124283425Sdchagin	char *pos, *end;
125283425Sdchagin	int ret;
126283425Sdchagin
127283425Sdchagin	pos = buf;
128283425Sdchagin	end = pos + buflen;
129283425Sdchagin
130283425Sdchagin	ret = os_snprintf(pos, end - pos, "aWhile=%d\nquietWhile=%d\n"
131283425Sdchagin			  "reAuthWhen=%d\n",
132283425Sdchagin			  sm->aWhile, sm->quietWhile, sm->reAuthWhen);
133283425Sdchagin	if (os_snprintf_error(end - pos, ret))
134283425Sdchagin		return pos - buf;
135283425Sdchagin	pos += ret;
136283425Sdchagin
137283425Sdchagin#define _SB(b) ((b) ? "TRUE" : "FALSE")
138283425Sdchagin	ret = os_snprintf(pos, end - pos,
139283425Sdchagin			  "authAbort=%s\n"
140283425Sdchagin			  "authFail=%s\n"
141283425Sdchagin			  "authPortStatus=%s\n"
142283425Sdchagin			  "authStart=%s\n"
143283425Sdchagin			  "authTimeout=%s\n"
144283425Sdchagin			  "authSuccess=%s\n"
145283425Sdchagin			  "eapFail=%s\n"
146283425Sdchagin			  "eapolEap=%s\n"
147283425Sdchagin			  "eapSuccess=%s\n"
148283425Sdchagin			  "eapTimeout=%s\n"
149283425Sdchagin			  "initialize=%s\n"
150283425Sdchagin			  "keyAvailable=%s\n"
151283425Sdchagin			  "keyDone=%s\n"
152283425Sdchagin			  "keyRun=%s\n"
153283425Sdchagin			  "keyTxEnabled=%s\n"
154283425Sdchagin			  "portControl=%s\n"
155283425Sdchagin			  "portEnabled=%s\n"
156283425Sdchagin			  "portValid=%s\n"
157283425Sdchagin			  "reAuthenticate=%s\n",
158283425Sdchagin			  _SB(sm->authAbort),
159283425Sdchagin			  _SB(sm->authFail),
160283425Sdchagin			  port_state_txt(sm->authPortStatus),
161283425Sdchagin			  _SB(sm->authStart),
162283425Sdchagin			  _SB(sm->authTimeout),
163283425Sdchagin			  _SB(sm->authSuccess),
164283425Sdchagin			  _SB(sm->eap_if->eapFail),
165283425Sdchagin			  _SB(sm->eapolEap),
166283425Sdchagin			  _SB(sm->eap_if->eapSuccess),
167283425Sdchagin			  _SB(sm->eap_if->eapTimeout),
168283425Sdchagin			  _SB(sm->initialize),
169283425Sdchagin			  _SB(sm->eap_if->eapKeyAvailable),
170283425Sdchagin			  _SB(sm->keyDone), _SB(sm->keyRun),
171283425Sdchagin			  _SB(sm->keyTxEnabled),
172283425Sdchagin			  port_type_txt(sm->portControl),
173283425Sdchagin			  _SB(sm->eap_if->portEnabled),
174283425Sdchagin			  _SB(sm->portValid),
175283425Sdchagin			  _SB(sm->reAuthenticate));
176283425Sdchagin	if (os_snprintf_error(end - pos, ret))
177283425Sdchagin		return pos - buf;
178283425Sdchagin	pos += ret;
179283425Sdchagin
180283425Sdchagin	ret = os_snprintf(pos, end - pos,
181283425Sdchagin			  "auth_pae_state=%s\n"
182283425Sdchagin			  "eapolLogoff=%s\n"
183283425Sdchagin			  "eapolStart=%s\n"
184283425Sdchagin			  "eapRestart=%s\n"
185283425Sdchagin			  "portMode=%s\n"
186283425Sdchagin			  "reAuthCount=%d\n"
187283425Sdchagin			  "quietPeriod=%d\n"
188283425Sdchagin			  "reAuthMax=%d\n"
189283425Sdchagin			  "authEntersConnecting=%d\n"
190283425Sdchagin			  "authEapLogoffsWhileConnecting=%d\n"
191283425Sdchagin			  "authEntersAuthenticating=%d\n"
192283425Sdchagin			  "authAuthSuccessesWhileAuthenticating=%d\n"
193283425Sdchagin			  "authAuthTimeoutsWhileAuthenticating=%d\n"
194283425Sdchagin			  "authAuthFailWhileAuthenticating=%d\n"
195316703Smmokhi			  "authAuthEapStartsWhileAuthenticating=%d\n"
196283425Sdchagin			  "authAuthEapLogoffWhileAuthenticating=%d\n"
197283425Sdchagin			  "authAuthReauthsWhileAuthenticated=%d\n"
198316703Smmokhi			  "authAuthEapStartsWhileAuthenticated=%d\n"
199316703Smmokhi			  "authAuthEapLogoffWhileAuthenticated=%d\n",
200283425Sdchagin			  auth_pae_state_txt(sm->auth_pae_state),
201316703Smmokhi			  _SB(sm->eapolLogoff),
202316703Smmokhi			  _SB(sm->eapolStart),
203316703Smmokhi			  _SB(sm->eap_if->eapRestart),
204316703Smmokhi			  port_type_txt(sm->portMode),
205316703Smmokhi			  sm->reAuthCount,
206316703Smmokhi			  sm->quietPeriod, sm->reAuthMax,
207283425Sdchagin			  sm->authEntersConnecting,
208283425Sdchagin			  sm->authEapLogoffsWhileConnecting,
209283425Sdchagin			  sm->authEntersAuthenticating,
210283425Sdchagin			  sm->authAuthSuccessesWhileAuthenticating,
211283425Sdchagin			  sm->authAuthTimeoutsWhileAuthenticating,
212283425Sdchagin			  sm->authAuthFailWhileAuthenticating,
213283425Sdchagin			  sm->authAuthEapStartsWhileAuthenticating,
214283425Sdchagin			  sm->authAuthEapLogoffWhileAuthenticating,
215283425Sdchagin			  sm->authAuthReauthsWhileAuthenticated,
216283425Sdchagin			  sm->authAuthEapStartsWhileAuthenticated,
217283425Sdchagin			  sm->authAuthEapLogoffWhileAuthenticated);
218283425Sdchagin	if (os_snprintf_error(end - pos, ret))
219283425Sdchagin		return pos - buf;
220283425Sdchagin	pos += ret;
221283425Sdchagin
222283425Sdchagin	ret = os_snprintf(pos, end - pos,
223283425Sdchagin			  "be_auth_state=%s\n"
224283425Sdchagin			  "eapNoReq=%s\n"
225283425Sdchagin			  "eapReq=%s\n"
226316703Smmokhi			  "eapResp=%s\n"
227283425Sdchagin			  "serverTimeout=%d\n"
228283425Sdchagin			  "backendResponses=%d\n"
229283425Sdchagin			  "backendAccessChallenges=%d\n"
230314107Sdchagin			  "backendOtherRequestsToSupplicant=%d\n"
231283425Sdchagin			  "backendAuthSuccesses=%d\n"
232316703Smmokhi			  "backendAuthFails=%d\n",
233283425Sdchagin			  be_auth_state_txt(sm->be_auth_state),
234283442Sdchagin			  _SB(sm->eap_if->eapNoReq),
235316703Smmokhi			  _SB(sm->eap_if->eapReq),
236316703Smmokhi			  _SB(sm->eap_if->eapResp),
237283425Sdchagin			  sm->serverTimeout,
238283425Sdchagin			  sm->backendResponses,
239283425Sdchagin			  sm->backendAccessChallenges,
240283425Sdchagin			  sm->backendOtherRequestsToSupplicant,
241283425Sdchagin			  sm->backendAuthSuccesses,
242283425Sdchagin			  sm->backendAuthFails);
243283425Sdchagin	if (os_snprintf_error(end - pos, ret))
244283425Sdchagin		return pos - buf;
245283425Sdchagin	pos += ret;
246283425Sdchagin
247283425Sdchagin	ret = os_snprintf(pos, end - pos,
248283425Sdchagin			  "reauth_timer_state=%s\n"
249283425Sdchagin			  "reAuthPeriod=%d\n"
250283425Sdchagin			  "reAuthEnabled=%s\n",
251283425Sdchagin			  reauth_timer_state_txt(sm->reauth_timer_state),
252283425Sdchagin			  sm->reAuthPeriod,
253283442Sdchagin			  _SB(sm->reAuthEnabled));
254283442Sdchagin	if (os_snprintf_error(end - pos, ret))
255283425Sdchagin		return pos - buf;
256283425Sdchagin	pos += ret;
257283425Sdchagin
258283425Sdchagin	ret = os_snprintf(pos, end - pos,
259283425Sdchagin			  "auth_key_tx_state=%s\n",
260283425Sdchagin			  auth_key_tx_state_txt(sm->auth_key_tx_state));
261283425Sdchagin	if (os_snprintf_error(end - pos, ret))
262283425Sdchagin		return pos - buf;
263283425Sdchagin	pos += ret;
264283425Sdchagin
265283425Sdchagin	ret = os_snprintf(pos, end - pos,
266283425Sdchagin			  "key_rx_state=%s\n"
267283425Sdchagin			  "rxKey=%s\n",
268283425Sdchagin			  key_rx_state_txt(sm->key_rx_state),
269283425Sdchagin			  _SB(sm->rxKey));
270283425Sdchagin	if (os_snprintf_error(end - pos, ret))
271283425Sdchagin		return pos - buf;
272283425Sdchagin	pos += ret;
273283425Sdchagin
274283425Sdchagin	ret = os_snprintf(pos, end - pos,
275283425Sdchagin			  "ctrl_dir_state=%s\n"
276283425Sdchagin			  "adminControlledDirections=%s\n"
277283425Sdchagin			  "operControlledDirections=%s\n"
278283425Sdchagin			  "operEdge=%s\n",
279283425Sdchagin			  ctrl_dir_state_txt(sm->ctrl_dir_state),
280283425Sdchagin			  ctrl_dir_txt(sm->adminControlledDirections),
281283425Sdchagin			  ctrl_dir_txt(sm->operControlledDirections),
282283425Sdchagin			  _SB(sm->operEdge));
283283425Sdchagin	if (os_snprintf_error(end - pos, ret))
284283425Sdchagin		return pos - buf;
285283425Sdchagin	pos += ret;
286283425Sdchagin#undef _SB
287283425Sdchagin
288283425Sdchagin	return pos - buf;
289283425Sdchagin}
290283425Sdchagin