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