git: 17ce87864be8 - main - net/samba420: Update 4.20
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 30 Jan 2025 14:44:00 UTC
The branch main has been updated by kiwi:
URL: https://cgit.FreeBSD.org/ports/commit/?id=17ce87864be8150900baa87af7d175c53a906ed9
commit 17ce87864be8150900baa87af7d175c53a906ed9
Author: Joshua Kinard <freebsd@kumba.dev>
AuthorDate: 2025-01-28 10:07:16 +0000
Commit: Xavier Beaudouin <kiwi@FreeBSD.org>
CommitDate: 2025-01-30 14:42:00 +0000
net/samba420: Update 4.20
Changelog: https://wiki.samba.org/index.php/Release_Planning_for_Samba_4.20
PR: 280533
Sponsored by: Klara, Inc.
Approved by: 0mp (mentor)
Approved by: samba (0mp, kiwi)
Co-authored-by: Xavier Beaudouin <kiwi@FreeBSD.org>
---
net/Makefile | 1 +
net/samba420/Makefile | 27 +-
net/samba420/distinfo | 6 +-
...MP-handling-code-and-add-FreeBSD-support..patch | 84 ++--
...869a8f4018ebee302aae8246bf29f60309-Mon-Se.patch | 75 ++-
...ule-vfs_freebsd-that-implements-FreeBSD-s.patch | 47 +-
...s3-lib-system-add-FreeBSD-proc_fd_pattern.patch | 100 ++--
...0-Fix-pathref-handling-for-FreeBSD-13plus.patch | 182 --------
...href-handling-for-FreeBSD-13plus_samba42x.patch | 508 +++++++++++++++++++++
...0101-FreeBSD-add-fdescfs-paths-workaround.patch | 71 +++
...BSD-vfs_freebsd-fix-sys_proc_fd_path-args.patch | 53 +++
net/samba420/pkg-plist | 243 +++++-----
net/samba420/pkg-plist.ad_dc | 22 +-
net/samba420/pkg-plist.cluster | 2 +-
net/samba420/pkg-plist.python | 7 +-
15 files changed, 913 insertions(+), 515 deletions(-)
diff --git a/net/Makefile b/net/Makefile
index 879be0f13b68..97f7b96d9abe 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -1479,6 +1479,7 @@
SUBDIR += sakisafecli
SUBDIR += samba416
SUBDIR += samba419
+ SUBDIR += samba420
SUBDIR += samplicator
SUBDIR += savvycan
SUBDIR += sbm
diff --git a/net/samba420/Makefile b/net/samba420/Makefile
index 92cc5bb78f0c..c32635e1f11b 100644
--- a/net/samba420/Makefile
+++ b/net/samba420/Makefile
@@ -1,6 +1,5 @@
-PORTNAME= ${SAMBA4_BASENAME}419
+PORTNAME= ${SAMBA4_BASENAME}420
PORTVERSION= ${SAMBA4_VERSION}
-PORTREVISION= 5
CATEGORIES?= net
MASTER_SITES= SAMBA/samba/stable SAMBA/samba/rc
DISTNAME= ${SAMBA4_DISTNAME}
@@ -45,12 +44,14 @@ EXTRA_PATCHES= \
${PATCHDIR}/0026-vfs-add-a-compatibility-option-to-the-vfs_streams_xa.patch:-p1 \
${PATCHDIR}/0027-Add-VFS-module-vfs_freebsd-that-implements-FreeBSD-s.patch:-p1 \
${PATCHDIR}/0028-Fix-rl_completion_func_t.patch:-p1 \
- ${PATCHDIR}/0028-s3-lib-system-add-FreeBSD-proc_fd_pattern.patch:-p1 \
- ${PATCHDIR}/0100-Fix-pathref-handling-for-FreeBSD-13plus.patch
+ ${PATCHDIR}/0028-s3-lib-system-add-FreeBSD-proc_fd_pattern.patch \
+ ${PATCHDIR}/0100-Fix-pathref-handling-for-FreeBSD-13plus_samba42x.patch:-p1 \
+ ${PATCHDIR}/0101-FreeBSD-add-fdescfs-paths-workaround.patch:-p1 \
+ ${PATCHDIR}/0102-FreeBSD-vfs_freebsd-fix-sys_proc_fd_path-args.patch:-p1
SAMBA4_BASENAME= samba
SAMBA4_PORTNAME= ${SAMBA4_BASENAME}4
-SAMBA4_VERSION= 4.19.9
+SAMBA4_VERSION= 4.20.7
SAMBA4_DISTNAME= ${SAMBA4_BASENAME}-${SAMBA4_VERSION:S|.p|pre|:S|.r|rc|:S|.t|tp|:S|.a|alpha|}
WRKSRC?= ${WRKDIR}/${DISTNAME}
@@ -219,8 +220,8 @@ PLIST_SUB+= SAMBA4_BUNDLED_TALLOC=""
SUB_LIST+= SAMBA4_BUNDLED_TALLOC=""
.else
SAMBA4_BUNDLED_LIBS+= !talloc
-BUILD_DEPENDS+= talloc>=2.4.1:devel/talloc
-RUN_DEPENDS+= talloc>=2.4.1:devel/talloc
+BUILD_DEPENDS+= talloc>=2.4.2:devel/talloc242
+RUN_DEPENDS+= talloc>=2.4.2:devel/talloc242
PLIST_SUB+= SAMBA4_BUNDLED_TALLOC="@comment "
SUB_LIST+= SAMBA4_BUNDLED_TALLOC="@comment "
.endif
@@ -232,8 +233,8 @@ PLIST_SUB+= SAMBA4_BUNDLED_TEVENT=""
SUB_LIST+= SAMBA4_BUNDLED_TEVENT=""
.else
SAMBA4_BUNDLED_LIBS+= !tevent
-BUILD_DEPENDS+= tevent>=0.15.0:devel/tevent
-RUN_DEPENDS+= tevent>=0.15.0:devel/tevent
+BUILD_DEPENDS+= tevent>=0.16.1:devel/tevent016
+RUN_DEPENDS+= tevent>=0.16.1:devel/tevent016
PLIST_SUB+= SAMBA4_BUNDLED_TEVENT="@comment "
SUB_LIST+= SAMBA4_BUNDLED_TEVENT="@comment "
.endif
@@ -245,8 +246,8 @@ PLIST_SUB+= SAMBA4_BUNDLED_TDB=""
SUB_LIST+= SAMBA4_BUNDLED_TDB=""
.else
SAMBA4_BUNDLED_LIBS+= !tdb
-BUILD_DEPENDS+= tdb>=1.4.9:databases/tdb
-RUN_DEPENDS+= tdb>=1.4.9:databases/tdb
+BUILD_DEPENDS+= tdb>=1.4.10:databases/tdb1410
+RUN_DEPENDS+= tdb>=1.4.10:databases/tdb1410
PLIST_SUB+= SAMBA4_BUNDLED_TDB="@comment "
SUB_LIST+= SAMBA4_BUNDLED_TDB="@comment "
.endif
@@ -259,8 +260,8 @@ SUB_LIST+= SAMBA4_BUNDLED_LDB=""
SAMBA4_MODULEDIR= ${SAMBA4_LIBDIR}/modules
.else
SAMBA4_BUNDLED_LIBS+= !ldb
-BUILD_DEPENDS+= ldb28>=2.8.1:databases/ldb28
-RUN_DEPENDS+= ldb28>=2.8.1:databases/ldb28
+BUILD_DEPENDS+= ldb29>=2.9.1:databases/ldb29
+RUN_DEPENDS+= ldb29>=2.9.1:databases/ldb29
PLIST_SUB+= SAMBA4_BUNDLED_LDB="@comment "
SUB_LIST+= SAMBA4_BUNDLED_LDB="@comment "
SAMBA4_MODULEDIR= ${PREFIX}/lib/shared-modules
diff --git a/net/samba420/distinfo b/net/samba420/distinfo
index 9cb454e7bc0c..e6dc8bc2d49f 100644
--- a/net/samba420/distinfo
+++ b/net/samba420/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1729258042
-SHA256 (samba-4.19.9.tar.gz) = 71ed406444714c90bb9d36c576d807b67af15449f297e91106d42b3ca2fa5549
-SIZE (samba-4.19.9.tar.gz) = 41877221
+TIMESTAMP = 1737565689
+SHA256 (samba-4.20.7.tar.gz) = 5afe8b66e612ab1c7e57c6146adfe98ec3ea9d40dee2962a2076a3d6d6973b78
+SIZE (samba-4.20.7.tar.gz) = 42523056
diff --git a/net/samba420/files/0022-Clean-up-UTMP-handling-code-and-add-FreeBSD-support..patch b/net/samba420/files/0022-Clean-up-UTMP-handling-code-and-add-FreeBSD-support..patch
index 9c430425138f..aadb084506eb 100644
--- a/net/samba420/files/0022-Clean-up-UTMP-handling-code-and-add-FreeBSD-support..patch
+++ b/net/samba420/files/0022-Clean-up-UTMP-handling-code-and-add-FreeBSD-support..patch
@@ -6,14 +6,13 @@ Subject: [PATCH 22/28] Clean up UTMP handling code and add FreeBSD support.
Signed-off-by: Timur I. Bakeyev <timur@FreeBSD.org>
---
- source3/smbd/utmp.c | 156 ++++++++++++--------------------------------
- source3/wscript | 37 ++++++-----
- 2 files changed, 63 insertions(+), 130 deletions(-)
+ source3/smbd/utmp.c | 152 +++++++++++-------------------------------
+ source3/wscript | 36 +++++----
+ 2 files changed, 60 insertions(+), 128 deletions(-)
-diff --git a/source3/smbd/utmp.c b/source3/smbd/utmp.c
-index 4327301e3b1..f4a8362dd56 100644
---- a/source3/smbd/utmp.c
-+++ b/source3/smbd/utmp.c
+diff -Naurp a/source3/smbd/utmp.c b/source3/smbd/utmp.c
+--- a/source3/smbd/utmp.c 2024-02-02 04:33:51.316490200 -0500
++++ b/source3/smbd/utmp.c 2024-08-05 12:50:57.691687000 -0400
@@ -257,7 +257,7 @@ static char *uw_pathname(TALLOC_CTX *ctx,
Update utmp file directly. No subroutine interface: probably a BSD system.
****************************************************************************/
@@ -23,7 +22,7 @@ index 4327301e3b1..f4a8362dd56 100644
{
DEBUG(1,("pututline_my: not yet implemented\n"));
/* BSD implementor: may want to consider (or not) adjusting "lastlog" */
-@@ -271,7 +271,7 @@ static void pututline_my(const char *uname, struct utmp *u, bool claim)
+@@ -271,7 +271,7 @@ static void pututline_my(const char *uname, struct utm
Credit: Michail Vidiassov <master@iaas.msu.ru>
****************************************************************************/
@@ -32,7 +31,7 @@ index 4327301e3b1..f4a8362dd56 100644
{
int fd;
struct stat buf;
-@@ -303,7 +303,7 @@ static void updwtmp_my(const char *wname, struct utmp *u, bool claim)
+@@ -303,7 +303,7 @@ static void updwtmp_my(const char *wname, struct utmp
if ((fd = open(wname, O_WRONLY|O_APPEND, 0)) < 0)
return;
if (fstat(fd, &buf) == 0) {
@@ -41,7 +40,7 @@ index 4327301e3b1..f4a8362dd56 100644
(void) ftruncate(fd, buf.st_size);
}
(void) close(fd);
-@@ -314,12 +314,12 @@ static void updwtmp_my(const char *wname, struct utmp *u, bool claim)
+@@ -314,12 +314,12 @@ static void updwtmp_my(const char *wname, struct utmp
Update via utmp/wtmp (not utmpx/wtmpx).
****************************************************************************/
@@ -56,7 +55,7 @@ index 4327301e3b1..f4a8362dd56 100644
#endif /* PUTUTLINE_RETURNS_UTMP */
uname = uw_pathname(talloc_tos(), "utmp", ut_pathname);
-@@ -376,127 +376,52 @@ static void utmp_nox_update(struct utmp *u, bool claim)
+@@ -376,127 +376,52 @@ static void utmp_nox_update(struct utmp *u, bool claim
}
}
@@ -67,7 +66,7 @@ index 4327301e3b1..f4a8362dd56 100644
-static void utmp_strcpy(char *dest, const char *src, size_t n)
-{
- size_t len = 0;
--
+
- memset(dest, '\0', n);
- if (src)
- len = strlen(src);
@@ -78,9 +77,8 @@ index 4327301e3b1..f4a8362dd56 100644
- memcpy(dest, src, len);
- }
-}
-+
-+
++
/****************************************************************************
Update via utmpx/wtmpx (preferred) or via utmp/wtmp.
****************************************************************************/
@@ -107,7 +105,8 @@ index 4327301e3b1..f4a8362dd56 100644
- char *uname = NULL;
- char *wname = NULL;
- struct utmpx ux, *uxrc;
--
++ STRUCT_UTMP *urc;
+
- getutmpx(u, &ux);
-
-#if defined(HAVE_UX_UT_SYSLEN)
@@ -124,9 +123,14 @@ index 4327301e3b1..f4a8362dd56 100644
- wname = uw_pathname(talloc_tos(), "wtmpx", wx_pathname);
- if (uname && wname) {
- DEBUG(2,("utmp_update: uname:%s wname:%s\n", uname, wname));
-- }
-+ STRUCT_UTMP *urc;
-
++ setutxent();
++ urc = pututxline(u);
++ endutxent();
++ if (urc == NULL) {
++ DEBUG(2,("utmp_update: pututxline() failed\n"));
++ return;
+ }
+-
- /*
- * Check for either uname or wname being empty.
- * Some systems, such as Redhat 6, have a "utmpx.h" which doesn't
@@ -146,13 +150,7 @@ index 4327301e3b1..f4a8362dd56 100644
- return;
- }
- updwtmpx(wname, &ux);
-+ setutxent();
-+ urc = pututxline(u);
-+ endutxent();
-+ if (urc == NULL) {
-+ DEBUG(2,("utmp_update: pututxline() failed\n"));
-+ return;
- }
+- }
-#endif /* HAVE_UTMPX_H */
}
@@ -173,7 +171,12 @@ index 4327301e3b1..f4a8362dd56 100644
- * Example: digits would produce the base-10 numbers from '001'.
- */
- nbase = strlen(ut_id_encstr);
--
++ int nbase = sizeof(ut_id_encstr) - 1;
++ /*
++ * 'ut_id_encstr' is the character set on which modulo arithmetic is done.
++ * Example: digits would produce the base-10 numbers from '001'.
++ */
+
- fourbyte[0] = ut_id_encstr[i % nbase];
- i /= nbase;
- fourbyte[1] = ut_id_encstr[i % nbase];
@@ -185,12 +188,6 @@ index 4327301e3b1..f4a8362dd56 100644
-
- /* we do not care about overflows as i is a random number */
- return 0;
-+ int nbase = sizeof(ut_id_encstr) - 1;
-+ /*
-+ * 'ut_id_encstr' is the character set on which modulo arithmetic is done.
-+ * Example: digits would produce the base-10 numbers from '001'.
-+ */
-+
+ for(int i = 0; i < buf_size; i++) {
+ buf[i] = ut_id_encstr[id % nbase];
+ id /= nbase;
@@ -244,9 +241,9 @@ index 4327301e3b1..f4a8362dd56 100644
+ strncpy(u->ut_host, hostname, sizeof(u->ut_host));
+#if defined(HAVE_UT_UT_SYSLEN)
+ u->ut_syslen = strlen(hostname) + 1; /* include trailing NULL */
-+#endif
-+ }
#endif
++ }
++#endif
#if defined(HAVE_UT_UT_ID)
- if (ut_id_encode(id_num, u->ut_id) != 0) {
@@ -257,7 +254,7 @@ index 4327301e3b1..f4a8362dd56 100644
#endif
return True;
-@@ -561,7 +489,7 @@ static bool sys_utmp_fill(struct utmp *u,
+@@ -561,7 +489,7 @@ void sys_utmp_yield(const char *username, const char *
void sys_utmp_yield(const char *username, const char *hostname,
const char *id_str, int id_num)
{
@@ -266,7 +263,7 @@ index 4327301e3b1..f4a8362dd56 100644
ZERO_STRUCT(u);
-@@ -587,7 +515,7 @@ void sys_utmp_yield(const char *username, const char *hostname,
+@@ -587,7 +515,7 @@ void sys_utmp_claim(const char *username, const char *
void sys_utmp_claim(const char *username, const char *hostname,
const char *id_str, int id_num)
{
@@ -275,16 +272,15 @@ index 4327301e3b1..f4a8362dd56 100644
ZERO_STRUCT(u);
-diff --git a/source3/wscript b/source3/wscript
-index 6209472c6c8..65961851e17 100644
---- a/source3/wscript
-+++ b/source3/wscript
-@@ -807,34 +807,39 @@ msg.msg_accrightslen = sizeof(fd);
+diff -Naurp a/source3/wscript b/source3/wscript
+--- a/source3/wscript 2024-08-05 12:50:16.286549000 -0400
++++ b/source3/wscript 2024-08-05 13:02:31.909769000 -0400
+@@ -804,34 +804,38 @@ msg.msg_accrightslen = sizeof(fd);
if Options.options.with_utmp:
conf.env.with_utmp = True
- if not conf.CHECK_HEADERS('utmp.h'): conf.env.with_utmp = False
-- conf.CHECK_FUNCS('pututline pututxline updwtmp updwtmpx getutmpx getutxent')
+- conf.CHECK_FUNCS('pututline pututxline updwtmp updwtmpx getutmpx')
- conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_name', headers='utmp.h',
+ if not conf.CHECK_HEADERS('utmpx.h') and not conf.CHECK_HEADERS('utmp.h'):
+ conf.env.with_utmp = False
@@ -297,7 +293,6 @@ index 6209472c6c8..65961851e17 100644
+ conf.CHECK_STRUCTURE_MEMBER('STRUCT_UTMP', 'ut_name', headers='utmpx.h utmp.h',
define='HAVE_UT_UT_NAME')
- conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_user', headers='utmp.h',
-+
+ conf.CHECK_STRUCTURE_MEMBER('STRUCT_UTMP', 'ut_user', headers='utmpx.h utmp.h',
define='HAVE_UT_UT_USER')
- conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_id', headers='utmp.h',
@@ -335,6 +330,3 @@ index 6209472c6c8..65961851e17 100644
define='SIZEOF_UTMP_UT_LINE', critical=False)
if not conf.CONFIG_SET('SIZEOF_UTMP_UT_LINE'):
conf.env.with_utmp = False
---
-2.37.1
-
diff --git a/net/samba420/files/0025-From-d9b748869a8f4018ebee302aae8246bf29f60309-Mon-Se.patch b/net/samba420/files/0025-From-d9b748869a8f4018ebee302aae8246bf29f60309-Mon-Se.patch
index b66e24b27910..064eeb0cfa48 100644
--- a/net/samba420/files/0025-From-d9b748869a8f4018ebee302aae8246bf29f60309-Mon-Se.patch
+++ b/net/samba420/files/0025-From-d9b748869a8f4018ebee302aae8246bf29f60309-Mon-Se.patch
@@ -15,15 +15,14 @@ FreeBSD Bug: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=228462
Signed-off-by: Ralph Boehme <slow@samba.org>
Signed-off-by: Timur I. Bakeyev <timur@FreeBSD.org>
---
- source3/lib/adouble.c | 20 ++++++++++++++++----
- source3/modules/vfs_fruit.c | 19 ++++++++++++++++++-
- 2 files changed, 34 insertions(+), 5 deletions(-)
+ source3/lib/adouble.c | 19 +++++++++++++++----
+ source3/modules/vfs_fruit.c | 19 ++++++++++++++++++-
+ 2 files changed, 33 insertions(+), 5 deletions(-)
-diff --git a/source3/lib/adouble.c b/source3/lib/adouble.c
-index aa78007dadd..ca99dcff193 100644
---- a/source3/lib/adouble.c
-+++ b/source3/lib/adouble.c
-@@ -2830,6 +2830,8 @@ ssize_t afpinfo_pack(const AfpInfo *ai, char *buf)
+diff -Naurp a/source3/lib/adouble.c b/source3/lib/adouble.c
+--- a/source3/lib/adouble.c 2024-02-02 04:33:51.172489400 -0500
++++ b/source3/lib/adouble.c 2024-08-05 13:53:43.952688000 -0400
+@@ -2821,6 +2821,8 @@ ssize_t afpinfo_pack(const AfpInfo *ai, char *buf)
return AFP_INFO_SIZE;
}
@@ -32,38 +31,35 @@ index aa78007dadd..ca99dcff193 100644
/**
* Unpack a buffer into a AfpInfo structure
*
-@@ -2847,12 +2849,22 @@ AfpInfo *afpinfo_unpack(TALLOC_CTX *ctx, const void *data)
- ai->afpi_Version = RIVAL(data, 4);
- ai->afpi_BackupTime = RIVAL(data, 12);
- memcpy(ai->afpi_FinderInfo, (const char *)data + 16,
-- sizeof(ai->afpi_FinderInfo));
-+ sizeof(ai->afpi_FinderInfo));
+@@ -2841,11 +2843,20 @@ AfpInfo *afpinfo_unpack(TALLOC_CTX *ctx, const void *d
+ sizeof(ai->afpi_FinderInfo));
+
+ if (validate) {
+- if (ai->afpi_Signature != AFP_Signature
+- || ai->afpi_Version != AFP_Version)
+- {
+- DEBUG(1, ("Bad AfpInfo signature or version\n"));
++ if (ai->afpi_Signature != AFP_Signature) {
++ DBG_WARNING("Bad AFP signature [%x]\n", ai->afpi_Signature);
+
-+ if (ai->afpi_Signature != AFP_Signature) {
-+ DBG_WARNING("Bad AFP signature [%x]\n", ai->afpi_Signature);
++ if (ai->afpi_Signature != BROKEN_FREEBSD_AFP_Signature) {
++ DBG_ERR("Bad AfpInfo signature\n");
++ TALLOC_FREE(ai);
++ return NULL;
++ }
++ }
+
-+ if (ai->afpi_Signature != BROKEN_FREEBSD_AFP_Signature) {
-+ DBG_ERR("Bad AfpInfo signature\n");
-+ TALLOC_FREE(ai);
++ if (ai->afpi_Version != AFP_Version) {
++ DBG_ERR("Bad AfpInfo version\n");
+ TALLOC_FREE(ai);
+ return NULL;
-+ }
-+ }
-
-- if (ai->afpi_Signature != AFP_Signature
-- || ai->afpi_Version != AFP_Version) {
-- DEBUG(1, ("Bad AfpInfo signature or version\n"));
-+ if (ai->afpi_Version != AFP_Version) {
-+ DBG_ERR("Bad AfpInfo version\n");
- TALLOC_FREE(ai);
-+ return NULL;
- }
-
- return ai;
-diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
-index 303df41258e..428f95fd7d9 100644
---- a/source3/modules/vfs_fruit.c
-+++ b/source3/modules/vfs_fruit.c
-@@ -2300,6 +2300,7 @@ static ssize_t fruit_pread_meta_stream(vfs_handle_struct *handle,
+ }
+ } else {
+ ai->afpi_Signature = AFP_Signature;
+diff -Naurp a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
+--- a/source3/modules/vfs_fruit.c 2024-02-02 04:33:51.228489600 -0500
++++ b/source3/modules/vfs_fruit.c 2024-08-05 13:12:29.220129000 -0400
+@@ -2305,6 +2305,7 @@ static ssize_t fruit_pread_meta_stream(vfs_handle_stru
size_t n, off_t offset)
{
struct fio *fio = fruit_get_complete_fio(handle, fsp);
@@ -71,7 +67,7 @@ index 303df41258e..428f95fd7d9 100644
ssize_t nread;
int ret;
-@@ -2308,7 +2309,23 @@ static ssize_t fruit_pread_meta_stream(vfs_handle_struct *handle,
+@@ -2313,7 +2314,23 @@ static ssize_t fruit_pread_meta_stream(vfs_handle_stru
}
nread = SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
@@ -96,6 +92,3 @@ index 303df41258e..428f95fd7d9 100644
return nread;
}
---
-2.37.1
-
diff --git a/net/samba420/files/0027-Add-VFS-module-vfs_freebsd-that-implements-FreeBSD-s.patch b/net/samba420/files/0027-Add-VFS-module-vfs_freebsd-that-implements-FreeBSD-s.patch
index 109b3eb82c79..f2dd827cabba 100644
--- a/net/samba420/files/0027-Add-VFS-module-vfs_freebsd-that-implements-FreeBSD-s.patch
+++ b/net/samba420/files/0027-Add-VFS-module-vfs_freebsd-that-implements-FreeBSD-s.patch
@@ -9,19 +9,15 @@ FreeBSD extended attributes.
Signed-off-by: Timur I. Bakeyev <timur@FreeBSD.org>
---
- docs-xml/manpages/vfs_freebsd.8.xml | 169 +++++++
- docs-xml/wscript_build | 1 +
- source3/modules/vfs_freebsd.c | 699 ++++++++++++++++++++++++++++
- source3/modules/wscript_build | 7 +
+ docs-xml/manpages/vfs_freebsd.8.xml | 169 ++++++
+ docs-xml/wscript_build | 1
+ source3/modules/vfs_freebsd.c | 699 ++++++++++++++++++++++++++
+ source3/modules/wscript_build | 7
4 files changed, 876 insertions(+)
- create mode 100644 docs-xml/manpages/vfs_freebsd.8.xml
- create mode 100644 source3/modules/vfs_freebsd.c
-diff --git a/docs-xml/manpages/vfs_freebsd.8.xml b/docs-xml/manpages/vfs_freebsd.8.xml
-new file mode 100644
-index 00000000000..6640a1c51f7
---- /dev/null
-+++ b/docs-xml/manpages/vfs_freebsd.8.xml
+diff -Naurp a/docs-xml/manpages/vfs_freebsd.8.xml b/docs-xml/manpages/vfs_freebsd.8.xml
+--- a/docs-xml/manpages/vfs_freebsd.8.xml 1969-12-31 19:00:00.000000000 -0500
++++ b/docs-xml/manpages/vfs_freebsd.8.xml 2024-08-05 13:57:36.246690000 -0400
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
@@ -192,11 +188,10 @@ index 00000000000..6640a1c51f7
+</refsect1>
+
+</refentry>
-diff --git a/docs-xml/wscript_build b/docs-xml/wscript_build
-index c8c4b68e514..4dc4b34ca40 100644
---- a/docs-xml/wscript_build
-+++ b/docs-xml/wscript_build
-@@ -86,6 +86,7 @@ vfs_module_manpages = ['vfs_acl_tdb',
+diff -Naurp a/docs-xml/wscript_build b/docs-xml/wscript_build
+--- a/docs-xml/wscript_build 2024-08-02 07:54:09.597892000 -0400
++++ b/docs-xml/wscript_build 2024-08-05 13:57:36.246975000 -0400
+@@ -87,6 +87,7 @@ vfs_module_manpages = ['vfs_acl_tdb',
'vfs_extd_audit',
'vfs_fake_perms',
'vfs_fileid',
@@ -204,11 +199,9 @@ index c8c4b68e514..4dc4b34ca40 100644
'vfs_fruit',
'vfs_full_audit',
'vfs_glusterfs',
-diff --git a/source3/modules/vfs_freebsd.c b/source3/modules/vfs_freebsd.c
-new file mode 100644
-index 00000000000..07d26d9c516
---- /dev/null
-+++ b/source3/modules/vfs_freebsd.c
+diff -Naurp a/source3/modules/vfs_freebsd.c b/source3/modules/vfs_freebsd.c
+--- a/source3/modules/vfs_freebsd.c 1969-12-31 19:00:00.000000000 -0500
++++ b/source3/modules/vfs_freebsd.c 2024-08-05 13:57:36.247358000 -0400
@@ -0,0 +1,699 @@
+/*
+ * This module implements VFS calls specific to FreeBSD
@@ -909,11 +902,10 @@ index 00000000000..07d26d9c516
+
+ return ret;
+}
-diff --git a/source3/modules/wscript_build b/source3/modules/wscript_build
-index ff318c3fa06..f88d054d524 100644
---- a/source3/modules/wscript_build
-+++ b/source3/modules/wscript_build
-@@ -636,6 +636,13 @@ bld.SAMBA3_MODULE('vfs_delay_inject',
+diff -Naurp a/source3/modules/wscript_build b/source3/modules/wscript_build
+--- a/source3/modules/wscript_build 2024-02-02 04:33:51.236489800 -0500
++++ b/source3/modules/wscript_build 2024-08-05 13:57:36.247658000 -0400
+@@ -631,6 +631,13 @@ bld.SAMBA3_MODULE('vfs_delay_inject',
enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_delay_inject'),
install=False)
@@ -927,6 +919,3 @@ index ff318c3fa06..f88d054d524 100644
bld.SAMBA3_MODULE('vfs_widelinks',
subsystem='vfs',
source='vfs_widelinks.c',
---
-2.37.1
-
diff --git a/net/samba420/files/0028-s3-lib-system-add-FreeBSD-proc_fd_pattern.patch b/net/samba420/files/0028-s3-lib-system-add-FreeBSD-proc_fd_pattern.patch
index be1aedaa4473..cda9c7ed1c95 100644
--- a/net/samba420/files/0028-s3-lib-system-add-FreeBSD-proc_fd_pattern.patch
+++ b/net/samba420/files/0028-s3-lib-system-add-FreeBSD-proc_fd_pattern.patch
@@ -1,35 +1,14 @@
-From 584c69e77abb537a7345222648a397a9963c01b7 Mon Sep 17 00:00:00 2001
-From: "Timur I. Bakeyev" <timur@FreeBSD.org>
-Date: Sat, 15 Oct 2022 04:02:43 +0200
-Subject: [PATCH 28/28] s3:lib:system - add FreeBSD proc_fd_pattern
-
-Add support for FreeBSD equivalent of /proc/self/fd through a special
-fdescfs mount with option "nodup". This filesystem should be mounted
-either to the private $PIDDIR/fd/ directory or to /dev/fd in order to
-provide security and performance characteristics similar to Linux.
-
-Signed-off-by: Timur I. Bakeyev <timur@FreeBSD.org>
----
- source3/lib/system.c | 108 ++++++++++++++++++++++++++++++++++---------
- 1 file changed, 87 insertions(+), 21 deletions(-)
-
-diff --git a/source3/lib/system.c b/source3/lib/system.c
-index 00d31692e00..d22ec08361c 100644
---- a/source3/lib/system.c
-+++ b/source3/lib/system.c
-@@ -1094,39 +1094,105 @@ int sys_get_number_of_cores(void)
+--- source3/lib/system.c.orig 2024-02-02 10:33:51.188489400 +0100
++++ source3/lib/system.c 2025-01-22 17:39:58.625028000 +0100
+@@ -1047,22 +1047,108 @@
}
#endif
--static struct proc_fd_pattern {
-- const char *pattern;
-- const char *test_path;
--} proc_fd_patterns[] = {
-- /* Linux */
-- { "/proc/self/fd/%d", "/proc/self/fd/0" },
-- { NULL, NULL },
+-bool sys_have_proc_fds(void)
+static bool freebsd_fdesc_check(const char *pattern)
-+{
+ {
+- static bool checked = false;
+- static bool have_proc_fds = false;
+ char fdesc_path[PATH_MAX];
+ int fd, fd2;
+
@@ -74,16 +53,22 @@ index 00d31692e00..d22ec08361c 100644
+{
+ char proc_fd_path[PATH_MAX];
+ const char *pattern = "/proc/self/fd/%lu";
-+ struct stat sb;
-+
+ struct stat sb;
+- int ret;
+
+- if (checked) {
+- return have_proc_fds;
+ snprintf(proc_fd_path, sizeof(proc_fd_path), pattern, 0);
+ if(stat(proc_fd_path, &sb) == 0) {
+ snprintf(buf, bufsize, "%s", pattern);
+ return buf;
-+ }
+ }
+ return NULL;
+}
-+
+
+- ret = stat("/proc/self/fd/0", &sb);
+- have_proc_fds = (ret == 0);
+- checked = true;
+static char* freebsd_pattern(char *buf, size_t bufsize) {
+ const char** base;
+ const char* base_dir[] = {
@@ -91,7 +76,8 @@ index 00d31692e00..d22ec08361c 100644
+ "/dev",
+ NULL
+ };
-+
+
+- return have_proc_fds;
+ for(base = &base_dir[0]; *base != NULL; base++) {
+ snprintf(buf, bufsize, "%s/fd/%%lu", *base);
+ if(freebsd_fdesc_check(buf)) {
@@ -105,45 +91,31 @@ index 00d31692e00..d22ec08361c 100644
+ linux_pattern,
+ freebsd_pattern,
+ NULL
- };
-
--static const char *proc_fd_pattern;
++};
++
+static char proc_fd_pattern_buf[PATH_MAX];
+static const char *proc_fd_pattern = NULL;
-
- bool sys_have_proc_fds(void)
- {
-- static bool checked;
-- static bool have_proc_fds;
-- struct proc_fd_pattern *p = NULL;
-- struct stat sb;
-- int ret;
++
++bool sys_have_proc_fds(void)
++{
+ static bool checked = false;
+ static bool have_proc_fds = false;
+ char* (**pattern_func)(char *, size_t) = NULL;
-
- if (checked) {
- return have_proc_fds;
- }
-
-- for (p = &proc_fd_patterns[0]; p->test_path != NULL; p++) {
-- ret = stat(p->test_path, &sb);
-- if (ret != 0) {
-- continue;
++
++ if (checked) {
++ return have_proc_fds;
++ }
++
+ for (pattern_func = &proc_fd_patterns[0]; *pattern_func != NULL; pattern_func++) {
+ if((*pattern_func)(proc_fd_pattern_buf, sizeof(proc_fd_pattern_buf)) != NULL) {
+ have_proc_fds = true;
+ proc_fd_pattern = proc_fd_pattern_buf;
+ break;
- }
-- have_proc_fds = true;
-- proc_fd_pattern = p->pattern;
-- break;
- }
--
- checked = true;
- return have_proc_fds;
++ }
++ }
++
++ checked = true;
++ return have_proc_fds;
}
---
-2.37.1
-
+
+ char *sys_proc_fd_path(int fd, struct sys_proc_fd_path_buf *buf)
diff --git a/net/samba420/files/0100-Fix-pathref-handling-for-FreeBSD-13plus.patch b/net/samba420/files/0100-Fix-pathref-handling-for-FreeBSD-13plus.patch
deleted file mode 100644
index 601a1c1c79d8..000000000000
--- a/net/samba420/files/0100-Fix-pathref-handling-for-FreeBSD-13plus.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-https://bugzilla.samba.org/show_bug.cgi?id=15376
-
---- source3/modules/vfs_zfsacl.c 2023-11-27 13:09:10.612012900 +0100
-+++ source3/modules/vfs_zfsacl.c 2025-01-07 18:53:05.292522000 +0100
-@@ -169,6 +169,7 @@
- bool must_add_empty_ace = false;
- struct zfsacl_config_data *config = NULL;
- int fd;
-+ char buf[PATH_MAX];
-
- SMB_VFS_HANDLE_GET_DATA(handle, config,
- struct zfsacl_config_data,
-@@ -235,22 +236,49 @@
- SMB_ASSERT(i == naces);
-
- /* store acl */
-- fd = fsp_get_pathref_fd(fsp);
-- if (fd == -1) {
-+ if (!fsp->fsp_flags.is_pathref) {
-+ fd = fsp_get_io_fd(fsp);
-+
-+ rv = facl(fd, ACE_SETACL, naces, acebuf);
-+ if (rv != 0) {
-+ DEBUG(8, ("zfs_process_smbacl(%s): Not PATHREF: facl(ACE_SETACL, %d): %s\n",
-+ fsp_str_dbg(fsp), naces,
-+ strerror(errno)));
-+ return false;
-+ }
-+ DEBUG(10, ("zfs_process_smbacl(%s): Not PATHREF: facl(ACE_SETACL, %d) -> %d\n",
-+ fsp_str_dbg(fsp), naces,
-+ rv));
-+
-+ } else if (fsp->fsp_flags.have_proc_fds) {
-+ fd = fsp_get_pathref_fd(fsp);
-+ if (fd == -1) {
-+ DEBUG(8, ("zfs_process_smbacl(%s): PATHREF(proc_fd): fsp_get_pathref_fd=-1: %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
- errno = EBADF;
- return false;
-- }
-- rv = facl(fd, ACE_SETACL, naces, acebuf);
-- if (rv != 0) {
-- if(errno == ENOSYS) {
-- DEBUG(9, ("acl(ACE_SETACL, %s): Operation is not "
-- "supported on the filesystem where the file "
-- "reside", fsp_str_dbg(fsp)));
-- } else {
-- DEBUG(9, ("acl(ACE_SETACL, %s): %s ", fsp_str_dbg(fsp),
-- strerror(errno)));
-- }
-+ }
-+ rv = acl(sys_proc_fd_path(fd, buf, sizeof(buf)), ACE_SETACL, naces, acebuf);
-+ if (rv != 0) {
-+ DEBUG(8, ("zfs_process_smbacl(%s): acl(ACE_SETACL, %d): %s\n",
-+ fsp_str_dbg(fsp), naces,
-+ strerror(errno)));
- return false;
-+ }
-+ DEBUG(10, ("zfs_process_smbacl(%s): PATHREF(proc_fd): acl(ACE_SETACL, %d) -> %d\n",
-+ fsp_str_dbg(fsp), naces,
-+ rv));
-+ } else {
-+ rv = acl(fsp->fsp_name->base_name, ACE_SETACL, naces, acebuf);
-+ if (rv != 0) {
-+ DEBUG(8, ("zfs_process_smbacl(%s): PATHREF(base_name): acl(ACE_SETACL, %d): %s\n",
-+ fsp_str_dbg(fsp), naces,
-+ strerror(errno)));
-+ return false;
-+ }
-+ DEBUG(10, ("zfs_process_smbacl(%s): PATHREF(base_name): facl(ACE_SETACL, %d) -> %d\n",
-+ fsp_str_dbg(fsp), naces,
-+ rv));
- }
-
- return True;
-@@ -282,25 +310,48 @@
- struct files_struct *fsp,
- ace_t **outbuf)
- {
-- int naces, rv;
-+ int naces, rv = -1, fd = -1;
- ace_t *acebuf = NULL;
-- int fd;
-
-- fd = fsp_get_pathref_fd(fsp);
-- if (fd == -1) {
-+
-+ char buf[PATH_MAX];
-+
-+
-+ if (!fsp->fsp_flags.is_pathref) {
-+ fd = fsp_get_io_fd(fsp);
-+ if (fd == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): Not PATHREF: fsp_get_io_fd=-1: %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
- errno = EBADF;
- return -1;
-- }
-- naces = facl(fd, ACE_GETACLCNT, 0, NULL);
-- if (naces == -1) {
-- int dbg_level = 10;
--
-- if (errno == ENOSYS) {
-- dbg_level = 1;
-- }
-- DEBUG(dbg_level, ("facl(ACE_GETACLCNT, %s): %s ",
-+ }
-+ naces = facl(fd, ACE_GETACLCNT, 0, NULL);
-+ if (naces == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): Not PATHREF: facl(ACE_GETACLCNT): %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
-+ return -1;
-+ }
-+ } else if (fsp->fsp_flags.have_proc_fds) {
-+ fd = fsp_get_pathref_fd(fsp);
-+ if (fd == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): PATHREF(proc_fd): fsp_get_pathref_fd=-1: %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
-+ errno = EBADF;
-+ return -1;
-+ }
-+ naces = acl(sys_proc_fd_path(fd, buf, sizeof(buf)), ACE_GETACLCNT, 0, NULL);
-+ if (naces == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): PATHREF(proc_fd): acl(ACE_GETACLCNT): %s\n",
- fsp_str_dbg(fsp), strerror(errno)));
-- return naces;
-+ return -1;
-+ }
-+ } else {
-+ naces = acl(fsp->fsp_name->base_name, ACE_GETACLCNT, 0, NULL);
-+ if (naces == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): PATHREF(base_name): acl(ACE_GETACLCNT): %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
-+ return -1;
-+ }
- }
-
- acebuf = talloc_size(mem_ctx, sizeof(ace_t)*naces);
-@@ -309,15 +360,37 @@
- return -1;
- }
-
-- rv = facl(fd, ACE_GETACL, naces, acebuf);
-- if (rv == -1) {
-- DBG_DEBUG("acl(ACE_GETACL, %s): %s ",
-- fsp_str_dbg(fsp), strerror(errno));
-+ if (!fsp->fsp_flags.is_pathref) {
-+ rv = facl(fd, ACE_GETACL, naces, acebuf);
-+ if (rv == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): Not PATHREF: facl(ACE_GETACL): %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
- return -1;
-+ }
-+ DEBUG(10, ("fget_zfsacl(%s): Not PATHREF: facl(ACE_GETACL) -> %d entries\n",
-+ fsp_str_dbg(fsp), rv));
-+ } else if (fsp->fsp_flags.have_proc_fds) {
-+ rv = acl(sys_proc_fd_path(fd, buf, sizeof(buf)), ACE_GETACL, naces, acebuf);
-+ if (rv == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): PATHREF(proc_fd): acl(ACE_GETACL): %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
-+ return -1;
-+ }
-+ DEBUG(10, ("fget_zfsacl(%s): PATHREF(proc_fd): acl(ACE_GETACL) -> %d entries\n",
-+ fsp_str_dbg(fsp), rv));
-+ } else {
-+ rv = acl(fsp->fsp_name->base_name, ACE_GETACL, naces, acebuf);
-+ if (rv == -1) {
-+ DEBUG(8, ("fget_zfsacl(%s): PATHREF(base_name): acl(ACE_GETACL): %s\n",
-+ fsp_str_dbg(fsp), strerror(errno)));
-+ return -1;
-+ }
-+ DEBUG(10, ("fget_zfsacl(%s): PATHREF(base_name): acl(ACE_GETACL) -> %d entries\n",
-+ fsp_str_dbg(fsp), rv));
- }
--
-+
- *outbuf = acebuf;
-- return naces;
-+ return rv;
- }
-
- static NTSTATUS zfsacl_fget_nt_acl(struct vfs_handle_struct *handle,
diff --git a/net/samba420/files/0100-Fix-pathref-handling-for-FreeBSD-13plus_samba42x.patch b/net/samba420/files/0100-Fix-pathref-handling-for-FreeBSD-13plus_samba42x.patch
new file mode 100644
index 000000000000..3e2a44d1acab
--- /dev/null
+++ b/net/samba420/files/0100-Fix-pathref-handling-for-FreeBSD-13plus_samba42x.patch
@@ -0,0 +1,508 @@
+https://bugzilla.samba.org/show_bug.cgi?id=15376
+
+# 2024-08-05
+# NOTE: Patch is partially split apart from the copy in net/samba419 due to Samba upstream
+# making some Linux-specific changes. FreeBSD-specific linprocfs mount path bits are
+# moved to a separate patch due to upstream hardcoding the Linux-specific procfs
+# path in multiple places in commit 9f63fad392f3:
+# https://git.samba.org/?p=samba.git;a=commitdiff;h=9f63fad392f3cff34d6a8e318e0427499170c417
+
+diff -Naurp a/source3/include/proto.h b/source3/include/proto.h
+--- a/source3/include/proto.h 2024-02-02 04:33:51.168489200 -0500
++++ b/source3/include/proto.h 2024-08-05 21:25:56.723092000 -0400
+@@ -211,6 +211,10 @@ char *sys_proc_fd_path(int fd, struct sys_proc_fd_path
+ bool sys_have_proc_fds(void);
+ char *sys_proc_fd_path(int fd, struct sys_proc_fd_path_buf *buf);
+
++int sys_open_real_fd_from_pathref_fd(int fd,
++ int *mfd,
++ int flags);
++
+ struct stat;
+ void init_stat_ex_from_stat (struct stat_ex *dst,
+ const struct stat *src,
+diff -Naurp a/source3/lib/system.c b/source3/lib/system.c
+--- a/source3/lib/system.c 2024-02-02 04:33:51.188489400 -0500
++++ b/source3/lib/system.c 2024-08-05 21:25:56.723571000 -0400
+@@ -1074,3 +1074,23 @@ char *sys_proc_fd_path(int fd, struct sys_proc_fd_path
+
+ return buf->buf;
+ }
++
++/* Helper function that opens a usable fd for accessing data
++ (metadata & content) from a pathref fd */
++int sys_open_real_fd_from_pathref_fd(int fd, int *rfd, int flags)
++{
++ int tfd;
++
++#if defined(HAVE_OPENAT) && defined(O_EMPTY_PATH)
++ /* This works for FreeBSD 13+ atleast */
++ tfd = openat(fd, "", O_EMPTY_PATH|flags);
++ if (tfd < 0) {
++ return errno;
++ }
++
++ *rfd = tfd;
++ return 0;
++#else
++ return ENOSYS;
++#endif
++}
+diff -Naurp a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
+--- a/source3/modules/vfs_default.c 2024-08-02 07:54:09.629892300 -0400
++++ b/source3/modules/vfs_default.c 2024-08-05 21:25:56.724593000 -0400
+@@ -2688,7 +2688,7 @@ static int vfswrap_fchmod(vfs_handle_struct *handle, f
+
+ static int vfswrap_fchmod(vfs_handle_struct *handle, files_struct *fsp, mode_t mode)
+ {
+- int result;
++ int result, fd, real_fd;
+
+ START_PROFILE(syscall_fchmod);
+
+@@ -2698,8 +2698,9 @@ static int vfswrap_fchmod(vfs_handle_struct *handle, f
+ return result;
+ }
+
++ fd = fsp_get_pathref_fd(fsp);
++
+ if (fsp->fsp_flags.have_proc_fds) {
+- int fd = fsp_get_pathref_fd(fsp);
+ struct sys_proc_fd_path_buf buf;
+
+ result = chmod(sys_proc_fd_path(fd, &buf), mode);
+@@ -2708,6 +2709,17 @@ static int vfswrap_fchmod(vfs_handle_struct *handle, f
+ return result;
+ }
+
++ if (sys_open_real_fd_from_pathref_fd(fd, &real_fd, O_RDONLY|O_NONBLOCK) == 0) {
++ int saved_errno;
++
++ result = fchmod(real_fd, mode);
++ saved_errno = errno;
++ close(real_fd);
++ errno = saved_errno;
++ END_PROFILE(syscall_fchmod);
++ return result;
++ }
++
+ /*
+ * This is no longer a handle based call.
+ */
+@@ -2720,7 +2732,7 @@ static int vfswrap_fchown(vfs_handle_struct *handle, f
+ static int vfswrap_fchown(vfs_handle_struct *handle, files_struct *fsp, uid_t uid, gid_t gid)
+ {
+ #ifdef HAVE_FCHOWN
+- int result;
++ int result, fd, real_fd;
+
+ START_PROFILE(syscall_fchown);
+ if (!fsp->fsp_flags.is_pathref) {
+@@ -2729,8 +2741,9 @@ static int vfswrap_fchown(vfs_handle_struct *handle, f
*** 951 LINES SKIPPED ***