[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-1164-gc69f92d
Jeremy Allison
jra at samba.org
Mon Aug 24 21:58:41 MDT 2009
The branch, master has been updated
via c69f92d16d57c2387d31b5dfd01aab0685a671d0 (commit)
from 9a86f26a5f0b421f8cf259e579fe5946b39623f6 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit c69f92d16d57c2387d31b5dfd01aab0685a671d0
Author: Jeremy Allison <jra at samba.org>
Date: Mon Aug 24 20:57:37 2009 -0700
Second attempt at fix for bug 6529 - Offline files conflict with Vista and Office 2003.
Confirmation from reporter that this fixes the issue in master on ext3/ext4.
Back-ports to follow.
Jeremy.
-----------------------------------------------------------------------
Summary of changes:
source3/include/includes.h | 6 ++
source3/include/proto.h | 5 +-
source3/include/smb.h | 7 +-
source3/include/vfs.h | 10 ++-
source3/include/vfs_macros.h | 8 +-
source3/lib/time.c | 24 +++++++-
source3/modules/vfs_default.c | 80 ++++++++++++++++++++++----
source3/modules/vfs_full_audit.c | 4 +-
source3/modules/vfs_onefs.c | 6 +-
source3/modules/vfs_streams_depot.c | 5 +-
source3/modules/vfs_streams_xattr.c | 5 +-
source3/modules/vfs_tsmsm.c | 5 +-
source3/smbd/dosmode.c | 2 +-
source3/smbd/msdfs.c | 2 +-
source3/smbd/nttrans.c | 16 +++---
source3/smbd/open.c | 6 +--
source3/smbd/service.c | 19 +------
source3/smbd/trans2.c | 106 +++++++++++++++-------------------
source3/smbd/vfs.c | 5 +-
19 files changed, 188 insertions(+), 133 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/includes.h b/source3/include/includes.h
index 87df3b7..92a3705 100644
--- a/source3/include/includes.h
+++ b/source3/include/includes.h
@@ -566,6 +566,12 @@ struct timespec {
};
#endif
+enum timestamp_set_resolution {
+ TIMESTAMP_SET_SECONDS = 0,
+ TIMESTAMP_SET_MSEC,
+ TIMESTAMP_SET_NT_OR_BETTER
+};
+
#ifdef HAVE_BROKEN_GETGROUPS
#define GID_T int
#else
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 97d05b3..c530ee5 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1028,7 +1028,8 @@ char *current_timestring(TALLOC_CTX *ctx, bool hires);
void srv_put_dos_date(char *buf,int offset,time_t unixdate);
void srv_put_dos_date2(char *buf,int offset, time_t unixdate);
void srv_put_dos_date3(char *buf,int offset,time_t unixdate);
-void put_long_date_timespec(char *p, struct timespec ts);
+void round_timespec(enum timestamp_set_resolution res, struct timespec *ts);
+void put_long_date_timespec(enum timestamp_set_resolution res, char *p, struct timespec ts);
void put_long_date(char *p, time_t t);
void dos_filetime_timespec(struct timespec *tsp);
time_t make_unix_date2(const void *date_ptr, int zone_offset);
@@ -1044,7 +1045,7 @@ struct timespec timespec_current(void);
struct timespec timespec_min(const struct timespec *ts1,
const struct timespec *ts2);
int timespec_compare(const struct timespec *ts1, const struct timespec *ts2);
-void round_timespec(struct timespec *ts);
+void round_timespec_to_sec(struct timespec *ts);
void round_timespec_to_usec(struct timespec *ts);
struct timespec interpret_long_date(const char *p);
void cli_put_dos_date(struct cli_state *cli, char *buf, int offset, time_t unixdate);
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 1347ab2..3f3d7e6 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -557,9 +557,10 @@ typedef struct connection_struct {
bool ipc;
bool read_only; /* Attributes for the current user of the share. */
bool admin_user; /* Attributes for the current user of the share. */
- bool hires_timestamps_avail; /* Does this filesystem honor
- sub second timestamps on files
- and directories ? */
+ /* Does this filesystem honor
+ sub second timestamps on files
+ and directories when setting time ? */
+ enum timestamp_set_resolution ts_res;
char *connectpath;
char *origpath;
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index 2722352..38a972f 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -121,8 +121,9 @@
/* Changed to version 26 - Plumb struct smb_filename to SMB_VFS_CREATE_FILE,
SMB_VFS_OPEN, SMB_VFS_STAT, SMB_VFS_LSTAT,
SMB_VFS_RENAME, SMB_VFS_UNLINK, SMB_VFS_NTIMES. */
-
-#define SMB_VFS_INTERFACE_VERSION 26
+/* Changed to version 27 - not yet released. Added enum timestamp_set_resolution
+ * return to fs_capabilities call. JRA. */
+#define SMB_VFS_INTERFACE_VERSION 27
/* to bug old modules which are trying to compile with the old functions */
@@ -173,7 +174,7 @@ struct vfs_fn_pointers {
int (*set_quota)(struct vfs_handle_struct *handle, enum SMB_QUOTA_TYPE qtype, unid_t id, SMB_DISK_QUOTA *qt);
int (*get_shadow_copy_data)(struct vfs_handle_struct *handle, struct files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, bool labels);
int (*statvfs)(struct vfs_handle_struct *handle, const char *path, struct vfs_statvfs_struct *statbuf);
- uint32_t (*fs_capabilities)(struct vfs_handle_struct *handle);
+ uint32_t (*fs_capabilities)(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res);
/* Directory operations */
@@ -488,7 +489,8 @@ int smb_vfs_call_get_shadow_copy_data(struct vfs_handle_struct *handle,
bool labels);
int smb_vfs_call_statvfs(struct vfs_handle_struct *handle, const char *path,
struct vfs_statvfs_struct *statbuf);
-uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle);
+uint32_t smb_vfs_call_fs_capabilities(struct vfs_handle_struct *handle,
+ enum timestamp_set_resolution *p_ts_res);
SMB_STRUCT_DIR *smb_vfs_call_opendir(struct vfs_handle_struct *handle,
const char *fname, const char *mask,
uint32 attributes);
diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h
index 2d7344c..e271cde 100644
--- a/source3/include/vfs_macros.h
+++ b/source3/include/vfs_macros.h
@@ -63,10 +63,10 @@
#define SMB_VFS_NEXT_STATVFS(handle, path, statbuf) \
smb_vfs_call_statvfs((handle)->next, (path), (statbuf))
-#define SMB_VFS_FS_CAPABILITIES(conn) \
- smb_vfs_call_fs_capabilities((conn)->vfs_handles)
-#define SMB_VFS_NEXT_FS_CAPABILITIES(handle) \
- smb_vfs_call_fs_capabilities((handle)->next)
+#define SMB_VFS_FS_CAPABILITIES(conn, p_ts_res) \
+ smb_vfs_call_fs_capabilities((conn)->vfs_handles, (p_ts_res))
+#define SMB_VFS_NEXT_FS_CAPABILITIES(handle, p_ts_res) \
+ smb_vfs_call_fs_capabilities((handle)->next, (p_ts_res))
/* Directory operations */
#define SMB_VFS_OPENDIR(conn, fname, mask, attr) \
diff --git a/source3/lib/time.c b/source3/lib/time.c
index a9f7899..f6ff6d3 100644
--- a/source3/lib/time.c
+++ b/source3/lib/time.c
@@ -301,14 +301,30 @@ void srv_put_dos_date3(char *buf,int offset,time_t unixdate)
put_dos_date3(buf, offset, unixdate, server_zone_offset);
}
+void round_timespec(enum timestamp_set_resolution res, struct timespec *ts)
+{
+ switch (res) {
+ case TIMESTAMP_SET_SECONDS:
+ round_timespec_to_sec(ts);
+ break;
+ case TIMESTAMP_SET_MSEC:
+ round_timespec_to_usec(ts);
+ break;
+ case TIMESTAMP_SET_NT_OR_BETTER:
+ /* No rounding needed. */
+ break;
+ }
+}
+
/****************************************************************************
Take a Unix time and convert to an NTTIME structure and place in buffer
- pointed to by p.
+ pointed to by p, rounded to the correct resolution.
****************************************************************************/
-void put_long_date_timespec(char *p, struct timespec ts)
+void put_long_date_timespec(enum timestamp_set_resolution res, char *p, struct timespec ts)
{
NTTIME nt;
+ round_timespec(res, &ts);
unix_timespec_to_nt_time(&nt, ts);
SIVAL(p, 0, nt & 0xFFFFFFFF);
SIVAL(p, 4, nt >> 32);
@@ -319,7 +335,7 @@ void put_long_date(char *p, time_t t)
struct timespec ts;
ts.tv_sec = t;
ts.tv_nsec = 0;
- put_long_date_timespec(p, ts);
+ put_long_date_timespec(TIMESTAMP_SET_SECONDS, p, ts);
}
void dos_filetime_timespec(struct timespec *tsp)
@@ -472,7 +488,7 @@ int timespec_compare(const struct timespec *ts1, const struct timespec *ts2)
then zero nsec.
****************************************************************************/
-void round_timespec(struct timespec *ts)
+void round_timespec_to_sec(struct timespec *ts)
{
ts->tv_sec = convert_timespec_to_time_t(*ts);
ts->tv_nsec = 0;
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index a793b33..b70868e 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -90,15 +90,71 @@ static int vfswrap_statvfs(struct vfs_handle_struct *handle, const char *path,
return sys_statvfs(path, statbuf);
}
-static uint32_t vfswrap_fs_capabilities(struct vfs_handle_struct *handle)
+static uint32_t vfswrap_fs_capabilities(struct vfs_handle_struct *handle,
+ enum timestamp_set_resolution *p_ts_res)
{
+ connection_struct *conn = handle->conn;
+ uint32_t caps = FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES;
+ struct smb_filename *smb_fname_cpath = NULL;
+ NTSTATUS status;
+ int ret = -1;
+
#if defined(DARWINOS)
struct vfs_statvfs_struct statbuf;
ZERO_STRUCT(statbuf);
- sys_statvfs(handle->conn->connectpath, &statbuf);
- return statbuf.FsCapabilities;
+ sys_statvfs(conn->connectpath, &statbuf);
+ caps = statbuf.FsCapabilities;
#endif
- return FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES;
+
+ *p_ts_res = TIMESTAMP_SET_SECONDS;
+
+ /* Work out what timestamp resolution we can
+ * use when setting a timestamp. */
+
+ status = create_synthetic_smb_fname(talloc_tos(),
+ conn->connectpath,
+ NULL,
+ NULL,
+ &smb_fname_cpath);
+ if (!NT_STATUS_IS_OK(status)) {
+ return caps;
+ }
+
+ ret = SMB_VFS_STAT(conn, smb_fname_cpath);
+ if (ret == -1) {
+ TALLOC_FREE(smb_fname_cpath);
+ return caps;
+ }
+
+ if (smb_fname_cpath->st.st_ex_mtime.tv_nsec ||
+ smb_fname_cpath->st.st_ex_atime.tv_nsec ||
+ smb_fname_cpath->st.st_ex_ctime.tv_nsec) {
+ /* If any of the normal UNIX directory timestamps
+ * have a non-zero tv_nsec component assume
+ * we might be able to set sub-second timestamps.
+ * See what filetime set primitives we have.
+ */
+#if defined(HAVE_UTIMES)
+ /* utimes allows msec timestamps to be set. */
+ *p_ts_res = TIMESTAMP_SET_MSEC;
+#elif defined(HAVE_UTIME)
+ /* utime only allows sec timestamps to be set. */
+ *p_ts_res = TIMESTAMP_SET_SEC;
+#endif
+
+ /* TODO. Add a configure test for the Linux
+ * nsec timestamp set system call, and use it
+ * if available....
+ */
+ DEBUG(10,("vfswrap_fs_capabilities: timestamp "
+ "resolution of %s "
+ "available on share %s, directory %s\n",
+ *p_ts_res == TIMESTAMP_SET_MSEC ? "msec" : "sec",
+ lp_servicename(conn->cnum),
+ conn->connectpath ));
+ }
+ TALLOC_FREE(smb_fname_cpath);
+ return caps;
}
/* Directory operations */
@@ -788,6 +844,14 @@ static int vfswrap_ntimes(vfs_handle_struct *handle,
ft->mtime = smb_fname->st.st_ex_mtime;
}
+ if (!null_timespec(ft->create_time) &&
+ lp_store_create_time(SNUM(handle->conn))) {
+ set_create_timespec_ea(handle->conn,
+ NULL,
+ smb_fname,
+ ft->create_time);
+ }
+
if ((timespec_compare(&ft->atime,
&smb_fname->st.st_ex_atime) == 0) &&
(timespec_compare(&ft->mtime,
@@ -818,14 +882,6 @@ static int vfswrap_ntimes(vfs_handle_struct *handle,
result = -1;
#endif
- if (!null_timespec(ft->create_time) &&
- lp_store_create_time(SNUM(handle->conn))) {
- set_create_timespec_ea(handle->conn,
- NULL,
- smb_fname,
- ft->create_time);
- }
-
out:
END_PROFILE(syscall_ntimes);
return result;
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index 4089f22..6930a55 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -710,11 +710,11 @@ static int smb_full_audit_statvfs(struct vfs_handle_struct *handle,
return result;
}
-static uint32_t smb_full_audit_fs_capabilities(struct vfs_handle_struct *handle)
+static uint32_t smb_full_audit_fs_capabilities(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res)
{
int result;
- result = SMB_VFS_NEXT_FS_CAPABILITIES(handle);
+ result = SMB_VFS_NEXT_FS_CAPABILITIES(handle, p_ts_res);
do_log(SMB_VFS_OP_FS_CAPABILITIES, true, handle, "");
diff --git a/source3/modules/vfs_onefs.c b/source3/modules/vfs_onefs.c
index 31f0b85..865eccd 100644
--- a/source3/modules/vfs_onefs.c
+++ b/source3/modules/vfs_onefs.c
@@ -234,7 +234,7 @@ static int onefs_ntimes(vfs_handle_struct *handle,
return onefs_vtimes_streams(handle, smb_fname, flags, times);
}
-static uint32_t onefs_fs_capabilities(struct vfs_handle_struct *handle)
+static uint32_t onefs_fs_capabilities(struct vfs_handle_struct *handle, enum timestamp_set_resolution *p_ts_res)
{
uint32_t result = 0;
@@ -243,7 +243,9 @@ static uint32_t onefs_fs_capabilities(struct vfs_handle_struct *handle)
result |= FILE_NAMED_STREAMS;
}
- return result | SMB_VFS_NEXT_FS_CAPABILITIES(handle);
+ result |= SMB_VFS_NEXT_FS_CAPABILITIES(handle, p_ts_res);
+ *p_ts_res = TIMESTAMP_SET_MSEC;
+ return result;
}
static struct vfs_fn_pointers onefs_fns = {
diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c
index 2581c7f..d09255a 100644
--- a/source3/modules/vfs_streams_depot.c
+++ b/source3/modules/vfs_streams_depot.c
@@ -875,9 +875,10 @@ static NTSTATUS streams_depot_streaminfo(vfs_handle_struct *handle,
return status;
}
-static uint32_t streams_depot_fs_capabilities(struct vfs_handle_struct *handle)
+static uint32_t streams_depot_fs_capabilities(struct vfs_handle_struct *handle,
+ enum timestamp_set_resolution *p_ts_res)
{
- return SMB_VFS_NEXT_FS_CAPABILITIES(handle) | FILE_NAMED_STREAMS;
+ return SMB_VFS_NEXT_FS_CAPABILITIES(handle, p_ts_res) | FILE_NAMED_STREAMS;
}
static struct vfs_fn_pointers vfs_streams_depot_fns = {
diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c
index 3ec38d6..033d027 100644
--- a/source3/modules/vfs_streams_xattr.c
+++ b/source3/modules/vfs_streams_xattr.c
@@ -837,9 +837,10 @@ static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct *handle,
return NT_STATUS_OK;
}
-static uint32_t streams_xattr_fs_capabilities(struct vfs_handle_struct *handle)
+static uint32_t streams_xattr_fs_capabilities(struct vfs_handle_struct *handle,
+ enum timestamp_set_resolution *p_ts_res)
{
- return SMB_VFS_NEXT_FS_CAPABILITIES(handle) | FILE_NAMED_STREAMS;
+ return SMB_VFS_NEXT_FS_CAPABILITIES(handle, p_ts_res) | FILE_NAMED_STREAMS;
}
static ssize_t streams_xattr_pwrite(vfs_handle_struct *handle,
diff --git a/source3/modules/vfs_tsmsm.c b/source3/modules/vfs_tsmsm.c
index 19dc79b..b510432 100644
--- a/source3/modules/vfs_tsmsm.c
+++ b/source3/modules/vfs_tsmsm.c
@@ -357,9 +357,10 @@ static int tsmsm_set_offline(struct vfs_handle_struct *handle,
return result;
}
-static uint32_t tsmsm_fs_capabilities(struct vfs_handle_struct *handle)
+static uint32_t tsmsm_fs_capabilities(struct vfs_handle_struct *handle,
+ enum timestamp_set_resolution *p_ts_res)
{
- return SMB_VFS_NEXT_FS_CAPABILITIES(handle) | FILE_SUPPORTS_REMOTE_STORAGE | FILE_SUPPORTS_REPARSE_POINTS;
+ return SMB_VFS_NEXT_FS_CAPABILITIES(handle, p_ts_res) | FILE_SUPPORTS_REMOTE_STORAGE | FILE_SUPPORTS_REPARSE_POINTS;
}
static struct vfs_fn_pointers tsmsm_fns = {
diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c
index e9345cc..7cb84b3 100644
--- a/source3/smbd/dosmode.c
+++ b/source3/smbd/dosmode.c
@@ -868,7 +868,7 @@ NTSTATUS set_create_timespec_ea(connection_struct *conn,
return NT_STATUS_OK;
}
- put_long_date_timespec(buf, create_time);
+ put_long_date_timespec(conn->ts_res, buf, create_time);
if (fsp && fsp->fh->fd != -1) {
ret = SMB_VFS_FSETXATTR(fsp,
SAMBA_XATTR_DOSTIMESTAMPS,
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index 767c8fe..74e4652 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -272,7 +272,7 @@ NTSTATUS create_conn_struct(TALLOC_CTX *ctx,
return status;
}
- conn->fs_capabilities = SMB_VFS_FS_CAPABILITIES(conn);
+ conn->fs_capabilities = SMB_VFS_FS_CAPABILITIES(conn, &conn->ts_res);
/*
* Windows seems to insist on doing trans2getdfsreferral() calls on
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index 03fdff3..434bf34 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -608,13 +608,13 @@ void reply_ntcreate_and_X(struct smb_request *req)
dos_filetime_timespec(&c_timespec);
}
- put_long_date_timespec(p, create_timespec); /* create time. */
+ put_long_date_timespec(conn->ts_res, p, create_timespec); /* create time. */
p += 8;
- put_long_date_timespec(p, a_timespec); /* access time */
+ put_long_date_timespec(conn->ts_res, p, a_timespec); /* access time */
p += 8;
- put_long_date_timespec(p, m_timespec); /* write time */
+ put_long_date_timespec(conn->ts_res, p, m_timespec); /* write time */
p += 8;
- put_long_date_timespec(p, c_timespec); /* change time */
+ put_long_date_timespec(conn->ts_res, p, c_timespec); /* change time */
p += 8;
SIVAL(p,0,fattr); /* File Attributes. */
p += 4;
@@ -1106,13 +1106,13 @@ static void call_nt_transact_create(connection_struct *conn,
dos_filetime_timespec(&c_timespec);
}
- put_long_date_timespec(p, create_timespec); /* create time. */
+ put_long_date_timespec(conn->ts_res, p, create_timespec); /* create time. */
p += 8;
- put_long_date_timespec(p, a_timespec); /* access time */
+ put_long_date_timespec(conn->ts_res, p, a_timespec); /* access time */
p += 8;
- put_long_date_timespec(p, m_timespec); /* write time */
+ put_long_date_timespec(conn->ts_res, p, m_timespec); /* write time */
p += 8;
- put_long_date_timespec(p, c_timespec); /* change time */
+ put_long_date_timespec(conn->ts_res, p, c_timespec); /* change time */
p += 8;
SIVAL(p,0,fattr); /* File Attributes. */
p += 4;
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 9b4eedf..0456355 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -3284,12 +3284,8 @@ static NTSTATUS create_file_unixpath(connection_struct *conn,
/* Try and make a create timestamp, if required. */
if ((info == FILE_WAS_CREATED) || (info == FILE_WAS_OVERWRITTEN)) {
if (lp_store_create_time(SNUM(conn))) {
- struct timespec ts = smb_fname->st.st_ex_btime;
- if (!conn->hires_timestamps_avail) {
- round_timespec(&ts);
- }
set_create_timespec_ea(conn, fsp,
- smb_fname, ts);
+ smb_fname, smb_fname->st.st_ex_btime);
}
}
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index 36b783e..3520f0d 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -1015,23 +1015,6 @@ connection_struct *make_connection_snum(struct smbd_server_connection *sconn,
goto err_root_exit;
}
- if (smb_fname_cpath->st.st_ex_mtime.tv_nsec ||
- smb_fname_cpath->st.st_ex_atime.tv_nsec ||
- smb_fname_cpath->st.st_ex_ctime.tv_nsec) {
- /* If any of the normal UNIX directory timestamps
- * have a non-zero tv_nsec component assume
- * we can fully store hires timestamps. We need
- * to make a runtime/share level distinction
- * as on Linux ext3 doesn't have hires timestamps, but
- * ext4 does, so a compile time test won't work. JRA.
- */
- DEBUG(10,("make_connection_snum: hires timestamps "
- "available on share %s, directory %s\n",
- lp_servicename(snum),
- conn->connectpath ));
- conn->hires_timestamps_avail = true;
- }
-
string_set(&conn->origpath,conn->connectpath);
#if SOFTLINK_OPTIMISATION
@@ -1056,7 +1039,7 @@ connection_struct *make_connection_snum(struct smbd_server_connection *sconn,
* the same characteristics, which is likely but not guaranteed.
*/
- conn->fs_capabilities = SMB_VFS_FS_CAPABILITIES(conn);
+ conn->fs_capabilities = SMB_VFS_FS_CAPABILITIES(conn, &conn->ts_res);
/*
* Print out the 'connected as' stuff here as we need
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index a1043e2..da23697 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -1669,10 +1669,10 @@ static bool smbd_marshall_dir_entry(TALLOC_CTX *ctx,
was_8_3 = mangle_is_8_3(fname, True, conn->params);
p += 4;
SIVAL(p,0,reskey); p += 4;
- put_long_date_timespec(p,create_date_ts); p += 8;
--
Samba Shared Repository
More information about the samba-cvs
mailing list