fixed the use of talloc_steal in ntlmssp_server
authorAndrew Tridgell <tridge@samba.org>
Wed, 1 Jul 2009 04:01:24 +0000 (14:01 +1000)
committerAndrew Tridgell <tridge@samba.org>
Wed, 1 Jul 2009 05:15:36 +0000 (15:15 +1000)
The previous use of talloc_steal could cause a steal of a pointer that
had references. This ensures that doesn't happen

source4/auth/ntlmssp/ntlmssp_server.c

index 00d3e56171ffbcec439c88c500242e80001c64db..28169d9ff4eb3db1565f098888d969cfd2ea6087 100644 (file)
@@ -458,6 +458,7 @@ static NTSTATUS ntlmssp_server_postauth(struct gensec_security *gensec_security,
 
        } else if (user_session_key && user_session_key->data) {
                session_key = *user_session_key;
+               talloc_steal(gensec_ntlmssp_state, session_key.data);
                DEBUG(10,("ntlmssp_server_auth: Using unmodified nt session key.\n"));
                dump_data_pw("unmodified session key:\n", session_key.data, session_key.length);
 
@@ -467,6 +468,7 @@ static NTSTATUS ntlmssp_server_postauth(struct gensec_security *gensec_security,
        } else if (lm_session_key && lm_session_key->data) {
                /* Very weird to have LM key, but no user session key, but anyway.. */
                session_key = *lm_session_key;
+               talloc_steal(gensec_ntlmssp_state, session_key.data);
                DEBUG(10,("ntlmssp_server_auth: Using unmodified lm session key.\n"));
                dump_data_pw("unmodified session key:\n", session_key.data, session_key.length);
 
@@ -511,9 +513,6 @@ static NTSTATUS ntlmssp_server_postauth(struct gensec_security *gensec_security,
                gensec_ntlmssp_state->session_key = session_key;
        }
 
-       /* keep the session key around on the new context */
-       talloc_steal(gensec_ntlmssp_state, session_key.data);
-
        if ((gensec_security->want_features & GENSEC_FEATURE_SIGN)
            || (gensec_security->want_features & GENSEC_FEATURE_SEAL)) {
                nt_status = ntlmssp_sign_init(gensec_ntlmssp_state);