git: 2daf87ac1983 - main - net/samba416: New port for Samba 4.16

From: Timur I. Bakeyev <timur_at_FreeBSD.org>
Date: Sun, 16 Oct 2022 23:23:49 UTC
The branch main has been updated by timur:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2daf87ac19838c9a36f56fb51b0678d193921771

commit 2daf87ac19838c9a36f56fb51b0678d193921771
Author:     Timur I. Bakeyev <timur@FreeBSD.org>
AuthorDate: 2022-10-16 23:06:57 +0000
Commit:     Timur I. Bakeyev <timur@FreeBSD.org>
CommitDate: 2022-10-16 23:23:12 +0000

    net/samba416: New port for Samba 4.16
    
    This is an initial attempt to add Samba to the FreeBSD after major
    rewrite of the VFS code in the upstream.
    
    Most of the port development is now carried in:
    
         https://gitlab.com/samba-freebsd
    
    Due to the way how new Samba VFS code is written there is a constrain
    that Samba 4.14+ can run only on FreeBSD 13.1+, as it requires support
    of the `nodup` option for the `fdesc` file system, as well as it's
    presence in the system in general.
    
        https://gitlab.com/samba-freebsd/-/wikis/The-New-VFS
    
    I'd like to thank CyberSecure Pty Ltd. company for their supoort of
    the port development and Andrew Walker from iXsystems Inc. for the
    patches he created and made available for the Samba4 on TrueNAS.
    
    PR:             263874
---
 net/Makefile                                       |     1 +
 net/samba416/Makefile                              |   700 +
 net/samba416/distinfo                              |     3 +
 ...-simplify-modules-build-and-config-genera.patch |   292 +
 ...gen.sh-script-to-run-under-FreeBSD-with-i.patch |    35 +
 ...CLang-prototype-warnings-in-kadm5-admin.h.patch |    32 +
 ...date-1-has-different-semantics-than-on-Li.patch |    38 +
 ...alloc-jemalloc.h-if-ENABLE_JEMALLOC-is-se.patch |    26 +
 ...tall-nss_-modules-into-PAMMODULESDIR-path.patch |    32 +
 ...alue-as-a-default-backlog-size-for-the-li.patch |   105 +
 ...-work-around-usage-of-Linux-specific-m-fl.patch |   111 +
 ...hat-config-checks-fail-if-the-warning-is-.patch |    39 +
 ...with-pkgconfigdir-to-specify-alternative-.patch |    54 +
 ...vided-by-port-location-of-the-XML-catalog.patch |    28 +
 ...ed-libraries-according-to-the-FreeBSD-spe.patch |    29 +
 ...onal-msg-parameter-to-CHECK_LIB-so-it-can.patch |    70 +
 ...to-disable-CTDB-tests-failing-on-FreeBSD-.patch |    77 +
 ...-debug-class-to-trck-down-DB-locking-code.patch |   132 +
 ...hema_attribute_compare-a-stable-comparisi.patch |    29 +
 ...dom-when-available-to-generate-random-tal.patch |    49 +
 ...ration-option-that-allows-to-choose-alter.patch |    65 +
 ...a1afeb0b920e60e14846987ae1d2d7dca4-Mon-Se.patch |   544 +
 ...between-r336017-and-r342928-wrongfuly-ret.patch |    35 +
 ...g-warnings-in-the-nfs_quota-debug-message.patch |    36 +
 ...MP-handling-code-and-add-FreeBSD-support..patch |   340 +
 ..._quota-test-function-into-vfstest-to-test.patch |   121 +
 ...ck-ZFS-provisioning-code-by-iXsystems-Inc.patch |   367 +
 ...869a8f4018ebee302aae8246bf29f60309-Mon-Se.patch |   101 +
 ...ompatibility-option-to-the-vfs_streams_xa.patch |   336 +
 ...ule-vfs_freebsd-that-implements-FreeBSD-s.patch |   932 ++
 ...s3-lib-system-add-FreeBSD-proc_fd_pattern.patch |   149 +
 ...ules-zfsacl-fix-get-set-ACL-on-FreeBSD-13.patch |   105 +
 ...-mitkdc-Add-support-for-MIT-Kerberos-1.20.patch |   947 ++
 net/samba416/files/README.FreeBSD.in               |    94 +
 net/samba416/files/man/ctdb-script.options.5       |   558 +
 net/samba416/files/man/ctdb-statistics.7           |   550 +
 net/samba416/files/man/ctdb-tunables.7             |   406 +
 net/samba416/files/man/ctdb.1                      |  1526 ++
 net/samba416/files/man/ctdb.7                      |   783 ++
 net/samba416/files/man/ctdb.conf.5                 |   359 +
 net/samba416/files/man/ctdb.sysconfig.5            |   139 +
 net/samba416/files/man/ctdb_diagnostics.1          |    79 +
 net/samba416/files/man/ctdbd.1                     |    83 +
 net/samba416/files/man/ctdbd_wrapper.1             |    63 +
 net/samba416/files/man/dbwrap_tool.1               |   329 +
 net/samba416/files/man/gentest.1                   |   133 +
 net/samba416/files/man/ldb.3                       |   427 +
 net/samba416/files/man/ldbadd.1                    |    78 +
 net/samba416/files/man/ldbdel.1                    |    80 +
 net/samba416/files/man/ldbedit.1                   |   111 +
 net/samba416/files/man/ldbmodify.1                 |    73 +
 net/samba416/files/man/ldbrename.1                 |    81 +
 net/samba416/files/man/ldbsearch.1                 |    91 +
 net/samba416/files/man/libsmbclient.7              |    94 +
 net/samba416/files/man/lmhosts.5                   |   123 +
 net/samba416/files/man/locktest.1                  |   137 +
 net/samba416/files/man/log2pcap.1                  |   124 +
 net/samba416/files/man/ltdbtool.1                  |   256 +
 net/samba416/files/man/masktest.1                  |   113 +
 net/samba416/files/man/mdfind.1                    |   166 +
 net/samba416/files/man/mdsearch.1                  |   357 +
 net/samba416/files/man/mvxattr.1                   |    84 +
 net/samba416/files/man/ndrdump.1                   |    84 +
 net/samba416/files/man/nmblookup.1                 |   341 +
 net/samba416/files/man/nmblookup4.1                |   157 +
 net/samba416/files/man/ntlm_auth.1                 |   458 +
 net/samba416/files/man/ntlm_auth4.1                |   233 +
 net/samba416/files/man/oLschema2ldif.1             |    74 +
 net/samba416/files/man/onnode.1                    |   218 +
 net/samba416/files/man/pam_winbind.conf.5          |   161 +
 net/samba416/files/man/ping_pong.1                 |   122 +
 net/samba416/files/man/profiles.1                  |   136 +
 net/samba416/files/man/regdiff.1                   |    87 +
 net/samba416/files/man/regpatch.1                  |    81 +
 net/samba416/files/man/regshell.1                  |   177 +
 net/samba416/files/man/regtree.1                   |    89 +
 net/samba416/files/man/rpcclient.1                 |  1961 +++
 net/samba416/files/man/samba-gpupdate.8            |   122 +
 net/samba416/files/man/samba.7                     |   254 +
 net/samba416/files/man/sharesec.1                  |   364 +
 net/samba416/files/man/smb.conf.5                  | 13994 +++++++++++++++++++
 net/samba416/files/man/smbcacls.1                  |  1044 ++
 net/samba416/files/man/smbclient.1                 |  1253 ++
 net/samba416/files/man/smbcontrol.1                |   343 +
 net/samba416/files/man/smbcquotas.1                |   440 +
 net/samba416/files/man/smbget.1                    |   197 +
 net/samba416/files/man/smbgetrc.5                  |   100 +
 net/samba416/files/man/smbpasswd.5                 |   175 +
 net/samba416/files/man/smbstatus.1                 |   186 +
 net/samba416/files/man/smbtar.1                    |   163 +
 net/samba416/files/man/smbtorture.1                |   362 +
 net/samba416/files/man/smbtree.1                   |   252 +
 net/samba416/files/man/talloc.3                    |   683 +
 net/samba416/files/man/tdbbackup.8                 |   129 +
 net/samba416/files/man/tdbdump.8                   |    72 +
 net/samba416/files/man/tdbrestore.8                |    54 +
 net/samba416/files/man/tdbtool.8                   |   170 +
 net/samba416/files/man/testparm.1                  |   194 +
 net/samba416/files/man/traffic_learner.7           |   128 +
 net/samba416/files/man/traffic_replay.7            |   380 +
 net/samba416/files/man/vfs_freebsd.8               |   204 +
 net/samba416/files/man/wbinfo.1                    |   490 +
 .../files/patch-examples_pdb_wscript__build        |    11 +
 net/samba416/files/patch-lib_ldb_wscript           |    61 +
 net/samba416/files/patch-lib_talloc_wscript        |    10 +
 net/samba416/files/patch-lib_tdb_wscript           |    27 +
 net/samba416/files/patch-lib_util_wscript__build   |    11 +
 net/samba416/files/patch-source3_lib_util.c        |    14 +
 .../files/patch-source3_librpc_crypto_gse.c        |    16 +
 ...patch-source3_modules_vfs__virusfilter__utils.c |    36 +
 .../patch-source3_registry_tests_test__regfio.c    |    10 +
 .../files/patch-source3_winbindd_wscript__build    |    11 +
 net/samba416/files/patch-source3_wscript__build    |    44 +
 net/samba416/files/pkg-message.in                  |    30 +
 net/samba416/files/samba_server.in                 |   251 +
 net/samba416/pkg-descr                             |     6 +
 net/samba416/pkg-plist                             |   451 +
 net/samba416/pkg-plist.ad_dc                       |   183 +
 net/samba416/pkg-plist.cluster                     |    78 +
 net/samba416/pkg-plist.python                      |   427 +
 120 files changed, 41266 insertions(+)

