On 22/09/2011 21:14, Stefan (metze) Metzmacher wrote:
Hi Matthieu,
diff --git a/source4/ntvfs/posix/python/pyxattr_tdb.c
b/source4/ntvfs/posix/python/pyxattr_tdb.c
index 2b28aca..a08557e 100644
--- a/source4/ntvfs/posix/python/pyxattr_tdb.c
+++ b/source4/ntvfs/posix/python/pyxattr_tdb.c
@@ -60,9 +60,8 @@ static PyObject *py_wrap_setxattr(PyObject *self, PyObject
*args)
status = push_xattr_blob_tdb_raw(eadb, mem_ctx, attribute, filename, -1,
&blob);
if (!NT_STATUS_IS_OK(status)) {
- PyErr_FromNTSTATUS(status);
talloc_free(mem_ctx);
- return NULL;
+ PyErr_NTSTATUS_IS_ERR_RAISE(status);
}
talloc_free(mem_ctx);
Py_RETURN_NONE;
@@ -91,9 +90,8 @@ static PyObject *py_wrap_getxattr(PyObject *self, PyObject
*args)
status = pull_xattr_blob_tdb_raw(eadb, mem_ctx, attribute, filename,
-1,
100,&blob);
if (!NT_STATUS_IS_OK(status) || blob.length< 0) {
- PyErr_FromNTSTATUS(status);
talloc_free(mem_ctx);
- return NULL;
+ PyErr_NTSTATUS_IS_ERR_RAISE(status);
Why this changes? What was the problem?
NT_STATUS_IS_ERR() is not the same as !NT_STATUS_IS_OK()
Well the problem is that without this if your status was != OK you'll
get error like instead of getting the right exception.
"ERROR(<type 'exceptions.SystemError'>): uncaught exception - error
return without exception set"
As PyErr_FromNTSTATUS(status) is not the same as PyErr_SetNTSTATUS(status)
If _IS_ERR is not the same then we need to have this code:
if (!NT_STATUS_IS_OK(status)) {
PyErr_SetNTSTATUS(status);
talloc_free(mem_ctx);
return NULL;
}
If you have no objection I'll push a fix like that.
--
Matthieu Patou
Samba Team
http://samba.org