HOME | ドキュメント |  ブログ  |  BBS  |  瓦版  | 将棋プロジェクト |  物置小屋   

ドキュメント 象歩 Web瓦版
 BBSボード RDF
こんにちは (23)
おためし板 (321)
質問箱 (94)
テスト (30)
You散歩 (4)
建築 DIY (6)
MTB (32)
(9)
節電対策 (2)
このサイトに関する話 (186)
Linux (396)
PC用ハードウェア (6)
Vine Linux 野良系 (64)
PC 工作 (31)
ドローン (0)
自家製GAFA (0)
BBS の改良 (105)
Vine Seed (520)
Zope とプロダクト (95)
Web の利用技術 (131)
DB とファイルシステム (63)
Python と C/C++ と... (29)
Zopeプロダクト開発メモ (3)
UTF-8 化 (42)
Mail 環境 (8)
COREBlog (109)
Zope3 (51)
Windows 64bit (18)
Mac (2)
Squeak スクイーク (67)
Django ぶらり一人旅 (3)
64bits (52)
Mono 思いにふける (10)
Mint Linux (7)
CentOS (2)
ディスクトップ (4)
象歩将棋 (478)
将棋よもやま (210)
サイトのデザイン (31)
心配な話 (66)
うそ (21)
うそ総集編 (0)
昔のゲストブック (20)
ボート部 (23)
Web 日記 (199)
 スパム
逮捕しる (20)
スパムお溜り (47)
ごみ箱 (6)
 リンク
kiyoさんのサイト
ペンタ郎の漫漕ブログ
端艇部員日記
TIT漕艇部の練習動画 @YouTube
墨堤の雄 @FaceBook
ペンタ(五大学ミドル) @FaceBook
Facebook
Vine Seed パッケージビルド状況
Vine Linux パッケージ情報
VineLinux バグトラッキングセンタ
VineSeed 開発用 Trac
VineSeed Specs
RPMパッケージの作成方法
Linux Standard Base
Planet Vine
Vine Linux ユーザーフォーラム
Vine Users ML アーカイブ
VineSeed ML アーカイブ
twitter#VineLinux
勝手に将棋トピックス
詰将棋おもちゃ箱

Zope とプロダクト

Zopeやプロダクトに関する話しはここに書きましょう。 なお当ボードは Zope.org とは一切関係ありません。


このまま記事を入力し[投稿する]ボタンを押せば当サイトに送信されます。 以下の文章は注意書きです。

名前はかならず記入してください。ハンドルネームでも構いません。 またパスワードを入力することをお勧めします。 その場合他人による *なりすまし* と区別出来るかもしれません。 さらにブラウザでクッキーを有効に設定してある場合あなたの記事は後で修正可能になります。

コメントスパム防止のため記事の内容を機械的にモデレート (スパムである確率を計算) する処理を通します。 どのような投稿であれ、たまたま計算誤差によりスパムとみなされ 秘密の場所 に収納される可能性があります。 その場合、管理人が手作業で正規の場所に移動しますのでお待ちください。

名前  パスワード(任意)

全93件 - 01 02 03 04 05 06 07 08 09 10

79  owa  2005/03/27 23:51 id: mJs8kxp1Zus  prob: 0.8%
# しばらく見られなかった sukima.ddo.jp サイトが復活してました。
# http://sukima.ddo.jp/Plone/WhatsNew
# 覗くと ContinuationBasePack-0.3.tar.gz などと云うファイルが置いてあります。
(また見られなくなったので、コメントアウト;;)
78  owa  2004/12/29 23:48 id: mJs8kxp1Zus  prob: 3.5%
ZShogi-0.1.tgz を http://zope.org/Members/owa/ZShogi に投げてみましたが、一般ユーザでアクセスできません;; 一応 state は publish になってるようですが。プロダクトが認可されるまで時間がかかるのだろうか? 明日まで待ってみよう。

追記: ファイルが一個 private のままでした;; publish に変更してもらったらアクセス可能になったようです。(2004/12/30 15:00)
77  owa  2004/12/11 22:49 id: mJs8kxp1Zus  prob: 0.0%
Zope 関連で一個のセキュリティ問題に複数の投稿があります。
http://mail.zope.org/pipermail/zope-dev/2004-December/024087...
http://zope.org/Members/ajung/security_advisory
http://www.freeml.com/message/[email protected]/0000798
http://coreblog.org/ats/513
こう云うの好きです。とても心強い雰囲気ですね^^
(ちなみに明日は仕事で虫取り、でも嬉し。私は少し変人かも;;)

Debian や Vine でもセキュリティ情報を流してるけど、素人にも分かり易く解説してくれるとありがたいと思う。高度な知識が必要なので僕には無理だけど、解説が必要な人は多いと思う。要望が多ければ、誰か出てくるんじゃないかと期待したり。
76  owa  2004/11/03 23:34 id: mJs8kxp1Zus  prob: 0.0%
>>75 インタプリターってそういうものなの
実行時にデータ型や許容範囲のチェックするので、その時に例外を投げます。C/C++
のように、実行した結果たまたま起きる低レベルの例外が起きてるわけではないので、比較的安全かなと思ってるのですが。

