static PyObject *py_wrap_getxattr(PyObject *self, PyObject *args) { char *filename, *attribute, *tdbname; TALLOC_CTX *mem_ctx; DATA_BLOB blob; PyObject *ret; NTSTATUS status; struct tdb_wrap *eadb = NULL; if (!PyArg_ParseTuple(args, "sss", &tdbname, &filename, &attribute)) return NULL; mem_ctx = talloc_new(NULL); eadb = tdb_wrap_open( mem_ctx, tdbname, 50000, lpcfg_tdb_flags(py_default_loadparm_context(mem_ctx), TDB_DEFAULT), O_RDWR|O_CREAT, 0600); if (eadb == NULL) { PyErr_SetFromErrno(PyExc_IOError); talloc_free(mem_ctx); return NULL; } status = pull_xattr_blob_tdb_raw(eadb, mem_ctx, attribute, filename, -1, 100, &blob); if (!NT_STATUS_IS_OK(status)) { PyErr_SetNTSTATUS(status); talloc_free(mem_ctx); return NULL; } ret = PyString_FromStringAndSize((char *)blob.data, blob.length); talloc_free(mem_ctx); return ret; }
static PyObject *py_get_gplink_options(PyObject *self, PyObject *args) { int flags; PyObject *py_ret; const char **ret; TALLOC_CTX *mem_ctx; int i; NTSTATUS status; if (!PyArg_ParseTuple(args, "i", &flags)) return NULL; mem_ctx = talloc_new(NULL); if (mem_ctx == NULL) { PyErr_NoMemory(); return NULL; } status = gp_get_gplink_options(mem_ctx, flags, &ret); if (!NT_STATUS_IS_OK(status)) { PyErr_SetNTSTATUS(status); talloc_free(mem_ctx); return NULL; } py_ret = PyList_New(0); for (i = 0; ret[i]; i++) { PyObject *item = PyString_FromString(ret[i]); if (item == NULL) { talloc_free(mem_ctx); Py_DECREF(py_ret); PyErr_NoMemory(); return NULL; } PyList_Append(py_ret, item); } talloc_free(mem_ctx); return py_ret; }
static PyObject *py_wrap_setxattr(PyObject *self, PyObject *args) { char *filename, *attribute, *tdbname; DATA_BLOB blob; Py_ssize_t blobsize; NTSTATUS status; TALLOC_CTX *mem_ctx; struct tdb_wrap *eadb; if (!PyArg_ParseTuple(args, "ssss#", &tdbname, &filename, &attribute, &blob.data, &blobsize)) return NULL; blob.length = blobsize; mem_ctx = talloc_new(NULL); eadb = tdb_wrap_open( mem_ctx, tdbname, 50000, lpcfg_tdb_flags(py_default_loadparm_context(mem_ctx), TDB_DEFAULT), O_RDWR|O_CREAT, 0600); if (eadb == NULL) { PyErr_SetFromErrno(PyExc_IOError); talloc_free(mem_ctx); return NULL; } status = push_xattr_blob_tdb_raw(eadb, attribute, filename, -1, &blob); if (!NT_STATUS_IS_OK(status)) { PyErr_SetNTSTATUS(status); talloc_free(mem_ctx); return NULL; } talloc_free(mem_ctx); Py_RETURN_NONE; }