1 #!/sbin/sh
   2 #
   3 # CDDL HEADER START
   4 #
   5 # The contents of this file are subject to the terms of the
   6 # Common Development and Distribution License (the "License").
   7 # You may not use this file except in compliance with the License.
   8 #
   9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10 # or http://www.opensolaris.org/os/licensing.
  11 # See the License for the specific language governing permissions
  12 # and limitations under the License.
  13 #
  14 # When distributing Covered Code, include this CDDL HEADER in each
  15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16 # If applicable, add the following below this CDDL HEADER, with the
  17 # fields enclosed by brackets "[]" replaced with your own identifying
  18 # information: Portions Copyright [yyyy] [name of copyright owner]
  19 #
  20 # CDDL HEADER END
  21 #
  22 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23 # Use is subject to license terms.
  24 
  25 DEFAULT_FILE="/etc/default/sendmail"
  26 SENDMAIL="/usr/lib/sendmail"
  27 PATH="/usr/bin:/usr/sbin:/usr/ccs/bin"
  28 export PATH
  29 
  30 check_queue_interval_syntax()
  31 {
  32         default="15m"
  33         if [ $# -lt 1 ]; then
  34                 answer=$default
  35                 return
  36         fi
  37         if echo $1 | egrep '^([0-9]*[1-9][0-9]*[smhdw])+$' >/dev/null 2>&1; then
  38                 answer=$1
  39         else
  40                 answer=$default
  41         fi
  42 }
  43 
  44 check_and_kill()
  45 {
  46         PID=`head -1 $1`
  47         kill -0 $PID > /dev/null 2>&1
  48         [ $? -eq 0 ] && kill $PID
  49 }
  50 
  51 exist_or_exit()
  52 {
  53         if [ ! -f $1 ]; then
  54                 echo "$1 does not exist" >&2
  55                 exit $SMF_EXIT_ERR_CONFIG
  56         fi
  57 }
  58 
  59 turn_m4_crank()
  60 {
  61         # expected to be called with two arguments: .cf path & path to m4 file
  62         [ $# -lt 2 ] && return
  63         cf_path=$1
  64         m4_path=$2
  65         if [ "$m4_path" = "_DONT_TOUCH_THIS" ]; then
  66                 if [ -f "${cf_path}.old" ]; then
  67                         mv "$cf_path" "${cf_path}.new"
  68                         [ $? -ne 0 ] && exit $SMF_EXIT_ERR_CONFIG
  69                         mv "${cf_path}.old" "$cf_path"
  70                         [ $? -ne 0 ] && exit $SMF_EXIT_ERR_CONFIG
  71                 fi
  72                 #
  73                 # If ${cf_path}.old does not exist, assume it was taken care
  74                 # of on a previous run.
  75                 #
  76         else
  77                 case "$m4_path" in
  78                 /*)     ;;      # absolute path
  79                 *)      return;;
  80                 esac
  81                 exist_or_exit "$m4_path"
  82                 cd `dirname "$m4_path"`
  83                 base=`basename "$m4_path"`
  84                 name=`basename "$m4_path" .mc`
  85                 info=`svcprop -p config/include_info $SMF_FMRI 2>/dev/null`
  86                 if [ "$info" = "true" ]; then
  87                         m4flags=""
  88                 else
  89                         m4flags="-DSUN_HIDE_INTERNAL_DETAILS"
  90                 fi
  91                 m4 $m4flags /etc/mail/cf/m4/cf.m4 "$base" > "${name}.cf"
  92                 [ $? -ne 0 ] && exit $SMF_EXIT_ERR_CONFIG
  93                 cmp -s "${name}.cf" "$cf_path" || (
  94                         cp "${name}.cf" "${cf_path}.tmp" &&
  95                         chown root:bin "${cf_path}.tmp" &&
  96                         chmod 444 "${cf_path}.tmp" &&
  97                         mv "${cf_path}.tmp" "$cf_path"
  98                 )
  99                 [ $? -ne 0 ] && exit $SMF_EXIT_ERR_CONFIG
 100         fi
 101 }