Przeglądaj źródła

support symbols .,/-_*#()[]+=;:'"@!^%&?|${}`~<> in inform fields and password

balbekova 5 lat temu
rodzic
commit
19e97c568a

+ 12 - 5
modules/HTTP_Server/http_server.c

@@ -962,7 +962,7 @@ void HTTP_SetInfo(char *buf, uint16_t lenBuf)
 {
   uint8_t valueLen = 0;
   const uint8_t len = 110;
-  char value[110];
+  char value[330];
   char str[110];
 
  // ClearParamString(buf);
@@ -1136,6 +1136,7 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 	  char tempStr[50];
 	  char login[20];
 	  char password[20];
+	  char tmp_password[33];
 	  uint8_t valueLen, user_id;
 	  char *strPtr = 0;
 	  char WebPassword[MAX_WEB_PASSWD_LEN];
@@ -1143,6 +1144,7 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 
 	  memset(login, 0, 20);
 	  memset(password, 0, 20);
+	  memset(tmp_password, 0, 33);
 	  memset(tempStr, 0, 50);
 
 	  memset(name_login, 0, 50);
@@ -1153,7 +1155,9 @@ int HTTP_ConfirmWebPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 	  /* Add " " to the string in order GetParamValue() can be able to parse the param */
 	  strcat(tempStr, " ");
 	  GetParamValue(tempStr, "login=", login, &valueLen);
-	  GetParamValue(tempStr, "password=", password, &valueLen);
+	  GetParamValue(tempStr, "password=", tmp_password, &valueLen);
+	  url_decode(password, sizeof(password), tmp_password);
+	  valueLen = strlen(password);
 
 	  for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
 
@@ -1458,6 +1462,7 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
     char value[20];
     char login[20];
     char password[20];
+    char tmp_password[33];
     uint8_t valueLen, valueLen2, user_id;
     char WebLogin[MAX_WEB_LOGIN_LEN];
 
@@ -1465,6 +1470,7 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 
     memset(login, 0, 20);
     memset(password, 0, 20);
+    memset(tmp_password, 0, 33);
     memset(tempStr, 0, 50);
     memset(value, 0, 20);
 
@@ -1488,12 +1494,13 @@ int HTTP_ChangeUserPwd(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *l
 				 (memcmp(password, value, 11) == 0))
 			 {
 				 memset(password, 0, 20);
-				 if (GetParamValue(tempStr, "newpass=", password, &valueLen))
+				 if (GetParamValue(tempStr, "newpass=", tmp_password, &valueLen))
 				 {
-
+					 url_decode(password, sizeof(password), tmp_password);
+					 valueLen = strlen(password);
 					 memcpy(sSettings.sAuth[user_id].password, password, 11);
 
-  telnet_act = false;
+					 telnet_act = false;
 
 					 HTTP_SaveSettings();
 					 log_event_data(LOG_PSW_CHANGE, name_login);

+ 74 - 8
modules/HTTP_Server/web_params_api.c

@@ -344,6 +344,43 @@ void HTTP_GetSettings(char *buf)
   //printf(buf);
 }
 
+uint8_t ConvertStringForJSON(char *inStr, char *paramValue, uint8_t inLen)
+{
+  int  len = 0, len2 = 0;
+  char *strPtr = 0;
+  uint8_t i = 0;
+
+  while(i < inLen){
+
+	  strPtr = strstr(inStr, "\"");
+
+	  if (strPtr != 0){
+		len = strPtr - inStr;
+		if(len != 0){
+			strncat(paramValue, inStr, len);
+		}
+		strncat(paramValue, "\\", 1);
+		strncat(paramValue, &inStr[len], 1);
+		inStr = inStr + len + 1;
+		i = i + len + 1;
+	  }
+	  else{
+		if(paramValue != 0){
+			len2 = inLen - i;
+			strncat(paramValue, inStr, len2);
+			return 1;
+		}
+		else{
+			return 0;
+		}
+	  }
+  }
+  if(inLen == 0){
+	  return 0;
+  }
+  return 1;
+}
+
 /**
   * @brief  Возвращяет строку с информацией об устройстве
   * @retval None
@@ -351,7 +388,8 @@ void HTTP_GetSettings(char *buf)
 // TODO Согласовать максимальную длину строк
 void HTTP_GetInfo(char *buf)
 {
-  char str[40];
+  char str[110];
+  char tmp_str[220];
   uint8_t len;
   
   /* Headers для поддержки saffari */
@@ -382,20 +420,48 @@ void HTTP_GetInfo(char *buf)
   strncat(buf, str, len);
   
   GetNameDeviceStr(str, &len);
+  str[len] = 0;
   strcat(buf, "\",\"sysname\":\"");
-  strncat(buf, str, len);
+  memset(tmp_str, 0, sizeof(tmp_str));
+  if(ConvertStringForJSON(str, tmp_str, len)){
+	  strncat(buf, tmp_str, strlen(tmp_str));
+  }
+  else{
+	  strncat(buf, str, len);
+  }
 
-  GetOwnerStr(str, &len);  
+  GetOwnerStr(str, &len);
+  str[len] = 0;
   strcat(buf, "\",\"owner\":\"");
-  strncat(buf, str, len);
+  memset(tmp_str, 0, sizeof(tmp_str));
+  if(ConvertStringForJSON(str, tmp_str, len)){
+	  strncat(buf, tmp_str, strlen(tmp_str));
+  }
+  else{
+	  strncat(buf, str, len);
+  }
   
-  GetLocationStr(str, &len);  
+  GetLocationStr(str, &len);
+  str[len] = 0;
   strcat(buf, "\",\"sysLocation\":\"");
-  strncat(buf, str, len);
+  memset(tmp_str, 0, sizeof(tmp_str));
+  if(ConvertStringForJSON(str, tmp_str, len)){
+  	  strncat(buf, tmp_str, strlen(tmp_str));
+  }
+  else{
+	  strncat(buf, str, len);
+  }
   
-  GetCommentsStr(str, &len);  
+  GetCommentsStr(str, &len);
+  str[len] = 0;
   strcat(buf, "\",\"comment\":\"");
-  strncat(buf, str, len);
+  memset(tmp_str, 0, sizeof(tmp_str));
+  if(ConvertStringForJSON(str, tmp_str, len)){
+  	  strncat(buf, tmp_str, strlen(tmp_str));
+  }
+  else{
+  	  strncat(buf, str, len);
+  }
 
   GetUPSModelStr(str, &len);
   strcat(buf, "\",\"ups_model\":\"");

+ 18 - 9
modules/MegaTec/megatec.c

@@ -145,7 +145,7 @@ bool ups_megatec_rx_pdu(void)
 	ups_pdu.len = 0;
 
 	while ((ups_pdu.len < UPS_PDU_MAX_LEN) && (c != 0x0d)) {
-		c = ups_getchar(100);//portMAX_DELAY
+		c = ups_getchar(200);//portMAX_DELAY100
 		if(c < 0)
 		{
 			ups_pdu.len = 0;
@@ -172,7 +172,7 @@ int8_t get_ups_param(char *buf, char *param, char *val)
 	endValue = strpbrk(buf, param);
 	if(endValue != NULL){
 		param_len = endValue - buf;
-		if(param_len < 16){
+		if(param_len < 20){
 			strncpy(val, buf, param_len);
 		}
 		else{
@@ -337,6 +337,14 @@ void ups_general_status_response(char *data)
 	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 
+	//TODO
+	len = get_ups_param(data, " ", value);
+	data += (len + 1);
+
+	//TODO
+	len = get_ups_param(data, " ", value);
+	data += (len + 1);
+
 	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	if(len > 0)
@@ -424,10 +432,10 @@ void ups_remain_time_response(char *data)
 
 	memset(value, 0, 10);
 	strcpy(value, data);
-	if((UPS.Status >> 7) & 0x01)
+	//if((UPS.Status >> 7) & 0x01)
 		UPS.work_time = atof(value);
-	else
-		UPS.work_time = 0;
+	//else
+	//	UPS.work_time = 0;
 }
 
 void ups_akb_info_response(char *data)
@@ -533,7 +541,7 @@ void ups_version_response(char *data)
 		SNMP_SetObjDescr();
 	}
 	else{
-		strncpy(UPS.vertion, value, len);
+		strncpy(UPS.vertion, value, 2);
 	}
 }
 
@@ -555,6 +563,7 @@ void ups_serial_response(char *data)
 
 	len = get_ups_param(data, "\r", value);
 	strncpy(UPS.serial, &value[9], 5);
+	UPS.serial[5] = 0;
 }
 
 void ups_protocol_id_response(char *data)
@@ -658,7 +667,7 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
 void request_task(void* params)
 {
 	uint8_t kestar_req[3] = {ups_status_req, ups_remain_time_reg, ups_info};
-	uint8_t voltronic_req[5] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_serial_req};
+	uint8_t voltronic_req[5] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_serial_req};//
 	uint8_t num_req = 0;
 	uint8_t *req;
 		for(;;)
@@ -686,7 +695,7 @@ void request_task(void* params)
 				}
 			}
 
