|
@@ -107,6 +107,9 @@ unsigned long log_ptr = 0;
|
|
|
unsigned long log_size = 0;
|
|
|
bool fLogTransInprog = false;
|
|
|
|
|
|
+
|
|
|
+static bool fl_raddius_net_err = false;
|
|
|
+
|
|
|
/**
|
|
|
* @brief Общая структура настроек
|
|
|
*/
|
|
@@ -1588,9 +1591,11 @@ void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBuf
|
|
|
char tempValue[20];
|
|
|
char tempValue2[20];
|
|
|
int8_t res = 0;
|
|
|
+ char log_string[50];
|
|
|
|
|
|
memset(tempValue, 0, 20);
|
|
|
memset(tempValue2, 0, 20);
|
|
|
+ memset(log_string, 0,50);
|
|
|
|
|
|
strcpy(bufOut, HTTP_200_OK);
|
|
|
|
|
@@ -1599,7 +1604,9 @@ void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBuf
|
|
|
res = ups_metac_service_pdu(ups_cancel_test);
|
|
|
if(res == 1 || res == 0){
|
|
|
strcat(bufOut, "Тест остановлен!");
|
|
|
- log_event_data(LOG_TEST_UPS, "Администратор(Останов)");
|
|
|
+ strcpy(log_string, name_login);
|
|
|
+ strcat(log_string, " (Останов)");
|
|
|
+ log_event_data(LOG_TEST_UPS, log_string);
|
|
|
}
|
|
|
if(res == -1)
|
|
|
strcat(bufOut, "Тест не удалось остановить!");
|
|
@@ -1609,7 +1616,9 @@ void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBuf
|
|
|
res = ups_metac_service_pdu(ups_test_low_bat);
|
|
|
if(res == 1 || res == 0){
|
|
|
strcat(bufOut, "Тест запущен!");
|
|
|
- log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
|
|
|
+ strcpy(log_string, name_login);
|
|
|
+ strcat(log_string, " (Запущен)");
|
|
|
+ log_event_data(LOG_TEST_UPS, log_string);
|
|
|
}
|
|
|
if(res == -1)
|
|
|
strcat(bufOut, "Тест не удалось запустить!");
|
|
@@ -1621,7 +1630,9 @@ void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBuf
|
|
|
res = ups_metac_service_pdu(ups_test_time);
|
|
|
if(res == 1 || res == 0){
|
|
|
strcat(bufOut, "Тест запущен!");
|
|
|
- log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
|
|
|
+ strcpy(log_string, name_login);
|
|
|
+ strcat(log_string, " (Запущен)");
|
|
|
+ log_event_data(LOG_TEST_UPS, log_string);
|
|
|
}
|
|
|
if(res == -1)
|
|
|
strcat(bufOut, "Тест не удалось запустить!");
|
|
@@ -1639,8 +1650,10 @@ void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *le
|
|
|
char tempValue[50];
|
|
|
char tempValue2[50];
|
|
|
int8_t res = 0;
|
|
|
+ char log_string[50];
|
|
|
|
|
|
memset(tempValue, 0, 50);
|
|
|
+ memset(log_string, 0,50);
|
|
|
|
|
|
strcpy(bufOut, HTTP_200_OK);
|
|
|
|
|
@@ -1648,7 +1661,9 @@ void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *le
|
|
|
if (strcmp(tempValue, "reboot") == 0){
|
|
|
res = ups_metac_service_pdu(ups_cancel_shut_down);
|
|
|
if(res == 1){
|
|
|
- log_event_data(LOG_SHUTDOWN_UPS, "Администратор(Останов)");
|
|
|
+ strcpy(log_string, name_login);
|
|
|
+ strcat(log_string, " (Останов)");
|
|
|
+ log_event_data(LOG_SHUTDOWN_UPS, log_string);
|
|
|
strcat(bufOut, "Выключение нагрузки ИБП отменено!");
|
|
|
}
|
|
|
else
|
|
@@ -1662,7 +1677,7 @@ void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *le
|
|
|
res = ups_metac_service_pdu(ups_shutdown);
|
|
|
if(res == 1){
|
|
|
strcat(bufOut, "Отключение нагрузки ИБП!");
|
|
|
- log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
|
|
|
+ log_event_data(LOG_SHUTDOWN_UPS, name_login);
|
|
|
}else
|
|
|
strcat(bufOut, "Отключение нагрузки ИБП не удалось!");
|
|
|
*lenBufOut = strlen(bufOut);
|
|
@@ -1698,6 +1713,8 @@ void HTTP_ConfirmBootPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* @brief Проверка пароля для входа в Web
|
|
|
* @retval None
|
|
@@ -1711,12 +1728,13 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
|
|
|
char *strPtr = 0;
|
|
|
char WebPassword[MAX_WEB_PASSWD_LEN];
|
|
|
char WebLogin[MAX_WEB_LOGIN_LEN];
|
|
|
- char buf[40];
|
|
|
|
|
|
memset(login, 0, 20);
|
|
|
memset(password, 0, 20);
|
|
|
memset(tempStr, 0, 50);
|
|
|
|
|
|
+ memset(name_login, 0, 50);
|
|
|
+
|
|
|
/* Get first 50 bytes of string */
|
|
|
strncpy(tempStr, bufIn, 49);
|
|
|
|
|
@@ -1725,83 +1743,114 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
|
|
|
GetParamValue(tempStr, "login=", login, &valueLen);
|
|
|
GetParamValue(tempStr, "password=", password, &valueLen);
|
|
|
|
|
|
- if (RC_Login(login, password) == RC_LOGIN_ADMIN_OK)
|
|
|
- {
|
|
|
- for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
|
|
|
-
|
|
|
- GetUserLogin(user_id, WebLogin, &valueLen);
|
|
|
- GetUserPassword(user_id, WebPassword, &valueLen);
|
|
|
+ if((sSettings.sRADIUS.RDSEnable == true) && (fl_raddius_net_err == false)){
|
|
|
+ switch(RC_Login(login, password)){
|
|
|
+ case RC_ERROR:
|
|
|
+ Authenticated = false;
|
|
|
+ break;
|
|
|
+ case RC_LOGIN_ADMIN_OK:
|
|
|
+ Authenticated = true;
|
|
|
+ user_id = 0;
|
|
|
+ break;
|
|
|
+ case RC_LOGIN_USER_OK:
|
|
|
+ Authenticated = true;
|
|
|
+ user_id = 1;
|
|
|
+ break;
|
|
|
+ case RC_NET_ERR:
|
|
|
+ Authenticated = false;
|
|
|
+ fl_raddius_net_err = true;
|
|
|
+ strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type: text/html;\r\n\r\n");
|
|
|
+ strcat(bufOut,"<!DOCTYPE html><html><head><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"3; url=/login.html\" /></head><center><h2>Ошибка соединения с RADDIUS сервером</h2></center></html>");
|
|
|
+ *lenBufOut = strlen(bufOut);
|
|
|
+ return SEND_REQUIRED_NO;
|
|
|
+ break;
|
|
|
+ case RC_ACC_DENIED:
|
|
|
+ Authenticated = false;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
|
|
|
|
|
|
- /* Check login and password */
|
|
|
- if ((strncmp(WebLogin, "admin", MAX_WEB_LOGIN_LEN) == 0) &&
|
|
|
- (strncmp(WebPassword, "12345", MAX_WEB_PASSWD_LEN) == 0)) {
|
|
|
+ GetUserLogin(user_id, WebLogin, &valueLen);
|
|
|
+ GetUserPassword(user_id, WebPassword, &valueLen);
|
|
|
|
|
|
- /* Login and pass are valid */
|
|
|
+ /* Check login and password */
|
|
|
+ if ((strncmp(WebLogin, login, MAX_WEB_LOGIN_LEN) == 0) &&
|
|
|
+ (strncmp(WebPassword, password, MAX_WEB_PASSWD_LEN) == 0)) {
|
|
|
|
|
|
- /* Check user's login session */
|
|
|
- /* If "user" has logged in */
|
|
|
- if (user_id >= 1) {
|
|
|
+ /* Login and pass are valid */
|
|
|
|
|
|
- }
|
|
|
+ /* TODO replace global flag with user-pass-cookie */
|
|
|
+ Authenticated = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ Authenticated = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- /* TODO replace global flag with user-pass-cookie */
|
|
|
- Authenticated = true;
|
|
|
+ if(Authenticated){
|
|
|
+ /* Generate cookie */
|
|
|
+ sprintf(tempStr, "%X", (unsigned int)GetRandomNumber());
|
|
|
+
|
|
|
+ /* Set users cookie */
|
|
|
+ HTTP_SetUserCookie(tempStr, user_id);
|
|
|
+
|
|
|
+ HTTP_UpdateUserLoginTime(user_id);
|
|
|
+
|
|
|
+ /* Send login and cookie back */
|
|
|
+ strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nSet-Cookie: uname=");
|
|
|
+ strcat(bufOut, login);
|
|
|
+ strcat(bufOut, "\r\nSet-Cookie: id=");
|
|
|
+ strcat(bufOut, tempStr);
|
|
|
+ sprintf(tempStr, "%d", user_id);
|
|
|
+ strcat(bufOut, "\r\nSet-Cookie: role=");
|
|
|
+ strcat(bufOut, tempStr);
|
|
|
+ if(sSettings.sRADIUS.Auth_enable)
|
|
|
+ strcat(bufOut, "\r\nSet-Cookie: auth=1");
|
|
|
+ else
|
|
|
+ strcat(bufOut, "\r\nSet-Cookie: auth=0");
|
|
|
+ strcat(bufOut, "\r\n\r\n");
|
|
|
+ strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
|
|
|
|
|
|
- /* Generate cookie */
|
|
|
- sprintf(tempStr, "%X", (unsigned int)GetRandomNumber());
|
|
|
-
|
|
|
- /* Set users cookie */
|
|
|
- HTTP_SetUserCookie(tempStr, user_id);
|
|
|
-
|
|
|
- HTTP_UpdateUserLoginTime(user_id);
|
|
|
-
|
|
|
- /* Send login and cookie back */
|
|
|
- strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nSet-Cookie: uname=");
|
|
|
- strcat(bufOut, WebLogin);
|
|
|
- strcat(bufOut, "\r\nSet-Cookie: id=");
|
|
|
- strcat(bufOut, tempStr);
|
|
|
- sprintf(tempStr, "%d", user_id);
|
|
|
- strcat(bufOut, "\r\nSet-Cookie: role=");
|
|
|
- strcat(bufOut, tempStr);
|
|
|
- if(sSettings.sRADIUS.Auth_enable)
|
|
|
- strcat(bufOut, "\r\nSet-Cookie: auth=1");
|
|
|
- else
|
|
|
- strcat(bufOut, "\r\nSet-Cookie: auth=0");
|
|
|
- strcat(bufOut, "\r\n\r\n");
|
|
|
- strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
|
|
|
-
|
|
|
- *lenBufOut = strlen(bufOut);
|
|
|
-
|
|
|
- switch (user_id) {
|
|
|
- case 0:
|
|
|
- snprintf(buf, sizeof(buf), "Администратор");
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- snprintf(buf, sizeof(buf), "Пользователь");
|
|
|
- break;
|
|
|
- default:
|
|
|
- snprintf(buf, sizeof(buf), "", login);
|
|
|
- break;
|
|
|
- }
|
|
|
+ *lenBufOut = strlen(bufOut);
|
|
|
+ if((sSettings.sRADIUS.RDSEnable == true) && (fl_raddius_net_err == false)){
|
|
|
+ snprintf(name_login, (strlen(login)+1), login);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ fl_raddius_net_err = false;
|
|
|
+ switch (user_id) {
|
|
|
+ case 0:
|
|
|
+ snprintf(name_login, sizeof(name_login), "Администратор");
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ snprintf(name_login, sizeof(name_login), "Пользователь");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ snprintf(name_login, (strlen(login)+1), login);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- log_event_data(LOG_LOGIN, buf);
|
|
|
- /* Запускаем задачу-таймер логаута. */
|
|
|
- /* TODO отправить ответ серверу о статусе пароля */
|
|
|
- return SEND_REQUIRED_YES;
|
|
|
- }
|
|
|
- /*
|
|
|
- else {
|
|
|
- continue;
|
|
|
- }
|
|
|
- */
|
|
|
- }
|
|
|
- }
|
|
|
- /* No valid login and pass found */
|
|
|
|
|
|
- /* TODO replace global flag with user-pass-cookie*/
|
|
|
- Authenticated = false;
|
|
|
- /* Wrong login or pass, return */
|
|
|
- return SEND_REQUIRED_NO;
|
|
|
+ log_event_data(LOG_LOGIN, name_login);
|
|
|
+ /* Запускаем задачу-таймер логаута. */
|
|
|
+ /* TODO отправить ответ серверу о статусе пароля */
|
|
|
+ return SEND_REQUIRED_YES;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ strcpy(bufOut, "HTTP/1.0 200 OK\r\nContent-Type: text/html;\r\n\r\n");
|
|
|
+ if((sSettings.sRADIUS.RDSEnable == true) && (fl_raddius_net_err == false))
|
|
|
+ strcat(bufOut,"<!DOCTYPE html><html><head><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"3; url=/rslogin.html\" /></head><center><h2>Не правильный логин или пароль</h2></center></html>");
|
|
|
+ else
|
|
|
+ strcat(bufOut,"<!DOCTYPE html><html><head><meta charset=\"utf-8\"><meta http-equiv=\"refresh\" content=\"3; url=/login.html\" /></head><center><h2>Не правильный логин или пароль</h2></center></html>");
|
|
|
+ *lenBufOut = strlen(bufOut);
|
|
|
+ return SEND_REQUIRED_NO;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void HTTP_LOGIN(char *bufOut, uint16_t *lenBufOut)
|
|
@@ -1813,6 +1862,7 @@ void HTTP_LOGIN(char *bufOut, uint16_t *lenBufOut)
|
|
|
GetUserLogin(ADMIN, WebLogin, &valueLen);
|
|
|
|
|
|
memset(tempStr, 0, 50);
|
|
|
+ memset(name_login, 0, 50);
|
|
|
|
|
|
/* TODO replace global flag with user-pass-cookie */
|
|
|
Authenticated = true;
|
|
@@ -1839,6 +1889,8 @@ void HTTP_LOGIN(char *bufOut, uint16_t *lenBufOut)
|
|
|
strcat(bufOut,"<!DOCTYPE html><html lang=""><head><meta http-equiv=\"refresh\" content=\"0;url=/index.html\"/></head></html>\r\n\r\n");
|
|
|
|
|
|
*lenBufOut = strlen(bufOut);
|
|
|
+
|
|
|
+ snprintf(name_login, sizeof(name_login), "Администратор");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2094,7 +2146,7 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
|
|
|
memcpy(sSettings.sAuth[user_id].password, password, 11);
|
|
|
|
|
|
HTTP_SaveSettings();
|
|
|
- log_event_data(LOG_PSW_CHANGE, "Администратор");
|
|
|
+ log_event_data(LOG_PSW_CHANGE, name_login);
|
|
|
strcat(bufOut, "Пароль успешно изменён");
|
|
|
*lenBufOut = strlen(bufOut);
|
|
|
return SEND_REQUIRED_YES;
|
|
@@ -2565,8 +2617,12 @@ void ssl_server(void *pvParameters)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- fs_open("/login.html", &file);
|
|
|
- ssl_sendframes(&ssl, file.data, file.len);
|
|
|
+ /*if(sSettings.sRADIUS.RDSEnable == true)
|
|
|
+ fs_open("/rslogin.html", &file);
|
|
|
+ else
|
|
|
+ fs_open("/login.html", &file);
|
|
|
+ ssl_sendframes(&ssl, file.data, file.len);*/
|
|
|
+ ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
|
|
|
}
|
|
|
post_data_count = 0;
|
|
|
log_post_reqn = 0;
|
|
@@ -2580,7 +2636,10 @@ void ssl_server(void *pvParameters)
|
|
|
if (log_post_reqn > 1)
|
|
|
{
|
|
|
/* Redirect to login page */
|
|
|
- fs_open("/login.html", &file);
|
|
|
+ if((sSettings.sRADIUS.RDSEnable == true) && (fl_raddius_net_err == false))
|
|
|
+ fs_open("/rslogin.html", &file);
|
|
|
+ else
|
|
|
+ fs_open("/login.html", &file);
|
|
|
ssl_sendframes(&ssl, file.data, file.len);
|
|
|
/* End reqest */
|
|
|
post_data_count = 0;
|
|
@@ -2596,7 +2655,10 @@ void ssl_server(void *pvParameters)
|
|
|
log_post_reqn = 0;
|
|
|
|
|
|
/* Redirect to login page */
|
|
|
- fs_open("/login.html", &file);
|
|
|
+ if((sSettings.sRADIUS.RDSEnable == true) && (fl_raddius_net_err == false))
|
|
|
+ fs_open("/rslogin.html", &file);
|
|
|
+ else
|
|
|
+ fs_open("/login.html", &file);
|
|
|
ssl_sendframes(&ssl, file.data, file.len);
|
|
|
}
|
|
|
}
|
|
@@ -2610,15 +2672,22 @@ void ssl_server(void *pvParameters)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- fs_open("/login.html", &file);
|
|
|
- ssl_sendframes(&ssl, file.data, file.len);
|
|
|
+ /*if(sSettings.sRADIUS.RDSEnable == true)
|
|
|
+ fs_open("/rslogin.html", &file);
|
|
|
+ else
|
|
|
+ fs_open("/login.html", &file);
|
|
|
+ ssl_sendframes(&ssl, file.data, file.len);*/
|
|
|
+ ssl_sendframes(&ssl, sendBuf, sendBufLoadLen);
|
|
|
}
|
|
|
post_data_count = 0;
|
|
|
log_post_reqn = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- fs_open("/login.html", &file);
|
|
|
+ if((sSettings.sRADIUS.RDSEnable == true) && (fl_raddius_net_err == false))
|
|
|
+ fs_open("/rslogin.html", &file);
|
|
|
+ else
|
|
|
+ fs_open("/login.html", &file);
|
|
|
ssl_sendframes(&ssl, file.data, file.len);
|
|
|
}
|
|
|
}
|