]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: prepare free_conn_session_info_if_unused() for more cleanup logic
authorRalph Boehme <slow@samba.org>
Tue, 23 Jan 2024 14:29:17 +0000 (15:29 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 26 Jul 2024 10:06:30 +0000 (10:06 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/smbd/uid.c

index 585f3f169a69dc1523a095a92a59fc912aac1ab4..a759ad022264427e6590c4fb492cb8cfe52d0864 100644 (file)
@@ -65,7 +65,7 @@ bool change_to_guest(void)
  talloc free the conn->session_info if not used in the vuid cache.
 ****************************************************************************/
 
-static void free_conn_session_info_if_unused(connection_struct *conn)
+static void free_conn_state_if_unused(connection_struct *conn)
 {
        unsigned int i;
 
@@ -74,11 +74,13 @@ static void free_conn_session_info_if_unused(connection_struct *conn)
                ent = &conn->vuid_cache->array[i];
                if (ent->vuid != UID_FIELD_INVALID &&
                                conn->session_info == ent->session_info) {
-                       return;
+                       break;
                }
        }
-       /* Not used, safe to free. */
-       TALLOC_FREE(conn->session_info);
+       if (i == VUID_CACHE_SIZE) {
+               /* Not used, safe to free. */
+               TALLOC_FREE(conn->session_info);
+       }
 }
 
 /****************************************************************************
@@ -201,7 +203,7 @@ static bool check_user_ok(connection_struct *conn,
                                */
                                continue;
                        }
-                       free_conn_session_info_if_unused(conn);
+                       free_conn_state_if_unused(conn);
                        conn->session_info = ent->session_info;
                        conn->read_only = ent->read_only;
                        conn->share_access = ent->share_access;
@@ -260,7 +262,7 @@ static bool check_user_ok(connection_struct *conn,
        ent->vuid = vuid;
        ent->read_only = readonly_share;
        ent->share_access = share_access;
-       free_conn_session_info_if_unused(conn);
+       free_conn_state_if_unused(conn);
        conn->session_info = ent->session_info;
        conn->vuid = ent->vuid;
        if (vuid == UID_FIELD_INVALID) {