Beispiel #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;
}
Beispiel #2
0
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;
}
Beispiel #3
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;
}