2002-11-08の記事、famao曰く [長年日記]

(TT) libxml2

 xmlXPathEval 関数を利用して NodeSet を取り出した時に、最初の10個までは 0 で初期化してくれているが、それ以上の数の Node があった場合には 0 にはしてくれない. したがって
for (node = nodeset->nodeTab[0]; node; node = nodeset->nodeTab[i]) {
   ...
   i++
}
というコードでは煮つまる可能性がある.
for (node = nodeset->nodeTab[0]; i < nodeset->nodeNr; node = nodeset->nodeTab[i] {
   ...
   i++;
}
といった感じにすべき.

(TT) libskk

  • skk-jisyo
  • skk-okuri-jisyo
あたりを実装.詳しい解説は後程.

(TT) iiimf-skk における個人辞書サポート

 について書いておきます.iiimf-skkで個人辞書のサポートをするためには考慮しなくてはいけない事があって、まず
  • htt_server が通常 root 権限で動作する事
  • iiimf-skk 側からは、ユーザ名、ホスト名等がわかるだけであってどのような手段で認証されたかわからない事
を考慮しなくてはなりません. htt_server 自体は、認証方式として
  • pam を使った認証
  • libwrap (hosts.allow,hosts.deny) を使った認証
  • 設定ファイル (htt.conf) を使った認証
の3つが利用できるのですが、iiimf-skk側ではどの認証方式を利用して認証されたのわからないのです. 仮に認証方式が iiimf-skk 側でわかるのであれば、pam で認証された場合にファイルの書き込みを許可する、といった方針も可能なのですが、わからないために
  • 他のホストからシステムにたまたま存在するユーザを指定して iiimf-skk に接続
された場合に
  • 個人辞書を勝手に利用される「可能性」があります
また、root権限のままファイルを書き込んだりした場合に、システムを破壊される可能性があります.そのため、今まで個人辞書のサポートをせずに、1回のセッションだけメモリ上に DB を確保して使いすててきたわけです.(そのため、少なくとも0.1.20.7のバージョンでは、2chで指摘されていたような外部から辞書にいたずらできる、といった事はありません.htt_server では、同じユーザ名でも、接続するホストが違ったりDISPLAYが違ったりする場合には、同一のセッションとはあつかわれないために、異なる接続として扱われるからです.(プロトコルを解析して無理矢理いたずらをする事はあるいは可能かもしれませんけど、労力の割に得るものは少ないと思います。あとで実験してみよう))

(TT) 個人辞書サポートの実装

 以上のような点もふまえて、実際の実装について説明します。まず最も危険な状態は、
  • root権限のまま書き込みをしてしまう
事なので、まず、ユーザが最初に接続してきた際に、
  • 特権を落とす
事にしました。接続してきたユーザ名がシステム上に存在している場合にはそのユーザの権限に、存在していない場合には nobody ユーザの権限に移行します。また、仮にユーザがシステム上に存在していたとしても、そのユーザ ID が500番より小さい場合には nobody の権限に移行します。 権限の移行ができなかった場合や、 nobody 権限に移行した場合には iiimf-skk の設定ファイルは読み込まないようにしました。この場合、デフォルトの設定が利用されます。下に書いてあるように、この場合個人辞書は作成されず、1回のセッションに限りメモリ上にDBを作成します。 適切にユーザの権限に移行できた場合には、iiimf-skk の設定ファイルを ~/.iiimf-skk/config.xml から読み込みます。この時
  • 設定ファイルで明示的に個人辞書を指定していない場合には個人辞書は利用されない
様にしました。ユーザが明示的に利用する事を宣言しない場合にはシステムにはファイルの書き込みをするべきではないだろう、という判断です。当然勝手に ~/.iiimf-skk/config.xml ファイルを作成する事もありません。ユーザの意思で明示的に作成しなければいけません(いや、実装の手抜きではありませんって)。 htt_server はデフォルトの設定では
  • localhost からのアクセスからのみ許可
という状態ですので、上のような実装にしておけば、ある程度のセキュリティは確保できるはずだろう、と思うのですがどうでしょう?

(TT) とかいいつつ

2人の異なるユーザが接続してきた場合にキーマップの変更が上書きされるバグを発見する始末(笑)。skkconv_kana.c で DB を一つしか作成してないのが原因です。トホホ。

(TT) hacking-with-iiimf-skk vol.3

を書いた。こちらからどうぞ

(TT) なおしました

すんまそん。

本日のツッコミ(全2件) [ツッコミを入れる]
(oo)/ ずんだあん (2002-11-08の記事、famao曰く 09:58)

プロジェクトに拉致されてる人しか見えないようになってるようですが、publicにしちゃってええのかな?たぶん、「修正」からアクセスタイプをPublic Accessにすればいいと思いますです。<br>(iiimf-skk-HOWTOのURLが昔のまんまやん

(oo)/ anego (2002-11-08の記事、famao曰く 16:47)

iiimf-skk の ML には流さないの?(とかいふ


トップ «前の日記(2002-11-07の記事、famao曰く) 最新 次の日記(2002-11-09の記事、famao曰く)»