diff --git a/net/Makefile b/net/Makefile
index 44a1130e2c68..a27797afb95c 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -1395,6 +1395,7 @@
     SUBDIR += sakisafecli
     SUBDIR += samba412
     SUBDIR += samba413
+    SUBDIR += samba416
     SUBDIR += samplicator
     SUBDIR += savvycan
     SUBDIR += sbd
diff --git a/net/samba416/Makefile b/net/samba416/Makefile
new file mode 100644
index 000000000000..96424eef6b37
--- /dev/null
+++ b/net/samba416/Makefile
@@ -0,0 +1,700 @@
+PORTNAME=			${SAMBA4_BASENAME}416
+PORTVERSION=			${SAMBA4_VERSION}
+PORTREVISION=			0
+CATEGORIES?=			net
+MASTER_SITES=			SAMBA/samba/stable SAMBA/samba/rc
+DISTNAME=			${SAMBA4_DISTNAME}
+
+MAINTAINER=			timur@FreeBSD.org
+COMMENT=			Free SMB/CIFS and AD/DC server and client for Unix
+WWW=				https://www.samba.org/
+
+LICENSE=			GPLv3+
+LICENSE_FILE=			${WRKSRC}/COPYING
+
+USES=				cpe
+
+CONFLICTS_INSTALL?=		samba4*
+
+EXTRA_PATCHES+=			\
+				${PATCHDIR}/0001-Compact-and-simplify-modules-build-and-config-genera.patch:-p1 \
+				${PATCHDIR}/0002-Adjust-abi_gen.sh-script-to-run-under-FreeBSD-with-i.patch:-p1 \
+				${PATCHDIR}/0003-Mask-CLang-prototype-warnings-in-kadm5-admin.h.patch:-p1 \
+				${PATCHDIR}/0004-On-FreeBSD-date-1-has-different-semantics-than-on-Li.patch:-p1 \
+				${PATCHDIR}/0005-Include-jemalloc-jemalloc.h-if-ENABLE_JEMALLOC-is-se.patch:-p1 \
+				${PATCHDIR}/0006-Install-nss_-modules-into-PAMMODULESDIR-path.patch:-p1 \
+				${PATCHDIR}/0007-Use-macro-value-as-a-default-backlog-size-for-the-li.patch:-p1 \
+				${PATCHDIR}/0008-Brute-force-work-around-usage-of-Linux-specific-m-fl.patch:-p1 \
+				${PATCHDIR}/0009-Make-sure-that-config-checks-fail-if-the-warning-is-.patch:-p1 \
+				${PATCHDIR}/0010-Add-option-with-pkgconfigdir-to-specify-alternative-.patch:-p1 \
+				${PATCHDIR}/0011-Use-provided-by-port-location-of-the-XML-catalog.patch:-p1 \
+				${PATCHDIR}/0012-Create-shared-libraries-according-to-the-FreeBSD-spe.patch:-p1 \
+				${PATCHDIR}/0013-Pass-additional-msg-parameter-to-CHECK_LIB-so-it-can.patch:-p1 \
+				${PATCHDIR}/0014-Add-option-to-disable-CTDB-tests-failing-on-FreeBSD-.patch:-p1 \
+				${PATCHDIR}/0015-Add-extra-debug-class-to-trck-down-DB-locking-code.patch:-p1 \
+				${PATCHDIR}/0016-Make-ldb_schema_attribute_compare-a-stable-comparisi.patch:-p1 \
+				${PATCHDIR}/0017-Use-arc4random-when-available-to-generate-random-tal.patch:-p1 \
+				${PATCHDIR}/0018-Add-configuration-option-that-allows-to-choose-alter.patch:-p1 \
+				${PATCHDIR}/0019-From-923bc7a1afeb0b920e60e14846987ae1d2d7dca4-Mon-Se.patch:-p1 \
+				${PATCHDIR}/0020-FreeBSD-12-between-r336017-and-r342928-wrongfuly-ret.patch:-p1 \
+				${PATCHDIR}/0021-Fix-casting-warnings-in-the-nfs_quota-debug-message.patch:-p1 \
+				${PATCHDIR}/0022-Clean-up-UTMP-handling-code-and-add-FreeBSD-support..patch:-p1 \
+				${PATCHDIR}/0023-Add-cmd_get_quota-test-function-into-vfstest-to-test.patch:-p1 \
+				${PATCHDIR}/0024-Cherry-pick-ZFS-provisioning-code-by-iXsystems-Inc.patch:-p1 \
+				${PATCHDIR}/0025-From-d9b748869a8f4018ebee302aae8246bf29f60309-Mon-Se.patch:-p1 \
+				${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-s3-lib-system-add-FreeBSD-proc_fd_pattern.patch:-p1 \
+				${PATCHDIR}/0099-s3-modules-zfsacl-fix-get-set-ACL-on-FreeBSD-13.patch:-p1 \
+				${PATCHDIR}/0099-s4-mitkdc-Add-support-for-MIT-Kerberos-1.20.patch:-p1
+
+SAMBA4_BASENAME=		samba
+SAMBA4_PORTNAME=		${SAMBA4_BASENAME}4
+SAMBA4_VERSION=			4.16.5
+SAMBA4_DISTNAME=		${SAMBA4_BASENAME}-${SAMBA4_VERSION:S|.p|pre|:S|.r|rc|:S|.t|tp|:S|.a|alpha|}
+
+WRKSRC?=			${WRKDIR}/${DISTNAME}
+PLIST?=				${PKGDIR}/pkg-plist
+
+CPE_VENDOR=			samba
+CPE_PRODUCT=			samba
+# Directories
+VARDIR=				${DESTDIR}/var
+SAMBA4_RUNDIR=			${VARDIR}/run/${SAMBA4_PORTNAME}
+SAMBA4_LOGDIR=			${VARDIR}/log/${SAMBA4_PORTNAME}
+SAMBA4_LOCKDIR=			${VARDIR}/db/${SAMBA4_PORTNAME}
+SAMBA4_BINDDNSDIR=		${SAMBA4_LOCKDIR}/bind-dns
+SAMBA4_PRIVATEDIR=		${SAMBA4_LOCKDIR}/private
+SAMBA4_PAMDIR=			${PREFIX}/lib
+SAMBA4_LIBDIR=			${PREFIX}/lib/${SAMBA4_PORTNAME}
+SAMBA4_INCLUDEDIR=		${PREFIX}/include/${SAMBA4_PORTNAME}
+SAMBA4_CONFDIR=			${PREFIX}/etc
+SAMBA4_CONFIG=			smb4.conf
+SAMBA4_MODULES_CLASS=		auth bind9 gensec gpext idmap ldb nss_info \
+				pdb perfcount process_model service vfs
+
+CONFIGURE_ARGS+=		--mandir="${MANPREFIX}/man" \
+				--sysconfdir="${SAMBA4_CONFDIR}" \
+				--includedir="${SAMBA4_INCLUDEDIR}" \
+				--datadir="${DATADIR}" \
+				--libdir="${SAMBA4_LIBDIR}" \
+				--with-privatelibdir="${SAMBA4_LIBDIR}/private" \
+				--with-pammodulesdir="${SAMBA4_PAMDIR}" \
+				--with-modulesdir="${SAMBA4_MODULEDIR}" \
+				--with-pkgconfigdir="${PKGCONFIGDIR}" \
+				--localstatedir="${VARDIR}" \
+				--with-piddir="${SAMBA4_RUNDIR}" \
+				--with-sockets-dir="${SAMBA4_RUNDIR}" \
+				--with-privileged-socket-dir="${SAMBA4_RUNDIR}" \
+				--with-lockdir="${SAMBA4_LOCKDIR}" \
+				--with-statedir="${SAMBA4_LOCKDIR}" \
+				--with-cachedir="${SAMBA4_LOCKDIR}" \
+				--with-bind-dns-dir=${SAMBA4_BINDDNSDIR} \
+				--with-privatedir="${SAMBA4_PRIVATEDIR}" \
+				--with-logfilebase="${SAMBA4_LOGDIR}"
+# XXX: Flags
+CONFIGURE_ENV+=			PTHREAD_LDFLAGS="-lpthread"
+MAKE_ENV+=			PYTHONHASHSEED=1
+
+USES+=				compiler:c++11-lang iconv localbase:ldflags \
+				perl5 pkgconfig shebangfix waf gettext-runtime
+USE_PERL5=			build
+USE_LDCONFIG=			${SAMBA4_LIBDIR}
+WAF_CMD=			buildtools/bin/waf
+CONFIGURE_LOG=			bin/config.log
+
+PKGCONFIGDIR?=			${PREFIX}/libdata/pkgconfig
+PKGCONFIGDIR_REL?=		${PKGCONFIGDIR:S,^${PREFIX}/,,}
+PLIST_SUB+=			PKGCONFIGDIR=${PKGCONFIGDIR_REL}
+SUB_LIST+=			PKGCONFIGDIR=${PKGCONFIGDIR_REL}
+##############################################################################
+OPTIONS_SUB=			yes
+
+OPTIONS_DEFINE=			AD_DC ADS CLUSTER CUPS DOCS FAM GPGME \
+				LDAP MANDOC PROFILE PYTHON3 QUOTAS \
+				SPOTLIGHT SYSLOG UTMP
+#OPTIONS_DEFINE+=		DEVELOPER MEMORY_DEBUG
+
+OPTIONS_GROUP=			VFS
+OPTIONS_GROUP_VFS=		FRUIT GLUSTERFS
+
+OPTIONS_SINGLE=			GSSAPI ZEROCONF
+
+OPTIONS_SINGLE_GSSAPI=		GSSAPI_BUILTIN GSSAPI_MIT
+#GSSAPI_HEIMDAL
+OPTIONS_SINGLE_ZEROCONF=	ZEROCONF_NONE AVAHI MDNSRESPONDER
+
+# Make those default options
+OPTIONS_DEFAULT=		AD_DC ADS DOCS FAM LDAP \
+				PROFILE PYTHON3 QUOTAS SYSLOG UTMP \
+				FRUIT GSSAPI_BUILTIN AVAHI
+##############################################################################
+ADS_DESC=			Active Directory client(implies LDAP)
+AD_DC_DESC=			Active Directory Domain Controller(implies PYTHON3)
+CLUSTER_DESC=			Clustering support
+DEVELOPER_DESC=			With developer framework
+FAM_DESC=			File Alteration Monitor
+GPGME_DESC=			GpgME support
+LDAP_DESC=			LDAP client
+LIBZFS_DESC=			LibZFS
+SPOTLIGHT_DESC=			Spotlight server-side search support
+MANDOC_DESC=			Build manpages from DOCBOOK templates
+MEMORY_DEBUG_DESC=		Debug memory allocator
+PICKY_DEVELOPER_DESC=		Treat compiler warnings as errors(implies DEVELOPER)
+PROFILE_DESC=			Profiling data
+QUOTAS_DESC=			Disk quota support
+UTMP_DESC=			UTMP accounting
+
+VFS_DESC=			VFS modules
+FRUIT_DESC=			MacOSX and TimeMachine support
+GLUSTERFS_DESC=			GlusterFS support
+
+GSSAPI_BUILTIN_DESC=		GSSAPI support via bundled Heimdal
+
+ZEROCONF_DESC=			Zero configuration networking
+ZEROCONF_NONE_DESC=		Zeroconf support is absent
+##############################################################################
+# XXX: Unconditional dependencies which can't be switched off(if present in
+# the system)
+
+# Iconv(picked up unconditionaly)
+LIB_DEPENDS+=			libiconv.so:converters/libiconv
+# unwind
+LIB_DEPENDS+=			libunwind.so:devel/libunwind
+# Readline(sponsored by Python)
+# XXX: USES=readline pollutes CPPFLAGS, so we explicitly put dependency
+LIB_DEPENDS+=			libreadline.so:devel/readline
+# popt
+LIB_DEPENDS+=			libpopt.so:devel/popt
+# inotify
+LIB_DEPENDS+=			libinotify.so:devel/libinotify
+# GNUTLS
+LIB_DEPENDS+=			libgnutls.so:security/gnutls
+LIB_DEPENDS+=			libgcrypt.so:security/libgcrypt
+# NFSv4 ACL glue
+LIB_DEPENDS+=			libsunacl.so:sysutils/libsunacl
+# Jansson
+BUILD_DEPENDS+=			jansson>=2.10:devel/jansson
+RUN_DEPENDS+=			jansson>=2.10:devel/jansson
+# tasn1
+BUILD_DEPENDS+=			libtasn1>=3.8:security/libtasn1
+RUN_DEPENDS+=			libtasn1>=3.8:security/libtasn1
+# External Samba dependencies
+# Needed for IDL compiler
+BUILD_DEPENDS+=			p5-Parse-Yapp>=0:devel/p5-Parse-Yapp
+
+# Libarchive
+SAMBA4_BUNDLED_LIBS+=		!libarchive
+BUILD_DEPENDS+=			libarchive>=3.1.2:archivers/libarchive
+RUN_DEPENDS+=			libarchive>=3.1.2:archivers/libarchive
+
+### Bundled libraries
+SAMBA4_BUNDLED_CMOCKA?=		no
+SAMBA4_BUNDLED_TALLOC?=		no
+SAMBA4_BUNDLED_TEVENT?=		no
+SAMBA4_BUNDLED_TDB?=		no
+SAMBA4_BUNDLED_LDB?=		yes
+# cmocka
+.if defined(SAMBA4_BUNDLED_CMOCKA) && ${SAMBA4_BUNDLED_CMOCKA} == yes
+SAMBA4_BUNDLED_LIBS+=		cmocka
+CONFLICTS_INSTALL+=		cmocka-1.*
+PLIST_SUB+=			SAMBA4_BUNDLED_CMOCKA=""
+SUB_LIST+=			SAMBA4_BUNDLED_CMOCKA=""
+.else
+SAMBA4_BUNDLED_LIBS+=		!cmocka
+BUILD_DEPENDS+=			cmocka>=1.1.3:sysutils/cmocka
+TEST_DEPENDS+=			cmocka>=1.1.3:sysutils/cmocka
+PLIST_SUB+=			SAMBA4_BUNDLED_CMOCKA="@comment "
+SUB_LIST+=			SAMBA4_BUNDLED_CMOCKA="@comment "
+.endif
+# talloc
+.if defined(SAMBA4_BUNDLED_TALLOC) && ${SAMBA4_BUNDLED_TALLOC} == yes
+SAMBA4_BUNDLED_LIBS+=		talloc
+CONFLICTS_INSTALL+=		talloc-* talloc1-*
+PLIST_SUB+=			SAMBA4_BUNDLED_TALLOC=""
+SUB_LIST+=			SAMBA4_BUNDLED_TALLOC=""
+.else
+SAMBA4_BUNDLED_LIBS+=		!talloc
+BUILD_DEPENDS+=			talloc>=2.3.3:devel/talloc
+RUN_DEPENDS+=			talloc>=2.3.3:devel/talloc
+PLIST_SUB+=			SAMBA4_BUNDLED_TALLOC="@comment "
+SUB_LIST+=			SAMBA4_BUNDLED_TALLOC="@comment "
+.endif
+# tevent
+.if defined(SAMBA4_BUNDLED_TEVENT) && ${SAMBA4_BUNDLED_TEVENT} == yes
+SAMBA4_BUNDLED_LIBS+=		tevent
+CONFLICTS_INSTALL+=		tevent-* tevent1-*
+PLIST_SUB+=			SAMBA4_BUNDLED_TEVENT=""
+SUB_LIST+=			SAMBA4_BUNDLED_TEVENT=""
+.else
+SAMBA4_BUNDLED_LIBS+=		!tevent
+BUILD_DEPENDS+=			tevent>=0.11.0:devel/tevent
+RUN_DEPENDS+=			tevent>=0.11.0:devel/tevent
+PLIST_SUB+=			SAMBA4_BUNDLED_TEVENT="@comment "
+SUB_LIST+=			SAMBA4_BUNDLED_TEVENT="@comment "
+.endif
+# tdb
+.if defined(SAMBA4_BUNDLED_TDB) && ${SAMBA4_BUNDLED_TDB} == yes
+SAMBA4_BUNDLED_LIBS+=		tdb
+CONFLICTS_INSTALL+=		tdb-* tdb1-*
+PLIST_SUB+=			SAMBA4_BUNDLED_TDB=""
+SUB_LIST+=			SAMBA4_BUNDLED_TDB=""
+.else
+SAMBA4_BUNDLED_LIBS+=		!tdb
+BUILD_DEPENDS+=			tdb>=1.4.6:databases/tdb
+RUN_DEPENDS+=			tdb>=1.4.6:databases/tdb
+PLIST_SUB+=			SAMBA4_BUNDLED_TDB="@comment "
+SUB_LIST+=			SAMBA4_BUNDLED_TDB="@comment "
+.endif
+# ldb
+.if defined(SAMBA4_BUNDLED_LDB) && ${SAMBA4_BUNDLED_LDB} == yes
+SAMBA4_BUNDLED_LDB=		yes
+SAMBA4_BUNDLED_LIBS+=		ldb
+PLIST_SUB+=			SAMBA4_BUNDLED_LDB=""
+SUB_LIST+=			SAMBA4_BUNDLED_LDB=""
+SAMBA4_MODULEDIR=		${SAMBA4_LIBDIR}/modules
+.else
+SAMBA4_BUNDLED_LIBS+=		!ldb
+BUILD_DEPENDS+=			ldb25>=2.5.2:databases/ldb25
+RUN_DEPENDS+=			ldb25>=2.5.2:databases/ldb25
+PLIST_SUB+=			SAMBA4_BUNDLED_LDB="@comment "
+SUB_LIST+=			SAMBA4_BUNDLED_LDB="@comment "
+SAMBA4_MODULEDIR=		${PREFIX}/lib/shared-modules
+.endif
+
+.if (defined(SAMBA4_BUNDLED_TALLOC) && ${SAMBA4_BUNDLED_TALLOC} == yes) \
+	|| (defined(SAMBA4_BUNDLED_TDB) && ${SAMBA4_BUNDLED_TDB} == yes) \
+	|| (defined(SAMBA4_BUNDLED_LDB) && ${SAMBA4_BUNDLED_LDB} == yes) \
+	|| (defined(SAMBA4_BUNDLED_TEVENT) && ${SAMBA4_BUNDLED_TEVENT} == yes)
+SAMBA4_BUNDLED_LIBS+=		replace
+.endif
+# Don't use external libcom_err
+SAMBA4_BUNDLED_LIBS+=		com_err
+# Set the test environment variables
+TEST_USES=			python
+TEST_ENV+=			PYTHON="${PYTHON_CMD}" \
+				SHA1SUM=/sbin/sha1 \
+				SHA256SUM=/sbin/sha256 \
+				MD5SUM=/sbin/md5 \
+				PYTHONDONTWRITEBYTECODE=1
+
+TEST_DEPENDS+=			bash:shells/bash \
+				tshark:net/tshark
+# External Python modules
+TEST_BUILD_DEPENDS+=		${PYTHON_PKGNAMEPREFIX}iso8601>=0.1.11:devel/py-iso8601@${PY_FLAVOR}
+TEST_RUN_DEPENDS+=		${PYTHON_PKGNAMEPREFIX}iso8601>=0.1.11:devel/py-iso8601@${PY_FLAVOR}
+##############################################################################
+CONFIGURE_ARGS+=		\
+				--with-pam \
+				--with-iconv \
+				--with-winbind \
+				--with-regedit \
+				--disable-rpath \
+				--without-lttng \
+				--without-gettext \
+				--enable-pthreadpool \
+				--without-fake-kaserver \
+				--without-systemd \
+				--with-libarchive \
+				--with-acl-support \
+				--with-sendfile-support \
+				--disable-ctdb-tests
+#				${ICONV_CONFIGURE_BASE}
+##############################################################################
+FRUIT_PREVENTS=			ZEROCONF_NONE
+FRUIT_PREVENTS_MSG=		MacOSX support requires Zeroconf(AVAHI or MDNSRESPONDER)
+FRUIT_VARS=			SAMBA4_MODULES+=vfs_fruit
+FRUIT_PLIST_FILES=		man/man8/vfs_fruit.8.gz
+
+GLUSTERFS_CONFIGURE_ENABLE=	glusterfs
+GLUSTERFS_LIB_DEPENDS=		libglusterfs.so:net/glusterfs
+GLUSTERFS_VARS=			SAMBA4_MODULES+=vfs_glusterfs
+GLUSTERFS_PLIST_FILES=		man/man8/vfs_glusterfs.8.gz
+
+ZEROCONF_NONE_MAKE_ENV=		ZEROCONF=none
+##############################################################################
+AVAHI_CONFIGURE_ENABLE=		avahi
+AVAHI_LIB_DEPENDS=		libavahi-client.so:net/avahi-app
+AVAHI_VARS=			SAMBA4_SERVICES+=avahi_daemon
+
+MDNSRESPONDER_CONFIGURE_ENABLE=	dnssd
+MDNSRESPONDER_LIB_DEPENDS=	libdns_sd.so:net/mDNSResponder
+MDNSRESPONDER_VARS=		SAMBA4_SERVICES+=mdnsd
+##############################################################################
+MEMORY_DEBUG_IMPLIES=		DEBUG
+MEMORY_DEBUG_CONFIGURE_ENV=	ADDITIONAL_CFLAGS="-DENABLE_JEMALLOC `pkg-config --cflags jemalloc`" ADDITIONAL_LDFLAGS="`pkg-config --libs jemalloc`"
+MEMORY_DEBUG_LIB_DEPENDS=	libjemalloc.so.2:devel/jemalloc
+# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194046
+GDB_CMD?=			${LOCALBASE}/bin/gdb
+# https://bugzilla.samba.org/show_bug.cgi?id=8969
+PICKY_DEVELOPER_IMPLIES=	DEVELOPER
+PICKY_DEVELOPER_CONFIGURE_ON=	--picky-developer
+
+DEVELOPER_CONFIGURE_ON=		--enable-developer --enable-selftest --abi-check-disable
+DEVELOPER_CONFIGURE_ENV=	WAF_CMD_FORMAT=string
+DEVELOPER_BUILD_DEPENDS=	${SAMBA4_LMDB_DEPENDS} \
+				${GDB_CMD}:devel/gdb
+DEVELOPER_RUN_DEPENDS=		${SAMBA4_LMDB_DEPENDS}
+DEVELOPER_TEST_DEPENDS=		${GDB_CMD}:devel/gdb
+DEVELOPER_VARS_OFF=		GDB_CMD=true
+##############################################################################
+AD_DC_IMPLIES=			PYTHON3
+AD_DC_CONFIGURE_OFF=		--without-ad-dc
+AD_DC_BUILD_DEPENDS=		${SAMBA4_LMDB_DEPENDS}
+AD_DC_RUN_DEPENDS=		${SAMBA4_LMDB_DEPENDS}
+AD_DC_VARS=			PLIST+=${PKGDIR}/pkg-plist.ad_dc
+# samba-tool requires those for *upgrade
+AD_DC_BUILD_DEPENDS+=		${PYTHON_PKGNAMEPREFIX}markdown>=3.3.7:textproc/py-markdown@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}dnspython>=2.2.1:dns/py-dnspython@${PY_FLAVOR}
+AD_DC_RUN_DEPENDS+=		${PYTHON_PKGNAMEPREFIX}markdown>=3.3.7:textproc/py-markdown@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}dnspython>=2.2.1:dns/py-dnspython@${PY_FLAVOR}
+
+ADS_IMPLIES=			LDAP
+ADS_CONFIGURE_WITH=		ads
+
+CLUSTER_CONFIGURE_WITH=		cluster-support
+CLUSTER_VARS=			PLIST+=${PKGDIR}/pkg-plist.cluster
+
+CUPS_CONFIGURE_ENABLE=		cups iprint
+CUPS_LIB_DEPENDS=		libcups.so:print/cups
+# https://bugzilla.samba.org/show_bug.cgi?id=9545
+FAM_USES=			fam
+FAM_CONFIGURE_WITH=		fam
+
+GPGME_CONFIGURE_WITH=		gpgme
+GPGME_LIB_DEPENDS=		libgpgme.so:security/gpgme
+GPGME_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}gpgme>=1.14.0:security/py-gpgme@${PY_FLAVOR}
+
+GSSAPI_BUILTIN_USES=		bison
+GSSAPI_BUILTIN_BUILD_DEPENDS=	p5-JSON>=4.0:converters/p5-JSON
+
+GSSAPI_MIT_CONFIGURE_ON=	--with-system-mitkrb5 ${GSSAPIBASEDIR} \
+				--with-system-mitkdc=${GSSAPIBASEDIR}/sbin/krb5kdc \
+				--with-experimental-mit-ad-dc
+GSSAPI_MIT_USES=		gssapi:mit
+
+GSSAPI_HEIMDAL_CONFIGURE_ON=	--with-system-heimdalkrb5 ${GSSAPIBASEDIR}
+GSSAPI_HEIMDAL_USES=		gssapi:heimdal
+GSSAPI_HEIMDAL_PREVENTS=	AD_DC
+GSSAPI_HEIMDAL_PREVENTS_MSG=	GSSAPI_HEIMDAL and AD_DC enable conflicting options
+
+LDAP_CONFIGURE_WITH=		ldap
+LDAP_CONFIGURE_ON=		--with-openldap=${LOCALBASE}
+LDAP_USE=			OPENLDAP=yes
+LDAP_VARS=			SAMBA4_MODULES+=idmap_ldap
+
+LIBZFS_CONFIGURE_WITH=		libzfs
+LIBZFS_VARS=			SAMBA4_MODULES+=vfs_zfs_space
+
+MANDOC_BUILD_DEPENDS=		${LOCALBASE}/share/xsl/docbook/manpages/docbook.xsl:textproc/docbook-xsl \
+				xsltproc:textproc/libxslt
+MANDOC_CONFIGURE_ENV_OFF=	XSLTPROC="true"
+
+PROFILE_CONFIGURE_WITH=		profiling-data
+
+QUOTAS_CONFIGURE_WITH=		quotas
+
+SPOTLIGHT_CONFIGURE_ENABLE=	spotlight
+SPOTLIGHT_BUILD_DEPENDS=	tracker>=1.4.1:sysutils/tracker
+SPOTLIGHT_RUN_DEPENDS=		tracker>=1.4.1:sysutils/tracker
+# ICU
+SPOTLIGHT_LIB_DEPENDS=		libicuuc.so:devel/icu
+SPOTLIGHT_USES=			bison gnome
+SPOTLIGHT_USE=			gnome=glib20
+
+SYSLOG_CONFIGURE_WITH=		syslog
+
+UTMP_CONFIGURE_WITH=		utmp
+
+##############################################################################
+.include <bsd.port.options.mk>
+##############################################################################
+.if ${OPSYS} == FreeBSD && ${OSVERSION} < 1300076
+IGNORE=runs only on FreeBSD 13.1 and above due use of O_EMPTY_PATH
+.endif
+
+.if !defined(WANT_EXP_MODULES) || empty(WANT_EXP_MODULES)
+WANT_EXP_MODULES=		vfs_cacheprime
+.endif
+
+.if ${WANT_EXP_MODULES:Mvfs_snapper}
+# snapper needs dbus
+LIB_DEPENDS+=			libdbus-1.so:devel/dbus
+LIB_DEPENDS+=			libdbus-glib-1.so:devel/dbus-glib
+.endif
+
+SAMBA4_MODULES+=		krb5_async_dns_krb5_locator krb5_winbind_krb5_locator idmap_nss idmap_autorid \
+				idmap_rid idmap_hash idmap_tdb idmap_tdb2 idmap_script \
+				nss-info_hash
+# List of extra modules taken from RHEL build
+# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=197320
+.if ${PORT_OPTIONS:MADS}
+SAMBA4_MODULES+=		idmap_ad idmap_rfc2307 nss-info_template \
+				nss-info_rfc2307 nss-info_sfu nss-info_sfu20
+.endif
+# This kind of special for this distribution
+SAMBA4_MODULES+=		vfs_freebsd
+
+SAMBA4_MODULES+=		vfs_acl_tdb vfs_acl_xattr vfs_aio_fork vfs_aio_pthread \
+				vfs_audit vfs_cap vfs_catia vfs_commit vfs_crossrename \
+				vfs_default_quota vfs_dirsort vfs_expand_msdfs \
+				vfs_extd_audit vfs_fake_perms vfs_full_audit \
+				vfs_linux_xfs_sgid vfs_media_harmony vfs_offline \
+				vfs_preopen vfs_readahead vfs_readonly vfs_recycle \
+				vfs_shadow_copy vfs_shadow_copy2 vfs_shell_snap \
+				vfs_streams_depot vfs_streams_xattr vfs_syncops \
+				vfs_time_audit vfs_unityed_media vfs_virusfilter \
+				vfs_widelinks vfs_worm vfs_xattr_tdb vfs_zfsacl
+
+.if ${PORT_OPTIONS:MDEVELOPER}
+SAMBA4_MODULES+=		auth_skel pdb_test gpext_security gpext_registry \
+				gpext_scripts perfcount_test vfs_fake_dfq \
+				vfs_skel_opaque vfs_skel_transparent \
+				vfs_shadow_copy_test vfs_fake_acls \
+				vfs_nfs4acl_xattr vfs_error_inject vfs_delay_inject
+.endif
+# Python bindings
+.if ! ${PORT_OPTIONS:MPYTHON3} || defined(NO_PYTHON)
+USES+=				python:build,test
+CONFIGURE_ARGS+=		--disable-python
+.else
+USES+=				python:3.6+
+PLIST+=				${PKGDIR}/pkg-plist.python
+# Don't cache Python modules
+CONFIGURE_ARGS+=		--nopycache
+MAKE_ENV+=			PYTHONDONTWRITEBYTECODE=1
+
+.	if defined(SAMBA4_BUNDLED_TALLOC) && ${SAMBA4_BUNDLED_TALLOC} == yes
+SAMBA4_BUNDLED_LIBS+=		pytalloc-util
+.	else
+SAMBA4_BUNDLED_LIBS+=		!pytalloc-util
+.	endif
+
+.	if defined(SAMBA4_BUNDLED_TEVENT) && ${SAMBA4_BUNDLED_TEVENT} == yes
+SAMBA4_BUNDLED_LIBS+=		pytevent
+.	else
+SAMBA4_BUNDLED_LIBS+=		!pytevent
+.	endif
+
+.	if defined(SAMBA4_BUNDLED_TDB) && ${SAMBA4_BUNDLED_TDB} == yes
+SAMBA4_BUNDLED_LIBS+=		pytdb
+.	else
+SAMBA4_BUNDLED_LIBS+=		!pytdb
+.	endif
+
+.	if defined(SAMBA4_BUNDLED_LDB) && ${SAMBA4_BUNDLED_LDB} == yes
+SAMBA4_BUNDLED_LIBS+=		pyldb pyldb-util
+.	else
+SAMBA4_BUNDLED_LIBS+=		!pyldb !pyldb-util
+.	endif
+.endif
+
+.if defined(WANT_EXP_MODULES) && !empty(WANT_EXP_MODULES)
+SAMBA4_MODULES+=		${WANT_EXP_MODULES}
+.endif
+
+.if defined(SAMBA4_BUNDLED_LIBS) && !empty(SAMBA4_BUNDLED_LIBS)
+CONFIGURE_ARGS+=		--bundled-libraries="${SAMBA4_BUNDLED_LIBS:Q:C|(\\\\ )+|,|g:S|\\||g}"
+.endif
+
+.if defined(SAMBA4_MODULES) && !empty(SAMBA4_MODULES)
+CONFIGURE_ARGS+=		--with-shared-modules="${SAMBA4_MODULES:C|-|_|:Q:C|(\\\\ )+|,|g:S|\\||g}"
+.endif
+# XXX: Hack for nss-info_* -> nss_info/* modules
+# Add selected modules to the plist
+.for module in ${SAMBA4_MODULES}
+PLIST_FILES+=			${SAMBA4_MODULEDIR}/${module:C|_|/|:C|-|_|}.so
+.endfor
+
+.for module_class in ${SAMBA4_MODULES_CLASS}
+PLIST_DIRS+=			${SAMBA4_MODULEDIR}/${module_class}
+.endfor
+PLIST_DIRS+=			${SAMBA4_MODULEDIR}
+
+.if defined(WITH_DEBUG)
+CONFIGURE_ARGS+=		--verbose --enable-debug
+MAKE_ARGS+=			--verbose
+DEBUG_FLAGS?=			-g -ggdb3 -O0
+.endif
+
+##############################################################################
+.include <bsd.port.pre.mk>
+##############################################################################
+# Implemented in the gcrypt on AMD64
+.if ${ARCH} == "amd64"
+CONFIGURE_ARGS+=		--accel-aes=intelaesni
+.else
+CONFIGURE_ARGS+=		--accel-aes=none
+.endif
+
+# Only for 64-bit architectures
+.if ${ARCH} != armv6 && ${ARCH} != armv7 && ${ARCH} != i386 && ${ARCH} != mips && ${ARCH} != powerpc && ${ARCH} != powerpcspe
+.	if defined(SAMBA4_BUNDLED_LDB) && ${SAMBA4_BUNDLED_LDB} == yes && (${PORT_OPTIONS:MAD_DC} || ${PORT_OPTIONS:MDEVELOPER})
+# LMDB
+SAMBA4_LMDB_DEPENDS=		lmdb>=0.9.16:databases/lmdb
+PLIST_FILES+=			${SAMBA4_LIBDIR}/private/libldb-mdb-int-samba4.so \
+				${SAMBA4_MODULEDIR}/ldb/mdb.so
+.	endif
+.endif
+
+.if ${PORT_OPTIONS:MGSSAPI_MIT}
+PLIST_FILES+=			${SAMBA4_MODULEDIR}/krb5/winbind_krb5_localauth.so \
+				man/man8/winbind_krb5_localauth.8.gz
+.	if ${PORT_OPTIONS:MAD_DC}
+PLIST_FILES+=			${SAMBA4_LIBDIR}/krb5/plugins/kdb/samba.so
+.	endif
+.endif
+# for libexecinfo: (so that __builtin_frame_address() finds the top of the stack)
+CFLAGS_amd64+=			-fno-omit-frame-pointer
+# No fancy color error messages
+CFLAGS+=			${CFLAGS_${CHOSEN_COMPILER_TYPE}}
+CFLAGS_clang=			-fno-color-diagnostics
+CONFIGURE_ENV+=			NOCOLOR=yes WAF_LOG_FORMAT='%(c1)s%(zone)s%(c2)s %(message)s'
+MAKE_ENV+=			NOCOLOR=yes WAF_LOG_FORMAT='%(c1)s%(zone)s%(c2)s %(message)s'
+# Allow rpcgen to find proper CPP
+MAKE_ENV+=			RPCGEN_CPP="${CPP}"
+#.if ${readline_ARGS} == port
+#CFLAGS+=			-D_FUNCTION_DEF
+#.endif
+
+# Make sure that the right version of Python is used by the tools
+# https://bugzilla.samba.org/show_bug.cgi?id=7305
+SHEBANG_FILES=			${PATCH_WRKSRC}/source4/scripting/bin/* ${PATCH_WRKSRC}/selftest/*
+
+SAMBA4_SUB=			SAMBA4_LOGDIR="${SAMBA4_LOGDIR}" \
+				SAMBA4_RUNDIR="${SAMBA4_RUNDIR}" \
+				SAMBA4_LOCKDIR="${SAMBA4_LOCKDIR}" \
+				SAMBA4_LIBDIR="${SAMBA4_LIBDIR}" \
+				SAMBA4_MODULEDIR="${SAMBA4_MODULEDIR}" \
+				SAMBA4_BINDDNSDIR="${SAMBA4_BINDDNSDIR}" \
+				SAMBA4_PRIVATEDIR="${SAMBA4_PRIVATEDIR}" \
+				SAMBA4_CONFDIR="${SAMBA4_CONFDIR}" \
+				SAMBA4_CONFIG="${SAMBA4_CONFIG}" \
+				SAMBA4_SERVICES="${SAMBA4_SERVICES}"
+
+PLIST_SUB+=			${SAMBA4_SUB}
+SUB_LIST+=			${SAMBA4_SUB}
+
+USE_RC_SUBR=			samba_server
+SUB_FILES=			pkg-message README.FreeBSD
+
+PORTDOCS=			README.FreeBSD
+
+post-extract:
+				@${RM} -r ${WRKSRC}/pidl/lib/Parse/Yapp
+
+post-patch:
+				@${REINPLACE_CMD} -e 's|$${PKGCONFIGDIR}|${PKGCONFIGDIR}|g' \
+					${PATCH_WRKSRC}/buildtools/wafsamba/pkgconfig.py
+				@${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
+					${PATCH_WRKSRC}/buildtools/wafsamba/wafsamba.py
+				@${REINPLACE_CMD} -e 's|%%GDB_CMD%%|${GDB_CMD}|g' \
+					${PATCH_WRKSRC}/buildtools/scripts/abi_gen.sh
+				@${REINPLACE_CMD} -e 's|%%SAMBA4_CONFIG%%|${SAMBA4_CONFIG}|g' \
+					${PATCH_WRKSRC}/dynconfig/wscript
+
+# Use threading (or multiprocessing) but not thread (renamed in python 3+).
+pre-configure:
+.if (!${PORT_OPTIONS:MPYTHON3} || defined(NO_PYTHON)) && ${PORT_OPTIONS:MAD_DC}
+				@${ECHO_CMD}; \
+				${ECHO_MSG} "===>  AD_DC option requires PYTHON3 to be set"; \
+				${ECHO_CMD}; \
+				${FALSE}
+.endif
+
+pre-build-MANDOC-off:
+				${MKDIR} ${BUILD_WRKSRC}/bin/default/docs-xml/
+				${CP} -rp ${BUILD_WRKSRC}/docs/manpages ${BUILD_WRKSRC}/bin/default/docs-xml/
+.for man in			libcli/nbt/man/nmblookup4.1 \
+				librpc/tools/ndrdump.1 \
+				source4/lib/registry/man/regdiff.1 \
+				source4/lib/registry/man/regpatch.1 \
+				source4/lib/registry/man/regshell.1 \
+				source4/lib/registry/man/regtree.1 \
+				source4/scripting/man/samba-gpupdate.8 \
+				source4/torture/man/gentest.1 \
+				source4/torture/man/locktest.1 \
+				source4/torture/man/masktest.1 \
+				source4/torture/man/smbtorture.1 \
+				source4/utils/man/ntlm_auth4.1 \
+				source4/utils/oLschema2ldif/oLschema2ldif.1 \
+				lib/tdb/man/tdbdump.8 \
+				lib/tdb/man/tdbbackup.8 \
+				lib/tdb/man/tdbtool.8 \
+				lib/talloc/man/talloc.3 \
+				lib/tdb/man/tdbrestore.8 \
+				lib/ldb/man/ldb.3 \
+				lib/ldb/man/ldbadd.1 \
+				lib/ldb/man/ldbdel.1 \
+				lib/ldb/man/ldbedit.1 \
+				lib/ldb/man/ldbmodify.1 \
+				lib/ldb/man/ldbrename.1 \
+				lib/ldb/man/ldbsearch.1 \
+				docs-xml/manpages/vfs_freebsd.8
+					${MKDIR} `dirname ${BUILD_WRKSRC}/bin/default/${man}`
+					${INSTALL_MAN} ${FILESDIR}/man/`basename ${man}` ${BUILD_WRKSRC}/bin/default/${man}
+.endfor
+.if ${PORT_OPTIONS:MCLUSTER}
+				${MKDIR} ${BUILD_WRKSRC}/bin/default/ctdb/
+.	for man in		ctdb_diagnostics.1 ctdb.1 ctdbd_wrapper.1 ctdbd.1 ltdbtool.1 onnode.1 ping_pong.1 \
+				ctdb.conf.5 ctdb.sysconfig.5 ctdb-script.options.5 \
+				ctdb.7 ctdb-statistics.7 ctdb-tunables.7
+					${INSTALL_MAN} ${FILESDIR}/man/${man} ${BUILD_WRKSRC}/bin/default/ctdb/
+.	endfor
+.endif
+
+post-install-rm-junk:
+				${RM} -r ${STAGEDIR}${PYTHON_SITELIBDIR}/samba/third_party
+				${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR} -name __pycache__ \
+					-type d -print0 | ${XARGS} -0 -n 1 -t ${RM} -r
+
+post-install-fix-manpages:
+.for f in vfs_aio_linux.8 vfs_btrfs.8 vfs_ceph.8 vfs_gpfs.8
+				${RM} ${STAGEDIR}${PREFIX}/man/man8/${f}
+.endfor
+.if defined(SAMBA4_BUNDLED_LDB) && ${SAMBA4_BUNDLED_LDB} == yes
+.	for f in ldbadd.1 ldbdel.1 ldbedit.1 ldbmodify.1 ldbrename.1 ldbsearch.1
+				${MV} ${STAGEDIR}${PREFIX}/man/man1/${f} ${STAGEDIR}${PREFIX}/man/man1/samba-${f}
+.	endfor
+.endif
+.if defined(SAMBA4_BUNDLED_TDB) && ${SAMBA4_BUNDLED_TDB} == yes
+.	for f in tdbbackup.8 tdbdump.8 tdbrestore.8 tdbtool.8
+				${MV} ${STAGEDIR}${PREFIX}/man/man8/${f} ${STAGEDIR}${PREFIX}/man/man8/samba-${f}
+.	endfor
+.endif
+
+post-install: post-install-rm-junk post-install-fix-manpages
+				${LN} -sf smb.conf.5.gz ${STAGEDIR}${PREFIX}/man/man5/smb4.conf.5.gz
+# Run post-install script
+.for dir in			${SAMBA4_LOGDIR} ${SAMBA4_RUNDIR} ${SAMBA4_LOCKDIR} ${SAMBA4_MODULEDIR}
+					${INSTALL} -d -m 0755 "${STAGEDIR}${dir}"
+.endfor
+				${INSTALL} -d -m 0750 "${STAGEDIR}${SAMBA4_BINDDNSDIR}"
+				${INSTALL} -d -m 0750 "${STAGEDIR}${SAMBA4_PRIVATEDIR}"
+.for module_class in			${SAMBA4_MODULES_CLASS}
+					${INSTALL} -d -m 0755 "${STAGEDIR}${SAMBA4_MODULEDIR}/${module_class}"
+.endfor
+.if !defined(WITH_DEBUG)
+				-${FIND} ${STAGEDIR}${PREFIX}/bin ${STAGEDIR}${PREFIX}/sbin ${STAGEDIR}${PREFIX}/libexec \
+					-type f -print0 | ${XARGS} -0 -n 1 -t ${STRIP_CMD}
+				-${FIND} ${STAGEDIR}${PREFIX}/lib -name '*.so*' \
+					-type f -print0 | ${XARGS} -0 -n 1 -t ${STRIP_CMD}
+.endif
+
+post-install-FRUIT-off:
+				${RM} ${STAGEDIR}${SAMBA4_MODULEDIR}/vfs/fruit.so
+				${RM} ${STAGEDIR}${PREFIX}/man/man8/vfs_fruit.8
+
+post-install-DOCS-on:
+				${MKDIR} ${STAGEDIR}${DOCSDIR}
+.for doc in			${PORTDOCS}
+				${INSTALL_DATA} ${WRKDIR}/${doc} ${STAGEDIR}${DOCSDIR}
+.endfor
+
+post-install-CLUSTER-on:
+				${LN} -nfs ../../../../share/ctdb/events/legacy/00.ctdb.script		${STAGEDIR}${PREFIX}/etc/ctdb/events/legacy/00.ctdb.script
+				${LN} -nfs ../../../../share/ctdb/events/legacy/10.interface.script	${STAGEDIR}${PREFIX}/etc/ctdb/events/legacy/10.interface.script
+				${LN} -nfs ../../../../share/ctdb/events/legacy/05.system.script	${STAGEDIR}${PREFIX}/etc/ctdb/events/legacy/05.system.script
+				${LN} -nfs ../../../../share/ctdb/events/legacy/01.reclock.script	${STAGEDIR}${PREFIX}/etc/ctdb/events/legacy/01.reclock.script
+
+.include <bsd.port.post.mk>
diff --git a/net/samba416/distinfo b/net/samba416/distinfo
new file mode 100644
index 000000000000..3d86f57054fd
--- /dev/null
+++ b/net/samba416/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1663020631
+SHA256 (samba-4.16.5.tar.gz) = c73c092017d2d1dd270709c8597321d0dd667c882a1b2470cf60f8ee56d3fd44
+SIZE (samba-4.16.5.tar.gz) = 30613439
diff --git a/net/samba416/files/0001-Compact-and-simplify-modules-build-and-config-genera.patch b/net/samba416/files/0001-Compact-and-simplify-modules-build-and-config-genera.patch
new file mode 100644
index 000000000000..b4bc56519f7e
--- /dev/null
+++ b/net/samba416/files/0001-Compact-and-simplify-modules-build-and-config-genera.patch
@@ -0,0 +1,292 @@
+From 05e3cc236406680a55e19b204202b63cdaf48ea1 Mon Sep 17 00:00:00 2001
+From: "Timur I. Bakeyev" <timur@FreeBSD.org>
+Date: Mon, 1 Aug 2022 04:15:43 +0200
+Subject: [PATCH 01/28] Compact and simplify modules build and config
+ generation for Bind 9.x AD DLZ.
+
+Signed-off-by: Timur I. Bakeyev <timur@FreeBSD.org>
+---
+ python/samba/provision/sambadns.py | 68 ++++++++++++------------------
+ source4/dns_server/dlz_minimal.h   | 44 +++++++++----------
+ source4/dns_server/wscript_build   | 62 +++------------------------
+ source4/setup/named.conf.dlz       | 25 +----------
+ source4/torture/dns/wscript_build  |  2 +-
+ 5 files changed, 55 insertions(+), 146 deletions(-)
+
+diff --git a/python/samba/provision/sambadns.py b/python/samba/provision/sambadns.py
+index 404b346a885..8e5a8ba5f25 100644
+--- a/python/samba/provision/sambadns.py
++++ b/python/samba/provision/sambadns.py
+@@ -21,6 +21,7 @@
+ """DNS-related provisioning"""
+ 
+ import os
++import re
+ import uuid
+ import shutil
+ import time
+@@ -1010,52 +1011,37 @@ def create_named_conf(paths, realm, dnsdomain, dns_backend, logger):
+                                      stderr=subprocess.STDOUT,
+                                      cwd='.').communicate()[0]
+         bind_info = get_string(bind_info)
+-        bind9_8 = '#'
+-        bind9_9 = '#'
+-        bind9_10 = '#'
+-        bind9_11 = '#'
+-        bind9_12 = '#'
+-        bind9_14 = '#'
+-        bind9_16 = '#'
+-        bind9_18 = '#'
+-        if bind_info.upper().find('BIND 9.8') != -1:
+-            bind9_8 = ''
+-        elif bind_info.upper().find('BIND 9.9') != -1:
+-            bind9_9 = ''
+-        elif bind_info.upper().find('BIND 9.10') != -1:
+-            bind9_10 = ''
+-        elif bind_info.upper().find('BIND 9.11') != -1:
+-            bind9_11 = ''
+-        elif bind_info.upper().find('BIND 9.12') != -1:
+-            bind9_12 = ''
+-        elif bind_info.upper().find('BIND 9.14') != -1:
+-            bind9_14 = ''
+-        elif bind_info.upper().find('BIND 9.16') != -1:
+-            bind9_16 = ''
+-        elif bind_info.upper().find('BIND 9.18') != -1:
+-            bind9_18 = ''
+-        elif bind_info.upper().find('BIND 9.7') != -1:
+-            raise ProvisioningError("DLZ option incompatible with BIND 9.7.")
+-        elif bind_info.upper().find('BIND_9.13') != -1:
+-            raise ProvisioningError("Only stable/esv releases of BIND are supported.")
+-        elif bind_info.upper().find('BIND_9.15') != -1:
+-            raise ProvisioningError("Only stable/esv releases of BIND are supported.")
+-        elif bind_info.upper().find('BIND_9.17') != -1:
+-            raise ProvisioningError("Only stable/esv releases of BIND are supported.")
++        bind9_release = re.search('BIND (9)\.(\d+)\.', bind_info, re.I)
++        if bind9_release:
++            bind9_disabled = ''
++            bind9_version = bind9_release.group(0) + "x"
++            bind9_version_major = int(bind9_release.group(1))
++            bind9_version_minor = int(bind9_release.group(2))
++            if bind9_version_minor == 7:
++                raise ProvisioningError("DLZ option incompatible with BIND 9.7.")
++            elif bind9_version_minor == 8:
++                bind9_dlz_version = "9"
++            elif bind9_version_minor in [13, 15, 17]:
++                raise ProvisioningError("Only stable/esv releases of BIND are supported.")
++            else:
++                bind9_dlz_version = "%d_%d" % (bind9_version_major, bind9_version_minor)
+         else:
++            bind9_disabled = '# '
++            bind9_version = "BIND z.y.x"
++            bind9_dlz_version = "z_y"
+             logger.warning("BIND version unknown, please modify %s manually." % paths.namedconf)
++
++        bind9_dlz = (
++            '    # For %s\n'
++            '    %sdatabase "dlopen %s/bind9/dlz_bind%s.so";'
++        ) % (
++            bind9_version, bind9_disabled, samba.param.modules_dir(), bind9_dlz_version
++        )
+         setup_file(setup_path("named.conf.dlz"), paths.namedconf, {
+                     "NAMED_CONF": paths.namedconf,
+                     "MODULESDIR": samba.param.modules_dir(),
+-                    "BIND9_8": bind9_8,
+-                    "BIND9_9": bind9_9,
+-                    "BIND9_10": bind9_10,
+-                    "BIND9_11": bind9_11,
+-                    "BIND9_12": bind9_12,
+-                    "BIND9_14": bind9_14,
+-                    "BIND9_16": bind9_16,
+-                    "BIND9_18": bind9_18
*** 41158 LINES SKIPPED ***