base-files: default_postinst: propagate the real postinst return code
[openwrt/svn-archive/archive.git] / package / base-files / files / lib / functions.sh
index 7f148223f525bbfb0859f604a2abd1ed9dead936..2f78d67025d0f52968fb47d6ee60a8b1163b5e6a 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/sh
-# Copyright (C) 2006-2013 OpenWrt.org
+# Copyright (C) 2006-2014 OpenWrt.org
 # Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
 # 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() {