2008年8月12日

[samba-jp:20325] Re:ファイル生成時刻の扱いについて

さとうふみやす @ OSS テクノロジです。

At Tue, 12 Aug 2008 01:05:34 +0900,
KAWASUMI Junji wrote:
> NetBSD版も同様にやってみるつもりですが、でもよくよく考えてみる
> と、これは samba本体というより、FS依存なので各ディストリビュー
> ションに投げた方がいいのかなとも思い始めました。

ちょっと調べた限りでは、ファイルシステムが birthtime に
未対応の場合に st_birthtime の値がどうなるかが BSD に依って
異なるようですね。:-(

diff --git a/source/configure.in b/source/configure.in
index 7f8a97f..8d9473d 100644
--- a/source/configure.in
+++ b/source/configure.in
@@ -5913,6 +5913,9 @@ AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
[#include <usersec.h>])

+AC_CHECK_MEMBERS([struct stat.tm_birthtime],,,
+ [#include <sys/stat.h>])
+
AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/socket.h>],
diff --git a/source/lib/time.c b/source/lib/time.c
index 8e28fcc..2bf4851 100644
--- a/source/lib/time.c
+++ b/source/lib/time.c
@@ -834,7 +834,13 @@ time_t get_create_time(const SMB_STRUCT_STAT *st,BOOL fake_dirs)
if(S_ISDIR(st->st_mode) && fake_dirs) {
return (time_t)315493200L; /* 1/1/1980 */
}
-
+
+#ifdef HAVE_STRUCT_STAT_TM_BIRTHTIME
+ if (st->st_birthtime != (time_t)-1) {
+ return st->st_birthtime;
+ }
+#endif
+
ret = MIN(st->st_ctime, st->st_mtime);
ret1 = MIN(ret, st->st_atime);

http://www.nabble.com/birthtime-initialization-td18584558.html
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/stat.h?rev=HEAD&content-type=text/x-cvsweb-markup

st_birthtimensec もあるかどうか調べて、両方 0 か両方 -1 なら
無視するのがいいのかなぁ。

> そもそも struct stat の st_birthtime なんてposixにあるのか??
> と微妙な気持ちになってきました。

ということで autoconf 対応してみました。
(*BSD 環境を持ってないので実際に動くか試してないけど :-X)

> samba側でサポートすべきかOS側のsambaビルド時のパッチに組み入れ
> るべきか、判断がつきません。
> 賢者の方々のご意見を頂きたく。

autoconf + #ifdef で Samba でサポートして欲しいですね。

--
-- Name: SATOH Fumiyasu (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- Personal Home: http://www.SFO.jp/blog/


投稿者 xml-rpc : 2008年8月12日 02:46
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/76193
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。