yusuk****@cheru*****
yusuk****@cheru*****
2004年 2月 17日 (火) 23:52:34 JST
田畑です。 > プログラミングについてはまったくの素人なので、御指摘ありがたいです。 #NetBSDやOpenBSDのカーネルを読んで調べるような人を素人とは言いませんよ。^^; #エンディアンのこと忘れてソース書く人のことを素人といいます。 > ただ使ってはいないのですが、NetBSD と OpenBSD も Mac OS X と同様に、 > socket の fd に対する fstat(2) の st_uid は 0 になってしまうように > みえるので (試していません。まちがっていたら御指摘ください)、ここの変更は > 必用かなと思って上のように書いたところです。 手元にあったNetBSDのソースを見ると確かにそうなってますね。 バグではなくて、manの記述はファイルについて書いてあって、 unix domainのソケットについては言ってないと解釈すべきなんでしょうか? > > 「2004年ごろのMacOS X」対策ですとコメントを書いた上で、 > > if (fst.st_uid != getuid()) { > > if (何か敗者復活条件) { > > } else { > > close(fd); > > return -1; > > } > > } > > みたいに他のOSでのフローが変わらないようなコードが > > できれば、取り込みたいと思います。 > > #owner以外は読めないはずなのにconnectできてるとか > > #他のOSなら有り得ない状況?このチェックにraceはあり? > > ぜひぜひおねがいします。 ちょっと考えて見たのですが、Linuxの場合にst_uidが0になってたら rootに攻撃されているというどうしようもない状況なので、あまり 気にせずに接続することにしようと思います。 一応ダメ押しで、次のようなコードにするつもりです。 stat(st); st.st_uidが自分でなければ失敗 connect(); fstat(st); st.st_uidが自分でなくて、rootでもなければ切断 -- > あと、先程また uim-xim で気付いた点なのですが、endian の異なるホストの > クライアント上では入力がおかしくなるようです。以下の用に変更したところ > この点は解決できました (とりあえず動いた、というだけです。byte swap > の部分はもっと上手く書いて頂けたらと思います)。 ありがとうございます。次のメールの分も含めてapplyしたいと思います。 -- CHAOS AND CHANCE! Yusuke TABATA (yusuk****@cheru*****)