Re: Announce /etc/rc.d/sendmail does not work in default should be made at use time.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 02 Sep 2023 06:25:35 UTC
Hi, lists
On Mon, 21 Aug 2023 20:25:22 +0900,
Christoph Moench-Tegeder wrote:
>
> ## KIRIYAMA Kazuhiko (kiri@truefc.org):
>
> > But there are nothing pointers to be changed default MTA
> > changed to dma from sendmail ;-(
>
> There is: UPDATING 20221205.
To aware default MTA is dma, I added
required_vars_defin_files variable used by
check_required_before function in /etc/rc.subr.
For example in this sendmail case, required_vars_defin_files
defines in /etc/rc.d/sendmail like this:
required_vars_defin_files="sendmail:/usr/libexec/sendmail/sendmail /etc/mail/mailer.conf"
This means "If sendmail -> /usr/libexec/sendmail/sendmail
does not define in /etc/mail/mailer.conf, warn this".
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
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
Regards
---
Kazuhiko Kiriyama