191 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |