■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
read.cgi改良スレッド 2
- 668 :664 :01/09/23 07:31
- >>665
混雑時の判定にもまぎらわしくないように、TZ定義はread2chhでLIMIT_PM/AMの
定義に並べて置いてます。
- 669 :デフォルトの名無しさん :01/09/23 08:59
- >>617
readSettingFileを以下のように修正:
if (fd >= 0) {
:
}
となってる部分を
if (fd < 0)
return;
:
に変更
char const *cptr;
char const *endp;
struct stat st;
を関数の先頭に移動
#ifdef USE_INTERNAL_SETTINGS
void *mmptr;
struct _setting setting;
for (setting = special_setting; setting->board_name; setting++) {
if (!strcmp(bbsname, setting->board_name))
break;
}
if (!setting->board_name)
return;
mmptr = setting->settings;
st.st_size = strlen(mmptr);
#else
char fname[1024];
:
st.st_size = read(fd, mmptr, 8192);
#endif /* USE_MMAP */
#endif /* USE_INTERNAL_SETTINGS */
関数末尾の#ifdef USE_MMAP〜#endifを
#ifndef USE_INTERNAL_SETTINGSで囲む。
注意点は、settingsの文字列は>>617そのままではなくて
最後に'\n'が必要なこと。
- 670 :デフォルトの名無しさん :01/09/24 01:06
- >>630
mmapの変更(サイズ, READONLY, SHARED)、
>>632
setvbufを一応、
>>574-579
ETagでHTTP/1.1チェック、
>>669
USE_INTERNAL_SETTINGS
を組みこんだ。
- 671 :イラストに騙された名無しさん :01/09/24 01:12
- >619 >629 >631
ver5.23 でも、過去ログ見つけるの失敗してます。
ttp://choco.2ch.net/dancesite/kako/100/
ttp://choco.2ch.net/dancesite/kako/100/1001164016.html
ttp://choco.2ch.net/test/read.cgi?bbs=dancesite&key=1001164016
ttp://choco.2ch.net/test/read.cgi/dancesite/1001164016/
- 672 :デフォルトの名無しさん :01/09/24 01:41
- 結局単純に先頭3桁取ればいいのか?
#ifdef NEW_KAKODIR
#else
void kako_dirname(char *buf, const char *key)
{
sprintf(buf, "%03d", tm);
}
#endif
こんなconditionでも組み込んでとりあえずOFFに
しておきましょうか。
- 673 :デフォルトの名無しさん :01/09/24 01:48
- 某2chブラウザを作っているものですが、raw=0.0のCGIパラメータを渡して
DATを取得すると、一番最後の部分に本来の(非rawの)モードで出力するHTMLの
内容が付加されてしまっているようです。
1行目に出力されるサイズを見て無視できないこともないのですが、
やはり余計なデータは転送しない方が良いと思います。
やっと全板にrawモード対応のread.cgiが入り、これから各2chブラウザの
対応も進むと思いますので、是非対応の方お願いします。
- 674 :デフォルトの名無しさん :01/09/24 02:08
- >>673
ver5.23では直ってるはず。過去ログ見れ。
- 675 :イラストに騙された名無しさん :01/09/24 02:09
- 500番あたりの発言ね。
- 676 :デフォルトの名無しさん :01/09/24 02:09
- >>672
いつ頃、どういう形で移行するかわからないので、両対応しておいた方がいいと思います。
ということで、過去ログ検索関数製作中。
>>673
本当に申し訳ありません。
ver5.22のバグで、ver5.23(chocoにインストール済み)では修正されています。
サイズを見て後ろは捨ててください。
詳しくは、>>498-502を見てください。
- 677 :デフォルトの名無しさん :01/09/24 02:18
- 作ってcommitする寸前だったけど、どう?
/* 旧形式 /bbs/kako/100/1000888777.htmlに対応。
dokoにpathを作成する
.htmlだけで充分だとは思うが・・ */
static int find_old_kakodir(char *doko, const char *key, const char *ext)
{
struct stat CountStat;
sprintf(doko, KAKO_DIR "%.3s/%.50s.%s", zz_bs, key, key, ext);
return stat(doko, &CountStat) == 0;
}
html_error()
if (!stat(doko, &CountStat)) {
→ if (!stat(doko, &CountStat) || find_old_kakodir(doko, tmp, "html")) {
- 678 :デフォルトの名無しさん :01/09/24 02:26
- >>677
READ_KAKOのfnameを作成してやらないといけないので、
datを発見した所をdokoに入れてくれる形のものも必要です。
- 679 :デフォルトの名無しさん :01/09/24 02:33
- あ、それで充分ですね。
if(!find_old_kakodir(fname, tmp, "dat"))
新形式fname作成
でOKかな。
- 680 :673 :01/09/24 02:34
- >>674 >>676
すんません、思いっきりガイシュツでしたか。申し訳ないです。
ところでsubject.txtの圧縮転送もサポートしてもらえると、
スレ一覧更新時の転送量削減(ブラウザにとってはレスポンスup)が
見込めるのですが、どうでしょうか。
bbspinkだけはmod_gzipが使えるのですが、それ以外は相変わらず
無理みたいなので。
- 681 :677 :01/09/24 03:00
- よければ、誰かcommitしちゃってください。
- 682 :デフォルトの名無しさん :01/09/24 03:08
- >>681
もうすぐcommitします。やっとテストが終わった。
rawモードのエラーでdokoを渡してますね。
そのままdokoを出してますが、最終的にはkako/nnnnnにすることに
なると思います。
read.cgiが過去ログ読みにならないと変えられないかな。
- 683 :デフォルトの名無しさん :01/09/24 03:22
- >>680
ダイジェストを部分的に復活させましょうか。
http://piza2.2ch.net/test/tech/?raw=0.0
で tech の subject.txt を生のまま返す。
- 684 :683 :01/09/24 03:22
- 間違い。
http://piza2.2ch.net/test/read.cgi/tech/?raw=0.0
- 685 :デフォルトの名無しさん :01/09/24 03:31
- >>683 こうすればいいはず。
/* スレ一覧を取りに逝くモード */
if (1 <= path_depth && path_depth < 3
#ifndef USE_INDEX
&& rawmode
#endif
) {
sprintf(fname, "../%.256s/subject.txt", zz_bs);
zz_fileLastmod = getFileLastmod(fname);
}
- 686 : ◆YaKIN/eo @夜勤 ★ :01/09/24 04:02
- ん?
この状態は、切がいいのかな?
- 687 :デフォルトの名無しさん :01/09/24 04:17
- >>686
ご苦労様です。
一応、問題ないはずです。
主な変更点は、
・内部に板ごとの設定を指定できる。
・imodeで前10次10が付いた。
・現在の過去ログの場所に対応した。
入れるときに、read2ch.hのSPECIAL_SETTINGの内容を
ちょっと検討してみてください。
- 688 : ◆YaKIN/eo @夜勤 ★ :01/09/24 04:32
- 今日はもうおねむになったので
急いては事を仕損じるということで
明日の夜(つーか今晩か、もう)やりまーす。
- 689 :デフォルトの名無しさん :01/09/24 08:13
- >>685
あてた
しかしsubject.txtのときにはraw=パラメータは0.0に限定して使うように注意かな。
- 690 :デフォルトの名無しさん :01/09/24 14:45
- 「2ちゃんiモード」にある
「頁BOTTOM」 (先頭にあり、末尾にある#BTMへ)と
「頁TOP」(末尾にあり、先頭にある#TOPへ)って
iモードに限らず便利そうな気がするけどどう?
- 691 :デフォルトの名無しさん :01/09/24 17:02
- >>680
いまだに bbspink 以外で mod_gzip が使えないのはなんで?
批判要望板の案内では
>これら文字化けの不具合は、MOD_GZIPが導入されると同時に解消されます。
>※来週末になる見通しです。
って前から書いてるのに.
- 692 :デフォルトの名無しさん :01/09/24 19:24
- >>690-691
スレ違い
- 693 :うーん :01/09/24 20:19
- agew
- 694 :デフォルトの名無しさん :01/09/24 20:21
- >>1-10
のような1を含む複数レスへのアンカーで1が消えてしまいます。
おそらく複数レスへのアンカーの際nが無条件に付加されてるのだと思いますが、
これは仕様でしょうか?
- 695 :デフォルトの名無しさん :01/09/24 20:40
- >>694
バグです。create_link()の
if (nf && (st!=to || ls))/* 単点は'n'不要 */
を
if (nf && (st!=to && st > 1 || ls)) /* 単点または1を含むときは'n'不要 */
に変えればいいと思われ
- 696 :批判要望より :01/09/24 22:05
- 329 :名無しさんの声 :01/09/24 22:03 ID:f9UAKBCQ
>>328
要望なんですけれども、長すぎるレスは自動的に
カットしていただきませんかね?
続きが読みたい場合は「クリック」みたいに
していただければ非常にうれしいのですが・・・
よろしくおねがいします
- 697 :デフォルトの名無しさん :01/09/24 22:07
- 696はiモード版の話です。
iモード版のメニュー
http://teri.2ch.net/test/read.cgi/accuse/968935230/329
- 698 :デフォルトの名無しさん :01/09/24 22:08
- >>692
690はスレ違いじゃないぞ。
でも、下にアンカーを色々出しているから、なくても困らんと思うが。
混雑時はわざと不便にしてあるから、頁TOPつけると転送量増えるんじゃないかな。
>>694-695
最新版では、1-10nでも1を表示するようになっています。
矛盾した指定を出すなって言われれば、そうではあるが。
- 699 :デフォルトの名無しさん :01/09/24 22:20
- 697のリンクをクリックしたら簡易表示になったけど、
違うスレから呼ばれた時も簡易表示になるんでしたっけ?
- 700 :デフォルトの名無しさん :01/09/24 22:23
- >>698
1バイト減らせるし、矛盾した指定は出さないほうがいいと思う。
5.22では&nofirst=trueを出してなかったんだし。
- 701 :デフォルトの名無しさん :01/09/24 22:26
- http://teri.2ch.net/test/read.cgi/accuse/968935230/330
330 :329 :01/09/24 22:06 ID:f9UAKBCQ
>>329
記号の羅列もカットしていただけると非常にうれしいです・・
携帯からだとAA見ても訳がわからないので、、、
- 702 : ◆YaKIN/eo @夜勤 ★ :01/09/24 22:48
- 投稿内容を改変するような仕組みは、あまりよくないと思います。
一律に長いのを省略する というのならば良いかも知れませんが、
今回の一連の改造には含めないことにしましょう。
- 703 :デフォルトの名無しさん :01/09/24 22:54
- >一律に長いのを省略する というのならば良いかも知れませんが、
ということは>>696はOK?
bbs.cgiでも
(省略されました・・全てを読むにはここを押してください)
はやってますし。下手に改造すると無限ループになりそうだけど。
- 704 :デフォルトの名無しさん :01/09/24 23:02
- >>699の件
ref = getenv("HTTP_REFERER");
if (!ref || !*ref)
return false;
return true;
なんだこれ?
どういう理由でこんなふうにしたんだ?
他のスレへのリンクだったら、
その後に全部読んでみたい等に備えて
カットしないようになっていたはずなのに。
- 705 :デフォルトの名無しさん :01/09/24 23:07
- >>704
ゴミじゃないの? その後を無効にする意図があるなら
conditionになってるはず。削除しちゃっていいと思われ
あと>>695もcommitきぼん。
- 706 :デフォルトの名無しさん :01/09/24 23:29
- >>705
あてた。
- 707 :デフォルトの名無しさん :01/09/24 23:39
- 夜勤さん見てたらそろそろお願いします。
>>687以降の変更点は
・http://piza2.2ch.net/test/tech/?raw=0.0 で圧縮された
subject.txtを返す。
・>>nnnが1を含んでいるときは'n'を出力しない。
・他スレからのリンクは簡易表示にしない。
です。
SPECIAL_SETTINGは、削除依頼板で>>nnnのリンクを
カットしないようになっています。
- 708 :また間違えた :01/09/24 23:39
- ・http://piza2.2ch.net/test/read.cgi/tech/?raw=0.0 で圧縮された
subject.txtを返す。
- 709 : ◆YaKIN/eo @夜勤 ★ :01/09/25 00:40
- はーい、やりますー。
http://www.gedoh.org/aki/2ch/current/bbs/
ここで いいのかな?
- 710 :デフォルトの名無しさん :01/09/25 00:46
- >>709
ご苦労様です。
そこのでOKです。
- 711 : ◆YaKIN/eo @夜勤 ★ :01/09/25 00:52
- 皆様 いつもありがとうございます。
read.cgi ver5.24 (01/09/25) が choco に入りましたー。
やったー。
- 712 :デフォルトの名無しさん :01/09/25 00:59
- お疲れさまです。
チェック用リンク
http://choco.2ch.net/test/read.cgi/ainotane/1000457087/353
- 713 :デフォルトの名無しさん :01/09/25 01:03
- ・他スレ参照でも簡易表示になるのが直ってないような…
- 714 :デフォルトの名無しさん :01/09/25 01:05
- >>713
712のリンク先は簡易じゃないでしょ。
向こうからのリンクは、ver5.23が処理するから直ってません。
- 715 :713 :01/09/25 01:07
- あ、そうか。スマソ
- 716 :デフォルトの名無しさん :01/09/25 01:09
- tag打ちたいんだけど、cvsサーバーが落ちてるっぽい。
- 717 :デフォルトの名無しさん :01/09/25 01:50
- >712のリンク先は簡易じゃないでしょ。
712のリンク先が簡易表示なのは俺だけ?
Ver5.24でFORMが出ないんだけど。
- 718 :デフォルトの名無しさん :01/09/25 02:00
- 結局どの程度速くなったの?
- 719 :717 :01/09/25 02:02
- ごめん、たぶん俺だけだ。
http://mentai.2ch.net/test/check.cgi
これで、REFERERを確認したら、
どうも勝手にrefererが設定されてしまって、
しかもキャッシュされてNotModifiedになっているだけみたい。
ツールでリンク先をShellExecuteして読んでるんだけど。
- 720 :イラストに騙された名無しさん :01/09/25 02:47
- 「簡易表示」時
<html><head><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
が無くて、いきなり <title>からになってる・・・
- 721 :デフォルトの名無しさん :01/09/25 02:55
- 理論的にはどれも必要ないけどね。
強いて言うなら文字コードの指定がないと文字化けする
危険があるくらいか。
- 722 :aki :01/09/26 02:32
- えーん。ごめんなさい。
cvs鯖ディスクトラブルで落ちてます。
明日の夕方までには何とかがんばって直したいです...
/bin/sh が read error (泣)
- 723 :デフォルトの名無しさん :01/09/26 16:51
- tag YAKIN20010925 打ちました
- 724 :デフォルトの名無しさん :01/09/26 18:25
- レス指定の >> が、&gt; じゃなくて > になってるんですが
これは良いのでしょうか?
- 725 :デフォルトの名無しさん :01/09/26 18:50
- >>724
いいんです。 >>414
- 726 :デフォルトの名無しさん :01/09/26 20:33
- すいませんー。サーバーアドレス変わってます。
210.170.179.110
です。>ftp
# DiCEでちゃんと定期的に監視する設定にしたと思ったのだけど・・・・。
# うーむ、設定ミスか・・・。
たびたび混乱させて申し訳ないです。
- 727 :デフォルトの名無しさん :01/09/26 20:33
- 以前のまとめは >>655
残ってるのは、英語版と >>720 ぐらい?
imode回りはどうしましょうか。
- 728 :デフォルトの名無しさん :01/09/26 20:46
- <html><head></head></body></html>
は全部省略でいいと思うんですがどうでしょうか。
HTML 2.0の時代から省略可能なことになってるので
省略したことによって誤動作するブラウザというのは
考えづらいです。もちろんIEもネスケも問題ありませ
んし。
- 729 :デフォルトの名無しさん :01/09/26 21:45
- <html lang="ja">
とか入れとくといい、かも(IE5.5でこれを入れとくとAAのズレが
直る……とかいうのがあったような……かちゅ〜しゃだけか?)。後は全て省略で。
- 730 :デフォルトの名無しさん :01/09/26 22:05
- >>729
かちゅ〜しゃだけ。IEだとずれないのにかちゅ〜しゃだと
ずれるというのが直るに過ぎない。
IE5.5問題はフォントの設定をいじらないとダメ。
- 731 :デフォルトの名無しさん :01/09/26 22:41
- >>720 を修正した。
ついでに、can_simplehtml()のバグを見つけたので修正。
- 732 :デフォルトの名無しさん :01/09/26 22:51
- えっと、専用ブラウザ作者です
通信失敗したときのためにdat取得途中にもいったん保存したいと思ってるんですが、
datのサイズを計算するとき、\0も含めて\r\nまで数えれば計算合いますか??
それとも\r\nは含まず?
モバイル時、rawモードで一気に900近いレスを取得するのは難しいので・・・
- 733 :デフォルトの名無しさん :01/09/26 22:57
- datの改行は\r\nじゃなくて\nです。
もし\r\nに見えてるとしたらお使いのライブラリか何かが
勝手に変換してるということなのでそのままでは絶対に
計算合いません。
それはそれとして、rawモードでも部分取得に対応したほうが
いいのだろうか。こういう意見もあるし。
614 :作者 本日のレス :01/09/26 01:16
つまり、最新50とか、10-30までとかいった読み方は考えていないということか。
- 734 :732 :01/09/26 23:00
- 失礼、\r\nは単純にそう思っただけです(^^;
実際には\nでしか判定してません
- 735 :デフォルトの名無しさん :01/09/26 23:31
- 5.24が各鯖にインストールされた模様。
SPECIAL_SETTINGが動作しているのを確認。
混雑時の設定は、22-03のようだから、
read2ch.hも合わせておいた方がいいかな。
- 736 :729 :01/09/26 23:32
- >>730
Thanks.
やっぱりかちゅだけだったか……個人的には言語指定位入れといても
いいような気がするけど、まぁ全部省略だろうな、ここは(何)。
- 737 :デフォルトの名無しさん :01/09/27 02:54
- READ_KAKO/READ_TEMPには問題がいくつかある。
第一に、READ_KAKOがdefineされていないときには
READ_TEMPをundefしているが、
これはプログラム上の都合であって、動作としては望ましくない。
実際には、kako/はhtmlを読めばよいので閲覧禁止にしてあっても、
datでしか読めないtemp/は(特にdat直読みが禁止されると)
閲覧を許可するという状況は十分に考えられる。
逆は考えにくいので、逆になっていればよかった。
次にREAD_KAKOをrawmodeでも一律に扱っているが、これはどうだろうか。
ツールを使っていても、倉庫送りにされたログを読む場合には
結局datに直にアクセスすることになる。
大半が取得済みのdatの場合は、圧縮をあきらめて差分取得する
ことになってしまうし、
全体を新規取得する場合でも、圧縮はmod_gzipとその設定次第となる。
何より、直読み禁止になったらどうしようもない。
「rawmodeのみ過去ログ取得を許可する」conditionを設けるべきだと思う。
さらに細かい点を指摘すると、read.cgiで過去ログを読む事を前提とするなら
過去ログのdatがどこにあるかなど、ユーザーには関係ない。
kako/とtemp/でわけて指定させる必然性は全く無い。
もっとはっきり言えば、READ_KAKOが有効な場合には、
key=999999999を指定するだけで透過的に過去ログにアクセスできる方が
はるかに望ましい動作といえる(もちろん、書きこみは不可にする)。
しかも、これならリンクのkako対応やpath_depth操作も不要になる。
(逆に、ツールに過去ログ化を知らせるためのサインが必要になる)
転送量を問題視するなら、混雑時間帯以外とRAWMODE時のみ
透過的アクセスとする手もあるだろう。
最後に、これが最も重要だが、過去ログの形式が一定ではないという点がある。
teri,cornなどは過去ログも全て"<>"区切りだが、
mentaiから始まりpiza,saki,...等の古いログは
全て","区切りのdatが保持されている。
最も早くログ変換が始まったpizaでも5月初めで、他のサーバーはもっと遅い。
mentaiなどは大半が旧形式であると言える。
現行のparseルーチンでは、動的なデリミタ変更には対応していないので、
全て「ここ壊れています」になるだろう。
(過去に2、3度、bbs.cgiのバージョンを間違えたために
teriなのに数分間の投稿だけがsaki形式になっているdatもあるが、
これは「壊れたスレ修復」スレへ行けばよいかもしれない)
負荷との相談になるが、本気でちゃんと過去ログ読みに対応するのならば、
リンク先が無効になることより、こちらの方がずっと重要だと思うのだが。
- 738 :デフォルトの名無しさん :01/09/27 02:55
- で、READ_KAKO,READ_TEMPの優先順位を直し、
rawmode時に対応し、temp/を廃止して一律kako/に、
等をやってみようとしたのだが、面倒になってやめた。
代わりに、AUTO_KAKOを作った。
(変更は多くないので、新しく作る方が楽)
AUTO_KAKO_MODEを数値としてdefine(SETTING_FILE可)し、
0 = RAWモード時のみ、temp/,kako/どちらのdatも取得可能
1 = RAWモード以外は、temp/のみ閲覧可能
2 = RAWモード以外でも、temp/,kako/どちらも閲覧可能
とする。
過去ログに対しても全く同じようにkey=999999999の指定で
(スレスト扱いで)アクセスする。
ただし、今のところ、rawmode以外は(#if 1で)混雑時間帯外に制限してある。
READ_KAKOと排他ではないので、どちらも指定できる。
ログ形式の違いには対応していないが、
もし、READ_KAKOかAUTO_KAKO_MODE=2となることが想定されるなら、
#ifdef AUTO_LOGTYPE等として自動判別することも
そんなに難しくはないと思われる(負荷が少し大きくなる可能性あり)。
その他の変更点は、
・find_old_kakodirと同形式でfind_kakodirとfind_tempdirを作り、
html_errorをif-elseif-else で並べた(RAWOUTも)。
・mainでファイル名を作るところがごちゃごちゃしてきたので
create_fnameとして独立させた。
・他、細かい修正を少し。
それと、>>671の過去ログ探しが正常に動いているか確かめようと思ったら、
Ver5.23の「そんな板orスレッドないです」がでてきた。
キャッシュに残っていてNotModifiedが返ったからだが、
getFileLastmodが-1を返した(ファイルが見つからない)時は
LastModifiedを出力せず、304も返さないようにした。
- 739 :デフォルトの名無しさん :01/09/27 02:59
- そうだ、
スレッドストッパーの判別に
「移転したよ」
もあった方がいいかも。
(1に書いてあるので有効なのは移転直後だけだし、実際には書きこみ出来るが)
- 740 :デフォルトの名無しさん :01/09/27 06:37
- LIMIT_PMを22時にした。
"移転したよ"をストッパー判定に加えた。
AUTO_KAKO時に注意を表示するようにした。
AUTO_LOGTYPEを作った。
レス1に<>が含まれるかどうかで判定するので、
途中で一部変化しているものには対応できていない。
- 741 :デフォルトの名無しさん :01/09/27 11:58
- </title>の前に空白入れれ
- 742 :デフォルトの名無しさん :01/09/27 12:04
- >>741
それよりタイトル末尾の空白もCUT_TAIL_BLANKの
対象にしたほうがいいと思われ
- 743 :デフォルトの名無しさん :01/09/27 12:51
- >>742
splitting_copy(というかressplitter_split)が各フィールド切り出すときに
統一的に末尾空白カットと空白の追加やってるようだから
すでに大丈夫と思われ
- 744 :名無し :01/09/28 00:06
- iモードで Next Page やるとURLが見つからないみたいです。
アドレス間違えていませんか?
http://news.2ch.net/news/i/
- 745 :デフォルトの名無しさん :01/09/28 00:21
- おの〜最新レス50を押しても最新でないんですけど、
また最新50もなんかおかしい。
バグですか?
- 746 :デフォルトの名無しさん :01/09/28 00:29
- >745
おめーの環境が悪い。
買い替えろ
- 747 :デフォルトの名無しさん :01/09/28 01:21
- ページ上部の1-、101-、…が相対リンクなため、
http://ebi.2ch.net/test/read.cgi/nohodame/993580528/288-/
こういうリンクで飛んだとき、1-、101-、が効きません。
- 748 :デフォルトの名無しさん :01/09/28 02:22
- >>744
pageview.cgiはこのスレでは扱っていません。
>>745
どのスレで起きた等、詳しく説明してもらえると助かります。
>>747
こっちならうまくいきます。
http://ebi.2ch.net/test/read.cgi/nohodame/993580528/288-
最後に余分な'/'が入っている時は、
../をつけるか、無効扱いするか、どうしましょう。
- 749 :デフォルトの名無しさん :01/09/28 06:46
- >>748
後ろに余分なものがついているときは旧形式で呼ばれたとき同様に
R2CH_HTML_BASE_DEFINEを出すとか…
- 750 : ◆YaKIN/eo @夜勤 ★ :01/09/28 14:44
- いつも、ありがとうございます、
ところで、誰か core dump はくんですよ、read.cgi か bbs.cgi のどちらかだと
思うんですが、、、
時間あったら調べてみてください、
- 751 :デフォルトの名無しさん :01/09/28 16:08
- >>750
strings core | grep REQUEST
とかが可能でしたら、悪者が特定できてcore dumpの条件も判るのですが。
- 752 :デフォルトの名無しさん :01/09/28 16:29
- bbs.cgiってPerlではなかったでしたっけ? となるとcore吐くのは
read.cgiじゃないかと思いますが gdbが使えれば
$ gdb read.cgi core
と打ち込んで
(gdb) bt
(gdb) q
で出てくる結果から目星が付けられるかも知れません
coreを吐くプログラム名自体は gdbを起動した時に
Core was generated by `hoge.cgi'.
のように表示されます
- 753 : ◆YaKIN/eo @夜勤 ★ :01/09/28 19:45
- choco に strip してない read.cgi 入れたので、 core 吐かれたら
調べてみまーす。
- 754 :デフォルトの名無しさん :01/09/28 19:47
- getLineMax()がちと怪しいので、一応差し替えてみたけど、どうかなあ。
- 755 :デフォルトの名無しさん :01/09/28 19:52
- てゆーか、ミラーが死んでるから、変更点がわからないか。
do {
・・・
p = (char *)memchr(p, '\n', p1-p) + 1;
} while(p != p1);
が、途中であぼーんが入るとpが死ぬ可能性があるので、
do {
・・・
p = (char *)memchr(p, '\n', p1-p);
if (p == NULL)
break;
++p;
} while (p < p1);
に直した。
- 756 :デフォルトの名無しさん :01/09/28 20:31
- datの書き込み時にどういう処理をしているのかわからないけど
もし open("hoge.dat", O_WRONLY|O_TRUNC) or fopen("hoge.dat", "w")
に相当するようなやり方でオープンして書き込んでたりすると
その書き込み中にread.cgiでBigBufferを参照すると
ファイルの終端より後ろの領域を参照 -> SIGBUS or SIGSEGV
ということもあり得るんだな...... 例のmmap時のlock問題
- 757 :デフォルトの名無しさん :01/09/28 21:18
- bbs.cgiに関してはそんな.dat消失の危険があることは
やらんでしょう。普通はO_APPENDを使うと思われ
流出スクリプトもそうなってるし。
ただ削除系のスクリプトはぁゃιぃかも。
- 758 :デフォルトの名無しさん :01/09/29 01:31
- 非常に簡単なテストプログラムを作ってみたのだが・・・
255個の空白と改行を1行とし、
1)まず新規にファイルを16*4行分作成し、閉じる
2)次にファイルサイズ+10バイトをPROT_READ,MAP_SHAREDでmmapする
3)マップされた領域をスキャンし、行数と最初に'\0'が現れる位置を表示する
4)次に同じファイル名で(マップしたまま)16*1行分作成し、閉じる
5)3)を繰り返す
この結果は3の時と5の時で異なり、
どちらも実際のファイルの行数(64と16)を報告し、
最初に'\0'が見つかったのは、ファイルサイズの次の位置だった。
どちらも実際のファイルサイズを超え、ページ境界をまたいでいるが、
coreは吐かなかった。
(ページ境界をまたがない時でも、
'\0'が最初に現れた位置はファイルが終わった位置だった)
もしこれ(ファイルサイズ以上の領域には'\0'が入り、
マップされている間にサイズが小さくなっても'\0'が入る)が常に当てはまるなら、
map_sizeをほんの少し多めに取り、
BigBufferをスキャンしている最中に'\0'が現れた場合のみ、
オーバーしているかをチェックすればよいことになる。
とりあえず、これが成立するを仮定して、
dat_readとressplitter_splitを修正した。
- 759 :デフォルトの名無しさん :01/09/29 03:32
- ファイルを書きかえるプログラムとの協調ができない限り
どうやろうが危険は残る。
ターゲットOSがいつまでも同じとは限らない。
未定義部分の振る舞いなんか利用したら、後で必ず痛い目にあう。
削除ツールとかを変更できるまでは、mmapの使用はあきらめた方がいいんじゃない。
- 760 :デフォルトの名無しさん :01/09/29 04:08
- 振るまいが違ったらその時直せばいいじゃん。
納品して終りじゃないんだから。
それと「mmapの使用」と「MAP_SHAREDの使用」は等価ではないよ。
- 761 :デフォルトの名無しさん :01/09/29 08:35
- cvs鯖落ちてる?
- 762 : ◆YaKIN/eo @夜勤 ★ :01/09/29 14:37
- umm
choco にまだ、 core できてませんでした、
観察継続中。。。
- 763 :デフォルトの名無しさん :01/09/29 15:54
- read.cgi の不具合報告です。
http://piza2.2ch.net/test/read.cgi/tech/1000035521/627
http://piza2.2ch.net/test/read.cgi/tech/1000035521/627/
どちらも同じ書きこみが表示されますが
下のURLだと
「■掲示板に戻る■ 全部 1- 101- 201-・・・・」
とか
「>>123」
などのリンク先がおかしいです。
(それともこのような指定方は想定外?)
- 764 :デフォルトの名無しさん :01/09/29 15:56
- がいしゅつです。>>747-749
で、
・エラーにする
・R2CH_HTML_BASE_DEFINEを出す
どちらにしましょうか。
- 765 :デフォルトの名無しさん :01/09/29 16:55
- >>764
BASE出すほうに一票
- 766 :デフォルトの名無しさん :01/09/29 19:15
- >>732-733にあるようなdatの部分取得と、
subject.txtの上位50件取得等に対応するために、
raw=0.0時のみ、
st,to,lsを参照して要求された部分のみを返すようにすることを考え、
RAWOUT_PARTIALとして試験的に加えてみた。
(nofirstは無視したので、ls=nn時にはレス1は送信されない)
ls=nnに対応するために、送信するレス番の範囲を教える必要があり、
是非次回は続きを差分取得して欲しいから、
dat全体の中でどの部分にあたるかの、位置と範囲も返したい。
となると、部分取得時は返信ヘッダがかなり窮屈になってしまう。
実行した場合のヘッダ("/512K"以後の区切りはTAB)。
/tech/?raw=0.0&to=50 #subject.txtの範囲指定にpathは使えない
+PARTIAL 2441/512KRange:0-2440/22735Res:1-50/478
/tech/998845501/?raw=0.0 #今までと同じ
+OK 297551/512K
/tech/998845501/50-99?raw=0.0
+PARTIAL 11767/512KRange:12226-23992/297551Res:50-99/883
/tech/998845501/l50?raw=0.0
+PARTIAL 27967/512KRange:269584-297550/297551Res:834-883/883
/tech/998845501/l20000?raw=0.0 #強引に全部送信
+PARTIAL 297551/512KRange:0-297550/297551Res:1-883/883
(本物のログとサイズが違うのは、手動でいじったからなので気にしない)
返信するステータス等を勝手に決めるのも心苦しいので、
返信コードやフォーマットなども含め、意見求む。
- 767 :デフォルトの名無しさん :01/09/29 19:17
- cvs使えないので、ここに書いて意見を聞く
int dat_out_raw(void)
{
const char *begin = BigLine[0];
const char *end = BigLine[lineMax];
char statusline[512];
char *vp = statusline;
#ifdefRAWOUT_PARTIAL
int first = 0, last = 0;
if (raw_lastnum == 0 && raw_lastsize == 0
&& (nn_st || nn_to || nn_ls > 1)) {
/* nn_xxはnofirstの関係等で変化しているかもしれないので再算出 */
int st = atoi(zz_st), to = atoi(zz_to), ls = atoi(zz_ls);
first = 1, last = lineMax;
if (ls == 1)/* for Ver5.22 bug */
ls = 0;
if (ls)
st = lineMax - ls + 1;
if (0 < st && st <= lineMax)
first = st;
if (0 < to && to <= lineMax)
last = to;
if (first > last)
last = first;
begin = BigLine[first-1];
end = BigLine[last];
vp += sprintf(vp, "+PARTIAL");
} else
#endif
/* ・・・ */
if (・・・) {
・・・
} else {
・・・
}
vp += sprintf(vp, " %d/%dK", end - begin, MAX_FILESIZE / 1024);
#ifdefRAWOUT_PARTIAL
if (first && last) {
vp += sprintf(vp, "\t""Range:%u-%u/%u",
begin - BigLine[0], end - BigLine[0] - 1, BigLine[lineMax] - BigLine[0]);
vp += sprintf(vp, "\t""Res:%u-%u/%u", first, last, lineMax);
}
#endif
325KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30