mopdの実装を調査するためにmopd/mopd.cを読んでみました。オリジナルのmopd-2.5.3が各OSの実装で変更されており、似たような変更を加えていますが、統一化が図られている訳ではないようです。
- mopd.cを見ると、MOPD(8)では説明されていないオプションが実装されています。ただしOpenBSD版のMOPD(8)では、そのオプションの説明が加えられています。またNetBSD版では、-sという新しいオプションが追加されています。
- オリジナル版では、大域変数Programを用いて、argv[0]からプログラム名を得ています。ところが他の実装では、関数getprogname()や変数__prognameを利用するように変更が加えられています。
- デーモンとして動作させるため、オリジナル版ではfork()を呼び出したりしていますが、他の実装ではdaemon()を利用するように変更が加えられています。
オリジナル版も他の実装にも、以下のような処理があります。このロジックならば、ForegroundFlagが指定されておらず、DebugFlagが指定されている場合に、このメッセージが出力されるという事です。しかしメッセージの「not running as daemon」と、ForegroudFlagが指定されていないという状態とが、整合していない気がします。
if ((!ForegroundFlag) && DebugFlag) {
fprintf(stdout, "%s: not running as daemon, -d given.\n", Program);
}
MOPD(8)では、SEE ALSOにbpf(4)が記載されています。BPFというのはBerkeley Packet Filterの事だという事しか知らないので、勉強しておこうと思います。
0 件のコメント:
コメントを投稿