dir:searchサポートの実装
id:himainu:20060215 id:himainu:20060216で失敗した、dir:searchのサポートだが、
方法をかえて再チャレンジ。今度こそうまくいった?
コンパイルフラグで -DDIRSEARCHとすると有効になる。
方針
allow/denyルールで出てくるディレクトリを親ディレクトリ含め全部別途ラベル付けする。
ドメインは,allowルールに出てくるディレクトリ(親ディレクトリ含む)のラベルにdir:searchアクセス可能。
新データ構造
- DOMAINのメンバ dir_listハッシュテーブル
構文解析終了時(convert.c)
/foo/barの場合 dir_foo_bar_t。
type文でdir_label_tableに出現するラベル全部宣言。
allow出力時
consider_childのロジックを変える。
テーブル(dir_label_table)も参照してallow文を出力。
allow /etcを出力するとき。
まず、etcdir_tについて出力。
dir_child_buf_tableを作ってテーブルdir_label_tableから登録
dir_child_buf_tableにあるものを出力。
fcファイル出力時
一番最後に
dir_label_tableに出てくるディレクトリ全部について,
/foo -d system_u:object_r:foodir_t
みたいに出力。
結果
前の実装だと,生成されたポリシーのサイズ(バイナリポリシのルール数)
が2倍以上になり,死んでいたが、今度は。。
サポート前: 142523
サポート後:181438
まぁこんなものか。コンパイル時間も気にならない。