|
@@ -69,57 +69,41 @@ static char *get_user_name(user_level_t user_id)
|
|
return username;
|
|
return username;
|
|
}
|
|
}
|
|
|
|
|
|
-static portBASE_TYPE FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_state_t *s)
|
|
|
|
|
|
+static void FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_state_t *s)
|
|
{
|
|
{
|
|
- portBASE_TYPE xReturn = pdTRUE;
|
|
|
|
- uint32_t len;
|
|
|
|
- static char password[ MAX_WEB_PASSWD_LEN ] = { 0 };
|
|
|
|
- char password2[ MAX_WEB_PASSWD_LEN ] = { 0 };
|
|
|
|
|
|
+ static char password[MAX_WEB_PASSWD_LEN]; // trading reentrancy for memory
|
|
const int8_t * const pcNewPSWHeader = ( int8_t * ) "\r\nВведите повторно новый пароль:";
|
|
const int8_t * const pcNewPSWHeader = ( int8_t * ) "\r\nВведите повторно новый пароль:";
|
|
|
|
|
|
memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
|
|
memset(pcWriteBuffer, 0, configCOMMAND_INT_MAX_OUTPUT_SIZE);
|
|
|
|
|
|
- len = strlen(s->buf);
|
|
|
|
|
|
+ uint32_t len = strlen(s->buf);
|
|
|
|
+ if (len >= MAX_WEB_PASSWD_LEN) {
|
|
|
|
+ strcpy((char *)pcWriteBuffer, "\r\nНовый пароль слишком длинный!\r\n>");
|
|
|
|
+ s->input_state = CLI_CMD;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
if(s->input_state == CLI_CHANGE_PWD){
|
|
if(s->input_state == CLI_CHANGE_PWD){
|
|
memset(password, 0, MAX_WEB_PASSWD_LEN);
|
|
memset(password, 0, MAX_WEB_PASSWD_LEN);
|
|
- if(len >= MAX_WEB_PASSWD_LEN){
|
|
|
|
|
|
+ if(!control_string_en_digit(s->buf, len)){
|
|
strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
|
|
strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
|
|
s->input_state = CLI_CMD;
|
|
s->input_state = CLI_CMD;
|
|
} else {
|
|
} else {
|
|
- if(!control_string_en_digit(s->buf, len)){
|
|
|
|
- strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
|
|
|
|
- s->input_state = CLI_CMD;
|
|
|
|
- } else {
|
|
|
|
- strncpy(password, s->buf, len);
|
|
|
|
- strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcNewPSWHeader, strlen( ( char * ) pcNewPSWHeader ) );
|
|
|
|
- s->input_state = CLI_CHANGE_PWD_ACK;
|
|
|
|
- }
|
|
|
|
|
|
+ strncpy(password, s->buf, len);
|
|
|
|
+ strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcNewPSWHeader, strlen( ( char * ) pcNewPSWHeader ) );
|
|
|
|
+ s->input_state = CLI_CHANGE_PWD_ACK;
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- s->input_state = CLI_CHANGE_PWD;
|
|
|
|
- memset(password2, 0, cmdMAX_INPUT_SIZE);
|
|
|
|
- if(len >= MAX_WEB_LOGIN_LEN){
|
|
|
|
- strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
|
|
|
|
- s->input_state = CLI_CMD;
|
|
|
|
|
|
+ if (strncmp(password, s->buf, MAX_WEB_PASSWD_LEN) == 0) {
|
|
|
|
+ memcpy(sSettings.sAuth[s->id_change_pwd].password, password, 11);
|
|
|
|
+ cli_save_config(s);
|
|
|
|
+ log_event_data(LOG_PSW_CHANGE, get_user_name(s->user_id));
|
|
|
|
+ strcpy( ( char * ) pcWriteBuffer, "\r\nПароль успешно изменен\r\n>" );
|
|
} else {
|
|
} else {
|
|
- strncpy(password2, s->buf, len);
|
|
|
|
-
|
|
|
|
- if (strncmp(password, password2, MAX_WEB_PASSWD_LEN) == 0) {
|
|
|
|
- memcpy(sSettings.sAuth[s->id_change_pwd].password, password, 11);
|
|
|
|
- cli_save_config(s);
|
|
|
|
- log_event_data(LOG_PSW_CHANGE, get_user_name(s->user_id));
|
|
|
|
- strcpy( ( char * ) pcWriteBuffer, "\r\nПароль успешно изменен\r\n>" );
|
|
|
|
- s->input_state = CLI_CMD;
|
|
|
|
- xReturn = pdTRUE;
|
|
|
|
- } else {
|
|
|
|
- strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
|
|
|
|
- s->input_state = CLI_CMD;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ strcpy( ( char * ) pcWriteBuffer, "\r\nОшибка при вводе нового пароля\r\n>" );
|
|
}
|
|
}
|
|
|
|
+ s->input_state = CLI_CMD;
|
|
}
|
|
}
|
|
-
|
|
|
|
- return xReturn;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|