static PyObject *py_iface_session_key(PyObject *obj, void *closure)
{
dcerpc_InterfaceObject *iface = (dcerpc_InterfaceObject *)obj;
- DATA_BLOB session_key;
+ TALLOC_CTX *frame = talloc_stackframe();
+ DATA_BLOB session_key = { .length = 0, };
+ static PyObject *session_key_obj = NULL;
+ NTSTATUS status;
- NTSTATUS status = dcerpc_fetch_session_key(iface->pipe, &session_key);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
+ if (iface->binding_handle == NULL) {
+ PyErr_SetNTSTATUS(NT_STATUS_NO_USER_SESSION_KEY);
+ TALLOC_FREE(frame);
+ return NULL;
+ }
- return PyBytes_FromStringAndSize((const char *)session_key.data, session_key.length);
+ status = dcerpc_binding_handle_transport_session_key(iface->binding_handle,
+ frame,
+ &session_key);
+ if (!NT_STATUS_IS_OK(status)) {
+ PyErr_SetNTSTATUS(status);
+ TALLOC_FREE(frame);
+ return NULL;
+ }
+
+ session_key_obj = PyBytes_FromStringAndSize((const char *)session_key.data,
+ session_key.length);
+ TALLOC_FREE(frame);
+ return session_key_obj;
}
static PyObject *py_iface_user_session_key(PyObject *obj, void *closure)