summaryrefslogtreecommitdiffstats
path: root/tinydns-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tinydns-model.lua')
-rw-r--r--tinydns-model.lua150
1 files changed, 149 insertions, 1 deletions
diff --git a/tinydns-model.lua b/tinydns-model.lua
index b6fa385..a3f8a10 100644
--- a/tinydns-model.lua
+++ b/tinydns-model.lua
@@ -1,9 +1,24 @@
module(..., package.seeall)
require("procps")
+require("getopts")
+require("fs")
+
+local configdir
+local datafile
+local configfiles = {}
+local configitems = {}
local processname = "tinydns"
-local configfile = "???"
+local configfile = "/etc/conf.d/" .. processname
+local initdoptions = getopts.getoptsfromfile_onperline("/etc/init.d/" .. processname)
+if (initdoptions) then
+ configdir = initdoptions.DATADIR
+ datafile = initdoptions.ROOT .. "/data" or "/var/cache/data"
+else
+ configdir = "/etc/" .. processname
+ datafile = "/var/cache/data"
+end
-- ################################################################################
-- LOCAL FUNCTIONS
@@ -22,9 +37,68 @@ local function get_version()
return cmd_output_result,cmd_output_error
end
+--[[
+-- This function could be used to check that valid parameters are used in different places
+local function check_signs(sign)
+ local output = {}
+ local output = {prefix={"Z", "&", "=", "+", "@", "C",}}
+ output = output[sign]
+ return output
+end
+--]]
+
+-- Return a table with the config-content of a file
+-- Commented/Blank lines are ignored
+local function get_value_from_file(file)
+ local output = {}
+ local filecontent = fs.read_file_as_array(file)
+ for i=1,table.maxn(filecontent) do
+ local l = filecontent[i]
+ if not (string.find ( l, "^[;#].*" )) and not (string.find (l, "^%s*$")) then
+ table.insert(output, string.match(l,"(.-)%s*$"))
+ end
+ end
+ if (#output > 0) then
+ return true, output
+ else
+ return false, output
+ end
+
+end
+
+-- Function to recursively inserts all filenames in a dir into an array
+local function recursedir(path, filearray)
+ local k,v
+ for k,v in pairs(posix.dir(path) or {}) do
+ -- Ignore files that begins with a '.'
+ if not string.match(v, "^%.") then
+ local f = path .. "/" .. v
+ -- If subfolder exists, list files in this subfolder
+ if (posix.stat(f).type == "directory") then
+ recursedir(f, filearray)
+ else
+ table.insert(filearray, f)
+ end
+ end
+ end
+end
+
+-- Feed the configfiles table with list of all availage configfiles
+local function searchforconfigfiles()
+ local cnffile = {}
+ recursedir(configdir, cnffile)
+ for k,v in pairs(cnffile) do
+ local configcontent = get_value_from_file(v)
+ if (configcontent) then
+ table.insert(configfiles, v)
+ end
+ end
+end
+searchforconfigfiles()
-- ################################################################################
-- PUBLIC FUNCTIONS
+-- Present some general status
function getstatus()
local status = {}
local version,versionerrtxt = get_version()
@@ -40,3 +114,77 @@ function getstatus()
return status
end
+-- Return config-information
+function getconfig()
+ local config = {}
+ local version,versionerrtxt = get_version()
+ local listenaddr = getopts.getoptsfromfile_onperline(configfile,"IP") or {}
+ config.listen = cfe({
+ name = "listen",
+ label="IP address to listen on",
+ value=listenaddr.IP or "",
+ })
+
+ return config
+end
+
+
+-- ################################################################################
+-- DEBUG INFORMATION (Everything below will be deleted in the future)
+
+function getdebug()
+ local debug = {}
+
+--[[
+ local signs = get_available_signs("prefix") or {}
+ debug.debugprefixes = cfe({
+ name = "debugprefixes",
+ label="Available prefixes",
+ option=signs,
+ type="select",
+ size=table.maxn(signs)+1,
+ })
+
+ local signs = get_available_signs("suffix") or {}
+ debug.debugsuffixes = cfe({
+ name = "debugsuffixes",
+ label="Available suffixes",
+ option=signs,
+ type="select",
+ size=table.maxn(signs)+1,
+ })
+--]]
+ debug.configdir = cfe({
+ name = "configdir",
+ label="configdir",
+ value=configdir,
+ })
+ debug.datafile = cfe({
+ name = "datafile",
+ label="datafile",
+ value=datafile,
+ })
+
+ for k,v in pairs(configfiles) do
+ local cnfcontent
+ fake, cnfcontent = get_value_from_file(v)
+ for kk,vv in pairs(cnfcontent) do
+ table.insert(configitems,vv)
+ end
+ end
+ debug.configitems = cfe({
+ name = "configitems",
+ label="configitems",
+ option=configitems,
+ type="select",
+ })
+
+ debug.configfiles = cfe({
+ name = "configfiles",
+ label="configfiles",
+ option=configfiles,
+ type="select",
+ })
+
+ return debug
+end