#RT : shiro: ついったーでGaucheのGCに言及されてたんでこんな辺境からつぶやいてみるけど、GaucheがBoehm GCを採用しているのは主としてマルチプラットフォーム対応へ手が足らないから。ポータブルに作ろうと思うと性能が出ない…
#kahua-webの画像アップロードで、アップロードファイルのパーミッションを#o440にしてるのってどこだっけ? #o444とかにしないとApacheプロセスから読めない。
#440? umaskかな?
#cgiブリッジ使ってる?
#cgiブリッジ使ってるなら、ブリッジがkahuaのテンポラリディレクトリにファイルを作って、そいつをKahua/plugins/fileio.scmのsave-uploaded-fileが目的のディレクトリにmoveしてるだけなんで、ブリッジの作ったパーミッションがそのまま引き継がれるんじゃないかな? 特にパーミッションをオーバライドしてはいないので、ブリッジが作るテンポラリファイルがどうなってるかだが…
#fileioプラグインに(define-export (save-uploaded-file spec path) (sys-rename (car spec) path)
(sys-chmod path #o444))こういうパッチを当てた
#ああそうか、kahua.cgiがやってるんでしたっけ。
#あるいは、kahua-webの方でsave-uploaded-fileを呼んだ後にパーミッション変えるか、だね。upload.kahuaかなんかで呼んでる。
#この挙動はカスタマイズできるべきだが、どこで設定するのかが問題だな。kahua.cgiならkahua.confかな?
#fileioプラグイン自身はそのファイルがどう使われるか知らないのでむやみに変えない方がいいかも。
#んー
#なんかさ
#Webアプリのフレームワーク見てると、
#やたらとファイルやディレクトリのパーミッションをワールドリーダブルとかワールドライタブルにする傾向があるんだが
#影響範囲とか考えてる? と小一時間問い詰めたくなる時がある
#デフォルトで使っててトラブルが出ないってことの方を優先してるんかな?
#んで、考えるべきはパーミッションをゆるめることじゃなくて、どういう権限構成にするかってことなので
#「とりあえず動く」ことで敷居を下げることを狙ってるんだと思うのだけど
#そのまま実践投入されているサイト多すぎ
#実戦
#とりあえずhttpdから全部抱えちゃえばそのへんは楽になるんだろうけどね。いろんな方法でアクセスされる可能性があると確かに設計は面倒ってば面倒だなあ。
#ちなみに、kahua-package createのオプションに-sharedとか-privateとかあるのはそのあたりをカスタマイズするため
#それと-owner、-groupを併用して、-sharedの場合は-group writableにする
#で、通常良くやるのは、kahua-spvr以下を実行するユーザをwwwグループに所属させて
#wwwグループから書き込み可能なディレクトリをテンポラリディレクトリとして指定する
#-shared -group=www とかでそれを実現する
#Kahuaベストプラクティス、みたいなのを書くべきなんだろうかな
#UNIX系OSの場合、ファイルやディレクトリのパーミッションは確かに鬼門ですね
#サイトバンドルを実装する前のKahuaでも、ずいぶんとハマりどころがあった
#なので、kahua.confでパーミッションを制御する案は受け入れかねます >yasuyuki
#そのファイルの使われ方を知ってるのはアプリケーションだけなんだから、もしパーミッション関係でイレギュラーな対応が必要になったらアプリケーションをいじるのが筋でしょうね。
#もともと440になってるってことは、kahuaとapacheを同じグループに所属させとくってのが前提なのかな>kahua-web
#レンタルサーバだとそこが自由にいじれないかも。
#ああなるほど
#でも、レンタルサーバだとsuexecだったりしませんか?
#kahua-webは特にパーミッションをいじることはやってなくて、Kahuaまかせだったと思う
#そして、Kahuaは-sharedの場合、ブリッジとkahua-spvrが同じグループに所属していることを想定しています
#うーん、suexecじゃないレンタルサーバを考慮すると、ユーザがグループwwwなディレクトリを作ることもできないのか
#面倒くさいですね多指かに
#確かに
#SuExecでもだめだよ。user権限で書かれたファイルをApacheが読めないもん。
#あーそうかCGIが読むんじゃなくてhttpdが直接読むからだ
#まぁ直すとしたら、kahua-webのプラグインでパーミッションを設定するようにするだな
#アップロードファイルをhttpdが自由に読めるのがデフォルトという考え方はあり得ないので
#imgタグに限ってはそういう挙動の方が親切なのは確かにそうかもしれない
#uploadable-inline-static-objectって手続きをいじればよさそう
#ん
#そうもいかんか...
#毎度のことだけど、文章を書くのは泥沼を行軍してる感じだなあ。プログラムなら難しくても、とりあえず動くものができればそれが確固たる足場になって一息つける。文章はとにかく脱稿するまで這いずり回る感が抜けない。
#parser.peg に関する質問があります。
以下のコードがPARSE-ERRORになるのは仕様なのでしょうか。
>>
(use parser.peg)
(define (main args)
(let1 p ($or ($do (($c #\a)) (($c #\b)) ($return "Wrong"))
($do (($c #\a)) (($c #\B)) ($return "Correct!")))
(peg-parse-string p "aB")))
<<
#僕の理解では、or(選択)が失敗した場合、入力を戻して次の節を試すものだと。
#間違っていたらすいません。
#parser.pegの現在のAPIが今後保たれる保証は一切無いですよ (多分大幅に変わります)、というのは一応断ったうえで、
#上のコードは最初の選択肢に入って($c #\a)をやったところで入力を消費してしまうので、$orの次のブランチは試されません。
#バックトラックしてほしければ、($or ($try ($do (....))) のようにする必要があります。
#素早い返信ありがとうございます
#$try というのがあるんですね