home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / encrypt / install / postinstall < prev    next >
Text File  |  1998-08-19  |  5KB  |  173 lines

  1. #!/bin/sh
  2. #
  3. #       @(#) postinstall.shinc 12.4 97/11/17 
  4. #
  5. # Copyright (c) 1997 The Santa Cruz Operation, Inc.. All Rights Reserved.
  6. # THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE SANTA CRUZ OPERATION INC.
  7. # The copyright notice above does not evidence any actual or intended
  8. # publication of such source code.
  9. ME="`basename $0`"
  10. ISL_FILE="/etc/inst/scripts/postreboot.sh"
  11. SUCCESS=0; FAIL=1; INTR=3
  12. trap "exit $INTR" 2 3 15
  13. [ -f $ISL_FILE ] && exec 1>>/var/adm/log/$PKGINST.out
  14. [ -f $ISL_FILE ] && exec 2>>/var/adm/log/$PKGINST.err
  15.  
  16. # location of the packaging information files during this phase of installation
  17. INSTALL_DIR="/var/sadm/pkg/$PKGINST/install/$PKGINST"
  18.  
  19. # included standard routines
  20. #############################################################################
  21. #
  22. #    @(#) replace_with_newer.sh_h 12.2 97/10/27 
  23. #
  24. # Standard routine to update the /etc/encrypt_config script with the
  25. # one held in this package if, and only if, it can be determined that
  26. # the one held in this package is at a later SCCS revision level.
  27. #
  28. # The routine uses what(C,1) to decide which file is the newer.  Missing
  29. # numbers in the SCCS R.L.B.S versioning are assumed to be 0.  A file
  30. # with no SCCS ID at all in it is assumed to be at 0.0.0.0.
  31. #
  32. # Arguments are:
  33. #
  34. #    $1    - PKGINST
  35. #    $2    - action: 'test' or 'update'
  36. #    $3    - path to the original file
  37. #    $4    - path to the file to update it with
  38. #    $5    - mode of the 'new' file
  39. #    $6    - owner of the 'new' file
  40. #    $7    - group of the 'new' file
  41. #
  42. # Return values are:
  43. #
  44. #    0    - success; the file was upgraded if $2 is 'update', the
  45. #          file should be updated if $2 is 'test'
  46. #    1    - failure; the file is as new or newer than the replacement
  47. #          we have for it
  48. #
  49. # Also uses:
  50. #
  51. #    $ME    - name of the shell script calling the routine
  52. #    $SUCCESS- success value 0
  53. #    $FAIL    - error value 1
  54. #############################################################################
  55. replace_with_newer()
  56. {
  57.     pkginst="$1"
  58.     action="$2"
  59.     original_file="$3"
  60.     shipped_file="$4"
  61.     mode="$5"
  62.     owner="$6"
  63.     group="$7"
  64.  
  65.     # first, decide whether to update the file at all
  66.     update=0
  67.     if [ ! -f $shipped_file ]; then
  68.         echo "$ME: can't find $shipped_file" >&2
  69.         return $FAIL
  70.     fi
  71.     if [ ! -f $original_file ]; then
  72.         update=1
  73.     else
  74.         # find the SCCS IDs of both files
  75.         set -- `what $original_file | awk 'NR==2 { print $2 }' \
  76.                 | awk -F'.' '{ print $1" "$2" "$3" "$4 }'`
  77.         oR=$1; oL=$2; oB=$3; oS=$4
  78.         [ -z "$oR" ] && oR=0; [ -z "$oL" ] && oL=0
  79.         [ -z "$oB" ] && oB=0; [ -z "$oS" ] && oS=0
  80.         set -- `what $shipped_file | awk 'NR==2 { print $2 }' \
  81.                 | awk -F'.' '{ print $1" "$2" "$3" "$4 }'`
  82.         sR=$1; sL=$2; sB=$3; sS=$4
  83.         [ -z "$sR" ] && sR=0; [ -z "$sL" ] && sL=0
  84.         [ -z "$sB" ] && sB=0; [ -z "$sS" ] && sS=0
  85.  
  86.         # now compare the SCCS releases
  87.         [ $sR -gt $oR ] && update=1
  88.         [ $sR -eq $oR -a $sL -gt $oL ] && update=1
  89.         [ $sR -eq $oR -a $sL -eq $oL -a $sB -gt $oB ] && update=1
  90.         [ $sR -eq $oR -a $sL -eq $oL -a $sB -eq $oB -a $sS -gt $oS ] && update=1
  91.     fi
  92.  
  93.     if [ "$action" = "test" ]; then
  94.  
  95.         # return a value based on what we found out about the
  96.         # file's comparative SCCS versions
  97.         if [ $update -eq 1 ]; then
  98.             return $SUCCESS
  99.         else
  100.             return $FAIL
  101.         fi
  102.  
  103.     else
  104.  
  105.         # if updating then copy over the file and update our packaging
  106.         # to reflect the fact that we now (jointly?) own this item
  107.         if [ $update -eq 1 ]; then
  108.  
  109.             # copy the file, and update packaging; note that we
  110.             # make it volatile so that pkgchk won't complain if
  111.             # someone else installs a newer version later
  112.             cp $shipped_file $original_file
  113.             chmod $mode $original_file
  114.             chown $owner:$group $original_file
  115.             installf $pkginst $original_file v $mode $owner $group
  116.  
  117.             # return file updated status
  118.             return $SUCCESS
  119.         else
  120.  
  121.             # adopt joint ownership of the file that's there
  122.             # so that it isn't removed while we remain installed
  123.             chmod $mode $original_file
  124.             chown $owner:$group $original_file
  125.             installf $pkginst $original_file v $mode $owner $group
  126.  
  127.             # return no change status
  128.             return $FAIL
  129.         fi
  130.     fi
  131.  
  132.     # don't forget to run installf -f and removef -f before your
  133.     # installation script exits
  134.  
  135.     echo "$ME: internal error - replace_with_newer: no valid end condition" >&2
  136.     return $FAIL
  137. }
  138.  
  139.  
  140.  
  141.  
  142. #############################################################################
  143. #
  144. # main
  145. #
  146. #############################################################################
  147.  
  148. # install our encrypt_config if it is newer
  149. if [ -f $INSTALL_DIR/encrypt_config ]; then
  150.     replace_with_newer $PKGINST update /usr/sbin/encrypt_config \
  151.             $INSTALL_DIR/encrypt_config 700 root sys
  152.     ln -f /usr/sbin/encrypt_config /etc/encrypt_config
  153.     installf $PKGINST /etc/encrypt_config=/usr/sbin/encrypt_config
  154. fi
  155.  
  156. # no more files to add or remove
  157. removef -f $PKGINST
  158. installf -f $PKGINST
  159.  
  160. # now run encrypt_config to reset the links for all of the packages
  161. # that installing the strong encryption license affects
  162. if [ -x /usr/sbin/encrypt_config ]; then
  163.     /usr/sbin/encrypt_config
  164. else
  165.     echo "$ME: can't find or run /usr/sbin/encrypt_config" >&2
  166.     exit $FAIL
  167. fi
  168.  
  169. # done
  170. exit $SUCCESS
  171.