TPOPS

TPOPS は POP3 サーバです。RFC 1939 に準拠しています。 Ruby で実装されています。 サポートされているメールボックスは Maildir 形式です。 POP ログイン名やメールアドレスなどのユーザ情報は MySQL のテーブルで管理することもできます。

ダウンロード

必要なもの

インストール

  1. 適当なディレクトリに展開してください。
    # cd /usr/local
    # tar xpfvz /tmp/tpops-0.8.tar.gz
    # chown -R root:root tpops-0.8
    # ln -s tpops-0.8 tpops
    
  2. 必要に応じて tpops.conf を編集してください。

    設定できるパラメータは次の通りです。 これらのパラメータはコマンドライン上で --parameter=value としても記述できます。 コマンドラインでの指定が優先されます。

    パラメータ名デフォルト値意味
    標準パラメータ
    configなし(tpopsと同じディレクトリの tpops.conf) 設定ファイルを指定します。通常はコマンドラインで指定します。 設定ファイル中で指定してもおそらく意味はないでしょう。
    port または p110 tpops が listen するポート番号。 「ホスト名:ポート番号」の形式でホスト名を指定した時は、そのアドレスだけで listen します。
    hostnameなし(「uname -n」の結果) クライアントの接続時に最初に返されるメッセージ中に含まれるホスト名。
    connection-keep-time3600 最大接続維持時間(秒数)。 接続開始からこの時間が経過すると、オペレーション中であっても強制的に接続を切断します。
    command-timeout600 コマンド待ち時間(秒数)。 クライアントからこの時間入力がないと、接続を切断します。
    inetdなし 指定されている場合は inetd から起動されたものとして動作します。
    fgなし 指定されている場合はフォアグラウンドで動作します。
    versionなし 指定されている場合はバージョン情報を表示して終了します。
    debugなし 指定されている場合はクライアントのコマンドとサーバの応答をログに記録します。
    access-logなし アクセスログファイル名。
    error-logなし エラーログファイル名。
    pid-fileなし プロセスIDを記録するファイル名。
    user または uなし(親プロセスと同じ) 子プロセスの UID。passwd 認証に root 権限が必要なシステムでは、このパラメータを設定すると認証できません。
    group または gなし(親プロセスと同じ) 子プロセスの GID。
    syslogmail syslog ファシリティ名。syslog に記録しない場合は「none」を指定します。
    auth-typepasswd ユーザ認証方式。passwd, mysql のいずれかを指定します。
    mailbox-typemaildir メールボックス形式。maildir, proxy のいずれかを指定します。
    parallel-typeprefork 並列方式。prefork, fork, thread のいずれかを指定します。
    domain ログイン名に「@」「%」「+」のいずれも含まれてない場合に、「@domainname」をログイン名に追加して認証を試みます。
    error-interval5 クライアントからのコマンドがエラーになった場合に、エラーを返す前に遅延する秒数。
    min-servers5 最小子プロセス数。子プロセス数がこの値以下になると、この値になるまで子プロセスが起動されます。 parallel-type=prefork 時のみ有効。
    max-servers50 最大子プロセス数。子プロセス数はこの値以上にはなりません。
    max-use100 子プロセスが処理する接続数の最大値。この値を超えると子プロセスは終了します。 parallel-type=prefork 時のみ有効。
    max-idle100 最大接続待ち時間。接続終了後、この時間内に新たな接続がないと子プロセスは終了します。 parallel-type=prefork 時のみ有効。
    auth-type = passwd 時に有効なパラメータ
    apop-passwd-fileなし APOP 認証時に使用される ID とパスワードの対が DBM 形式で格納されたファイル名。指定された場合は、APOP が使用できます。
    maildirMaildir Maildir 形式のメール格納ディレクトリのユーザのホームディレクトリからの相対パス。
    auth-type = mysql 時に有効なパラメータ
    mysql-serverなし MySQLサーバ名。
    mysql-userなし MySQLログインユーザ名。
    mysql-passwdなし MySQLログインパスワード。
    mysql-dbなし MySQLデータベース名。
    mysql-auth-query select login,passwd,maildir from user where login="%s" ログイン名,パスワード,Maildir を取り出すためのクエリ文字列。 「%s」はクライアントから渡されたログイン名に置き換えられます。 「%u」はログイン名のローカルパート(@より左の部分)、 「%d」はログイン名のドメインパート(@より右の部分)に置き換えられます。 ログイン名に「@」が含まれていない場合は「%d」は空になります。
    mysql-crypt-passwdno データベースから取り出したパスワード文字列が暗号化されている場合、暗号化方式を指定します。 no 以外の値が設定されている場合は、APOP 認証はできません。 有効な値は、次の通りです。
    意味
    no平文パスワード。
    yescrypt, sha の順に試す。
    cryptOS の crypt() で暗号化されたパスワード
    shaSHA-1 で暗号化されたパスワード。 パスワード文字列の先頭に "{SHA}" がある場合はその部分を無視して比較します。
    mailbox-type = maildir 時に有効なパラメータ
    maildir-use-filesizeyes Maildir 形式で保存されているメールファイルのサイズを、メールのサイズとして扱います。 RFCに従わなくなる可能性があるので注意。
    maildir-extendedyes Maildir 形式で保存されているメールファイルのファイル名中に「S=数値」があれば、それをメールのサイズとして扱います。 maildir-use-filesize よりも優先されます。 RFCに従わなくなる可能性があるので注意。
    maildir-lockyes メールボックスをロックします。ログイン中は同じメールボックスを使用する ID ではログインできません。
    maildir-uidl-convertno Maildir/tpops_uidl ファイルがある場合に UIDL を変換します。 tpops_uidl ファイルの内容は「ファイル名<TAB>UIDL」の行のリストです。
    mailbox-type = proxy 時に有効なパラメータ
    pop-serverlocalhost:10110 接続先POPサーバを指定します。
  3. auth_type = mysql の場合

    MySQL に TPOPS 用のデータベースを作成し、tpops_auth-mysql.sql を使用してテーブルを作成してください。

    % mysqladmin create tpops
    % mysql tpops < tpops_auth-mysql.sql
    

