xref: /netbsd-src/external/bsd/wpa/dist/src/eapol_auth/eapol_auth_dump.c (revision bb610346a8016c1ae01add70588fb99ab87e6bab)
18dbcf02cSchristos /*
28dbcf02cSchristos  * IEEE 802.1X-2004 Authenticator - State dump
33c260e60Schristos  * Copyright (c) 2002-2013, Jouni Malinen <j@w1.fi>
48dbcf02cSchristos  *
5e604d861Schristos  * This software may be distributed under the terms of the BSD license.
6e604d861Schristos  * See README for more details.
78dbcf02cSchristos  */
88dbcf02cSchristos 
98dbcf02cSchristos #include "includes.h"
108dbcf02cSchristos 
118dbcf02cSchristos #include "common.h"
128dbcf02cSchristos #include "eap_server/eap.h"
138dbcf02cSchristos #include "eapol_auth_sm.h"
148dbcf02cSchristos #include "eapol_auth_sm_i.h"
158dbcf02cSchristos 
port_type_txt(PortTypes pt)168dbcf02cSchristos static inline const char * port_type_txt(PortTypes pt)
178dbcf02cSchristos {
188dbcf02cSchristos 	switch (pt) {
198dbcf02cSchristos 	case ForceUnauthorized: return "ForceUnauthorized";
208dbcf02cSchristos 	case ForceAuthorized: return "ForceAuthorized";
218dbcf02cSchristos 	case Auto: return "Auto";
228dbcf02cSchristos 	default: return "Unknown";
238dbcf02cSchristos 	}
248dbcf02cSchristos }
258dbcf02cSchristos 
268dbcf02cSchristos 
port_state_txt(PortState ps)278dbcf02cSchristos static inline const char * port_state_txt(PortState ps)
288dbcf02cSchristos {
298dbcf02cSchristos 	switch (ps) {
308dbcf02cSchristos 	case Unauthorized: return "Unauthorized";
318dbcf02cSchristos 	case Authorized: return "Authorized";
328dbcf02cSchristos 	default: return "Unknown";
338dbcf02cSchristos 	}
348dbcf02cSchristos }
358dbcf02cSchristos 
368dbcf02cSchristos 
ctrl_dir_txt(ControlledDirection dir)378dbcf02cSchristos static inline const char * ctrl_dir_txt(ControlledDirection dir)
388dbcf02cSchristos {
398dbcf02cSchristos 	switch (dir) {
408dbcf02cSchristos 	case Both: return "Both";
418dbcf02cSchristos 	case In: return "In";
428dbcf02cSchristos 	default: return "Unknown";
438dbcf02cSchristos 	}
448dbcf02cSchristos }
458dbcf02cSchristos 
468dbcf02cSchristos 
auth_pae_state_txt(int s)478dbcf02cSchristos static inline const char * auth_pae_state_txt(int s)
488dbcf02cSchristos {
498dbcf02cSchristos 	switch (s) {
508dbcf02cSchristos 	case AUTH_PAE_INITIALIZE: return "INITIALIZE";
518dbcf02cSchristos 	case AUTH_PAE_DISCONNECTED: return "DISCONNECTED";
528dbcf02cSchristos 	case AUTH_PAE_CONNECTING: return "CONNECTING";
538dbcf02cSchristos 	case AUTH_PAE_AUTHENTICATING: return "AUTHENTICATING";
548dbcf02cSchristos 	case AUTH_PAE_AUTHENTICATED: return "AUTHENTICATED";
558dbcf02cSchristos 	case AUTH_PAE_ABORTING: return "ABORTING";
568dbcf02cSchristos 	case AUTH_PAE_HELD: return "HELD";
578dbcf02cSchristos 	case AUTH_PAE_FORCE_AUTH: return "FORCE_AUTH";
588dbcf02cSchristos 	case AUTH_PAE_FORCE_UNAUTH: return "FORCE_UNAUTH";
598dbcf02cSchristos 	case AUTH_PAE_RESTART: return "RESTART";
608dbcf02cSchristos 	default: return "Unknown";
618dbcf02cSchristos 	}
628dbcf02cSchristos }
638dbcf02cSchristos 
648dbcf02cSchristos 
be_auth_state_txt(int s)658dbcf02cSchristos static inline const char * be_auth_state_txt(int s)
668dbcf02cSchristos {
678dbcf02cSchristos 	switch (s) {
688dbcf02cSchristos 	case BE_AUTH_REQUEST: return "REQUEST";
698dbcf02cSchristos 	case BE_AUTH_RESPONSE: return "RESPONSE";
708dbcf02cSchristos 	case BE_AUTH_SUCCESS: return "SUCCESS";
718dbcf02cSchristos 	case BE_AUTH_FAIL: return "FAIL";
728dbcf02cSchristos 	case BE_AUTH_TIMEOUT: return "TIMEOUT";
738dbcf02cSchristos 	case BE_AUTH_IDLE: return "IDLE";
748dbcf02cSchristos 	case BE_AUTH_INITIALIZE: return "INITIALIZE";
758dbcf02cSchristos 	case BE_AUTH_IGNORE: return "IGNORE";
768dbcf02cSchristos 	default: return "Unknown";
778dbcf02cSchristos 	}
788dbcf02cSchristos }
798dbcf02cSchristos 
808dbcf02cSchristos 
reauth_timer_state_txt(int s)818dbcf02cSchristos static inline const char * reauth_timer_state_txt(int s)
828dbcf02cSchristos {
838dbcf02cSchristos 	switch (s) {
848dbcf02cSchristos 	case REAUTH_TIMER_INITIALIZE: return "INITIALIZE";
858dbcf02cSchristos 	case REAUTH_TIMER_REAUTHENTICATE: return "REAUTHENTICATE";
868dbcf02cSchristos 	default: return "Unknown";
878dbcf02cSchristos 	}
888dbcf02cSchristos }
898dbcf02cSchristos 
908dbcf02cSchristos 
auth_key_tx_state_txt(int s)918dbcf02cSchristos static inline const char * auth_key_tx_state_txt(int s)
928dbcf02cSchristos {
938dbcf02cSchristos 	switch (s) {
948dbcf02cSchristos 	case AUTH_KEY_TX_NO_KEY_TRANSMIT: return "NO_KEY_TRANSMIT";
958dbcf02cSchristos 	case AUTH_KEY_TX_KEY_TRANSMIT: return "KEY_TRANSMIT";
968dbcf02cSchristos 	default: return "Unknown";
978dbcf02cSchristos 	}
988dbcf02cSchristos }
998dbcf02cSchristos 
1008dbcf02cSchristos 
key_rx_state_txt(int s)1018dbcf02cSchristos static inline const char * key_rx_state_txt(int s)
1028dbcf02cSchristos {
1038dbcf02cSchristos 	switch (s) {
1048dbcf02cSchristos 	case KEY_RX_NO_KEY_RECEIVE: return "NO_KEY_RECEIVE";
1058dbcf02cSchristos 	case KEY_RX_KEY_RECEIVE: return "KEY_RECEIVE";
1068dbcf02cSchristos 	default: return "Unknown";
1078dbcf02cSchristos 	}
1088dbcf02cSchristos }
1098dbcf02cSchristos 
1108dbcf02cSchristos 
ctrl_dir_state_txt(int s)1118dbcf02cSchristos static inline const char * ctrl_dir_state_txt(int s)
1128dbcf02cSchristos {
1138dbcf02cSchristos 	switch (s) {
1148dbcf02cSchristos 	case CTRL_DIR_FORCE_BOTH: return "FORCE_BOTH";
1158dbcf02cSchristos 	case CTRL_DIR_IN_OR_BOTH: return "IN_OR_BOTH";
1168dbcf02cSchristos 	default: return "Unknown";
1178dbcf02cSchristos 	}
1188dbcf02cSchristos }
1198dbcf02cSchristos 
1208dbcf02cSchristos 
eapol_auth_dump_state(struct eapol_state_machine * sm,char * buf,size_t buflen)1213c260e60Schristos int eapol_auth_dump_state(struct eapol_state_machine *sm, char *buf,
1223c260e60Schristos 			  size_t buflen)
1238dbcf02cSchristos {
1243c260e60Schristos 	char *pos, *end;
1253c260e60Schristos 	int ret;
1263c260e60Schristos 
1273c260e60Schristos 	pos = buf;
1283c260e60Schristos 	end = pos + buflen;
1293c260e60Schristos 
1303c260e60Schristos 	ret = os_snprintf(pos, end - pos, "aWhile=%d\nquietWhile=%d\n"
1313c260e60Schristos 			  "reAuthWhen=%d\n",
1328dbcf02cSchristos 			  sm->aWhile, sm->quietWhile, sm->reAuthWhen);
133*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
1343c260e60Schristos 		return pos - buf;
1353c260e60Schristos 	pos += ret;
1363c260e60Schristos 
1378dbcf02cSchristos #define _SB(b) ((b) ? "TRUE" : "FALSE")
1383c260e60Schristos 	ret = os_snprintf(pos, end - pos,
1393c260e60Schristos 			  "authAbort=%s\n"
1403c260e60Schristos 			  "authFail=%s\n"
1413c260e60Schristos 			  "authPortStatus=%s\n"
1423c260e60Schristos 			  "authStart=%s\n"
1433c260e60Schristos 			  "authTimeout=%s\n"
1443c260e60Schristos 			  "authSuccess=%s\n"
1453c260e60Schristos 			  "eapFail=%s\n"
1463c260e60Schristos 			  "eapolEap=%s\n"
1473c260e60Schristos 			  "eapSuccess=%s\n"
1483c260e60Schristos 			  "eapTimeout=%s\n"
1493c260e60Schristos 			  "initialize=%s\n"
1508dbcf02cSchristos 			  "keyAvailable=%s\n"
1513c260e60Schristos 			  "keyDone=%s\n"
1523c260e60Schristos 			  "keyRun=%s\n"
1533c260e60Schristos 			  "keyTxEnabled=%s\n"
1543c260e60Schristos 			  "portControl=%s\n"
1553c260e60Schristos 			  "portEnabled=%s\n"
1563c260e60Schristos 			  "portValid=%s\n"
1573c260e60Schristos 			  "reAuthenticate=%s\n",
1583c260e60Schristos 			  _SB(sm->authAbort),
1593c260e60Schristos 			  _SB(sm->authFail),
1603c260e60Schristos 			  port_state_txt(sm->authPortStatus),
1613c260e60Schristos 			  _SB(sm->authStart),
1623c260e60Schristos 			  _SB(sm->authTimeout),
1633c260e60Schristos 			  _SB(sm->authSuccess),
1643c260e60Schristos 			  _SB(sm->eap_if->eapFail),
1653c260e60Schristos 			  _SB(sm->eapolEap),
1663c260e60Schristos 			  _SB(sm->eap_if->eapSuccess),
1678dbcf02cSchristos 			  _SB(sm->eap_if->eapTimeout),
1683c260e60Schristos 			  _SB(sm->initialize),
1693c260e60Schristos 			  _SB(sm->eap_if->eapKeyAvailable),
1703c260e60Schristos 			  _SB(sm->keyDone), _SB(sm->keyRun),
1713c260e60Schristos 			  _SB(sm->keyTxEnabled),
1723c260e60Schristos 			  port_type_txt(sm->portControl),
1733c260e60Schristos 			  _SB(sm->eap_if->portEnabled),
1743c260e60Schristos 			  _SB(sm->portValid),
1758dbcf02cSchristos 			  _SB(sm->reAuthenticate));
176*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
1773c260e60Schristos 		return pos - buf;
1783c260e60Schristos 	pos += ret;
1798dbcf02cSchristos 
1803c260e60Schristos 	ret = os_snprintf(pos, end - pos,
1813c260e60Schristos 			  "auth_pae_state=%s\n"
1823c260e60Schristos 			  "eapolLogoff=%s\n"
1833c260e60Schristos 			  "eapolStart=%s\n"
1843c260e60Schristos 			  "eapRestart=%s\n"
1853c260e60Schristos 			  "portMode=%s\n"
1863c260e60Schristos 			  "reAuthCount=%d\n"
1873c260e60Schristos 			  "quietPeriod=%d\n"
1883c260e60Schristos 			  "reAuthMax=%d\n"
1893c260e60Schristos 			  "authEntersConnecting=%d\n"
1903c260e60Schristos 			  "authEapLogoffsWhileConnecting=%d\n"
1913c260e60Schristos 			  "authEntersAuthenticating=%d\n"
1923c260e60Schristos 			  "authAuthSuccessesWhileAuthenticating=%d\n"
1933c260e60Schristos 			  "authAuthTimeoutsWhileAuthenticating=%d\n"
1943c260e60Schristos 			  "authAuthFailWhileAuthenticating=%d\n"
1953c260e60Schristos 			  "authAuthEapStartsWhileAuthenticating=%d\n"
1963c260e60Schristos 			  "authAuthEapLogoffWhileAuthenticating=%d\n"
1973c260e60Schristos 			  "authAuthReauthsWhileAuthenticated=%d\n"
1983c260e60Schristos 			  "authAuthEapStartsWhileAuthenticated=%d\n"
1993c260e60Schristos 			  "authAuthEapLogoffWhileAuthenticated=%d\n",
2003c260e60Schristos 			  auth_pae_state_txt(sm->auth_pae_state),
2013c260e60Schristos 			  _SB(sm->eapolLogoff),
2023c260e60Schristos 			  _SB(sm->eapolStart),
2038dbcf02cSchristos 			  _SB(sm->eap_if->eapRestart),
2043c260e60Schristos 			  port_type_txt(sm->portMode),
2053c260e60Schristos 			  sm->reAuthCount,
2063c260e60Schristos 			  sm->quietPeriod, sm->reAuthMax,
2073c260e60Schristos 			  sm->authEntersConnecting,
2083c260e60Schristos 			  sm->authEapLogoffsWhileConnecting,
2093c260e60Schristos 			  sm->authEntersAuthenticating,
2103c260e60Schristos 			  sm->authAuthSuccessesWhileAuthenticating,
2113c260e60Schristos 			  sm->authAuthTimeoutsWhileAuthenticating,
2123c260e60Schristos 			  sm->authAuthFailWhileAuthenticating,
2133c260e60Schristos 			  sm->authAuthEapStartsWhileAuthenticating,
2143c260e60Schristos 			  sm->authAuthEapLogoffWhileAuthenticating,
2153c260e60Schristos 			  sm->authAuthReauthsWhileAuthenticated,
2163c260e60Schristos 			  sm->authAuthEapStartsWhileAuthenticated,
2173c260e60Schristos 			  sm->authAuthEapLogoffWhileAuthenticated);
218*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
2193c260e60Schristos 		return pos - buf;
2203c260e60Schristos 	pos += ret;
2218dbcf02cSchristos 
2223c260e60Schristos 	ret = os_snprintf(pos, end - pos,
2233c260e60Schristos 			  "be_auth_state=%s\n"
2243c260e60Schristos 			  "eapNoReq=%s\n"
2253c260e60Schristos 			  "eapReq=%s\n"
2263c260e60Schristos 			  "eapResp=%s\n"
2273c260e60Schristos 			  "serverTimeout=%d\n"
2283c260e60Schristos 			  "backendResponses=%d\n"
2293c260e60Schristos 			  "backendAccessChallenges=%d\n"
2303c260e60Schristos 			  "backendOtherRequestsToSupplicant=%d\n"
2313c260e60Schristos 			  "backendAuthSuccesses=%d\n"
2323c260e60Schristos 			  "backendAuthFails=%d\n",
2338dbcf02cSchristos 			  be_auth_state_txt(sm->be_auth_state),
2343c260e60Schristos 			  _SB(sm->eap_if->eapNoReq),
2353c260e60Schristos 			  _SB(sm->eap_if->eapReq),
2368dbcf02cSchristos 			  _SB(sm->eap_if->eapResp),
2373c260e60Schristos 			  sm->serverTimeout,
2383c260e60Schristos 			  sm->backendResponses,
2393c260e60Schristos 			  sm->backendAccessChallenges,
2403c260e60Schristos 			  sm->backendOtherRequestsToSupplicant,
2413c260e60Schristos 			  sm->backendAuthSuccesses,
2423c260e60Schristos 			  sm->backendAuthFails);
243*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
2443c260e60Schristos 		return pos - buf;
2453c260e60Schristos 	pos += ret;
2468dbcf02cSchristos 
2473c260e60Schristos 	ret = os_snprintf(pos, end - pos,
2483c260e60Schristos 			  "reauth_timer_state=%s\n"
2493c260e60Schristos 			  "reAuthPeriod=%d\n"
2503c260e60Schristos 			  "reAuthEnabled=%s\n",
2513c260e60Schristos 			  reauth_timer_state_txt(sm->reauth_timer_state),
2523c260e60Schristos 			  sm->reAuthPeriod,
2533c260e60Schristos 			  _SB(sm->reAuthEnabled));
254*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
2553c260e60Schristos 		return pos - buf;
2563c260e60Schristos 	pos += ret;
2578dbcf02cSchristos 
2583c260e60Schristos 	ret = os_snprintf(pos, end - pos,
2593c260e60Schristos 			  "auth_key_tx_state=%s\n",
2608dbcf02cSchristos 			  auth_key_tx_state_txt(sm->auth_key_tx_state));
261*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
2623c260e60Schristos 		return pos - buf;
2633c260e60Schristos 	pos += ret;
2648dbcf02cSchristos 
2653c260e60Schristos 	ret = os_snprintf(pos, end - pos,
2663c260e60Schristos 			  "key_rx_state=%s\n"
2673c260e60Schristos 			  "rxKey=%s\n",
2683c260e60Schristos 			  key_rx_state_txt(sm->key_rx_state),
2693c260e60Schristos 			  _SB(sm->rxKey));
270*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
2713c260e60Schristos 		return pos - buf;
2723c260e60Schristos 	pos += ret;
2738dbcf02cSchristos 
2743c260e60Schristos 	ret = os_snprintf(pos, end - pos,
2753c260e60Schristos 			  "ctrl_dir_state=%s\n"
2763c260e60Schristos 			  "adminControlledDirections=%s\n"
2778dbcf02cSchristos 			  "operControlledDirections=%s\n"
2783c260e60Schristos 			  "operEdge=%s\n",
2798dbcf02cSchristos 			  ctrl_dir_state_txt(sm->ctrl_dir_state),
2803c260e60Schristos 			  ctrl_dir_txt(sm->adminControlledDirections),
2818dbcf02cSchristos 			  ctrl_dir_txt(sm->operControlledDirections),
2823c260e60Schristos 			  _SB(sm->operEdge));
283*bb610346Schristos 	if (os_snprintf_error(end - pos, ret))
2843c260e60Schristos 		return pos - buf;
2853c260e60Schristos 	pos += ret;
2868dbcf02cSchristos #undef _SB
2873c260e60Schristos 
2883c260e60Schristos 	return pos - buf;
2898dbcf02cSchristos }
290