LOAD_STATE=1
LIST_SEP=" "
+# xor multiple hex values of the same length
+xor() {
+ local val
+ local ret="0x$1"
+ local retlen=${#1}
+
+ shift
+ while [ -n "$1" ]; do
+ val="0x$1"
+ ret=$((ret ^ val))
+ shift
+ done
+
+ printf "%0${retlen}x" "$ret"
+}
+
append() {
local var="$1"
local value="$2"
local cfgtype="$1"
local name="$2"
- export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))
+ export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$((CONFIG_NUM_SECTIONS + 1))
name="${name:-cfg$CONFIG_NUM_SECTIONS}"
append CONFIG_SECTIONS "$name"
- [ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
export ${NO_EXPORT:+-n} CONFIG_SECTION="$name"
- export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"
+ config_set "$CONFIG_SECTION" "TYPE" "${cfgtype}"
+ [ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
}
option () {
local varname="$1"; shift
local value="$*"
- export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_${varname}=$value"
+ config_set "$CONFIG_SECTION" "${varname}" "${value}"
[ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"
}
config_get len "$CONFIG_SECTION" "${varname}_LENGTH" 0
[ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}"
- len=$(($len + 1))
+ len=$((len + 1))
config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"
config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"
append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP"
- list_cb "$varname" "$*"
+ [ -n "$NO_CALLBACK" ] || list_cb "$varname" "$*"
}
config_unset() {
# config_get <variable> <section> <option> [<default>]
# config_get <section> <option>
config_get() {
- case "$3" in
- "") eval echo "\${CONFIG_${1}_${2}:-\${4}}";;
- *) eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;
+ case "$2${3:-$1}" in
+ *[^A-Za-z0-9_]*) : ;;
+ *)
+ case "$3" in
+ "") eval echo "\"\${CONFIG_${1}_${2}:-\${4}}\"";;
+ *) eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";;
+ esac
+ ;;
esac
}
local section="$1"
local option="$2"
local value="$3"
- local old_section="$CONFIG_SECTION"
- CONFIG_SECTION="$section"
- option "$option" "$value"
- CONFIG_SECTION="$old_section"
+ export ${NO_EXPORT:+-n} "CONFIG_${section}_${option}=${value}"
}
config_foreach() {
[ -z "$CONFIG_SECTIONS" ] && return 0
for section in ${CONFIG_SECTIONS}; do
config_get cfgtype "$section" TYPE
- [ -n "$___type" -a "x$cfgtype" != "x$___type" ] && continue
+ [ -n "$___type" ] && [ "x$cfgtype" != "x$___type" ] && continue
eval "$___function \"\$section\" \"\$@\""
done
}
while [ $c -le "$len" ]; do
config_get val "${section}" "${option}_ITEM$c"
eval "$function \"\$val\" \"\$@\""
- c="$(($c + 1))"
+ c="$((c + 1))"
done
}
-insert_modules() {
- [ -d /etc/modules.d ] && {
- cd /etc/modules.d
- sed 's/^[^#]/insmod &/' $* | ash 2>&- || :
- }
-}
-
default_prerm() {
- local name
- name=$(echo $(basename $1) | cut -d. -f1)
- [ -f /usr/lib/opkg/info/${name}.prerm-pkg ] && . /usr/lib/opkg/info/${name}.prerm-pkg
- for i in `cat /usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do
- $i disable
- $i stop
+ local root="${IPKG_INSTROOT}"
+ local pkgname="$(basename ${1%.*})"
+ local ret=0
+
+ if [ -f "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" ]; then
+ ( . "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" )
+ ret=$?
+ fi
+
+ local shell="$(command -v bash)"
+ for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
+ if [ -n "$root" ]; then
+ ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable
+ else
+ if [ "$PKG_UPGRADE" != "1" ]; then
+ "$i" disable
+ fi
+ "$i" stop
+ fi
done
+
+ return $ret
}
-default_postinst() {
- local name rusers
- name=$(echo $(basename $1) | cut -d. -f1)
- rusers=$(grep "Require-User:" ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.control)
- [ -n "$rusers" ] && {
- local user group uid gid
- for a in $(echo $rusers | sed "s/Require-User://g"); do
- user=""
- group=""
- for b in $(echo $a | sed "s/:/ /g"); do
- local name id
-
- name=$(echo $b | cut -d= -f1)
- id=$(echo $b | cut -d= -f2)
-
- [ -z "$user" ] && {
- user=$name
- uid=$id
- continue
- }
-
- gid=$id
- [ -n "$gid" ] && {
- group_exists $name || group_add $name $gid
- }
-
- [ -z "$gid" ] && {
- group_add_next $name
- gid=$?
- }
-
- [ -z "$group" ] && {
- user_exists $user || user_add $user "$uid" $gid
- group=$name
- continue
- }
-
- group_add_user $name $user
- done
+add_group_and_user() {
+ local pkgname="$1"
+ local rusers="$(sed -ne 's/^Require-User: *//p' $root/usr/lib/opkg/info/${pkgname}.control 2>/dev/null)"
+
+ if [ -n "$rusers" ]; then
+ local tuple oIFS="$IFS"
+ for tuple in $rusers; do
+ local uid gid uname gname
+
+ IFS=":"
+ set -- $tuple; uname="$1"; gname="$2"
+ IFS="="
+ set -- $uname; uname="$1"; uid="$2"
+ set -- $gname; gname="$1"; gid="$2"
+ IFS="$oIFS"
+
+ if [ -n "$gname" ] && [ -n "$gid" ]; then
+ group_exists "$gname" || group_add "$gname" "$gid"
+ elif [ -n "$gname" ]; then
+ gid="$(group_add_next "$gname")"
+ fi
+
+ if [ -n "$uname" ]; then
+ user_exists "$uname" || user_add "$uname" "$uid" "$gid"
+ fi
+
+ if [ -n "$uname" ] && [ -n "$gname" ]; then
+ group_add_user "$gname" "$uname"
+ fi
+
+ unset uid gid uname gname
done
- }
-
- [ -f ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg ] && ( . ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg )
- [ -n "${IPKG_INSTROOT}" ] || rm -f /tmp/luci-indexcache 2>/dev/null
+ fi
+}
- [ "$PKG_UPGRADE" = "1" ] || for i in `cat ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do
- [ -n "${IPKG_INSTROOT}" ] && $(which bash) ${IPKG_INSTROOT}/etc/rc.common ${IPKG_INSTROOT}$i enable; \
- [ -n "${IPKG_INSTROOT}" ] || {
- $i enable
- $i start
- }
+default_postinst() {
+ local root="${IPKG_INSTROOT}"
+ local pkgname="$(basename ${1%.*})"
+ local filelist="/usr/lib/opkg/info/${pkgname}.list"
+ local ret=0
+
+ add_group_and_user "${pkgname}"
+
+ if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
+ ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
+ ret=$?
+ fi
+
+ if [ -d "$root/rootfs-overlay" ]; then
+ cp -R $root/rootfs-overlay/. $root/
+ rm -fR $root/rootfs-overlay/
+ fi
+
+ if [ -z "$root" ]; then
+ if grep -m1 -q -s "^/etc/modules.d/" "$filelist"; then
+ kmodloader
+ fi
+
+ if grep -m1 -q -s "^/etc/sysctl.d/" "$filelist"; then
+ /etc/init.d/sysctl restart
+ fi
+
+ if grep -m1 -q -s "^/etc/uci-defaults/" "$filelist"; then
+ [ -d /tmp/.uci ] || mkdir -p /tmp/.uci
+ for i in $(grep -s "^/etc/uci-defaults/" "$filelist"); do
+ ( [ -f "$i" ] && cd "$(dirname $i)" && . "$i" ) && rm -f "$i"
+ done
+ uci commit
+ fi
+
+ rm -f /tmp/luci-indexcache
+ fi
+
+ local shell="$(command -v bash)"
+ for i in $(grep -s "^/etc/init.d/" "$root$filelist"); do
+ if [ -n "$root" ]; then
+ ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" enable
+ else
+ if [ "$PKG_UPGRADE" != "1" ]; then
+ "$i" enable
+ fi
+ "$i" start
+ fi
done
- return 0
+
+ return $ret
}
include() {
[ -f "${IPKG_INSTROOT}/etc/group" ] || return 1
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/group
echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group
- rc=$?
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group
- return $rc
}
group_exists() {
group_add_next() {
local gid gids
gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
- [ -n "$gid" ] && return $gid
- gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
- gid=100
- while [ -n "$(echo $gids | grep $gid)" ] ; do
- gid=$((gid + 1))
+ if [ -n "$gid" ]; then
+ echo $gid
+ return
+ fi
+ gids=$(cut -d: -f3 ${IPKG_INSTROOT}/etc/group)
+ gid=65536
+ while echo "$gids" | grep -q "^$gid$"; do
+ gid=$((gid + 1))
done
group_add $1 $gid
- return $gid
+ echo $gid
}
group_add_user() {
local grp delim=","
grp=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group)
- [ -z "$(echo $grp | cut -d: -f4 | grep $2)" ] || return
- [ -n "$(echo $grp | grep ":$")" ] && delim=""
+ echo "$grp" | cut -d: -f4 | grep -q $2 && return
+ echo "$grp" | grep -q ":$" && delim=""
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
sed -i "s/$grp/$grp$delim$2/g" ${IPKG_INSTROOT}/etc/group
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
local shell="${6:-/bin/false}"
local rc
[ -z "$uid" ] && {
- uids=$(cat ${IPKG_INSTROOT}/etc/passwd | cut -d: -f3)
- uid=100
- while [ -n "$(echo $uids | grep $uid)" ] ; do
- uid=$((uid + 1))
+ uids=$(cut -d: -f3 ${IPKG_INSTROOT}/etc/passwd)
+ uid=65536
+ while echo "$uids" | grep -q "^$uid$"; do
+ uid=$((uid + 1))
done
}
[ -z "$gid" ] && gid=$uid
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow
- rc=$?
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
- return $rc
}
user_exists() {
grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/passwd
}
-[ -z "$IPKG_INSTROOT" -a -f /lib/config/uci.sh ] && . /lib/config/uci.sh
+board_name() {
+ [ -e /tmp/sysinfo/board_name ] && cat /tmp/sysinfo/board_name || echo "generic"
+}
+
+[ -z "$IPKG_INSTROOT" ] && [ -f /lib/config/uci.sh ] && . /lib/config/uci.sh