The branch, v4-19-test has been updated via 62c90dfa32e s3:auth: Allow 'Unix Users' and 'Unix Groups' to create a local token via 9b26a0eaae8 s3:auth: Remove trailing white spaces from auth_util.c via b3ac235ba96 selftest: Show that 'allow trusted domains = no' firewalls Unix User|Group from e4505c10a76 testprogs: Add net offlinejoin composeodj tests
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-19-test - Log ----------------------------------------------------------------- commit 62c90dfa32e7918e898c321dd81617c2e6da58ff Author: Andreas Schneider <a...@samba.org> Date: Thu Nov 30 10:54:07 2023 +0100 s3:auth: Allow 'Unix Users' and 'Unix Groups' to create a local token BUG: https://bugzilla.samba.org/show_bug.cgi?id=15469 Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> (cherry picked from commit 00034d022896f879bf91bb78eb9e2972162c99ce) Autobuild-User(v4-19-test): Jule Anger <jan...@samba.org> Autobuild-Date(v4-19-test): Tue Dec 5 11:04:17 UTC 2023 on atb-devel-224 commit 9b26a0eaae8544bdf74b5440bb72403286981df4 Author: Andreas Schneider <a...@samba.org> Date: Fri Sep 8 12:50:32 2023 +0200 s3:auth: Remove trailing white spaces from auth_util.c Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> (cherry picked from commit 8f496161463f110e494201303b96dd14ab3774cd) commit b3ac235ba966c93744a457bd7014ec6f0503f1e5 Author: Andreas Schneider <a...@samba.org> Date: Mon Sep 4 16:29:46 2023 +0200 selftest: Show that 'allow trusted domains = no' firewalls Unix User|Group UNEXPECTED(failure): samba3.blackbox.smbclient_auth.plain.local_creds.smbclient //LOCALSHARE4/forceuser_unixonly as user(simpleserver) REASON: Exception: Exception: tree connect failed: NT_STATUS_AUTHENTICATION_FIREWALL_FAILED BUG: https://bugzilla.samba.org/show_bug.cgi?id=15469 Signed-off-by: Andreas Schneider <a...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> (cherry picked from commit ad0c0dd071401d98f0b7f595efbdf5312a165ab4) ----------------------------------------------------------------------- Summary of changes: selftest/target/Samba3.pm | 1 + source3/auth/auth_util.c | 81 ++++++++++++++++++++++++++++------------------- 2 files changed, 49 insertions(+), 33 deletions(-) Changeset truncated at 500 lines: diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index 39831afc599..85e69e4b72d 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -1689,6 +1689,7 @@ sub setup_simpleserver vfs objects = xattr_tdb streams_depot change notify = no server smb encrypt = off + allow trusted domains = no [vfs_aio_pthread] path = $prefix_abs/share diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 293523f4272..2a35fea5061 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -21,6 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "dom_sid.h" #include "includes.h" #include "auth.h" #include "lib/util_unixsids.h" @@ -144,14 +145,14 @@ NTSTATUS make_user_info_map(TALLOC_CTX *mem_ctx, } /**************************************************************************** - Create an auth_usersupplied_data, making the DATA_BLOBs here. + Create an auth_usersupplied_data, making the DATA_BLOBs here. Decrypt and encrypt the passwords. ****************************************************************************/ bool make_user_info_netlogon_network(TALLOC_CTX *mem_ctx, struct auth_usersupplied_info **user_info, - const char *smb_name, - const char *client_domain, + const char *smb_name, + const char *client_domain, const char *workstation_name, const struct tsocket_address *remote_address, const struct tsocket_address *local_address, @@ -167,12 +168,12 @@ bool make_user_info_netlogon_network(TALLOC_CTX *mem_ctx, DATA_BLOB nt_blob = data_blob(nt_network_pwd, nt_pwd_len); status = make_user_info_map(mem_ctx, user_info, - smb_name, client_domain, + smb_name, client_domain, workstation_name, remote_address, local_address, "SamLogon", - lm_pwd_len ? &lm_blob : NULL, + lm_pwd_len ? &lm_blob : NULL, nt_pwd_len ? &nt_blob : NULL, NULL, NULL, NULL, AUTH_PASSWORD_RESPONSE); @@ -188,20 +189,20 @@ bool make_user_info_netlogon_network(TALLOC_CTX *mem_ctx, } /**************************************************************************** - Create an auth_usersupplied_data, making the DATA_BLOBs here. + Create an auth_usersupplied_data, making the DATA_BLOBs here. Decrypt and encrypt the passwords. ****************************************************************************/ bool make_user_info_netlogon_interactive(TALLOC_CTX *mem_ctx, struct auth_usersupplied_info **user_info, - const char *smb_name, - const char *client_domain, + const char *smb_name, + const char *client_domain, const char *workstation_name, const struct tsocket_address *remote_address, const struct tsocket_address *local_address, uint32_t logon_parameters, - const uchar chal[8], - const uchar lm_interactive_pwd[16], + const uchar chal[8], + const uchar lm_interactive_pwd[16], const uchar nt_interactive_pwd[16]) { struct samr_Password lm_pwd; @@ -250,7 +251,7 @@ bool make_user_info_netlogon_interactive(TALLOC_CTX *mem_ctx, nt_status = make_user_info_map( mem_ctx, - user_info, + user_info, smb_name, client_domain, workstation_name, remote_address, local_address, @@ -280,7 +281,7 @@ bool make_user_info_netlogon_interactive(TALLOC_CTX *mem_ctx, bool make_user_info_for_reply(TALLOC_CTX *mem_ctx, struct auth_usersupplied_info **user_info, - const char *smb_name, + const char *smb_name, const char *client_domain, const struct tsocket_address *remote_address, const struct tsocket_address *local_address, @@ -315,10 +316,10 @@ bool make_user_info_for_reply(TALLOC_CTX *mem_ctx, /* We can't do an NT hash here, as the password needs to be case insensitive */ - local_nt_blob = data_blob_null; + local_nt_blob = data_blob_null; } else { - local_lm_blob = data_blob_null; - local_nt_blob = data_blob_null; + local_lm_blob = data_blob_null; + local_nt_blob = data_blob_null; } plaintext_password_string = talloc_strndup(talloc_tos(), @@ -329,7 +330,7 @@ bool make_user_info_for_reply(TALLOC_CTX *mem_ctx, } ret = make_user_info(mem_ctx, - user_info, smb_name, smb_name, client_domain, client_domain, + user_info, smb_name, smb_name, client_domain, client_domain, get_remote_machine_name(), remote_address, local_address, @@ -403,14 +404,14 @@ bool make_user_info_guest(TALLOC_CTX *mem_ctx, nt_status = make_user_info(mem_ctx, user_info, - "","", - "","", - "", + "","", + "","", + "", remote_address, local_address, service_description, - NULL, NULL, - NULL, NULL, + NULL, NULL, + NULL, NULL, NULL, AUTH_PASSWORD_RESPONSE); @@ -478,6 +479,7 @@ NTSTATUS create_local_token(TALLOC_CTX *mem_ctx, struct dom_sid tmp_sid; struct auth_session_info *session_info = NULL; struct unixid *ids; + bool is_allowed = false; /* Ensure we can't possible take a code path leading to a * null deref. */ @@ -485,7 +487,20 @@ NTSTATUS create_local_token(TALLOC_CTX *mem_ctx, return NT_STATUS_LOGON_FAILURE; } - if (!is_allowed_domain(server_info->info3->base.logon_domain.string)) { + if (is_allowed_domain(server_info->info3->base.logon_domain.string)) { + is_allowed = true; + } + + /* Check if we have extra info about the user. */ + if (dom_sid_in_domain(&global_sid_Unix_Users, + &server_info->extra.user_sid) || + dom_sid_in_domain(&global_sid_Unix_Groups, + &server_info->extra.pgid_sid)) + { + is_allowed = true; + } + + if (!is_allowed) { DBG_NOTICE("Authentication failed for user [%s] " "from firewalled domain [%s]\n", server_info->info3->base.account_name.string, @@ -1258,7 +1273,7 @@ done: } session_info->unique_session_token = GUID_random(); - + *session_info_out = talloc_move(mem_ctx, &session_info); TALLOC_FREE(frame); return NT_STATUS_OK; @@ -1954,9 +1969,9 @@ static NTSTATUS check_account(TALLOC_CTX *mem_ctx, const char *domain, *pwd = passwd; /* This is pointless -- there is no support for differing - unix and windows names. Make sure to always store the + unix and windows names. Make sure to always store the one we actually looked up and succeeded. Have I mentioned - why I hate the 'winbind use default domain' parameter? + why I hate the 'winbind use default domain' parameter? --jerry */ *found_username = talloc_strdup( mem_ctx, real_username ); @@ -1965,8 +1980,8 @@ static NTSTATUS check_account(TALLOC_CTX *mem_ctx, const char *domain, } /**************************************************************************** - Wrapper to allow the getpwnam() call to strip the domain name and - try again in case a local UNIX user is already there. Also run through + Wrapper to allow the getpwnam() call to strip the domain name and + try again in case a local UNIX user is already there. Also run through the username if we fallback to the username only. ****************************************************************************/ @@ -1977,11 +1992,11 @@ struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, const char *domuser, char *p = NULL; const char *username = NULL; - /* we only save a copy of the username it has been mangled + /* we only save a copy of the username it has been mangled by winbindd use default domain */ *p_save_username = NULL; - /* don't call map_username() here since it has to be done higher + /* don't call map_username() here since it has to be done higher up the stack so we don't call it multiple times */ username = talloc_strdup(mem_ctx, domuser); @@ -2068,10 +2083,10 @@ username_only: } /*************************************************************************** - Make a server_info struct from the info3 returned by a domain logon + Make a server_info struct from the info3 returned by a domain logon ***************************************************************************/ -NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, +NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, const char *sent_nt_username, const char *domain, struct auth_serversupplied_info **server_info, @@ -2089,9 +2104,9 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx, struct dom_sid sid; TALLOC_CTX *tmp_ctx = talloc_stackframe(); - /* + /* Here is where we should check the list of - trusted domains, and verify that the SID + trusted domains, and verify that the SID matches. */ -- Samba Shared Repository