summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-07-17 07:47:33 +0200
committerHans Dedecker <dedeckeh@gmail.com>2018-07-30 13:19:19 +0200
commitf24e0129975f91a1f75b0546d154f380aa91639c (patch)
tree64280c22d092caf680d01f724267a74718e3a6a7
parentd4a4f0658923e76a3b9e17017efd2d27e48c0d21 (diff)
downloadopenwrt-f24e0129975f91a1f75b0546d154f380aa91639c.tar.gz
openwrt-f24e0129975f91a1f75b0546d154f380aa91639c.tar.bz2
openwrt-f24e0129975f91a1f75b0546d154f380aa91639c.zip
base-files: network.sh: gracefully handle missing network.interface ubus ns
When attempting to use any of the functions in network.sh while netifd is not started yet, the ubus interface dump query will fail with "Not found", yielding an empty response. Subsequently, jsonfilter is invoked with an empty string instead of a valid JSON document, causing it to emit a second "unexpected end of data" error. This caused the dnsmasq init script to log the following errors during early boot on some systems: procd: /etc/rc.d/S19dnsmasq: Command failed: Not found. procd: /etc/rc.d/S19dnsmasq: Failed to parse json data: unexpected end of data. Fix the issue by allowing the ubus query to fail with "Not found" but still logging other failures, and by passing an empty JSON object to jsonfilter if the interface status cache is empty. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--package/base-files/Makefile2
-rw-r--r--package/base-files/files/lib/functions/network.sh14
2 files changed, 11 insertions, 5 deletions
diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index b58843163f..ca1cb47a6c 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk
include $(INCLUDE_DIR)/feeds.mk
PKG_NAME:=base-files
-PKG_RELEASE:=191
+PKG_RELEASE:=192
PKG_FLAGS:=nonshared
PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
diff --git a/package/base-files/files/lib/functions/network.sh b/package/base-files/files/lib/functions/network.sh
index 08cce49df2..d7fd2dea57 100644
--- a/package/base-files/files/lib/functions/network.sh
+++ b/package/base-files/files/lib/functions/network.sh
@@ -6,10 +6,16 @@
__network_ifstatus() {
local __tmp
- [ -z "$__NETWORK_CACHE" ] && \
- export __NETWORK_CACHE="$(ubus call network.interface dump)"
-
- __tmp="$(jsonfilter ${4:+-F "$4"} ${5:+-l "$5"} -s "$__NETWORK_CACHE" -e "$1=@.interface${2:+[@.interface='$2']}$3")"
+ [ -z "$__NETWORK_CACHE" ] && {
+ __tmp="$(ubus call network.interface dump 2>&1)"
+ case "$?" in
+ 4) : ;;
+ 0) export __NETWORK_CACHE="$__tmp" ;;
+ *) echo "$__tmp" >&2 ;;
+ esac
+ }
+
+ __tmp="$(jsonfilter ${4:+-F "$4"} ${5:+-l "$5"} -s "${__NETWORK_CACHE:-{}}" -e "$1=@.interface${2:+[@.interface='$2']}$3")"
[ -z "$__tmp" ] && \
unset "$1" && \