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_wrap_getxattr(PyObject *self, PyObject *args) { char *filename, *attribute, *tdbname; TALLOC_CTX *mem_ctx; struct loadparm_context *lp_ctx; DATA_BLOB blob; PyObject *ret_obj; int ret; ssize_t xattr_size; struct db_context *eadb = NULL; struct file_id id; struct stat sbuf; if (!PyArg_ParseTuple(args, "sss", &tdbname, &filename, &attribute)) return NULL; mem_ctx = talloc_new(NULL); lp_ctx = py_default_loadparm_context(mem_ctx); eadb = db_open_tdb(mem_ctx, tdbname, 50000, lpcfg_tdb_flags(lp_ctx, TDB_DEFAULT), O_RDWR|O_CREAT, 0600, DBWRAP_LOCK_ORDER_2, DBWRAP_FLAG_NONE); if (eadb == NULL) { PyErr_SetFromErrno(PyExc_IOError); talloc_free(mem_ctx); return NULL; } ret = stat(filename, &sbuf); if (ret < 0) { PyErr_SetFromErrno(PyExc_IOError); talloc_free(mem_ctx); return NULL; } ZERO_STRUCT(id); id.devid = sbuf.st_dev; id.inode = sbuf.st_ino; xattr_size = xattr_tdb_getattr(eadb, mem_ctx, &id, attribute, &blob); if (xattr_size < 0) { PyErr_SetFromErrno(PyExc_TypeError); talloc_free(mem_ctx); return NULL; } ret_obj = PyString_FromStringAndSize((char *)blob.data, xattr_size); talloc_free(mem_ctx); return ret_obj; }
static PyObject *py_wrap_setxattr(PyObject *self, PyObject *args) { char *filename, *attribute, *tdbname; DATA_BLOB blob; int blobsize; int ret; TALLOC_CTX *mem_ctx; struct loadparm_context *lp_ctx; struct db_context *eadb = NULL; struct file_id id; struct stat sbuf; if (!PyArg_ParseTuple(args, "ssss#", &tdbname, &filename, &attribute, &blob.data, &blobsize)) return NULL; blob.length = blobsize; mem_ctx = talloc_new(NULL); lp_ctx = py_default_loadparm_context(mem_ctx); eadb = db_open_tdb(mem_ctx, tdbname, 50000, lpcfg_tdb_flags(lp_ctx, TDB_DEFAULT), O_RDWR|O_CREAT, 0600, DBWRAP_LOCK_ORDER_2, DBWRAP_FLAG_NONE); if (eadb == NULL) { PyErr_SetFromErrno(PyExc_IOError); talloc_free(mem_ctx); return NULL; } ret = stat(filename, &sbuf); if (ret < 0) { PyErr_SetFromErrno(PyExc_IOError); talloc_free(mem_ctx); return NULL; } ZERO_STRUCT(id); id.devid = sbuf.st_dev; id.inode = sbuf.st_ino; ret = xattr_tdb_setattr(eadb, &id, attribute, blob.data, blob.length, 0); if (ret < 0) { PyErr_SetFromErrno(PyExc_TypeError); talloc_free(mem_ctx); return NULL; } talloc_free(mem_ctx); Py_RETURN_NONE; }
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; }