fix typos in CONFIG_SITE files
[openwrt/svn-archive/openwrt.git] / openwrt / package / webif / files / usr / lib / webif / validate.awk
1 # $1 = type
2 # $2 = variable name
3 # $3 = field name
4 # $4 = options
5 # $5 = value
6 BEGIN {
7 FS="|"
8 output=""
9 }
10
11 {
12 valid_type = 0
13 valid = 1
14 # XXX: weird hack, but it works...
15 n = split($0, param, "|")
16 value = param[5]
17 for (i = 6; i <= n; i++) value = value FS param[i]
18 verr = ""
19 }
20
21 $1 == "int" {
22 valid_type = 1
23 if (value !~ /^[0-9]*$/) { valid = 0; verr = "@TR<<Invalid value>>" }
24 }
25
26 # FIXME: add proper netmask validation
27 ($1 == "ip") || ($1 == "netmask") {
28 valid_type = 1
29 if ((value != "") && (value !~ /^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$/)) valid = 0
30 else {
31 split(value, ipaddr, "\\.")
32 for (i = 1; i <= 4; i++) {
33 if ((ipaddr[i] < 0) || (ipaddr[i] > 255)) valid = 0
34 }
35 }
36 if (valid == 0) verr = "@TR<<Invalid value>>"
37 }
38
39 $1 == "wep" {
40 valid_type = 1
41 if (value !~ /^[0-9A-Fa-f]*$/) {
42 valid = 0
43 verr = "@TR<<Invalid value>>"
44 } else if ((length(value) != 0) && (length(value) != 10) && (length(value) != 26)) {
45 valid = 0
46 verr = "Invalid key length"
47 } else if (value ~ /0$/) {
48 valid = 0
49 verr = "Key must not end with '0'"
50 }
51 }
52
53 $1 == "hostname" {
54 valid_type = 1
55 if (value !~ /^[0-9a-zA-z\.\-]*$/) {
56 valid = 0
57 verr = "@TR<<Invalid value>>"
58 }
59 }
60
61 $1 == "string" {
62 valid_type = 1
63 }
64
65 $1 == "mac" {
66 valid_type = 1
67 if ((value != "") && (value !~ /^[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]$/)) {
68 valid = 0
69 verr = "@TR<<Invalid value>>"
70 }
71 }
72
73 $1 == "port" {
74 valid_type = 1
75 if (value !~ /^[0-9]*$/) {
76 valid = 0
77 verr = "@TR<<Invalid value>>"
78 }
79 }
80
81 $1 == "ports" {
82 valid_type = 1
83 n = split(value ",", ports, ",")
84 for (i = 1; i <= n; i++) {
85 if ((ports[i] !~ /^[0-9]*$/) && (ports[i] !~ /^[0-9][0-9]*-[0-9][0-9]*$/)) {
86 valid = 0
87 verr = "@TR<<Invalid value>>"
88 }
89 }
90 }
91
92 $1 == "wpapsk" {
93 valid_type = 1
94 if (length(value) > 64) {
95 valid = 0
96 verr = "String too long"
97 }
98 if ((length(value) != 0) && (length(value) < 8)) {
99 valid = 0
100 verr = "String too short"
101 }
102 if ((length(value) == 64) && (value ~ /[^0-9a-fA-F]/)) {
103 valid = 0
104 verr = "Invalid hex key"
105 }
106 }
107
108 valid_type != 1 { valid = 0 }
109
110 valid == 1 {
111 n = split($4, options, " ")
112 for (i = 1; (valid == 1) && (i <= n); i++) {
113 if (options[i] == "required") {
114 if (value == "") { valid = 0; verr = "No value entered" }
115 } else if ((options[i] ~ /^min=/) && (value != "")) {
116 min = options[i]
117 sub(/^min=/, "", min)
118 min = int(min)
119 if ($1 == "int") {
120 if (value < min) { valid = 0; verr = "Value too small (minimum: " min ")" }
121 } else if ($1 == "string") {
122 if (length(value) < min) { valid = 0; verr = "Value too small (minimum length: " min ")"}
123 }
124 } else if ((options[i] ~ /^max=/) && (value != "")) {
125 max = options[i]
126 sub(/^max=/, "", max)
127 max = int(max)
128 if ($1 == "int") {
129 if (value > max) { valid = 0; verr = "@TR<<Value too large>> (@TR<<maximum>>: " max ")" }
130 } else if ($1 == "string") {
131 if (length(value) > max) { valid = 0; verr = "@TR<<String too short>> (@TR<<maximum>>: " max ")" }
132 }
133 } else if ((options[i] == "nodots") && ($1 == "hostname")) {
134 if (value ~ /\./) {
135 valid = 0
136 verr = "@TR<<Invalid value>>"
137 }
138 }
139 }
140 }
141
142 valid_type == 1 {
143 if (valid == 1) output = output $2 "=\"" value "\";\n"
144 else error = error "Error in " $3 ": " verr "<br />"
145 }
146
147 END {
148 print output "ERROR=\"" error "\";\n"
149 if (error == "") print "return 0"
150 else print "return 255"
151 }