CTM_MAIL(1) FreeBSD 一般コマンドマニュアル CTM_MAIL(1)
名称
ctm_smail, ctm_dequeue, ctm_rmail − メールを介しての ctm(1) デルタの送受 信 |
書式
ctm_smail [−l log] [−m maxmsgsize] [−c maxctmsize] [−q queue-dir] ctm-delta mail-alias |
ctm_dequeue [−l log] [−n numchunks] queue-dir |
ctm_rmail [−Dfuv] [−l log] [−p piecedir] [−d deltadir] [−b basedir] [file ...] |
解説 |
ctm_smail, ctm_dequeue, ctm_rmail は ctm(1) コマンドと組み合わせて、ソー スツリーへの変更を電子メールで配布するために使われます。 ctm_smail ユー ティリティには圧縮した ctm(1) のデルタとそれを送るメーリングリストを与え ます。するとデルタを送信できる大きさに切り分けて、メールメッセージとして エンコードしたものをメーリングリストに送ります (メールの負荷を分散させる ためにキューに入れるように選択できます)。各受信者は ctm_rmail を使い (手 動または自動で) デルタのデコードと再組み立てを行い、それをソースツリーに 適用するために ctm を呼び出すようにも指定できます。現在、いくつかのソース ツリーが、いくつかのサイトによって配布されています。その中には freefall.FreeBSD.org が配布している FreeBSD-current のソースと CVS のツ リーもあります。 ctm_smail のコマンドラインの引数には以下があります: |
−l log
stderr に出力する代わりに、 (コマンドラインのエラー以外の) エラー 診断と情報メッセージにタイムスタンプを付けた物がファイル log に書 き込まれます。 −m maxmsgsize −c maxctmsize −q queue-dir ctm-delta は送信されるデルタで、 mail-alias はデルタを送信するメーリング リストです。メールメッセージは sendmail(8) を使って送信されます。 ctm_dequeue のコマンドラインの引数には以下があります: −l log −n numchunks queuedir は ctm_smail が格納したメールメッセージのあるディレクトリです。 numchunks 個までのメールメッセージが実行ごとに送信されます。受信者のメー リングリストは、溜められたファイルにすでにエンコードされています。 ctm_smail がキューにエントリを追加している最中や、複数の ctm_smail を並行 に実行している最中でも ctm_dequeue を安全に実行できますが、配布される各ツ リーごとに独立したキューのディレクトリを使うべきです。これはエントリがア ルファベット順に処理されるので、デルタの作成時刻ではなく、デルタ名に従っ て 1 つのツリーが他の物より前に処理されて不公平になるからです。 ctm_rmail のコマンドラインの引数には以下があります: −l log −p piecedir −d deltadir −b basedir −D −f −u −v 引数のファイル (もし無ければ 標準入力 ) がデルタのかけらとしてスキャンさ れます。 1 つのファイルから複数のデルタのかけらを読む事ができるので、メー ルドロップ全体を 1 回のコマンドでスキャンして処理できます。 ctm_rmail を並行に (異なる入力ファイルで) 複数回起動しても安全です。 sendmail がメールを非同期に配送した時にこのようなことが起こり得ます。これ は処理を順序通りに保つためにロックが行われているからです。 ファイルフォーマット |
以下は実際の (とても小さい) デルタのかけらの重要部分です: From: owner-src-cur To: src-cur Subject: ctm-mail src-cur.0003.gz 1/4 CTM_MAIL BEGIN src-cur.0003.gz 1 4 H4sIAAAAAAACA3VU72/bNhD9bP0VByQoEiyRSZEUSQP9kKTeYCR2gDTdsGFAwB/HRogtG5K8NCj6 v4+UZSdtUQh6Rz0eee/xaF/dzx8up3/MFlDkBNrGnbttAwyo1pxoRgoiBNX/QJ5d3c9/X8DcPGGo lggkPiXngE4W1gUjKPJCYyk5MZRbIqmNW/ASglIFcdwIzTUxaAqhnCPcBqloKEkJVNDMF0Azk+Bo dDzzk0Ods/+A5gXv9YyJHjMCtJwQNeESNma7hOmXDRxn CTM_MAIL END 61065 メッセージのサブジェクトは常に ‘‘ctm-mail’’ で始まりデルタの名前、いくつ 目のかけらか、そして全部でいくつのかけらがあるのかが続きます。データは ‘‘CTM_MAIL BEGIN’’ と ‘‘CTM_MAIL END’’ という行で囲まれており、サブジェク ト行の情報の複製、加えて単純なチェックサムが付きます。 デルタが maxctmsize を超えると、代わりに以下のようなメッセージが送られま す: From: owner-src-cur To: src-cur Subject: ctm-notice src-cur.0999.gz src-cur.0999.gz is 792843 bytes. The limit is 300000 bytes. このデルタは ftp から得られます。 これでもうあなたのものです! |
使用例
src-cur の 32 番目のデルタを src-guys として sendmail に登録されている素 晴らしいコードハッカーのグループに、メールのサイズをおよそ 60000 バイトに 制限して送るためには以下のように出来ます: ctm_smail -m 60000 /wherever/it/is/src-cur.0032.gz src-guys メールボックスの各 ctm-mail メッセージをデコードして、それらを完全なデル タに組み立て、そして出来上がったデルタやそこらに転がっているデルタはどれ も、以下のように適用出来ます: ctm_rmail -p ~/pieces -d ~/deltas -b /usr/ctm-src-cur $MAIL ( ctm_rmail はメッセージを削除しないので注意して下さい。削除には どんな メールリーダでも使用できます。) receiver-dude という名前の自動的にデコードとデルタの組み立てを行うけれど も、それらの適用は行わないようなメールエイリアスは、以下の行を /etc/mail/aliases ファイルに入れる事で作成可能です ( /ctm/tmp と /ctm/deltas ディレクトリ そして /ctm/log ファイルが daemon ユーザか wheel グループで書き込み可能な事を仮定しています) : receiver-dude: "|ctm_rmail -p /ctm/tmp -d /ctm/deltas -l /ctm/log" owner-receiver-dude: real_dude@wherever.you.like 2 行目は、失敗した場合にそれを通常のメールボックスか、またはどこか好きな 所へ転送するためにあります。 集められた全デルタを適用して、適用したものを削除するには以下のようにしま す: ctm_rmail -D -d /ctm/deltas -b /ctm/src-cur -l /ctm/apply.log 柔軟性を最大限生かすためには、この procmail スクリプトからの引用の利用を 考えてみて下さい: PATH=$HOME/bin:$PATH :0 w * ^Subject: ctm-mail cvs-cur | ctm_incoming 以下のシェルスクリプト ~/bin/ctm_incoming と一緒に使います: #! /bin/sh PATH="$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin" export PATH cd $HOME/ctm && ctm_rmail -f -p pieces -d deltas -l log -b /ctm これは全部の ctm デルタを ~/ctm/deltas に置き、それらを /ctm 内のツリーに 適用し、失敗したものは、すべてあなたの通常のメールボックスに落します。 ctm_incoming での PATH の操作は、このサンプルを取って来た ( FreeBSD でな い) マシンで ctm_rmail から ctm(1) の実行を可能にするためのものです。 |
セキュリティ
CTM 自身、安全ではないプロトコルです - ソースコードへ加えられた修正が信頼 できるところから送られたことを認証しませんので、通常の電子メール等の信頼 できない媒体から CTM デルタを得た場合には注意が必要です。 CTM デルタを偽 造して、正当なものを交換または上書きし、悪意あるコードをあなたのソースツ リーに挿入することは、攻撃者にとって比較的簡単です。正当なデルタの到着が なんらかの方法で妨げられた場合、これを感知できるのは、後のデルタが同じ ファイルを触ろうとする時点です。この時点で、MD チェックサムが失敗します。 これを回避して安全なものにするために、 FreeBSD.org が作った CTM 部品に は、 GNU Privacy Guard ユーティリティ互換なフォーマットで暗号的に署名して います。このユーティリティは /usr/ports/security/gpg および Pretty Good Privacy v5 ユーティリティ /usr/ports/security/pgp5 から入手できます。適切 な公開鍵は ctm@FreeBSD.org を finger することで得られます。 このように署名された CTM デルタは、検知されることなく攻撃者が改変すること はできません。それゆえ、CTM デルタを電子メールで受信する場合には、 GPG ま たは PGP5 を使用して署名を確認することを勧めます。 |
環境変数
関連ファイル
QUEUEDIR/*
メールメッセージとしてエンコードされて、メーリングリストに送信さ れるのを待っているデルタのかけら。 PIECEDIR/* DELTADIR/* BASEDIR/.ctm_status 診断 |
ctm_smail, ctm_dequeue, ctm_rmail ユーティリティは正常に終了するとステー タスとして 0 を、何らかの障害があった場合は 1 を返します。 ctm_rmail ユー ティリティは、メールの配送プログラムから呼ばれる事を想定しています。そし てそのため入力されたメールメッセージが (送信者にではなく、なるべく あなた の通常のメールドロップに) 返送されるべき状態になった時にのみ障害を通知す るようになっています。いいかえれば、完成したデルタを ctm で適用する際に発 生した障害はメールを返送する程に重要なエラーではないと判断されて、 ctm_rmail は終了ステータスとして 0 を返すということです。 通常の操作では、 ctm_smail は以下のようなメッセージで報告します: ctm_smail: src-cur.0250.gz 1/2 sent to src-guys または、キューに入れたなら、 ctm_smail: src-cur.0250.gz 1/2 queued for src-guys ctm_dequeue ユーティリティは以下のようなメッセージで報告します: ctm_dequeue: src-cur.0250.gz 1/2 sent ctm_rmail ユーティリティは以下のようなメッセージで報告します: ctm_rmail: src-cur.0250.gz 1/2 stored ctm_rmail: src-cur.0250.gz 2/2 stored ctm_rmail: src-cur.0250.gz complete もし入力ファイルのいずれもが正しいデルタのかけらを含んでいないと、 ctm_rmail は以下のように報告します: ctm_rmail: message contains no delta そして終了ステータスとして 1 を返します。もしメールフィルタが当てにならな いのなら、これを使って気まぐれなメッセージをリダイレクトして本当のメール ボックスに入れる事ができます。 これらのメッセージは stderr かログファイルに出力されます。 ctm(1) からの メッセージも同様にここに現れます。エラーメッセージは それ自身が説明的であ るべきです。 |
関連項目
作者
Stephen McKay <mckay@FreeBSD.org> |
日本語訳
野首 寛高 (h-nokubi@nmit.mt.nec.co.jp): FreeBSD 用に翻訳 FreeBSD 10.0 January 24, 1995 FreeBSD 10.0 |