policy: Add samba.policy.get_gpo_flags binding.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 6 May 2010 09:10:21 +0000 (11:10 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 20 Jun 2010 15:19:11 +0000 (17:19 +0200)
Signed-off-by: Jelmer Vernooij <jelmer@samba.org>
source4/lib/policy/pypolicy.c [new file with mode: 0644]
source4/lib/policy/tests/python/bindings.py [new file with mode: 0644]
source4/lib/policy/wscript_build
source4/selftest/tests.sh

diff --git a/source4/lib/policy/pypolicy.c b/source4/lib/policy/pypolicy.c
new file mode 100644 (file)
index 0000000..5389a09
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "includes.h"
+#include "policy.h"
+#include <Python.h>
+#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 (file)
index 0000000..1a698f1
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+
+# Unix SMB/CIFS implementation.
+# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 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 <http://www.gnu.org/licenses/>.
+#
+
+"""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))
index 4c832efd3292d968420004c3b3a37296ed2ea69f..fb34c14c34f042c0a5b265eb20d7a2736accbbfe 100644 (file)
@@ -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'
+       )
index d8f1ef68eb312c98664d48bf129427a928911d59..129b5ead150be21c925757c7f3095d1a437cd60d 100755 (executable)
@@ -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