From: Hidetoshi NAGAI Date: 2003-10-25T07:17:47+09:00 Subject: [ruby-dev:21713] Re: access ENV on $SAFE==4 永井@知能.九工大です. From: matz@ruby-lang.org (Yukihiro Matsumoto) Subject: [ruby-dev:21712] Re: access ENV on $SAFE==4 Date: Sat, 25 Oct 2003 03:01:39 +0900 Message-ID: <1067018498.004472.14383.nullmailer@picachu.netlab.jp> > |----< $LOAD_PATH ($:, $-I) >------------------------ > | $SAFE >= 4 でのアクセスが禁止される. > | > | ...としていますが,ENV の許可レベルに連動させるという選択も > | ありという気がします. > |---------------------------------------------------- > ま、これは良いとして。 「ENV の許可レベルに連動させる」という点はどう思われますか? > |----< ENV >----------------------------------------- (snip) > | ENV.allow(name) > | : 環境変数 name への $SAFE >=4 でのアクセスを許可する. > | : ただし,現在の $SAFE でのアクセスが許可されていなければ > | : 例外を発生する. > | > | ENV.deny(name) > | : 環境変数 name への $SAFE >=4 でのアクセスを禁止する. > | : ただし,現在の $SAFE でのアクセスが許可されていなければ > | : 例外を発生する. > |---------------------------------------------------- > > 基本的には反対ではないのですが、この仕様はちょっとしっくりき > ません。ENVのアクセスレベルって不要じゃありません? > どうせallow/denyが効果を持つのは $SAFE >= 4 なんですから。 あ,ごめんなさい. 古い記述をコピーしてから修正してたんで,修正忘れです. allow/deny が効果を持つのは,ENV.secure_level=(level) で 指定したレベル以上 ($SAFE >= level) です. > |----< Module >-------------------------------------- > | Module#secure_const(const_sym, level = 4) > | : module/class において,シンボル const_sym で表される定数の > | : アクセス許可レベルを level にする. > | : 変更できるレベルは level >= $SAFE ,かつ, > | : level <= [現在のアクセス許可レベル] でなければならない. > | > | Module#secure_const?(const_sym) > | : module/class において,アクセス許可レベルが設定されている場合は > | : そのレベルを,設定されていない場合には false を返す. > | > | Module#secure_constants > | : module/class において,アクセス許可レベルが設定されている定数の > | : 一覧を { [定数シンボル]=>[許可レベル], ... } のハッシュで返す. > |---------------------------------------------------- > > これも面白いんですし、PLATFORMだけ特別扱いするよりもずっと良 > いのですが、名前が。むしろinsecure_constじゃないですか? > レベルが指定できて嬉しいかどうかもちょっと疑問。 正直なところ,レベル指定は「ついで」のことでした. [ruby-dev:21696] で中田さんが考えていたものに レベル設定が含まれていたので,それを反映しています. 名前については確かに "inseure_*" の方が良さそうです. だとすると, ---------------------------------------------------- ENV.insecure_level ENV.insecure_level=(level) Module#insecure_const(const_sym, level = 4) Module#insecure_const? Module#insecure_constants ---------------------------------------------------- といったところでしょうか. # 私は名前のセンスがないので,良い名前をお願いします.(^_^; -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp