X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Ffunctions.sh;h=2f78d67025d0f52968fb47d6ee60a8b1163b5e6a;hb=46a08cb6050b324520eaaadba0a977649ad21443;hp=7f148223f525bbfb0859f604a2abd1ed9dead936;hpb=d8b61eced778c92d84cef124dc5f039961438fa7;p=openwrt%2Fsvn-archive%2Farchive.git diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index 7f148223f5..2f78d67025 100755 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (C) 2006-2013 OpenWrt.org +# Copyright (C) 2006-2014 OpenWrt.org # Copyright (C) 2006 Fokus Fraunhofer # Copyright (C) 2010 Vertical Communications @@ -154,15 +154,18 @@ config_list_foreach() { } insert_modules() { - [ -d /etc/modules.d ] && { - cd /etc/modules.d - sed 's/^[^#]/insmod &/' $* | ash 2>&- || : - } + for m in $*; do + if [ -f /etc/modules.d/$m ]; then + sed 's/^[^#]/insmod &/' /etc/modules.d/$m | ash 2>&- || : + else + modprobe $m + fi + done } default_prerm() { local name - name=$(echo $(basename $1) | cut -d. -f1) + name=$(basename ${1%.*}) [ -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 @@ -171,40 +174,62 @@ default_prerm() { } default_postinst() { - local name rusers - name=$(echo $(basename $1) | cut -d. -f1) - [ -f ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg ] && ( . ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg ) - rusers=$(grep "Require-User:" ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.control) + local pkgname rusers ret + ret=0 + pkgname=$(basename ${1%.*}) + rusers=$(grep "Require-User:" ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.control) [ -n "$rusers" ] && { - local user group + 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 ugname ugid + + ugname=$(echo $b | cut -d= -f1) + ugid=$(echo $b | cut -d= -f2) + [ -z "$user" ] && { - user=$b + user=$ugname + uid=$ugid continue } - [ -z "$group" ] && { - group=$b - group_add_next $b + + gid=$ugid + [ -n "$gid" ] && { + group_exists $ugname || group_add $ugname $gid + } + + [ -z "$gid" ] && { + group_add_next $ugname gid=$? - user_exists $user || user_add $user "" $gid + } + + [ -z "$group" ] && { + user_exists $user || user_add $user "$uid" $gid + group=$ugname continue } - group_add_next $b - group_add_user $b $user + + group_add_user $ugname $user done done } - [ "$PKG_UPGRADE" = "1" ] || for i in `cat ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do + + if [ -f ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.postinst-pkg ]; then + ( . ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.postinst-pkg ) + ret=$? + fi + [ -n "${IPKG_INSTROOT}" ] || rm -f /tmp/luci-indexcache 2>/dev/null + + [ "$PKG_UPGRADE" = "1" ] || for i in `cat ${IPKG_INSTROOT}/usr/lib/opkg/info/${pkgname}.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 } done - return 0 + return $ret } include() {