The branch, v4-16-stable has been updated via 63f92a37f02 VERSION: Disable GIT_SNAPSHOT for the 4.16.9 release. via f50ab3415cb WHATSNEW: Add release notes for Samba 4.16.9. via 2b1d412f552 mdssvc: fix kMDScopeArray parsing via eddd14cedbf lib/replace - add extra check to bsd_attr_list via 11896049957 s3: smbd: Always use metadata_fsp() when processing fsctls. via c6733cbe872 s3: smbd: Add test to show smbd crashes when doing an FSCTL on a named stream handle. via 44ec3e4f292 s3:auth: call wbcFreeMemory(info) in auth3_generate_session_info_pac() via 02e56ac1bb5 CVE-2022-38023 s3:rpc_server/netlogon: Avoid unnecessary loadparm_context allocations via 3e7bbe047fe CVE-2022-38023 docs-xml/smbdotconf: The "server schannel require seal[:COMPUTERACCOUNT]" options are also honoured by s3 netlogon server. via 55900577757 CVE-2022-38023 s3:rpc_server/netlogon: Check for global "server schannel require seal" via 7f4f9a3277b CVE-2022-38023 s3:rpc_server/netlogon: make sure all _netr_LogonSamLogon*() calls go through dcesrv_netr_check_schannel() via 080ff2cd284 CVE-2022-38023 s3:rpc_server/netlogon: Use dcesrv_netr_creds_server_step_check() via 0d27e4b4598 CVE-2022-38023 s4:rpc_server/netlogon: Move schannel and credentials check functions to librpc via 538dcc38faa CVE-2022-38023 s4:rpc_server:wscript: Reformat following pycodestyle via 71b22920a6c CVE-2022-38023 selftest:Samba3: avoid global 'server schannel = auto' via cc787d0becb CVE-2022-38023 s3:rpc_server/netlogon: 'server schannel != yes' warning to dcesrv_interface_netlogon_bind via 7b49569afcb s4: libcli: Ignore errors when getting A records after fetching AAAA records. via 627a9886da8 s3: smbd: In synthetic_pathref() change DBG_ERR -> DBG_NOTICE to avoid spamming the logs. via e5e39bbc77f s3: smbd: Cause SMB2_OP_FLUSH to go synchronous in a compound anywhere but the last operation in the list. via bfadcc893e6 s3: smbd: Add utility function smbd_smb2_is_last_in_compound(). via 9b357c947fd s4: torture: Add an async SMB2_OP_FLUSH + SMB2_OP_FLUSH test to smb2.compound_async. via c9ed55b39ef s4: torture: Add an async SMB2_OP_FLUSH + SMB2_OP_CLOSE test to smb2.compound_async. via d7bcdfa6b88 nsswitch:libwbclient - fix leak in wbcCtxPingDc2 via 113536e0d73 s3: libsmbclient: Fix smbc_getxattr() to return 0 on success. via 628a1c33827 s4: torture: Show return value for smbc_getxattr() is incorrect (returns >0 for success, should return zero). via a1fa2c18e56 s4:lib/messaging: fix interaction between imessaging_context_destructor and irpc_destructor via 6434e2df11e s3:rpc_server/srvsvc: make sure we (re-)load all shares as root. via ccb8abb0e72 selftest: add samba3.blackbox.registry_share via cf2643e0209 testprogs: Add testit_grep_count() helper via 6c5bc77653f testprogs: Reformat subunit.sh via 78848f21a3e s3:client: Fix a use-after-free issue in smbclient via eeeb1a476f6 s3:script: Improve test_chdir_cache.sh via 4f9430f1260 s3:tests: Reformat test_chdir_cache.sh via 810ae90aa6c s3:params:lp_do_section - protect against NULL deref via b9d02e857b2 rpc_server:srvsvc - retrieve share ACL via root context via 104fcaa89f8 ctdb: Fix a use-after-free in run_proc via cb4cbfc83fc VERSION: Bump version up to Samba 4.16.9... from 6cc6e233b5c VERSION: Disable GIT_SNAPSHOT for the 4.16.8 release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-16-stable - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: VERSION | 2 +- WHATSNEW.txt | 79 ++- ctdb/common/run_proc.c | 5 +- .../security/serverschannelrequireseal.xml | 5 +- lib/replace/xattr.c | 12 + librpc/rpc/server/netlogon/schannel_util.c | 570 +++++++++++++++++++++ librpc/rpc/server/netlogon/schannel_util.h | 54 ++ librpc/wscript_build | 12 + nsswitch/libwbclient/wbc_pam.c | 1 + selftest/knownfail | 1 + selftest/target/Samba3.pm | 60 ++- source3/auth/auth_generic.c | 1 + source3/client/client.c | 5 +- source3/libsmb/libsmb_xattr.c | 6 +- source3/modules/vfs_default.c | 8 +- source3/param/loadparm.c | 2 +- source3/rpc_server/mdssvc/mdssvc.c | 6 + source3/rpc_server/netlogon/srv_netlog_nt.c | 318 ++++-------- source3/rpc_server/srvsvc/srv_srvsvc_nt.c | 45 +- source3/rpc_server/wscript_build | 2 +- source3/script/tests/test_chdir_cache.sh | 46 +- source3/script/tests/test_registry_share.sh | 39 ++ source3/selftest/tests.py | 9 + source3/smbd/files.c | 2 +- source3/smbd/globals.h | 1 + source3/smbd/smb2_flush.c | 14 + source3/smbd/smb2_server.c | 6 + source4/lib/messaging/messaging.c | 13 + source4/lib/messaging/messaging_internal.h | 3 + source4/libcli/resolve/dns_ex.c | 14 +- source4/rpc_server/netlogon/dcerpc_netlogon.c | 546 +------------------- source4/rpc_server/wscript_build | 292 ++++++----- source4/torture/libsmbclient/libsmbclient.c | 94 ++++ source4/torture/smb2/compound.c | 232 +++++++++ source4/torture/smb2/ioctl.c | 74 +++ source4/torture/smb2/smb2.c | 3 + testprogs/blackbox/subunit.sh | 144 ++++-- 37 files changed, 1745 insertions(+), 981 deletions(-) create mode 100644 librpc/rpc/server/netlogon/schannel_util.c create mode 100644 librpc/rpc/server/netlogon/schannel_util.h create mode 100755 source3/script/tests/test_registry_share.sh Changeset truncated at 500 lines: diff --git a/VERSION b/VERSION index f78e4ac5ed1..5df61b2737a 100644 --- a/VERSION +++ b/VERSION @@ -25,7 +25,7 @@ ######################################################## SAMBA_VERSION_MAJOR=4 SAMBA_VERSION_MINOR=16 -SAMBA_VERSION_RELEASE=8 +SAMBA_VERSION_RELEASE=9 ######################################################## # If a official release has a serious bug # diff --git a/WHATSNEW.txt b/WHATSNEW.txt index c2aeab4afbe..b5b57e856d9 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,3 +1,79 @@ + ============================== + Release Notes for Samba 4.16.9 + February 16, 2023 + ============================== + + +This is the latest stable release of the Samba 4.16 release series. + + +Changes since 4.16.8 +-------------------- + +o Jeremy Allison <j...@samba.org> + * BUG 14808: smbc_getxattr() return value is incorrect. + * BUG 15172: Compound SMB2 FLUSH+CLOSE requests from MacOSX are not handled + correctly. + * BUG 15210: synthetic_pathref AFP_AfpInfo failed errors. + * BUG 15226: samba-tool gpo listall fails IPv6 only - finddcs() fails to find + DC when there is only an AAAA record for the DC in DNS. + * BUG 15236: smbd crashes if an FSCTL request is done on a stream handle. + +o Ralph Boehme <s...@samba.org> + * BUG 15299: Spotlight doesn't work with latest macOS Ventura. + +o Samuel Cabrero <scabr...@suse.de> + * BUG 15240: CVE-2022-38023 [SECURITY] Samba should refuse RC4 (aka md5) + based SChannel on NETLOGON. + +o Volker Lendecke <v...@samba.org> + * BUG 15243: %U for include directive doesn't work for share listing + (netshareenum). + * BUG 15266: Shares missing from netshareenum response in samba 4.17.4. + * BUG 15269: ctdb: use-after-free in run_proc. + +o Stefan Metzmacher <me...@samba.org> + * BUG 15243: %U for include directive doesn't work for share listing + (netshareenum). + * BUG 15266: Shares missing from netshareenum response in samba 4.17.4. + * BUG 15280: irpc_destructor may crash during shutdown. + * BUG 15286: auth3_generate_session_info_pac leaks wbcAuthUserInfo. + +o Andreas Schneider <a...@samba.org> + * BUG 15268: smbclient segfaults with use after free on an optimized build. + +o Andrew Walker <awal...@ixsystems.com> + * BUG 15164: Leak in wbcCtxPingDc2. + * BUG 15265: Access based share enum does not work in Samba 4.16+. + * BUG 15267: Crash during share enumeration. + * BUG 15271: rep_listxattr on FreeBSD does not properly check for reads off + end of returned buffer. + + +####################################### +Reporting bugs & Development Discussion +####################################### + +Please discuss this release on the samba-technical mailing list or by +joining the #samba-technical:matrix.org matrix room, or +#samba-technical IRC channel on irc.libera.chat. + + +If you do report problems then please try to send high quality +feedback. If you don't provide vital information to help us track down +the problem then you will probably be ignored. All bug reports should +be filed under the Samba 4.1 and newer product in the project's Bugzilla +database (https://bugzilla.samba.org/). + + +====================================================================== +== Our Code, Our Bugs, Our Responsibility. +== The Samba Team +====================================================================== + + +Release notes for older releases follow: +---------------------------------------- ============================== Release Notes for Samba 4.16.8 December 15, 2022 @@ -145,8 +221,7 @@ database (https://bugzilla.samba.org/). ====================================================================== -Release notes for older releases follow: ----------------------------------------- +---------------------------------------------------------------------- ============================== Release Notes for Samba 4.16.7 November 15, 2022 diff --git a/ctdb/common/run_proc.c b/ctdb/common/run_proc.c index d55af6c3a1e..84bc343ba1f 100644 --- a/ctdb/common/run_proc.c +++ b/ctdb/common/run_proc.c @@ -408,10 +408,10 @@ struct tevent_req *run_proc_send(TALLOC_CTX *mem_ctx, static int run_proc_state_destructor(struct run_proc_state *state) { /* Do not get rid of the child process if timeout has occurred */ - if (state->proc->req != NULL) { + if ((state->proc != NULL) && (state->proc->req != NULL)) { state->proc->req = NULL; DLIST_REMOVE(state->run_ctx->plist, state->proc); - talloc_free(state->proc); + TALLOC_FREE(state->proc); } return 0; @@ -439,6 +439,7 @@ static void run_proc_kill(struct tevent_req *req) req, struct run_proc_state); state->proc->req = NULL; + state->proc = NULL; state->result.sig = SIGKILL; diff --git a/docs-xml/smbdotconf/security/serverschannelrequireseal.xml b/docs-xml/smbdotconf/security/serverschannelrequireseal.xml index d4620d1252d..0bec67d2519 100644 --- a/docs-xml/smbdotconf/security/serverschannelrequireseal.xml +++ b/docs-xml/smbdotconf/security/serverschannelrequireseal.xml @@ -12,9 +12,8 @@ </para> <para> - This option controls whether the netlogon server (currently - only in 'active directory domain controller' mode), will - reject the usage of netlogon secure channel without privacy/enryption. + This option controls whether the netlogon server, will reject the usage + of netlogon secure channel without privacy/enryption. </para> <para> diff --git a/lib/replace/xattr.c b/lib/replace/xattr.c index 01215f1a9f3..8b93e675403 100644 --- a/lib/replace/xattr.c +++ b/lib/replace/xattr.c @@ -266,6 +266,18 @@ static ssize_t bsd_attr_list (int type, extattr_arg arg, char *list, size_t size for(i = 0; i < list_size; i += len + 1) { len = buf[i]; + + /* + * If for some reason we receive a truncated + * return from call to list xattrs the pascal + * string lengths will not be changed and + * therefore we must check that we're not + * reading garbage data or off end of array + */ + if (len + i >= list_size) { + errno = ERANGE; + return -1; + } strncpy(list, extattr[t].name, extattr[t].len + 1); list += extattr[t].len; strncpy(list, buf + i + 1, len); diff --git a/librpc/rpc/server/netlogon/schannel_util.c b/librpc/rpc/server/netlogon/schannel_util.c new file mode 100644 index 00000000000..b14497b13ce --- /dev/null +++ b/librpc/rpc/server/netlogon/schannel_util.c @@ -0,0 +1,570 @@ +/* + Unix SMB/CIFS implementation. + + netlogon schannel utility functions + + Copyright (C) Andrew Bartlett <abart...@samba.org> 2004-2008 + Copyright (C) Stefan Metzmacher <me...@samba.org> 2005 + Copyright (C) Matthias Dieter Wallnöfer 2009-2010 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "schannel_util.h" +#include "param/param.h" +#include "libcli/security/dom_sid.h" +#include "libcli/auth/schannel.h" +#include "librpc/rpc/dcesrv_core.h" +#include "librpc/gen_ndr/ndr_netlogon.h" +#include "lib/util/util_str_escape.h" + +struct dcesrv_netr_check_schannel_state { + struct dom_sid account_sid; + enum dcerpc_AuthType auth_type; + enum dcerpc_AuthLevel auth_level; + + bool schannel_global_required; + bool schannel_required; + bool schannel_explicitly_set; + + bool seal_global_required; + bool seal_required; + bool seal_explicitly_set; + + NTSTATUS result; +}; + +static NTSTATUS dcesrv_netr_check_schannel_get_state(struct dcesrv_call_state *dce_call, + const struct netlogon_creds_CredentialState *creds, + enum dcerpc_AuthType auth_type, + enum dcerpc_AuthLevel auth_level, + struct dcesrv_netr_check_schannel_state **_s) +{ + struct loadparm_context *lp_ctx = dce_call->conn->dce_ctx->lp_ctx; + int schannel = lpcfg_server_schannel(lp_ctx); + bool schannel_global_required = (schannel == true); + bool schannel_required = schannel_global_required; + const char *explicit_opt = NULL; + bool global_require_seal = lpcfg_server_schannel_require_seal(lp_ctx); + bool require_seal = global_require_seal; + const char *explicit_seal_opt = NULL; +#define DCESRV_NETR_CHECK_SCHANNEL_STATE_MAGIC (NETLOGON_SERVER_PIPE_STATE_MAGIC+1) + struct dcesrv_netr_check_schannel_state *s = NULL; + NTSTATUS status; + + *_s = NULL; + + s = dcesrv_iface_state_find_conn(dce_call, + DCESRV_NETR_CHECK_SCHANNEL_STATE_MAGIC, + struct dcesrv_netr_check_schannel_state); + if (s != NULL) { + if (!dom_sid_equal(&s->account_sid, creds->sid)) { + goto new_state; + } + if (s->auth_type != auth_type) { + goto new_state; + } + if (s->auth_level != auth_level) { + goto new_state; + } + + *_s = s; + return NT_STATUS_OK; + } + +new_state: + TALLOC_FREE(s); + s = talloc_zero(dce_call, + struct dcesrv_netr_check_schannel_state); + if (s == NULL) { + return NT_STATUS_NO_MEMORY; + } + + s->account_sid = *creds->sid; + s->auth_type = auth_type; + s->auth_level = auth_level; + s->result = NT_STATUS_MORE_PROCESSING_REQUIRED; + + /* + * We don't use lpcfg_parm_bool(), as we + * need the explicit_opt pointer in order to + * adjust the debug messages. + */ + explicit_seal_opt = lpcfg_get_parametric(lp_ctx, + NULL, + "server schannel require seal", + creds->account_name); + if (explicit_seal_opt != NULL) { + require_seal = lp_bool(explicit_seal_opt); + } + + /* + * We don't use lpcfg_parm_bool(), as we + * need the explicit_opt pointer in order to + * adjust the debug messages. + */ + explicit_opt = lpcfg_get_parametric(lp_ctx, + NULL, + "server require schannel", + creds->account_name); + if (explicit_opt != NULL) { + schannel_required = lp_bool(explicit_opt); + } + + s->schannel_global_required = schannel_global_required; + s->schannel_required = schannel_required; + s->schannel_explicitly_set = explicit_opt != NULL; + + s->seal_global_required = global_require_seal; + s->seal_required = require_seal; + s->seal_explicitly_set = explicit_seal_opt != NULL; + + status = dcesrv_iface_state_store_conn(dce_call, + DCESRV_NETR_CHECK_SCHANNEL_STATE_MAGIC, + s); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + + *_s = s; + return NT_STATUS_OK; +} + +static NTSTATUS dcesrv_netr_check_schannel_once(struct dcesrv_call_state *dce_call, + struct dcesrv_netr_check_schannel_state *s, + const struct netlogon_creds_CredentialState *creds, + uint16_t opnum) +{ + struct loadparm_context *lp_ctx = dce_call->conn->dce_ctx->lp_ctx; + int CVE_2020_1472_warn_level = lpcfg_parm_int(lp_ctx, NULL, + "CVE_2020_1472", "warn_about_unused_debug_level", DBGLVL_ERR); + int CVE_2020_1472_error_level = lpcfg_parm_int(lp_ctx, NULL, + "CVE_2020_1472", "error_debug_level", DBGLVL_ERR); + int CVE_2022_38023_warn_level = lpcfg_parm_int(lp_ctx, NULL, + "CVE_2022_38023", "warn_about_unused_debug_level", DBGLVL_ERR); + int CVE_2022_38023_error_level = lpcfg_parm_int(lp_ctx, NULL, + "CVE_2022_38023", "error_debug_level", DBGLVL_ERR); + TALLOC_CTX *frame = talloc_stackframe(); + unsigned int dbg_lvl = DBGLVL_DEBUG; + const char *opname = "<unknown>"; + const char *reason = "<unknown>"; + + if (opnum < ndr_table_netlogon.num_calls) { + opname = ndr_table_netlogon.calls[opnum].name; + } + + if (s->auth_type == DCERPC_AUTH_TYPE_SCHANNEL) { + if (s->auth_level == DCERPC_AUTH_LEVEL_PRIVACY) { + reason = "WITH SEALED"; + } else if (s->auth_level == DCERPC_AUTH_LEVEL_INTEGRITY) { + reason = "WITH SIGNED"; + } else { + reason = "WITH INVALID"; + dbg_lvl = DBGLVL_ERR; + s->result = NT_STATUS_INTERNAL_ERROR; + } + } else { + reason = "WITHOUT"; + } + + if (!NT_STATUS_EQUAL(s->result, NT_STATUS_MORE_PROCESSING_REQUIRED)) { + if (!NT_STATUS_IS_OK(s->result)) { + dbg_lvl = MIN(dbg_lvl, DBGLVL_INFO); + } + + DEBUG(dbg_lvl, ( + "CVE-2020-1472(ZeroLogon)/CVE-2022-38023: " + "%s request (opnum[%u]) %s schannel from " + "client_account[%s] client_computer_name[%s] %s\n", + opname, opnum, reason, + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name), + nt_errstr(s->result))); + TALLOC_FREE(frame); + return s->result; + } + + if (s->auth_type == DCERPC_AUTH_TYPE_SCHANNEL && + s->auth_level == DCERPC_AUTH_LEVEL_PRIVACY) + { + s->result = NT_STATUS_OK; + + if (s->schannel_explicitly_set && !s->schannel_required) { + dbg_lvl = MIN(dbg_lvl, CVE_2020_1472_warn_level); + } else if (!s->schannel_required) { + dbg_lvl = MIN(dbg_lvl, DBGLVL_INFO); + } + if (s->seal_explicitly_set && !s->seal_required) { + dbg_lvl = MIN(dbg_lvl, CVE_2022_38023_warn_level); + } else if (!s->seal_required) { + dbg_lvl = MIN(dbg_lvl, DBGLVL_INFO); + } + + DEBUG(dbg_lvl, ( + "CVE-2020-1472(ZeroLogon)/CVE-2022-38023: " + "%s request (opnum[%u]) %s schannel from " + "client_account[%s] client_computer_name[%s] %s\n", + opname, opnum, reason, + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name), + nt_errstr(s->result))); + + if (s->schannel_explicitly_set && !s->schannel_required) { + DEBUG(CVE_2020_1472_warn_level, ( + "CVE-2020-1472(ZeroLogon): " + "Option 'server require schannel:%s = no' not needed for '%s'!\n", + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name))); + } + + if (s->seal_explicitly_set && !s->seal_required) { + DEBUG(CVE_2022_38023_warn_level, ( + "CVE-2022-38023: " + "Option 'server schannel require seal:%s = no' not needed for '%s'!\n", + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name))); + } + + TALLOC_FREE(frame); + return s->result; + } + + if (s->auth_type == DCERPC_AUTH_TYPE_SCHANNEL) { + if (s->seal_required) { + s->result = NT_STATUS_ACCESS_DENIED; + + if (s->seal_explicitly_set) { + dbg_lvl = DBGLVL_NOTICE; + } else { + dbg_lvl = MIN(dbg_lvl, CVE_2022_38023_error_level); + } + if (s->schannel_explicitly_set && !s->schannel_required) { + dbg_lvl = MIN(dbg_lvl, CVE_2022_38023_warn_level); + } + + DEBUG(dbg_lvl, ( + "CVE-2022-38023: " + "%s request (opnum[%u]) %s schannel from " + "from client_account[%s] client_computer_name[%s] %s\n", + opname, opnum, reason, + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name), + nt_errstr(s->result))); + if (s->seal_explicitly_set) { + D_NOTICE("CVE-2022-38023: Option " + "'server schannel require seal:%s = yes' " + "rejects access for client.\n", + log_escape(frame, creds->account_name)); + } else { + DEBUG(CVE_2020_1472_error_level, ( + "CVE-2022-38023: Check if option " + "'server schannel require seal:%s = no' " + "might be needed for a legacy client.\n", + log_escape(frame, creds->account_name))); + } + if (s->schannel_explicitly_set && !s->schannel_required) { + DEBUG(CVE_2020_1472_warn_level, ( + "CVE-2020-1472(ZeroLogon): Option " + "'server require schannel:%s = no' " + "not needed for '%s'!\n", + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name))); + } + TALLOC_FREE(frame); + return s->result; + } + + s->result = NT_STATUS_OK; + + if (s->schannel_explicitly_set && !s->schannel_required) { + dbg_lvl = MIN(dbg_lvl, CVE_2020_1472_warn_level); + } else if (!s->schannel_required) { + dbg_lvl = MIN(dbg_lvl, DBGLVL_INFO); + } + if (s->seal_explicitly_set && !s->seal_required) { + dbg_lvl = MIN(dbg_lvl, DBGLVL_INFO); + } else if (!s->seal_required) { + dbg_lvl = MIN(dbg_lvl, CVE_2022_38023_error_level); + } + + DEBUG(dbg_lvl, ( + "CVE-2020-1472(ZeroLogon): " + "%s request (opnum[%u]) %s schannel from " + "client_account[%s] client_computer_name[%s] %s\n", + opname, opnum, reason, + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name), + nt_errstr(s->result))); + if (s->schannel_explicitly_set && !s->schannel_required) { + DEBUG(CVE_2020_1472_warn_level, ( + "CVE-2020-1472(ZeroLogon): " + "Option 'server require schannel:%s = no' not needed for '%s'!\n", + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name))); + } + if (s->seal_explicitly_set && !s->seal_required) { + D_INFO("CVE-2022-38023: " + "Option 'server schannel require seal:%s = no' still needed for '%s'!\n", + log_escape(frame, creds->account_name), + log_escape(frame, creds->computer_name)); + } else if (!s->seal_required) { + /* -- Samba Shared Repository