luci-app-statistics: check that uci config sections exist
authorHannu Nyman <hannu.nyman@iki.fi>
Thu, 18 May 2017 09:10:14 +0000 (12:10 +0300)
committerHannu Nyman <hannu.nyman@iki.fi>
Thu, 18 May 2017 09:10:14 +0000 (12:10 +0300)
A missing or faulty luci_statistics config file may prevent
LuCI access completely already at the login phase as
the statistics config is parsed already then.

The error is like:
  .../statistics/datatree.lua:16: attempt to index upvalue 'sections' (a nil value)

User may be completely locked out of LuCI until he figures out
the need to have a proper luci_statistics config file.

Prevent the error by checking for the existence of
the uci config sections before trying to use values from them.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
(cherry picked from commit d04f667383ec2894a5ecefde7ad9284d07563a67)

applications/luci-app-statistics/luasrc/statistics/datatree.lua

index 806b054cb6d60bdb2c81e0f62c88433d1cf6794e..5176a19a22b7ae1bc1cf3404d7179eac5dfaa986 100644 (file)
@@ -13,9 +13,17 @@ local sections = uci:get_all("luci_statistics")
 Instance = util.class()
 
 function Instance.__init__( self, host )
-       self._host    = host or sections.collectd.Hostname or sys.hostname()
-       self._libdir  = sections.collectd.PluginDir        or "/usr/lib/collectd"
-       self._rrddir  = sections.collectd_rrdtool.DataDir  or "/tmp/rrd"
+       self._host    = host or sys.hostname()
+       self._libdir  = "/usr/lib/collectd"
+       self._rrddir  = "/tmp/rrd"
+
+       if sections and sections.collectd then
+               self._host    = host or sections.collectd.Hostname or sys.hostname()
+               self._libdir  = sections.collectd.PluginDir        or "/usr/lib/collectd"
+       end
+       if sections and sections.collectd_rrdtool then
+               self._rrddir  = sections.collectd_rrdtool.DataDir  or "/tmp/rrd"
+       end
 
        self._libdir  = self._libdir:gsub("/$","")
        self._rrddir  = self._rrddir:gsub("/$","")