-		/*	if(megatec_send){
+			if(megatec_send){
 				memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
 				megatec_send= false;
 				UPS.Flag_Present = false;
@@ -695,7 +704,7 @@ void request_task(void* params)
 					ups_megatec_process_pdu(ups_protocol_id_req);
 
 				megatec_send=true;
-			}*/
+			}
 
 			switch(sSettings.UPS_Setting.type_ups){
 			case ups_kestar:

+ 4 - 0
modules/common/control_symbol.c

@@ -18,6 +18,10 @@ bool control_string_en_digit(char *str, uint8_t len)
 			fail = false;
 			break;
 		}
+		else if(str[i] == 0x5c){
+			fail = false;
+			break;
+		}
 	}
 	return fail;
 }

+ 2 - 0
modules/common/control_symbol.h

@@ -8,6 +8,8 @@
 #ifndef CONTROL_SYMBOL_H_
 #define CONTROL_SYMBOL_H_
 
+#include <stdbool.h>
+
 bool control_string_en_digit(char *str, uint8_t len);
 
 

+ 1 - 1
modules/settings_api.c

@@ -142,7 +142,7 @@ void SETTINGS_SetUPSSettingsDef(void)
 {
   sSettings.UPS_Setting.Ucellmin = 1.67;
   sSettings.UPS_Setting.Ucellmax = 2.27;
-  sSettings.UPS_Setting.type_ups = ups_kestar;
+  sSettings.UPS_Setting.type_ups = ups_voltronic;//ups_kestar;
 }
 
 /**

+ 4 - 2
thirdparty/lwip/src/apps/snmp/snmp_mib2_system.c

@@ -41,6 +41,8 @@
 #include "lwip/apps/snmp_scalar.h"
 #include "lwip/sys.h"
 
+#include "control_symbol.h"
+
 #include <string.h>
 
 #if LWIP_SNMP && SNMP_LWIP_MIB2
@@ -309,11 +311,11 @@ system_set_test(const struct snmp_scalar_array_node_def *node, u16_t len, void *
   if (*var_bufsize > 0) {
     if (var_wr_len == NULL) {
       /* we have to take the terminating 0 into account */
-      if (len < *var_bufsize) {
+      if (len < *var_bufsize && control_string_en_digit(value, len)) {
         ret = SNMP_ERR_NOERROR;
       }
     } else {
-      if (len <= *var_bufsize) {
+      if (len <= *var_bufsize && control_string_en_digit(value, len)) {
         ret = SNMP_ERR_NOERROR;
       }
     }