The branch, master has been updated via 0ebabaedbc0 smbd: Fix cached dos attributes via a32f52e5735 librpc: Make NDR_PRINT_DEBUG call just one DEBUG via b565901a474 smbd: Simplify smbd_do_qfsinfo with direct struct initialization via d2932c22e07 smbd: Simplify reopen_from_fsp via c3799dfb4a7 smbd: Remove some unused code via 1fb07bc7213 smbd: Avoid a cast via 9cb187d1880 smbd: Print reparse_point in dos_mode_debug_print via 7b03fc3d9f2 smbd: Simplify dos_mode_from_sbuf via e2ba6144657 smbd: Simplify fdos_mode via 6a077e2fcda smbd: Simplify filename_convert_dirfsp_nosymlink via 5e206ffbe36 smbd: Remove an obsolete comment via e94de8a4af9 smbd: Simplify init_smb_file_time via e5a304193ba smbd: Simplify copy_stat_ex_timestamps via 1d2fbbdd640 smbd: Modernize a DEBUG via 2edb49c5fc7 vfs: Fix typos via 6f68812d228 smbd: Don't leave a pointer variable uninitialized via e6f8568541a smbd: Align an integer type via 0db47112bba smbd: Modernize a DEBUG from 11c4b253317 ctdb-conf: Rename config loading to not be daemon-specific
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 0ebabaedbc06b3b4f658430dcf2edb0711f599fd Author: Volker Lendecke <v...@samba.org> Date: Mon Jun 24 16:50:57 2024 +0200 smbd: Fix cached dos attributes The callers of fset_dos_mode must set the cached attributes themselves, which I did not see. I tried, but I did not find a clean way to fix this behind SMB_VFS_FSET_DOS_ATTRIBUTES, with a smb_fname and smb_fname->fsp->fsp_name we might have two copies of the cached dos attributes around and if we only update fsp->fsp_name, we might miss the outer one. Not doing a test, this is really fresh code, and in the future we must reorganize setting and caching dos attributes anyway. Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> Autobuild-User(master): Ralph Böhme <s...@samba.org> Autobuild-Date(master): Fri Jun 28 14:32:27 UTC 2024 on atb-devel-224 commit a32f52e573561900cbed097c453b5240df3b0ae5 Author: Volker Lendecke <v...@samba.org> Date: Mon Jun 17 14:42:30 2024 +0200 librpc: Make NDR_PRINT_DEBUG call just one DEBUG Give debug.c the chance to use just one write call (right now it doesn't yet) Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit b565901a47483ec3782c532a1e87dcf213e30fbe Author: Volker Lendecke <v...@samba.org> Date: Thu Jun 27 12:50:50 2024 +0200 smbd: Simplify smbd_do_qfsinfo with direct struct initialization Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit d2932c22e07de217766f622f57e6750f0cd4bc46 Author: Volker Lendecke <v...@samba.org> Date: Wed Jun 26 15:30:50 2024 +0200 smbd: Simplify reopen_from_fsp In a variable declaration the (struct ...) is not needed Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit c3799dfb4a79ab0111148096ffa0d37f4a487a3a Author: Volker Lendecke <v...@samba.org> Date: Wed Jun 26 08:57:26 2024 +0200 smbd: Remove some unused code Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 1fb07bc7213d49577e5a853823e68328ca99b863 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 16:11:16 2024 +0200 smbd: Avoid a cast Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 9cb187d1880bf9c56107ccce4dc8956284e94689 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 16:10:28 2024 +0200 smbd: Print reparse_point in dos_mode_debug_print Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 7b03fc3d9f25ce3b82108e0deaffdf70dc83a414 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 16:07:58 2024 +0200 smbd: Simplify dos_mode_from_sbuf We don't need that else branch, this could be a switch as well Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit e2ba6144657be84f35add7e4c7f7c178f80a4f07 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 16:04:53 2024 +0200 smbd: Simplify fdos_mode We don't need the outer !NT_STATUS_IS_OK and the comment Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 6a077e2fcdabae64c1ab6e1378ea10ea2b57f738 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 15:49:23 2024 +0200 smbd: Simplify filename_convert_dirfsp_nosymlink Initialize the timestamps in the existing struct assignment Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 5e206ffbe360004573c00b11fc0bfcdf74f7040d Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 13:08:58 2024 +0200 smbd: Remove an obsolete comment We have a good understanding of SAMBA_UTIME_OMIT these days Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit e94de8a4af908c0e09185c6b1f1a04848d831dfb Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 13:06:35 2024 +0200 smbd: Simplify init_smb_file_time Call make_omit_timespec just once, saves a few .text bytes Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit e5a304193ba1bba20c8f40c1e5bb6f0adab52d0c Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 12:39:09 2024 +0200 smbd: Simplify copy_stat_ex_timestamps copy_stat_ex_timestamps doesn't need the fsp, it only needs the destination stat struct Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 1d2fbbdd640bb9c01f18d41fdd1a4949317be930 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 10:41:41 2024 +0200 smbd: Modernize a DEBUG Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 2edb49c5fc7b0daccebb2a2fe48b66ce326293c9 Author: Volker Lendecke <v...@samba.org> Date: Tue Jun 25 10:28:38 2024 +0200 vfs: Fix typos Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 6f68812d228b72d802980890a46cb557dd8b0272 Author: Volker Lendecke <v...@samba.org> Date: Mon Jun 24 16:52:51 2024 +0200 smbd: Don't leave a pointer variable uninitialized Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit e6f8568541a56b5b542ae00d9aef2660ab5823f1 Author: Volker Lendecke <v...@samba.org> Date: Mon Jun 24 16:51:08 2024 +0200 smbd: Align an integer type Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 0db47112bba013ed1fa9e371a50d34ed8db854ba Author: Volker Lendecke <v...@samba.org> Date: Mon Jun 24 14:06:18 2024 +0200 smbd: Modernize a DEBUG Signed-off-by: Volker Lendecke <v...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> ----------------------------------------------------------------------- Summary of changes: librpc/ndr/ndr.c | 15 +++++++++++---- source3/include/proto.h | 3 ++- source3/lib/system.c | 11 ++++++----- source3/modules/util_reparse.c | 4 ++++ source3/modules/vfs_posixacl.c | 4 ++-- source3/smbd/dosmode.c | 34 ++++++++++++++++++---------------- source3/smbd/filename.c | 13 +++++-------- source3/smbd/open.c | 2 +- source3/smbd/smb1_negprot.c | 10 +++++----- source3/smbd/smb1_nttrans.c | 26 ++++++++++++++------------ source3/smbd/smb1_reply.c | 5 ----- source3/smbd/smb2_trans2.c | 22 +++++----------------- source3/smbd/vfs.c | 10 ++++++---- 13 files changed, 79 insertions(+), 80 deletions(-) Changeset truncated at 500 lines: diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c index 1478faa466f..1eaa278d820 100644 --- a/librpc/ndr/ndr.c +++ b/librpc/ndr/ndr.c @@ -439,12 +439,15 @@ _PUBLIC_ bool ndr_print_debug(int level, const char *function) { struct ndr_print *ndr; - - DEBUGLF(level, (" "), location, function); + bool ret = false; ndr = talloc_zero(NULL, struct ndr_print); if (!ndr) return false; - ndr->print = ndr_print_debug_helper; + ndr->private_data = talloc_strdup(ndr, ""); + if (ndr->private_data == NULL) { + goto fail; + } + ndr->print = ndr_print_string_helper; ndr->depth = 1; ndr->flags = 0; #ifdef DEBUG_PASSWORD @@ -454,8 +457,12 @@ _PUBLIC_ bool ndr_print_debug(int level, #endif fn(ndr, name, ptr); + DEBUGLF(level, (" %s", (char *)ndr->private_data), location, function); + + ret = true; +fail: talloc_free(ndr); - return true; + return ret; } /* diff --git a/source3/include/proto.h b/source3/include/proto.h index 9ccbbaee48a..bd7efce1f39 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -173,7 +173,8 @@ void update_stat_ex_mtime(struct stat_ex *dst, struct timespec write_ts); void update_stat_ex_create_time(struct stat_ex *dst, struct timespec create_time); void update_stat_ex_from_saved_stat(struct stat_ex *dst, const struct stat_ex *src); -void copy_stat_ex_timestamps(files_struct *fsp, const struct smb_file_time *ft); +void copy_stat_ex_timestamps(struct stat_ex *st, + const struct smb_file_time *ft); int sys_stat(const char *fname, SMB_STRUCT_STAT *sbuf, bool fake_dir_create_times); int sys_fstat(int fd, SMB_STRUCT_STAT *sbuf, diff --git a/source3/lib/system.c b/source3/lib/system.c index 2006edbed65..e882e173f11 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -249,22 +249,23 @@ void update_stat_ex_from_saved_stat(struct stat_ex *dst, } } -void copy_stat_ex_timestamps(files_struct *fsp, const struct smb_file_time *ft) +void copy_stat_ex_timestamps(struct stat_ex *st, + const struct smb_file_time *ft) { if (!is_omit_timespec(&ft->atime)) { - fsp->fsp_name->st.st_ex_atime = ft->atime; + st->st_ex_atime = ft->atime; } if (!is_omit_timespec(&ft->create_time)) { - fsp->fsp_name->st.st_ex_btime = ft->create_time; + st->st_ex_btime = ft->create_time; } if (!is_omit_timespec(&ft->ctime)) { - fsp->fsp_name->st.st_ex_ctime = ft->ctime; + st->st_ex_ctime = ft->ctime; } if (!is_omit_timespec(&ft->mtime)) { - fsp->fsp_name->st.st_ex_mtime = ft->mtime; + st->st_ex_mtime = ft->mtime; } } diff --git a/source3/modules/util_reparse.c b/source3/modules/util_reparse.c index 19a15a06c51..fce3603e780 100644 --- a/source3/modules/util_reparse.c +++ b/source3/modules/util_reparse.c @@ -211,6 +211,8 @@ NTSTATUS fsctl_set_reparse_point(struct files_struct *fsp, return status; } + fsp->fsp_name->st.cached_dos_attributes = dos_mode; + return NT_STATUS_OK; } @@ -277,5 +279,7 @@ NTSTATUS fsctl_del_reparse_point(struct files_struct *fsp, return status; } + fsp->fsp_name->st.cached_dos_attributes = dos_mode; + return NT_STATUS_OK; } diff --git a/source3/modules/vfs_posixacl.c b/source3/modules/vfs_posixacl.c index feb819de982..4eb1326bb7f 100644 --- a/source3/modules/vfs_posixacl.c +++ b/source3/modules/vfs_posixacl.c @@ -334,14 +334,14 @@ static acl_t smb_acl_to_posix(const struct smb_acl_t *acl) switch (entry->a_type) { case SMB_ACL_USER: if (acl_set_qualifier(e, &entry->info.user.uid) != 0) { - DEBUG(1, ("acl_set_qualifiier failed: %s\n", + DEBUG(1, ("acl_set_qualifier failed: %s\n", strerror(errno))); goto fail; } break; case SMB_ACL_GROUP: if (acl_set_qualifier(e, &entry->info.group.gid) != 0) { - DEBUG(1, ("acl_set_qualifiier failed: %s\n", + DEBUG(1, ("acl_set_qualifier failed: %s\n", strerror(errno))); goto fail; } diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index 8b47a89dec4..d7999775c26 100644 --- a/source3/smbd/dosmode.c +++ b/source3/smbd/dosmode.c @@ -64,8 +64,13 @@ static void dos_mode_debug_print(const char *func, uint32_t mode) if (mode & FILE_ATTRIBUTE_COMPRESSED) { fstrcat(modestr, "[compressed]"); } + if (mode & FILE_ATTRIBUTE_REPARSE_POINT) { + fstrcat(modestr, "[reparse_point]"); + } - DBG_INFO("%s returning (0x%x): \"%s\"\n", func, (unsigned)mode, + DBG_INFO("%s returning (0x%" PRIx32 "): \"%s\"\n", + func, + mode, modestr); } @@ -215,13 +220,14 @@ static uint32_t dos_mode_from_sbuf(connection_struct *conn, if ((st->st_ex_mode & S_IWUSR) == 0) { result |= FILE_ATTRIBUTE_READONLY; } - } else if (ro_opts == MAP_READONLY_PERMISSIONS) { + } + if (ro_opts == MAP_READONLY_PERMISSIONS) { /* smb_fname->fsp can be NULL for an MS-DFS link. */ /* Check actual permissions for read-only. */ if ((fsp != NULL) && !can_write_to_fsp(fsp)) { result |= FILE_ATTRIBUTE_READONLY; } - } /* Else never set the readonly bit. */ + } if (MAP_ARCHIVE(conn) && ((st->st_ex_mode & S_IXUSR) != 0)) { result |= FILE_ATTRIBUTE_ARCHIVE; @@ -540,9 +546,9 @@ NTSTATUS set_ea_dos_attribute(connection_struct *conn, btime = nt_time_to_full_timespec(dosattrib.info.info5.create_time); update_stat_ex_create_time(&smb_fname->st, btime); - DEBUG(10,("set_ea_dos_attribute: set EA 0x%x on file %s\n", - (unsigned int)dosmode, - smb_fname_str_dbg(smb_fname))); + DBG_DEBUG("set EA 0x%" PRIx32 " on file %s\n", + dosmode, + smb_fname_str_dbg(smb_fname)); return NT_STATUS_OK; } @@ -719,15 +725,11 @@ uint32_t fdos_mode(struct files_struct *fsp) status = SMB_VFS_FGET_DOS_ATTRIBUTES(fsp->conn, metadata_fsp(fsp), &result); - if (!NT_STATUS_IS_OK(status)) { - /* - * Only fall back to using UNIX modes if we get NOT_IMPLEMENTED. - */ - if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED)) { - result |= dos_mode_from_sbuf(fsp->conn, - &fsp->fsp_name->st, - fsp); - } + + if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED)) { + result |= dos_mode_from_sbuf(fsp->conn, + &fsp->fsp_name->st, + fsp); } fsp->fsp_name->st.cached_dos_attributes = dos_mode_post(result, fsp, __func__); @@ -1226,7 +1228,7 @@ int file_ntimes(connection_struct *conn, done: if (ret == 0) { - copy_stat_ex_timestamps(fsp, ft); + copy_stat_ex_timestamps(&fsp->fsp_name->st, ft); } return ret; diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c index 7fafc1718c7..941a4ade5d0 100644 --- a/source3/smbd/filename.c +++ b/source3/smbd/filename.c @@ -755,6 +755,7 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( SMB_ASSERT(!(ucf_flags & UCF_DFS_PATHNAME)); if (is_fake_file_path(name_in)) { + const struct timespec omit = make_omit_timespec(); smb_fname = synthetic_smb_fname_split(mem_ctx, name_in, posix); if (smb_fname == NULL) { return NT_STATUS_NO_MEMORY; @@ -762,15 +763,11 @@ static NTSTATUS filename_convert_dirfsp_nosymlink( smb_fname->st = (SMB_STRUCT_STAT){ .st_ex_nlink = 1, .st_ex_mode = S_IFREG | 0644, + .st_ex_btime = omit, + .st_ex_atime = omit, + .st_ex_mtime = omit, + .st_ex_ctime = omit, }; - smb_fname->st.st_ex_btime = - (struct timespec){0, SAMBA_UTIME_OMIT}; - smb_fname->st.st_ex_atime = - (struct timespec){0, SAMBA_UTIME_OMIT}; - smb_fname->st.st_ex_mtime = - (struct timespec){0, SAMBA_UTIME_OMIT}; - smb_fname->st.st_ex_ctime = - (struct timespec){0, SAMBA_UTIME_OMIT}; *_dirfsp = conn->cwd_fsp; *_smb_fname = smb_fname; diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 20db4cf5e23..3b1e9700db3 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -1161,7 +1161,7 @@ static NTSTATUS reopen_from_fsp(struct files_struct *dirfsp, ((old_fd = fsp_get_pathref_fd(fsp)) != -1)) { struct sys_proc_fd_path_buf buf; - struct smb_filename proc_fname = (struct smb_filename){ + struct smb_filename proc_fname = { .base_name = sys_proc_fd_path(old_fd, &buf), }; mode_t mode = fsp->fsp_name->st.st_ex_mode; diff --git a/source3/smbd/smb1_negprot.c b/source3/smbd/smb1_negprot.c index 7171c663f41..23bb726bc46 100644 --- a/source3/smbd/smb1_negprot.c +++ b/source3/smbd/smb1_negprot.c @@ -480,7 +480,7 @@ void reply_negprot(struct smb_request *req) int protocol; const char *p; int protocols = 0; - int num_cliprotos; + size_t num_cliprotos; char **cliprotos; size_t i; size_t converted_size; @@ -519,10 +519,10 @@ void reply_negprot(struct smb_request *req) while (smbreq_bufrem(req, p) > 0) { - char **tmp; - - tmp = talloc_realloc(talloc_tos(), cliprotos, char *, - num_cliprotos+1); + char **tmp = talloc_realloc(talloc_tos(), + cliprotos, + char *, + num_cliprotos + 1); if (tmp == NULL) { DEBUG(0, ("talloc failed\n")); TALLOC_FREE(cliprotos); diff --git a/source3/smbd/smb1_nttrans.c b/source3/smbd/smb1_nttrans.c index f89cddb2501..001e3be6df9 100644 --- a/source3/smbd/smb1_nttrans.c +++ b/source3/smbd/smb1_nttrans.c @@ -563,18 +563,20 @@ void reply_ntcreate_and_X(struct smb_request *req) goto out; } - DEBUG(10,("reply_ntcreate_and_X: flags = 0x%x, access_mask = 0x%x " - "file_attributes = 0x%x, share_access = 0x%x, " - "create_disposition = 0x%x create_options = 0x%x " - "root_dir_fid = 0x%x, fname = %s\n", - (unsigned int)flags, - (unsigned int)access_mask, - (unsigned int)file_attributes, - (unsigned int)share_access, - (unsigned int)create_disposition, - (unsigned int)create_options, - (unsigned int)root_dir_fid, - fname)); + DBG_DEBUG("flags = 0x%" PRIx32 ", access_mask = 0x%" PRIx32 + ", file_attributes = 0x%" PRIx32 + ", share_access = 0x%" PRIx32 + ", create_disposition = 0x%" PRIx32 + ", create_options = 0x%" PRIx32 ", root_dir_fid = 0x%" PRIx32 + ", fname = %s\n", + flags, + access_mask, + file_attributes, + share_access, + create_disposition, + create_options, + root_dir_fid, + fname); /* * we need to remove ignored bits when they come directly from the client diff --git a/source3/smbd/smb1_reply.c b/source3/smbd/smb1_reply.c index 335c92aa3ed..392de41940e 100644 --- a/source3/smbd/smb1_reply.c +++ b/source3/smbd/smb1_reply.c @@ -6957,11 +6957,6 @@ void reply_setattrE(struct smb_request *req) reply_smb1_outbuf(req, 0, 0); - /* - * Patch from Ray Frush <fr...@engr.colostate.edu> - * Sometimes times are sent as zero - ignore them. - */ - /* Ensure we have a valid stat struct for the source. */ status = vfs_stat_fsp(fsp); if (!NT_STATUS_IS_OK(status)) { diff --git a/source3/smbd/smb2_trans2.c b/source3/smbd/smb2_trans2.c index 32d368cedaa..cb7390133fe 100644 --- a/source3/smbd/smb2_trans2.c +++ b/source3/smbd/smb2_trans2.c @@ -2368,14 +2368,11 @@ cBytesSector=%u, cUnitTotal=%u, cUnitAvail=%d\n", (unsigned int)bsize, (unsigned /* we need to fake up a fsp here, * because its not send in this call */ - files_struct tmpfsp; - SMB_NTQUOTA_STRUCT quotas; - - ZERO_STRUCT(tmpfsp); - ZERO_STRUCT(quotas); - - tmpfsp.conn = conn; - tmpfsp.fnum = FNUM_FIELD_INVALID; + files_struct tmpfsp = { + .conn = conn, + .fnum = FNUM_FIELD_INVALID, + }; + SMB_NTQUOTA_STRUCT quotas = {}; /* access check */ if (get_current_uid(conn) != 0) { @@ -5146,15 +5143,6 @@ NTSTATUS smbd_do_setfilepathinfo(connection_struct *conn, case SMB_FILE_DISPOSITION_INFORMATION: case SMB_SET_FILE_DISPOSITION_INFO: /* Set delete on close for open file. */ { -#if 0 - /* JRA - We used to just ignore this on a path ? - * Shouldn't this be invalid level on a pathname - * based call ? - */ - if (tran_call != TRANSACT2_SETFILEINFO) { - return ERROR_NT(NT_STATUS_INVALID_LEVEL); - } -#endif status = smb_set_file_disposition_info(conn, pdata, total_data, diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 0b061f1cc31..13b3ba61cea 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -1190,11 +1190,13 @@ NTSTATUS vfs_stat_fsp(files_struct *fsp) void init_smb_file_time(struct smb_file_time *ft) { + struct timespec omit = make_omit_timespec(); + *ft = (struct smb_file_time) { - .atime = make_omit_timespec(), - .ctime = make_omit_timespec(), - .mtime = make_omit_timespec(), - .create_time = make_omit_timespec() + .atime = omit, + .ctime = omit, + .mtime = omit, + .create_time = omit, }; } -- Samba Shared Repository