#!/bin/sh # Shell script for interacting with config files # # Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de> # Copyright (C) 2006,2007 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 . $UCI_ROOT/etc/functions.sh include $UCI_ROOT/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 -a $? -ne 2 ] && { 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 [ lock = "${package##*.}" ] && continue # ignore .lock files 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 $UCI_ROOT/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 } do_validate() { [ "$#" -ne 1 ] && { uci_usage validate exit 1 } uci_validate "$1" || exit "$?" } 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> ... ]";; validate) echo "$0 validate <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 uci_usage validate echo exit 1 ;; esac } if [ $# -eq 0 ] ; then uci_usage exit 0 fi CMD="$1" shift case "$CMD" in set) do_set "$@";; del) do_remove "$@";; rename) do_rename "$@";; get) do_get "$@";; show) do_show "$@";; commit) do_commit "$@";; validate) do_validate "$@";; *) uci_usage;; esac exit 0