[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-138-gc23f0f1

Tim Prouty tprouty at samba.org
Sat Jan 24 05:09:48 GMT 2009


The branch, master has been updated
       via  c23f0f13b42745a7b9f7c0a5b37f1ad521f886df (commit)
       via  48b0016cff4bad621b94fc0bf678ec15260dd7d7 (commit)
       via  7bb3860f49cd8b09c2015f6646c07fe5ebaa0de3 (commit)
      from  ab2ee0711e128ac068e54a180fe2deb4b0c082be (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c23f0f13b42745a7b9f7c0a5b37f1ad521f886df
Author: todd stecher <todd.stecher at gmail.com>
Date:   Fri Jan 23 16:55:18 2009 -0800

    Modify OneFS module to support new NTIMES interfaces

commit 48b0016cff4bad621b94fc0bf678ec15260dd7d7
Author: todd stecher <todd.stecher at gmail.com>
Date:   Fri Jan 23 14:40:19 2009 -0800

    Extend NTIMES to allow setting create_time
    
    1) Add in smb_file_time struct to clarify code and make room for createtime.
    2) Get and set create time from SMB messages.
    3) Fixup existing VFS modules + examples Some OS'es allow for the
    setting of the birthtime through kernel interfaces. This value is
    generically used for Windows createtime, but is not settable in the
    code today.

commit 7bb3860f49cd8b09c2015f6646c07fe5ebaa0de3
Author: todd stecher <todd.stecher at gmail.com>
Date:   Fri Jan 23 14:38:40 2009 -0800

    This change allows for the autoconfigre detection of sub-second time resolution in the FreeBSD stat structure

-----------------------------------------------------------------------

Summary of changes:
 examples/VFS/skel_opaque.c         |    4 +-
 examples/VFS/skel_transparent.c    |    4 +-
 source3/configure.in               |   40 +++++++++++-
 source3/include/proto.h            |    5 +-
 source3/include/smb.h              |    7 ++
 source3/include/vfs.h              |    4 +-
 source3/lib/time.c                 |   12 ++++
 source3/modules/onefs.h            |    3 +
 source3/modules/onefs_streams.c    |  128 ++++++++++++++++++++++++------------
 source3/modules/vfs_cap.c          |    5 +-
 source3/modules/vfs_catia.c        |    4 +-
 source3/modules/vfs_default.c      |   15 ++--
 source3/modules/vfs_full_audit.c   |    6 +-
 source3/modules/vfs_onefs.c        |   35 ++++++++++
 source3/modules/vfs_recycle.c      |   10 ++-
 source3/modules/vfs_shadow_copy2.c |    4 +-
 source3/smbd/close.c               |    8 +-
 source3/smbd/dosmode.c             |   13 ++--
 source3/smbd/reply.c               |   46 +++++++------
 source3/smbd/trans2.c              |   99 ++++++++++++++++-----------
 source3/torture/cmd_vfs.c          |   11 ++-
 21 files changed, 320 insertions(+), 143 deletions(-)


Changeset truncated at 500 lines:

diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c
index 3df1fcd..48b4979 100644
--- a/examples/VFS/skel_opaque.c
+++ b/examples/VFS/skel_opaque.c
@@ -231,9 +231,9 @@ static char *skel_getwd(vfs_handle_struct *handle,  char *buf)
 	return vfswrap_getwd(NULL,  buf);
 }
 
-static int skel_ntimes(vfs_handle_struct *handle,  const char *path, const struct timespec ts[2])
+static int skel_ntimes(vfs_handle_struct *handle,  const char *path, struct smb_file_time *ft)
 {
-	return vfswrap_ntimes(NULL,  path, ts);
+	return vfswrap_ntimes(NULL,  path, ft);
 }
 
 static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T offset)
diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c
index e6dee97..f5562a5 100644
--- a/examples/VFS/skel_transparent.c
+++ b/examples/VFS/skel_transparent.c
@@ -224,9 +224,9 @@ static char *skel_getwd(vfs_handle_struct *handle,  char *buf)
 	return SMB_VFS_NEXT_GETWD(handle, buf);
 }
 
