質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

Dovecot

Dovecotとは、POPやIMAPサーバーを提供するMDA(メール配送エージェント)の一つです。

Q&A

0回答

1020閲覧

IMAP4のUID値が上限に達した時

ten_forward

総合スコア59

IMAP

IMAP (Internet Message Access Protocol) とは、メールサーバー上の電子メールデータを操作するためのプロトコルです。

Dovecot

Dovecotとは、POPやIMAPサーバーを提供するMDA(メール配送エージェント)の一つです。

0グッド

2クリップ

投稿2017/08/22 11:07

編集2017/08/23 08:35

RFC3501 に記載のある IMAP4 の UID は 32bit の値で、32bit の UIDVALIDITY と合わせて 64bit で永久に重複しないようにとなっています。

この UID について質問です:

  • この値が万が一 32bit 値を使いきった時にどうするかというのはどこかに定義されているのでしょうか?

セッションをまたいで UID の永続性が保てない場合は UIDVALIDITY を前より大きな値に変更できそうですが、RFC の記載はメッセージストアの性質上、UID を保持できないような場合には UIDVALIDITY をセッションごとに変えて、それまでの値と重複しないようにするための説明となっています。それとも 32bit の値なんて使いきるわけないという前提で考えられていない?

  • 世の中の IMAP4 サーバの実装でどうなっているかご存じであれば教えてください

dovecot の場合は以下のように特に使い切った時に何らかの方法で更新するというような処理が実装されておらず、単にエラー終了するだけに見えますが、どこかに UID/UIDVALIDITY をどうにかして引き続きメールボックスを使えるようにする実装があるでしょうか?

dovecot の実装

UID は uint32_t で定義されており、Next UID の値が UINT32_MAX となっているときに imap コマンドが実行されると maildir_uidlist_assign_uids 関数内の

i_assert(recs[dest]->uid == (uint32_t)-1);

というチェックでひっかかり、最後は lib/failures.cdefault_fatal_finish 内で呼ばれた abort()SIGABRT が飛んでプログラム終了です。Maildir のディレクトリ内には lock ファイルなどが残ったままになります。

以上は dovecot-uidlist の Next UID を手で書き換えてテストしたので、もしかしてそれでは処理できない対応が何か実装されていれば教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問