icwmp: Fix race condition in config backup

This commit is contained in:
vdutta 2022-04-07 11:16:20 +05:30
parent 45f0f50740
commit 0c8b29d7d5
3 changed files with 33 additions and 53 deletions

View file

@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=icwmp
PKG_VERSION:=8.3.8
PKG_VERSION:=8.3.9
PKG_FIXUP:=autoreconf
PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/icwmp.git
PKG_SOURCE_PROTO:=git

View file

@ -6,7 +6,6 @@ log() {
}
if [ ! -f "/var/state/cwmp" ]; then
touch "/var/state/cwmp"
exit 0;
fi

View file

@ -1,16 +1,16 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2015-2019 iopsys Software Solutions AB
. /lib/functions.sh
include /lib/network
. /usr/share/libubox/jshn.sh
START=99
STOP=2
STOP=00
USE_PROCD=1
PROG="/usr/sbin/icwmpd"
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
include /lib/network
log() {
echo "${@}"|logger -t cwmp.init -p info
}
@ -58,41 +58,34 @@ wait_for_resolvfile() {
}
copy_cwmp_etc_files_to_varstate() {
if [ ! -f /var/state/cwmp ]
then
if [ -f /etc/icwmpd/cwmp ]
then
uci -q -c /etc/icwmpd delete cwmp.acs
uci -q -c /etc/icwmpd commit cwmp
cp /etc/icwmpd/cwmp /var/state/cwmp
else
touch /var/state/cwmp
fi
mkdir -p /var/run/icwmpd
if [ -f /etc/icwmpd/cwmp ]; then
uci -q -c /etc/icwmpd delete cwmp.acs
uci -q -c /etc/icwmpd commit cwmp
cp -f /etc/icwmpd/cwmp /var/state/cwmp
fi
mkdir -p /var/run/icwmpd
if [ -f /etc/icwmpd/icwmpd_backup_session.xml ]
then
mv /etc/icwmpd/icwmpd_backup_session.xml /var/run/icwmpd 2>/dev/null
if [ -f /etc/icwmpd/icwmpd_backup_session.xml ]; then
cp -f /etc/icwmpd/icwmpd_backup_session.xml /var/run/icwmpd/ 2>/dev/null
fi
if [ -f /etc/icwmpd/dm_enabled_notify.xml ]
then
mv /etc/icwmpd/dm_enabled_notify /var/run/icwmpd 2>/dev/null
if [ -f /etc/icwmpd/dm_enabled_notify.xml ]; then
cp -f /etc/icwmpd/dm_enabled_notify /var/run/icwmpd/ 2>/dev/null
fi
}
copy_cwmp_varstate_files_to_etc() {
if [ -f /var/state/cwmp ]
then
cp /var/state/cwmp /etc/icwmpd 2>/dev/null
if [ -f /var/run/icwmpd/icwmpd_backup_session.xml ]; then
cp -f /var/run/icwmpd/icwmpd_backup_session.xml /etc/icwmpd/ 2>/dev/null
fi
if [ -f /var/run/icwmpd/icwmpd_backup_session.xml ]
then
cp /var/run/icwmpd/icwmpd_backup_session.xml /etc/icwmpd 2>/dev/null
if [ -f /var/run/icwmpd/dm_enabled_notify.xml ]; then
cp -f /var/run/icwmpd/dm_enabled_notify /etc/icwmpd/ 2>/dev/null
fi
if [ -f /var/run/icwmpd/dm_enabled_notify.xml ]
then
cp /var/run/icwmpd/dm_enabled_notify /etc/icwmpd 2>/dev/null
if [ -f /var/state/cwmp ]; then
cp -f /var/state/cwmp /etc/icwmpd/
fi
}
@ -158,22 +151,6 @@ validate_defaults() {
return 0;
}
boot() {
local dhcp_url dhcp_discovery
config_load cwmp
config_get_bool dhcp_discovery acs dhcp_discovery 1
config_get dhcp_url acs dhcp_url ""
if [ "${dhcp_discovery}" == "enable" ] || [ "${dhcp_discovery}" == "1" ]; then
if [ -z "${dhcp_url}" ]; then
log "dhcp discovery enabled but no dhcp url, trigger update"
/etc/icwmpd/update.sh
fi
fi
start
}
start_service() {
local enable_cwmp
local wan_interface
@ -217,15 +194,19 @@ start_service() {
procd_close_instance
}
stop_service()
service_stopped()
{
copy_cwmp_varstate_files_to_etc
}
reload_service() {
log "Restarting CWMP client"
stop
start
log "Reloading CWMP client"
ubus -t 1 call tr069 command '{"command":"reload"}'
if [ "$?" -ne "0" ]; then
log "Restarting CWMP client"
stop
start
fi
}
service_triggers() {