-static int skel_ntimes(vfs_handle_struct *handle,  const char *path, const struct timespec ts[2])
+static int skel_ntimes(vfs_handle_struct *handle,  const char *path, struct smb_file_time *ft)
 {
-	return SMB_VFS_NEXT_NTIMES(handle, path, ts);
+	return SMB_VFS_NEXT_NTIMES(handle, path, ft);
 }
 
 static int skel_ftruncate(vfs_handle_struct *handle, files_struct *fsp, SMB_OFF_T offset)
diff --git a/source3/configure.in b/source3/configure.in
index 88843a4..3219248 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -1308,7 +1308,8 @@ fi
 
 #################################################
 # Check whether struct stat has timestamps with sub-second resolution.
-# At least IRIX and Solaris have these.
+# At least IRIX and Solaris have these.  FREEBSD does as well,
+# but with different members
 #
 # We check that
 #	all of st_mtim, st_atim and st_ctim exist
@@ -1317,6 +1318,43 @@ fi
 # There is some conflicting standards weirdness about whether we should use
 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
 # prefer struct timespec.
+AC_CACHE_CHECK([whether struct stat has timespec timestamps],
+    samba_cv_stat_timespec_hires,
+      [
+      AC_TRY_COMPILE(
+	  [
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+	  ],
+	  [
+	  struct timespec t;
+	  struct stat s = {0};
+	  t = s.st_mtimespec;
+	  t = s.st_ctimespec;
+	  t = s.st_atimespec;
+	],
+      samba_cv_stat_timespec_hires=yes, samba_cv_stat_timespec_hires=no)
+      ])
+
+if test x"$samba_cv_stat_timespec_hires" = x"yes" ; then
+    AC_DEFINE(HAVE_STAT_ST_MTIMESPEC, 1, [whether struct stat contains st_mtimepec])
+    AC_DEFINE(HAVE_STAT_ST_ATIMESPEC, 1, [whether struct stat contains st_atimespec])
+    AC_DEFINE(HAVE_STAT_ST_CTIMESPEC, 1, [whether struct stat contains st_ctimespec])
+    AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1, [whether struct stat has sub-second timestamps])
+fi
+
+
 
 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
     [
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 1554bfd..1414ba8 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6688,7 +6688,8 @@ int file_set_dosmode(connection_struct *conn, const char *fname,
 		     uint32 dosmode, SMB_STRUCT_STAT *st,
 		     const char *parent_dir,
 		     bool newfile);
-int file_ntimes(connection_struct *conn, const char *fname, const struct timespec ts[2]);
+int file_ntimes(connection_struct *conn, const char *fname,
+		struct smb_file_time *ft);
 bool set_sticky_write_time_path(connection_struct *conn, const char *fname,
 			 struct file_id fileid, const struct timespec mtime);
 bool set_sticky_write_time_fsp(struct files_struct *fsp, const struct timespec mtime);
@@ -7424,7 +7425,7 @@ NTSTATUS smb_set_file_time(connection_struct *conn,
 			   files_struct *fsp,
 			   const char *fname,
 			   const SMB_STRUCT_STAT *psbuf,
-			   struct timespec ts[2],
+			   struct smb_file_time *ft,
 			   bool setting_write_time);
 void reply_findclose(struct smb_request *req);
 void reply_findnclose(struct smb_request *req);
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 19d2208..aa2db69 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -1901,4 +1901,11 @@ struct smb_extended_info {
  */
 #define CFF_DOS_PATH		0x00000001
 
+/* time info */
+struct smb_file_time {
+	struct timespec mtime;
+	struct timespec atime;
+	struct timespec create_time;
+};
+
 #endif /* _SMB_H */
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index d02d14b..5df71da 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -111,6 +111,7 @@
 /* Changed to version 24 - make security descriptor const in fset_nt_acl. JRA. */
 /* Changed to version 25 - Jelmer's change from SMB_BIG_UINT to uint64_t. */
 /* Leave at 25 - not yet released. Add create_file call. -- tprouty. */
+/* Leave at 25 - not yet released. Add create time to ntimes. -- tstecher. */
 
 #define SMB_VFS_INTERFACE_VERSION 25
 
@@ -137,6 +138,7 @@ struct security_descriptor;
 struct vfs_statvfs_struct;
 struct smb_request;
 struct ea_list;
+struct smb_file_time;
 
 /*
     Available VFS operations. These values must be in sync with vfs_ops struct
@@ -348,7 +350,7 @@ struct vfs_ops {
 		int (*lchown)(struct vfs_handle_struct *handle, const char *path, uid_t uid, gid_t gid);
 		int (*chdir)(struct vfs_handle_struct *handle, const char *path);
 		char *(*getwd)(struct vfs_handle_struct *handle, char *buf);
-		int (*ntimes)(struct vfs_handle_struct *handle, const char *path, const struct timespec ts[2]);
+		int (*ntimes)(struct vfs_handle_struct *handle, const char *path, struct smb_file_time *ft);
 		int (*ftruncate)(struct vfs_handle_struct *handle, struct files_struct *fsp, SMB_OFF_T offset);
 		bool (*lock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
 		int (*kernel_flock)(struct vfs_handle_struct *handle, struct files_struct *fsp, uint32 share_mode);
diff --git a/source3/lib/time.c b/source3/lib/time.c
index cae6b47..7dd0da8 100644
--- a/source3/lib/time.c
+++ b/source3/lib/time.c
@@ -404,6 +404,8 @@ struct timespec get_atimespec(const SMB_STRUCT_STAT *pst)
 	ret.tv_sec = pst->st_atime;
 	ret.tv_nsec = pst->st_atimensec;
 	return ret;
+#elif defined(HAVE_STAT_ST_ATIMESPEC)
+	return pst->st_atimespec;
 #else
 #error	CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT 
 #endif
@@ -421,6 +423,8 @@ void set_atimespec(SMB_STRUCT_STAT *pst, struct timespec ts)
 #elif defined(HAVE_STAT_ST_ATIMENSEC)
 	pst->st_atime = ts.tv_sec;
 	pst->st_atimensec = ts.tv_nsec
+#elif defined(HAVE_STAT_ST_ATIMESPEC)
+	pst->st_atimespec = ts;
 #else
 #error	CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT 
 #endif
@@ -444,6 +448,8 @@ struct timespec get_mtimespec(const SMB_STRUCT_STAT *pst)
 	ret.tv_sec = pst->st_mtime;
 	ret.tv_nsec = pst->st_mtimensec;
 	return ret;
+#elif defined(HAVE_STAT_ST_MTIMESPEC)
+	return pst->st_mtimespec;
 #else
 #error	CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT 
 #endif
@@ -461,6 +467,8 @@ void set_mtimespec(SMB_STRUCT_STAT *pst, struct timespec ts)
 #elif defined(HAVE_STAT_ST_MTIMENSEC)
 	pst->st_mtime = ts.tv_sec;
 	pst->st_mtimensec = ts.tv_nsec
+#elif defined(HAVE_STAT_ST_ATIMESPEC)
+	pst->st_atimespec = ts;
 #else
 #error	CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT 
 #endif
@@ -484,6 +492,8 @@ struct timespec get_ctimespec(const SMB_STRUCT_STAT *pst)
 	ret.tv_sec = pst->st_ctime;
 	ret.tv_nsec = pst->st_ctimensec;
 	return ret;
+#elif defined(HAVE_STAT_ST_CTIMESPEC)
+	return pst->st_ctimespec;
 #else
 #error	CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT 
 #endif
@@ -501,6 +511,8 @@ void set_ctimespec(SMB_STRUCT_STAT *pst, struct timespec ts)
 #elif defined(HAVE_STAT_ST_CTIMENSEC)
 	pst->st_ctime = ts.tv_sec;
 	pst->st_ctimensec = ts.tv_nsec
+#elif defined(HAVE_STAT_ST_CTIMESPEC)
+	pst->st_ctimespec = ts;
 #else
 #error	CONFIGURE_ERROR_IN_DETECTING_TIMESPEC_IN_STAT 
 #endif
diff --git a/source3/modules/onefs.h b/source3/modules/onefs.h
index e189fc4..9c1c164 100644
--- a/source3/modules/onefs.h
+++ b/source3/modules/onefs.h
@@ -101,6 +101,9 @@ NTSTATUS onefs_streaminfo(vfs_handle_struct *handle,
 			  unsigned int *num_streams,
 			  struct stream_struct **streams);
 
+int onefs_vtimes_streams(vfs_handle_struct *handle, const char *fname,
+			 int flags, struct timespec times[3]);
+
 NTSTATUS onefs_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 			   uint32 security_info, SEC_DESC **ppdesc);
 
diff --git a/source3/modules/onefs_streams.c b/source3/modules/onefs_streams.c
index 184fe4f..e9543e2 100644
--- a/source3/modules/onefs_streams.c
+++ b/source3/modules/onefs_streams.c
@@ -51,6 +51,25 @@ NTSTATUS onefs_split_ntfs_stream_name(TALLOC_CTX *mem_ctx, const char *fname,
 	return NT_STATUS_OK;
 }
 
+int onefs_is_stream(const char *path, char **pbase, char **pstream,
+		    bool *is_stream)
+{
+	(*is_stream) = is_ntfs_stream_name(path);
+
+	if (!(*is_stream)) {
+		return 0;
+	}
+
+	if (!NT_STATUS_IS_OK(onefs_split_ntfs_stream_name(talloc_tos(), path,
+							  pbase, pstream))) {
+		DEBUG(10, ("onefs_split_ntfs_stream_name failed\n"));
+		errno = ENOMEM;
+		return -1;
+	}
+
+	return 0;
+}
+
 int onefs_close(vfs_handle_struct *handle, struct files_struct *fsp)
 {
 	int ret2, ret = 0;
@@ -141,27 +160,18 @@ int onefs_rename(vfs_handle_struct *handle, const char *oldname,
 	char *nbase = NULL;
 	char *nsname = NULL;
 
-	old_is_stream = is_ntfs_stream_name(oldname);
-	new_is_stream = is_ntfs_stream_name(newname);
-
-	if (!old_is_stream && !new_is_stream) {
-		return SMB_VFS_NEXT_RENAME(handle, oldname, newname);
-	}
-
 	frame = talloc_stackframe();
 
-	if (!NT_STATUS_IS_OK(onefs_split_ntfs_stream_name(talloc_tos(),
-							  oldname, &obase,
-							  &osname))) {
-		errno = ENOMEM;
-		goto done;
-	}
+	ret = onefs_is_stream(oldname, &obase, &osname, &old_is_stream);
+	if (ret)
+		return ret;
 
-	if (!NT_STATUS_IS_OK(onefs_split_ntfs_stream_name(talloc_tos(),
-							  newname, &nbase,
-							  &nsname))) {
-		errno = ENOMEM;
-		goto done;
+	ret = onefs_is_stream(newname, &nbase, &nsname, &new_is_stream);
+	if (ret)
+		return ret;
+
+	if (!old_is_stream && !new_is_stream) {
+		return SMB_VFS_NEXT_RENAME(handle, oldname, newname);
 	}
 
 	dir_fd = get_stream_dir_fd(handle->conn, obase, NULL);
@@ -237,18 +247,17 @@ static int stat_stream(vfs_handle_struct *handle, const char *base,
 int onefs_stat(vfs_handle_struct *handle, const char *path,
 	       SMB_STRUCT_STAT *sbuf)
 {
+	int ret;
+	bool is_stream;
 	char *base = NULL;
 	char *stream = NULL;
 
-	if (!is_ntfs_stream_name(path)) {
-		return SMB_VFS_NEXT_STAT(handle, path, sbuf);
-	}
+	ret = onefs_is_stream(path, &base, &stream, &is_stream);
+	if (ret)
+		return ret;
 
-	if (!NT_STATUS_IS_OK(onefs_split_ntfs_stream_name(talloc_tos(), path,
-							  &base, &stream))) {
-		DEBUG(10, ("onefs_split_ntfs_stream_name failed\n"));
-		errno = ENOMEM;
-		return -1;
+	if (!is_stream) {
+		return SMB_VFS_NEXT_STAT(handle, path, sbuf);
 	}
 
 	/* If it's the ::$DATA stream just stat the base file name. */
@@ -285,18 +294,17 @@ int onefs_fstat(vfs_handle_struct *handle, struct files_struct *fsp,
 int onefs_lstat(vfs_handle_struct *handle, const char *path,
 		SMB_STRUCT_STAT *sbuf)
 {
+	int ret;
+	bool is_stream;
 	char *base = NULL;
 	char *stream = NULL;
 
-	if (!is_ntfs_stream_name(path)) {
-		return SMB_VFS_NEXT_LSTAT(handle, path, sbuf);
-	}
+	ret = onefs_is_stream(path, &base, &stream, &is_stream);
+	if (ret)
+		return ret;
 
-	if (!NT_STATUS_IS_OK(onefs_split_ntfs_stream_name(talloc_tos(), path,
-							  &base, &stream))) {
-		DEBUG(10, ("onefs_split_ntfs_stream_name failed\n"));
-		errno = ENOMEM;
-		return -1;
+	if (!is_stream) {
+		return SMB_VFS_NEXT_LSTAT(handle, path, sbuf);
 	}
 
 	/* If it's the ::$DATA stream just stat the base file name. */
@@ -309,19 +317,19 @@ int onefs_lstat(vfs_handle_struct *handle, const char *path,
 
 int onefs_unlink(vfs_handle_struct *handle, const char *path)
 {
+	int ret;
+	bool is_stream;
 	char *base = NULL;
 	char *stream = NULL;
-	int dir_fd, ret, saved_errno;
+	int dir_fd, saved_errno;
 
-	if (!is_ntfs_stream_name(path)) {
-		return SMB_VFS_NEXT_UNLINK(handle, path);
+	ret = onefs_is_stream(path, &base, &stream, &is_stream);
+	if (ret) {
+		return ret;
 	}
 
-	if (!NT_STATUS_IS_OK(onefs_split_ntfs_stream_name(talloc_tos(), path,
-							  &base, &stream))) {
-		DEBUG(10, ("onefs_split_ntfs_stream_name failed\n"));
-		errno = ENOMEM;
-		return -1;
+	if (!is_stream)	{
+		return SMB_VFS_NEXT_UNLINK(handle, path);
 	}
 
 	/* If it's the ::$DATA stream just unlink the base file name. */
@@ -342,6 +350,42 @@ int onefs_unlink(vfs_handle_struct *handle, const char *path)
 	return ret;
 }
 
+int onefs_vtimes_streams(vfs_handle_struct *handle, const char *fname,
+			 int flags, struct timespec times[3])
+{
+	int ret;
+	bool is_stream;
+	char *base;
+	char *stream;
+	int dirfd;
+	int saved_errno;
+
+	START_PROFILE(syscall_ntimes);
+
+	ret = onefs_is_stream(fname, &base, &stream, &is_stream);
+	if (ret)
+		return ret;
+
+	if (!is_stream) {
+		ret = vtimes(fname, times, flags);
+		return ret;
+	}
+
+	dirfd = get_stream_dir_fd(handle->conn, base, NULL);
+	if (dirfd < -1) {
+		return -1;
+	}
+
+	ret = enc_vtimesat(dirfd, stream, ENC_DEFAULT, times, flags);
+
+	END_PROFILE(syscall_ntimes);
+
+	saved_errno = errno;
+	close(dirfd);
+	errno = saved_errno;
+	return ret;
+}
+
 int onefs_chflags(vfs_handle_struct *handle, const char *path,
 		  unsigned int flags)
 {
diff --git a/source3/modules/vfs_cap.c b/source3/modules/vfs_cap.c
index 6950ab2..ac85d3a 100644
--- a/source3/modules/vfs_cap.c
+++ b/source3/modules/vfs_cap.c
@@ -208,7 +208,8 @@ static int cap_chdir(vfs_handle_struct *handle, const char *path)
 	return SMB_VFS_NEXT_CHDIR(handle, cappath);
 }
 
-static int cap_ntimes(vfs_handle_struct *handle, const char *path, const struct timespec ts[2])
+static int cap_ntimes(vfs_handle_struct *handle, const char *path,
+		      struct smb_file_time *ft)
 {
 	char *cappath = capencode(talloc_tos(), path);
 
@@ -216,7 +217,7 @@ static int cap_ntimes(vfs_handle_struct *handle, const char *path, const struct
 		errno = ENOMEM;
 		return -1;
 	}
-	return SMB_VFS_NEXT_NTIMES(handle, cappath, ts);
+	return SMB_VFS_NEXT_NTIMES(handle, cappath, ft);
 }
 
 
diff --git a/source3/modules/vfs_catia.c b/source3/modules/vfs_catia.c
index 47d178a..d0c341f 100644
--- a/source3/modules/vfs_catia.c
+++ b/source3/modules/vfs_catia.c
@@ -252,9 +252,9 @@ static char *catia_getwd(vfs_handle_struct *handle, char *buf)
 }
 
 static int catia_ntimes(vfs_handle_struct *handle,
-		       const char *path, const struct timespec ts[2])
+		       const char *path, struct smb_file_time *ft)
 {
-        return SMB_VFS_NEXT_NTIMES(handle, path, ts);
+        return SMB_VFS_NEXT_NTIMES(handle, path, ft);
 }
 
 static bool catia_symlink(vfs_handle_struct *handle,
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 61e1deb..a9aabab 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -682,25 +682,26 @@ static char *vfswrap_getwd(vfs_handle_struct *handle,  char *path)
  system will support.
 **********************************************************************/
 
-static int vfswrap_ntimes(vfs_handle_struct *handle, const char *path, const struct timespec ts[2])
+static int vfswrap_ntimes(vfs_handle_struct *handle, const char *path,
+			  struct smb_file_time *ft)
 {
 	int result;
 
 	START_PROFILE(syscall_ntimes);
 #if defined(HAVE_UTIMES)
-	if (ts != NULL) {
+	if (ft != NULL) {
 		struct timeval tv[2];
-		tv[0] = convert_timespec_to_timeval(ts[0]);
-		tv[1] = convert_timespec_to_timeval(ts[1]);
+		tv[0] = convert_timespec_to_timeval(ft->atime);
+		tv[1] = convert_timespec_to_timeval(ft->mtime);
 		result = utimes(path, tv);
 	} else {
 		result = utimes(path, NULL);
 	}
 #elif defined(HAVE_UTIME)
-	if (ts != NULL) {
+	if (ft != NULL) {
 		struct utimbuf times;
-		times.actime = convert_timespec_to_time_t(ts[0]);
-		times.modtime = convert_timespec_to_time_t(ts[1]);
+		times.actime = convert_timespec_to_time_t(ft->atime);
+		times.modtime = convert_timespec_to_time_t(ft->mtime);
 		result = utime(path, times);
 	} else {
 		result = utime(path, NULL);
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index 1d9983a..73758a2 100644
--- a/source3/modules/vfs_full_audit.c


-- 
Samba Shared Repository


More information about the samba-cvs mailing list