>>ただ時々落ちたようになる問題が解決しているのかどうか解らないので
カウンタが 0 にリセットされた場合の ip 文字列とか保存して置けば、少なくとも切り分けにはなるような気がします。あまり手間をかけたくないけど、原因は見付けたい;;
75  kiyo  2004/11/03 22:56 id: SqALsodDuX2  prob: 0.0%
>>74 sample.com, ****.com, aaa.bbb.ccc.ddd 
そうなんですねぇ。rfind 了解しました。
例文まで載せて頂いて時間使わせたです(忙しいのにすみません)

>>python インタプリタが検出しますので。。。
インタプリターってそういうものなのでしょうか?
例えば見えない所でエラーのダイアログ表示して止まってるとかないですよね。
あ、また変な事書いたですが無視して下さい。

# 家は FSCounter を古いバージョン(1.3.2?)に戻して実験中です。
# ただ時々落ちたようになる問題が解決しているのかどうか解らないので、あまり当てにならないかも知れない。
# Wikiのバージョンが0.99だったし、postgresqlの古いバージョンを別PCから読み書きしていたのはナイショです。 
74  owa  2004/11/03 21:19 id: mJs8kxp1Zus  prob: 0.0%
>>73
幾つか宿題が溜ってました、まず最初にごめんなさい;;
1. ignore_ip メソッドの例外処理パッチが 1.4.0 版では落ちていました。ガーン...ごめん
m(.".)m
2. HTTP_X_FORWARDED_FOR の処理
1.4.0 では組み込まれていて、increment メソッドの方は問題無いと思います。で問題の
ignore_ip メソッドの方の ip を数値変換する箇所ですが、クライアント側が proxy
の場合 (家鯖では) 下記のようなタイプを捕獲してます。

AAA.BBB.CCC.DDD, aaa.bbb.ccc.ddd
unknown, aaa.bbb.ccc.ddd
sample.com, ****.com, aaa.bbb.ccc.ddd

なので URL を取り出すには string.find(s, ',') メソッドでは無く、少なくとも rfind
の方が良いと思います。ただ、ignore_ip メソッドは既知の ip を排除するためにあります。ip を抽出することにとらわれず、既存コード中で split('.') 処理をしてるので、split 結果の数を 4 以下に限定する方が良いか
もしれません。その上で例外が起きたら対処するというのが私の今の思い付きです。

3. ignore_ip メソッドの中の例外処理の件ですが
rAdrInt=(int(rAdrSplit[0])<<24)
もし rAdrSplit[0] が数字と思えない文字列なら例外を発生します。これは try,
except で囲わないといけません (シフト演算の前に int() で起きます)。 ただこれは
python インタプリタが検出しますので python 内で解決してると思います。例えば
C/C++ などの場合は、より低次元で例外が発生するのでその後は保証されるか不確実
(コンパイラによる) かもしれません。python の場合は一応信用して良い気がします。

4. ファイルロック処理
一般的にマルチスレッドプログラムでは共有ファイルへの書き込みはロックすべきだと思います。ただ FSCounter の場合にあてはまるかどうかは定かではありません。云われてみれば、少しこだわり過ぎたかと思ってます。次のようなプログラム "mi
o.py" を作ってみました。close 関数はわざと外してます。

#!/usr/bin/env python
f = open('tmp', 'wb')
f.write('abc')

これをトレース付きで実行してみます (出力の最後だけ載せます)
$ strace ./mio.py
...
...
open("tmp", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40020000
rt_sigaction(SIGINT, NULL, {0x4002ddf0, [], SA_RESTORER, 0x400c3908}, 8) = 0
rt_sigaction(SIGINT, {SIG_DFL}, NULL, 8) = 0
write(3, "abc", 3)                      = 3
close(3)                                = 0
munmap(0x40020000, 4096)                = 0
exit_group(0)                           = ?

問題は write(3, "abc", 3) のシステムコールだけなので、例えマルチスレッド環境で実行しても書き込みがおかしくなることは無い気がします。(mmap2 とか rt_sigaction が何をやってるのか知りませんので、間違って
るかもしれません)

5. Vine 3.1
たかがカウンタと思っていたのが *あだ* になりました。一時ツリーから削除してもらおうと思ってたのも事実です。(kiyo さんに言われて再認識しました) 救いは Vine 3.0 からは Vine-Plus もメンテナンス対象になったので不
具合があれば堂々と修正できるようになったことです (でも、まだ半メンテナンス制が発足したわけではありません)。 今回の件は、なるべく早く修正しますので、その上でまたしばらくは様子を見ようと思います。

# 今もってゼロクリア問題が解決したと言い切れて無いので、どこかで嘘を云ってる可能性ありですが・・・
73  kiyo  2004/11/03 15:14 id: SqALsodDuX2  prob: 0.1%
>>72 本当はロックすべきなのかも?
私の妄想的意見(あくまで意見なのです)
そもそもロックしなければいけないのでしょうか?
FSCounter.py 内の__version__ = '1.3.2' を使っていて約20万アクセスあってもエラーは出なかった。
じゃ、1.3.2 以降どう変更されたかと言うと
self.REQUEST.get('HTTP_X_FORWARDED_FOR', '') をよみだした時からエラーがでているような気がします。
この HTTP_X_FORWARDED_FORに unknown 文字列を含む時がある事も解っているので、これをシフト演算すると間違いなくエラーがでると思う。
このエラーが起こった時に別の新規アクセスがあると。。。(ほんとは解りません/アチャー)

# 前に投稿したのは Vine 3.1がそろそろ発売になりそうなので、Vine3.0に置いてあるZope-FSCounter-1.3.4-0vl6を修正又は削除したらって思ったのです。舌足らずで申し訳ないです。
72  owa  2004/11/02 00:36 id: mJs8kxp1Zus  prob: 0.0%
>>70
FSCounter-1.4.0 でもゼロクリアされる現象が起きました。なんで?
write はロックかけてるので一応信用するとして、read にいちいちロックかけるのは気が向かない。(本当はロックすべきなのかも?)
ip アドレスで重複チェックかけてる場合、一日単位で ip テーブルをクリアするので、そのタイミングでカウンタ値をインスタンス (self.last_count) に持たせることにしました。昨日より小さい値の場合はカウンタを更新しないという
つもり。副作用で、毎日の増加分が得られます。
ftp://owa.as.wakwak.ne.jp/pub/Vine/VineSeed/patch/FScounter....
既存のサーバにインストールした場合不具合がでそうな気がするので、まだ正式ではありません。

# そう云えば少し前に mutex で対応すれば良いと云うような記事がありました。
# http://bbs.zhost.sytes.net/47

追記:
11/03 00:51 - やはりバグありますね。トップページの today カウントがクリアされません;;
71  owa  2004/10/30 21:26 id: mJs8kxp1Zus  prob: 0.0%
>>70 Zope-FSCounter-1.3.4-0vl6がちょっと変
だいぶ変ですね。手を入れたコードが汚い;;
最初の二件はおっしゃる通りで、良くないのでソース直してみましたが、途中で
FSCounter-1.4.0 見たら良さそうだったので乗り換えました。(申し訳ない)
ロックファイルは元々無かったものなので捨てました。しかし write 文で排他制御は必要だと思うのでパッチを追加しました。
ftp://owa.as.wakwak.ne.jp/pub/Vine/VineSeed/patch/FScounter....

#「unknown」の方は、後で考えます。
# FSCounter 止めようかと思ってたけど、まだ使えそうですね。ありがとうございます。
70  kiyo  2004/10/30 16:51 id: SqALsodDuX2  prob: 0.0%
久しぶりに投稿^^;;
Vine 3.0 にある Zope-FSCounter-1.3.4-0vl6がちょっと変なのですが。。。
カウンター値に新しい値を入れてをPOSTしても変化がないようです。

FSCounter.py の150行目付近
----
    def __write_(self, newvalue=''):
        ''' write newvalue to file or increment '''
        value = 0
        try:
            - value = self.__read_()
            + value = self.read()
            lock = open(self.lockfile, 'w')
--- 
とすると良いようです。FSCounterを作成直後に 存在しないファイル($ZOPE_INSTANSE/var/xxx.counter)を読みに行ってエラー。で結局ファイルの作成に失敗するようです。

それと 古いZopeからimport/Exportで持って来た場合、独自に拡張された self.datafile,
self.lockfileが存在しない為うまく動作しないようです。110行目付近
manage_edit付近に以下のようにしたらどうでしょう?
----
   def manage_edit(self, title, cookie_yn=0, cookie_name='', padded_value='5', images_folder='misc_/FSCounter',
image_type='', ignore_addrs=(), newvalue='', ip_tracking=0, REQUEST=None):
        """edits the object"""
        self.title = title
        + if not self.lockfile:
        +    self.datafile = str(Globals.data_dir) + os.sep + str(self.filename)
        +    self.lockfile = self.datafile + '.lock'
---

あと HTTP_X_FORWARDED_FORですが、UserCounter等をみていると IPアドレスが
「unknown,123.456.789.012」 のようにありますので、「unknown」を削除する為 330行付近を以下のようにしてみました。
----
    def ignore_ip(self, REQUEST):
        ''' check if the ip should be ignored '''
        ignore = 0
        if self.ignore_addrs:
            rAdr=self.REQUEST.get('HTTP_X_FORWARDED_FOR', '') or self.REQUEST.get('REMOTE_ADDR', '')
            + radr_p = string.find(rAdr,',') + 1
            + rAdr = rAdr[radr_p:]    
----