void auth_ntlmssp_and_flags(struct auth_ntlmssp_state *ans, uint32_t flags);
void auth_ntlmssp_or_flags(struct auth_ntlmssp_state *ans, uint32_t flags);
void auth_ntlmssp_want_feature(struct auth_ntlmssp_state *ans, uint32_t feature);
-DATA_BLOB auth_ntlmssp_get_session_key(struct auth_ntlmssp_state *ans);
+DATA_BLOB auth_ntlmssp_get_session_key(struct auth_ntlmssp_state *ans,
+ TALLOC_CTX *mem_ctx);
NTSTATUS auth_ntlmssp_update(struct auth_ntlmssp_state *ans,
const DATA_BLOB request, DATA_BLOB *reply);
return gse_get_session_key(mem_ctx,
sp_ctx->mech_ctx.gssapi_state);
case SPNEGO_NTLMSSP:
- sk = auth_ntlmssp_get_session_key(
- sp_ctx->mech_ctx.ntlmssp_state);
- return data_blob_dup_talloc(mem_ctx, &sk);
+ return auth_ntlmssp_get_session_key(
+ sp_ctx->mech_ctx.ntlmssp_state, mem_ctx);
default:
DEBUG(0, ("Unsupported type in request!\n"));
return data_blob_null;
ntlmssp_want_feature(ans->ntlmssp_state, feature);
}
-DATA_BLOB auth_ntlmssp_get_session_key(struct auth_ntlmssp_state *ans)
+DATA_BLOB auth_ntlmssp_get_session_key(struct auth_ntlmssp_state *ans, TALLOC_CTX *mem_ctx)
{
- return ans->ntlmssp_state->session_key;
+ return data_blob_talloc(mem_ctx, ans->ntlmssp_state->session_key.data, ans->ntlmssp_state->session_key.length);
}
NTSTATUS auth_ntlmssp_update(struct auth_ntlmssp_state *ans,
case DCERPC_AUTH_TYPE_NTLMSSP:
ntlmssp_ctx = talloc_get_type_abort(a->auth_ctx,
struct auth_ntlmssp_state);
- sk = auth_ntlmssp_get_session_key(ntlmssp_ctx);
- make_dup = true;
+ sk = auth_ntlmssp_get_session_key(ntlmssp_ctx, mem_ctx);
+ make_dup = false;
break;
case DCERPC_AUTH_TYPE_KRB5:
gse_ctx = talloc_get_type_abort(a->auth_ctx,