summaryrefslogtreecommitdiff
path: root/package/base-files/files/lib/config/validate.sh
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2007-02-26 20:04:04 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2007-02-26 20:04:04 +0000
commit79386b5db780fee3d1469941e640c2cbe2598a5c (patch)
treeacecda110ad48b648a8f3a3666786581034f00e2 /package/base-files/files/lib/config/validate.sh
parentddc24aa87ea2f11859e9e56a64210d5a268dbee8 (diff)
Integrate basic UCI config file validation support
Needs more testing and validation is not enforced yet Code contributed by Fraunhofer Fokus git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6391 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/base-files/files/lib/config/validate.sh')
-rw-r--r--package/base-files/files/lib/config/validate.sh74
1 files changed, 74 insertions, 0 deletions
diff --git a/package/base-files/files/lib/config/validate.sh b/package/base-files/files/lib/config/validate.sh
new file mode 100644
index 0000000000..e16319dade
--- /dev/null
+++ b/package/base-files/files/lib/config/validate.sh
@@ -0,0 +1,74 @@
+# Shell script defining validating configuration macros
+#
+# Copyright (C) 2006 by Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
+# Copyright (C) 2007 by Felix Fietkau <nbd@openwrt.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+validate_spec() {
+ export | grep 'CONFIG_' | cat - "$@" | awk \
+ -f $UCI_ROOT/lib/config/validate_config.awk \
+ -f $UCI_ROOT/lib/config/parse_spec.awk \
+ -f $UCI_ROOT/lib/config/validate_spec.awk
+}
+
+validate_config_cb () {
+ local TYPE
+ local res=
+
+ [ -n "${CONFIG_SECTION}" ] || return 0
+
+ config_get TYPE ${CONFIG_SECTION} TYPE
+ [ -n "$TYPE" ] || return 0
+
+ if type validate_${PACKAGE}_${TYPE} >/dev/null 2>&1; then
+ validate_${PACKAGE}_${TYPE}
+ res="$?"
+ else
+ if [ -f $UCI_ROOT/lib/config/specs/${PACKAGE}.spec ]; then
+ # no special defined, use default one
+ validate_spec $UCI_ROOT/lib/config/specs/${PACKAGE}.spec
+ res="$?"
+ fi
+ fi
+
+ VALIDATE_RES="${VALIDATE_RES:-$res}"
+}
+
+uci_validate() {(
+ PACKAGE="$1"
+ FILE="$2"
+ VALIDATE_RES=
+
+ [ -z "${PACKAGE}" ] && {
+ echo "Error: no package defined"
+ return 1
+ }
+
+ reset_cb
+ config_cb() {
+ validate_config_cb "$@"
+ }
+ unset NO_EXPORT
+ if [ -n "$FILE" ]; then
+ . "$FILE"
+ config
+ else
+ config_load "$1"
+ fi
+
+ return ${VALIDATE_RES:-0}
+)}