Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}