auth:creds: Add python bindings for (get|set)_smb_ipc_signing
authorAndreas Schneider <asn@samba.org>
Wed, 3 Jun 2020 10:32:46 +0000 (12:32 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 19 Aug 2020 16:22:41 +0000 (16:22 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
auth/credentials/pycredentials.c
python/samba/tests/credentials.py

index 846c418419fcc9155be47f4fbe1a26772e399838..1a83c506088f0419fc8fc32fd3978ec3ffbd604d 100644 (file)
@@ -976,6 +976,52 @@ static PyObject *py_creds_set_smb_signing(PyObject *self, PyObject *args)
        Py_RETURN_NONE;
 }
 
+static PyObject *py_creds_get_smb_ipc_signing(PyObject *self, PyObject *unused)
+{
+       enum smb_signing_setting signing_state;
+       struct cli_credentials *creds = NULL;
+
+       creds = PyCredentials_AsCliCredentials(self);
+       if (creds == NULL) {
+               PyErr_Format(PyExc_TypeError, "Credentials expected");
+               return NULL;
+       }
+
+       signing_state = cli_credentials_get_smb_ipc_signing(creds);
+       return PyLong_FromLong(signing_state);
+}
+
+static PyObject *py_creds_set_smb_ipc_signing(PyObject *self, PyObject *args)
+{
+       enum smb_signing_setting signing_state;
+       struct cli_credentials *creds = NULL;
+       enum credentials_obtained obt = CRED_SPECIFIED;
+
+       creds = PyCredentials_AsCliCredentials(self);
+       if (creds == NULL) {
+               PyErr_Format(PyExc_TypeError, "Credentials expected");
+               return NULL;
+       }
+       if (!PyArg_ParseTuple(args, "i|i", &signing_state, &obt)) {
+               return NULL;
+       }
+
+       switch (signing_state) {
+       case SMB_SIGNING_DEFAULT:
+       case SMB_SIGNING_OFF:
+       case SMB_SIGNING_IF_REQUIRED:
+       case SMB_SIGNING_DESIRED:
+       case SMB_SIGNING_REQUIRED:
+               break;
+       default:
+               PyErr_Format(PyExc_TypeError, "Invalid signing state value");
+               return NULL;
+       }
+
+       cli_credentials_set_smb_ipc_signing(creds, signing_state, obt);
+       Py_RETURN_NONE;
+}
+
 static PyMethodDef py_creds_methods[] = {
        {
                .ml_name  = "get_username",
@@ -1266,6 +1312,16 @@ static PyMethodDef py_creds_methods[] = {
                .ml_meth  = py_creds_set_smb_signing,
                .ml_flags = METH_VARARGS,
        },
+       {
+               .ml_name  = "get_smb_ipc_signing",
+               .ml_meth  = py_creds_get_smb_ipc_signing,
+               .ml_flags = METH_NOARGS,
+       },
+       {
+               .ml_name  = "set_smb_ipc_signing",
+               .ml_meth  = py_creds_set_smb_ipc_signing,
+               .ml_flags = METH_VARARGS,
+       },
        { .ml_name = NULL }
 };
 
index 0ddb0867a8187eb010e29bf7883399cab8448474..48b263295f7411b3cad10ea1856419e023947f71 100644 (file)
@@ -454,3 +454,9 @@ class CredentialsTests(samba.tests.TestCaseInTempDir):
         self.assertEqual(creds.get_smb_signing(), credentials.SMB_SIGNING_DEFAULT)
         creds.set_smb_signing(credentials.SMB_SIGNING_REQUIRED)
         self.assertEqual(creds.get_smb_signing(), credentials.SMB_SIGNING_REQUIRED)
+
+    def test_smb_ipc_signing(self):
+        creds = credentials.Credentials()
+        self.assertEqual(creds.get_smb_ipc_signing(), credentials.SMB_SIGNING_REQUIRED)
+        creds.set_smb_ipc_signing(credentials.SMB_SIGNING_OFF)
+        self.assertEqual(creds.get_smb_ipc_signing(), credentials.SMB_SIGNING_OFF)