diff --git a/notifications.c b/notifications.c index b6e580d..e95d75f 100644 --- a/notifications.c +++ b/notifications.c @@ -386,14 +386,13 @@ void load_json_custom_notify_file(struct cwmp *cwmp) struct blob_buf bbuf; struct blob_attr *cur; struct blob_attr *custom_notify_list = NULL; - int rem; + int rem, fd; if (cwmp->conf.json_custom_notify_file == NULL || !file_exists(cwmp->conf.json_custom_notify_file)) return; - if (!file_exists("/etc/icwmpd/.icwmpd_notify")) + if (file_exists("/etc/icwmpd/.icwmpd_notify")) return; - remove("/etc/icwmpd/.icwmpd_notify"); memset(&bbuf, 0, sizeof(struct blob_buf)); blob_buf_init(&bbuf, 0); @@ -401,19 +400,23 @@ void load_json_custom_notify_file(struct cwmp *cwmp) if (blobmsg_add_json_from_file(&bbuf, cwmp->conf.json_custom_notify_file) == false) { CWMP_LOG(WARNING, "The file %s is not a valid JSON file", cwmp->conf.json_custom_notify_file); blob_buf_free(&bbuf); + creat("/etc/icwmpd/.icwmpd_notify", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); return; } const struct blobmsg_policy p_notif[1] = { { "custom_notification", BLOBMSG_TYPE_ARRAY } }; struct blob_attr *tb_notif[1] = { NULL}; blobmsg_parse(p_notif, 1, tb_notif, blobmsg_data(bbuf.head), blobmsg_len(bbuf.head)); - if (!tb_notif[0]) + if (!tb_notif[0]) { + creat("/etc/icwmpd/.icwmpd_notify", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); return; + } custom_notify_list = tb_notif[0]; if (custom_notify_list == NULL) { CWMP_LOG(WARNING, "The JSON file %s doesn't contain a notify parameters list", cwmp->conf.json_custom_notify_file); blob_buf_free(&bbuf); + creat("/etc/icwmpd/.icwmpd_notify", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); return; } const struct blobmsg_policy p[2] = { { "parameter", BLOBMSG_TYPE_STRING }, { "notify_type", BLOBMSG_TYPE_STRING } }; @@ -440,6 +443,7 @@ void load_json_custom_notify_file(struct cwmp *cwmp) } } blob_buf_free(&bbuf); + creat("/etc/icwmpd/.icwmpd_notify", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); } diff --git a/test/script/verify_custom_notifications.sh b/test/script/verify_custom_notifications.sh index aaf11ec..f625c3e 100755 --- a/test/script/verify_custom_notifications.sh +++ b/test/script/verify_custom_notifications.sh @@ -21,8 +21,6 @@ uci commit cwmp exec_cmd uci set cwmp.cpe.json_custom_notify_file="/etc/icwmpd/custom_notification_valid.json" uci commit cwmp -touch /etc/icwmpd/.icwmpd_notify - supervisorctl start icwmpd sleep 5 @@ -38,6 +36,7 @@ if [[ $notif2 != *"Device.WiFi.SSID.1.SSID"* ]]; then fi supervisorctl stop icwmpd +rm /etc/icwmpd/.icwmpd_notify echo "PASS test valid custom notification json file" @@ -51,8 +50,6 @@ uci commit cwmp exec_cmd uci set cwmp.cpe.json_custom_notify_file="/etc/icwmpd/custom_notification_invalid_json.json" uci commit cwmp -touch /etc/icwmpd/.icwmpd_notify - supervisorctl start icwmpd sleep 5 @@ -75,6 +72,7 @@ fi echo "PASS test custom notification invalid json file" supervisorctl stop icwmpd +rm /etc/icwmpd/.icwmpd_notify # # Test custom notification json file containing forced active notification @@ -86,8 +84,6 @@ uci commit cwmp exec_cmd uci set cwmp.cpe.json_custom_notify_file="/etc/icwmpd/custom_notification_forced.json" uci commit cwmp -touch /etc/icwmpd/.icwmpd_notify - supervisorctl start icwmpd sleep 5 @@ -110,6 +106,7 @@ fi echo "PASS test custom notification json file containing forced active notification" supervisorctl stop icwmpd +rm /etc/icwmpd/.icwmpd_notify # # Test custom notification json file containing invalid parameter path @@ -121,8 +118,6 @@ uci commit cwmp exec_cmd uci set cwmp.cpe.json_custom_notify_file="/etc/icwmpd/custom_notification_invalid_parameter.json" uci commit cwmp -touch /etc/icwmpd/.icwmpd_notify - supervisorctl start icwmpd sleep 5 @@ -145,5 +140,6 @@ fi echo "PASS test custom notification json file containing invalid parameter path" supervisorctl stop icwmpd +rm /etc/icwmpd/.icwmpd_notify echo "PASS: $TEST_NAME" \ No newline at end of file