The branch, v4-18-stable has been updated via 4c48a250c04 VERSION: Disable GIT_SNAPSHOT for the 4.18.0rc3 release. via 4480a638407 WHATSNEW: Add release notes for Samba 4.18.0rc3. via 82d7b2a142e vfs_ceph: use fsp_get_pathref_fd in ceph fstatat and close vfs calls via c714e369507 s3:lib: Change file_modtime() to return an error code and a struct timespec. via 9a3fb55870d selftest: Only run samba.tests.smb3unix in developer mode via a19e32ef2cb python:tests: Avoid exceptions in cleanup code if a test fails in smb3unix.py via f6bbd277dcb param: Use a higher time resolution for lp_file_list_changed() via 0853cda5d92 lib:param: Remove trailing whitespaces from loadparm.c via aa4c0c5ffa4 lib:util: Print data in ISO 8601 format via 897a183c7b2 lib:util: Remove trailing whitespaces from time.c via 8816c1b6e31 mdssvc: fix kMDScopeArray parsing via 3a5190b80b8 selftest: Update devel_env.sh for SAMBA_DCERPCD_DONT_LOG_STDOUT=1 via fd2cb3197ba s3:tests: Add support for SMBD_DONT_LOG_STDOUT=1 in test_chdir_cache.sh via 550faa99fc8 ldb: version 2.7.1 via 74f6ca2ca90 tevent: version 0.14.1 via 2d07ab93e55 tevent: remove the already removed tevent_port.c also from the build via d14e1c8bef5 replace: remove unused configure checks for port_create() via 9fbff9d422a replace: provide PIPE_BUF on GNU/Hurd via c98812ce65e WHATSNEW: fix typo via ad669874981 VERSION: Bump version up to Samba 4.18.0rc3... from 71fa86a3fbb VERSION: Disable GIT_SNAPSHOT for the 4.18.0rc2 release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-18-stable - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: VERSION | 2 +- WHATSNEW.txt | 26 ++++++++++++-- lib/ldb/ABI/{ldb-2.6.1.sigs => ldb-2.7.1.sigs} | 0 ...pyldb-util-2.1.0.sigs => pyldb-util-2.7.1.sigs} | 0 lib/ldb/wscript | 2 +- lib/param/loadparm.c | 22 ++++++------ lib/param/loadparm.h | 2 +- lib/replace/system/network.h | 12 +++++++ lib/replace/system/select.h | 4 --- lib/replace/wscript | 5 --- lib/smbconf/smbconf_txt.c | 18 ++++++++-- .../ABI/{tevent-0.14.0.sigs => tevent-0.14.1.sigs} | 0 lib/tevent/wscript | 5 +-- lib/util/samba_util.h | 12 +++++-- lib/util/time.c | 42 +++++++++++----------- lib/util/util.c | 25 ++++++++----- python/samba/tests/smb3unix.py | 12 ++++--- selftest/devel_env.sh | 1 + source3/modules/vfs_ceph.c | 7 ++-- source3/param/loadparm.c | 38 +++++++++++++++----- source3/rpc_server/mdssvc/mdssvc.c | 6 ++++ source3/script/tests/test_chdir_cache.sh | 16 +++++++-- source3/selftest/tests.py | 9 +++-- source3/wscript | 1 + 24 files changed, 181 insertions(+), 86 deletions(-) copy lib/ldb/ABI/{ldb-2.6.1.sigs => ldb-2.7.1.sigs} (100%) copy lib/ldb/ABI/{pyldb-util-2.1.0.sigs => pyldb-util-2.7.1.sigs} (100%) copy lib/tevent/ABI/{tevent-0.14.0.sigs => tevent-0.14.1.sigs} (100%) Changeset truncated at 500 lines: diff --git a/VERSION b/VERSION index d8f3b790191..82827931d07 100644 --- a/VERSION +++ b/VERSION @@ -87,7 +87,7 @@ SAMBA_VERSION_PRE_RELEASE= # e.g. SAMBA_VERSION_RC_RELEASE=1 # # -> "3.0.0rc1" # ######################################################## -SAMBA_VERSION_RC_RELEASE=2 +SAMBA_VERSION_RC_RELEASE=3 ######################################################## # To mark SVN snapshots this should be set to 'yes' # diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 66a7a80e963..a035daeef79 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,12 +1,12 @@ Release Announcements ===================== -This is the second release candidate of Samba 4.18. This is *not* +This is the third release candidate of Samba 4.18. This is *not* intended for production environments and is designed for testing purposes only. Please report any defects via the Samba bug reporting system at https://bugzilla.samba.org/. -Samba 4.18 will be the next version of the Samba suite... +Samba 4.18 will be the next version of the Samba suite. UPGRADING @@ -125,6 +125,28 @@ smb.conf changes acl_xattr:security_acl_name New security.NTACL +CHANGES SINCE 4.18.0rc2 +======================= + +o Jeremy Allison <j...@samba.org> + * BUG 15301: Improve file_modtime() and issues around smb3 unix test. + +o Ralph Boehme <s...@samba.org> + * BUG 15299: Spotlight doesn't work with latest macOS Ventura. + +o Stefan Metzmacher <me...@samba.org> + * BUG 15298: Build failure on solaris with tevent 0.14.0 (and ldb 2.7.0). + (tevent 0.14.1 and ldb 2.7.1 are already released...) + +o John Mulligan <jmulli...@redhat.com> + * BUG 15307: vfs_ceph incorrectly uses fsp_get_io_fd() instead of + fsp_get_pathref_fd() in close and fstat. + +o Andreas Schneider <a...@samba.org> + * BUG 15291: test_chdir_cache.sh doesn't work with SMBD_DONT_LOG_STDOUT=1. + * BUG 15301: Improve file_modtime() and issues around smb3 unix test. + + CHANGES SINCE 4.18.0rc1 ======================= diff --git a/lib/ldb/ABI/ldb-2.6.1.sigs b/lib/ldb/ABI/ldb-2.7.1.sigs similarity index 100% copy from lib/ldb/ABI/ldb-2.6.1.sigs copy to lib/ldb/ABI/ldb-2.7.1.sigs diff --git a/lib/ldb/ABI/pyldb-util-2.1.0.sigs b/lib/ldb/ABI/pyldb-util-2.7.1.sigs similarity index 100% copy from lib/ldb/ABI/pyldb-util-2.1.0.sigs copy to lib/ldb/ABI/pyldb-util-2.7.1.sigs diff --git a/lib/ldb/wscript b/lib/ldb/wscript index 95aee9be6d3..03076e6cccc 100644 --- a/lib/ldb/wscript +++ b/lib/ldb/wscript @@ -2,7 +2,7 @@ APPNAME = 'ldb' # For Samba 4.18.x ! -VERSION = '2.7.0' +VERSION = '2.7.1' import sys, os diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index fc0dc4df83f..6ab7fa89db7 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -1,4 +1,4 @@ -/* +/* Unix SMB/CIFS implementation. Parameter loading functions Copyright (C) Karl Auer 1993-1998 @@ -1017,7 +1017,7 @@ void add_to_file_list(TALLOC_CTX *mem_ctx, struct file_lists **list, } if (!f) { - f = talloc(mem_ctx, struct file_lists); + f = talloc_zero(mem_ctx, struct file_lists); if (!f) goto fail; f->next = *list; @@ -1032,12 +1032,10 @@ void add_to_file_list(TALLOC_CTX *mem_ctx, struct file_lists **list, goto fail; } *list = f; - f->modtime = file_modtime(subfname); - } else { - time_t t = file_modtime(subfname); - if (t) - f->modtime = t; } + + /* If file_modtime() fails it leaves f->modtime as zero. */ + (void)file_modtime(subfname, &f->modtime); return; fail: @@ -2146,7 +2144,7 @@ void lpcfg_print_parameter(struct parm_struct *p, void *ptr, FILE * f) break; case P_OCTAL: { - int val = *(int *)ptr; + int val = *(int *)ptr; if (val == -1) { fprintf(f, "-1"); } else { @@ -3199,7 +3197,7 @@ struct loadparm_context *loadparm_init_global(bool load_default) /** * Initialise the global parameter structure. */ -struct loadparm_context *loadparm_init_s3(TALLOC_CTX *mem_ctx, +struct loadparm_context *loadparm_init_s3(TALLOC_CTX *mem_ctx, const struct loadparm_s3_helpers *s3_fns) { struct loadparm_context *loadparm_context = talloc_zero(mem_ctx, struct loadparm_context); @@ -3227,7 +3225,7 @@ const char *lp_default_path(void) } /** - * Update the internal state of a loadparm context after settings + * Update the internal state of a loadparm context after settings * have changed. */ static bool lpcfg_update(struct loadparm_context *lp_ctx) @@ -3273,7 +3271,7 @@ static bool lpcfg_update(struct loadparm_context *lp_ctx) lp_ctx->globals->syslog, lp_ctx->globals->syslog_only); - /* FIXME: This is a bit of a hack, but we can't use a global, since + /* FIXME: This is a bit of a hack, but we can't use a global, since * not everything that uses lp also uses the socket library */ if (lpcfg_parm_bool(lp_ctx, NULL, "socket", "testnonblock", false)) { setenv("SOCKET_TESTNONBLOCK", "1", 1); @@ -3305,7 +3303,7 @@ bool lpcfg_load_default(struct loadparm_context *lp_ctx) path = lp_default_path(); if (!file_exist(path)) { - /* We allow the default smb.conf file to not exist, + /* We allow the default smb.conf file to not exist, * basically the equivalent of an empty file. */ return lpcfg_update(lp_ctx); } diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h index 98263f0e62b..af6b530366a 100644 --- a/lib/param/loadparm.h +++ b/lib/param/loadparm.h @@ -102,7 +102,7 @@ struct file_lists { struct file_lists *next; char *name; char *subfname; - time_t modtime; + struct timespec modtime; }; #define DEFAULT_NAME_RESOLVE_ORDER "lmhosts wins host bcast" diff --git a/lib/replace/system/network.h b/lib/replace/system/network.h index a84bfd453b1..1721d65a51a 100644 --- a/lib/replace/system/network.h +++ b/lib/replace/system/network.h @@ -91,6 +91,8 @@ #include <stropts.h> #endif +#include <limits.h> + #ifndef HAVE_SOCKLEN_T #define HAVE_SOCKLEN_T typedef int socklen_t; @@ -342,6 +344,16 @@ typedef unsigned short int sa_family_t; # endif #endif +#ifndef PIPE_BUF +# ifdef __GNU__ + /* + * GNU/Hurd does not have such hardcoded limitations. But it has to support + * the minimum POSIX value anyway. + */ +# define PIPE_BUF 512 +# endif +#endif + #ifndef HAVE_STRUCT_ADDRINFO #define HAVE_STRUCT_ADDRINFO struct addrinfo { diff --git a/lib/replace/system/select.h b/lib/replace/system/select.h index 9e945c3ccfa..11c5390d901 100644 --- a/lib/replace/system/select.h +++ b/lib/replace/system/select.h @@ -34,10 +34,6 @@ #include <sys/epoll.h> #endif -#ifdef HAVE_SOLARIS_PORTS -#include <port.h> -#endif - #ifndef SELECT_CAST #define SELECT_CAST #endif diff --git a/lib/replace/wscript b/lib/replace/wscript index 82c5a8a477b..5c2b750832b 100644 --- a/lib/replace/wscript +++ b/lib/replace/wscript @@ -44,7 +44,6 @@ def configure(conf): conf.CHECK_HEADERS('locale.h ndir.h pwd.h') conf.CHECK_HEADERS('shadow.h sys/acl.h') conf.CHECK_HEADERS('sys/attributes.h attr/attributes.h sys/capability.h sys/dir.h sys/epoll.h') - conf.CHECK_HEADERS('port.h') conf.CHECK_HEADERS('sys/fcntl.h sys/filio.h sys/filsys.h sys/fs/s5param.h') conf.CHECK_HEADERS('sys/id.h sys/ioctl.h sys/ipc.h sys/mman.h sys/mode.h sys/ndir.h sys/priv.h') conf.CHECK_HEADERS('sys/resource.h sys/security.h sys/shm.h sys/statfs.h sys/statvfs.h sys/termio.h') @@ -482,7 +481,6 @@ def configure(conf): conf.CHECK_FUNCS('timegm getifaddrs freeifaddrs mmap setgroups syscall setsid') conf.CHECK_FUNCS('getgrent_r getgrgid_r getgrnam_r getgrouplist getpagesize') conf.CHECK_FUNCS('getpwent_r getpwnam_r getpwuid_r epoll_create') - conf.CHECK_FUNCS('port_create') conf.CHECK_FUNCS('getprogname') if not conf.CHECK_FUNCS('copy_file_range'): conf.CHECK_CODE(''' @@ -708,9 +706,6 @@ syscall(SYS_copy_file_range,0,NULL,0,NULL,0,0); if conf.CONFIG_SET('HAVE_EPOLL_CREATE') and conf.CONFIG_SET('HAVE_SYS_EPOLL_H'): conf.DEFINE('HAVE_EPOLL', 1) - if conf.CONFIG_SET('HAVE_PORT_CREATE') and conf.CONFIG_SET('HAVE_PORT_H'): - conf.DEFINE('HAVE_SOLARIS_PORTS', 1) - if conf.CHECK_FUNCS('eventfd', headers='sys/eventfd.h'): conf.DEFINE('HAVE_EVENTFD', 1) diff --git a/lib/smbconf/smbconf_txt.c b/lib/smbconf/smbconf_txt.c index 5c4bd27b9df..70a35ec4304 100644 --- a/lib/smbconf/smbconf_txt.c +++ b/lib/smbconf/smbconf_txt.c @@ -184,12 +184,23 @@ static sbcErr smbconf_txt_load_file(struct smbconf_ctx *ctx) { sbcErr err; uint64_t new_csn; + int rc; + struct timespec mt = {0}; if (!file_exist(ctx->path)) { return SBC_ERR_BADFILE; } - new_csn = (uint64_t)file_modtime(ctx->path); + rc = file_modtime(ctx->path, &mt); + if (rc != 0) { + /* + * Not worth mapping errno returned + * in rc to SBC_ERR_XXX. Just assume + * access denied. + */ + return SBC_ERR_ACCESS_DENIED; + } + new_csn = (uint64_t)mt.tv_sec; if (new_csn == pd(ctx)->csn) { return SBC_ERR_OK; } @@ -275,11 +286,14 @@ static void smbconf_txt_get_csn(struct smbconf_ctx *ctx, struct smbconf_csn *csn, const char *service, const char *param) { + struct timespec mt = {0}; + if (csn == NULL) { return; } - csn->csn = (uint64_t)file_modtime(ctx->path); + (void)file_modtime(ctx->path, &mt); + csn->csn = (uint64_t)mt.tv_sec; } /** diff --git a/lib/tevent/ABI/tevent-0.14.0.sigs b/lib/tevent/ABI/tevent-0.14.1.sigs similarity index 100% copy from lib/tevent/ABI/tevent-0.14.0.sigs copy to lib/tevent/ABI/tevent-0.14.1.sigs diff --git a/lib/tevent/wscript b/lib/tevent/wscript index df1c69127ab..0f6e92f93e8 100644 --- a/lib/tevent/wscript +++ b/lib/tevent/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'tevent' -VERSION = '0.14.0' +VERSION = '0.14.1' import sys, os @@ -93,9 +93,6 @@ def build(bld): if bld.CONFIG_SET('HAVE_EPOLL'): SRC += ' tevent_epoll.c' - if bld.CONFIG_SET('HAVE_SOLARIS_PORTS'): - SRC += ' tevent_port.c' - if bld.env.standalone_tevent: bld.env.PKGCONFIGDIR = '${LIBDIR}/pkgconfig' private_library = False diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h index 4eecfb8a583..f7e13bc8884 100644 --- a/lib/util/samba_util.h +++ b/lib/util/samba_util.h @@ -441,9 +441,15 @@ _PUBLIC_ int create_unlink_tmp(const char *dir); _PUBLIC_ bool file_exist(const char *fname); /** - Check a files mod time. -**/ -_PUBLIC_ time_t file_modtime(const char *fname); + * @brief Return a files modification time. + * + * @param fname The name of the file. + * + * @param mt A pointer to store the modification time. + * + * @return 0 on success, errno otherwise. + */ +_PUBLIC_ int file_modtime(const char *fname, struct timespec *mt); /** Check if a directory exists. diff --git a/lib/util/time.c b/lib/util/time.c index f1d6b566618..773fd611a33 100644 --- a/lib/util/time.c +++ b/lib/util/time.c @@ -1,9 +1,9 @@ -/* +/* Unix SMB/CIFS implementation. time handling functions Copyright (C) Andrew Tridgell 1992-2004 - Copyright (C) Stefan (metze) Metzmacher 2002 + Copyright (C) Stefan (metze) Metzmacher 2002 Copyright (C) Jeremy Allison 2007 Copyright (C) Andrew Bartlett 2011 @@ -11,12 +11,12 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ @@ -137,12 +137,12 @@ This takes GMT as input **/ _PUBLIC_ void unix_to_nt_time(NTTIME *nt, time_t t) { - uint64_t t2; + uint64_t t2; if (t == (time_t)-1) { *nt = (NTTIME)-1LL; return; - } + } if (t == TIME_T_MAX || t == INT64_MAX) { *nt = 0x7fffffffffffffffLL; @@ -152,7 +152,7 @@ _PUBLIC_ void unix_to_nt_time(NTTIME *nt, time_t t) if (t == 0) { *nt = 0; return; - } + } t2 = t; t2 += TIME_FIXUP_CONSTANT_INT; @@ -167,8 +167,8 @@ check if it's a null unix time **/ _PUBLIC_ bool null_time(time_t t) { - return t == 0 || - t == (time_t)0xFFFFFFFF || + return t == 0 || + t == (time_t)0xFFFFFFFF || t == (time_t)-1; } @@ -271,7 +271,7 @@ void interpret_dos_date(uint32_t date,int *year,int *month,int *day,int *hour,in { uint32_t p0,p1,p2,p3; - p0=date&0xFF; p1=((date&0xFF00)>>8)&0xFF; + p0=date&0xFF; p1=((date&0xFF00)>>8)&0xFF; p2=((date&0xFF0000)>>16)&0xFF; p3=((date&0xFF000000)>>24)&0xFF; *second = 2*(p0 & 0x1F); @@ -295,11 +295,11 @@ _PUBLIC_ time_t pull_dos_date(const uint8_t *date_ptr, int zone_offset) dos_date = IVAL(date_ptr,0); if (dos_date == 0) return (time_t)0; - + interpret_dos_date(dos_date,&t.tm_year,&t.tm_mon, &t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec); t.tm_isdst = -1; - + ret = timegm(&t); ret += zone_offset; @@ -397,7 +397,7 @@ const char *timespec_string_buf(const struct timespec *tp, } } else if (!hires) { len = snprintf(buf->buf, sizeof(buf->buf), - "%04d/%02d/%02d %02d:%02d:%02d", + "%04d-%02d-%02d %02d:%02d:%02d", 1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday, @@ -406,7 +406,7 @@ const char *timespec_string_buf(const struct timespec *tp, tm->tm_sec); } else { len = snprintf(buf->buf, sizeof(buf->buf), - "%04d/%02d/%02d %02d:%02d:%02d.%09ld", + "%04d-%02d-%02d %02d:%02d:%02d.%09ld", 1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday, @@ -693,7 +693,7 @@ _PUBLIC_ struct timeval timeval_current_ofs_usec(uint32_t usecs) } /** - compare two timeval structures. + compare two timeval structures. Return -1 if tv1 < tv2 Return 0 if tv1 == tv2 Return 1 if tv1 > tv2 @@ -723,7 +723,7 @@ _PUBLIC_ bool timeval_expired(const struct timeval *tv) */ _PUBLIC_ double timeval_elapsed2(const struct timeval *tv1, const struct timeval *tv2) { - return (tv2->tv_sec - tv1->tv_sec) + + return (tv2->tv_sec - tv1->tv_sec) + (tv2->tv_usec - tv1->tv_usec)*1.0e-6; } @@ -806,7 +806,7 @@ _PUBLIC_ struct timeval timeval_until(const struct timeval *tv1, */ _PUBLIC_ NTTIME timeval_to_nttime(const struct timeval *tv) { - return 10*(tv->tv_usec + + return 10*(tv->tv_usec + ((TIME_FIXUP_CONSTANT + (uint64_t)tv->tv_sec) * 1000000)); } @@ -828,7 +828,7 @@ _PUBLIC_ void nttime_to_timeval(struct timeval *tv, NTTIME t) tv->tv_usec = 0; return; } - + tv->tv_usec = t - tv->tv_sec*1000000; } @@ -938,8 +938,8 @@ bool nt_time_equal(NTTIME *t1, NTTIME *t2) bool null_timespec(struct timespec ts) { - return ts.tv_sec == 0 || - ts.tv_sec == (time_t)0xFFFFFFFF || + return ts.tv_sec == 0 || + ts.tv_sec == (time_t)0xFFFFFFFF || ts.tv_sec == (time_t)-1; } @@ -992,7 +992,7 @@ struct timespec timespec_min(const struct timespec *ts1, -- Samba Shared Repository