From f1c702ebdc231ca6f5ca255f38698ccd8c2743f5 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Wed, 15 Sep 2021 11:22:43 +0200 Subject: [PATCH] Implement OPT_X_SASL_SSF_EXTERNAL setter The option flag ``OPT_X_SASL_SSF_EXTERNAL`` never worked because the set_option code didn't handle the flag correctly. Fixes: https://github.com/python-ldap/python-ldap/issues/423 Signed-off-by: Christian Heimes --- Modules/options.c | 7 +++++++ Tests/t_ldapobject.py | 3 +++ 2 files changed, 10 insertions(+) diff --git a/Modules/options.c b/Modules/options.c index d4d20724..db5fde3e 100644 --- a/Modules/options.c +++ b/Modules/options.c @@ -115,6 +115,7 @@ LDAP_set_option(LDAPObject *self, int option, PyObject *value) #ifdef HAVE_SASL case LDAP_OPT_X_SASL_SSF_MIN: case LDAP_OPT_X_SASL_SSF_MAX: + case LDAP_OPT_X_SASL_SSF_EXTERNAL: if (!PyArg_Parse(value, "k:set_option", &blen)) return 0; ptr = &blen; @@ -261,6 +262,12 @@ LDAP_get_option(LDAPObject *self, int option) Py_ssize_t i, num_extensions; switch (option) { +#ifdef HAVE_SASL + case LDAP_OPT_X_SASL_SSF_EXTERNAL: + /* Write-only options */ + PyErr_SetString(PyExc_ValueError, "write-only option"); + return NULL; +#endif case LDAP_OPT_API_INFO: apiinfo.ldapai_info_version = LDAP_API_INFO_VERSION; res = LDAP_int_get_option(self, option, &apiinfo); diff --git a/Tests/t_ldapobject.py b/Tests/t_ldapobject.py index 0a089c91..3bcc00a2 100644 --- a/Tests/t_ldapobject.py +++ b/Tests/t_ldapobject.py @@ -362,6 +362,9 @@ def test006_sasl_options(self): self.assertEqual(l.get_option(ldap.OPT_X_SASL_SSF_MAX), 256) l.sasl_external_bind_s() + with self.assertRaisesRegex(ValueError, "write-only option"): + l.get_option(ldap.OPT_X_SASL_SSF_EXTERNAL) + l.set_option(ldap.OPT_X_SASL_SSF_EXTERNAL, 256) self.assertEqual(l.whoami_s(), 'dn:' + self.server.root_dn.lower()) def test007_timeout(self):