summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--dhcp-controller.lua32
-rw-r--r--dhcp-model.lua53
3 files changed, 76 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index 2d83fcb..cb6078d 100644
--- a/Makefile
+++ b/Makefile
@@ -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 .. "&lt;new&gt; 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" )