commit: d90012c04bed622a962d1869fa6348aefd22f188 Author: Ben Kohler <bkohler <AT> gentoo <DOT> org> AuthorDate: Fri Feb 20 16:39:47 2026 +0000 Commit: Ben Kohler <bkohler <AT> gentoo <DOT> org> CommitDate: Fri Feb 20 17:14:40 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d90012c0
net-fs/samba: drop 4.20.8-r1 Signed-off-by: Ben Kohler <bkohler <AT> gentoo.org> net-fs/samba/Manifest | 1 - .../samba/files/samba-4.20.8-CVE-2025-0620.patch | 532 --------------------- net-fs/samba/samba-4.20.8-r1.ebuild | 385 --------------- 3 files changed, 918 deletions(-) diff --git a/net-fs/samba/Manifest b/net-fs/samba/Manifest index 6fa36e12482b..c0deb8711d57 100644 --- a/net-fs/samba/Manifest +++ b/net-fs/samba/Manifest @@ -1,4 +1,3 @@ -DIST samba-4.20.8.tar.gz 42531989 BLAKE2B 4c8d6d4fe40c0640667089179af5a8a49e6117fcd46b735ac59ffad0334e7fddffb99d2204c30d272a1902b8bf22bc9dc10a7b58762642977f0aec25acb91a57 SHA512 1dc598cb3aa830d35985e5840f1956d48b93eef02805248ececd0eb472b514311a9f6e69798bb5f5735a845b6e1c8de84b4ecaff6dea7a61324202d6fb0b3eeb DIST samba-4.22.5.tar.gz 42876122 BLAKE2B c6ee4c98c4aced9faa0b5f90c61a3ea9473fc8c90e7c3ceb470aba9354fb4bb21cdd16a7d19bb6b0faee4454259e02546b4bb5093e8e8fe64a67b5635fc1152b SHA512 ee183e664768076f814c252afef0cd2225961d173174e8f4703d8cf59fe2abc2d1a089e293905849201ab2af75e27d8666360072a85bcce2b0dc735324d6b02e DIST samba-4.22.8.tar.gz 42868679 BLAKE2B 24c285d0b41a37c03338332d85493300641b89dd8e159873bb97b858c24d00ce56c756557c54b3a25e701dfc286f55fd6ca9d0ba97a50083147c00d946d80582 SHA512 35f7aa28c24647250c1d1a8df8bbaab16422fd6372d4f90e3d2682b801911d9c833e72ac71b61e96166dd2b86b16dbeddacfd273f4846a56196ce022cd58055e DIST samba-4.23.5.tar.gz 43298892 BLAKE2B cab8a569da87d32b0268ea2111327450b64fa863507a286d46e200c21c947c477807f181651fa32bf81b799f1ae7554f417300abc8442fbe274208becb7432c9 SHA512 5bf5733dddde9dbd8f5680b53fb927a6802572d1f4758d1d58e00e58fdadc19bec1ef2b195bcdc065c7bed05c3d4aade5ffe9af9227051cf9ea91a9428a3693c diff --git a/net-fs/samba/files/samba-4.20.8-CVE-2025-0620.patch b/net-fs/samba/files/samba-4.20.8-CVE-2025-0620.patch deleted file mode 100644 index 6b15a2258411..000000000000 --- a/net-fs/samba/files/samba-4.20.8-CVE-2025-0620.patch +++ /dev/null @@ -1,532 +0,0 @@ -From 9fd05848d4a59db3977ae74f1a7a89f63f22b9ca Mon Sep 17 00:00:00 2001 -From: Stefan Metzmacher <[email protected]> -Date: Fri, 11 Oct 2024 13:32:22 +0000 -Subject: [PATCH 1/3] s3:libsmb: let discover_dc_netbios() return - DOMAIN_CONTROLLER_NOT_FOUND - -We may get NT_STATUS_NOT_FOUND when the name can't be resolved -and NT_STATUS_INVALID_ADDRESS if the system doesn't have ipv4 -addresses... - -Signed-off-by: Stefan Metzmacher <[email protected]> -Reviewed-by: Andreas Schneider <[email protected]> -(cherry picked from commit e47ce1d10b13d8ef165c70984e6e490f4c2a64c2) ---- - source3/libsmb/dsgetdcname.c | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) - -diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c -index 654893c172c..00e1fac6b93 100644 ---- a/source3/libsmb/dsgetdcname.c -+++ b/source3/libsmb/dsgetdcname.c -@@ -483,7 +483,19 @@ static NTSTATUS discover_dc_netbios(TALLOC_CTX *mem_ctx, - &count, - resolve_order); - if (!NT_STATUS_IS_OK(status)) { -- DEBUG(10,("discover_dc_netbios: failed to find DC\n")); -+ NTSTATUS raw_status = status; -+ -+ if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) { -+ status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; -+ } -+ if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_ADDRESS)) { -+ status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND; -+ } -+ -+ DBG_DEBUG("failed to find DC for %s: %s => %s\n", -+ domain_name, -+ nt_errstr(raw_status), -+ nt_errstr(status)); - return status; - } - --- -2.47.2 - - -From 4108b021383ccad766a571c93bd6d5fafc4e7b80 Mon Sep 17 00:00:00 2001 -From: Stefan Metzmacher <[email protected]> -Date: Fri, 9 May 2025 09:38:41 +0200 -Subject: [PATCH 2/3] s3:winbindd: avoid using any netlogon call to get a dc - name - -BUG: https://bugzilla.samba.org/show_bug.cgi?id=15876 - -Signed-off-by: Stefan Metzmacher <[email protected]> -Reviewed-by: Guenther Deschner <[email protected]> -Reviewed-by: Andreas Schneider <[email protected]> -Reviewed-by: Ralph Boehme <[email protected]> -(backported from commit f86a4bf6848ade2db7229d182576db3320c3ece7) ---- - source3/winbindd/winbindd_cm.c | 145 --------------------------- - source3/winbindd/winbindd_dual_srv.c | 105 +------------------ - 2 files changed, 5 insertions(+), 245 deletions(-) - -diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c -index 1685edbabaa..28ebc15ddf9 100644 ---- a/source3/winbindd/winbindd_cm.c -+++ b/source3/winbindd/winbindd_cm.c -@@ -475,135 +475,6 @@ static bool cm_is_ipc_credentials(struct cli_credentials *creds) - return ret; - } - --static bool get_dc_name_via_netlogon(struct winbindd_domain *domain, -- fstring dcname, -- struct sockaddr_storage *dc_ss, -- uint32_t request_flags) --{ -- struct winbindd_domain *our_domain = NULL; -- struct rpc_pipe_client *netlogon_pipe = NULL; -- NTSTATUS result; -- WERROR werr; -- TALLOC_CTX *mem_ctx; -- unsigned int orig_timeout; -- const char *tmp = NULL; -- const char *p; -- struct dcerpc_binding_handle *b; -- -- /* Hmmmm. We can only open one connection to the NETLOGON pipe at the -- * moment.... */ -- -- if (IS_DC) { -- return False; -- } -- -- if (domain->primary) { -- return False; -- } -- -- our_domain = find_our_domain(); -- -- if ((mem_ctx = talloc_init("get_dc_name_via_netlogon")) == NULL) { -- return False; -- } -- -- result = cm_connect_netlogon(our_domain, &netlogon_pipe); -- if (!NT_STATUS_IS_OK(result)) { -- talloc_destroy(mem_ctx); -- return False; -- } -- -- b = netlogon_pipe->binding_handle; -- -- /* This call can take a long time - allow the server to time out. -- 35 seconds should do it. */ -- -- orig_timeout = rpccli_set_timeout(netlogon_pipe, 35000); -- -- if (our_domain->active_directory) { -- struct netr_DsRGetDCNameInfo *domain_info = NULL; -- -- /* -- * TODO request flags are not respected in the server -- * (and in some cases, like REQUIRE_PDC, causes an error) -- */ -- result = dcerpc_netr_DsRGetDCName(b, -- mem_ctx, -- our_domain->dcname, -- domain->name, -- NULL, -- NULL, -- request_flags|DS_RETURN_DNS_NAME, -- &domain_info, -- &werr); -- if (NT_STATUS_IS_OK(result) && W_ERROR_IS_OK(werr)) { -- tmp = talloc_strdup( -- mem_ctx, domain_info->dc_unc); -- if (tmp == NULL) { -- DEBUG(0, ("talloc_strdup failed\n")); -- talloc_destroy(mem_ctx); -- return false; -- } -- if (domain->alt_name == NULL) { -- domain->alt_name = talloc_strdup(domain, -- domain_info->domain_name); -- if (domain->alt_name == NULL) { -- DEBUG(0, ("talloc_strdup failed\n")); -- talloc_destroy(mem_ctx); -- return false; -- } -- } -- if (domain->forest_name == NULL) { -- domain->forest_name = talloc_strdup(domain, -- domain_info->forest_name); -- if (domain->forest_name == NULL) { -- DEBUG(0, ("talloc_strdup failed\n")); -- talloc_destroy(mem_ctx); -- return false; -- } -- } -- } -- } else { -- result = dcerpc_netr_GetAnyDCName(b, mem_ctx, -- our_domain->dcname, -- domain->name, -- &tmp, -- &werr); -- } -- -- /* And restore our original timeout. */ -- rpccli_set_timeout(netlogon_pipe, orig_timeout); -- -- if (!NT_STATUS_IS_OK(result)) { -- DEBUG(10,("dcerpc_netr_GetAnyDCName failed: %s\n", -- nt_errstr(result))); -- talloc_destroy(mem_ctx); -- return false; -- } -- -- if (!W_ERROR_IS_OK(werr)) { -- DEBUG(10,("dcerpc_netr_GetAnyDCName failed: %s\n", -- win_errstr(werr))); -- talloc_destroy(mem_ctx); -- return false; -- } -- -- /* dcerpc_netr_GetAnyDCName gives us a name with \\ */ -- p = strip_hostname(tmp); -- -- fstrcpy(dcname, p); -- -- talloc_destroy(mem_ctx); -- -- DEBUG(10,("dcerpc_netr_GetAnyDCName returned %s\n", dcname)); -- -- if (!resolve_name(dcname, dc_ss, 0x20, true)) { -- return False; -- } -- -- return True; --} -- - /** - * Helper function to assemble trust password and account name - */ -@@ -1283,24 +1154,8 @@ static bool get_dcs(TALLOC_CTX *mem_ctx, struct winbindd_domain *domain, - struct samba_sockaddr *sa_list = NULL; - size_t salist_size = 0; - size_t i; -- bool is_our_domain; - enum security_types sec = (enum security_types)lp_security(); - -- is_our_domain = strequal(domain->name, lp_workgroup()); -- -- /* If not our domain, get the preferred DC, by asking our primary DC */ -- if ( !is_our_domain -- && get_dc_name_via_netlogon(domain, dcname, &ss, request_flags) -- && add_one_dc_unique(mem_ctx, domain->name, dcname, &ss, dcs, -- num_dcs) ) -- { -- char addr[INET6_ADDRSTRLEN]; -- print_sockaddr(addr, sizeof(addr), &ss); -- DEBUG(10, ("Retrieved DC %s at %s via netlogon\n", -- dcname, addr)); -- return True; -- } -- - if ((sec == SEC_ADS) && (domain->alt_name != NULL)) { - char *sitename = NULL; - -diff --git a/source3/winbindd/winbindd_dual_srv.c b/source3/winbindd/winbindd_dual_srv.c -index bbdaf6e5807..0d9d88733da 100644 ---- a/source3/winbindd/winbindd_dual_srv.c -+++ b/source3/winbindd/winbindd_dual_srv.c -@@ -662,106 +662,11 @@ NTSTATUS _wbint_QueryUserRidList(struct pipes_struct *p, - - NTSTATUS _wbint_DsGetDcName(struct pipes_struct *p, struct wbint_DsGetDcName *r) - { -- struct winbindd_domain *domain = wb_child_domain(); -- struct rpc_pipe_client *netlogon_pipe; -- struct netr_DsRGetDCNameInfo *dc_info; -- NTSTATUS status; -- WERROR werr; -- unsigned int orig_timeout; -- struct dcerpc_binding_handle *b; -- bool retry = false; -- bool try_dsrgetdcname = false; -- -- if (domain == NULL) { -- return dsgetdcname(p->mem_ctx, global_messaging_context(), -- r->in.domain_name, r->in.domain_guid, -- r->in.site_name ? r->in.site_name : "", -- r->in.flags, -- r->out.dc_info); -- } -- -- if (domain->active_directory) { -- try_dsrgetdcname = true; -- } -- --reconnect: -- status = cm_connect_netlogon(domain, &netlogon_pipe); -- -- reset_cm_connection_on_error(domain, NULL, status); -- if (!NT_STATUS_IS_OK(status)) { -- DEBUG(10, ("Can't contact the NETLOGON pipe\n")); -- return status; -- } -- -- b = netlogon_pipe->binding_handle; -- -- /* This call can take a long time - allow the server to time out. -- 35 seconds should do it. */ -- -- orig_timeout = rpccli_set_timeout(netlogon_pipe, 35000); -- -- if (try_dsrgetdcname) { -- status = dcerpc_netr_DsRGetDCName(b, -- p->mem_ctx, domain->dcname, -- r->in.domain_name, NULL, r->in.domain_guid, -- r->in.flags, r->out.dc_info, &werr); -- if (NT_STATUS_IS_OK(status) && W_ERROR_IS_OK(werr)) { -- goto done; -- } -- if (!retry && -- reset_cm_connection_on_error(domain, NULL, status)) -- { -- retry = true; -- goto reconnect; -- } -- try_dsrgetdcname = false; -- retry = false; -- } -- -- /* -- * Fallback to less capable methods -- */ -- -- dc_info = talloc_zero(r->out.dc_info, struct netr_DsRGetDCNameInfo); -- if (dc_info == NULL) { -- status = NT_STATUS_NO_MEMORY; -- goto done; -- } -- -- if (r->in.flags & DS_PDC_REQUIRED) { -- status = dcerpc_netr_GetDcName(b, -- p->mem_ctx, domain->dcname, -- r->in.domain_name, &dc_info->dc_unc, &werr); -- } else { -- status = dcerpc_netr_GetAnyDCName(b, -- p->mem_ctx, domain->dcname, -- r->in.domain_name, &dc_info->dc_unc, &werr); -- } -- -- if (!retry && reset_cm_connection_on_error(domain, b, status)) { -- retry = true; -- goto reconnect; -- } -- if (!NT_STATUS_IS_OK(status)) { -- DEBUG(10, ("dcerpc_netr_Get[Any]DCName failed: %s\n", -- nt_errstr(status))); -- goto done; -- } -- if (!W_ERROR_IS_OK(werr)) { -- DEBUG(10, ("dcerpc_netr_Get[Any]DCName failed: %s\n", -- win_errstr(werr))); -- status = werror_to_ntstatus(werr); -- goto done; -- } -- -- *r->out.dc_info = dc_info; -- status = NT_STATUS_OK; -- --done: -- /* And restore our original timeout. */ -- rpccli_set_timeout(netlogon_pipe, orig_timeout); -- -- return status; -+ return dsgetdcname(p->mem_ctx, global_messaging_context(), -+ r->in.domain_name, r->in.domain_guid, -+ r->in.site_name ? r->in.site_name : "", -+ r->in.flags, -+ r->out.dc_info); - } - - NTSTATUS _wbint_LookupRids(struct pipes_struct *p, struct wbint_LookupRids *r) --- -2.47.2 - - -From 41191db034ea7825acd01a0166cd2a8b425878ed Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <[email protected]> -Date: Wed, 2 Jul 2025 21:59:48 +0200 -Subject: [PATCH 3/3] s3-winbindd: Fix internal winbind dsgetdcname calls - w.r.t. domain name -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -when winbind calls to dsgetdcname internally, make sure to -prefer the DNS domain name if we have it. Makes DNS lookups much more -likely to succeed. - -BUG: https://bugzilla.samba.org/show_bug.cgi?id=15876 - -Guenther - -Signed-off-by: Guenther Deschner <[email protected]> -Reviewed-by: Andreas Schneider <[email protected]> -Reviewed-by: Ralph Boehme <[email protected]> - -Autobuild-User(master): Ralph Böhme <[email protected]> -Autobuild-Date(master): Mon Jul 7 10:44:37 UTC 2025 on atb-devel-224 - -(cherry picked from commit 2560c9b3224816ffd371a62103f65b3aca301ad5) ---- - source3/winbindd/wb_queryuser.c | 17 +++++++++++++---- - source3/winbindd/wb_sids2xids.c | 17 +++++++++++++---- - source3/winbindd/wb_xids2sids.c | 12 +++++++++--- - source3/winbindd/winbindd_dual.c | 6 +++++- - source3/winbindd/winbindd_proto.h | 1 + - source3/winbindd/winbindd_util.c | 19 +++++++++++++++++++ - 6 files changed, 60 insertions(+), 12 deletions(-) - -diff --git a/source3/winbindd/wb_queryuser.c b/source3/winbindd/wb_queryuser.c -index c2758f1b76a..db8e946ba71 100644 ---- a/source3/winbindd/wb_queryuser.c -+++ b/source3/winbindd/wb_queryuser.c -@@ -289,10 +289,19 @@ static void wb_queryuser_done(struct tevent_req *subreq) - - if (NT_STATUS_EQUAL(result, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND) && - !state->tried_dclookup) { -- D_DEBUG("GetNssInfo got DOMAIN_CONTROLLER_NOT_FOUND, calling wb_dsgetdcname_send()\n"); -- subreq = wb_dsgetdcname_send( -- state, state->ev, state->info->domain_name, NULL, NULL, -- DS_RETURN_DNS_NAME); -+ const char *domain_name = find_dns_domain_name( -+ state->info->domain_name); -+ -+ D_DEBUG("GetNssInfo got DOMAIN_CONTROLLER_NOT_FOUND, calling " -+ "wb_dsgetdcname_send(%s)\n", -+ domain_name); -+ -+ subreq = wb_dsgetdcname_send(state, -+ state->ev, -+ domain_name, -+ NULL, -+ NULL, -+ DS_RETURN_DNS_NAME); - if (tevent_req_nomem(subreq, req)) { - return; - } -diff --git a/source3/winbindd/wb_sids2xids.c b/source3/winbindd/wb_sids2xids.c -index f0f6c23fc20..03e5e7e0258 100644 ---- a/source3/winbindd/wb_sids2xids.c -+++ b/source3/winbindd/wb_sids2xids.c -@@ -612,13 +612,22 @@ static void wb_sids2xids_done(struct tevent_req *subreq) - !state->tried_dclookup) { - - struct lsa_DomainInfo *d; -+ const char *domain_name = NULL; - -- D_DEBUG("Domain controller not found. Calling wb_dsgetdcname_send() to get it.\n"); - d = &state->idmap_doms.domains[state->dom_index]; - -- subreq = wb_dsgetdcname_send( -- state, state->ev, d->name.string, NULL, NULL, -- DS_RETURN_DNS_NAME); -+ domain_name = find_dns_domain_name(d->name.string); -+ -+ D_DEBUG("Domain controller not found. Calling " -+ "wb_dsgetdcname_send(%s) to get it.\n", -+ domain_name); -+ -+ subreq = wb_dsgetdcname_send(state, -+ state->ev, -+ domain_name, -+ NULL, -+ NULL, -+ DS_RETURN_DNS_NAME); - if (tevent_req_nomem(subreq, req)) { - return; - } -diff --git a/source3/winbindd/wb_xids2sids.c b/source3/winbindd/wb_xids2sids.c -index 86bd7f9deab..6fcf524d94f 100644 ---- a/source3/winbindd/wb_xids2sids.c -+++ b/source3/winbindd/wb_xids2sids.c -@@ -143,9 +143,15 @@ static void wb_xids2sids_dom_done(struct tevent_req *subreq) - if (NT_STATUS_EQUAL(result, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND) && - !state->tried_dclookup) { - -- subreq = wb_dsgetdcname_send( -- state, state->ev, state->dom_map->name, NULL, NULL, -- DS_RETURN_DNS_NAME); -+ const char *domain_name = find_dns_domain_name( -+ state->dom_map->name); -+ -+ subreq = wb_dsgetdcname_send(state, -+ state->ev, -+ domain_name, -+ NULL, -+ NULL, -+ DS_RETURN_DNS_NAME); - if (tevent_req_nomem(subreq, req)) { - return; - } -diff --git a/source3/winbindd/winbindd_dual.c b/source3/winbindd/winbindd_dual.c -index b8e1ceddecc..ee80a4725fa 100644 ---- a/source3/winbindd/winbindd_dual.c -+++ b/source3/winbindd/winbindd_dual.c -@@ -532,6 +532,7 @@ static void wb_domain_request_trigger(struct tevent_req *req, - struct wb_domain_request_state *state = tevent_req_data( - req, struct wb_domain_request_state); - struct winbindd_domain *domain = state->domain; -+ const char *domain_name = NULL; - struct tevent_req *subreq = NULL; - size_t shortest_queue_length; - -@@ -604,8 +605,11 @@ static void wb_domain_request_trigger(struct tevent_req *req, - * which is indicated by DS_RETURN_DNS_NAME. - * For NT4 domains we still get the netbios name. - */ -+ -+ domain_name = find_dns_domain_name(state->domain->name); -+ - subreq = wb_dsgetdcname_send(state, state->ev, -- state->domain->name, -+ domain_name, - NULL, /* domain_guid */ - NULL, /* site_name */ - DS_RETURN_DNS_NAME); /* flags */ -diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h -index 4dee9b046cf..292b96ee5fa 100644 ---- a/source3/winbindd/winbindd_proto.h -+++ b/source3/winbindd/winbindd_proto.h -@@ -603,6 +603,7 @@ bool parse_sidlist(TALLOC_CTX *mem_ctx, const char *sidstr, - struct dom_sid **sids, uint32_t *num_sids); - bool parse_xidlist(TALLOC_CTX *mem_ctx, const char *xidstr, - struct unixid **pxids, uint32_t *pnum_xids); -+const char *find_dns_domain_name(const char *domain_name); - - /* The following definitions come from winbindd/winbindd_wins.c */ - -diff --git a/source3/winbindd/winbindd_util.c b/source3/winbindd/winbindd_util.c -index 7527a78b30e..5c832fc22b5 100644 ---- a/source3/winbindd/winbindd_util.c -+++ b/source3/winbindd/winbindd_util.c -@@ -2241,3 +2241,22 @@ fail: - TALLOC_FREE(xids); - return false; - } -+ -+/** -+ * Helper to extract the DNS Domain Name from a struct winbindd_domain -+ */ -+const char *find_dns_domain_name(const char *domain_name) -+{ -+ struct winbindd_domain *wbdom = NULL; -+ -+ wbdom = find_domain_from_name(domain_name); -+ if (wbdom == NULL) { -+ return domain_name; -+ } -+ -+ if (wbdom->active_directory && wbdom->alt_name != NULL) { -+ return wbdom->alt_name; -+ } -+ -+ return wbdom->name; -+} --- -2.47.2 - diff --git a/net-fs/samba/samba-4.20.8-r1.ebuild b/net-fs/samba/samba-4.20.8-r1.ebuild deleted file mode 100644 index b0c63cceefd3..000000000000 --- a/net-fs/samba/samba-4.20.8-r1.ebuild +++ /dev/null @@ -1,385 +0,0 @@ -# Copyright 1999-2025 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -PYTHON_COMPAT=( python3_{11..13} ) -PYTHON_REQ_USE="threads(+),xml(+)" -inherit python-single-r1 flag-o-matic waf-utils multilib-minimal linux-info systemd pam tmpfiles - -DESCRIPTION="Samba Suite Version 4" -HOMEPAGE="https://samba.org/" - -MY_PV="${PV/_rc/rc}" -MY_P="${PN}-${MY_PV}" -if [[ ${PV} == *_rc* ]]; then - SRC_URI="https://download.samba.org/pub/samba/rc/${MY_P}.tar.gz" -else - SRC_URI="https://download.samba.org/pub/samba/stable/${MY_P}.tar.gz" - KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86" -fi -S="${WORKDIR}/${MY_P}" - -LICENSE="GPL-3" -SLOT="0" -IUSE="acl addc ads ceph client cluster cups debug fam glusterfs gpg" -IUSE+=" iprint json ldap llvm-libunwind pam profiling-data python quota +regedit selinux" -IUSE+=" snapper spotlight syslog system-heimdal +system-mitkrb5 systemd test unwind winbind" -IUSE+=" zeroconf" - -REQUIRED_USE="${PYTHON_REQUIRED_USE} - addc? ( json python !system-mitkrb5 winbind ) - ads? ( acl ldap python winbind ) - cluster? ( ads ) - gpg? ( addc ) - spotlight? ( json ) - test? ( python ) - !ads? ( !addc ) - ?? ( system-heimdal system-mitkrb5 ) -" - -# the test suite is messed, it uses system-installed samba -# bits instead of what was built, tests things disabled via use -# flags, and generally just fails to work in a way ebuilds could -# rely on in its current state -RESTRICT="test" - -MULTILIB_WRAPPED_HEADERS=( - /usr/include/samba-4.0/policy.h - /usr/include/samba-4.0/dcerpc_server.h - /usr/include/samba-4.0/ctdb.h - /usr/include/samba-4.0/ctdb_client.h - /usr/include/samba-4.0/ctdb_protocol.h - /usr/include/samba-4.0/ctdb_private.h - /usr/include/samba-4.0/ctdb_typesafe_cb.h - /usr/include/samba-4.0/ctdb_version.h -) - -TALLOC_VERSION="2.4.2" -TDB_VERSION="1.4.10" -TEVENT_VERSION="0.16.1" - -COMMON_DEPEND=" - >=app-arch/libarchive-3.1.2:=[${MULTILIB_USEDEP}] - dev-lang/perl:= - dev-libs/icu:=[${MULTILIB_USEDEP}] - dev-libs/libbsd[${MULTILIB_USEDEP}] - dev-libs/libtasn1:=[${MULTILIB_USEDEP}] - dev-libs/popt[${MULTILIB_USEDEP}] - dev-perl/Parse-Yapp - >=net-libs/gnutls-3.4.7:=[${MULTILIB_USEDEP}] - >=sys-fs/e2fsprogs-1.46.4-r51[${MULTILIB_USEDEP}] - >=sys-libs/ldb-2.9.2:=[ldap(+)?,${MULTILIB_USEDEP}] - <sys-libs/ldb-2.10.0:=[ldap(+)?,${MULTILIB_USEDEP}] - sys-libs/libcap[${MULTILIB_USEDEP}] - sys-libs/liburing:=[${MULTILIB_USEDEP}] - sys-libs/ncurses:= - sys-libs/readline:= - >=sys-libs/talloc-${TALLOC_VERSION}[${MULTILIB_USEDEP}] - >=sys-libs/tdb-${TDB_VERSION}[${MULTILIB_USEDEP}] - >=sys-libs/tevent-${TEVENT_VERSION}[${MULTILIB_USEDEP}] - virtual/zlib:=[${MULTILIB_USEDEP}] - virtual/libcrypt:=[${MULTILIB_USEDEP}] - virtual/libiconv - $(python_gen_cond_dep ' - addc? ( - dev-python/dnspython:=[${PYTHON_USEDEP}] - dev-python/markdown[${PYTHON_USEDEP}] - ) - ads? ( - dev-python/dnspython:=[${PYTHON_USEDEP}] - net-dns/bind[gssapi] - ) - ') - acl? ( virtual/acl ) - ceph? ( sys-cluster/ceph ) - cluster? ( net-libs/rpcsvc-proto ) - cups? ( net-print/cups ) - debug? ( dev-util/lttng-ust ) - fam? ( virtual/fam ) - gpg? ( app-crypt/gpgme:= ) - json? ( dev-libs/jansson:= ) - ldap? ( net-nds/openldap:=[${MULTILIB_USEDEP}] ) - pam? ( sys-libs/pam ) - python? ( - sys-libs/ldb[python,${PYTHON_SINGLE_USEDEP}] - sys-libs/talloc[python,${PYTHON_SINGLE_USEDEP}] - sys-libs/tdb[python,${PYTHON_SINGLE_USEDEP}] - sys-libs/tevent[python,${PYTHON_SINGLE_USEDEP}] - ) - snapper? ( sys-apps/dbus ) - system-heimdal? ( >=app-crypt/heimdal-1.5[-ssl(-),${MULTILIB_USEDEP}] ) - system-mitkrb5? ( >=app-crypt/mit-krb5-1.19[${MULTILIB_USEDEP}] ) - !system-heimdal? ( !system-mitkrb5? ( sys-apps/keyutils[${MULTILIB_USEDEP}] ) ) - systemd? ( sys-apps/systemd:= ) - unwind? ( - llvm-libunwind? ( llvm-runtimes/libunwind:= ) - !llvm-libunwind? ( sys-libs/libunwind:= ) - ) - zeroconf? ( net-dns/avahi[dbus] ) -" -DEPEND="${COMMON_DEPEND} - dev-perl/JSON - net-libs/libtirpc[${MULTILIB_USEDEP}] - net-libs/rpcsvc-proto - spotlight? ( dev-libs/glib ) - test? ( - >=dev-util/cmocka-1.1.3[${MULTILIB_USEDEP}] - $(python_gen_cond_dep "dev-python/python-subunit[\${PYTHON_USEDEP},${MULTILIB_USEDEP}]" ) - !system-mitkrb5? ( - >=net-dns/resolv_wrapper-1.1.4 - >=net-libs/socket_wrapper-1.1.9 - >=sys-libs/nss_wrapper-1.1.3 - >=sys-libs/uid_wrapper-1.2.1 - ) - )" -RDEPEND="${COMMON_DEPEND} - client? ( net-fs/cifs-utils[ads?] ) - python? ( ${PYTHON_DEPS} ) - selinux? ( sec-policy/selinux-samba ) -" -BDEPEND="${PYTHON_DEPS} - app-text/docbook-xsl-stylesheets - dev-libs/libxslt - virtual/pkgconfig -" - -PATCHES=( - "${FILESDIR}"/${PN}-4.18.4-pam.patch - "${FILESDIR}"/ldb-2.5.2-skip-wav-tevent-check.patch - "${FILESDIR}"/${P}-dont-use-deprecated-readline-CPPFunction-cast.patch - "${FILESDIR}"/${P}-CVE-2025-0620.patch -) - -CONFDIR="${FILESDIR}/4.4" -WAF_BINARY="${S}/buildtools/bin/waf" -SHAREDMODS="" - -pkg_setup() { - # Package fails to build with distcc - export DISTCC_DISABLE=1 - export PYTHONHASHSEED=1 - - python-single-r1_pkg_setup - - SHAREDMODS="$(usev !snapper '!')vfs_snapper" - if use cluster ; then - SHAREDMODS+=",idmap_rid,idmap_tdb2,idmap_ad" - elif use ads ; then - SHAREDMODS+=",idmap_ad" - fi -} - -check_samba_dep_versions() { - actual_talloc_version=$(sed -En '/^VERSION =/{s/[^0-9.]//gp}' lib/talloc/wscript || die) - if [[ ${actual_talloc_version} != ${TALLOC_VERSION} ]] ; then - eerror "Source talloc version: ${TALLOC_VERSION}" - eerror "Ebuild talloc version: ${actual_talloc_version}" - die "Ebuild needs to fix TALLOC_VERSION!" - fi - - actual_tdb_version=$(sed -En '/^VERSION =/{s/[^0-9.]//gp}' lib/tdb/wscript || die) - if [[ ${actual_tdb_version} != ${TDB_VERSION} ]] ; then - eerror "Source tdb version: ${TDB_VERSION}" - eerror "Ebuild tdb version: ${actual_tdb_version}" - die "Ebuild needs to fix TDB_VERSION!" - fi - - actual_tevent_version=$(sed -En '/^VERSION =/{s/[^0-9.]//gp}' lib/tevent/wscript || die) - if [[ ${actual_tevent_version} != ${TEVENT_VERSION} ]] ; then - eerror "Source tevent version: ${TEVENT_VERSION}" - eerror "Ebuild tevent version: ${actual_tevent_version}" - die "Ebuild needs to fix TEVENT_VERSION!" - fi -} - -src_prepare() { - default - - check_samba_dep_versions - - # Unbundle dnspython - sed -i -e '/"dns.resolver":/d' "${S}"/third_party/wscript || die - - # Unbundle iso8601 unless tests are enabled - if ! use test ; then - sed -i -e '/"iso8601":/d' "${S}"/third_party/wscript || die - fi - - # Ugly hackaround for bug #592502 - #cp /usr/include/tevent_internal.h "${S}"/lib/tevent/ || die - - # WAF - multilib_copy_sources -} - -multilib_src_configure() { - # When specifying libs for samba build you must append NONE to the end to - # stop it automatically including things - local bundled_libs="NONE" - if ! use system-heimdal && ! use system-mitkrb5 ; then - bundled_libs="heimbase,heimntlm,hdb,kdc,krb5,wind,gssapi,hcrypto,hx509,roken,asn1,com_err,NONE" - fi - - # We "use" bundled cmocka when we're not running tests as we're - # not using it anyway. Means we avoid making users install it for - # no reason. bug #802531 - if ! use test ; then - bundled_libs="cmocka,${bundled_libs}" - fi - - # bug #874633 - if use llvm-libunwind ; then - mkdir -p "${T}"/${ABI}/pkgconfig || die - - local -x PKG_CONFIG_PATH="${T}/${ABI}/pkgconfig:${PKG_CONFIG_PATH}" - - cat <<-EOF > "${T}"/${ABI}/pkgconfig/libunwind-generic.pc || die - exec_prefix=\${prefix} - libdir=/usr/$(get_libdir) - includedir=\${prefix}/include - - Name: libunwind-generic - Description: libunwind generic library - Version: 1.70 - Libs: -L\${libdir} -lunwind - Cflags: -I\${includedir} - EOF - fi - - local myconf=( - --enable-fhs - --sysconfdir="${EPREFIX}/etc" - --localstatedir="${EPREFIX}/var" - --with-modulesdir="${EPREFIX}/usr/$(get_libdir)/samba" - --with-piddir="${EPREFIX}/run/${PN}" - --bundled-libraries="${bundled_libs}" - --builtin-libraries=NONE - --disable-rpath - --disable-rpath-install - --nopyc - --nopyo - --without-winexe - $(multilib_native_use_with acl acl-support) - $(multilib_native_usex addc '' '--without-ad-dc') - $(multilib_native_use_with ads) - $(multilib_native_use_enable ceph cephfs) - $(multilib_native_use_with cluster cluster-support) - $(multilib_native_use_enable cups) - --without-dmapi - $(multilib_native_use_with fam) - $(multilib_native_use_enable glusterfs) - $(multilib_native_use_with gpg gpgme) - $(multilib_native_use_with json) - $(multilib_native_use_enable iprint) - $(multilib_native_use_with pam) - $(multilib_native_usex pam "--with-pammodulesdir=${EPREFIX}/$(get_libdir)/security" '') - $(multilib_native_use_with quota quotas) - $(multilib_native_use_with regedit) - $(multilib_native_use_enable spotlight) - $(multilib_native_use_with syslog) - $(multilib_native_use_with systemd) - --systemd-install-services - --with-systemddir="$(systemd_get_systemunitdir)" - $(multilib_native_use_with unwind libunwind) - $(multilib_native_use_with winbind) - $(multilib_native_usex python '' '--disable-python') - $(multilib_native_use_enable zeroconf avahi) - $(multilib_native_usex test '--enable-selftest' '') - $(usev system-mitkrb5 "--with-system-mitkrb5 ${ESYSROOT}/usr $(multilib_native_usex addc --with-experimental-mit-ad-dc '')") - $(use_with debug lttng) - $(use_with ldap) - $(use_with profiling-data) - # bug #683148 - --jobs 1 - ) - - if multilib_is_native_abi ; then - myconf+=( --with-shared-modules=${SHAREDMODS} ) - else - myconf+=( --with-shared-modules=DEFAULT,!vfs_snapper ) - fi - - append-ldflags $(test-flags-CCLD -Wl,--undefined-version) # bug 914898 - - append-cppflags "-I${ESYSROOT}/usr/include/et" - - waf-utils_src_configure ${myconf[@]} -} - -multilib_src_compile() { - waf-utils_src_compile -} - -multilib_src_test() { - if multilib_is_native_abi ; then - "${WAF_BINARY}" test || die "Test failed" - fi -} - -multilib_src_install() { - waf-utils_src_install - - # Make all .so files executable - find "${ED}" -type f -name "*.so" -exec chmod +x {} + || die - # smbspool_krb5_wrapper must only be accessible to root, bug #880739 - find "${ED}" -type f -name "smbspool_krb5_wrapper" -exec chmod go-rwx {} + || die - - # Remove empty runtime dirs created by build system (bug #892341) - find "${ED}"/{run,var} -type d -empty -delete || die - - if multilib_is_native_abi ; then - # Install ldap schema for server (bug #491002) - if use ldap ; then - insinto /etc/openldap/schema - doins examples/LDAP/samba.schema - fi - - # Create symlink for cups (bug #552310) - if use cups ; then - dosym ../../../bin/smbspool \ - /usr/libexec/cups/backend/smb - fi - - # Install example config file - insinto /etc/samba - doins examples/smb.conf.default - - # Fix paths in example file (bug #603964) - sed \ - -e '/log file =/s@/usr/local/samba/var/@/var/log/samba/@' \ - -e '/include =/s@/usr/local/samba/lib/@/etc/samba/@' \ - -e '/path =/s@/usr/local/samba/lib/@/var/lib/samba/@' \ - -e '/path =/s@/usr/local/samba/@/var/lib/samba/@' \ - -e '/path =/s@/usr/spool/samba@/var/spool/samba@' \ - -i "${ED}"/etc/samba/smb.conf.default || die - - # Install init script and conf.d file - newinitd "${CONFDIR}/samba4.initd-r1" samba - newconfd "${CONFDIR}/samba4.confd" samba - - dotmpfiles "${FILESDIR}"/samba.conf - if ! use addc ; then - rm "${D}/$(systemd_get_systemunitdir)/samba.service" \ - || die - fi - - # Preserve functionality for old gentoo-specific unit names - dosym nmb.service "$(systemd_get_systemunitdir)/nmbd.service" - dosym smb.service "$(systemd_get_systemunitdir)/smbd.service" - dosym winbind.service "$(systemd_get_systemunitdir)/winbindd.service" - - use python && python_optimize - fi - - if use pam && use winbind ; then - newpamd "${CONFDIR}/system-auth-winbind.pam" system-auth-winbind - # bugs #376853 and #590374 - insinto /etc/security - doins examples/pam_winbind/pam_winbind.conf - fi -} - -pkg_postinst() { - tmpfiles_process samba.conf -}
