Prechádzať zdrojové kódy

[telnet]1.rewrite auth
[cli]1. add cmd change password
[cli]2. change events register in log

balbekova 5 rokov pred
rodič
commit
3537130b9a

+ 0 - 13
modules/HTTP_Server/http_server.c

@@ -1144,7 +1144,6 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
 
     /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
     if (GetStateWebReinit() == true) {
-        telnet_act = false;
 
         SetWebReinitFlag(true);
         HTTP_SaveSettings();
@@ -1154,8 +1153,6 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
         Reboot(WEB_ACT);
     }
 
-    telnet_act = false;
-
     HTTP_SaveSettings();
 }
 
@@ -1333,8 +1330,6 @@ void HTTP_SetInfo(char *buf, uint16_t lenBuf)
     SetComment(str);
     memset(value, 0, len);
 
-    telnet_act = false;
-
     HTTP_SaveSettings();
 }
 
@@ -1349,8 +1344,6 @@ char *HTTP_Reset(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn,
       return 0;
     }
 
-    telnet_act = false;
-
     HTTP_ResetSettings();
     HTTP_SaveSettings();
 
@@ -1366,8 +1359,6 @@ char *HTTP_Confirm(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn
     (void)lenBufIn;
     (void)reqNum;
 
-    telnet_act = false;
-
     SetWebReinitFlag(false);
     SetConfirmWebParamsFlag();
 
@@ -1565,8 +1556,6 @@ char *HTTP_ConfirmBootPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t l
     strcpy(bufOut, HTTP_200_OK);
     *lenBufOut = strlen(bufOut);
 
-    telnet_act = false;
-
     /* Запускаем задачу отложенной перезагрузки. Контроллер должен успеть
        отправить ответ серверу о статусе пароля */
     HTTP_StartResetTask(true);
@@ -1798,8 +1787,6 @@ char *HTTP_ChangeUserPwd(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t le
                     valueLen = strlen(password);
                     memcpy(sSettings.sAuth[user_id].password, password, sizeof(sSettings.sAuth[user_id].password));
 
-                    telnet_act = false;
-
                     HTTP_SaveSettings();
                     log_event_data(LOG_PSW_CHANGE, name_login);
                     strcat(bufOut, "Пароль успешно изменён");

+ 11 - 10
modules/HTTP_Server/web_params_api.c

@@ -735,13 +735,7 @@ void HTTP_SaveSettings(void)
     //  taskENTER_CRITICAL();
 
     SETTINGS_Save();
-
-#if defined HARDWARE_BT6707 || HARDWARE_BT6709
-    if (telnet_act) {
-        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
-    } else
-#endif
-        log_event_data(LOG_SETTING_SAVE, name_login);
+    log_event_data(LOG_SETTING_SAVE, name_login);
 
     //  taskEXIT_CRITICAL();
 
@@ -795,17 +789,24 @@ void vTaskReboot(void *pvParameters)
 
         if (mode) {
             SNMP_SendUserTrap(FW_VERSION_UPDATE);
+            source_act_t src_act = get_act_source();
 #if defined HARDWARE_BT6707 || HARDWARE_BT6709
-            if (telnet_act) {
-                log_event_data(LOG_UPDATE_SOFT, name_login_telnet);
+            if (src_act == CLI_ACT) {
+                log_event_data(LOG_UPDATE_SOFT, "Администратор");
             } else
 #endif
                 log_event_data(LOG_UPDATE_SOFT, name_login);
             SetLoadMode();
+#if defined HARDWARE_BT6707 || HARDWARE_BT6709
+            if (src_act == CLI_ACT) {
+                SETTINGS_Save();
+                log_event_data(LOG_SETTING_SAVE, "Администратор");
+            } else
+#endif
             HTTP_SaveSettings();
             vTaskDelay(2000);
             vTaskDelay(1010);
-            Reboot(WEB_ACT);
+            Reboot(src_act);
         } else {
             vTaskDelay(1000);
             vTaskDelay(1010);

+ 10 - 55
modules/Telnet_Server/telnet_server.c

@@ -162,7 +162,6 @@ typedef struct{
 	uint8_t code;
 	unsigned char optdata[cmdMAX_INPUT_SIZE];
 	uint8_t optlen;
-	user_level_t telnet_code_auth;
 	uint8_t login_err;	// the number of failed password entry attempts
 	uint8_t num_connect;
 	bool active_conn;
@@ -202,7 +201,6 @@ static void deconfigure_telnet_state(telnetd_state_t *state)
 	state->state = TELNET_STATE_NORMAL;
 	state->num_connect = 0;
 	state->active_conn = false;
-	state->telnet_code_auth = USER;
 }
 
 static void sendopt(telnetd_state_t *s, u8_t code, u8_t option)
@@ -329,9 +327,7 @@ portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_t *s)
 {
 	portBASE_TYPE xReturn = pdTRUE;
 	uint32_t len;
-	uint8_t valueLen, user_id;
-	char WebPassword[MAX_WEB_PASSWD_LEN];
-	char WebLogin[MAX_WEB_LOGIN_LEN];
+	user_level_t user_id = MAX_USER_LEVELS;
 	char password[cmdMAX_INPUT_SIZE] = { 0 };
 	const int8_t * const pcPSWHeader = ( int8_t * ) "\r\npassword:";
 	const int8_t * const pcLoginHeader = ( int8_t * ) "\r\nlogin:";
@@ -355,42 +351,18 @@ portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_t *s)
 		break;
 	case CLI_AUTH_PASSW:
 		sendopt_cli(s, TELNET_WONT, TELOPT_ECHO);
-		// TODO unify with cli_auth_user
-		memset(name_login_telnet, 0, 50);
 		memset(password, 0, MAX_WEB_PASSWD_LEN);
 		len = strlen(s->buf);
 		strncpy(password, s->buf, len);
-		for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
-
-			GetUserLogin(user_id, WebLogin, &valueLen);
-			GetUserPassword(user_id, WebPassword, &valueLen);
-
-			/* Check login and password */
-			if ((strncmp(WebLogin, s->login, MAX_WEB_LOGIN_LEN) == 0) &&
-				(strncmp(WebPassword, password, MAX_WEB_PASSWD_LEN) == 0)) {
-
-				/* Login and pass are valid */
-				s->user_id = user_id;
-				s->login_err = 0;
-				strcpy( ( char * ) pcWriteBuffer, "\r\nАвторизация успешно пройдена\r\n>" );
-				s->input_state = CLI_CMD;
-				switch (user_id) {
-					case 0:
-						snprintf(name_login_telnet, sizeof(name_login_telnet), "Администратор");
-						break;
-					case 1:
-						snprintf(name_login_telnet, sizeof(name_login_telnet), "Пользователь");
-						break;
-					default:
-						break;
-				}
-
-				log_event_data(LOG_LOGIN_TELNET, name_login_telnet);
-				xReturn = pdTRUE;
-				break;
-			} else {
-				xReturn = pdFALSE;
-			}
+		user_id = cli_auth_user((const char *)s->login, password, LOG_LOGIN_TELNET);
+		if (user_id != MAX_USER_LEVELS) {
+			s->user_id = user_id;
+			s->login_err = 0;
+			strcpy( ( char * ) pcWriteBuffer, "\r\nАвторизация успешно пройдена\r\n>" );
+			s->input_state = CLI_CMD;
+			xReturn = pdTRUE;
+		} else {
+			xReturn = pdFALSE;
 		}
 		break;
 	default:
@@ -764,23 +736,6 @@ void vBasicSocketsCommandInterpreterTask( void *pvParameters )
 				else {
 					DBG printf("  Descriptor %d is readable\n", sock);
 
-					for(cur_cnt = 0; cur_cnt < NUMBER_TELNET_CONNECT; cur_cnt ++){
-						if(auth_tlnt_srvr_param[cur_cnt].num_connect == sock){
-							const user_level_t telnet_code_auth = auth_tlnt_srvr_param[cur_cnt].telnet_code_auth;
-							switch (telnet_code_auth) {
-							  case ADMIN:
-								  snprintf(name_login_telnet, sizeof(name_login_telnet), "Администратор");
-								  break;
-							  case USER:
-								  snprintf(name_login_telnet, sizeof(name_login_telnet), "Пользователь");
-								  break;
-							  default:
-								  break;
-							}
-							break;
-						}
-					}
-
 					/* Receive data on this connection until the  */
 					/* recv fails with EWOULDBLOCK.  If any other */
 					/* failure occurs, we will close the          */

+ 39 - 72
modules/cli/CLI_Commands.c

@@ -660,9 +660,8 @@ static portBASE_TYPE prvTaskInfoCommand(cli_state_t *cli_state, int8_t *pcWriteB
                     strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     break;
             }
-            if (i >= INFO_ADDRESS && i <= INFO_COMMENTS) {
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+            if (i >= INFO_DEV_NAME && i <= INFO_COMMENTS) {
+                cli_save_config(cli_state);
             }
         } else {
             strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
@@ -694,8 +693,7 @@ static portBASE_TYPE prvTaskRebootCommand(cli_state_t *cli_state, int8_t *pcWrit
         strcpy( ( char * ) pcWriteBuffer, ( char * ) pcRebootHeader );
         return pdTRUE;
     } else {
-        telnet_act = true;
-        Reboot(TELNET_ACT);
+        Reboot(CLI_ACT);
         return pdFALSE;
     }
 }
@@ -815,8 +813,7 @@ static portBASE_TYPE prvTaskSystimeCommand(cli_state_t *cli_state, int8_t *pcWri
                 }
                 if (!fail) {
                     SetDateStr(str);
-                    SETTINGS_Save();
-                    log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                    cli_save_config(cli_state);
                 } else {
                     strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                 }
@@ -850,8 +847,7 @@ static portBASE_TYPE prvTaskSystimeCommand(cli_state_t *cli_state, int8_t *pcWri
                 }
                 if (!fail) {
                     SetTimeStr(str);
-                    SETTINGS_Save();
-                    log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                    cli_save_config(cli_state);
                 } else {
                     strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                 }
@@ -927,8 +923,7 @@ static portBASE_TYPE prvTaskNTPCommand(cli_state_t *cli_state, int8_t *pcWriteBu
                 enable_old_sntp = sSettings.sSNTP.sntpEnable;
                 SetSntpStateStr("1");
                 if (sSettings.sSNTP.sntpEnable != enable_old_sntp) {
-                    SETTINGS_Save();
-                    log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                    cli_save_config(cli_state);
                     SNTP_Init();
                     //vTaskDelay(7000);
                     SNTP_Poll();
@@ -938,8 +933,7 @@ static portBASE_TYPE prvTaskNTPCommand(cli_state_t *cli_state, int8_t *pcWriteBu
                 enable_old_sntp = sSettings.sSNTP.sntpEnable;
                 SetSntpStateStr("0");
                 if (sSettings.sSNTP.sntpEnable != enable_old_sntp) {
-                    SETTINGS_Save();
-                    log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                    cli_save_config(cli_state);
                     SNTP_Init();
                     //vTaskDelay(7000);
                     SNTP_Poll();
@@ -998,8 +992,7 @@ static portBASE_TYPE prvTaskNTPCommand(cli_state_t *cli_state, int8_t *pcWriteBu
                     if (ipaddr_addr(str_temp) != IPADDR_NONE) {
                         if (strncmp(str_temp, sSettings.sSNTP.ip, strlen(str_temp)) != 0) {
                             SetSntpServerIpStr(str_temp);
-                            SETTINGS_Save();
-                            log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                            cli_save_config(cli_state);
                             SNTP_Init();
                             //vTaskDelay(7000);
                             SNTP_Poll();
@@ -1029,8 +1022,7 @@ static portBASE_TYPE prvTaskNTPCommand(cli_state_t *cli_state, int8_t *pcWriteBu
                         float value = atof(str_temp);
                         if (value >= -12.0 && value <= 12.0) {
                             SetSntpTimeZoneStr(str_temp);
-                            SETTINGS_Save();
-                            log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                            cli_save_config(cli_state);
                         } else {
                             strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                         }
@@ -1284,8 +1276,7 @@ static portBASE_TYPE prvTaskSNMPCommand(cli_state_t *cli_state, int8_t *pcWriteB
                                         break;
                                 }
                                 if (temp > 0 && temp < 6) {
-                                    SETTINGS_Save();
-                                    log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                                    cli_save_config(cli_state);
                                 }
                             } else {
                                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
@@ -1320,12 +1311,10 @@ static portBASE_TYPE prvTaskSNMPCommand(cli_state_t *cli_state, int8_t *pcWriteB
                 if (control_string_en_digit(temp_str, strlen(temp_str))) {
                     if (strncmp(str, "read", 4) == 0) {
                         SetReadCommunity(temp_str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else if (strncmp(str, "write", 5) == 0) {
                         SetWriteCommunity(temp_str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1427,8 +1416,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
         case ARG_AKB_VOLT_CELL_MIN:
             if (value < sSettings.UPS_Setting.Ucellmax && value > MIN_VOLT_CELL_RANGE) {
                 SetUPSVoltCellMinStr(str);
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                cli_save_config(cli_state);
             } else {
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
@@ -1436,8 +1424,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
         case ARG_AKB_VOLT_CELL_MAX:
             if (value > sSettings.UPS_Setting.Ucellmin && value <= MAX_VOLT_CELL_RANGE) {
                 SetUPSVoltCellMaxStr(str);
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                cli_save_config(cli_state);
             } else {
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
@@ -1446,8 +1433,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
         case ARG_AKB_CAPACITY:
             if (value >= CAPACITY_MIN_RANGE && value <= CAPACITY_MAX_RANGE && (value - (int32_t)value) == 0) {
                 SetCapacityNominalAKBStr(str);
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                cli_save_config(cli_state);
             } else {
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
@@ -1455,8 +1441,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
         case ARG_AKB_VOLT:
             if (value >= AKB_VOLTAGE_MIN_RANGE && value <= AKB_VOLTAGE_MAX_RANGE && ((int32_t)value % 12) == 0 && (value - (int32_t)value) == 0) {
                 SetVoltageAKBNominalStr(str);
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                cli_save_config(cli_state);
             } else {
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
@@ -1464,8 +1449,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
         case ARG_AKB_LIFETIME:
             if (value >= LIFETIME_MIN_RANGE && value <= LIFETIME_MAX_RANGE  && (value - (int32_t)value) == 0) {
                 SetLifeTimeAKBStr(str);
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                cli_save_config(cli_state);
             } else {
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
@@ -1511,8 +1495,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
                 }
                 if (!fail) {
                     SetDataSetAKBStr(str);
-                    SETTINGS_Save();
-                    log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                    cli_save_config(cli_state);
                 } else {
                     strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                 }
@@ -1520,8 +1503,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
         case ARG_AKB_UPS_POWER:
             if (value >= UPS_POWER_MIN_RANGE && value <= UPS_POWER_MAX_RANGE && ((int32_t)value % 50) == 0 && (value - (int32_t)value) == 0) {
                 SetUPSPowerStr(str);
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                cli_save_config(cli_state);
             } else {
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
@@ -1636,8 +1618,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= MIN_TEMP_MIN_RANGE && value <= MIN_TEMP_MAX_RANGE) {
                         SetTemperatureAlarmLowRangeStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1652,8 +1633,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= MAX_TEMP_MIN_RANGE && value <= MAX_TEMP_MAX_RANGE) {
                         SetTemperatureAlarmHighRangeStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1668,8 +1648,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= HIST_TEMP_MIN_RANGE && value <= HIST_TEMP_MAX_RANGE) {
                         SetTemperatureAlarmHisteStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1694,8 +1673,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= MAX_LOAD_MIN_RANGE && value <= MAX_LOAD_MAX_RANGE) {
                         SetLoadAlarmHighRangeStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1710,8 +1688,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= HIST_LOAD_MIN_RANGE && value <= HIST_LOAD_MAX_RANGE) {
                         SetLoadAlarmHistStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1733,8 +1710,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= MIN_VAC_MIN_RANGE && value <= MIN_VAC_MAX_RANGE) {
                         SetVACAlarmLowRangeStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1749,8 +1725,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= MAX_VAC_MIN_RANGE && value <= MAX_VAC_MAX_RANGE) {
                         SetVACAlarmHighRangeStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -1765,8 +1740,7 @@ static portBASE_TYPE prvTaskAlarmCommand(cli_state_t *cli_state, int8_t *pcWrite
                     value = atof(str);
                     if (value >= HIST_VAC_MIN_RANGE && value <= HIST_VAC_MAX_RANGE) {
                         SetVACAlarmHisteStr(str);
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     } else {
                         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                     }
@@ -2104,7 +2078,7 @@ static portBASE_TYPE prvTaskUserCommand(cli_state_t *cli_state, int8_t *pcWriteB
         } else {
             strncat(temp_str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
             // FIXME proper context
-#if 0
+#if 1
             for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
 
                 GetUserLogin(user_id, WebLogin, &valueLen);
@@ -2113,16 +2087,16 @@ static portBASE_TYPE prvTaskUserCommand(cli_state_t *cli_state, int8_t *pcWriteB
                 if (strncmp(WebLogin, temp_str, MAX_WEB_LOGIN_LEN) == 0) {
 
                     /* Login and pass are valid */
-                    id_change_pwd = user_id;
+                    cli_state->id_change_pwd = user_id;
                     strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcChangePWDHeader, strlen( ( char * ) pcChangePWDHeader ) );
-                    telnetState = CLI_CHANGE_PWD;
+                    cli_state->input_state = CLI_CHANGE_PWD;
                     break;
                 }
             }
-            if (telnetState != CLI_CHANGE_PWD) {
+            if (cli_state->input_state != CLI_CHANGE_PWD) {
 #endif
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
-            //}
+            }
         }
     } else {
         strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
@@ -2245,11 +2219,10 @@ static portBASE_TYPE prvTaskConfigCommand(cli_state_t *cli_state, int8_t *pcWrit
         if (xParameterStringLength < 13) {
             if (strncmp(str, "default", 7) == 0) {
                 SNMP_SendUserTrap(DEVICE_RESTORED);
-                log_event_data(LOG_SYSTEM_DEFCONFIG, name_login_telnet);
+                log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
                 vTaskDelay(500);
                 SETTINGS_SetPartDefault();
-                SETTINGS_Save();
-                log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                cli_save_config(cli_state);
                 strcpy( ( char * ) pcWriteBuffer,
                     "\t\tНастройки сброшены к настройкам по умолчанию!\r\n");
             } else {
@@ -2311,23 +2284,20 @@ static portBASE_TYPE prvTaskNetConfigCommand(cli_state_t *cli_state, int8_t *pcW
                 /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
                 if (GetStateWebReinit() == true) {
                     start = 1;
-                    telnet_act = true;
                     SetWebReinitFlag(true);
-                    HTTP_SaveSettings();
+                    cli_save_config(cli_state);
                     strcpy( ( char * ) pcWriteBuffer,
                         "\t\tНастройки сохранены! Контроллер будет перезагружен\r\n\tПосле перезагрузки подтвердите изменения сетевых настроек\r\n");
                     return pdTRUE;
 
                 }
             } else {
-                telnet_act = true;
                 start = 0;
                 vTaskDelay(1010);
-                Reboot(TELNET_ACT);
+                Reboot(CLI_ACT);
             }
             break;
         case ARG_NETCONFIG_CONFIRM:
-            telnet_act = true;
             SetWebReinitFlag(false);
             SetConfirmWebParamsFlag();
             strcpy( ( char * ) pcWriteBuffer, "\t\tСетевые настройки подтверждены!\r\n");
@@ -2643,8 +2613,7 @@ static portBASE_TYPE prvTaskSensorCommand(cli_state_t *cli_state, int8_t *pcWrit
                             break;
                         }
                         SetDINTypeActStr(temp_str, (val - 1));
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
 
                     } else if (strncmp(str, "DO", 2) == 0) {
                         if (val < 1 || val > 3) {
@@ -2658,8 +2627,7 @@ static portBASE_TYPE prvTaskSensorCommand(cli_state_t *cli_state, int8_t *pcWrit
                             break;
                         }
                         SetROTypeActStr(temp_str, (val - 1));
-                        SETTINGS_Save();
-                        log_event_data(LOG_SETTING_SAVE, name_login_telnet);
+                        cli_save_config(cli_state);
                     }
                 } else {
                     fail = 1;
@@ -2706,7 +2674,6 @@ static portBASE_TYPE prvTaskUploadCommand(cli_state_t *cli_state, int8_t *pcWrit
         strcpy( ( char * ) pcWriteBuffer, ( char * ) pcUploadHeader );
         return pdTRUE;
     } else {
-        telnet_act = true;
         HTTP_StartResetTask(true);
         return pdFALSE;
     }
@@ -2777,7 +2744,7 @@ static portBASE_TYPE prvTaskUPSCommand(cli_state_t *cli_state, int8_t *pcWriteBu
             val = atoi(str);
             if (val == 0) {
                 res = ups_metac_service_pdu(ups_cancel_test);
-                set_act_source(TELNET_ACT);
+                set_act_source(CLI_ACT);
                 if (res == 1) {
                     log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
                     strcpy( ( char * ) pcWriteBuffer, "\t\tКоманда \"Останов теста\" принята ИБП!\r\n");

+ 34 - 8
modules/cli/cli.c

@@ -86,14 +86,22 @@ static portBASE_TYPE FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_stat
 			s->input_state = CLI_CMD;
 		} else {
 			strncpy(password2, s->buf, len);
-
-			// FIXME
-			/*
+			
 			if (strncmp(password, password2, MAX_WEB_PASSWD_LEN) == 0) {
-				memcpy(sSettings.sAuth[id_change_pwd].password, password, 11);
-				telnet_act = true;
-				HTTP_SaveSettings();
-				log_event_data(LOG_PSW_CHANGE, name_login_telnet);
+				memcpy(sSettings.sAuth[s->id_change_pwd].password, password, 11);
+				cli_save_config(s);
+				const char *username;
+				switch (s->user_id) {
+					case 0:
+						username = "Администратор";
+						break;
+					case 1:
+						username = "Пользователь";
+						break;
+					default:
+						break;
+				}
+				log_event_data(LOG_PSW_CHANGE, username);
 				strcpy( ( char * ) pcWriteBuffer, "\r\nПароль успешно изменен\r\n>" );
 				s->input_state = CLI_CMD;
 				xReturn = pdTRUE;
@@ -101,7 +109,7 @@ static portBASE_TYPE FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_stat
 				strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
 				s->input_state = CLI_CMD;
 			}
-			*/
+			
 		}
 	}
 
@@ -280,6 +288,24 @@ void cli_hello(cli_state_t *cli_state)
 	cli_state->send(cli_state->num_connect, hello, sizeof(hello));
 }
 
+void cli_save_config(cli_state_t *cli_state)
+{
+	SETTINGS_Save();
+
+	const char *username;
+	switch (cli_state->user_id) {
+		case 0:
+			username = "Администратор";
+			break;
+		case 1:
+			username = "Пользователь";
+			break;
+		default:
+			break;
+	}
+    log_event_data(LOG_SETTING_SAVE, username);
+}
+
 user_level_t cli_auth_user(const char *user, const char *password, log_type_t log_entry_type)
 {
 	user_level_t rv = MAX_USER_LEVELS;

+ 2 - 0
modules/cli/cli.h

@@ -41,6 +41,7 @@ typedef struct {
 	uint8_t optlen;
 	input_state_t input_state;
 	user_level_t user_id;
+	user_level_t id_change_pwd;
 	char login[MAX_WEB_LOGIN_LEN];
 	uint8_t login_err;	// the number of failed password entry attempts
 	bool flag_telnet_ip_option;	// wtf is this
@@ -57,6 +58,7 @@ void cli_getchar(cli_state_t *s, char incoming_char, bool echo_enabled);
 cli_state_t *alloc_state(void);
 void free_state(cli_state_t *state);
 void cli_hello(cli_state_t *cli_state);
+void cli_save_config(cli_state_t *cli_state);
 user_level_t cli_auth_user(const char *user, const char *password, log_type_t log_entry_type);
 void cli_close_connections(void);
 

+ 3 - 5
modules/common/hal.c

@@ -28,13 +28,11 @@ void Reboot(source_act_t source_reset)
             break;
         case SNMP_ACT:
         case OTHER_ACT:
-            log_event_data(LOG_SYSTEM_BOOT, "Администратор");
-            break;
 #if defined HARDWARE_BT6707 || HARDWARE_BT6709
-        case TELNET_ACT:
-            log_event_data(LOG_SYSTEM_BOOT, name_login_telnet);
-            break;
+        case CLI_ACT:
 #endif
+            log_event_data(LOG_SYSTEM_BOOT, "Администратор");
+            break;
         default:
             break;
     }

+ 1 - 1
modules/common/hal.h

@@ -11,7 +11,7 @@
 typedef enum {
     WEB_ACT = 0,
     SNMP_ACT,
-    TELNET_ACT,
+    CLI_ACT,
     OTHER_ACT
 } source_act_t;
 

+ 0 - 3
modules/log/log.c

@@ -12,9 +12,6 @@
 char logFileBuf[FILE_BUF_MAX_LEN];
 
 char name_login[50];
-char name_login_telnet[50];
-
-bool telnet_act = false;
 
 const char* logsStrShortRu[] =
 {

+ 0 - 3
modules/log/log.h

@@ -11,9 +11,6 @@
 extern char logFileBuf[FILE_BUF_MAX_LEN];
 
 extern char name_login[50];
-extern char name_login_telnet[50];
-
-extern bool telnet_act;
 
 typedef __packed enum {
 	LOG_SYSTEM_BOOT = 0x00,			// device booted

+ 2 - 2
modules/monitor/ups_monitor.c

@@ -359,8 +359,8 @@ void UPS_TestFinishMonitor(void)
             strcpy(log_string, "Администратор");
             break;
 #if defined HARDWARE_BT6707 || HARDWARE_BT6709
-        case TELNET_ACT:
-            strcpy(log_string, name_login_telnet);
+        case CLI_ACT:
+            strcpy(log_string, "Администратор");
             break;
 #endif
         default: