rename default/ to files/
[openwrt/svn-archive/archive.git] / package / base-files / files / bin / uci
diff --git a/package/base-files/files/bin/uci b/package/base-files/files/bin/uci
new file mode 100755 (executable)
index 0000000..9b50380
--- /dev/null
@@ -0,0 +1,178 @@
+#!/bin/sh
+# Shell script for interacting with config files
+#
+# Copyright (C) 2006 by Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
+# Copyright (C) 2006 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
+
+. /etc/functions.sh
+include /lib/config
+
+SEP="[^0-9A-Za-z_]"
+
+do_get() {
+       local PACKAGE
+       local CONFIG
+       local OPTION
+       local DUMMY
+
+       strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY
+
+       [ $? -ne 3 ] && {
+               uci_usage get
+               exit 1
+       }
+
+       uci_load "$PACKAGE"
+       config_get "$CONFIG" "$OPTION"
+}
+
+do_set() {
+       local PACKAGE
+       local CONFIG
+       local OPTION
+       local VALUE
+
+       strtok "$1" PACKAGE . CONFIG = VALUE
+       [ $? -ne 3 ] && {
+               uci_usage set
+               exit 1
+       }
+       
+       strtok "$CONFIG" CONFIG . OPTION
+       
+       if [ $? -eq 1 ]; then
+               uci_add "$PACKAGE" "$VALUE" "$CONFIG"
+       else
+               uci_set "$PACKAGE" "$CONFIG" "$OPTION" "$VALUE"
+       fi
+}
+
+do_rename() {
+       [ $# -ne 3 ] && {
+               uci_usage rename
+               exit 1
+       }
+       uci_rename "$@"
+}
+
+do_remove() {
+       local PACKAGE
+       local CONFIG
+       local OPTION
+       local DUMMY
+
+       strtok "$*" PACKAGE . CONFIG . OPTION $SEP DUMMY
+       [ $? -ne 3 -a $? -ne 2 ] && {
+               uci_usage rename
+               exit 1
+       }
+       uci_remove "$PACKAGE" "$CONFIG" ${OPTION:+"$OPTION"}
+}
+
+do_commit() {
+       local PACKAGE="$1"
+       for package in ${PACKAGE:-$(cd /tmp/.uci; ls)}; do 
+               uci_commit "$package"
+       done
+}
+
+do_show() {
+       local PACKAGE
+       local CONFIG
+       local DUMMY
+
+       strtok "$*" PACKAGE . CONFIG $SEP DUMMY
+       [ $? -gt 2 ] && {
+               uci_usage show
+               exit 1
+       }
+       
+       for package in ${PACKAGE:-$(cd /etc/config; ls)}; do
+               SECTION=""
+       
+               config_cb() {
+                       if [ -z "$CONFIG" -o "$CONFIG" = "$2" ]; then
+                               append SECTION "$2"
+                               option_cb() {
+                                       append "${CONFIG_SECTION}_VARS" "$1"
+                               }
+                       else
+                               option_cb() {
+                                       return 0
+                               }
+                       fi
+               }
+                       
+               uci_load "$package"
+       
+               for section in $SECTION; do
+                       config_get type "$section" TYPE
+                       [ -z "$type" ] && continue
+                       echo "$package.$section=$type"
+                       eval "VARS=\"\${${section}_VARS}\""
+                       for var in $VARS; do
+                               config_get val "$section" "$var"
+                               [ -n "$val" ] && {
+                                       echo "$package.$section.$var=$val"
+                                       config_set "$section" "$var" ""
+                               }
+                       done
+                       config_set "$section" TYPE ""
+               done
+       done
+}
+
+uci_usage() {
+       case "$1" in
+               show) echo "$0 show [<package>[.<config>]]";;
+               get) echo "$0 get <package>.<config>.<option>";;
+               set) echo "$0 set <package>.<config>[.<option>]=<value>";;
+               del) echo "$0 del <package>.<config>[.<option>]";;
+               rename) echo "$0 rename <package> <config> <name>";;
+               commit) echo "$0 commit [<package> ... ]";;
+               *) 
+                       echo "Syntax: $0 <command> <arguments...>"
+                       echo
+                       uci_usage show
+                       uci_usage get
+                       uci_usage set
+                       uci_usage del
+                       uci_usage rename
+                       uci_usage commit
+                       echo
+                       exit 1
+               ;;
+       esac
+}
+
+if [ $# -eq 0 ] ; then
+       uci_usage
+       exit 0
+fi
+
+local CMD="$1"
+shift
+case "$CMD" in
+       set) do_set "$@";;
+       del) do_remove "$@";;
+       rename) do_rename "$@";;
+       get) do_get "$@";;
+       show) do_show "$@";;
+       commit) do_commit "$@";;
+       *) uci_usage;;
+esac
+exit 0