Powered by SmartDoc

5 /etc/rc.d/sendmail 起動時に告知する修正

  1. /etc/mail/mailer.confがsemdmail仕様でない時にwarningを出す

    たとえば,

    /etc/rc.d/sendmail: WARNING: "sendmail->/usr/libexec/sendmail/sendmail" is not defined in /etc/mail/mailer.conf.

  2. 具体的な変更
    1. check_required_before関数にrequired_vars_defin_files変数を追加(/etc/rc.subr)

      diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr
      index 17ca904ff1e7..1816df26ef67 100644
      --- a/libexec/rc/rc.subr
      +++ b/libexec/rc/rc.subr
      @@ -2140,7 +2140,7 @@ find_system_scripts() {
       #
       check_required_before()
       {
      -	local _f
      +	local _f _vars
       
       	case "$1" in
       	start)
      @@ -2170,6 +2170,60 @@ check_required_before()
       				fi
       			fi
       		done
      +
      +		IFS=$'\n'
      +		for _f in $required_vars_defin_files; do
      +			_vars=${_f% *}
      +			_f=${_f##* }
      +			if [ ! -f "${_f}" ]; then
      +				warn "${_f} is not found."
      +				return 1
      +			fi
      +			_vars=$(awk -v vars="$_vars" -v file=$_f '
      +				BEGIN {
      +					n = split(vars, v, /[[:space:]]+/)
      +					for (i = 1; i <= n; i++) {
      +						split(v[i], w, /:/)
      +						var[w[1]] = w[2]
      +					}
      +					s = ""
      +					found = 0
      +				}
      +				{
      +					for (i in var) {
      +						if (match($0, "^" i "[[:space:]]+")) {
      +							t = substr($0, RSTART + RLENGTH)
      +							if (var[i] == t) {
      +								delete var[i]
      +								n--
      +								break
      +							}
      +						}
      +					}
      +					if (n <= 0) { 
      +						found = 1
      +						exit
      +					}
      +				}
      +				END {
      +					if (! found) {
      +						for (i in var) { s = s ? s " " i "->" var[i] : i "->" var[i] }
      +						if (n == 1) {
      +							print "\"" s "\" is"
      +						} else {
      +							print "\"" s "\" are"
      +						}
      +					}
      +					exit ! found
      +				}' $_f)
      +			if [ $? -ne 0 ]; then
      +				warn "${_vars} not defined in ${_f}."
      +				if [ -z "$rc_force" ]; then
      +					return 1
      +				fi
      +			fi
      +		done
      +		unset IFS
       		;;
       	esac

    2. /etc/rc.d/sendmailにrequired_vars_defin_filesでsendmail->/usr/libexec/sendmail/sendmailの対応を指定

      diff --git a/libexec/rc/rc.d/sendmail b/libexec/rc/rc.d/sendmail
      index 68803a957952..f14da832d8f2 100755
      --- a/libexec/rc/rc.d/sendmail
      +++ b/libexec/rc/rc.d/sendmail
      @@ -17,6 +17,7 @@ name="sendmail"
       desc="Electronic mail transport agent"
       rcvar="sendmail_enable"
       required_files="/etc/mail/${name}.cf"
      +required_vars_defin_files="${name}:/usr/libexec/${name}/${name} /etc/mail/mailer.conf"
       start_precmd="sendmail_precmd"
       
       load_rc_config $name