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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
--------------------------------------------------
-- Validation Functions for Alpine Linux' Webconf
--------------------------------------------------
module (..., package.seeall)
function is_string ( str )
return (type(str) == "string")
end
function is_boolean ( str )
return (type(str) == "boolean")
end
function is_number ( str )
return (type(str) == "number")
end
--
-- This function validates an ipv4 address.
--
function is_ipv4(ipv4)
local retval = false;
local nums = {};
local iplen = string.len(ipv4);
-- check the ipv4's length
if (iplen < 7 or iplen > 15) then
return false, "Invalid Length"
end
-- NC: Split the string into an array. separate with '.' (dots)
-- ^ beginning of string
-- () capture
-- %. litteral '.' The % neutralizes the . character class.
-- %d+ one or more digits
-- $ end of string
nums = {ipv4:match ("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")}
-- check if all nums are filled
if ( nums[1] == nil or
nums[2] == nil or
nums[3] == nil or
nums[4] == nil) then
-- we have an empty number
return false, "Invalid Format"
end
-- too big?
if (tonumber(nums[1]) > 255 or
tonumber(nums[2]) > 255 or
tonumber(nums[3]) > 255 or
tonumber(nums[4]) > 255) then
-- at least one number is too big
return false, "Invalid Value"
end
return true
end
--
-- This function validates a partial ipv4 address.
--
function is_partial_ipv4(ipv4)
local retval = false;
local nums = {};
-- Check to see if any invalid characters
if not ipv4 or not ipv4:match("^[%d%.]+$") then
return false, "Invalid Format"
end
-- NC: Split the string into an array. separate with '.' (dots)
-- %d+ one or more digits
for num in ipv4:gmatch("%d+") do
nums[#nums+1] = num
-- too big?
if tonumber(num) > 255 then
return false, "Invalid Format"
end
end
-- too many numbers
if #nums > 4 then
return false, "Invalid Format"
end
return true
end
function is_mac(mac)
local tmpmac = string.upper(mac)
if (string.len(tmpmac) ~= 17) then
return false, "Invalid Length"
end
-- check for valid characters
local step = 1;
while (step <= 17) do
if (string.sub(tmpmac, step, step) ~= ":") and
(string.sub(tmpmac, step, step) < "0" or string.sub(tmpmac, step, step) > "9") and
(string.sub(tmpmac, step, step) < "A" or string.sub(tmpmac, step, step) > "F") then
-- we have found an invalid character!
return false, "Invalid Chars"
end
step = step + 1;
end
-- check for valid colon positions
if (string.sub(tmpmac, 3, 3) ~= ":" or
string.sub(tmpmac, 6, 6) ~= ":" or
string.sub(tmpmac, 9, 9) ~= ":" or
string.sub(tmpmac, 12, 12) ~= ":" or
string.sub(tmpmac, 15, 15) ~= ":") then
return false, "Invalid Format"
end
-- check for valid non colon positions
step = 1;
while (step <= 17) do
if ((string.sub(tmpmac, step, step) == ":") and
((step ~= 3) and (step ~= 6) and (step ~= 9) and (step ~= 12) and
(step ~= 15))) then
return false, "Invalid Value"
end
step = step + 1;
end
return true
end
--
-- This function checks if the given input
-- consists of number-chars between 0..9 only
-- and eventually a leading '-'
--
function is_integer(numstr)
-- ^ beginning of string
-- -? one or zero of the char '-'
-- %d+ one or more digits
-- $ end of string
return string.find(numstr, "^-?%d+$") ~= nil
end
--
-- This function checks if the given input
-- consists of number-chars between 0..9 only
-- and if it is within a given range.
--
function is_integer_in_range(numstr, min, max)
return is_integer(numstr)
and tonumber(numstr) >= min
and tonumber(numstr) <= max
end
--
-- This function checks if the given number is an integer
-- and wheter it is between 1 .. 65535
--
function is_port(numstr)
return is_integer_in_range(numstr, 1, 65535)
end
function is_valid_filename ( path, restriction )
if not (path) or ((restriction) and (string.find (path, "^" .. restriction ) == nil or string.find (path, "/", #restriction+2) )) then
return false
end
return true
end
|