起動

  1. スタンドアロンの場合(デフォルト) /usr/local/tpops/tpops を実行します。
  2. inetd を使用する場合

    /etc/inetd.conf に次のように記述します。

    pop3	stream	tcp	nowait	root	/usr/local/tpops/tpops	tpops --inetd

    その後 inetd プロセスに HUP シグナルを通知します。

シグナル

SIGTERM を受信すると終了します。 処理中の子プロセスは処理が終わるまで終了しません。

SIGHUP を受信すると、子プロセスを終了させ、tpops.conf を再読み込みします。 処理中の子プロセスは処理が終わるまで終了しません。 tpops.conf ファイル中の記述よりもコマンドラインで指定したオプションが優先されます。

SIGINT を受信すると終了します。

ユーザ登録

  1. auth-type = passwd の場合(デフォルト)

    OS にユーザを登録してください。 メールボックスは、ユーザのホームディレクトリ直下の 'Maildir' が使用されます。

    APOP を使用する場合は、tpops.conf 内に apop-passwd-file を設定してください。 APOP 使用時にはこのファイルから、パスワードが検索されます。 ここで指定するファイルの内容は、ログイン名をキーとしてプレーンパスワードを得られるような DBM 形式です。

    DBM 形式ファイルの編集には、tpops_passwd コマンドを使用できます。

    コマンド説明
    tpops_passwd pwdfile id passwordpwdfile に ID とパスワードを追加する
    tpops_passwd -f filename pwdfilefilename からIDとパスワードのリストを読み込み pwdfile に追加する
    tpops_passwd -d id pwdfilepwdfile から ID を削除する
    tpops_passwd -l pwdfilepwdfile 内の ID とパスワードをリストする
  2. auth-type = mysql の場合

    user テーブルにユーザ情報を登録してください。

    フィールド名
    uidユーザID(数値)
    loginPOPログイン名
    passwdPOPパスワード
    mailメールアドレス
    maildirMaildir の場所

ログファイル

tpops.conf で access-log を指定すると、ログアウト時に指定したファイルにログを書き込みます。 ログの形式は次の通りです。

接続元IP ログイン日 時刻 ログアウト日 時刻 ログイン名 ログイン時メッセージ数 ログイン時メッセージサイズ ログアウト時メッセージ数 ログアウト時メッセージサイズ

syslog を指定すると、指定したファシリティで syslog にログを書き出します。 syslog はファシリティを表わす文字列です。

Maildir 形式を使用する場合の注意

qmail や Postfix の Maildir 形式では、メッセージの改行コードが "\n" としてファイルに格納されます。 しかし POP プロトコルでは改行コードは "\r\n" に定められています。 LIST コマンドなどで通知されるメッセージサイズも POP プロトコル上は、改行コードを2バイトとしてカウントする必要があります。 そのため、メッセージサイズを得るだけでも、メッセージファイルを読み、改行コードを調べる必要があります。

(qmail に付属の qmail-pop3d はこの処理をサボって、ファイルサイズを返しているため、RFC 的には正しくありません。)

Maildir++ 形式のファイル名でメッセージを格納するメール配送エージェントを使用すれば、ファイル名にメッセージサイズが含められているので、ファイルの内容をチェックする必要がなく、高速に処理できます。 メールファイルが Maildir++ 形式のファイル名の場合は、TPOPS は自動的にファイル名からサイズを得ようとします。この動作を無効にしたい場合は tpops.conf に「maildir-extended = no」を設定してください。

ファイル名が Maildir++ 形式でない場合は、ファイルサイズをメッセージサイズとして使用することで高速に処理しようとします(qmail と同じ手法)。 この動作を無効にしたい場合は tpops.conf に「maildir-use-filesize = no」を設定してください。 ただし、メッセージサイズを調べるために、メッセージファイルの内容を読み出すため、遅くなります。注意してください。

注意

正常に動作することを期待して作られていますが、不具合がないことは保証できません。 重要なメールデータが失われたとしても私は責任を負えません。 十分テストした上でご使用ください。

ライセンス

このプログラムは Ruby ライセンスに従います。

履歴

0.8 2006-01-26
0.7.2 2006-01-26
0.7.1 2005-07-22
0.7 2005-07-08
0.6.5 2004-10-26
0.6.4 2004-10-08
0.6.3 2004-09-23
0.6.2 2004-09-05
0.6.1 2004-07-16
0.6 2004-06-11
0.5.6 2004-03-23
0.5.5 2004-03-18
0.5.4 2003-09-10
0.5.3a 2003-04-27
0.5.3 2003-04-17
0.5.2 2003-01-24
0.5.1 2003-01-18
0.5.0 2002-12-04
0.4.8 2002-11-20
0.4.7 2002-11-07
0.4.6a 2002-08-16
0.4.6 2002-08-16
0.4.5 2002-08-01
0.4.4 2002-07-03
0.4.3 2002-06-27
0.4.2 2002-04-21
0.4.1 2002-04-11
0.4 2002-03-21
0.3.3 2002-02-27
0.3.2 2002-02-25
0.3.1 2002-01-29
0.3 2002-01-25
0.2.2 2001-12-28
0.2.1 2001-08-01
0.2 2001-07-12
0.1 2001-05-20

とみたまさひろ

Last modified: Thu Jan 26 20:09:11 JST 2006