1214501Srpaulo/* 2214501Srpaulo * IEEE 802.1X-2004 Authenticator - State dump 3281806Srpaulo * Copyright (c) 2002-2013, Jouni Malinen <j@w1.fi> 4214501Srpaulo * 5252726Srpaulo * This software may be distributed under the terms of the BSD license. 6252726Srpaulo * See README for more details. 7214501Srpaulo */ 8214501Srpaulo 9214501Srpaulo#include "includes.h" 10214501Srpaulo 11214501Srpaulo#include "common.h" 12214501Srpaulo#include "eap_server/eap.h" 13214501Srpaulo#include "eapol_auth_sm.h" 14214501Srpaulo#include "eapol_auth_sm_i.h" 15214501Srpaulo 16214501Srpaulostatic inline const char * port_type_txt(PortTypes pt) 17214501Srpaulo{ 18214501Srpaulo switch (pt) { 19214501Srpaulo case ForceUnauthorized: return "ForceUnauthorized"; 20214501Srpaulo case ForceAuthorized: return "ForceAuthorized"; 21214501Srpaulo case Auto: return "Auto"; 22214501Srpaulo default: return "Unknown"; 23214501Srpaulo } 24214501Srpaulo} 25214501Srpaulo 26214501Srpaulo 27214501Srpaulostatic inline const char * port_state_txt(PortState ps) 28214501Srpaulo{ 29214501Srpaulo switch (ps) { 30214501Srpaulo case Unauthorized: return "Unauthorized"; 31214501Srpaulo case Authorized: return "Authorized"; 32214501Srpaulo default: return "Unknown"; 33214501Srpaulo } 34214501Srpaulo} 35214501Srpaulo 36214501Srpaulo 37214501Srpaulostatic inline const char * ctrl_dir_txt(ControlledDirection dir) 38214501Srpaulo{ 39214501Srpaulo switch (dir) { 40214501Srpaulo case Both: return "Both"; 41214501Srpaulo case In: return "In"; 42214501Srpaulo default: return "Unknown"; 43214501Srpaulo } 44214501Srpaulo} 45214501Srpaulo 46214501Srpaulo 47214501Srpaulostatic inline const char * auth_pae_state_txt(int s) 48214501Srpaulo{ 49214501Srpaulo switch (s) { 50214501Srpaulo case AUTH_PAE_INITIALIZE: return "INITIALIZE"; 51214501Srpaulo case AUTH_PAE_DISCONNECTED: return "DISCONNECTED"; 52214501Srpaulo case AUTH_PAE_CONNECTING: return "CONNECTING"; 53214501Srpaulo case AUTH_PAE_AUTHENTICATING: return "AUTHENTICATING"; 54214501Srpaulo case AUTH_PAE_AUTHENTICATED: return "AUTHENTICATED"; 55214501Srpaulo case AUTH_PAE_ABORTING: return "ABORTING"; 56214501Srpaulo case AUTH_PAE_HELD: return "HELD"; 57214501Srpaulo case AUTH_PAE_FORCE_AUTH: return "FORCE_AUTH"; 58214501Srpaulo case AUTH_PAE_FORCE_UNAUTH: return "FORCE_UNAUTH"; 59214501Srpaulo case AUTH_PAE_RESTART: return "RESTART"; 60214501Srpaulo default: return "Unknown"; 61214501Srpaulo } 62214501Srpaulo} 63214501Srpaulo 64214501Srpaulo 65214501Srpaulostatic inline const char * be_auth_state_txt(int s) 66214501Srpaulo{ 67214501Srpaulo switch (s) { 68214501Srpaulo case BE_AUTH_REQUEST: return "REQUEST"; 69214501Srpaulo case BE_AUTH_RESPONSE: return "RESPONSE"; 70214501Srpaulo case BE_AUTH_SUCCESS: return "SUCCESS"; 71214501Srpaulo case BE_AUTH_FAIL: return "FAIL"; 72214501Srpaulo case BE_AUTH_TIMEOUT: return "TIMEOUT"; 73214501Srpaulo case BE_AUTH_IDLE: return "IDLE"; 74214501Srpaulo case BE_AUTH_INITIALIZE: return "INITIALIZE"; 75214501Srpaulo case BE_AUTH_IGNORE: return "IGNORE"; 76214501Srpaulo default: return "Unknown"; 77214501Srpaulo } 78214501Srpaulo} 79214501Srpaulo 80214501Srpaulo 81214501Srpaulostatic inline const char * reauth_timer_state_txt(int s) 82214501Srpaulo{ 83214501Srpaulo switch (s) { 84214501Srpaulo case REAUTH_TIMER_INITIALIZE: return "INITIALIZE"; 85214501Srpaulo case REAUTH_TIMER_REAUTHENTICATE: return "REAUTHENTICATE"; 86214501Srpaulo default: return "Unknown"; 87214501Srpaulo } 88214501Srpaulo} 89214501Srpaulo 90214501Srpaulo 91214501Srpaulostatic inline const char * auth_key_tx_state_txt(int s) 92214501Srpaulo{ 93214501Srpaulo switch (s) { 94214501Srpaulo case AUTH_KEY_TX_NO_KEY_TRANSMIT: return "NO_KEY_TRANSMIT"; 95214501Srpaulo case AUTH_KEY_TX_KEY_TRANSMIT: return "KEY_TRANSMIT"; 96214501Srpaulo default: return "Unknown"; 97214501Srpaulo } 98214501Srpaulo} 99214501Srpaulo 100214501Srpaulo 101214501Srpaulostatic inline const char * key_rx_state_txt(int s) 102214501Srpaulo{ 103214501Srpaulo switch (s) { 104214501Srpaulo case KEY_RX_NO_KEY_RECEIVE: return "NO_KEY_RECEIVE"; 105214501Srpaulo case KEY_RX_KEY_RECEIVE: return "KEY_RECEIVE"; 106214501Srpaulo default: return "Unknown"; 107214501Srpaulo } 108214501Srpaulo} 109214501Srpaulo 110214501Srpaulo 111214501Srpaulostatic inline const char * ctrl_dir_state_txt(int s) 112214501Srpaulo{ 113214501Srpaulo switch (s) { 114214501Srpaulo case CTRL_DIR_FORCE_BOTH: return "FORCE_BOTH"; 115214501Srpaulo case CTRL_DIR_IN_OR_BOTH: return "IN_OR_BOTH"; 116214501Srpaulo default: return "Unknown"; 117214501Srpaulo } 118214501Srpaulo} 119214501Srpaulo 120214501Srpaulo 121281806Srpauloint eapol_auth_dump_state(struct eapol_state_machine *sm, char *buf, 122281806Srpaulo size_t buflen) 123214501Srpaulo{ 124281806Srpaulo char *pos, *end; 125281806Srpaulo int ret; 126281806Srpaulo 127281806Srpaulo pos = buf; 128281806Srpaulo end = pos + buflen; 129281806Srpaulo 130281806Srpaulo ret = os_snprintf(pos, end - pos, "aWhile=%d\nquietWhile=%d\n" 131281806Srpaulo "reAuthWhen=%d\n", 132281806Srpaulo sm->aWhile, sm->quietWhile, sm->reAuthWhen); 133281806Srpaulo if (os_snprintf_error(end - pos, ret)) 134281806Srpaulo return pos - buf; 135281806Srpaulo pos += ret; 136281806Srpaulo 137214501Srpaulo#define _SB(b) ((b) ? "TRUE" : "FALSE") 138281806Srpaulo ret = os_snprintf(pos, end - pos, 139281806Srpaulo "authAbort=%s\n" 140281806Srpaulo "authFail=%s\n" 141281806Srpaulo "authPortStatus=%s\n" 142281806Srpaulo "authStart=%s\n" 143281806Srpaulo "authTimeout=%s\n" 144281806Srpaulo "authSuccess=%s\n" 145281806Srpaulo "eapFail=%s\n" 146281806Srpaulo "eapolEap=%s\n" 147281806Srpaulo "eapSuccess=%s\n" 148281806Srpaulo "eapTimeout=%s\n" 149281806Srpaulo "initialize=%s\n" 150281806Srpaulo "keyAvailable=%s\n" 151281806Srpaulo "keyDone=%s\n" 152281806Srpaulo "keyRun=%s\n" 153281806Srpaulo "keyTxEnabled=%s\n" 154281806Srpaulo "portControl=%s\n" 155281806Srpaulo "portEnabled=%s\n" 156281806Srpaulo "portValid=%s\n" 157281806Srpaulo "reAuthenticate=%s\n", 158281806Srpaulo _SB(sm->authAbort), 159281806Srpaulo _SB(sm->authFail), 160281806Srpaulo port_state_txt(sm->authPortStatus), 161281806Srpaulo _SB(sm->authStart), 162281806Srpaulo _SB(sm->authTimeout), 163281806Srpaulo _SB(sm->authSuccess), 164281806Srpaulo _SB(sm->eap_if->eapFail), 165281806Srpaulo _SB(sm->eapolEap), 166281806Srpaulo _SB(sm->eap_if->eapSuccess), 167281806Srpaulo _SB(sm->eap_if->eapTimeout), 168281806Srpaulo _SB(sm->initialize), 169281806Srpaulo _SB(sm->eap_if->eapKeyAvailable), 170281806Srpaulo _SB(sm->keyDone), _SB(sm->keyRun), 171281806Srpaulo _SB(sm->keyTxEnabled), 172281806Srpaulo port_type_txt(sm->portControl), 173281806Srpaulo _SB(sm->eap_if->portEnabled), 174281806Srpaulo _SB(sm->portValid), 175281806Srpaulo _SB(sm->reAuthenticate)); 176281806Srpaulo if (os_snprintf_error(end - pos, ret)) 177281806Srpaulo return pos - buf; 178281806Srpaulo pos += ret; 179214501Srpaulo 180281806Srpaulo ret = os_snprintf(pos, end - pos, 181281806Srpaulo "auth_pae_state=%s\n" 182281806Srpaulo "eapolLogoff=%s\n" 183281806Srpaulo "eapolStart=%s\n" 184281806Srpaulo "eapRestart=%s\n" 185281806Srpaulo "portMode=%s\n" 186281806Srpaulo "reAuthCount=%d\n" 187281806Srpaulo "quietPeriod=%d\n" 188281806Srpaulo "reAuthMax=%d\n" 189281806Srpaulo "authEntersConnecting=%d\n" 190281806Srpaulo "authEapLogoffsWhileConnecting=%d\n" 191281806Srpaulo "authEntersAuthenticating=%d\n" 192281806Srpaulo "authAuthSuccessesWhileAuthenticating=%d\n" 193281806Srpaulo "authAuthTimeoutsWhileAuthenticating=%d\n" 194281806Srpaulo "authAuthFailWhileAuthenticating=%d\n" 195281806Srpaulo "authAuthEapStartsWhileAuthenticating=%d\n" 196281806Srpaulo "authAuthEapLogoffWhileAuthenticating=%d\n" 197281806Srpaulo "authAuthReauthsWhileAuthenticated=%d\n" 198281806Srpaulo "authAuthEapStartsWhileAuthenticated=%d\n" 199281806Srpaulo "authAuthEapLogoffWhileAuthenticated=%d\n", 200281806Srpaulo auth_pae_state_txt(sm->auth_pae_state), 201281806Srpaulo _SB(sm->eapolLogoff), 202281806Srpaulo _SB(sm->eapolStart), 203281806Srpaulo _SB(sm->eap_if->eapRestart), 204281806Srpaulo port_type_txt(sm->portMode), 205281806Srpaulo sm->reAuthCount, 206281806Srpaulo sm->quietPeriod, sm->reAuthMax, 207281806Srpaulo sm->authEntersConnecting, 208281806Srpaulo sm->authEapLogoffsWhileConnecting, 209281806Srpaulo sm->authEntersAuthenticating, 210281806Srpaulo sm->authAuthSuccessesWhileAuthenticating, 211281806Srpaulo sm->authAuthTimeoutsWhileAuthenticating, 212281806Srpaulo sm->authAuthFailWhileAuthenticating, 213281806Srpaulo sm->authAuthEapStartsWhileAuthenticating, 214281806Srpaulo sm->authAuthEapLogoffWhileAuthenticating, 215281806Srpaulo sm->authAuthReauthsWhileAuthenticated, 216281806Srpaulo sm->authAuthEapStartsWhileAuthenticated, 217281806Srpaulo sm->authAuthEapLogoffWhileAuthenticated); 218281806Srpaulo if (os_snprintf_error(end - pos, ret)) 219281806Srpaulo return pos - buf; 220281806Srpaulo pos += ret; 221214501Srpaulo 222281806Srpaulo ret = os_snprintf(pos, end - pos, 223281806Srpaulo "be_auth_state=%s\n" 224281806Srpaulo "eapNoReq=%s\n" 225281806Srpaulo "eapReq=%s\n" 226281806Srpaulo "eapResp=%s\n" 227281806Srpaulo "serverTimeout=%d\n" 228281806Srpaulo "backendResponses=%d\n" 229281806Srpaulo "backendAccessChallenges=%d\n" 230281806Srpaulo "backendOtherRequestsToSupplicant=%d\n" 231281806Srpaulo "backendAuthSuccesses=%d\n" 232281806Srpaulo "backendAuthFails=%d\n", 233281806Srpaulo be_auth_state_txt(sm->be_auth_state), 234281806Srpaulo _SB(sm->eap_if->eapNoReq), 235281806Srpaulo _SB(sm->eap_if->eapReq), 236281806Srpaulo _SB(sm->eap_if->eapResp), 237281806Srpaulo sm->serverTimeout, 238281806Srpaulo sm->backendResponses, 239281806Srpaulo sm->backendAccessChallenges, 240281806Srpaulo sm->backendOtherRequestsToSupplicant, 241281806Srpaulo sm->backendAuthSuccesses, 242281806Srpaulo sm->backendAuthFails); 243281806Srpaulo if (os_snprintf_error(end - pos, ret)) 244281806Srpaulo return pos - buf; 245281806Srpaulo pos += ret; 246214501Srpaulo 247281806Srpaulo ret = os_snprintf(pos, end - pos, 248281806Srpaulo "reauth_timer_state=%s\n" 249281806Srpaulo "reAuthPeriod=%d\n" 250281806Srpaulo "reAuthEnabled=%s\n", 251281806Srpaulo reauth_timer_state_txt(sm->reauth_timer_state), 252281806Srpaulo sm->reAuthPeriod, 253281806Srpaulo _SB(sm->reAuthEnabled)); 254281806Srpaulo if (os_snprintf_error(end - pos, ret)) 255281806Srpaulo return pos - buf; 256281806Srpaulo pos += ret; 257214501Srpaulo 258281806Srpaulo ret = os_snprintf(pos, end - pos, 259281806Srpaulo "auth_key_tx_state=%s\n", 260281806Srpaulo auth_key_tx_state_txt(sm->auth_key_tx_state)); 261281806Srpaulo if (os_snprintf_error(end - pos, ret)) 262281806Srpaulo return pos - buf; 263281806Srpaulo pos += ret; 264214501Srpaulo 265281806Srpaulo ret = os_snprintf(pos, end - pos, 266281806Srpaulo "key_rx_state=%s\n" 267281806Srpaulo "rxKey=%s\n", 268281806Srpaulo key_rx_state_txt(sm->key_rx_state), 269281806Srpaulo _SB(sm->rxKey)); 270281806Srpaulo if (os_snprintf_error(end - pos, ret)) 271281806Srpaulo return pos - buf; 272281806Srpaulo pos += ret; 273214501Srpaulo 274281806Srpaulo ret = os_snprintf(pos, end - pos, 275281806Srpaulo "ctrl_dir_state=%s\n" 276281806Srpaulo "adminControlledDirections=%s\n" 277281806Srpaulo "operControlledDirections=%s\n" 278281806Srpaulo "operEdge=%s\n", 279281806Srpaulo ctrl_dir_state_txt(sm->ctrl_dir_state), 280281806Srpaulo ctrl_dir_txt(sm->adminControlledDirections), 281281806Srpaulo ctrl_dir_txt(sm->operControlledDirections), 282281806Srpaulo _SB(sm->operEdge)); 283281806Srpaulo if (os_snprintf_error(end - pos, ret)) 284281806Srpaulo return pos - buf; 285281806Srpaulo pos += ret; 286214501Srpaulo#undef _SB 287281806Srpaulo 288281806Srpaulo return pos - buf; 289214501Srpaulo} 290