[PREVIOUS CHAPTER]
[NEXT CHAPTER]
Appendix A C Wrapper
Appendix A.1 C wrapper (:include: が使えない場合)
:include: 構文が使えない OS もしくは古い sendmail の場合は C wrapper
を使う必要があります。
C wrapper は setuid して使います。setuid された program の引数でfml.pl
を渡すとかいうことはしてはいけません。
#そういうことをする外国のソフトがあるようですが…何考えてるんだろ
makefml newml すると見本の fmlwrapper.c を作ってくれているのでそれを
compile して、fml-wrapper 作をります($DIRでmake)。 fml-ctl-wrapper は
listname-ctl 用です。
fmlwrapper.c は環境に併せて変更されていますが一応確認はしてみてください。
fmlwrapper.c には実行する内容が hard coding されているので必要なら直接 edit
して下さい。
Example:
% cd /var/spool/ml/elena
% make fml
cc -o fml fmlwrapper.c
chmod 4755 fml
cc -DCTLADDR -o fml-ctl fmlwrapper.c
chmod 4755 fml-ctl
(It is preferable to do "chmod 4555")
作成後 fml, fml-ctl をroot しか書けない場所へインストール。
[解説]
fmlwrapper.c の内容は
fml.plの場所 config.phのある場所 ライブラリの場所
を exec する C の program というだけのものです。ようするに include ファ
イルの中でやることと同じことを書きます。ちがうのは setuid() をするのが
sendmail ではなくこの fmlwrapper.c であることだけです。
例: fmlwrapper.c
execl("/usr/local/fml/fml.pl", /* 本体 fml.pl はどこ? */
"(fml)",
"/var/spool/ml/Elena", /* config.ph は どこ? */
"/usr/local/fml", /* fml package の library はどこ? */
NULL);
fml-ctl-wrapper では
execl("/usr/local/fml/fml.pl", /* 本体 fml.pl はどこ? */
"(fml)",
"/var/spool/ml/Elena", /* config.ph は どこ? */
"/usr/local/fml", /* fml package の library はどこ? */
"--ctladdr", /* --ctladdr == コマンドモード */
NULL);
になります。listname-ctl の方には fml-ctl を設定します。
Appendix A.2 C wrapper program fml on 4.3BSD
:include: 構文が使えない時は、setuid された fml という C の wrapper
program を経由して
/usr/local/fml/fml.pl $DIR $LIBDIR
を実行するという設定をします。makefml を使えば各メーリングリストごとに
専用の fmlwrapper.c が作成されています。その directory で
% make fml
とすると作成されます。fmlwrapper.c の中で fml.pl directory ... という形で呼ぶ
ようになってます。
[PREVIOUS CHAPTER]
[NEXT CHAPTER]