]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
pycredentials: add py_netlogon_creds_kerberos_init
authorStefan Metzmacher <metze@samba.org>
Fri, 22 Nov 2024 14:31:15 +0000 (15:31 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 12 Dec 2024 13:59:29 +0000 (13:59 +0000)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
auth/credentials/pycredentials.c

index d20d58ebe0dcaf369c554584eb88711154eb47d0..fa6040e35c0273000db660a5753e64db7b49a30c 100644 (file)
@@ -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,