2006年3月25日 (土曜日)

14:23:42 # Life symbollic link 解決の制限. 実はLinux Kernelには,シンボリックリンクをたどる回数に制限がかかっている. ファイルをopenしようとした場合に カーネル空間でシンボリックリンクの先を解決することになる. その際に5段階までしかsymbollic linkをたどってくれない. これは,DoSなどを防ぐための制限のようだが,ちょっとださい気もする. ユーザ空間側からstatして解決してあげればなんとか回避できるような気もする. glibc側でopenするたびにstatをしてシンボリックリンクの解決をするだとか, アプリケーション側で毎回canonicalize_file_nameをよんでからopen するだとか回避策は考えられるのだけど,現実味がちょっとたりない. 意外と低いこの制限,はまりませんかね?

$ ls -l 
total 4
-rw-r--r-- 1 dancer dancer 5 Mar 25 15:49 a
lrwxrwxrwx 1 dancer dancer 1 Mar 25 15:49 b -> a
lrwxrwxrwx 1 dancer dancer 1 Mar 25 15:49 c -> b
lrwxrwxrwx 1 dancer dancer 1 Mar 25 15:49 d -> c
lrwxrwxrwx 1 dancer dancer 1 Mar 25 15:49 e -> d
lrwxrwxrwx 1 dancer dancer 1 Mar 25 15:49 f -> e
lrwxrwxrwx 1 dancer dancer 1 Mar 25 15:49 g -> f
lrwxrwxrwx 1 dancer dancer 1 Mar 25 15:49 h -> g
$ cat b
test
$ cat h
cat: h: Too many levels of symbolic links
$ realcsh.c 
REAL csh: #include <stdlib.h>
REAL csh: #define _GNU_SOURCE
REAL csh: printf("%s\n", canonicalize_file_name("h"));
/tmp/t/a
	

16:13:43 # Life みつかさんのcannaパッケージをスポンサーしました. とりあえずアップロードだけしました.

Junichi Uekawa

$Id: dancer-diary.el,v 1.90 2006/01/31 11:16:16 dancer Exp $