From 3e1e4d5eb6b1cbb3125dbd33f6636337c6070784 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 13 Feb 2018 14:29:21 +0100 Subject: luci-base: fix Lua-side ip6hostid() datatype validation A valid host ID as accepted by netifd must meet the following criteria: - Is either one of the two special "random" or "eui64" strings - Or is a valid IPv6 address according to inet_pton(AF_INET6) - Has the first 64 bit set to zero Signed-off-by: Jo-Philipp Wich --- modules/luci-base/luasrc/cbi/datatypes.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'modules/luci-base') diff --git a/modules/luci-base/luasrc/cbi/datatypes.lua b/modules/luci-base/luasrc/cbi/datatypes.lua index df23aaf135..a7e02f350a 100644 --- a/modules/luci-base/luasrc/cbi/datatypes.lua +++ b/modules/luci-base/luasrc/cbi/datatypes.lua @@ -169,8 +169,13 @@ function ipmask6(val) end function ip6hostid(val) - if val and val:match("^[a-fA-F0-9:]+$") and (#val > 2) then - return (ip6addr("2001:db8:0:0" .. val) or ip6addr("2001:db8:0:0:" .. val)) + if val == "eui64" or val == "random" then + return true + else + local addr = ip.IPv6(val) + if addr and addr:prefix() == 128 and addr:lower("::1:0:0:0:0") then + return true + end end return false -- cgit v1.2.3