From: Stefan Metzmacher Date: Fri, 22 Nov 2024 14:31:15 +0000 (+0100) Subject: pycredentials: add py_netlogon_creds_kerberos_init X-Git-Tag: tdb-1.4.13~359 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=64d5efa2dedce3c671f7ff3d87884b1c3cce8d72;p=thirdparty%2Fsamba.git pycredentials: add py_netlogon_creds_kerberos_init Signed-off-by: Stefan Metzmacher Reviewed-by: Andreas Schneider --- diff --git a/auth/credentials/pycredentials.c b/auth/credentials/pycredentials.c index d20d58ebe0d..fa6040e35c0 100644 --- a/auth/credentials/pycredentials.c +++ b/auth/credentials/pycredentials.c @@ -1902,6 +1902,62 @@ PyTypeObject PyCredentialCacheContainer = { .tp_methods = py_ccache_container_methods, }; +static PyObject *py_netlogon_creds_kerberos_init(PyObject *module, + PyObject *args, + PyObject *kwargs) +{ + const char * const kwnames[] = { + "client_account", + "client_computer_name", + "secure_channel_type", + "client_requested_flags", + "negotiate_flags", + NULL, + }; + const char *client_account = NULL; + const char *client_computer_name = NULL; + unsigned short secure_channel_type = 0; + unsigned int client_requested_flags = 0; + unsigned int negotiate_flags = 0; + struct netlogon_creds_CredentialState *ncreds = NULL; + PyObject *py_ncreds = Py_None; + bool ok; + + ok = PyArg_ParseTupleAndKeywords(args, kwargs, "ssHII", + discard_const_p(char *, kwnames), + &client_account, + &client_computer_name, + &secure_channel_type, + &client_requested_flags, + &negotiate_flags); + if (!ok) { + return NULL; + } + + ncreds = netlogon_creds_kerberos_init(NULL, + client_account, + client_computer_name, + secure_channel_type, + client_requested_flags, + NULL, /* client_sid */ + negotiate_flags); + if (ncreds == NULL) { + PyErr_NoMemory(); + return NULL; + } + + py_ncreds = py_return_ndr_struct("samba.dcerpc.schannel", + "netlogon_creds_CredentialState", + ncreds, + ncreds); + if (py_ncreds == NULL) { + TALLOC_FREE(ncreds); + return NULL; + } + + return py_ncreds; +} + static PyObject *py_netlogon_creds_random_challenge(PyObject *module, PyObject *unused) { @@ -2896,6 +2952,18 @@ static PyObject *py_netlogon_creds_encrypt_SendToSam(PyObject *module, } static PyMethodDef py_module_methods[] = { + { + .ml_name = "netlogon_creds_kerberos_init", + .ml_meth = PY_DISCARD_FUNC_SIG(PyCFunction, + py_netlogon_creds_kerberos_init), + .ml_flags = METH_VARARGS | METH_KEYWORDS, + .ml_doc = "credentials.netlogon_creds_kerberos_init(" + "client_account, client_computer_name," + "secure_channel_type, " + "client_requested_flags, negotiate_flags)" + "-> netlogon_creds_CredentialState\n" + "Create a new state for netr_ServerAuthenticateKerberos()", + }, { .ml_name = "netlogon_creds_random_challenge", .ml_meth = py_netlogon_creds_random_challenge,