All pastes #756840 Raw Edit

base-files-uci

public diff v1 · immutable
#756840 ·published 2007-10-31 19:44 UTC
rendered paste body
diff -urN package.old/base-files-uci/Config.in package.new/base-files-uci/Config.in--- package.old/base-files-uci/Config.in	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/Config.in	2007-10-31 19:37:26.000000000 +0100@@ -0,0 +1,5 @@+config BR2_PACKAGE_BASE_FILES_UCI+	tristate "uci - UCI support files"+	default m if CONFIG_DEVEL+	help+	  UCI support file for packages backported from Kamikaze.diff -urN package.old/base-files-uci/files/bin/uci package.new/base-files-uci/files/bin/uci--- package.old/base-files-uci/files/bin/uci	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/bin/uci	2007-06-26 17:45:57.000000000 +0200@@ -0,0 +1,182 @@+#!/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++. /etc/functions.sh+[ -f "/etc/functions_ex.sh" ] && {+. /etc/functions_ex.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 -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 /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 0diff -urN package.old/base-files-uci/files/etc/functions.new package.new/base-files-uci/files/etc/functions.new--- package.old/base-files-uci/files/etc/functions.new	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/etc/functions.new	2007-06-26 17:46:00.000000000 +0200@@ -0,0 +1,168 @@+#!/bin/sh+# Copyright (C) 2006 OpenWrt.org+# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>++. /lib/config/uci-depends.sh++alias debug=${DEBUG:-:}++# valid interface?+if_valid () (+  ifconfig "$1" >&- 2>&- ||+  [ "${1%%[0-9]}" = "br" ] ||+  {+    [ "${1%%[0-9]*}" = "vlan" ] && ( +      i=${1#vlan}+      hwname=$(nvram get vlan${i}hwname)+      hwaddr=$(nvram get ${hwname}macaddr)+      [ -z "$hwaddr" ] && return 1++      vif=$(ifconfig -a | awk '/^eth.*'$hwaddr'/ {print $1; exit}' IGNORECASE=1)+      debug "# vlan$i => $vif"+	  [ -n "$vif" ] || vif=$(ifconfig -a | awk '/^eth'${hw##et}'/ {print $1; exit}' IGNORECASE=1)++      $DEBUG ifconfig $vif up+      $DEBUG vconfig add $vif $i 2>&-+    )+  } ||+  { debug "# missing interface '$1' ignored"; false; }+)++do_ifup() {+	ifproto="$1"+	iftype="$2"+	if="$(nvram get ${iftype}_ifname)"+	[ "${if%%[0-9]}" = "ppp" ] && if="$(nvram get ${iftype}_device)"+	+	pidfile=/var/run/${if}.pid+	[ -f $pidfile ] && $DEBUG kill $(cat $pidfile)++	case "$ifproto" in+	static)+		ip=$(nvram get ${iftype}_ipaddr)+		netmask=$(nvram get ${iftype}_netmask)+		gateway=$(nvram get ${iftype}_gateway)+		mtu=$(nvram get ${iftype}_mtu)+		static_route=$(nvram get ${iftype}_static_route)++		$DEBUG ifconfig $if $ip ${netmask:+netmask $netmask} ${mtu:+mtu $(($mtu))} broadcast + up+		${gateway:+$DEBUG route add default gw $gateway}++		[ -f /tmp/resolv.conf.auto ] || {+			debug "# --- creating /tmp/resolv.conf.auto ---"+			for dns in $(nvram get ${iftype}_dns); do+				echo "nameserver $dns" >> /tmp/resolv.conf.auto+			done+		}+		+		[ -n "$static_route" ] && {+			for route in $static_route; do {+			eval "set $(echo $route | sed 's/:/ /g')"+				if [ "$2" = "0.0.0.0" ]; then+					opt="-host"+				fi+				$DEBUG route add ${opt:-"-net"} $1 netmask $2 gw $3 metric $4 +				unset opt+			} done+		}++		env -i ACTION="ifup" INTERFACE="${iftype}" PROTO=static /sbin/hotplug "iface" &+	;;+	dhcp*)+		DHCP_IP=$(nvram get ${iftype}_ipaddr)+		DHCP_NETMASK=$(nvram get ${iftype}_netmask)+		mtu=$(nvram get ${iftype}_mtu)+		$DEBUG ifconfig $if $DHCP_IP ${DHCP_NETMASK:+netmask $DHCP_NETMASK} ${mtu:+mtu $(($mtu))} broadcast + up++		DHCP_ARGS="-i $if ${DHCP_IP:+-r $DHCP_IP} -b -p $pidfile"+		DHCP_HOSTNAME=$(nvram get ${iftype}_hostname)+		DHCP_HOSTNAME=${DHCP_HOSTNAME%%.*}+		[ -z $DHCP_HOSTNAME ] || DHCP_ARGS="$DHCP_ARGS -H $DHCP_HOSTNAME"+		[ "$(nvram get ${iftype}_proto)" = "pptp" ] && DHCP_ARGS="$DHCP_ARGS -n -q" || DHCP_ARGS="$DHCP_ARGS -R &"+		[ -r $pidfile ] && oldpid=$(cat $pidfile 2>&-)+		${DEBUG:-eval} "udhcpc $DHCP_ARGS"+		[ -n "$oldpid" ] && pidof udhcpc | grep "$oldpid" >&- 2>&- && {+			sleep 1+			kill -9 $oldpid+		}+		# hotplug events are handled by /usr/share/udhcpc/default.script+	;;+	none|"")+	;;+	*)+		[ -x "/sbin/ifup.$ifproto" ] && { $DEBUG /sbin/ifup.$ifproto ${iftype}; exit; }+		echo "### ifup ${iftype}: ignored ${iftype}_proto=\"$ifproto\" (not supported)"+	;;+	esac+}++load_modules() {+	cd /etc/modules.d+	sed 's/^[^#]/insmod &/' $* | ash 2>&- || :+}++include() {+	local file+	+	for file in $(ls $1/*.sh 2>/dev/null); do+		. $file+	done+}++find_mtd_part() {+	local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"+	+	PART="${PART##mtd}"+	echo "${PART:+/dev/mtdblock/$PART}"+}++strtok() { # <string> { <variable> [<separator>] ... }+	local tmp+	local val="$1"+	local count=0++	shift++	while [ $# -gt 1 ]; do+		tmp="${val%%$2*}"++		[ "$tmp" = "$val" ] && break++		val="${val#$tmp$2}"++		export -n "$1=$tmp"; count=$((count+1))+		shift 2+	done++	if [ $# -gt 0 -a "$val" ]; then+		export -n "$1=$val"; count=$((count+1))+	fi++	return $count+}++set_led() {+	local led="$1"+	local state="$2"+	[ -f "/proc/diag/led/$1" ] && echo "$state" > "/proc/diag/led/$1"+}++set_state() {+	case "$1" in+		preinit)+			set_led dmz 1+			set_led diag 1+			set_led power 0+		;;+		failsafe)+			set_led diag f+			set_led power f+			set_led dmz f+		;;+		done)+			set_led dmz 0+			set_led diag 0+			set_led power 1+		;;+	esac+}diff -urN package.old/base-files-uci/files/lib/config/uci.awk package.new/base-files-uci/files/lib/config/uci.awk--- package.old/base-files-uci/files/lib/config/uci.awk	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/lib/config/uci.awk	2007-06-26 17:45:56.000000000 +0200@@ -0,0 +1,186 @@+# Configuration update functions - AWK API+#+# 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++# parameters: 1+function config_load(package, var) {+	while (("/bin/ash -c '. /etc/functions.sh; unset NO_EXPORT; config_load \""package"\"; env | grep \"^CONFIG_\"'" | getline) == 1) {+		sub("^CONFIG_", "")+		if (match($0, "=") == 0) {+			if (var != "") CONFIG[var] = CONFIG[var] "\n" $0+			next+		}+		var=substr($0, 1, RSTART-1)+		CONFIG[var] = substr($0, RSTART+1, length($0) - RSTART)+	}+}++# parameters: 2+function config_get(package, option) {+	return CONFIG[package "_" option]+}++# parameters: 3+function config_get_bool(package, option, default, var) {+	var = config_get(package, option);+	if ((var == "enabled") || (var == "1") || (var == "on")) return 1+	if ((var == "disabled") || (var == "0") || (var == "off")) return 1+	return (var && var != "0" ? 1 : 0)+}+++function read_file(filename,  result) {+	while ((getline <filename) == 1) {+		result = result $0 "\n"+	}+	gsub(/\n*$/, "", result)+	return result+}++function uci_cmd2option(str,  tmp) {+	if (match(str,"=")!=0) {+		res = "\toption " substr(str,1,RSTART-1) "\t'" substr(str,RSTART+1) "'"+	} else {+		res= ""+	}+	return res+}++function uci_cmd2config(atype,  aname) {+	return "config \"" atype "\" \"" aname "\""+}++function uci_update_config(cfg, update,  \+  lines, line, l, n, i, i2, section, scnt, remove, tmp, aidx, rest) {+	scnt = 1+	linecnt=split(cfg "\n", lines, "\n")++	cfg = ""+	for (n = 1; n < linecnt; n++) {+		# stupid parser for quoted arguments (e.g. for the type string).+		# not to be used to gather variable values (backslash escaping doesn't work)+		line = lines[n]+		gsub(/^[ \t]*/, "", line)+		gsub(/#.*$/, "", line)+		i2 = 1+		delete l+		rest = line+        	while (length(rest)) {+			if (match(rest, /[ \t\"]+/)) {+				if (RSTART>1) {+					l[i2] = substr(rest,1,RSTART-1)+					i2+++				}+				aidx=index(rest,"\"")+				if (aidx>=RSTART && aidx<=RSTART+RLENGTH) {+					rest=substr(rest,aidx+1)+					# find the end of the string+					match(rest,/\"/)+					l[i2]=substr(rest,1,RSTART-1)+					i2+++				}+				rest=substr(rest,RSTART+RLENGTH)+			} else {+				l[i2] = rest+				i2+++				rest = ""+			}+		}+		line = lines[n]+		+		# when a command wants to set a config value for the current+		# section and a blank line is encountered before an option with+		# the same name, insert it here to maintain some coherency between+		# manually and automatically created option lines+		# if an option with the same name appears after this point, simply+		# ignore it, because it is already set.+		if ((section != "") && (l[1] != "option")) {+			if (line ~ /^[ \t]*$/) {+				if (update ~ "^" section "\\.") {+					gsub("^" section ".", "", update)+					cfg = cfg uci_cmd2option(update) "\n"+					gsub(/=.*$/, "", update)+					update = "-" section "." update+				}+			}+		}++		if (l[1] == "config") {+			# look for all unset values+			if (section != "") {+				flag=0+				if (update ~ "^" section "\\.") {+					flag=1+					gsub("^" section ".", "", update)+					cfg = cfg uci_cmd2option(update) "\n"+					+					update = "-" section "." update+				} +				if (flag!=0) cfg = cfg "\n"+			}+			+			remove = ""+			section = l[3]+			if (!length(section)) {+				section = "cfg" scnt+			}	+			scnt+++			if (update == "-" section) {+				remove = "section"+				update = ""+			} else if (update ~ "^@" section "=") {+				update = ""+			} else if (update ~ "^&" section "=") {+				gsub("^&" section "=", "", update)+				line = uci_cmd2config(l[2],update) +				update = ""+			}+		}+		if (remove == "option") remove = ""+		if (l[1] == "option") {+			if (update ~ "^-" section "\\." l[2] "$") remove = "option"+			# if a supplied config value already exists, replace the whole line+			if (match(update, "^" section "." l[2] "=")) {+				gsub("^" section ".", "", update)+				line = uci_cmd2option(update)+				update = ""+			}+		}+		if (remove == "") cfg = cfg line "\n"+	}+	+	# any new options for the last section??+	if (section != "") {+		if (update ~ "^" section "\\.") {+			gsub("^" section ".", "", update)+			cfg = cfg uci_cmd2option(update) "\n"++			update = "-" section "." update+		} +	}++	if (update ~ "^@") {+		# new section+		section = stype = substr(update,2)+		gsub(/=.*$/,"",section)+		gsub(/^.*=/,"",stype)+		cfg = cfg "\nconfig \"" stype "\" \"" section "\"\n"+	}++	return cfg+}diff -urN package.old/base-files-uci/files/lib/config/uci-depends.new package.new/base-files-uci/files/lib/config/uci-depends.new--- package.old/base-files-uci/files/lib/config/uci-depends.new	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/lib/config/uci-depends.new	2007-09-19 17:26:47.000000000 +0200@@ -0,0 +1,197 @@+#!/bin/sh+# Copyright (C) 2006 OpenWrt.org+# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>+#+# newline (used by /lib/config/uci.sh)+N="+"+_C=0++# perform export -n only if available+_EXPORT_N_OPTION="-n"+ntest=$(export -n 2>&1)+if echo "$ntest" | grep -iq "Illegal option -n"; then	+	_EXPORT_N_OPTION=""+fi++append() {+	local var="$1"+	local value="$2"+	local sep="${3:- }"+	+	eval "export $_EXPORT_N_OPTION -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""+}++reset_cb() {+	config_cb() { return 0; }+	option_cb() { return 0; }+}+reset_cb++config () {+	local cfgtype="$1"+	local name="$2"+	+	CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))+	name="${name:-cfg$CONFIG_NUM_SECTIONS}"+	append CONFIG_SECTIONS "$name"+	config_cb "$cfgtype" "$name"+	CONFIG_SECTION="$name"+	export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"+}++option () {+	local varname="$1"; shift+	local value="$*"+	+	export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_${varname}=$value"+	option_cb "$varname" "$*"+}++config_rename() {+	local OLD="$1"+	local NEW="$2"+	local oldvar+	local newvar+	+	[ "$OLD" -a "$NEW" ] || return+	for oldvar in `set | grep ^CONFIG_${OLD}_ | \+		sed -e 's/\(.*\)=.*$/\1/'` ; do+		newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}"+		eval "export $_EXPORT_N_OPTION \"$newvar=\${$oldvar}\""+		unset "$oldvar"+	done+	CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")"+	+	[ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW"+}++config_unset() {+	config_set "$1" "$2" ""+}++config_clear() {+	local SECTION="$1"+	local oldvar+	+	CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , ,")"+	CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}"++	for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \+		sed -e 's/\(.*\)=.*$/\1/'` ; do +		unset $oldvar +	done+}++config_load() {+	local file="/etc/config/$1"+	_C=0+	CONFIG_SECTIONS=+	CONFIG_NUM_SECTIONS=0+	CONFIG_SECTION=+	+	[ -e "$file" ] && {+		. $file+	} || return 1+	+	${CONFIG_SECTION:+config_cb}+}++config_get() {+	case "$3" in+		"") eval "echo \"\${CONFIG_${1}_${2}}\"";;+		*)  eval "export $_EXPORT_N_OPTION -- \"$1=\${CONFIG_${2}_${3}}\"";;+	esac+}++# config_get_bool <variable> <section> <option> [<default>]+config_get_bool() {+	local _tmp+	config_get "_tmp" "$2" "$3"+	case "$_tmp" in+		1|on|true|enabled) export ${NO_EXPORT:+-n} "$1=1";;+		0|off|false|disabled) export ${NO_EXPORT:+-n} "$1=0";;+		*) eval "$1=${4:-0}";;+	esac+}++config_set() {+	local section="$1"+	local option="$2"+	local value="$3"+	local old_section="$CONFIG_SECTION"++	CONFIG_SECTION="$section"+	option "$option" "$value"+	CONFIG_SECTION="$old_section"+}++config_foreach() {+	local function="$1"+	local type="$2"+	local section cfgtype+	+	[ -z "$CONFIG_SECTIONS" ] && return 0+	for section in ${CONFIG_SECTIONS}; do+		config_get cfgtype "$section" TYPE+		[ -n "$type" -a "$cfgtype" != "$type" ] && continue+		eval "$function \"\$section\""+	done+}++load_modules() {+	cd /etc/modules.d+	sed 's/^[^#]/insmod &/' $* | ash 2>&- || :+}++include() {+	local file+	+	for file in $(ls $1/*.sh 2>/dev/null); do+		. $file+	done+}++find_mtd_part() {+	local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"+	local PREFIX=/dev/mtdblock+	+	PART="${PART##mtd}"+	[ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/+	echo "${PART:+$PREFIX$PART}"+}++strtok() { # <string> { <variable> [<separator>] ... }+	local tmp+	local val="$1"+	local count=0++	shift++	while [ $# -gt 1 ]; do+		tmp="${val%%$2*}"++		[ "$tmp" = "$val" ] && break++		val="${val#$tmp$2}"++                export $_EXPORT_N_OPTION "$1=$tmp"; count=$((count+1))+		shift 2+	done++	if [ $# -gt 0 -a "$val" ]; then+                export $_EXPORT_N_OPTION "$1=$val"; count=$((count+1))+	fi++	return $count+}+++jffs2_mark_erase() {+	local part="$(find_mtd_part "$1")"+	[ -z "$part" ] && {+		echo Partition not found.+		return 1+	}+	echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1"+}diff -urN package.old/base-files-uci/files/lib/config/uci.sh package.new/base-files-uci/files/lib/config/uci.sh--- package.old/base-files-uci/files/lib/config/uci.sh	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/files/lib/config/uci.sh	2007-06-26 17:45:56.000000000 +0200@@ -0,0 +1,160 @@+#!/bin/sh+# Shell script defining macros for manipulating 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_load() {+	local PACKAGE="$1"+	config_load "$PACKAGE"+	local PACKAGE_BASE="$(basename "$PACKAGE")"+	[ -f "/tmp/.uci/${PACKAGE_BASE}" ] && {+		. "/tmp/.uci/${PACKAGE_BASE}" 2>/dev/null >/dev/null+		config_cb+	}+}++uci_apply_defaults() {(+	cd /etc/uci-defaults || return 0+	files="$(ls)"+	[ -z "$files" ] && return 0+	mkdir -p /tmp/.uci+	for file in $files; do+		( . "./$(basename $file)" ) && rm -f "$file"+	done+	uci commit+)}++uci_call_awk() {+	local CMD="$*"+	awk -f $UCI_ROOT/lib/config/uci.awk -f - <<EOF+BEGIN {+	$CMD+}+EOF+}++uci_do_update() {+	local FILENAME="$1"+	local UPDATE="$2"+	uci_call_awk "+	config = read_file(\"$FILENAME\")+	$UPDATE+	print config+"+}++uci_add_update() {+	local PACKAGE="$1"+	local UPDATE="$2"+	local PACKAGE_BASE="$(basename "$PACKAGE")"+	+	# FIXME: add locking?+	mkdir -p "/tmp/.uci"+	echo "$UPDATE" >> "/tmp/.uci/${PACKAGE_BASE}"+}++uci_set() {+	local PACKAGE="$1"+	local CONFIG="$2"+	local OPTION="$3"+	local VALUE="$4"++	( # spawn a subshell so you don't mess up the current environment+		uci_load "$PACKAGE"+		config_get OLDVAL "$CONFIG" "$OPTION"+		if [ "$OLDVAL" != "$VALUE" ]; then+			config_get type "$CONFIG" TYPE+			[ -z "$type" ]+		fi+	) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"+}++uci_add() {+	local PACKAGE="$1"+	local TYPE="$2"+	local CONFIG="$3"++	uci_add_update "$PACKAGE" "config '$TYPE' '$CONFIG'"+}++uci_rename() {+	local PACKAGE="$1"+	local CONFIG="$2"+	local VALUE="$3"++	uci_add_update "$PACKAGE" "config_rename '$CONFIG' '$VALUE'"+}++uci_remove() {+	local PACKAGE="$1"+	local CONFIG="$2"+	local OPTION="$3"++	if [ -z "$OPTION" ]; then+		uci_add_update "$PACKAGE" "config_clear '$CONFIG'"+	else+		uci_add_update "$PACKAGE" "config_unset '$CONFIG' '$OPTION'"+	fi+}++uci_commit() {+	local PACKAGE="$1"+	local PACKAGE_BASE="$(basename "$PACKAGE")"++	mkdir -p /tmp/.uci+	LOCK=`which lock` || LOCK=:+	$LOCK "/tmp/.uci/$PACKAGE_BASE.lock"+	[ -f "/tmp/.uci/$PACKAGE_BASE" ] && (+		updatestr=""+		+		# replace handlers+		config() {+			append updatestr "config = uci_update_config(config, \"@$2=$1\")" "$N"+		}+		option() {+			append updatestr "config = uci_update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"+		}+		config_rename() {+			append updatestr "config = uci_update_config(config, \"&$1=$2\")" "$N"+		}+		config_unset() {+			append updatestr "config = uci_update_config(config, \"-$1.$2\")" "$N"+		}+		config_clear() {+			append updatestr "config = uci_update_config(config, \"-$1\")" "$N"+		}+		+		. "/tmp/.uci/$PACKAGE_BASE"++		# completely disable handlers so that they don't get in the way+		config() {+			return 0+		}+		option() {+			return 0+		}+		+		config_load "$PACKAGE"+		CONFIG_FILENAME="${CONFIG_FILENAME:-$UCI_ROOT/etc/config/$PACKAGE_BASE}"+		uci_do_update "$CONFIG_FILENAME" "$updatestr" > "/tmp/.uci/$PACKAGE_BASE.new" && {+			mv -f "/tmp/.uci/$PACKAGE_BASE.new" "$CONFIG_FILENAME" && \+			rm -f "/tmp/.uci/$PACKAGE_BASE"+		} +	)+	$LOCK -u "/tmp/.uci/$PACKAGE_BASE.lock"+}diff -urN package.old/base-files-uci/ipkg/base-files-uci.control package.new/base-files-uci/ipkg/base-files-uci.control--- package.old/base-files-uci/ipkg/base-files-uci.control	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/ipkg/base-files-uci.control	2007-10-31 19:38:29.000000000 +0100@@ -0,0 +1,4 @@+Package: base-files-uci+Priority: optional+Section: system+Description: UCI support scriptsdiff -urN package.old/base-files-uci/ipkg/base-files-uci.postinst package.new/base-files-uci/ipkg/base-files-uci.postinst--- package.old/base-files-uci/ipkg/base-files-uci.postinst	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/ipkg/base-files-uci.postinst	2007-10-31 20:34:38.000000000 +0100@@ -0,0 +1,26 @@+#!/bin/sh+#+# base-files-uci post-install script.+#++# for squashfs symlink hacks like in WR RC5 (requires rm before change)+FixReadOnlyLink()+{+	touch "$1" >&- 2>&-	# test if read-only+	[ "$?" != 0 ] && {+		local tmpfile=$(mktemp "${IPKG_INSTROOT}/tmp/.webif-inst-XXXXXX")+		cp -p "$1" "$tmpfile" >&- 2>&-+		rm "$1"  >&- 2>&-+		mv "$tmpfile" "$1"  >&- 2>&-+	}+}++# again, we rename /lib/config/uci-depends.sh so that it doesn't get removed if webif^2 is+# uninstalled since we've radically changed /etc/functions.sh.+FixReadOnlyLink "${IPKG_INSTROOT}/lib/config/uci-depends.sh"+mv -f "${IPKG_INSTROOT}/lib/config/uci-depends.new" "${IPKG_INSTROOT}/lib/config/uci-depends.sh"++# fix up /etc/functions.sh. It must work under RC5, RC6, and 0.9 and must+# include the UCI callback funcs in /lib/config/uci-depends.sh.+FixReadOnlyLink "${IPKG_INSTROOT}/etc/functions.sh"+mv -f "${IPKG_INSTROOT}/etc/functions.new" "${IPKG_INSTROOT}/etc/functions.sh"diff -urN package.old/base-files-uci/Makefile package.new/base-files-uci/Makefile--- package.old/base-files-uci/Makefile	1970-01-01 01:00:00.000000000 +0100+++ package.new/base-files-uci/Makefile	2007-10-31 20:21:33.000000000 +0100@@ -0,0 +1,34 @@+#+# Copyright (C) 2007 X-Wrt.org+#+# This is free software, licensed under the GNU General Public License v2.+# See /LICENSE for more information.+#++include $(TOPDIR)/rules.mk++PKG_NAME:=base-files-uci+PKG_VERSION:=0+PKG_RELEASE:=3++PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)++include $(TOPDIR)/package/rules.mk++$(eval $(call PKG_template,BASE_FILES_UCI,$(PKG_NAME),$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))++$(PKG_BUILD_DIR)/.prepared:+	mkdir -p $(PKG_BUILD_DIR)+	touch $@+	+$(PKG_BUILD_DIR)/.configured:+	touch $@++$(PKG_BUILD_DIR)/.built:+	touch $@++$(IPKG_BASE_FILES_UCI): +	$(CP) -a ./files/* $(IDIR_BASE_FILES_UCI)/+	find $(IDIR_BASE_FILES_UCI) -name .svn | xargs rm -rf+	find $(IDIR_BASE_FILES_UCI) -name *~ | xargs rm -rf+	$(IPKG_BUILD) $(IDIR_BASE_FILES_UCI) $(PACKAGE_DIR)diff -urN package.old/webif/Config.in package.new/webif/Config.in--- package.old/webif/Config.in	2007-10-29 15:30:09.000000000 +0100+++ package.new/webif/Config.in	2007-10-31 19:47:03.000000000 +0100@@ -1,9 +1,10 @@ menu "webif - OpenWrt Administrative Console"  config BR2_PACKAGE_WEBIF 	select BR2_PACKAGE_IPKG_UPGRADE_FIX+	select BR2_PACKAGE_BASE_FILES_UCI 	depends BR2_PACKAGE_WEBIF_THEME_XWRT 	depends BR2_PACKAGE_HASERL 	select BR2_PACKAGE_IPKG 	tristate "webif^2 - HTTP Administrative Console" 	default ydiff -urN package.old/webif/files/bin/uci package.new/webif/files/bin/uci--- package.old/webif/files/bin/uci	2007-06-26 17:45:57.000000000 +0200+++ package.new/webif/files/bin/uci	1970-01-01 01:00:00.000000000 +0100@@ -1,182 +0,0 @@-#!/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--. /etc/functions.sh-[ -f "/etc/functions_ex.sh" ] && {-. /etc/functions_ex.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 -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 /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 0diff -urN package.old/webif/files/lib/config/uci.awk package.new/webif/files/lib/config/uci.awk--- package.old/webif/files/lib/config/uci.awk	2007-06-26 17:45:56.000000000 +0200+++ package.new/webif/files/lib/config/uci.awk	1970-01-01 01:00:00.000000000 +0100@@ -1,186 +0,0 @@-# Configuration update functions - AWK API-#-# 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--# parameters: 1-function config_load(package, var) {-	while (("/bin/ash -c '. /etc/functions.sh; unset NO_EXPORT; config_load \""package"\"; env | grep \"^CONFIG_\"'" | getline) == 1) {-		sub("^CONFIG_", "")-		if (match($0, "=") == 0) {-			if (var != "") CONFIG[var] = CONFIG[var] "\n" $0-			next-		}-		var=substr($0, 1, RSTART-1)-		CONFIG[var] = substr($0, RSTART+1, length($0) - RSTART)-	}-}--# parameters: 2-function config_get(package, option) {-	return CONFIG[package "_" option]-}--# parameters: 3-function config_get_bool(package, option, default, var) {-	var = config_get(package, option);-	if ((var == "enabled") || (var == "1") || (var == "on")) return 1-	if ((var == "disabled") || (var == "0") || (var == "off")) return 1-	return (var && var != "0" ? 1 : 0)-}---function read_file(filename,  result) {-	while ((getline <filename) == 1) {-		result = result $0 "\n"-	}-	gsub(/\n*$/, "", result)-	return result-}--function uci_cmd2option(str,  tmp) {-	if (match(str,"=")!=0) {-		res = "\toption " substr(str,1,RSTART-1) "\t'" substr(str,RSTART+1) "'"-	} else {-		res= ""-	}-	return res-}--function uci_cmd2config(atype,  aname) {-	return "config \"" atype "\" \"" aname "\""-}--function uci_update_config(cfg, update,  \-  lines, line, l, n, i, i2, section, scnt, remove, tmp, aidx, rest) {-	scnt = 1-	linecnt=split(cfg "\n", lines, "\n")--	cfg = ""-	for (n = 1; n < linecnt; n++) {-		# stupid parser for quoted arguments (e.g. for the type string).-		# not to be used to gather variable values (backslash escaping doesn't work)-		line = lines[n]-		gsub(/^[ \t]*/, "", line)-		gsub(/#.*$/, "", line)-		i2 = 1-		delete l-		rest = line-        	while (length(rest)) {-			if (match(rest, /[ \t\"]+/)) {-				if (RSTART>1) {-					l[i2] = substr(rest,1,RSTART-1)-					i2++-				}-				aidx=index(rest,"\"")-				if (aidx>=RSTART && aidx<=RSTART+RLENGTH) {-					rest=substr(rest,aidx+1)-					# find the end of the string-					match(rest,/\"/)-					l[i2]=substr(rest,1,RSTART-1)-					i2++-				}-				rest=substr(rest,RSTART+RLENGTH)-			} else {-				l[i2] = rest-				i2++-				rest = ""-			}-		}-		line = lines[n]-		-		# when a command wants to set a config value for the current-		# section and a blank line is encountered before an option with-		# the same name, insert it here to maintain some coherency between-		# manually and automatically created option lines-		# if an option with the same name appears after this point, simply-		# ignore it, because it is already set.-		if ((section != "") && (l[1] != "option")) {-			if (line ~ /^[ \t]*$/) {-				if (update ~ "^" section "\\.") {-					gsub("^" section ".", "", update)-					cfg = cfg uci_cmd2option(update) "\n"-					gsub(/=.*$/, "", update)-					update = "-" section "." update-				}-			}-		}--		if (l[1] == "config") {-			# look for all unset values-			if (section != "") {-				flag=0-				if (update ~ "^" section "\\.") {-					flag=1-					gsub("^" section ".", "", update)-					cfg = cfg uci_cmd2option(update) "\n"-					-					update = "-" section "." update-				} -				if (flag!=0) cfg = cfg "\n"-			}-			-			remove = ""-			section = l[3]-			if (!length(section)) {-				section = "cfg" scnt-			}	-			scnt++-			if (update == "-" section) {-				remove = "section"-				update = ""-			} else if (update ~ "^@" section "=") {-				update = ""-			} else if (update ~ "^&" section "=") {-				gsub("^&" section "=", "", update)-				line = uci_cmd2config(l[2],update) -				update = ""-			}-		}-		if (remove == "option") remove = ""-		if (l[1] == "option") {-			if (update ~ "^-" section "\\." l[2] "$") remove = "option"-			# if a supplied config value already exists, replace the whole line-			if (match(update, "^" section "." l[2] "=")) {-				gsub("^" section ".", "", update)-				line = uci_cmd2option(update)-				update = ""-			}-		}-		if (remove == "") cfg = cfg line "\n"-	}-	-	# any new options for the last section??-	if (section != "") {-		if (update ~ "^" section "\\.") {-			gsub("^" section ".", "", update)-			cfg = cfg uci_cmd2option(update) "\n"--			update = "-" section "." update-		} -	}--	if (update ~ "^@") {-		# new section-		section = stype = substr(update,2)-		gsub(/=.*$/,"",section)-		gsub(/^.*=/,"",stype)-		cfg = cfg "\nconfig \"" stype "\" \"" section "\"\n"-	}--	return cfg-}diff -urN package.old/webif/files/lib/config/uci-depends.new package.new/webif/files/lib/config/uci-depends.new--- package.old/webif/files/lib/config/uci-depends.new	2007-09-19 17:26:47.000000000 +0200+++ package.new/webif/files/lib/config/uci-depends.new	1970-01-01 01:00:00.000000000 +0100@@ -1,197 +0,0 @@-#!/bin/sh-# Copyright (C) 2006 OpenWrt.org-# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>-#-# newline (used by /lib/config/uci.sh)-N="-"-_C=0--# perform export -n only if available-_EXPORT_N_OPTION="-n"-ntest=$(export -n 2>&1)-if echo "$ntest" | grep -iq "Illegal option -n"; then	-	_EXPORT_N_OPTION=""-fi--append() {-	local var="$1"-	local value="$2"-	local sep="${3:- }"-	-	eval "export $_EXPORT_N_OPTION -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""-}--reset_cb() {-	config_cb() { return 0; }-	option_cb() { return 0; }-}-reset_cb--config () {-	local cfgtype="$1"-	local name="$2"-	-	CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))-	name="${name:-cfg$CONFIG_NUM_SECTIONS}"-	append CONFIG_SECTIONS "$name"-	config_cb "$cfgtype" "$name"-	CONFIG_SECTION="$name"-	export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"-}--option () {-	local varname="$1"; shift-	local value="$*"-	-	export $_EXPORT_N_OPTION "CONFIG_${CONFIG_SECTION}_${varname}=$value"-	option_cb "$varname" "$*"-}--config_rename() {-	local OLD="$1"-	local NEW="$2"-	local oldvar-	local newvar-	-	[ "$OLD" -a "$NEW" ] || return-	for oldvar in `set | grep ^CONFIG_${OLD}_ | \-		sed -e 's/\(.*\)=.*$/\1/'` ; do-		newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}"-		eval "export $_EXPORT_N_OPTION \"$newvar=\${$oldvar}\""-		unset "$oldvar"-	done-	CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")"-	-	[ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW"-}--config_unset() {-	config_set "$1" "$2" ""-}--config_clear() {-	local SECTION="$1"-	local oldvar-	-	CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , ,")"-	CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}"--	for oldvar in `set | grep ^CONFIG_${SECTION:+${SECTION}_} | \-		sed -e 's/\(.*\)=.*$/\1/'` ; do -		unset $oldvar -	done-}--config_load() {-	local file="/etc/config/$1"-	_C=0-	CONFIG_SECTIONS=-	CONFIG_NUM_SECTIONS=0-	CONFIG_SECTION=-	-	[ -e "$file" ] && {-		. $file-	} || return 1-	-	${CONFIG_SECTION:+config_cb}-}--config_get() {-	case "$3" in-		"") eval "echo \"\${CONFIG_${1}_${2}}\"";;-		*)  eval "export $_EXPORT_N_OPTION -- \"$1=\${CONFIG_${2}_${3}}\"";;-	esac-}--# config_get_bool <variable> <section> <option> [<default>]-config_get_bool() {-	local _tmp-	config_get "_tmp" "$2" "$3"-	case "$_tmp" in-		1|on|true|enabled) export ${NO_EXPORT:+-n} "$1=1";;-		0|off|false|disabled) export ${NO_EXPORT:+-n} "$1=0";;-		*) eval "$1=${4:-0}";;-	esac-}--config_set() {-	local section="$1"-	local option="$2"-	local value="$3"-	local old_section="$CONFIG_SECTION"--	CONFIG_SECTION="$section"-	option "$option" "$value"-	CONFIG_SECTION="$old_section"-}--config_foreach() {-	local function="$1"-	local type="$2"-	local section cfgtype-	-	[ -z "$CONFIG_SECTIONS" ] && return 0-	for section in ${CONFIG_SECTIONS}; do-		config_get cfgtype "$section" TYPE-		[ -n "$type" -a "$cfgtype" != "$type" ] && continue-		eval "$function \"\$section\""-	done-}--load_modules() {-	cd /etc/modules.d-	sed 's/^[^#]/insmod &/' $* | ash 2>&- || :-}--include() {-	local file-	-	for file in $(ls $1/*.sh 2>/dev/null); do-		. $file-	done-}--find_mtd_part() {-	local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"-	local PREFIX=/dev/mtdblock-	-	PART="${PART##mtd}"-	[ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/-	echo "${PART:+$PREFIX$PART}"-}--strtok() { # <string> { <variable> [<separator>] ... }-	local tmp-	local val="$1"-	local count=0--	shift--	while [ $# -gt 1 ]; do-		tmp="${val%%$2*}"--		[ "$tmp" = "$val" ] && break--		val="${val#$tmp$2}"--                export $_EXPORT_N_OPTION "$1=$tmp"; count=$((count+1))-		shift 2-	done--	if [ $# -gt 0 -a "$val" ]; then-                export $_EXPORT_N_OPTION "$1=$val"; count=$((count+1))-	fi--	return $count-}---jffs2_mark_erase() {-	local part="$(find_mtd_part "$1")"-	[ -z "$part" ] && {-		echo Partition not found.-		return 1-	}-	echo -e "\xde\xad\xc0\xde" | mtd -qq write - "$1"-}diff -urN package.old/webif/files/lib/config/uci.sh package.new/webif/files/lib/config/uci.sh--- package.old/webif/files/lib/config/uci.sh	2007-06-26 17:45:56.000000000 +0200+++ package.new/webif/files/lib/config/uci.sh	1970-01-01 01:00:00.000000000 +0100@@ -1,160 +0,0 @@-#!/bin/sh-# Shell script defining macros for manipulating 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_load() {-	local PACKAGE="$1"-	config_load "$PACKAGE"-	local PACKAGE_BASE="$(basename "$PACKAGE")"-	[ -f "/tmp/.uci/${PACKAGE_BASE}" ] && {-		. "/tmp/.uci/${PACKAGE_BASE}" 2>/dev/null >/dev/null-		config_cb-	}-}--uci_apply_defaults() {(-	cd /etc/uci-defaults || return 0-	files="$(ls)"-	[ -z "$files" ] && return 0-	mkdir -p /tmp/.uci-	for file in $files; do-		( . "./$(basename $file)" ) && rm -f "$file"-	done-	uci commit-)}--uci_call_awk() {-	local CMD="$*"-	awk -f $UCI_ROOT/lib/config/uci.awk -f - <<EOF-BEGIN {-	$CMD-}-EOF-}--uci_do_update() {-	local FILENAME="$1"-	local UPDATE="$2"-	uci_call_awk "-	config = read_file(\"$FILENAME\")-	$UPDATE-	print config-"-}--uci_add_update() {-	local PACKAGE="$1"-	local UPDATE="$2"-	local PACKAGE_BASE="$(basename "$PACKAGE")"-	-	# FIXME: add locking?-	mkdir -p "/tmp/.uci"-	echo "$UPDATE" >> "/tmp/.uci/${PACKAGE_BASE}"-}--uci_set() {-	local PACKAGE="$1"-	local CONFIG="$2"-	local OPTION="$3"-	local VALUE="$4"--	( # spawn a subshell so you don't mess up the current environment-		uci_load "$PACKAGE"-		config_get OLDVAL "$CONFIG" "$OPTION"-		if [ "$OLDVAL" != "$VALUE" ]; then-			config_get type "$CONFIG" TYPE-			[ -z "$type" ]-		fi-	) || uci_add_update "$PACKAGE" "config_set '$CONFIG' '$OPTION' '$VALUE'"-}--uci_add() {-	local PACKAGE="$1"-	local TYPE="$2"-	local CONFIG="$3"--	uci_add_update "$PACKAGE" "config '$TYPE' '$CONFIG'"-}--uci_rename() {-	local PACKAGE="$1"-	local CONFIG="$2"-	local VALUE="$3"--	uci_add_update "$PACKAGE" "config_rename '$CONFIG' '$VALUE'"-}--uci_remove() {-	local PACKAGE="$1"-	local CONFIG="$2"-	local OPTION="$3"--	if [ -z "$OPTION" ]; then-		uci_add_update "$PACKAGE" "config_clear '$CONFIG'"-	else-		uci_add_update "$PACKAGE" "config_unset '$CONFIG' '$OPTION'"-	fi-}--uci_commit() {-	local PACKAGE="$1"-	local PACKAGE_BASE="$(basename "$PACKAGE")"--	mkdir -p /tmp/.uci-	LOCK=`which lock` || LOCK=:-	$LOCK "/tmp/.uci/$PACKAGE_BASE.lock"-	[ -f "/tmp/.uci/$PACKAGE_BASE" ] && (-		updatestr=""-		-		# replace handlers-		config() {-			append updatestr "config = uci_update_config(config, \"@$2=$1\")" "$N"-		}-		option() {-			append updatestr "config = uci_update_config(config, \"$CONFIG_SECTION.$1=$2\")" "$N"-		}-		config_rename() {-			append updatestr "config = uci_update_config(config, \"&$1=$2\")" "$N"-		}-		config_unset() {-			append updatestr "config = uci_update_config(config, \"-$1.$2\")" "$N"-		}-		config_clear() {-			append updatestr "config = uci_update_config(config, \"-$1\")" "$N"-		}-		-		. "/tmp/.uci/$PACKAGE_BASE"--		# completely disable handlers so that they don't get in the way-		config() {-			return 0-		}-		option() {-			return 0-		}-		-		config_load "$PACKAGE"-		CONFIG_FILENAME="${CONFIG_FILENAME:-$UCI_ROOT/etc/config/$PACKAGE_BASE}"-		uci_do_update "$CONFIG_FILENAME" "$updatestr" > "/tmp/.uci/$PACKAGE_BASE.new" && {-			mv -f "/tmp/.uci/$PACKAGE_BASE.new" "$CONFIG_FILENAME" && \-			rm -f "/tmp/.uci/$PACKAGE_BASE"-		} -	)-	$LOCK -u "/tmp/.uci/$PACKAGE_BASE.lock"-}diff -urN package.old/webif/ipkg/webif.control package.new/webif/ipkg/webif.control--- package.old/webif/ipkg/webif.control	2007-06-26 17:46:02.000000000 +0200+++ package.new/webif/ipkg/webif.control	2007-10-31 19:47:37.000000000 +0100@@ -1,6 +1,6 @@ Package: webif Maintainer: X-Wrt Project Section: net-Depends: haserl ipkg ipkg-upgrade-fix+Depends: haserl ipkg ipkg-upgrade-fix base-files-uci Priority: normal Description: An HTTP administrative console for OpenWrt.diff -urN package.old/webif/ipkg/webif.postinst package.new/webif/ipkg/webif.postinst--- package.old/webif/ipkg/webif.postinst	2007-07-27 13:04:12.000000000 +0200+++ package.new/webif/ipkg/webif.postinst	2007-10-31 20:39:12.000000000 +0100@@ -122,21 +122,6 @@ mv -f "${IPKG_INSTROOT}/etc/init.d/x60cron.webif" "${IPKG_INSTROOT}/etc/init.d/S60cron" mv -f "${IPKG_INSTROOT}/etc/httpd.webif" "${IPKG_INSTROOT}/etc/httpd.conf" -# again, we rename /lib/config/uci-depends.sh so that it doesn't get removed if webif^2 is-# uninstalled since we've radically changed /etc/functions.sh.-FixReadOnlyLink "${IPKG_INSTROOT}/lib/config/uci-depends.sh"-mv -f "${IPKG_INSTROOT}/lib/config/uci-depends.new" "${IPKG_INSTROOT}/lib/config/uci-depends.sh"--# fix up /etc/functions.sh. It must work under RC5, RC6, and 0.9 and must-# include the UCI callback funcs in /lib/config/uci-depends.sh.-FixReadOnlyLink "${IPKG_INSTROOT}/etc/functions.sh"-mv -f "${IPKG_INSTROOT}/etc/functions.new" "${IPKG_INSTROOT}/etc/functions.sh"--# include uci-depends.sh from /etc/functions.sh if not already included.-#if ! grep -q "uci-depends.sh" "${IPKG_INSTROOT}/etc/functions.sh"; then-#	echo ". /lib/config/uci-depends.sh" >> "${IPKG_INSTROOT}/etc/functions.sh"-#fi- # initialize default webif theme # create symlink to /www/themes/xwrt (do NOT use INSTROOT in first arg). rm -rf "${IPKG_INSTROOT}/www/themes/active" >&- 2>&-