summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--dhcp-controller.lua25
-rw-r--r--dhcp-model.lua92
-rw-r--r--dhcp-settings-html.lsp24
4 files changed, 138 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index cb6078d..90b40f2 100644
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,7 @@ APP_DIST=dhcp-controller.lua \
dhcp-createnet-html.lsp \
dhcp-view-html.lsp \
dhcp-dep-html.lsp \
+ dhcp-settings-html.lsp \
dhcp-model.lua \
dhcp.menu
diff --git a/dhcp-controller.lua b/dhcp-controller.lua
index 0542150..cca9a98 100644
--- a/dhcp-controller.lua
+++ b/dhcp-controller.lua
@@ -49,6 +49,31 @@ dep = function ( self )
return ( cfe ({ msg = msg }) )
end
+settings = function ( self )
+
+ if not self.clientdata.cmd then
+ list_redir(self)
+ end
+
+ local settings = {}
+ local option = { script = ENV["SCRIPT_NAME"],
+ prefix = self.conf.prefix,
+ controller = self.conf.controller,
+ action = self.conf.action,
+ extra = ""
+ }
+
+ if self.clientdata.cmd == "update" then
+ tmp = self.clientdata
+ settings = self.model.create_new_settings( tmp.defleasetime, tmp.maxleasetime, tmp.domainname )
+ errcode, settings = self.model.update_settings( settings )
+ return ( cfe ({ option = option, value = settings, errcode = errcode }))
+ else
+ settings = self.model.read_settings()
+ return ( cfe ({ option = option, value = settings, errcode = { msg = "", fields={} }}) )
+ end
+end
+
editnet = function ( self )
if not self.clientdata.cmd then
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
diff --git a/dhcp-settings-html.lsp b/dhcp-settings-html.lsp
new file mode 100644
index 0000000..73b377d
--- /dev/null
+++ b/dhcp-settings-html.lsp
@@ -0,0 +1,24 @@
+<?
+ local form = ...
+ local option = form.option
+ local settings = form.value
+ local errcode = form.errcode
+?>
+<h1>Global Settings</h1>
+
+<?
+ if #errcode.msg > 0 then
+ io.write("<pre style=\"color: #ff2020\">" .. errcode.msg .. "</pre><br>")
+ end
+?>
+
+<form action="<? io.write(option.script .. option.prefix ..
+ option.controller .. "/" .. option.action .. option.extra) ?>" method="POST">
+<table>
+ <tr><td><nobr>Default Lease Time:</nobr></td><td><input type="text" name="defleasetime" value="<? io.write(settings.defleasetime.value) ?>"></td></tr>
+ <tr><td><nobr>Maximum Lease Time:</nobr></td><td><input type="text" name="maxleasetime" value="<? io.write(settings.maxleasetime.value) ?>"></td></tr>
+ <tr><td><nobr>Domain Name:</nobr></td><td><input type="text" name="domainname" value="<? io.write(settings.domainname.value) ?>"></td></tr>
+ <tr><td></td><td><input type=submit name=cmd value="update" style="width:100px"></form><form action="<? io.write(option.script .. option.prefix .. option.controller .. "/home") ?> method="POST">
+<input type=submit name="cmd" value="back" style="width:100px"></form></td></tr>
+</table>
+