1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

lib/ldb: add LDB_CHANGETYPE_MODRDN support to ldb_ldif_to_pyobject()

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Stefan Metzmacher 2023-03-13 14:58:29 +01:00 committed by Andrew Bartlett
parent 5011221996
commit 167f023586

View File

@ -1709,7 +1709,7 @@ static PyObject *py_ldb_schema_attribute_add(PyLdbObject *self, PyObject *args)
Py_RETURN_NONE;
}
static PyObject *ldb_ldif_to_pyobject(struct ldb_ldif *ldif)
static PyObject *ldb_ldif_to_pyobject(struct ldb_context *ldb, struct ldb_ldif *ldif)
{
PyObject *obj = NULL;
PyObject *result = NULL;
@ -1735,6 +1735,54 @@ static PyObject *ldb_ldif_to_pyobject(struct ldb_ldif *ldif)
}
obj = pyldb_Dn_FromDn(ldif->msg->dn);
break;
case LDB_CHANGETYPE_MODRDN: {
struct ldb_dn *olddn = NULL;
PyObject *olddn_obj = NULL;
bool deleteoldrdn = false;
PyObject *deleteoldrdn_obj = NULL;
struct ldb_dn *newdn = NULL;
PyObject *newdn_obj = NULL;
int ret;
ret = ldb_ldif_parse_modrdn(ldb,
ldif,
ldif,
&olddn,
NULL,
&deleteoldrdn,
NULL,
&newdn);
if (ret != LDB_SUCCESS) {
PyErr_Format(PyExc_ValueError,
"ldb_ldif_parse_modrdn() failed");
return NULL;
}
olddn_obj = pyldb_Dn_FromDn(olddn);
if (olddn_obj == NULL) {
return NULL;
}
if (deleteoldrdn) {
deleteoldrdn_obj = Py_True;
} else {
deleteoldrdn_obj = Py_False;
}
newdn_obj = pyldb_Dn_FromDn(newdn);
if (olddn_obj == NULL) {
deleteoldrdn_obj = NULL;
Py_CLEAR(olddn_obj);
return NULL;
}
obj = Py_BuildValue(discard_const_p(char, "{s:O,s:O,s:O}"),
"olddn", olddn_obj,
"deleteoldrdn", deleteoldrdn_obj,
"newdn", newdn_obj);
Py_CLEAR(olddn_obj);
deleteoldrdn_obj = NULL;
Py_CLEAR(newdn_obj);
}
break;
default:
PyErr_Format(PyExc_NotImplementedError,
"Unsupported LDB_CHANGETYPE(%u)",
@ -1813,7 +1861,7 @@ static PyObject *py_ldb_parse_ldif(PyLdbObject *self, PyObject *args)
talloc_steal(mem_ctx, ldif);
if (ldif) {
int res = 0;
PyObject *py_ldif = ldb_ldif_to_pyobject(ldif);
PyObject *py_ldif = ldb_ldif_to_pyobject(self->ldb_ctx, ldif);
if (py_ldif == NULL) {
Py_CLEAR(list);
if (PyErr_Occurred() == NULL) {
@ -4458,6 +4506,7 @@ static PyObject* module_init(void)
ADD_LDB_INT(CHANGETYPE_ADD);
ADD_LDB_INT(CHANGETYPE_DELETE);
ADD_LDB_INT(CHANGETYPE_MODIFY);
ADD_LDB_INT(CHANGETYPE_MODRDN);
ADD_LDB_INT(FLAG_MOD_ADD);
ADD_LDB_INT(FLAG_MOD_REPLACE);