From 381e82465842c7d1195ca81db40a0c5d9f9e9c57 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 6 May 2010 11:10:21 +0200 Subject: policy: Add samba.policy.get_gpo_flags binding. Signed-off-by: Jelmer Vernooij --- source4/lib/policy/pypolicy.c | 85 +++++++++++++++++++++++++++++ source4/lib/policy/tests/python/bindings.py | 31 +++++++++++ source4/lib/policy/wscript_build | 6 ++ source4/selftest/tests.sh | 1 + 4 files changed, 123 insertions(+) create mode 100644 source4/lib/policy/pypolicy.c create mode 100644 source4/lib/policy/tests/python/bindings.py diff --git a/source4/lib/policy/pypolicy.c b/source4/lib/policy/pypolicy.c new file mode 100644 index 0000000000..5389a09200 --- /dev/null +++ b/source4/lib/policy/pypolicy.c @@ -0,0 +1,85 @@ +/* + * Unix SMB/CIFS implementation. + * Python bindings for libpolicy + * Copyright (C) Jelmer Vernooij 2010 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#include "includes.h" +#include "policy.h" +#include +#include "libcli/util/pyerrors.h" + +static PyObject *py_get_gpo_flags(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_gpo_flags(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 PyMethodDef py_policy_methods[] = { + { "get_gpo_flags", (PyCFunction)py_get_gpo_flags, METH_VARARGS, + "get_gpo_flags(flags) -> list" }, + { NULL } +}; + +void initpolicy(void) +{ + PyObject *m; + + m = Py_InitModule3("policy", py_policy_methods, "(Group) Policy manipulation"); + if (!m) + return; + + PyModule_AddObject(m, "GPO_FLAG_USER_DISABLE", + PyInt_FromLong(GPO_FLAG_USER_DISABLE)); + PyModule_AddObject(m, "GPO_MACHINE_USER_DISABLE", + PyInt_FromLong(GPO_FLAG_MACHINE_DISABLE)); +} diff --git a/source4/lib/policy/tests/python/bindings.py b/source4/lib/policy/tests/python/bindings.py new file mode 100644 index 0000000000..1a698f16e0 --- /dev/null +++ b/source4/lib/policy/tests/python/bindings.py @@ -0,0 +1,31 @@ +#!/usr/bin/python + +# Unix SMB/CIFS implementation. +# Copyright (C) Jelmer Vernooij 2010 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +"""Tests for the libpolicy Python bindings. + +""" + +import unittest +from samba import policy + +class PolicyTests(unittest.TestCase): + + def test_get_gpo_flags(self): + self.assertEquals(["GPO_FLAG_USER_DISABLE"], + policy.get_gpo_flags(policy.GPO_FLAG_USER_DISABLE)) diff --git a/source4/lib/policy/wscript_build b/source4/lib/policy/wscript_build index 4c832efd32..fb34c14c34 100644 --- a/source4/lib/policy/wscript_build +++ b/source4/lib/policy/wscript_build @@ -7,3 +7,9 @@ bld.SAMBA_LIBRARY('policy', public_headers='policy.h', vnum='0.0.1' ) + +bld.SAMBA_PYTHON('py_policy', + source='pypolicy.c', + public_deps='policy PYTALLOC', + realname='samba/policy.so' + ) diff --git a/source4/selftest/tests.sh b/source4/selftest/tests.sh index d8f1ef68eb..129b5ead15 100755 --- a/source4/selftest/tests.sh +++ b/source4/selftest/tests.sh @@ -505,6 +505,7 @@ plantestsuite "upgradeprovisionnodc.python" none $SUBUNITRUN samba.tests.upgrade plantestsuite "xattr.python" none $SUBUNITRUN samba.tests.xattr plantestsuite "ntacls.python" none $SUBUNITRUN samba.tests.ntacls plantestsuite "deletetest.python" dc PYTHONPATH="$PYTHONPATH:../lib/subunit/python:../lib/testtools" $PYTHON $samba4srcdir/lib/ldb/tests/python/deletetest.py \$SERVER -U\$USERNAME%\$PASSWORD -W \$DOMAIN +plantestsuite "policy.python" none PYTHONPATH="$PYTHONPATH:lib/policy/tests/python" $SUBUNITRUN bindings plantestsuite "blackbox.samba3dump" none $PYTHON $samba4srcdir/scripting/bin/samba3dump $samba4srcdir/../testdata/samba3 rm -rf $PREFIX/upgrade plantestsuite "blackbox.upgrade" none $PYTHON $samba4srcdir/setup/upgrade_from_s3 --targetdir=$PREFIX/upgrade $samba4srcdir/../testdata/samba3 ../testdata/samba3/smb.conf -- cgit