#!/bin/sh # Shell script for interacting with config files # # Copyright (C) 2006 by Fokus Fraunhofer # Copyright (C) 2006 by Felix Fietkau # # 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 [[.]]";; get) echo "$0 get ..