From c9563cdebd539e06e83074382964ddd53537d5d0 Mon Sep 17 00:00:00 2001
From: kb-light <git@kb-light.de>
Date: Tue, 21 Feb 2017 09:45:33 +0100
Subject: [PATCH] scripts: check_site_lib: introduce need_string_array_match()
 (#1016)

---
 package/gluon-autoupdater/check_site.lua | 2 +-
 package/gluon-core/check_site.lua        | 2 +-
 scripts/check_site_lib.lua               | 6 ++++++
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/package/gluon-autoupdater/check_site.lua b/package/gluon-autoupdater/check_site.lua
index 9f443fec5..3eb2e7213 100644
--- a/package/gluon-autoupdater/check_site.lua
+++ b/package/gluon-autoupdater/check_site.lua
@@ -8,7 +8,7 @@ local function check_branch(k, _)
    need_string(prefix .. 'name')
    need_string_array(prefix .. 'mirrors')
    need_number(prefix .. 'good_signatures')
-   need_string_array(prefix .. 'pubkeys')
+   need_string_array_match(prefix .. 'pubkeys', '^%x+$')
 end
 
 need_table('autoupdater.branches', check_branch)
diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua
index 61938ce5e..d26b16716 100644
--- a/package/gluon-core/check_site.lua
+++ b/package/gluon-core/check_site.lua
@@ -41,7 +41,7 @@ end
 need_boolean('poe_passthrough', false)
 if need_table('dns', nil, false) then
 	need_number('dns.cacheentries', false)
-	need_string_array('dns.servers', false)
+	need_string_array_match('dns.servers', '^[%x:]+$', false)
 end
 
 if need_table('next_node', nil, false) then
diff --git a/scripts/check_site_lib.lua b/scripts/check_site_lib.lua
index ff6e1ca05..9e2bd1355 100644
--- a/scripts/check_site_lib.lua
+++ b/scripts/check_site_lib.lua
@@ -138,6 +138,12 @@ function need_string_array(varname, required)
    return var
 end
 
+function need_string_array_match(varname, pat, required)
+   local ok, var = pcall(need_array, varname, function(e) assert(e:match(pat)) end, required)
+   assert(ok, "site.conf error: expected `" .. varname .. "' to be a string array matching pattern `" .. pat .. "'")
+   return var
+end
+
 function need_array_of(varname, array, required)
    local ok, var = pcall(need_array, varname, function(e) assert_one_of(e, array) end,required)
    assert(ok, "site.conf error: expected `" .. varname .. "' to be a subset of given array: " .. array_to_string(array))
-- 
GitLab