luci-mod-network: Fix 'instances' fields for dnsmasq dhcp config entries 6579/head
authorPaul Donald <newtwen@gmail.com>
Sat, 18 Nov 2023 14:30:19 +0000 (15:30 +0100)
committerPaul Donald <newtwen@gmail.com>
Wed, 22 Nov 2023 18:39:55 +0000 (19:39 +0100)
Fixed error wherein luci erroneously saved the iterator integer of the
current dnsmasq config object to a host (and boot/PXE) config entry
'instance' field, instead of correctly referring to its name.

Now we use the correct ".name" field of the dnsmasq config entry.
Anonymous entries have e.g. "cfg01411c". The ".name" field corresponds
to 'myName' in /etc/config/dhcp entries of:

config dnsmasq 'myName'
  ...

In this way, host and other entry types are bound correctly to specific
dnsmasq instances. For anonymous entries, display "dnsmasq[x]" as name.

Signed-off-by: Paul Donald <newtwen@gmail.com>
modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js

index da0eeabb5a3541726b02d6e1a14393a1a275fcbe..538b1b0d55a46f8b31b9c2fa2232f0510a5edc23 100644 (file)
@@ -89,6 +89,21 @@ function calculateNetwork(addr, mask) {
        ];
 }
 
+function generateDnsmasqInstanceEntry(data) {
+       const nameValueMap = new Map(Object.entries(data));
+       let formatString = nameValueMap.get('.index') + ' (' +  _('Name') + (nameValueMap.get('.anonymous') ? ': dnsmasq[' + nameValueMap.get('.index') + ']': ': ' + nameValueMap.get('.name'));
+
+       if (data.domain) {
+               formatString += ', ' +  _('Domain')  + ': ' + data.domain;
+       }
+       if (data.local) {
+               formatString += ', ' +  _('Local')  + ': ' + data.local;
+       }
+       formatString += ')';
+
+       return nameValueMap.get('.name'), formatString;
+}
+
 function getDHCPPools() {
        return uci.load('dhcp').then(function() {
                let sections = uci.sections('dhcp', 'dhcp'),
@@ -630,7 +645,7 @@ return view.extend({
                so.optional = true;
 
                Object.values(L.uci.sections('dhcp', 'dnsmasq')).forEach(function(val, index) {
-                       so.value(index, '%s (Domain: %s, Local: %s)'.format(index, val.domain || '?', val.local || '?'));
+                       so.value(generateDnsmasqInstanceEntry(val));
                });
 
                o = s.taboption('srvhosts', form.SectionValue, '__srvhosts__', form.TableSection, 'srvhost', null,
@@ -932,7 +947,7 @@ return view.extend({
                so.optional = true;
 
                Object.values(L.uci.sections('dhcp', 'dnsmasq')).forEach(function(val, index) {
-                       so.value(index, '%s (Domain: %s, Local: %s)'.format(index, val.domain || '?', val.local || '?'));
+                       so.value(generateDnsmasqInstanceEntry(val));
                });