/etc/mail/mailer.confがsemdmail仕様でない時にwarningを出す
たとえば,
/etc/rc.d/sendmail: WARNING: "sendmail->/usr/libexec/sendmail/sendmail" is not defined in /etc/mail/mailer.conf.
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
/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