s3:auth: Pass a mem_ctx to make_new_session_info_guest()
authorAndreas Schneider <asn@samba.org>
Tue, 13 Feb 2018 11:05:29 +0000 (12:05 +0100)
committerJeremy Allison <jra@samba.org>
Tue, 20 Feb 2018 20:55:13 +0000 (21:55 +0100)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/auth/auth_util.c

index f543b33eead379abb7f6e82974677014538bcf53..377d56d048822fc02fed3a705a4aeb726f327b7f 100644 (file)
@@ -798,8 +798,12 @@ static NTSTATUS get_guest_info3(TALLOC_CTX *mem_ctx,
  left as-is for now.
 ***************************************************************************/
 
-static NTSTATUS make_new_session_info_guest(struct auth_session_info **session_info, struct auth_serversupplied_info **server_info)
+static NTSTATUS make_new_session_info_guest(TALLOC_CTX *mem_ctx,
+               struct auth_session_info **_session_info,
+               struct auth_serversupplied_info **_server_info)
 {
+       struct auth_session_info *session_info = NULL;
+       struct auth_serversupplied_info *server_info = NULL;
        const char *guest_account = lp_guest_account();
        const char *domain = lp_netbios_name();
        struct netr_SamInfo3 info3;
@@ -823,7 +827,7 @@ static NTSTATUS make_new_session_info_guest(struct auth_session_info **session_i
        status = make_server_info_info3(tmp_ctx,
                                        guest_account,
                                        domain,
-                                       server_info,
+                                       &server_info,
                                        &info3);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0, ("make_server_info_info3 failed with %s\n",
@@ -831,25 +835,26 @@ static NTSTATUS make_new_session_info_guest(struct auth_session_info **session_i
                goto done;
        }
 
-       (*server_info)->guest = true;
+       server_info->guest = true;
 
        /* This should not be done here (we should produce a server
         * info, and later construct a session info from it), but for
         * now this does not change the previous behavior */
-       status = create_local_token(tmp_ctx, *server_info, NULL,
-                                   (*server_info)->info3->base.account_name.string,
-                                   session_info);
+       status = create_local_token(tmp_ctx, server_info, NULL,
+                                   server_info->info3->base.account_name.string,
+                                   &session_info);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(0, ("create_local_token failed: %s\n",
                          nt_errstr(status)));
                goto done;
        }
-       talloc_steal(NULL, *session_info);
-       talloc_steal(NULL, *server_info);
 
        /* annoying, but the Guest really does have a session key, and it is
           all zeros! */
-       (*session_info)->session_key = data_blob_talloc_zero(NULL, 16);
+       session_info->session_key = data_blob_talloc_zero(session_info, 16);
+
+       *_session_info = talloc_move(mem_ctx, &session_info);
+       *_server_info = talloc_move(mem_ctx, &server_info);
 
        status = NT_STATUS_OK;
 done:
@@ -1136,7 +1141,7 @@ bool init_guest_info(void)
        if (guest_info != NULL)
                return true;
 
-       return NT_STATUS_IS_OK(make_new_session_info_guest(&guest_info, &guest_server_info));
+       return NT_STATUS_IS_OK(make_new_session_info_guest(NULL, &guest_info, &guest_server_info));
 }
 
 NTSTATUS make_server_info_guest(TALLOC_CTX *mem_ctx,