diff --git a/scripts/freecwmp.sh b/scripts/freecwmp.sh index e6f874a..1667437 100644 --- a/scripts/freecwmp.sh +++ b/scripts/freecwmp.sh @@ -481,6 +481,7 @@ handle_action() { for i in `seq 0 $n` do local parm=`/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q -P /var/state get cwmp.@fault[$i].parameter 2> /dev/null` + parm=${parm#-} local fault_code=`/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q -P /var/state get cwmp.@fault[$i].fault_code 2> /dev/null` freecwmp_fault_output "$parm" "$fault_code" if [ "$action" = "apply_notification" ]; then break; fi diff --git a/scripts/functions/common b/scripts/functions/common index 7a9bca0..1493f51 100644 --- a/scripts/functions/common +++ b/scripts/functions/common @@ -423,12 +423,12 @@ EOF } freecwmp_set_parameter_fault() { - local _parm="$1" + local _parm="-$1" local _fault="$2" - /sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q -P /var/state batch << EOF 2>&1 >/dev/null - add cwmp fault - set cwmp.@fault[-1].parameter="$_parm" - set cwmp.@fault[-1].fault_code="$_fault" + /sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q -P /var/state batch << EOF 2>&1 >/dev/null + add cwmp fault + set cwmp.@fault[-1].parameter="$_parm" + set cwmp.@fault[-1].fault_code="$_fault" EOF } @@ -686,12 +686,16 @@ get_param_name_generic() { if [ "$next_level" = "0" ]; then eval '$cmd' else - local len=${#parameter} - let len-- - if [ "${parameter:$len:1}" != "." ]; then - return $FAULT_CPE_INVALID_ARGUMENTS + if [ "$parameter" != "" ]; then + local len=${#parameter} + let len-- + if [ "${parameter:$len:1}" != "." ]; then + return $FAULT_CPE_INVALID_ARGUMENTS + fi + eval '$cmd' | grep -v "$parameter[A-Za-z_0-9]\+\.[A-Za-z_0-9]" | grep -v "\"$parameter\"" + else + eval '$cmd' | grep -v "$parameter[A-Za-z_0-9]\+\.[A-Za-z_0-9]" fi - eval '$cmd' | grep -v "$parameter[A-Za-z_0-9]\+\.[A-Za-z_0-9]" fi fi diff --git a/scripts/functions/wan_device b/scripts/functions/wan_device index 5353c7e..6136107 100644 --- a/scripts/functions/wan_device +++ b/scripts/functions/wan_device @@ -312,7 +312,9 @@ get_cache_InternetGatewayDevice_WANDevice() { prev_wan="$wan" prev_dev="$dev" done - get_wandevice_dev_parent_objects "$prev_dev" "$dev_notif_permission" + if [ "$prev_dev" != "" ]; then + get_wandevice_dev_parent_objects "$prev_dev" "$dev_notif_permission" + fi } get_dynamic_InternetGatewayDevice_WANDevice() { diff --git a/xml.c b/xml.c index 09d3754..c12ff7f 100644 --- a/xml.c +++ b/xml.c @@ -1731,6 +1731,12 @@ int cwmp_handle_rpc_cpe_schedule_inform(struct session *session, struct rpc *rpc b = mxmlWalkNext(b, session->body_in, MXML_DESCEND); } + if (delay_seconds <= 0) { + fault = FAULT_CPE_INVALID_ARGUMENTS; + pthread_mutex_unlock (&mutex_schedule_inform); + goto fault; + } + if(count_schedule_inform_queue>=MAX_SCHEDULE_INFORM_QUEUE) { fault = FAULT_CPE_RESOURCES_EXCEEDED;