The branch, v4-2-test has been updated
       via  08bbbbc s3-util: Compare the maximum allowed length of a NetBIOS 
name
       via  f2a2ac4 s3-auth: Fix a memory leak in make_server_info_info3()
       via  175e73d s3-auth: Pass nt_username to check_account()
       via  281bd2f s3-auth: Fix 'map to guest = Bad Uid' support
      from  7e43c43 s3: winbindd: Fix TALLOC_FREE of uninitialized groups 
variable.

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-2-test


- Log -----------------------------------------------------------------
commit 08bbbbc87f7dd2b9f09b85ca7e361046095d2fb5
Author: Roel van Meer <r...@1afa.com>
Date:   Tue Aug 4 16:50:43 2015 +0200

    s3-util: Compare the maximum allowed length of a NetBIOS name
    
    This fixes a problem where is_myname() returns true if one of our names
    is a substring of the specified name.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11427
    
    Reviewed-by: Jeremy Allison <j...@samba.org>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    (cherry picked from commit 4e178ed498c594ffcd5592d0b792d47b064b9586)
    
    Autobuild-User(v4-2-test): Stefan Metzmacher <me...@samba.org>
    Autobuild-Date(v4-2-test): Mon Aug 31 12:33:42 CEST 2015 on sn-devel-104

commit f2a2ac4bd9621d2d11e0945fad6143aeaa92536f
Author: Andreas Schneider <a...@samba.org>
Date:   Wed Aug 19 16:19:30 2015 +0200

    s3-auth: Fix a memory leak in make_server_info_info3()
    
    We call make_server_info(NULL) and it is possible that we do not free
    it, because server_info is not allocated on the memory context we pass
    to the function.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=9862
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Guenther Deschner <g...@samba.org>
    (cherry picked from commit 6363c0232c2238e1a782e9c22ef762e3ff9b7563)

commit 175e73d006b9166e8edfde1d963ff6d023463d81
Author: Andreas Schneider <a...@samba.org>
Date:   Wed Aug 19 16:24:08 2015 +0200

    s3-auth: Pass nt_username to check_account()
    
    We set nt_username above but do not use it in this function.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=9862
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Guenther Deschner <g...@samba.org>
    (cherry picked from commit e8c76932e4ac192a00afa3b9731f5921c4b37da6)

commit 281bd2fb84fed3965d1201050d7b6cc7338c5fdb
Author: Andreas Schneider <a...@samba.org>
Date:   Wed Aug 19 16:11:47 2015 +0200

    s3-auth: Fix 'map to guest = Bad Uid' support
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=9862
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Guenther Deschner <g...@samba.org>
    (cherry picked from commit 34965d4d98d172e848e2b96fad8a9e0b99288ba7)

-----------------------------------------------------------------------

Summary of changes:
 source3/auth/auth_util.c | 48 +++++++++++++++++++++++++++++++++++-------------
 source3/lib/util.c       |  2 +-
 2 files changed, 36 insertions(+), 14 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c
index 1c2cf80..2b355e4 100644
--- a/source3/auth/auth_util.c
+++ b/source3/auth/auth_util.c
@@ -1349,6 +1349,7 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
        bool username_was_mapped;
        struct passwd *pwd;
        struct auth_serversupplied_info *result;
+       TALLOC_CTX *tmp_ctx = talloc_stackframe();
 
        /* 
           Here is where we should check the list of
@@ -1357,15 +1358,17 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
        */
 
        if (!sid_compose(&user_sid, info3->base.domain_sid, info3->base.rid)) {
-               return NT_STATUS_INVALID_PARAMETER;
+               nt_status = NT_STATUS_INVALID_PARAMETER;
+               goto out;
        }
 
        if (!sid_compose(&group_sid, info3->base.domain_sid,
                         info3->base.primary_gid)) {
-               return NT_STATUS_INVALID_PARAMETER;
+               nt_status = NT_STATUS_INVALID_PARAMETER;
+               goto out;
        }
 
-       nt_username = talloc_strdup(mem_ctx, info3->base.account_name.string);
+       nt_username = talloc_strdup(tmp_ctx, info3->base.account_name.string);
        if (!nt_username) {
                /* If the server didn't give us one, just use the one we sent
                 * them */
@@ -1392,18 +1395,33 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
 
        /* this call will try to create the user if necessary */
 
-       nt_status = check_account(mem_ctx, nt_domain, sent_nt_username,
-                                    &found_username, &pwd,
-                                    &username_was_mapped);
+       nt_status = check_account(tmp_ctx,
+                                 nt_domain,
+                                 nt_username,
+                                 &found_username,
+                                 &pwd,
+                                 &username_was_mapped);
 
        if (!NT_STATUS_IS_OK(nt_status)) {
-               return nt_status;
+               /* Handle 'map to guest = Bad Uid */
+               if (NT_STATUS_EQUAL(nt_status, NT_STATUS_NO_SUCH_USER) &&
+                   (lp_security() == SEC_ADS || lp_security() == SEC_DOMAIN) &&
+                   lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_UID) {
+                       DEBUG(2, ("Try to map %s to guest account",
+                                 nt_username));
+                       nt_status = make_server_info_guest(tmp_ctx, &result);
+                       if (NT_STATUS_IS_OK(nt_status)) {
+                               *server_info = talloc_move(mem_ctx, &result);
+                       }
+               }
+               goto out;
        }
 
-       result = make_server_info(NULL);
+       result = make_server_info(tmp_ctx);
        if (result == NULL) {
                DEBUG(4, ("make_server_info failed!\n"));
-               return NT_STATUS_NO_MEMORY;
+               nt_status = NT_STATUS_NO_MEMORY;
+               goto out;
        }
 
        result->unix_name = talloc_strdup(result, found_username);
@@ -1411,8 +1429,8 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
        /* copy in the info3 */
        result->info3 = copy_netr_SamInfo3(result, info3);
        if (result->info3 == NULL) {
-               TALLOC_FREE(result);
-               return NT_STATUS_NO_MEMORY;
+               nt_status = NT_STATUS_NO_MEMORY;
+               goto out;
        }
 
        /* Fill in the unix info we found on the way */
@@ -1442,9 +1460,13 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
 
        result->guest = (info3->base.user_flags & NETLOGON_GUEST);
 
-       *server_info = result;
+       *server_info = talloc_move(mem_ctx, &result);
 
-       return NT_STATUS_OK;
+       nt_status = NT_STATUS_OK;
+out:
+       talloc_free(tmp_ctx);
+
+       return nt_status;
 }
 
 /*****************************************************************************
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 03c0d3e..087ea6d 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -1197,7 +1197,7 @@ bool is_myname(const char *s)
        for (n=0; my_netbios_names(n); n++) {
                const char *nbt_name = my_netbios_names(n);
 
-               if (strncasecmp_m(nbt_name, s, strlen(nbt_name)) == 0) {
+               if (strncasecmp_m(nbt_name, s, MAX_NETBIOSNAME_LEN-1) == 0) {
                        ret=True;
                        break;
                }


-- 
Samba Shared Repository

Reply via email to