summaryrefslogtreecommitdiffstats
path: root/dhcp-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dhcp-model.lua')
-rw-r--r--dhcp-model.lua92
1 files changed, 88 insertions, 4 deletions
diff --git a/dhcp-model.lua b/dhcp-model.lua
index 90374a9..544f1b4 100644
--- a/dhcp-model.lua
+++ b/dhcp-model.lua
@@ -84,6 +84,24 @@ subnet_read = function( name )
return net
end
+read_settings = function()
+ local filename = cfgdir .. "globalsettings.conf"
+ local settings = create_new_settings( nil, nil, nil )
+ if file_exists( filename ) then
+ for line in io.lines(filename) do
+ if (string.sub(line, 1, 15) == "def-lease-time:") then
+ settings.defleasetime.value = string.sub(line, 17)
+ elseif (string.sub(line, 1, 15) == "max-lease-time:") then
+ settings.maxleasetime.value = string.sub(line, 17)
+ elseif (string.sub(line, 1, 12) == "domain-name:") then
+ settings.domainname.value = string.sub(line, 14)
+ end
+ end
+ end
+
+ return settings
+end
+
subnet_write = function( net )
msg, fields = validate_network( net )
if #msg > 0 then
@@ -106,8 +124,23 @@ subnet_write = function( net )
return cfe({ msg = "", fields = {}}), net
end
+update_settings = function ( settings )
+
+ msg, fields = validate_settings ( settings )
+ if #msg > 0 then
+ return cfe({ msg = msg, fields = fields }), settings
+ end
+ local filename = cfgdir .. "globalsettings.conf"
+ local file = io.open( filename, "w+" )
+ file:write( "def-lease-time: " .. settings.defleasetime.value .. "\n" )
+ file:write( "max-lease-time: " .. settings.maxleasetime.value .. "\n" )
+ file:write( "domain-name: " .. settings.domainname.value .. "\n" )
+ return cfe({ msg = "", fields = {}}), settings
+end
+
+
subnet_create = function( net )
- if file_exists( net.name.value ) then
+ if file_exists( cfgdir .. net.name.value .. ".subnet" ) then
return cfe({ msg = "This subnet already exists!", fields = {}}), net
end
retcode, net = subnet_write( net )
@@ -123,7 +156,7 @@ _tonumber = function( value )
end
validate_network = function( net )
- fields = { "none" }
+ fields = {}
msg = ""
if #net.name.value < 4 then
table.insert(fields, "name")
@@ -181,9 +214,8 @@ end
file_exists = function( filename )
retval = false
- fn = cfgdir .. net.name.value .. ".subnet"
lpos = require "posix"
- ptr, msg, code = lpos.access(fn)
+ ptr, msg, code = lpos.access( filename )
if ptr ~= nil then
retval = true
end
@@ -296,4 +328,56 @@ create_new_net = function( name, defleasetime, maxleasetime, gateway, domainname
return net
end
+
+create_new_settings = function( defleasetime, maxleasetime, domainname )
+ settings = { domainname = { label="Domainname", type="text", value=nonil(domainname) },
+ defleasetime = { label="Default Lease Time", type="text", value=nonil(defleasetime) },
+ maxleasetime = { label="Maximum Lease Time", type="text", value=nonil(maxleasetime) }
+ }
+ return settings
+end
+
+validate_settings = function ( settings )
+
+ msg = ""
+ fields = {}
+
+ if not validator.is_integer_in_range(_tonumber(settings.defleasetime.value), 1800, 86400) then
+ msg = msg .. "Default Lease Time: Out of range 1800 < x < 86400 or not integer\n"
+ table.insert( fields, "defleasetime" )
+ end
+ if not validator.is_integer_in_range(_tonumber(settings.maxleasetime.value), 1800, 86400) then
+ msg = msg .. "Maximum Lease Time: Out of range 1800 < x < 86400 or not integer\n"
+ table.insert( fields, "maxleasetime" )
+ end
+ if not is_valid_hostname( settings.domainname.value ) then
+ if #settings.domainname.value > 0 then
+ msg = msg .. "Invalid domainname: valid chars are 'a..z', '0..9', '.', '-'\n"
+ table.insert( fields, "domainname" )
+ end
+ end
+
+ return msg, fields
+end
+
+is_valid_hostname = function ( hostname )
+
+ local retval = true
+
+ name = string.lower( hostname )
+ lap = 1
+ while lap <= #name do
+ chr = string.sub(name, lap, lap)
+ if (chr >= "a" and chr <= "z") or
+ (chr >= "0" and chr <= "9") or
+ (chr == ".") or (chr == "-") then
+
+ else
+ retval = false
+ end
+ lap = lap + 1
+ end
+
+ return retval
+end