From d69edbabce659f7a93bd226ab70333b7a8b8c757 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 4 Jun 2018 22:13:57 +0200 Subject: [PATCH] Update luci-mod-admin-full --- .../model/cbi/admin_network/dhcp.lua.orig | 343 ++++++++++++++++++ .../view/admin_network/wifi_overview.htm | 6 +- .../luasrc/view/admin_status/index.htm | 1 + 3 files changed, 347 insertions(+), 3 deletions(-) create mode 100644 luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua.orig diff --git a/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua.orig b/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua.orig new file mode 100644 index 000000000..855ed31f1 --- /dev/null +++ b/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua.orig @@ -0,0 +1,343 @@ +-- Copyright 2008 Steven Barth +-- Licensed to the public under the Apache License 2.0. + +local ipc = require "luci.ip" +local sys = require "luci.sys" +local o +require "luci.util" + +m = Map("dhcp", translate("DHCP and DNS"), + translate("Dnsmasq is a combined DHCP-Server and DNS-" .. + "Forwarder for NAT " .. + "firewalls")) + +s = m:section(TypedSection, "dnsmasq", translate("Server Settings")) +s.anonymous = true +s.addremove = false + +s:tab("general", translate("General Settings")) +s:tab("files", translate("Resolv and Hosts Files")) +s:tab("tftp", translate("TFTP Settings")) +s:tab("advanced", translate("Advanced Settings")) + +s:taboption("general", Flag, "domainneeded", + translate("Domain required"), + translate("Don't forward DNS-Requests without " .. + "DNS-Name")) + +s:taboption("general", Flag, "authoritative", + translate("Authoritative"), + translate("This is the only DHCP in the local network")) + + +s:taboption("files", Flag, "readethers", + translate("Use /etc/ethers"), + translate("Read /etc/ethers to configure the DHCP-Server")) + +s:taboption("files", Value, "leasefile", + translate("Leasefile"), + translate("file where given DHCP-leases will be stored")) + +s:taboption("files", Flag, "noresolv", + translate("Ignore resolve file")).optional = true + +rf = s:taboption("files", Value, "resolvfile", + translate("Resolve file"), + translate("local DNS file")) + +rf:depends("noresolv", "") +rf.optional = true + + +s:taboption("files", Flag, "nohosts", + translate("Ignore /etc/hosts")).optional = true + +s:taboption("files", DynamicList, "addnhosts", + translate("Additional Hosts files")).optional = true + +qu = s:taboption("advanced", Flag, "quietdhcp", + translate("Suppress logging"), + translate("Suppress logging of the routine operation of these protocols")) +qu.optional = true + +se = s:taboption("advanced", Flag, "sequential_ip", + translate("Allocate IP sequentially"), + translate("Allocate IP addresses sequentially, starting from the lowest available address")) +se.optional = true + +bp = s:taboption("advanced", Flag, "boguspriv", + translate("Filter private"), + translate("Do not forward reverse lookups for local networks")) +bp.default = bp.enabled + +s:taboption("advanced", Flag, "filterwin2k", + translate("Filter useless"), + translate("Do not forward requests that cannot be answered by public name servers")) + + +s:taboption("advanced", Flag, "localise_queries", + translate("Localise queries"), + translate("Localise hostname depending on the requesting subnet if multiple IPs are available")) + +local have_dnssec_support = luci.util.checklib("/usr/sbin/dnsmasq", "libhogweed.so") + +if have_dnssec_support then + o = s:taboption("advanced", Flag, "dnssec", + translate("DNSSEC")) + o.optional = true + + o = s:taboption("advanced", Flag, "dnsseccheckunsigned", + translate("DNSSEC check unsigned"), + translate("Requires upstream supports DNSSEC; verify unsigned domain responses really come from unsigned domains")) + o.optional = true +end + +s:taboption("general", Value, "local", + translate("Local server"), + translate("Local domain specification. Names matching this domain are never forwarded and are resolved from DHCP or hosts files only")) + +s:taboption("general", Value, "domain", + translate("Local domain"), + translate("Local domain suffix appended to DHCP names and hosts file entries")) + +s:taboption("advanced", Flag, "expandhosts", + translate("Expand hosts"), + translate("Add local domain suffix to names served from hosts files")) + +s:taboption("advanced", Flag, "nonegcache", + translate("No negative cache"), + translate("Do not cache negative replies, e.g. for not existing domains")) + +s:taboption("advanced", Value, "serversfile", + translate("Additional servers file"), + translate("This file may contain lines like 'server=/domain/1.2.3.4' or 'server=1.2.3.4' for".. + "domain-specific or full upstream DNS servers.")) + +s:taboption("advanced", Flag, "strictorder", + translate("Strict order"), + translate("DNS servers will be queried in the " .. + "order of the resolvfile")).optional = true + + +bn = s:taboption("advanced", DynamicList, "bogusnxdomain", translate("Bogus NX Domain Override"), + translate("List of hosts that supply bogus NX domain results")) + +bn.optional = true +bn.placeholder = "67.215.65.132" + + +s:taboption("general", Flag, "logqueries", + translate("Log queries"), + translate("Write received DNS requests to syslog")).optional = true + +df = s:taboption("general", DynamicList, "server", translate("DNS forwardings"), + translate("List of DNS " .. + "servers to forward requests to")) + +df.optional = true +df.placeholder = "/example.org/10.1.2.3" + + +rp = s:taboption("general", Flag, "rebind_protection", + translate("Rebind protection"), + translate("Discard upstream RFC1918 responses")) + +rp.rmempty = false + + +rl = s:taboption("general", Flag, "rebind_localhost", + translate("Allow localhost"), + translate("Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services")) + +rl:depends("rebind_protection", "1") + + +rd = s:taboption("general", DynamicList, "rebind_domain", + translate("Domain whitelist"), + translate("List of domains to allow RFC1918 responses for")) +rd.optional = true + +rd:depends("rebind_protection", "1") +rd.datatype = "host(1)" +rd.placeholder = "ihost.netflix.com" + + +pt = s:taboption("advanced", Value, "port", + translate("DNS server port"), + translate("Listening port for inbound DNS queries")) + +pt.optional = true +pt.datatype = "port" +pt.placeholder = 53 + + +qp = s:taboption("advanced", Value, "queryport", + translate("DNS query port"), + translate("Fixed source port for outbound DNS queries")) + +qp.optional = true +qp.datatype = "port" +qp.placeholder = translate("any") + + +lm = s:taboption("advanced", Value, "dhcpleasemax", + translate("Max. DHCP leases"), + translate("Maximum allowed number of active DHCP leases")) + +lm.optional = true +lm.datatype = "uinteger" +lm.placeholder = translate("unlimited") + + +em = s:taboption("advanced", Value, "ednspacket_max", + translate("Max. EDNS0 packet size"), + translate("Maximum allowed size of EDNS.0 UDP packets")) + +em.optional = true +em.datatype = "uinteger" +em.placeholder = 1280 + + +cq = s:taboption("advanced", Value, "dnsforwardmax", + translate("Max. concurrent queries"), + translate("Maximum allowed number of concurrent DNS queries")) + +cq.optional = true +cq.datatype = "uinteger" +cq.placeholder = 150 + +cs = s:taboption("advanced", Value, "cachesize", + translate("Size of DNS query cache"), + translate("Number of cached DNS entries (max is 10000, 0 is no caching)")) +cs.optional = true +cs.datatype = "range(0,10000)" +cs.placeholder = 150 + +s:taboption("tftp", Flag, "enable_tftp", + translate("Enable TFTP server")).optional = true + +tr = s:taboption("tftp", Value, "tftp_root", + translate("TFTP server root"), + translate("Root directory for files served via TFTP")) + +tr.optional = true +tr:depends("enable_tftp", "1") +tr.placeholder = "/" + + +db = s:taboption("tftp", Value, "dhcp_boot", + translate("Network boot image"), + translate("Filename of the boot image advertised to clients")) + +db.optional = true +db:depends("enable_tftp", "1") +db.placeholder = "pxelinux.0" + +o = s:taboption("general", Flag, "localservice", + translate("Local Service Only"), + translate("Limit DNS service to subnets interfaces on which we are serving DNS.")) +o.optional = false +o.rmempty = false + +o = s:taboption("general", Flag, "nonwildcard", + translate("Non-wildcard"), + translate("Bind only to specific interfaces rather than wildcard address.")) +o.optional = false +o.rmempty = false + +o = s:taboption("general", DynamicList, "interface", + translate("Listen Interfaces"), + translate("Limit listening to these interfaces, and loopback.")) +o.optional = true +o:depends("nonwildcard", true) + +o = s:taboption("general", DynamicList, "notinterface", + translate("Exclude interfaces"), + translate("Prevent listening on these interfaces.")) +o.optional = true +o:depends("nonwildcard", true) + +m:section(SimpleSection).template = "admin_network/lease_status" + +s = m:section(TypedSection, "host", translate("Static Leases"), + translate("Static leases are used to assign fixed IP addresses and symbolic hostnames to " .. + "DHCP clients. They are also required for non-dynamic interface configurations where " .. + "only hosts with a corresponding lease are served.") .. "
" .. + translate("Use the Add Button to add a new lease entry. The MAC-Address " .. + "identifies the host, the IPv4-Address specifies the fixed address to " .. + "use, and the Hostname is assigned as a symbolic name to the requesting host. " .. + "The optional Lease time can be used to set non-standard host-specific " .. + "lease time, e.g. 12h, 3d or infinite.")) + +s.addremove = true +s.anonymous = true +s.template = "cbi/tblsection" + +name = s:option(Value, "name", translate("Hostname")) +name.datatype = "hostname('strict')" +name.rmempty = true + +function name.write(self, section, value) + Value.write(self, section, value) + m:set(section, "dns", "1") +end + +function name.remove(self, section) + Value.remove(self, section) + m:del(section, "dns") +end + +mac = s:option(Value, "mac", translate("MAC-Address")) +mac.datatype = "list(macaddr)" +mac.rmempty = true + +function mac.cfgvalue(self, section) + local val = Value.cfgvalue(self, section) + return ipc.checkmac(val) or val +end + +ip = s:option(Value, "ip", translate("IPv4-Address")) +ip.datatype = "or(ip4addr,'ignore')" + +time = s:option(Value, "leasetime", translate("Lease time")) +time.rmempty = true + +duid = s:option(Value, "duid", translate("DUID")) +duid.datatype = "and(rangelength(20,36),hexstring)" +fp = io.open("/var/hosts/odhcpd") +if fp then + for line in fp:lines() do + local net_val, duid_val = string.match(line, "# (%S+)%s+(%S+)") + if duid_val then + duid:value(duid_val, duid_val) + end + end + fp:close() +end + +hostid = s:option(Value, "hostid", translate("IPv6-Suffix (hex)")) + +sys.net.host_hints(function(m, v4, v6, name) + if m and v4 then + ip:value(v4) + mac:value(m, "%s (%s)" %{ m, name or v4 }) + end +end) + +function ip.validate(self, value, section) + local m = mac:formvalue(section) or "" + local n = name:formvalue(section) or "" + if value and #n == 0 and #m == 0 then + return nil, translate("One of hostname or mac address must be specified!") + end + return Value.validate(self, value, section) +end + + +return m diff --git a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm index 31f1fed81..d6140c81f 100644 --- a/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -101,9 +101,9 @@ <%+header%> <% if not has_iwinfo then %> -
- <%:Package libiwinfo required!%>
- <%_The libiwinfo-lua package is not installed. You must install this component for working wireless configuration!%> +
+

<%:Package libiwinfo required!%>

+

<%_The libiwinfo-lua package is not installed. You must install this component for working wireless configuration!%>

<% end %> diff --git a/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/luci-mod-admin-full/luasrc/view/admin_status/index.htm index c5952064a..dd64d1254 100644 --- a/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -13,6 +13,7 @@ local has_ipv6 = fs.access("/proc/net/ipv6_route") local has_dhcp = fs.access("/etc/config/dhcp") + local has_mptcp = luci.sys.exec("sysctl -n net.mptcp.mptcp_enabled | tr -d '\n'") local has_wifi = ((fs.stat("/etc/config/wireless", "size") or 0) > 0) local sysinfo = luci.util.ubus("system", "info") or { }