#!/bin/ksh -p
## Patch is the minimum path number that is required
## This assumes that the patch also includes a regular SUNW_REQUIRES for patch

PATH=/usr/bin:/usr/sbin:$PATH; export PATH
PKGCOND=/usr/bin/pkgcond

 patch=118844-14
 uname=$(uname -v)
 uname=${uname##*_}    # remove text before underscore...

 if [ "$ROOTDIR" = "/" ] ; then
     if [[ $uname == "Generic" ]] || \
     [[ ${uname%-*} == ${patch%-*} && ${uname#*-} -lt ${patch#*-} ]]; then
         print -u2 "\
         In order to apply this libc patch, the Kernel patch ${patch},
         or a higher rev, must be installed and the system rebooted
         prior to installing this patch. \
         "
         exit 1
    fi
 fi

CheckZones()
{
        if [ "$ROOTDIR" = "/" -a -x /usr/bin/zonename ]; then
                ZONENAME=`/usr/bin/zonename`
                if [ ${ZONENAME} = "global" ]; then
                        GLOBAL_ZONE=true
                else
                        GLOBAL_ZONE=false
                fi
        else
                # Unable to determine zone
                GLOBAL_ZONE=true
        fi
}

not_installed() {
        driver=$1
        grep "^${driver} " $ROOTDIR/etc/name_to_major > /dev/null 2>&1

        return $?
}

update_logindevperm() {
        cp $ROOTDIR/etc/logindevperm $ROOTDIR/etc/logindevperm.before-$PatchNum

}

load_mods() {
        ## load modules during patch installation per 6349240
        ## to prevent warnings from displaying on the console
        ## before the system is rebooted.

	if [ "$ROOTDIR" = "/" ] ; then
		cd  ${patchdir:-$PWD}

        	## find all kernel driver modules in patch
		cat */pkgmap|grep "\ kernel/drv"|grep "1 f"|nawk '{print $4}' |grep -v "\.conf" > /tmp/modules.$$

		while read line; do
                	## preload each module
			[ -f /$line ] && {
				echo "loading module $line"
				modload /$line > /dev/null 2>&1
			}
		done < /tmp/modules.$$

		rm -f /tmp/modules.$$
	fi
}


Execute_commands() {

   ## not_installed ugen || /usr/sbin/add_drv -b ${ROOTDIR} -m '* 0644 root sys' \
        ## ugen || EXIT=1

   update_logindevperm


   return 0
}

LocalZones () {
# commands specific to non-gloabl zones
return 0

}

ExecuteInProperEnvironment () {
   if $PKGCOND is_whole_root_nonglobal_zone > /dev/null 2>&1 ; then
       # Execute non-global whole root zone commands.
	update_logindevperm;
       return 0
   fi

   if $PKGCOND is_nonglobal_zone > /dev/null 2>&1 ; then
       # Execute non-global zone commands. Should be no action here
       return 0
   fi

   if $PKGCOND is_netinstall_image > /dev/null 2>&1 ; then
       # Execute commands applicable to patching the mini-root.
	update_logindevperm;
       return 0
   fi

   if $PKGCOND is_mounted_miniroot > /dev/null 2>&1 ; then
       # Execute commands specific to the mini-root
	update_logindevperm;
       return 0
   fi

   if $PKGCOND is_diskless_client > /dev/null 2>&1 ; then
       # Execute commands specific to diskless client
	update_logindevperm;
       return 0
   fi

   if $PKGCOND is_alternative_root > /dev/null 2>&1 ; then
       # Execute commands specific to an alternate root
       Execute_commands;
       return 0
   fi

   if $PKGCOND is_global_zone > /dev/null 2>&1 ; then
       # In a global zone and system is mounted on /.
	## load_mods;
	##save_logindevperm;
	update_logindevperm;
       Execute_commands;
       return 0
   fi
   return 1
} 

if [ -x "$PKGCOND" ] ; then
   ExecuteInProperEnvironment && exit 0 || exit 1
else
   CheckZones
   if [ "${GLOBAL_ZONE}" = "true" ]; then
        Execute_commands
   else
        LocalZones
   fi
fi

exit 0

