From ari @ mbf.sphere.ne.jp Wed May 7 20:46:05 2003 From: ari @ mbf.sphere.ne.jp (ARISAWA Akihiro) Date: Wed, 07 May 2003 20:46:05 +0900 Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsTD4kTkU6SVUbKEJpbWFnZRskQiVVGyhC?= =?ISO-2022-JP?B?GyRCJSElJCVrJE5JPTwoGyhC?= In-Reply-To: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> Message-ID: >>>>> In [Wanderlust : No.11834] >>>>> 野宮 賢 / NOMIYA Masaru wrote: 野宮> User Agentな環境で、ファイル名が日本語であるイメージファイルを表示しよ 野宮> うとしますと、Viewerは、 野宮> Can't open file g:\tmp\ 野宮> というメッセージで、画像を表示せず、表示しようとしているファイル名も 野宮> ○ △ .JPG 野宮> といった具合に、おかしなものとなっています。 野宮> つまり、「写真.jpg」というファイル名でメールに添付されているものを見よ 野宮> うとしますと、Viewerは、上記のメッセージを吐きます。この状態で、g:\tmp 野宮> を見ますと、ちゃんと「写真.jpg」という一時ファイルが作成されており、 野宮> Viewerにこの「写真.jpg」というファイルを改めて読み込ませますと、画像が 野宮> 問題なく表示されます。 野宮> この問題は、ファイル名がアルファベット表記の場合には、発生しません。 SEMI の問題だと思われます。 添付の patch を適用するとどうでしょうか。 -- 有沢 明宏 -------------- next part -------------- Index: mime-play.el =================================================================== RCS file: /cvs/root/semi/mime-play.el,v retrieving revision 1.85.2.9 diff -u -r1.85.2.9 mime-play.el --- mime-play.el 8 Feb 2003 08:05:56 -0000 1.85.2.9 +++ mime-play.el 7 May 2003 11:39:50 -0000 @@ -152,10 +152,9 @@ (let ((command (mime-format-mailcap-command method - (cons (cons 'filename name) situation)))) - (binary-to-text-funcall - mime-play-messages-coding-system - #'start-process command mime-echo-buffer-name + (cons (cons 'filename name) situation))) + (coding-system-for-read mime-play-messages-coding-system)) + (start-process command mime-echo-buffer-name shell-file-name shell-command-switch command)))) (set-alist 'mime-mailcap-method-filename-alist process name) (set-process-sentinel process 'mime-mailcap-method-sentinel)))) From nomiya @ ttmy.ne.jp Wed May 7 21:23:12 2003 From: nomiya @ ttmy.ne.jp (=?ISO-2022-JP?B?GyRCTG41XCEhOC0bKEI=?= / NOMIYA Masaru) Date: Wed, 07 May 2003 21:23:12 +0900 Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsTD4kTkU6SVUbKEJpbWFnZRskQiVVGyhC?= =?ISO-2022-JP?B?GyRCJSElJCVrJE5JPTwoGyhC?= In-Reply-To: References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> Message-ID: <3cjrrln3.wl%nomiya@ttmy.ne.jp> 野宮@今日はド壷デー、です。 >>>>> In the Message: [Wanderlust ML: No.11844] >>>>> with the date of Wed, 07 May 2003 20:46:05 +0900 >>>>> [有沢さん] == ari @ mbf.sphere.ne.jp (ARISAWA Akihiro) has written: 小生> User Agentな環境で、ファイル名が日本語であるイメージファイルを表示しよ 小生> うとしますと、Viewerは、 小生> Can't open file g:\tmp\ 小生> というメッセージで、画像を表示せず、表示しようとしているファイル名も 小生> ○ △ .JPG 小生> といった具合に、おかしなものとなっています。 [...] 有沢さん> SEMI の問題だと思われます。 有沢さん> 添付の patch を適用するとどうでしょうか。 これでバッチリです。 どうも、有難うございます。m(_ _)m --- 野宮 賢 mail-to: nomiya @ ttmy.ne.jp 「eメールや携帯電話に縛られた社会は、自分自身と向き合ったり、 空想にふけったりする自由を奪う。」 -- M. Crichton -- From tats @ vega.ocn.ne.jp Wed May 7 23:10:58 2003 From: tats @ vega.ocn.ne.jp (Tatsuya Kinoshita) Date: Wed, 07 May 2003 23:10:58 +0900 Subject: insecure tempfile problem (was: =?ISO-2022-JP?B?GyRCRnwbKEI=?= =?ISO-2022-JP?B?GyRCS1w4bEw+JE5FOklVGyhCaW1hZ2UbJEIlVSUhJSQlayROST0bKEI=?= =?ISO-2022-JP?B?GyRCPCgbKEIp?= In-Reply-To: <86smrqew6e.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> Message-ID: <87u1c6onil.wl@tats.iris.ne.jp> On May 7, 2003, [Wanderlust:11846], Shuhei KOBAYASHI wrote: > 安全に temp file を作ることができないという, 有名な Emacs の問題では? > > RUS-CERT Advisory 2000-04:01 > "Several vulnerabilities in GNU Emacs 20" > ;; が大元? > > それとも make-temp-name さえも使っていないという話ですか? 最低限ファイルが壊されるのを防いでほしいと思っています。 SEMIのコードをざっと見てみると、ほかの個所でもmake-temp-nameだけ で済ませているのですね。ローカルのセキュリティ問題は考慮しない、 必要なら安全なtemporary-file-directoryをあらかじめ設定しておく、 という仕様なのでしょうか。 > (Mew や SSH がしているように) private な temporary directory を作って, > それを TMPDIR や temporary-file-directory に指定しておけば関係ないよね, ちなみにMewの場合、make-temp-fileは使っていませんが、 make-temp-nameを使って一時ディレクトリを作成しつつ、わずかな隙を 狙われて他のユーザーに同名のディレクトリを先に作られたとしてもMew 起動時にエラーが起こるようになっています。 -- 木下達也 From shuhei @ aqua.ocn.ne.jp Thu May 8 06:31:42 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 08 May 2003 06:31:42 +0900 Subject: =?iso-2022-jp?b?UmU6IGluc2VjdXJlIHRl?= =?iso-2022-jp?b?bXBmaWxlIHByb2JsZW0g?= =?iso-2022-jp?b?KHdhczogGyRCRnxLXDhsTD4kTkU6SVUbKEJpbQ==?= =?iso-2022-jp?b?YWdlGyRCJVUlISUkJWskTkk9PCgbKEIp?= References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> Message-ID: <864r46jvep.fsf@aqua.ocn.ne.jp> Tatsuya Kinoshita writes: > ローカルのセキュリティ問題は考慮しない、 > 必要なら安全なtemporary-file-directoryをあらかじめ設定しておく、 > という仕様なのでしょうか。 SEMI の仕様は知りませんが, Emacs を使うなら temporary-file-directory を 安全な場所に設定しておくべきだと思っていました. mew-temp-file-initial の docstring にも書いてありますが `call-process-region' が temp file を作る ためです. (20.2 までは /tmp 決め打ちだったと思う. 21 から対策済みのはず) ;; [mew-dist 23022] は temporary-file-directory の方を見るべきですね. > ちなみにMewの場合、make-temp-fileは使っていませんが、 > make-temp-nameを使って一時ディレクトリを作成しつつ、 > わずかな隙を狙われて他のユーザーに同名のディレクトリを先に作られたと > してもMew 起動時にエラーが起こるようになっています。 ちなみに既に一時ディレクトリが存在した場合に make-directory が失敗しない 環境はあるのでしょうか? もし存在するなら set-default-file-modes してから make-directory するより, make-directory してから set-file-modes する方が 良いということになる? -- Shuhei KOBAYASHI From tats @ vega.ocn.ne.jp Thu May 8 08:35:05 2003 From: tats @ vega.ocn.ne.jp (Tatsuya Kinoshita) Date: Thu, 08 May 2003 08:35:05 +0900 (JST) Subject: insecure tempfile problem In-Reply-To: <864r46jvep.fsf@aqua.ocn.ne.jp> References: <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> Message-ID: <20030508.083505.46971320.05@tats.iris.ne.jp> On May 8, 2003, [Wanderlust:11849], Shuhei KOBAYASHI wrote: > SEMI の仕様は知りませんが, Emacs を使うなら temporary-file-directory を > 安全な場所に設定しておくべきだと思っていました. mew-temp-file-initial の > docstring にも書いてありますが `call-process-region' が temp file を作る > ためです. (20.2 までは /tmp 決め打ちだったと思う. 21 から対策済みのはず) call-process-regionのこと、よくわかっていません。あとで調べてみよ うかと思います。(どのあたりを見ればよいか助言を頂けるとありがたい) > ;; [mew-dist 23022] は temporary-file-directory の方を見るべきですね. 「先にtemporary-file-directoryも見る」ということでよろしいでしょ うか。(APEL無しのXEmacsも考慮して) > ちなみに既に一時ディレクトリが存在した場合に make-directory が失敗しない > 環境はあるのでしょうか? あったら驚きます。 -- 木下達也 From teranisi @ gohome.org Thu May 8 13:42:50 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Thu, 08 May 2003 13:42:50 +0900 Subject: insecure tempfile problem (was: =?ISO-2022-JP?B?GyRCRnwbKEI=?= =?ISO-2022-JP?B?GyRCS1w4bEw+JE5FOklVGyhCaW1hZ2UbJEIlVSUhJSQlayROST0bKEI=?= =?ISO-2022-JP?B?GyRCPCgbKEIp?= In-Reply-To: <864r46jvep.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> Message-ID: At 08 May 2003 06:31:42 +0900, Shuhei KOBAYASHI wrote: > > Tatsuya Kinoshita writes: > > ローカルのセキュリティ問題は考慮しない、 > > 必要なら安全なtemporary-file-directoryをあらかじめ設定しておく、 > > という仕様なのでしょうか。 > > SEMI の仕様は知りませんが, Emacs を使うなら temporary-file-directory を > 安全な場所に設定しておくべきだと思っていました. call-process-region の問題というのを正確に把握できていないのですが、 現状では、何も考えずに temporary-file-directory の値が/tmp になっている 環境は多いと思われるので、アプリケーションは、temporary-file-directory は 安全な場所に設定されていないことも想定するべきなのではないかと思います。 …んで、対処としてはとりあえず、 http://lists.airs.net/wl/archive/200305/msg00013.html でいいんじゃないかと思っているのですが、問題ありますでしょうか。 (すみません、上記メール、emacs-mime-ja にも送るべきでした) -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "Only time will tell if I am right or I am wrong..." From kose @ wizard.tamra.co.jp Thu May 8 15:54:01 2003 From: kose @ wizard.tamra.co.jp (=?iso-2022-jp?b?GyRCPi40WBsoQg==?= =?iso-2022-jp?b?IBskQjVIQicbKEI=?= (KOSEKI Yoshinori)) Date: Thu, 08 May 2003 15:54:01 +0900 Subject: insecure tempfile problem (was: =?iso-2022-jp?b?GyRCRnxLXDhsTD4kThsoQg==?= =?iso-2022-jp?b?GyRCRTpJVRsoQg==?=image =?iso-2022-jp?b?GyRCJVUlISUkJWskThsoQg==?= =?iso-2022-jp?b?GyRCST08KBsoQg==?=) In-Reply-To: <864r46jvep.fsf@aqua.ocn.ne.jp> (Shuhei KOBAYASHI's message of "08 May 2003 06:31:42 +0900") References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> Message-ID: <20030508xjcu1c6apyu.%kose@wizard.tamra.co.jp> >>>>> In [emacs-mime-ja : No.01219] >>>>> Shuhei KOBAYASHI wrote: > SEMI の仕様は知りませんが, Emacs を使うなら temporary-file-directory を > 安全な場所に設定しておくべきだと思っていました. mew-temp-file-initial の > docstring にも書いてありますが `call-process-region' が temp file を作る > ためです. (20.2 までは /tmp 決め打ちだったと思う. 21 から対策済みのはず) Emacs21 の callproc.c を見ると、 `call-process-region' が使う temp file は、 temp-file-name-pattern で、 temp-file-name-pattern の初期値は、 環境変数 TMPDIR がセットされていれば $TMPDIR/emacsXXXXXX 、 セットされていなければ /tmp/emacsXXXXXX 。 : temp-file-name-pattern's value is "/tmp/emacsXXXXXX" : : Pattern for making names for temporary files. : This is used by `call-process-region'. のようです。 安全な場所にするには TMPDIR にセットすると両方に反映される、 のかな。 -- こせき // Meadow Netinstall http://www5d.biglobe.ne.jp/~kose/html/NetInstall.html From shuhei @ aqua.ocn.ne.jp Thu May 8 18:09:54 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 08 May 2003 18:09:54 +0900 Subject: =?iso-2022-jp?b?UmU6IGluc2VjdXJlIHRl?= =?iso-2022-jp?b?bXBmaWxlIHByb2JsZW0g?= =?iso-2022-jp?b?KHdhczogGyRCRnxLXDhsTD4kTkU6SVUbKEJpbQ==?= =?iso-2022-jp?b?YWdlIBskQiVVJSElJCVrJE5JPTwoGyhCKQ==?= References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <20030508xjcu1c6apyu.%kose@wizard.tamra.co.jp> Message-ID: <86wuh1iz31.fsf@aqua.ocn.ne.jp> 小関 吉則 (KOSEKI Yoshinori) writes: > Emacs21 の callproc.c を見ると、 > `call-process-region' が使う temp file は、 > temp-file-name-pattern で、 > temp-file-name-pattern の初期値は、 > 環境変数 TMPDIR がセットされていれば $TMPDIR/emacsXXXXXX 、 > セットされていなければ /tmp/emacsXXXXXX 。 おっと, Lisp 変数(temporary-file-directory)の方は参照しないのでしたっけ. 自分でも一度ここまで追ったことがあったのですが記憶が間違っていました. それなら, > 安全な場所にするには TMPDIR にセットすると両方に反映される、 ということになりますね. 小関さんありがとうございます. -- Shuhei KOBAYASHI From shuhei @ aqua.ocn.ne.jp Thu May 8 19:13:41 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 08 May 2003 19:13:41 +0900 Subject: insecure tempfile problem References: <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <20030508.083505.46971320.05@tats.iris.ne.jp> Message-ID: <86r879iw4q.fsf@aqua.ocn.ne.jp> Tatsuya Kinoshita writes: > (APEL無しのXEmacsも考慮して) あぁそうでした. そもそも [mew-dist 23022] に反応しなかった理由が XEmacs に思い至ったため でした. 今回は APEL 付きの XEmacs を見て勘違いしたわけですらなく, 完全に XEmacs のことを失念していました. > > ;; [mew-dist 23022] は temporary-file-directory の方を見るべきですね. > 「先にtemporary-file-directoryも見る」ということでよろしいでしょうか。 XEmacs には temporary-file-directory に相当するものは今もないのでしたっけ? それならばその通りだと思います. ちなみにここで TMP や TEMP よりも TMPDIR を優先しているのは GNU の方針です. (GNU coding standards 参照) > > 既に一時ディレクトリが存在した場合に make-directory が失敗しない環境 この書き方では私が漠然と疑問に思ったことを正しく表現していませんでした. 「これから作成しようとする一時ディレクトリと同名の 何か が存在した場合に make-directory が失敗しない場合はあるでしょうか?」と書いてあればよかった? 具体的なものとしてとりあえず思い付いたのは以下のようなものですが, 最後の mkdir が失敗するのを期待しても問題ないのでしょうか? % ls -l total 0 % ln -s foo bar % ls -l total 1 lrwxr-xr-x 1 shuhei shuhei 3 May 8 18:19 bar -> foo % mkdir bar mkdir: bar: File exists -- Shuhei KOBAYASHI From yamaoka @ jpl.org Thu May 8 20:19:30 2003 From: yamaoka @ jpl.org (Katsumi Yamaoka) Date: Thu, 08 May 2003 20:19:30 +0900 Subject: insecure tempfile problem References: <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <20030508.083505.46971320.05@tats.iris.ne.jp> <86r879iw4q.fsf@aqua.ocn.ne.jp> Message-ID: >>>>> In [Wanderlust : No.11854] >>>>> Shuhei KOBAYASHI wrote: 小林さん> XEmacs には temporary-file-directory に相当するものは今もな 小林さん> いのでしたっけ? `temp-directory' is a built-in function (temp-directory) Documentation: Return the pathname to the directory to use for temporary files. On MS Windows, this is obtained from the TEMP or TMP environment variables, defaulting to / if they are both undefined. On Unix it is obtained from TMPDIR, with /tmp as the default. 少なくとも XEmacs 21.1 以上で存在します。20.x は今は簡単に動かせ ないのでご勘弁を。以下は Gnus での使われ方です。 (defcustom mm-tmp-directory (if (fboundp 'temp-directory) (temp-directory) (if (boundp 'temporary-file-directory) temporary-file-directory "/tmp/")) "Where mm will store its temporary files." :type 'directory :group 'mime-display) -- Katsumi Yamaoka From shuhei @ aqua.ocn.ne.jp Thu May 8 20:25:44 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 08 May 2003 20:25:44 +0900 Subject: insecure tempfile problem References: <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <20030508.083505.46971320.05@tats.iris.ne.jp> Message-ID: <86addxissn.fsf@aqua.ocn.ne.jp> Tatsuya Kinoshita writes: > call-process-regionのこと、よくわかっていません。あとで調べてみようかと > 思います。(どのあたりを見ればよいか助言を頂けるとありがたい) Yuuichi Teranishi writes: > call-process-region の問題というのを正確に把握できていないのですが、 call-process-region は region を temp file に書き出し, それを process に 渡すという実装になっています. その temp file の作成方法に問題があったと いうことです. これ以上は emacs/src/callproc.c 内の定義を比較してください. ;; 「mktemp() は使うな, mkstemp() を使え」とか「mktemp() を使わなければ ;; いけないならせめて O_EXCL を付けて open() しろ」といった有名な話です. > > (20.2 までは /tmp 決め打ちだったと思う. 21 から対策済みのはず) う〜む, だいぶ記憶が間違っていたみたいです. TMPDIR を参照する temp-file-name-pattern が導入されたのが 20.1 でした. また, 21 でも HAVE_MKSTEMP が定義されない環境(どんな環境?)では何も変わっ ていないように見えます(write-region で O_EXCL が使用可能になったので対処 できるはず). file mode も設定しているようには見えないけど大丈夫だろうか? -- Shuhei KOBAYASHI From shuhei @ aqua.ocn.ne.jp Thu May 8 20:46:06 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 08 May 2003 20:46:06 +0900 Subject: =?iso-2022-jp?b?UmU6IGluc2VjdXJlIHRl?= =?iso-2022-jp?b?bXBmaWxlIHByb2JsZW0g?= =?iso-2022-jp?b?KHdhczogGyRCRnxLXDhsTD4kTkU6SVUbKEJpbQ==?= =?iso-2022-jp?b?YWdlGyRCJVUlISUkJWskTkk9PCgbKEIp?= References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> Message-ID: <864r45irup.fsf@aqua.ocn.ne.jp> Yuuichi Teranishi writes: > http://lists.airs.net/wl/archive/200305/msg00013.html > でいいんじゃないかと思っているのですが、問題ありますでしょうか。 これ自体には問題はないと思っていますが, > 現状では、何も考えずに temporary-file-directory の値が/tmp になっている > 環境は多いと思われるので、アプリケーションは、temporary-file-directory は > 安全な場所に設定されていないことも想定するべきなのではないかと思います。 /tmp の直下が (ソフトウェアの数)x(ユーザの数)? の private temp directory で溢れ返るような解決策はどうかと思っていますので, 加担したくはないですね. ;; 改めて書いておきますが, 私はここしばらく FLIM/SEMI を使用していません. ;; 実際に使用している人達が望む方向にどんどん改良していってください. -- Shuhei KOBAYASHI From tats @ vega.ocn.ne.jp Thu May 8 20:53:13 2003 From: tats @ vega.ocn.ne.jp (Tatsuya Kinoshita) Date: Thu, 08 May 2003 20:53:13 +0900 (JST) Subject: insecure tempfile problem In-Reply-To: <86r879iw4q.fsf@aqua.ocn.ne.jp> References: <864r46jvep.fsf@aqua.ocn.ne.jp> <20030508.083505.46971320.05@tats.iris.ne.jp> <86r879iw4q.fsf@aqua.ocn.ne.jp> Message-ID: <20030508.205313.37450521.05@tats.iris.ne.jp> On May 8, 2003, [Wanderlust:11854], Shuhei KOBAYASHI wrote: > 具体的なものとしてとりあえず思い付いたのは以下のようなものですが, 最後の > mkdir が失敗するのを期待しても問題ないのでしょうか? > > % ls -l > total 0 > % ln -s foo bar > % ls -l > total 1 > lrwxr-xr-x 1 shuhei shuhei 3 May 8 18:19 bar -> foo > % mkdir bar > mkdir: bar: File exists そのようになるものと思っています。 -- 木下達也 From tats @ vega.ocn.ne.jp Thu May 8 20:59:06 2003 From: tats @ vega.ocn.ne.jp (Tatsuya Kinoshita) Date: Thu, 08 May 2003 20:59:06 +0900 (JST) Subject: insecure tempfile problem In-Reply-To: <86addxissn.fsf@aqua.ocn.ne.jp> References: <864r46jvep.fsf@aqua.ocn.ne.jp> <20030508.083505.46971320.05@tats.iris.ne.jp> <86addxissn.fsf@aqua.ocn.ne.jp> Message-ID: <20030508.205906.76533756.05@tats.iris.ne.jp> On May 8, 2003, [Wanderlust:11856], Shuhei KOBAYASHI wrote: > call-process-region は region を temp file に書き出し, それを process に > 渡すという実装になっています. その temp file の作成方法に問題があったと > いうことです. これ以上は emacs/src/callproc.c 内の定義を比較してください. > ;; 「mktemp() は使うな, mkstemp() を使え」とか「mktemp() を使わなければ > ;; いけないならせめて O_EXCL を付けて open() しろ」といった有名な話です. > TMPDIR を参照する temp-file-name-pattern が導入されたのが 20.1 でした. なるほど。手元のソースを見てみると、Emacs 21.3ではmkstempを(あれ ば)使っており、Emacs 20.7ではTMPDIRは見ているもののmkstempを使わ ないまま(mktempを使って)Fwrite_regionしています。 > file mode も設定しているようには見えないけど大丈夫だろうか? とりあえず、GNU C Library 2.0.7以降では、mkstempが0600にしてくれ るようです。 -- 木下達也 From teranisi @ gohome.org Thu May 8 22:24:27 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Thu, 08 May 2003 22:24:27 +0900 Subject: insecure tempfile problem In-Reply-To: <864r45irup.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> Message-ID: At 08 May 2003 20:46:06 +0900, Shuhei KOBAYASHI wrote: > > > 現状では、何も考えずに temporary-file-directory の値が/tmp になっている > > 環境は多いと思われるので、アプリケーションは、temporary-file-directory は > > 安全な場所に設定されていないことも想定するべきなのではないかと思います。 > > /tmp の直下が (ソフトウェアの数)x(ユーザの数)? の private temp directory > で溢れ返るような解決策はどうかと思っていますので, 加担したくはないですね. GNU coding standard が TMPDIR を優先することを推奨してるのは、 /tmp に集中するのを避けるという意味合いが大きいのでしょうかね…。 それはさておき、TMPDIR や temporary-file-directory は、 ユーザにとって安全な場所に設定するべきである、という規定はないと思うので、 一般に、temporary-file-directory は安全な場所に設定されていないことを 想定しておくに越したことはないんじゃないでしょうか。 -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "The movement you need is on your shoulder..." From shuhei @ aqua.ocn.ne.jp Fri May 9 06:41:18 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 09 May 2003 06:41:18 +0900 Subject: insecure tempfile problem References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> Message-ID: <86brydglq9.fsf@aqua.ocn.ne.jp> teranisi @ gohome.org (Yuuichi Teranishi) writes: > GNU coding standard が TMPDIR を優先することを推奨してるのは、 > /tmp に集中するのを避けるという意味合いが大きいのでしょうかね…。 これはそんなことはないと思っています. TMP, TEMP, TMPDIR といったよく使われていた(?)環境変数名の中で TMPDIR が temporary directory を表わすのに一番適切だと判断したのではないかと. > それはさておき、TMPDIR や temporary-file-directory は、ユーザに > とって安全な場所に設定するべきである、という規定はないと思うので、 「規定」はないですが, /tmp が危険な場所であるというのは少なくとも 5 年は 前から言われていることです. (GCC の security hole などの話題がその頃か?) 個々のアプリケーションが注意深く /tmp を使うのと /tmp に代わる安全な場所 を確保してアプリケーションにそちらを使わせるのとどちらがより根本的な解決 だと思われますか? 私は後者の方が単純確実だと思っているので, 自分に出来る 範囲で, この手の話題が出るたびに 「TMPDIR や temporary-file-directory を 安全な場所に設定しておけば問題ないよね」と繰り返し書いてきたつもりです. Emacs 20 を使っているならば, いくら個々のアプリケーションが対応しても, `call-process-region' という広く使われている関数が一時ファイルを安全で はない方法で(デフォルトでは) /tmp に作成するので, 安全な場所を確保して TMPDIR に指定しないと(複数人で使用している環境では特に)問題があります. Emacs 19 やそれ以前では回避策はありません. > 一般に、temporary-file-directory は安全な場所に設定されていないことを > 想定しておくに越したことはないんじゃないでしょうか。 こちらの方向で対策を行なおうという人は残念ながら今まで出てこなかったと. ;; 何かこの手の話題で上野さんが即座に対応してくれた記憶はありますが... -- Shuhei KOBAYASHI From teranisi @ gohome.org Fri May 9 10:10:19 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Fri, 09 May 2003 10:10:19 +0900 Subject: insecure tempfile problem In-Reply-To: <86brydglq9.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> Message-ID: At 09 May 2003 06:41:18 +0900, Shuhei KOBAYASHI wrote: > > Emacs 20 を使っているならば, いくら個々のアプリケーションが対応しても, > `call-process-region' という広く使われている関数が一時ファイルを安全で > はない方法で(デフォルトでは) /tmp に作成するので, 安全な場所を確保して > TMPDIR に指定しないと(複数人で使用している環境では特に)問題があります. > Emacs 19 やそれ以前では回避策はありません. なるほど、Emacs 20 では、/tmp に代わる安全な場所を確保して、 TMPDIR を設定することしか、自衛策がなかったということですね。 > > それはさておき、TMPDIR や temporary-file-directory は、ユーザに > > とって安全な場所に設定するべきである、という規定はないと思うので、 > > 「規定」はないですが, /tmp が危険な場所であるというのは少なくとも 5 年は > 前から言われていることです. (GCC の security hole などの話題がその頃か?) > 個々のアプリケーションが注意深く /tmp を使うのと /tmp に代わる安全な場所 > を確保してアプリケーションにそちらを使わせるのとどちらがより根本的な解決 > だと思われますか? セキュリティの観点では、後者なのでしょうね。 しかし、そもそも一時ファイルを共通の位置に置くのは、マルチユーザ環境で、 何らかの原因で残った一時ファイルを管理者が一括して削除したいから、 というのもありますよね。(OS boot 時に /tmp を rm -r するとか) ;; いまどきそんなこと気にしないのかな? というわけで、資源管理の観点からは、巨大な一時ファイルを作るアプリケー ションは特に、一時ファイル置き場が共通の場所となっていることを考慮する 意義はあると思います。 -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "Love is needing to be loved..." From shuhei @ aqua.ocn.ne.jp Fri May 9 21:34:31 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 09 May 2003 21:34:31 +0900 Subject: insecure tempfile problem References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> Message-ID: <86r878fgdk.fsf@aqua.ocn.ne.jp> Yuuichi Teranishi writes: > しかし、そもそも一時ファイルを共通の位置に置くのは、マルチユーザ環境で、 > 何らかの原因で残った一時ファイルを管理者が一括して削除したいから、 > というのもありますよね。(OS boot 時に /tmp を rm -r するとか) これは意外な反応でした. TMPDIR の場所として想定していたのは, Mew や SSH と同様な /tmp/${USER} の ような形式で, ${HOME}/tmp のような形式のものは全く考えていませんでした. ここで寺西さんが想定しているのは ${HOME}/tmp のようなものですよね? > ;; いまどきそんなこと気にしないのかな? 私は気にしています;-) その違いを理由に /tmp と /var/tmp を使い分けるとか. > > /tmp に代わる安全な場所を確保してアプリケーションにそちらを使わせる 今は .profile の中で TMPDIR="/tmp/${USER}" を作成し export していますが, xdm や ssh などが安全な場所を確保して TMPDIR に設定することができるよう になっていたり, mkdtemp の結果を TMPDIR に設定して残りの引数を exec する wrapper があったりしたら便利だろうかなどと妄想しています. -- Shuhei KOBAYASHI From teranisi @ gohome.org Sat May 10 00:16:03 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Sat, 10 May 2003 00:16:03 +0900 Subject: insecure tempfile problem In-Reply-To: <86r878fgdk.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> Message-ID: <85r878ywuk.wl@ns.templewest.net> At 09 May 2003 21:34:31 +0900, Shuhei KOBAYASHI wrote: > > Yuuichi Teranishi writes: > > しかし、そもそも一時ファイルを共通の位置に置くのは、マルチユーザ環境で、 > > 何らかの原因で残った一時ファイルを管理者が一括して削除したいから、 > > というのもありますよね。(OS boot 時に /tmp を rm -r するとか) > > これは意外な反応でした. > TMPDIR の場所として想定していたのは, Mew や SSH と同様な /tmp/${USER} の > ような形式で, ${HOME}/tmp のような形式のものは全く考えていませんでした. > ここで寺西さんが想定しているのは ${HOME}/tmp のようなものですよね? …すみません。そうです。 At 08 May 2003 20:46:06 +0900, Shuhei KOBAYASHI wrote: > > /tmp の直下が (ソフトウェアの数)x(ユーザの数)? の private temp directory > で溢れ返るような解決策はどうかと思っていますので, このご発言の意味が理解できていませんでした。すみません。 /tmp の直下が 1 x (ユーザ数) の private temp directory になる 解決策ならよいってことだったのですね。 しかし、結局のところ、temporary-file-directory 直下にファイルを作る場合も、 make-temp-name したファイルを作るに越したことはない、ってことで よろしいんですよね。 とすると、もとのファイル名と同じ file-name-nondirectory のファイル名 を持つ一時ファイルを別アプリケーションに渡したい場合は、 > mkdtemp の結果を TMPDIR に設定して残りの引数を exec する > wrapper があったりしたら便利だろうかなどと妄想しています. のようなフレームワークがない以上、 temporary-file-directory/(make-temp-name したディレクトリ)/もとのファイル名 という名前の一時ファイルを作るしかないのではないでしょうか。 拡張子だけ保存した一時ファイル名でもいいのかなあ。 でも mailcap アプリケーション上で名前を付けて保存とかやるときに もとのファイル名を知りたいですよね…。 -- teranisi From shuhei @ aqua.ocn.ne.jp Sat May 10 05:38:42 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 10 May 2003 05:38:42 +0900 Subject: insecure tempfile problem References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> Message-ID: <867k8zg8j1.fsf@aqua.ocn.ne.jp> Yuuichi Teranishi writes: > しかし、結局のところ、temporary-file-directory 直下にファイルを作る場 > 合も、make-temp-name したファイルを作るに越したことはない、ってことで > よろしいんですよね。 現在の基準では make-temp-name(mktemp) は安全ではないと考えられていると 思います. Emacs 21 の make-temp-name の docstring にも書いてありますね. Emacs 21 で追加された make-temp-file('excl 付きの write-region で実装) を使わない限り public な temporary-file-directory では問題があります... あれ, make-temp-file は file mode を設定してないように見えるがいいのか? 必要なら自前で設定しろということか. > のようなフレームワークがない以上、 > temporary-file-directory/(make-temp-name したディレクトリ)/もとのファイル名 > という名前の一時ファイルを作るしかないのではないでしょうか。 はい. ただしその解決策には疑問を持っているので, 自分が積極的に手を動かすことは しないというのが寺西さんに対する最初の回答です. -- Shuhei KOBAYASHI From tats @ vega.ocn.ne.jp Sat May 10 06:22:52 2003 From: tats @ vega.ocn.ne.jp (Tatsuya Kinoshita) Date: Sat, 10 May 2003 06:22:52 +0900 (JST) Subject: insecure tempfile problem In-Reply-To: <86r878fgdk.fsf@aqua.ocn.ne.jp> References: <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> Message-ID: <20030510.062252.25626037.05@tats.iris.ne.jp> On May 9, 2003, [Wanderlust:11866], Shuhei KOBAYASHI wrote: > 今は .profile の中で TMPDIR="/tmp/${USER}" を作成し export していますが, どうやって安全に"/tmp/${USER}"を作成するのでしょうか。 -- 木下達也 From tats @ vega.ocn.ne.jp Sat May 10 06:25:52 2003 From: tats @ vega.ocn.ne.jp (Tatsuya Kinoshita) Date: Sat, 10 May 2003 06:25:52 +0900 (JST) Subject: insecure tempfile problem In-Reply-To: <867k8zg8j1.fsf@aqua.ocn.ne.jp> References: <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> Message-ID: <20030510.062552.19672640.05@tats.iris.ne.jp> On May 10, 2003, [Wanderlust:11869], Shuhei KOBAYASHI wrote: > 現在の基準では make-temp-name(mktemp) は安全ではないと考えられていると > 思います. Emacs 21 の make-temp-name の docstring にも書いてありますね. > Emacs 21 で追加された make-temp-file('excl 付きの write-region で実装) > を使わない限り public な temporary-file-directory では問題があります... はい。「make-temp-nameしたディレクトリ」案では、通常の実行では他 のユーザーと競合しない、わずかな隙を狙われて攻撃されたとしてもそ れを検知できる、というあたりで良しということにしています。 > > temporary-file-directory/(make-temp-name したディレクトリ)/もとのファイル名 > > という名前の一時ファイルを作るしかないのではないでしょうか。 SEMIにはほかにも/tmp直下のファイルについてmake-temp-nameだけで済 ませている個所が見られます。そこでも対処が必要になりそうです。 -- 木下達也 From shuhei @ aqua.ocn.ne.jp Sat May 10 06:43:05 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 10 May 2003 06:43:05 +0900 Subject: insecure tempfile problem References: <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <20030510.062252.25626037.05@tats.iris.ne.jp> Message-ID: <86smrneqza.fsf@aqua.ocn.ne.jp> Tatsuya Kinoshita writes: > > 今は .profile の中で TMPDIR="/tmp/${USER}" を作成し export していますが, > どうやって安全に"/tmp/${USER}"を作成するのでしょうか。 Mew が行なっているのと同様の方法です. umask を一時的に設定して mkdir, 失敗した場合でも chmod 700 して少なくとも 自分が owner であることを確認. これも失敗した場合には安全な TMPDIR の使用 を諦めることにしています. [wl 11854] に書いたような疑問は自分の使用する OS の範囲内では問題ないことを確認済みです. -- Shuhei KOBAYASHI From teranisi @ gohome.org Sat May 10 11:37:21 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Sat, 10 May 2003 11:37:21 +0900 Subject: insecure tempfile problem In-Reply-To: <867k8zg8j1.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> Message-ID: <85of2bzfvi.wl@ns.templewest.net> ;; みなさん朝早いですね…。 At 10 May 2003 05:38:42 +0900, Shuhei KOBAYASHI wrote: > > ただしその解決策には疑問を持っているので, 自分が積極的に手を動かすことは > しないというのが寺西さんに対する最初の回答です. ありがとうございました。勉強になりました。 対処方法はもうちょっと考えてみたいと思います。 -- teranisi From teranisi @ gohome.org Sun May 11 18:26:22 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Sun, 11 May 2003 18:26:22 +0900 Subject: insecure tempfile problem In-Reply-To: <85of2bzfvi.wl@ns.templewest.net> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> Message-ID: At Sat, 10 May 2003 11:37:21 +0900, Yuuichi Teranishi wrote: > > 対処方法はもうちょっと考えてみたいと思います。 * (Emacs 21 にはある) make-temp-file を、他の Emacsen 向けにも APEL あたりで用意するようにする。 * 上記 make-temp-file では、自分専用の一時ファイル置き場を 確保してから一時ファイルを作るようにする。 * 一時ファイル生成は全般に make-temp-file を使う。 というのがいいのではないか、という気がしているのですが、 いかがでしょうか。 poe.el あたりに入れることを想定した make-temp-file の実装案を添付します。 temporary-file-directory が自分専用なら直下に一時ファイルを作り、そうで なければ、直下に自分専用の一時ファイル置き場 (emacs-($USER)) を確保して、 一時ファイルを作ります。いちおう手元の XEmacs 21.4.12, Mule 2.3 @ 19.34 で動作確認してます。 Windows だとどうなるのか、さっぱりわからないので どなたか詳しい方のフォローをいただきたいところです…。 -------------- next part -------------- ;; Emacs 21. Create a temporary file. (lisp/subr.el) (defvar temporary-file-directory-internal nil "A directory for a temporary file. Internal use only.") (defun-maybe make-temp-file (prefix &optional dir-flag suffix) "Create a temporary file. The returned file name (created by appending some random characters at the end of PREFIX, and expand it against the temporary directory) is guaranteed to point to a newly created empty file. You can then use `write-region' to write new data into the file. The temporary directory is `temporary-file-directory' if it is secure. If not, `temporary-file-directory'/emacs-`user-login-name' is used. If DIR-FLAG is non-nil, create a new empty directory instead of a file. If SUFFIX is non-nil, add that at the end of the file name." ;; If `temporary-file-directory-internal' is nil, ;; (which means this is the first time to use this function) ;; set appropriate temporary directory. ;; (create a new temporal directory if necessary) (unless temporary-file-directory-internal (cond ((null temporary-file-directory) (error "`temporary-file-dirctory' is not set")) ((not (file-exists-p temporary-file-directory)) (error "%s does not exist" temporary-file-directory)) ((not (file-directory-p temporary-file-directory)) (error "%s is not a directory" temporary-file-directory)) ((not (file-writable-p temporary-file-directory)) (error "%s is not writable" temporary-file-directory))) ;; If temporary-file-directory has right permission, use it. (if (and (eq (user-uid) (nth 2 (file-attributes temporary-file-directory))) ;; 448 is -rwx------ (eq (file-modes temporary-file-directory) 448)) (setq temporary-file-directory-internal temporary-file-directory) ;; Use `temporary-file-directory'/emacs-`user-login-name' (let ((user-temp-dir (expand-file-name (concat "emacs-" (user-login-name)) temporary-file-directory)) umask) (if (and (file-directory-p user-temp-dir) (eq (user-uid) (nth 2 (file-attributes user-temp-dir))) (eq (file-modes user-temp-dir) 448)) (setq temporary-file-directory-internal user-temp-dir) (if (not (file-exists-p user-temp-dir)) (progn (setq umask (default-file-modes)) (unwind-protect (progn (set-default-file-modes 448) (make-directory user-temp-dir)) (set-default-file-modes umask)) (setq temporary-file-directory-internal user-temp-dir)) (cond ((and (file-exists-p user-temp-dir) (not (file-directory-p user-temp-dir))) (error "%s is not a directory")) ((not (eq (user-uid) (nth 2 (file-attributes user-temp-dir)))) (error "%s is not owned by user")) ((eq (file-modes user-temp-dir) 448) (error "%s has incorrect permissions")))))))) (let ((umask (default-file-modes)) file) (unwind-protect (progn ;; Create temp files with strict access rights. It's easy to ;; loosen them later, whereas it's impossible to close the ;; time-window of loose permissions otherwise. (set-default-file-modes 448) (while (condition-case () (progn (setq file (make-temp-name (expand-file-name prefix temporary-file-directory-internal))) (if suffix (setq file (concat file suffix))) (if dir-flag (make-directory file) ;; On Emacs 21, following line is: ;; (write-region "" nil file nil 'silent nil 'excl) (write-region "" nil file nil 'silent nil)) nil) (file-already-exists t)) nil) file) ;; Reset the umask. (set-default-file-modes umask)))) -------------- next part -------------- -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "Only time will tell if I am right or I am wrong..." From teranisi @ gohome.org Mon May 12 23:02:23 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Mon, 12 May 2003 23:02:23 +0900 Subject: insecure tempfile problem In-Reply-To: References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> Message-ID: At Sun, 11 May 2003 18:26:22 +0900, Yuuichi Teranishi wrote: > > * (Emacs 21 にはある) make-temp-file を、他の Emacsen 向けにも > APEL あたりで用意するようにする。 > * 上記 make-temp-file では、自分専用の一時ファイル置き場を > 確保してから一時ファイルを作るようにする。 > * 一時ファイル生成は全般に make-temp-file を使う。 > > というのがいいのではないか、という気がしているのですが、 > いかがでしょうか。 うーむ、何にも反応がないというのは、いいのやら悪いのやら…。 このまま特に反対がないようでしたら apel に commit する方向で動こうと思います。 > Windows だとどうなるのか、さっぱりわからないので > どなたか詳しい方のフォローをいただきたいところです…。 Windows はマルチユーザ環境じゃない(?)ので気にしなくてもいいのかな? …ということで、とりあえず Meadow 等では temporary-file-directory を そのまま使うようにしてみました。 あと、少し間違ってた部分を修正。 -------------- next part -------------- ;; Emacs 21: Create a temporary file. (lisp/subr.el) (defvar temporary-file-directory-internal nil "A directory for a temporary file. Internal use only.") (defun-maybe make-temp-file (prefix &optional dir-flag suffix) "Create a temporary file. The returned file name (created by appending some random characters at the end of PREFIX, and expand it against the temporary directory) is guaranteed to point to a newly created empty file. You can then use `write-region' to write new data into the file. The temporary directory is `temporary-file-directory' if it is secure. If not, `temporary-file-directory'/emacs-`user-login-name' is used. If DIR-FLAG is non-nil, create a new empty directory instead of a file. If SUFFIX is non-nil, add that at the end of the file name." ;; If `temporary-file-directory-internal' is nil, ;; (which means this is the first time to use this function) ;; set appropriate temporary directory. ;; (create a new temporal directory if necessary) (unless temporary-file-directory-internal (cond ((null temporary-file-directory) (error "`temporary-file-dirctory' is not set")) ((not (file-exists-p temporary-file-directory)) (error "%s does not exist" temporary-file-directory)) ((not (file-directory-p temporary-file-directory)) (error "%s is not a directory" temporary-file-directory)) ((not (file-writable-p temporary-file-directory)) (error "%s is not writable" temporary-file-directory))) ;; Single-user systems: (if (memq system-type '(ms-dos windows-nt)) (setq temporary-file-directory-internal temporary-file-directory) ;; If temporary-file-directory has right permission, use it. (if (and (eq (user-uid) (nth 2 (file-attributes temporary-file-directory))) ;; 448 is -rwx------ (eq (file-modes temporary-file-directory) 448)) (setq temporary-file-directory-internal temporary-file-directory) ;; Use `temporary-file-directory'/emacs-`user-login-name' (let ((user-temp-dir (expand-file-name (concat "emacs-" (user-login-name)) temporary-file-directory)) umask) (if (and (file-directory-p user-temp-dir) (eq (user-uid) (nth 2 (file-attributes user-temp-dir))) (eq (file-modes user-temp-dir) 448)) (setq temporary-file-directory-internal user-temp-dir) (if (not (file-exists-p user-temp-dir)) (progn (setq umask (default-file-modes)) (unwind-protect (progn (set-default-file-modes 448) (make-directory user-temp-dir)) (set-default-file-modes umask)) (setq temporary-file-directory-internal user-temp-dir)) (cond ((and (file-exists-p user-temp-dir) (not (file-directory-p user-temp-dir))) (error "%s is not a directory" user-temp-dir)) ((not (eq (user-uid) (nth 2 (file-attributes user-temp-dir)))) (error "%s is not owned by user" user-temp-dir)) ((not (eq (file-modes user-temp-dir) 448)) (error "%s has incorrect permissions" user-temp-dir))))))))) (let ((umask (default-file-modes)) file) (unwind-protect (progn ;; Create temp files with strict access rights. It's easy to ;; loosen them later, whereas it's impossible to close the ;; time-window of loose permissions otherwise. (set-default-file-modes 448) (while (condition-case () (progn (setq file (make-temp-name (expand-file-name prefix temporary-file-directory-internal))) (if suffix (setq file (concat file suffix))) (if dir-flag (make-directory file) ;; On Emacs 21, following line is: ;; (write-region "" nil file nil 'silent nil 'excl) (write-region "" nil file nil 'silent nil)) nil) (file-already-exists t)) nil) file) ;; Reset the umask. (set-default-file-modes umask)))) -------------- next part -------------- -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "Only time will tell if I am right or I am wrong..." From shuhei @ aqua.ocn.ne.jp Tue May 13 06:04:01 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 13 May 2003 06:04:01 +0900 Subject: insecure tempfile problem References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> Message-ID: <8665ofancu.fsf@aqua.ocn.ne.jp> teranisi @ gohome.org (Yuuichi Teranishi) writes: > うーむ、何にも反応がないというのは、いいのやら悪いのやら…。 昨夜は返事を書きかけでした↓ > このまま特に反対がないようでしたら apel に commit する方向で動こうと思います。 これには反対なのですが, 対案が悩みなので. teranisi @ gohome.org (Yuuichi Teranishi) writes: > poe.el あたりに入れることを想定した make-temp-file の実装案を添付します。 * SUFFIX は独自拡張でしょうか? * PREFIX が絶対パスの場合には? * temporary-file-directory が private でない場合でも親が private なら? (temporary-file-directory に ${HOME}/tmp のようなものを指定した場合) * temp file の file mode は make-temp-file の外で設定すべきなのでは? などなど, 色々と問題がありそうですし, make-temp-file が定義されている といって, 他のアプリケーションが安心して使ってしまうのも不安なので, > * (Emacs 21 にはある) make-temp-file を、他の Emacsen 向けにも > APEL あたりで用意するようにする。 これは避けた方がいいんじゃないかと思います. | * SUFFIX は独自拡張でしょうか? 今使っている Emacs 21.3 では SUFFIX 引数がないのでそう仮定してみます. 以下の理由で FLIM/SEMI では SUFFIX を指定できないと不便な気がするので make-temp-file に代わる関数を用意するのが良さそうな気がしてきました. * 添付ファイルを再生する場合. 指定されたファイル名が重複しているかもしれないので一時ファイル名を使用. 拡張子を保存しないと helper application の動作に支障があるかもしれない. * 添付ファイルを保存する場合. 指定されたファイル名を生かしたい. helper application からの保存を諦めて Emacs から直接保存するのでは駄目? -- Shuhei KOBAYASHI From teranisi @ gohome.org Tue May 13 11:01:42 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Tue, 13 May 2003 11:01:42 +0900 Subject: insecure tempfile problem In-Reply-To: <8665ofancu.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> <8665ofancu.fsf@aqua.ocn.ne.jp> Message-ID: 反応ありがとうございます。 At 13 May 2003 06:04:01 +0900, Shuhei KOBAYASHI wrote: > > teranisi @ gohome.org (Yuuichi Teranishi) writes: > > poe.el あたりに入れることを想定した make-temp-file の実装案を添付します。 > > * SUFFIX は独自拡張でしょうか? いえ、これで気づきましたが、21.3.50 (CVS 先端)とリリース版とは、 だいぶ定義が違うようです。 2002-09-27 Stefan Monnier * subr.el (make-temp-file): Make the file have mode 600. 2002-04-28 Richard M. Stallman * subr.el (make-temp-file): New arg SUFFIX. byte-compile 時にこれらをチェックして、挙動が古ければ、 定義を上書き、とすると…やりすぎかなあ。 > * PREFIX が絶対パスの場合には? やるとしたら、 「絶対パスを PREFIX に指定すると make-temp-name と同程度のリスクを 負う場合がある。」 ということを明示するのかなと思います。 > * temporary-file-directory が private でない場合でも親が private なら? > (temporary-file-directory に ${HOME}/tmp のようなものを指定した場合) この場合、1つディレクトリが余計にできるだけなので、 たいした問題ではないかなと思いました。 > * temp file の file mode は make-temp-file の外で設定すべきなのでは? 今の定義では 700 で明示的に set-file-modes しているようです。 > などなど, 色々と問題がありそうですし, make-temp-file が定義されている > といって, 他のアプリケーションが安心して使ってしまうのも不安なので, 個々のアプリケーションがいちいちバラバラに対処するよりは、 ましかなあと思うのですが、 > > * (Emacs 21 にはある) make-temp-file を、他の Emacsen 向けにも > > APEL あたりで用意するようにする。 > > これは避けた方がいいんじゃないかと思います. mime-make-temp-file 程度にとどめますか…? > | * SUFFIX は独自拡張でしょうか? > > 今使っている Emacs 21.3 では SUFFIX 引数がないのでそう仮定してみます. > 以下の理由で FLIM/SEMI では SUFFIX を指定できないと不便な気がするので > make-temp-file に代わる関数を用意するのが良さそうな気がしてきました. > > * 添付ファイルを再生する場合. > 指定されたファイル名が重複しているかもしれないので一時ファイル名を使用. > 拡張子を保存しないと helper application の動作に支障があるかもしれない. > > * 添付ファイルを保存する場合. > 指定されたファイル名を生かしたい. > helper application からの保存を諦めて Emacs から直接保存するのでは駄目? SEMI では、前に出した方針の通り、 make-temp-file の dir-flag を指定して、一時ディレクトリを作って その下に指定された名前のファイルを作ることを考えてました。 -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "I just want to live while I'm alive..." From shuhei @ aqua.ocn.ne.jp Tue May 13 19:07:35 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 13 May 2003 19:07:35 +0900 Subject: insecure tempfile problem References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> <8665ofancu.fsf@aqua.ocn.ne.jp> Message-ID: <86r87388ig.fsf@aqua.ocn.ne.jp> Yuuichi Teranishi writes: > > * SUFFIX は独自拡張でしょうか? > いえ、これで気づきましたが、21.3.50 (CVS 先端)とリリース版とは、 > だいぶ定義が違うようです。 なんと! それでは私の方も色々と考え直さなければいけませんね. > byte-compile 時にこれらをチェックして、挙動が古ければ、定義を上書き、 > とすると…やりすぎかなあ。 これは(悪名高き) APEL 流のやり方であり, 似たような形で挙動をチェックして いる例も既にあるとは思いますが, 以下の理由でやはり make-temp-file の提供 には反対しておきます. make-temp-file の make-temp-name との違いの本質は, temp name の生成から 実際に temp file を作成するまでの間の race condition を排他 open により 排除していることで, これを実現できない関数が make-temp-file を名乗って > > make-temp-file が定義されている > > といって, 他のアプリケーションが安心して使ってしまうのも不安なので, ということになるのは物が物だけに非常にまずいと思います. ;; 排他 open を実現したら OK だろうか? 思い付きをちょっと実験してみます. -- Shuhei KOBAYASHI From shuhei @ aqua.ocn.ne.jp Tue May 13 21:04:46 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 13 May 2003 21:04:46 +0900 Subject: insecure tempfile problem References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> <8665ofancu.fsf@aqua.ocn.ne.jp> <86r87388ig.fsf@aqua.ocn.ne.jp> Message-ID: <867k8v8335.fsf@aqua.ocn.ne.jp> Shuhei KOBAYASHI writes: > ;; 排他 open を実現したら OK だろうか? 思い付きをちょっと実験してみます. 自分の足元を撃つことは可能ですが他の人から攻撃されることはないと思います. -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: make-temp-file.el 型: application/octet-stream サイズ: 4718 バイト 説明: evil-make-temp-file URL: -------------- next part -------------- Yuuichi Teranishi writes: > mime-make-temp-file 程度にとどめますか…? ここまでしたところでやはりこっちの方が良いような気がします. -- Shuhei KOBAYASHI From teranisi @ gohome.org Wed May 14 00:08:15 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Wed, 14 May 2003 00:08:15 +0900 Subject: insecure tempfile problem In-Reply-To: <867k8v8335.fsf@aqua.ocn.ne.jp> References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> <8665ofancu.fsf@aqua.ocn.ne.jp> <86r87388ig.fsf@aqua.ocn.ne.jp> <867k8v8335.fsf@aqua.ocn.ne.jp> Message-ID: At 13 May 2003 21:04:46 +0900, Shuhei KOBAYASHI wrote: > > > ;; 排他 open を実現したら OK だろうか? 思い付きをちょっと実験してみます. > > 自分の足元を撃つことは可能ですが他の人から攻撃されることはないと思います. すごい…。make-directory と add-name-to-file は排他なので OK ってことですね。 (XEmacs だと ?\700 は 448 にしないと動かないようですが) > Yuuichi Teranishi writes: > > mime-make-temp-file 程度にとどめますか…? > > ここまでしたところでやはりこっちの方が良いような気がします. うーむ、そのココロは? elisp プログラムは最新の Emacs21 の API で書きたいので、ここまでできるなら、 やはり make-temp-file にしたい気がします(と主張してみます)。 > > make-temp-file が定義されている > > といって, 他のアプリケーションが安心して使ってしまうのも不安なので, むしろ、他のアプリケーションが使ってくれれば、最新の Emacs21 では最適に 動くはずですし、make-temp-name を使う traditional (かつ risky) な方法 から make-temp-file への移行も推進されて喜ばしいと思うのですが。 -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "The love you take is equal to the love you make..." From shuhei @ aqua.ocn.ne.jp Wed May 14 06:04:53 2003 From: shuhei @ aqua.ocn.ne.jp (Shuhei KOBAYASHI) Date: 14 May 2003 06:04:53 +0900 Subject: insecure tempfile problem References: <8ytsrxlb.wl%nomiya@ttmy.ne.jp> <87sms0xh5v.wl@tats.iris.ne.jp> <86smrqew6e.fsf@aqua.ocn.ne.jp> <87u1c6onil.wl@tats.iris.ne.jp> <864r46jvep.fsf@aqua.ocn.ne.jp> <864r45irup.fsf@aqua.ocn.ne.jp> <86brydglq9.fsf@aqua.ocn.ne.jp> <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <85of2bzfvi.wl@ns.templewest.net> <8665ofancu.fsf@aqua.ocn.ne.jp> <86r87388ig.fsf@aqua.ocn.ne.jp> <867k8v8335.fsf@aqua.ocn.ne.jp> Message-ID: <86llxa7e2y.fsf@aqua.ocn.ne.jp> teranisi @ gohome.org (Yuuichi Teranishi) writes: > (XEmacs だと ?\700 は 448 にしないと動かないようですが) あ, そうなんですか. 知らなかった(すっかり忘れていた?) > > ここまでしたところでやはりこっちの方が良いような気がします. > うーむ、そのココロは? Emacs 21.[123] release で make-temp-file を再定義することへの抵抗感です. Emacs 21.3.50 CVS の定義にすり替るだけで問題なく動くとは思いますが. ;; 互換性のためには手段を選ばないという APEL 流のやり方(?)でまたひとつ ;; 邪悪なものを増やしてしまうのかという罪悪感が...;-) > elisp プログラムは最新の Emacs21 の API で書きたいので、ここまでできる > なら、やはり make-temp-file にしたい気がします(と主張してみます)。 私の方は今回は強く主張しないことにします. > make-temp-name を使う traditional (かつ risky) な方法から > make-temp-file への移行も推進されて喜ばしいと思うのですが。 なるほど, これには一理ありますね. -- Shuhei KOBAYASHI From teranisi @ gohome.org Wed May 14 20:36:30 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Wed, 14 May 2003 20:36:30 +0900 Subject: make-temp-file Message-ID: wl, emacs-mime-ja あたりでの最近の議論ですが、APEL に移動します。 (Cc: emacs-mime-ja) APEL で関数 make-temp-file を扱いたい、というはなしです。 詳しい経緯は、 http://lists.airs.net/wl/archive/200305/ あたりをご覧ください。まとめると、以下のようなかんじです。 (1) make-temp-name を使って一時ファイルを生成する方法は、 一時ファイルを作る場所が /tmp 等の public な場所である場合、 安全ではない。 (2) Emacs 21 には、この問題を回避するための関数 make-temp-file がある。 (3) 一方、Emacs21.[123] の make-temp-file の定義と CVS 最新版の定義は異なり、 * 生成ファイルのモードが設定される (2002-09-27 の変更) * optional 引数 SUFFIX がある (2002-04-28 の変更) という違いがある。 -> make-temp-file の有無、および API の違いを、APEL で吸収できると楽。 まず、write-region に第 7 引数がない環境でどうやって安全に(排他的に) 一時ファイルを作るかという問題がありましたが、それについては、 http://lists.airs.net/wl/archive/200305/msg00051.html に示されたコードでよいのではないかという認識になっています。 いまのところ問題点は、上記 (3) の解決のために、21.[123] の定義を上書 きすることになってしまう点なのですが、基本的に CVS 最新版の API は上位互換 であり、APEL の従来の方針(邪悪さ?)の範囲なのではなかろうかと個人的には 思っています。 …ということで、末尾に poe.el へ追加するコードの案を添付します。 上記リンク先に示されたコードをもとに以下の変更をしてます。 * XEmacs で動くよう変更 ( ?\700 を 448 にしただけ ) * Windows への対応 (むかしの経験だと add-name-to-file が動かなかったと 思うので copy-file に変更。 手元にまともなテスト環境ないので検証できず(すみません)) * Emacs 21.[123] 向け定義 (CVS 版とおなじ) ;; このままだと 2002-04-28 から 2002-09-27 の間の Emacs CVS 版で file-modes が ;; 設定されませんが、そこはとりあえず don't care。 ご意見などあればください。 -------------- next part -------------- ;; Emacs 21: Create a temporary file. (lisp/subr.el) ;; Emacs 21.1-21.3 ;; (make-temp-file PREFIX &optional DIR-FLAG) ;; Emacs 21.3.x(?) and later ;; (make-temp-file PREFIX &optional DIR-FLAG SUFFIX) (static-condition-case nil ;; compile-time check (progn (delete-file (make-temp-file "EMU" nil ".txt")) (if (get 'make-temp-file 'defun-maybe) (error "`make-temp-file' is already defined"))) (wrong-number-of-arguments ; Emacs 21.1-21.3 ;; load-time check. ;; Replace original definition. (or (fboundp 'si:make-temp-file) (progn (fset 'si:make-temp-file (symbol-function 'make-temp-file)) (put 'make-temp-file 'defun-maybe t) (defun make-temp-file (prefix &optional dir-flag suffix) "\ Create a temporary file. The returned file name (created by appending some random characters at the end of PREFIX, and expanding against `temporary-file-directory' if necessary), is guaranteed to point to a newly created empty file. You can then use `write-region' to write new data into the file. If DIR-FLAG is non-nil, create a new empty directory instead of a file. If SUFFIX is non-nil, add that at the end of the file name." (let ((umask (default-file-modes)) file) (unwind-protect (progn ;; Create temp files with strict access rights. ;; It's easy toloosen them later, whereas it's impossible ;; to close the time-window of loose permissions otherwise. (set-default-file-modes ?\700) (while (condition-case () (progn (setq file (make-temp-name (expand-file-name prefix temporary-file-directory))) (if suffix (setq file (concat file suffix))) (if dir-flag (make-directory file) (write-region "" nil file nil 'silent nil 'excl)) nil) (file-already-exists t)) ;; the file was somehow created by someone else between ;; `make-temp-name' and `write-region', let's try again. nil) file) ;; Reset the umask. (set-default-file-modes umask))))))) (error)) ; found our definition or no definition at compile-time. ;; For the Emacsen which don't have make-temp-file. (defun-maybe make-temp-file (prefix &optional dir-flag suffix) "Create a temporary file. The returned file name (created by appending some random characters at the end of PREFIX, and expanding against `temporary-file-directory' if necessary), is guaranteed to point to a newly created empty file. You can then use `write-region' to write new data into the file. If DIR-FLAG is non-nil, create a new empty directory instead of a file. If SUFFIX is non-nil, add that at the end of the file name." (let ((orig-mode (default-file-modes))) (unwind-protect (let ((prefix (expand-file-name prefix temporary-file-directory))) ;; Create temp files with strict access rights. It's easy to ;; loosen them later, whereas it's impossible to close the ;; time-window of loose permissions otherwise. (set-default-file-modes 448) (if dir-flag ;; Create a new empty directory. (let (dir) (while (condition-case () (progn (setq dir (make-temp-name prefix)) (if suffix (setq dir (concat dir suffix))) (make-directory dir) ;; `make-directory' returns nil, ;; but we return nil explicitly. nil) (file-already-exists t)) ;; the dir was somehow created by someone else between ;; `make-temp-name' and `make-directory', let's try again. ) dir) ;; Create a temporary file. ;; First, create a temporary directory. (let (tempdir) (unwind-protect (let ((tempdir-prefix (concat (file-name-directory prefix) "DIR"))) (while (condition-case () (progn (setq tempdir (make-temp-name tempdir-prefix)) (make-directory tempdir) ;; `make-directory' returns nil, ;; but we return nil explicitly. nil) (file-already-exists t)) ;; the tempdir was somehow created by someone else ;; between `make-temp-name' and `make-directory', ;; let's try again. ) ;; Second, create a temporary file in the tempdir. (let (tempfile) (unwind-protect (let (file) (setq tempfile (make-temp-name (concat tempdir "/EMU"))) ;; There *is* a race condition between ;; `make-temp-file' and `write-region', ;; but we don't care it since we are in ;; a private directory now. (write-region "" nil tempfile nil 'silent nil) ;; Finally, make a hard-link from the tempfile. (while (condition-case () (progn (setq file (make-temp-name prefix)) (if suffix (setq file (concat file suffix))) (static-if (memq system-type '(windows-nt ms-dos)) (copy-file tempfile file) (add-name-to-file tempfile file)) ;; `add-name-to-file' returns nil, ;; but we return nil explicitly. nil) (file-already-exists t)) ;; the file was somehow created by someone else ;; between `make-temp-name' and ;; `add-name-to-file', let's try again. ) file) ;; Cleanup the tempfile. (and tempfile (file-exists-p tempfile) (delete-file tempfile))))) ;; Cleanup the tempdir. (and tempdir (file-directory-p tempdir) (delete-directory tempdir)))))) ;; Reset the original file mode. (set-default-file-modes orig-mode)))) -------------- next part -------------- -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "For tomorrow may rain, so I'll follow the sun." From teranisi @ gohome.org Thu May 15 23:54:32 2003 From: teranisi @ gohome.org (Yuuichi Teranishi) Date: Thu, 15 May 2003 23:54:32 +0900 Subject: insecure tempfile problem In-Reply-To: <20030510.062552.19672640.05@tats.iris.ne.jp> References: <86r878fgdk.fsf@aqua.ocn.ne.jp> <85r878ywuk.wl@ns.templewest.net> <867k8zg8j1.fsf@aqua.ocn.ne.jp> <20030510.062552.19672640.05@tats.iris.ne.jp> Message-ID: At Sat, 10 May 2003 06:25:52 +0900 (JST), Tatsuya Kinoshita wrote: > > SEMIにはほかにも/tmp直下のファイルについてmake-temp-nameだけで済 > ませている個所が見られます。そこでも対処が必要になりそうです。 semi-1_14 枝で、全般に一時ファイル生成に make-temp-file を使うよう 変更してみました。試す場合は APEL を CVS HEAD にしてください。 他の枝はどうなってるのか把握できてないので、とりあえずさわってません。 (すみません) -- Yuuichi Teranishi (寺西裕一) GPG Public Key: http://www.gohome.org/gpg/teranisi.asc "So we sailed out of the sun till we found the see of green..." From nakaji @ tutrp.tut.ac.jp Sat May 24 09:37:27 2003 From: nakaji @ tutrp.tut.ac.jp (NAKAJI Hiroyuki) Date: Sat, 24 May 2003 09:37:27 +0900 Subject: =?ISO-2022-JP?B?GyRCJSohPCVXJXMlPSE8JTkkTiREJEkkJBsoQg==?= 2003 in =?ISO-2022-JP?B?GyRCTD5CZxsoQiAbJEIzKzpFMEZGYhsoQg==?= Message-ID: <86wughtc1k.fsf@xa12.heimat.gr.jp> 中治です。 ;; 4つのMLにクロスポストしています。 2週間後の6月7日8日に名古屋大学でイベントやります。Emacs な展示や講演が あるというわけではありませんが、お近くの方もそうでない方も、ぜひお立ち 寄りいただきたく思います。 ちなみに、僕は NBUG に加担しています。 ====================================================================== オープンソースのつどい 2003 in 名大 開催案内 このたび、東海オープンソースコミュニティと東海インターネット協議会の 共催により「オープンソースのつどい 2003 in 名大」を名古屋大学生協にて 2003年6月7日(土)〜8日(日)に開催する運びとなりました。 2000年度から開催してきた本イベントでは、全国のオープンソースソフトウ ェアコミュニティからのご協力を頂き、オープンソースにまつわる各種講演や OSを含む各種オープンソースソフトウェアの展示などを行なってきました。 4年目を迎えた今年は、東海インターネット協議会殿と共催で開催できること になり、オープンソースとインターネットという2つの大きな流れ、そして東 海地区での活動を私たちの視点から紹介していこうと考えています。 私たちはオープンソースという文化にとって、コミュニティが重要な役割を 果たしていると考えています。コミュニティはオープンソースを作り出し、育 んできました。そして、オープンソースという一つの文化を世界に示してきま した。人と人のつながりとしてのコミュニティはオープンソースにとって必要 なものであるでしょう。 そしてもう一つのつながり、今日では無くてはならないインターネットもや はりオープンソースとそれを産み出すコミュニティが支えてきました。 私たちはより多くの人達にオープンソースという文化を正しく理解して頂き、 また既存のオープンソースコミュニティ同士が相互に交流することによってコ ミュニティを質、量ともに充実させ、発展させていきたいと思っています。本 イベントをそのための場所として利用していただければ幸いです。 ***** オープンソースのつどい 2003 in 名大 イベント概要 ***** 日時: 2003/6/7(土) 10:30-17:00 2003/6/8(日) 10:30-17:00 会場: 名古屋大学東山キャンパス 生協南部食堂 (名古屋市千種区不老町) 会場地図は以下を参照願います。 http://www.nagoya-u.ac.jp/sogo/higasiyama.html (66番) また、告示Webサイトも参照ください。 http://tokai.opensource.jp/tsudoi/2003/ 会場への交通: 会場には駐車場がありませんので公共交通機関をご利用ください。 ・名古屋市営地下鉄本山駅より 徒歩15分 または 市営バス平針住宅行き (八事11系統) 5分 名古屋大学前下車 ・名古屋市営地下鉄八事駅より市営バス名古屋大学前行き (金山12系統) または光が丘行き(八事11系統) 15分 名古屋大学前下車 ・JR金山駅より市営バス名古屋大学前行き(金山12系統) 35分 終点 ・名古屋市営バス栄ターミナルより名古屋大学前行き(栄17系統) 25分 八雲町下車すぐ 市営地下鉄/バスの路線、ダイヤの確認は名古屋市交通局のページ http://www.kotsu.city.nagoya.jp/ で確認できます。 ※会場は名古屋大学のかなり奥まったところにありますので、事前に地図で ご確認頂いた上でご来場お願い致します。 入場料: 無料です。 事前登録: 不要です。お気軽にご来場ください。 会場定員: 会場収容人数 100名程度 (講演会場は 50名程度 先着順) 講演プログラム: 1日目(6/7) 11:00 - 12:00 「オープンソースは今」 講師: 風穴江 (ジャーナリスト) 13:00 - 13:30 「DarwinとMac OS Xにおけるオープンソース戦略」 講師: 佐藤徹 (有限会社 ガラパゴス・システムズ 代表取締役) 14:00 - 15:00 「XCAST6: IPv6の明示的マルチキャスト」 講師: 今井祐二 (WIDE Project / 株式会社 富士通研究所 ITコア研究所 グリッドバイオ研究部) 15:30 - 16:30 「NetBSD」 講師: 蛯原純 (株式会社創夢 / The NetBSD Project) 2日目(6/8) 10:30 - 11:00 展示ブース紹介 11:00 - 12:00 「通信ビジネスの展望と?ZTVの事業戦略(IP電話,IX,etc)について」 講師: 吉田要 (株式会社 ZTV 通信事業部長) 13:30 - 14:00 「CATVのデジタル戦略について」 講師: 須田広志 (知多メディアスネットワーク株式会社 技術部) 14:30 - 15:30 「ネットワーク・セキュリティ・マスタへの道(2)」 講師: 石川雅彦 (東海インターネット協議会) 16:00 - 16:30 「日曜大工的コンピューティング」 講師: 大島靖 (東海オープンソースコミュニティ) 展示ブース: 会場では参加団体による展示ブースを設け、各種オープンソースソフトウェ アのOSやアプリケーションの展示、活用事例を紹介致します。 [展示予定団体] アインシュタインプロジェクト ・BTRON 仕様 OS 「超漢字4」 デモ ・アインシュタインプロジェクトの活動紹介 NPO法人ITエコサイクル推進機構 ・リサイクルPCへのオープンソースの導入と活用事例の報告    ・開発アプリケーションの展示 名古屋大学情報メディア教育センターアシスタントスタッフ (AS) ・講習会テキスト、AS作成の冊子、古雑誌の配布 ・オープンソースなゲームの展示 ・AS製作物の展示 Nagoya *BSD Users' Group (NBUG) ・*BSDが動作するコンピュータの展示 ・*BSDで快適 IPv6 ライフ ・*BSDで快適コンピューターライフ 名古屋Linuxユーザーグループ (nlug) (未定) もじら組 ・ブラウザMozillaのデモ ・もじら組活動紹介 告示Webサイト: http://tokai.opensource.jp/tsudoi/2003/ お問い合わせ: 本イベントのお問い合わせは以下のアドレスへe-mailでお願い致します。 tosc2003 @ nu-net.or.jp 主催: 東海オープンソースコミュニティ http://tokai.opensource.jp/ 共催: 東海インターネット協議会(TIC) http://www.tokai-ic.or.jp/ 協賛: 株式会社創夢 http://www.soum.co.jp/ OSDN Japan http://osdn.jp/ 協力団体: アインシュタインプロジェクト http://www.einstein-project.gr.jp/Region/Tokai NPO法人ITエコサイクル推進機構 http://www.it-ecocycle.org/ 名古屋大学消費生活協同組合 http://www.coop.nagoya-u.ac.jp/ Nagoya *BSD Users' Group http://www.nagoya.bug.gr.jp/ 名古屋Linuxユーザーグループ http://www.nagoyalinux.org/ 日本NetBSDユーザーグループ http://www.jp.netbsd.org/ BSDユーザーズグループ連合 http://www.bug.gr.jp/ FreeBSD 友の会 http://www.jp.FreeBSD.org/ 名大情報メディア教育センターアシスタントスタッフ http://www.assist.media.nagoya-u.ac.jp/ もじら組 http://www.mozilla.gr.jp/ 若草OpenBSD友の会 http://www.openbsd.ics.nara-wu.ac.jp/wakakusa/ 昼食会/打ち上げ宴会: オープンソースに関わる方々の親睦を深めるための、昼食会や宴会を企画し ております。 昼食会と打ち上げは予約制です。 「オープンソースな昼食会 2003 in 名大」 講師の方にもご参加いただき、楽しい昼食会にしたいと思います。 2003/6/7 (土) 12:00 - 13:00 場所:名古屋大学南部厚生会舘1階 南部生協食堂(つどい会場と同じ) 定員:31名 会費:2500円 注:アルコールはでません。大学祭期間中ですので、模擬店で買って あげて下さい。もちこみ歓迎。 「オープンソースのつどい2003 in 名大 打ち上げ宴会」 講師の方にもご参加いただき、オープンソースを肴に楽しく語らう夕べ、 といきましょう。 2003/6/8 (日) 17:45 - 19:45 場所:名古屋大学南部厚生会舘1階 南部生協食堂(つどい会場と同じ) 定員:43名 会費:4000円 注:アルコールがでます。未成年者、車を運転される方の飲酒はご遠慮下 さい。 備考:つどい終了後、会場の後片づけと宴会会場設営があり、その後開始 されるため、開始時刻が若干前後することがあります。定員に満た ない場合は、当日募集もあります。 昼食会/打上げ宴会ともお申し込みはメールかWebで受け付けています。 ・Webは http://x6bone.nagoya.bug.gr.jp/enkai.php3 をご参照ください。 ・メールの場合は tosc-enkai @ lists.sourceforge.jp に、 Subject: オープンソースのつどい 2003 in 名大 {打ち上げ宴会or昼食会} 申し込み 本文: あなたのお名前(ハンドルネーム可)、連絡先メールアドレスを記載し てください。折り返し、宴会担当者より返答させて頂きます。 多くの方々のご来場をお待ちしております。 From kose @ wizard.tamra.co.jp Fri May 30 12:43:02 2003 From: kose @ wizard.tamra.co.jp (=?iso-2022-jp?b?GyRCPi40WBsoQg==?= =?iso-2022-jp?b?IBskQjVIQicbKEI=?= (KOSEKI Yoshinori)) Date: Fri, 30 May 2003 12:43:02 +0900 Subject: [Oort Gnus] Header Decode error Message-ID: <20030530xjcof1ldrqx.%kose@wizard.tamra.co.jp> Gnus 5.10.3 でエラーになって表示できないメールがあります。 ヘッダの以下の部分でエラーになります。 [Elips:0004991] Mime-Version: 1.0 (generated by SEMI 1.14.5 - =?ISO-2022-JP?B?IhskQjAyGyhC?= =?ISO-2022-JP?B?GyRCODYyOUB0GyhCIg==?=) [skk 4545] X-Todays-Expression: He cannot resist =?ISO-2022-JP?B?c3dlZXRzLi8=?= =?ISO-2022-JP?B?GyRCSGAkTzRFJCQkYiROJEtMXCQsJEokJCEjGyhC?= こんなエラーになります。 : Debugger entered--Lisp error: (args-out-of-range 803 1015) : mm-decode-coding-region(803 1015 undecided) : mail-decode-encoded-word-region(1 1419) : article-decode-encoded-words() : run-hooks(gnus-article-decode-hook) : gnus-request-article-this-buffer(2984 "Elips") : gnus-article-prepare(2984 nil) : gnus-summary-display-article(2984) : gnus-summary-next-page(nil) : call-interactively(gnus-summary-next-page) X-Todays-Expression は decode できない Gnus のバグなんでしょうが、 Mime-Version の方も decode できない Gnus のバグと言って良い のでしょうか? -- こせき // Meadow Netinstall http://www5d.biglobe.ne.jp/~kose/html/NetInstall.html From Katsumi @ yamaoka.cc Fri May 30 20:24:45 2003 From: Katsumi @ yamaoka.cc (Katsumi @ yamaoka.cc) Date: Fri, 30 May 2003 20:24:45 +0900 Subject: [Oort Gnus] Header Decode error References: <20030530xjcof1ldrqx.%kose@wizard.tamra.co.jp> Message-ID: >>>>> In [emacs-mime-ja : No.01275] 小関吉則さん wrote: 小関さん> Gnus 5.10.3 でエラーになって表示できないメールがあります。 なぜか、小関さんがこのメールを書いた少し後で出したぼくのメールが 配送されていませんが、CVS 先端の Gnus では約30分前に直っています。 -- Katsumi @ Yamaoka.cc ;; あの大ボケメールがこの後で配送されないといいな。^^;;