diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | dhcp-controller.lua | 32 | ||||
-rw-r--r-- | dhcp-model.lua | 53 |
3 files changed, 76 insertions, 10 deletions
@@ -7,6 +7,7 @@ APP_DIST=dhcp-controller.lua \ dhcp-home-html.lsp \ dhcp-createnet-html.lsp \ dhcp-view-html.lsp \ + dhcp-dep-html.lsp \ dhcp-model.lua \ dhcp.menu diff --git a/dhcp-controller.lua b/dhcp-controller.lua index 9857fa4..0542150 100644 --- a/dhcp-controller.lua +++ b/dhcp-controller.lua @@ -33,6 +33,22 @@ mvc.post_exec = function ( self ) return pvt.parent_on_exec() end +dep = function ( self ) + + -- do the dependancy check + msg = self.model.dep_check() + + -- make sure nobody accidentally calls this action + if msg == nil then + self.conf.type = "redir" + self.conf.action = "home" + error (self.conf) + end + + -- go ahead + return ( cfe ({ msg = msg }) ) +end + editnet = function ( self ) if not self.clientdata.cmd then @@ -88,12 +104,26 @@ createnet = function ( self ) tmp.gateway, tmp.domainname, tmp.dnssrv1, tmp.dnssrv2, tmp.subnet, tmp.netmask, tmp.leaserangestart, tmp.leaserangeend, tmp.wpad ) errcode, net = self.model.subnet_create( net ) - return ( cfe({ option = option, value = net, errcode = errcode }) ) + if #errcode.msg == 0 then + self.conf.type = "redir" + self.conf.action = "home" + error (self.conf) + else + return ( cfe({ option = option, value = net, errcode = errcode }) ) + end end end home = function ( self ) + -- dependancy check for neccessary libs/packages et al. + msg = self.model.dep_check() + if msg ~= nil then + self.conf.type = "redir" + self.conf.action = "dep" + error(self.conf) + end + local srvctrl = "" if self.clientdata.srvcmd then srvcmd = self.clientdata.srvcmd diff --git a/dhcp-model.lua b/dhcp-model.lua index 3122ee5..45ca533 100644 --- a/dhcp-model.lua +++ b/dhcp-model.lua @@ -8,6 +8,37 @@ require("validator") local subnet = { } local cfgdir = "/etc/dhcp/" +dep_check = function () + + icode = 0 + retval = {} + + lpos = require "posix" + ptr, msg, code = lpos.access("/etc/dhcp") + if ptr == nil then + table.insert(retval, "/etc/dhcp") + icode = icode + 1 + end + + ptr, msg, code = lpos.access("/usr/sbin/dhcpd") + if ptr == nil then + table.insert(retval, "/usr/sbin/dhcpd") + icode = icode + 1 + end + + ptr, msg, code = lpos.access("/etc/init.d/dhcpd") + if ptr == nil then + table.insert(retval, "/etc/init.d/dhcpd") + icode = icode + 1 + end + + if icode == 0 then + retval = nil + end + + return retval +end + subnet_read = function( name ) local filename = cfgdir .. name .. ".subnet" local net = { name = cfe({ type="message", value=name, label="Name" }), @@ -98,14 +129,18 @@ validate_network = function( net ) table.insert(fields, "name") msg = msg .. "Minimum network name length is 4 characters!\n" end --- if not validator.is_integer_in_range(_tonumber(net.defleasetime.value), 1800, 86400) then --- table.insert(fields, "defleasetime") --- msg = msg .. "Default-Lease-Time must be: 1800 < x < 86400\n" --- end --- if not validator.is_integer_in_range(_tonumber(net.maxleasetime.value), 1800, 86400) then --- table.insert(fields, "maxleasetime") --- msg = msg .. "Maximum-Lease-Time must be: 1800 < x < 86400\n" --- end + if net.name.value == "<new>" then + table.insert(fields, "name") + msg = msg .. "<new> is not a valid network name!\n" + end + if not validator.is_integer_in_range(_tonumber(net.defleasetime.value), 1800, 86400) then + table.insert(fields, "defleasetime") + msg = msg .. "Default-Lease-Time must be: 1800 < x < 86400\n" + end + if not validator.is_integer_in_range(_tonumber(net.maxleasetime.value), 1800, 86400) then + table.insert(fields, "maxleasetime") + msg = msg .. "Maximum-Lease-Time must be: 1800 < x < 86400\n" + end if not validator.is_ipv4(net.gateway.value) then table.insert(fields, "gateway") msg = msg .. "Gateway: invalid IPv4 address!\n" @@ -207,7 +242,7 @@ service_control = function ( command ) local line = "" local file = io.popen( "/etc/init.d/dhcpd " .. command ) if file ~= nil then - line = file:read( "*l" ) + line = file:read( "*a" ) while line ~= nil do retval = retval .. "\n" .. line line = file:read( "*l" ) |