]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
xss4:pyrpc: make use of dcerpc_binding_handle_transport_session_key()
authorStefan Metzmacher <metze@samba.org>
Sat, 14 Sep 2024 12:20:46 +0000 (14:20 +0200)
committerJule Anger <janger@samba.org>
Thu, 12 Jun 2025 11:27:14 +0000 (11:27 +0000)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit 57905603e066e2d1ca60268b1b1e8166868d60e5)

source4/librpc/rpc/pyrpc.c

index 28ffdc71d65300d6c7488b04b09ca0bfc569eee1..b8e1ac0c35e0ba3a447e471d678bd9fe65592451 100644 (file)
@@ -130,12 +130,30 @@ static PyObject *py_iface_transfer_syntax(PyObject *obj, void *closure)
 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)