トップ «前の日記(2004年07月21日 (水)) 最新 次の日記(2004年07月23日 (金))» 編集

*Messages*

Search

書いてる人: しまだみつのぶ (aka. simm, saica)

最新情報URL: https://gouketsu.net/simm/d/

"8024402C"でたどり着かれた方はこちら: 「壁の内側からWindowsUpdateに失敗する


2004年07月22日 (木) [長年日記]

1 [ruby][IRC] nadokaさん: "!"ではじまるチャネル

trunk*1のnadokaさん、"!"ではじまるチャネルがうまく扱えない模様。 どうやら、

  1. Channel_info に書いてあるチャネルにうまく自動joinできないことがある
  2. nadokaさんからクライアントに送られるチャネル名にchannelidがついている場合とついていない場合がある

模様。

channelid問題

以下の文章において、仮に、

  • channelidなしのチャネル名: "!などか"
  • channelidありのチャネル名: "!GORUAなどか"

として説明を行う。

再現方法

これは、次のような手順で再現可能。

  1. nadokaさん起動
  2. クライアントをnadokaさんに接続
  3. クライアントから "JOIN !などか" を送信 → クライアントは "!GORUAなどか" に join した旨メッセージを受け取る
  4. クライアントから "QUIT" を送信 → nadokaさんとクライアントが切断される
  5. 再びクライアントをnadokaさんに接続 → クライアントは "!などか" に join した旨メッセージを受け取る

この状態で、nadokaさんからクライアントが受け取るメッセージは "!などか" 宛ではなく "!GORUAなどか" になり、joinしていないチャネルに対してメッセージが送られることになってしまう。

また、この状態では "!などか" にjoinしていることになっているので、 PRIVMSG や MODE 等のメッセージは、クライアントから "!などか" 宛に送信することになるが、 nadokaさんからサーバに送信するメッセージが "!などか" のままなので、 存在しないチャネルに対してメッセージが送信されてしまう。

状況分析

どうやら、

  • サーバから送られ、nadokaさんをスルーするメッセージ: "!GORUAなどか"
  • サーバとの通信が発生しない、nadokaさんが生成するメッセージ: "!などか"

となる模様。 どうやら、nadokaさんは、canonical_channel_name で変換したチャネル名しか覚えていないようだ。

原因調査および対策

Nadoka::NDK_State#on_join 内で行っている ChannelState.new() に、 canonical_channel_name 後のチャネル名を与えているために起こっている模様。

この引数を canonical_channel_name 前のチャネル名にしてみたところ、 クライアントが受け取るメッセージに含まれるチャネル名はすべて "!GORUAなどか" となった。

自動join問題

channelid問題と同様、以下の文章において、仮に、

  • channelidなしのチャネル名: "!などか"
  • channelidありのチャネル名: "!GORUAなどか"

として説明を行う。

再現方法
Channel_info = { "!などか" => {:timing=>:startup} }

のように、!つきのチャネルに自動joinするよう設定を書いておく。 このとき、すでに "!GORUAなどか" が存在すれば問題ないが、 存在しない場合、joinできずに 403 (ERR_NOSUCHCHANNEL) が返ってくる。

原因調査

原因は簡単なことで、RFC2811 の 3.2 Safe Channels にあるように、 "!GORUAなどか" を作成するためには "JOIN !!などか" を送信する必要があるため。

対策

とりあえず 403 が返ってきた場合、 "!などか" が Channel_info に含まれているチャネル名であれば "JOIN !!などか" をサーバに送信するように変更してみた。 とりあえずはこれで自動joinできる。

ただし、この対策には副作用があり、"!GORUAなどか" にjoin後、 "!などか" 宛にメッセージを送信したら 403 が返ってくるため、 再度 "JOIN !!などか" が送信されてしまい、最終的に 407 (ERR_TOOMANYTARGETS) が返ってくる。

パッチ

とりあえず晒す

403関連の変更をやめれば、"!"prefixのチャネルを自動作成することはできなくなるが、 そのかわり、上記407の副作用は発生しない。

*1 revision 83

2 [rail] 乗車車両 (2004-07-22)

出勤

L04(8304) → DH02(5302)

帰宅: 国道櫟本よりバスにて天理駅まで

X56(8606) → ?+FL52(9302)


Information

更新情報取得方法

*Messages* の更新情報取得には、antenna.lirs もしくは index.rdfをご利用ください。 豪傑アンテナLIRSからも取得可能です。