1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
--[[
UCI Validation Layer - Validation helper
(c) 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
(c) 2008 Steven Barth <steven@midlink.org>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id$
]]--
module( "luci.uvl.validation", package.seeall )
require("luci.fs")
require("luci.sys")
local ERR = luci.uvl.errors
function _exec( bin, args )
local cmd, output = "", nil
for _, v in ipairs({ bin, unpack(args) }) do
cmd = cmd .. string.format("%q ",v):gsub("([%$`])","\\%1")
end
local tmpfile = "/tmp/uvl" .. luci.sys.uniqueid(8)
local retval = os.execute( cmd .. " 1>" .. tmpfile .. " 2>" .. tmpfile )
if luci.fs.access(tmpfile) then
output = luci.fs.readfile(tmpfile)
luci.fs.unlink(tmpfile)
end
return retval, output
end
function check( self, object )
if object:scheme('validators') then
for _, val in ipairs(object:scheme('validators')) do
local ok, err = false, nil
local args = {
object:scheme('type'),
object.cref[1], object.cref[2], object.cref[3],
object:scheme('datatype'), object:value()
}
if type(val) == "function" then
ok, err = val(unpack(args))
else
ok, err = _exec( val, args )
ok = ( ok == 0 )
end
if not ok then
return false, ERR.SME_ERRVAL(object, {tostring(val), err})
end
end
end
return true, nil
end
|