From 3857f08268a0522b17e337217b3da173c4653ba1 Mon Sep 17 00:00:00 2001 From: hanwckf Date: Fri, 18 Oct 2019 09:13:50 +0800 Subject: [PATCH] exec offline hook before unexpected exit --- src/auth.c | 12 +++++++++--- src/auth.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/auth.c b/src/auth.c index a20ce94..715777c 100644 --- a/src/auth.c +++ b/src/auth.c @@ -379,7 +379,7 @@ void loginToGetServerMAC(uint8_t recv_data[]) { // 初始化服务器MAC地址 memcpy(EthHeader, recv_data + 6, 6); if(auth_8021x_Handler(recv_data)) - exit(EXIT_FAILURE); //这里不需要考虑重拨的问题,正常第一个请求是Identity,不会失败。 + exit_with_hook(EXIT_FAILURE); //这里不需要考虑重拨的问题,正常第一个请求是Identity,不会失败。 return; } else { continue; @@ -391,7 +391,7 @@ void loginToGetServerMAC(uint8_t recv_data[]) { LogWrite(DOT1X, ERROR, "Error! No Response"); // 确保下线 auth_8021x_Logoff(); - exit(EXIT_FAILURE); + exit_with_hook(EXIT_FAILURE); } times--; @@ -644,7 +644,7 @@ int auth_8021x_Handler(uint8_t recv_data[]) { return 1; } else { LogWrite(DOT1X, ERROR, "Reconnection failed. Server: errtype=0x%02hhx", errtype); - exit(EXIT_FAILURE); + exit_with_hook(EXIT_FAILURE); } } else if ((EAP_Code) recv_data[18] == SUCCESS) { LogWrite(DOT1X, INF, "Server: Success."); @@ -669,3 +669,9 @@ int auth_8021x_Handler(uint8_t recv_data[]) { } return 0; } + +void exit_with_hook(int a) { + if (OfflineHookCmd) + system(OfflineHookCmd); + exit(a); +} diff --git a/src/auth.h b/src/auth.h index 418511f..f31dcf3 100644 --- a/src/auth.h +++ b/src/auth.h @@ -46,4 +46,4 @@ int Drcom_UDP_Handler(uint8_t *recv_data); void initAuthenticationInfo(); void loginToGetServerMAC(uint8_t recv_data[]); void printIfInfo(); - +void exit_with_hook(int a);