SMTPのセッションにおいてユーザ名とパスワードを読み取るプログラム
qmail-smtpup hostname subprogram smtpd
hostname はCRAM-MD5方式の認証に用いるチャレンジの文字列のホスト名である。
subprogram はqmail-smtpupからユーザ名とパスワードを受け取って認証を行うプログラムである。
smtpd はsmtpデーモンのプログラムであり、qmail-smtpd が用いられる。
qmail-smtpupはデフォルトでは平文認証を許可しない。環境変数 ALLOWPLAIN を設定すると平文認証を利用できるようになる。
tcpserverのアクセス制御の機能を利用して、特定のIPアドレスからのアクセスの場合のみにこの環境変数を設定して平文認証を認めるといったような運用も可能である。ただし、平文認証は常に盗聴される可能性があることに注意してください。
環境変数 FORCEAUTH が設定されていると認証なしにメールを送ることができない。クライアントからの中継専用のサーバにおいて送信を厳しく制限したい場合に設定する。ただし、外部からメールを受け取るサーバに指定してはいけないことに注意してください。
qmail-smtpupはSMTPセッションのユーザ名とパスワードを読み取り、subprogramを起動させる。
qmail-smtpupはたいてい次のようにinetdやtcpserverから起動される。ここで、CHANGEMEはローカルホストの完全修飾ドメイン名に置き換えられる。
qmail-smtpup CHANGEME checkpassword qmail-smtpd
qmail-smtpupはネットワークからデータを読むために記述子0を、ネットワークに書き出すために記述子1を用いる。SMTPセッションのELHOコマンドから取得したホスト名を環境変数HELOHOSTに設定する。この次にMAIL FROMコマンドが送られた場合は認証を行わないと判断し、環境変数MAILARGにこのコマンドの引数のメールアドレスを、環境変数AUTHSTATEを0に設定し、smtpdを起動させる。AUTHコマンドが送られた場合は認証の応答によりユーザ名とパスワードを読み取る。そして、環境変数AUTHSTATEを1に設定後、同じ記述子0と1を伴ってsubprogramを起動させる。このとき、「ユーザ名」, 0, 「パスワード」, 0, 「ホスト名から得られるCRAM-MD5のタイムスタンプ」, 0を記述子2に書き込み、subpprogramは記述子3からこの情報を読み取る。qmail-smtpupはsubprogramが終了するのを待つ。subprogramがクラッシュするか0以外の終了コードを返したらエラーメッセージを出力する。
qmail-smtpupはアイドル時間20分である。
qmail-smtpupはEric M. Johnsonによって提供されたプログラムを基にしている。