From 63034c36073bedf87db18d05d3fe8cca016c6490 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 22 Oct 2021 19:44:43 +0200 Subject: luci-base: remove further related section types on deleting network When removing a `config interface` section in `/etc/config/network`, drop related `rule` and `rule6` sections too, as well as related `dhcp` sections in `/etc/config/dhcp`. Ref: https://forum.openwrt.org/t/grooming-etc-config/109764/7 Signed-off-by: Jo-Philipp Wich --- .../htdocs/luci-static/resources/network.js | 34 ++++++++++++++-------- 1 file changed, 22 insertions(+), 12 deletions(-) (limited to 'modules/luci-base/htdocs') diff --git a/modules/luci-base/htdocs/luci-static/resources/network.js b/modules/luci-base/htdocs/luci-static/resources/network.js index 17dd055e25..2a402bcd57 100644 --- a/modules/luci-base/htdocs/luci-static/resources/network.js +++ b/modules/luci-base/htdocs/luci-static/resources/network.js @@ -1005,9 +1005,10 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ { */ deleteNetwork: function(name) { var requireFirewall = Promise.resolve(L.require('firewall')).catch(function() {}), + loadDHCP = L.resolveDefault(uci.load('dhcp')), network = this.instantiateNetwork(name); - return Promise.all([ requireFirewall, initNetworkState() ]).then(function(res) { + return Promise.all([ requireFirewall, loadDHCP, initNetworkState() ]).then(function(res) { var uciInterface = uci.get('network', name), firewall = res[0]; @@ -1020,19 +1021,23 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ { uci.remove('luci', s['.name']); }); - uci.sections('network', 'alias', function(s) { - if (s.interface == name) - uci.remove('network', s['.name']); - }); + uci.sections('network', null, function(s) { + switch (s['.type']) { + case 'alias': + case 'route': + case 'route6': + if (s.interface == name) + uci.remove('network', s['.name']); - uci.sections('network', 'route', function(s) { - if (s.interface == name) - uci.remove('network', s['.name']); - }); + break; - uci.sections('network', 'route6', function(s) { - if (s.interface == name) - uci.remove('network', s['.name']); + case 'rule': + case 'rule6': + if (s.in == name || s.out == name) + uci.remove('network', s['.name']); + + break; + } }); uci.sections('wireless', 'wifi-iface', function(s) { @@ -1044,6 +1049,11 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ { uci.unset('wireless', s['.name'], 'network'); }); + uci.sections('dhcp', 'dhcp', function(s) { + if (s.interface == name) + uci.remove('dhcp', s['.name']); + }); + if (firewall) return firewall.deleteNetwork(name).then(function() { return true }); -- cgit v1.2.3