Browse Source

[bt-6709]fix input of whitelist range

balbekova 5 years ago
parent
commit
2481418c6d
3 changed files with 28 additions and 5 deletions
  1. 22 3
      modules/Telnet_Server/CLI_Commands.c
  2. 1 0
      modules/Telnet_Server/CLI_Commands.h
  3. 5 2
      modules/parameters.c

+ 22 - 3
modules/Telnet_Server/CLI_Commands.c

@@ -115,6 +115,7 @@ const char *notification_args_list[] = {
 const char *whitelist_args_list[] = {
     "info",
     "range",
+    "reset",
 };
 
 const char *ntp_args_list[] = {
@@ -376,7 +377,8 @@ generates a table that shows how much run time each task has */
 static const CLI_Command_Definition_t prvWhiteListCommandDefinition = {
     ( const int8_t *const ) "whitelist",  /* The command string to type. */
     ( const int8_t *const ) "\twhitelist info: вывод информации о текущем белом списке IP адресов контроллера\r\n"
-    						"\twhitelist range <NUM> <A.B.C.D/E>: установка диапазона IP адресов\r\n",
+    						"\twhitelist range <NUM> <A.B.C.D/E>: установка диапазона IP адресов\r\n"
+                            "\twhitelist reset <NUM>: сброс диапазона IP адресов\r\n",
     prvTaskWhiteListCommand, /* The function to run. */
     -1 /* The user can enter any number of commands. */
 };
@@ -1917,6 +1919,7 @@ static portBASE_TYPE prvTaskWhiteListCommand( int8_t *pcWriteBuffer, size_t xWri
     uint8_t i;
     char *beginValue;
     uint8_t len;
+    int32_t temp;
 
     ( void ) pcCommandString;
     ( void ) xWriteBufferLen;
@@ -1971,7 +1974,7 @@ static portBASE_TYPE prvTaskWhiteListCommand( int8_t *pcWriteBuffer, size_t xWri
     switch (i) {
         case ARG_WHITELIST_RANGE:
             if (xParameterStringLength == 1 && isdigit_int(str[0])) {
-                int32_t temp = atoi(str);
+                temp = atoi(str);
                 if (temp > 0 && temp < 6) {
                     pcParameterString = ( int8_t * ) FreeRTOS_CLIGetParameter
                         (
@@ -1992,6 +1995,7 @@ static portBASE_TYPE prvTaskWhiteListCommand( int8_t *pcWriteBuffer, size_t xWri
                                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
                                 return pdFALSE;
                             }
+                            int32_t mask = atoi(&beginValue[1]);
                             len = beginValue - str;
                             memset(temp_str, 0, sizeof(temp_str));
                             strncpy(temp_str, str, len);
@@ -2001,7 +2005,7 @@ static portBASE_TYPE prvTaskWhiteListCommand( int8_t *pcWriteBuffer, size_t xWri
                                     return pdFALSE;
                                 }
                             }
-                            if (ipaddr_addr(temp_str) != IPADDR_NONE) {
+                            if (ipaddr_addr(temp_str) != IPADDR_NONE && (mask <= 32 && mask >= 0)) {
                                 SetWhiteListSTR(str, (temp - 1));
                                 strcpy( ( char * ) pcWriteBuffer,
                                     "\t\tСохраните конфигурацию сетевых настроек\r\n" );
@@ -2021,6 +2025,21 @@ static portBASE_TYPE prvTaskWhiteListCommand( int8_t *pcWriteBuffer, size_t xWri
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
             break;
+        case ARG_WHITELIST_RESET:
+            if (xParameterStringLength == 1 && isdigit_int(str[0])) {
+                temp = atoi(str);
+                if (temp > 0 && temp < 6) {
+                    memset(str, 0, sizeof(str));
+                    SetWhiteListSTR(str, (temp - 1));
+                    strcpy( ( char * ) pcWriteBuffer,
+                        "\t\tСохраните конфигурацию сетевых настроек\r\n" );
+                } else {
+                    strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+                }
+            } else {
+                strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
+            }
+            break;
         default:
             strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             break;

+ 1 - 0
modules/Telnet_Server/CLI_Commands.h

@@ -83,6 +83,7 @@ typedef enum{
 typedef enum{
 	ARG_WHITELIST_INFO = 0,
 	ARG_WHITELIST_RANGE,
+	ARG_WHITELIST_RESET,
 	ARG_WHITELIST_ALL
 }whitelist_args_t;
 

+ 5 - 2
modules/parameters.c

@@ -1408,15 +1408,18 @@ void SetWhiteListSTR(char *str, uint8_t num)
                 }
                 sSettings.sWhiteListTemp[num].mask |= (1 << (8 * num_octet - 1 - (i - 8 * (num_octet - 1))));
             }
-
             memset(ip_str, 0, 20);
             strncpy(ip_str, sSettings.sWhiteListTemp[num].ip_range, (mask_str - sSettings.sWhiteListTemp[num].ip_range));
             sSettings.sWhiteListTemp[num].ip = ipaddr_addr(ip_str);
-
         } else {
+            memset(&sSettings.sWhiteListTemp[num], 0, sizeof(sSettings.sWhiteListTemp[num]));
             sSettings.sWhiteListTemp[num].mask = 0;
             sSettings.sWhiteListTemp[num].ip = 0;
         }
+    } else {
+            memset(&sSettings.sWhiteListTemp[num], 0, sizeof(sSettings.sWhiteListTemp[num]));
+            sSettings.sWhiteListTemp[num].mask = 0;
+            sSettings.sWhiteListTemp[num].ip = 0;
     }
 }