[SCM] Samba Shared Repository - branch master updated
Andrew Bartlett
abartlet at samba.org
Fri Feb 3 03:28:01 UTC 2023
The branch, master has been updated
via e26a01a48c4 pidl: avoid py compile issues with --pidl-developer
via b2a2eeb6f99 tevent/pytevent: remove no-op define
via 8f2f3b00c2f tevent/pytevent: remove py2 ifdefs
via c0ef6ca98bb tdb/pytdb: remove useless HAVE_ITER non-flag
via f5555e0ee4c tdb/pytdb: remove py ifdefs
via 310eafdb7b3 s4/ndr/py_security: remove python 2 ifdefs
via ddbe69afbd1 s4/ndr/py_misc: remove python 2 ifdefs
via 38d0147f6a5 ldb/pyldb: remove py2 ifdefs
via 5723737ebb1 gp: Test samba-tool gpo cse register/unregister/list
via 3eee4415bca gp: samba-tool gpo cse register/unregister/list
from 851127f5c9a Python: remove pydoctor
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit e26a01a48c4a6ca6f9424ced72eda68e6eb1e7e3
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Dec 9 10:36:30 2022 +1300
pidl: avoid py compile issues with --pidl-developer
We get these warnings-as-errors:
librpc/gen_ndr/py_netlogon.c:61903:53: error: stray ‘\’ in program
61903 | PyErr_Format(PyExc_TypeError, "Expected type %s",\ //<PIDL> Parse::Pidl::Samba4::Python::ConvertObjectFromPythonData lib/Parse/Pidl/Samba4/Python.pm:2005
but the '\' is unnecessary and unconventional anyway, since we're in a
function argument list.
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
Autobuild-Date(master): Fri Feb 3 03:27:54 UTC 2023 on atb-devel-224
commit b2a2eeb6f99a7e10412317964de1d50802f4ddf4
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Feb 1 13:19:56 2023 +1300
tevent/pytevent: remove no-op define
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 8f2f3b00c2fb3aade9f136d758e76d4ce9601ae2
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Feb 1 13:17:21 2023 +1300
tevent/pytevent: remove py2 ifdefs
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit c0ef6ca98bb9d494c5810313d8ab30b149e82953
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Feb 1 13:08:27 2023 +1300
tdb/pytdb: remove useless HAVE_ITER non-flag
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit f5555e0ee4cdc1ee50788d5d727f50cb8abde476
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Feb 1 13:06:24 2023 +1300
tdb/pytdb: remove py ifdefs
This already would not compile with Python 2, because Py_TPFLAGS_HAVE_ITER
is not defined
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 310eafdb7b3b594c3e2340520b4eadd1fa813497
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Feb 1 12:55:18 2023 +1300
s4/ndr/py_security: remove python 2 ifdefs
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit ddbe69afbd1b93f69d8ed21b08ad03925de1db73
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Feb 1 12:54:49 2023 +1300
s4/ndr/py_misc: remove python 2 ifdefs
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 38d0147f6a535b09a5b59f0aba8af23c9e0d2115
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Wed Feb 1 12:52:59 2023 +1300
ldb/pyldb: remove py2 ifdefs
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 5723737ebb12d1f6d13863b685bbbd362026dc69
Author: David Mulder <dmulder at samba.org>
Date: Fri Jan 13 09:07:38 2023 -0700
gp: Test samba-tool gpo cse register/unregister/list
Signed-off-by: David Mulder <dmulder at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
commit 3eee4415bca6645e35da93d15d399ac85db9c126
Author: David Mulder <dmulder at samba.org>
Date: Fri Jan 13 09:05:26 2023 -0700
gp: samba-tool gpo cse register/unregister/list
Add samba-tool commands for managing registration
of Client Side Extensions.
Signed-off-by: David Mulder <dmulder at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
lib/ldb/pyldb.c | 22 -------
lib/tdb/pytdb.c | 48 +--------------
lib/tevent/pytevent.c | 17 ------
pidl/lib/Parse/Pidl/Samba4/Python.pm | 8 +--
python/samba/netcmd/gpo.py | 110 +++++++++++++++++++++++++++++++++++
python/samba/tests/samba_tool/gpo.py | 35 +++++++++++
source4/librpc/ndr/py_misc.c | 24 --------
source4/librpc/ndr/py_security.c | 24 --------
8 files changed, 150 insertions(+), 138 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c
index 238a7550deb..7a95a58fa67 100644
--- a/lib/ldb/pyldb.c
+++ b/lib/ldb/pyldb.c
@@ -84,8 +84,6 @@ static struct ldb_message_element *PyObject_AsMessageElement(
const char *attr_name);
static PyTypeObject PyLdbBytesType;
-#if PY_MAJOR_VERSION >= 3
-
#define PYARG_STR_UNI "es"
static PyObject *PyLdbBytes_FromStringAndSize(const char *msg, int size)
@@ -97,12 +95,6 @@ static PyObject *PyLdbBytes_FromStringAndSize(const char *msg, int size)
Py_DECREF(args);
return result;
}
-#else
-#define PyLdbBytes_FromStringAndSize PyString_FromStringAndSize
-
-#define PYARG_STR_UNI "et"
-
-#endif
static PyObject *richcmp(int cmp_val, int op)
{
@@ -4348,7 +4340,6 @@ static PyMethodDef py_ldb_global_methods[] = {
#define MODULE_DOC "An interface to LDB, a LDAP-like API that can either to talk an embedded database (TDB-based) or a standards-compliant LDAP server."
-#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
.m_name = "ldb",
@@ -4356,7 +4347,6 @@ static struct PyModuleDef moduledef = {
.m_size = -1,
.m_methods = py_ldb_global_methods,
};
-#endif
static PyObject* module_init(void)
{
@@ -4394,11 +4384,7 @@ static PyObject* module_init(void)
if (PyType_Ready(&PyLdbControl) < 0)
return NULL;
-#if PY_MAJOR_VERSION >= 3
m = PyModule_Create(&moduledef);
-#else
- m = Py_InitModule3("ldb", py_ldb_global_methods, MODULE_DOC);
-#endif
if (m == NULL)
return NULL;
@@ -4520,16 +4506,8 @@ static PyObject* module_init(void)
return m;
}
-#if PY_MAJOR_VERSION >= 3
PyMODINIT_FUNC PyInit_ldb(void);
PyMODINIT_FUNC PyInit_ldb(void)
{
return module_init();
}
-#else
-void initldb(void);
-void initldb(void)
-{
- module_init();
-}
-#endif
diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c
index e2f8ace227f..85df1b18621 100644
--- a/lib/tdb/pytdb.c
+++ b/lib/tdb/pytdb.c
@@ -31,10 +31,6 @@
/* Include tdb headers */
#include <tdb.h>
-#if PY_MAJOR_VERSION >= 3
-#define Py_TPFLAGS_HAVE_ITER 0
-#endif
-
/* discard signature of 'func' in favour of 'target_sig' */
#define PY_DISCARD_FUNC_SIG(target_sig, func) (target_sig)(void(*)(void))func
@@ -337,26 +333,6 @@ static int obj_contains(PyTdbObject *self, PyObject *py_key)
return 0;
}
-#if PY_MAJOR_VERSION < 3
-static PyObject *obj_has_key(PyTdbObject *self, PyObject *args)
-{
- int ret;
- PyObject *py_key;
- PyErr_TDB_RAISE_IF_CLOSED(self);
-
- if (!PyArg_ParseTuple(args, "O", &py_key))
- return NULL;
-
- ret = obj_contains(self, py_key);
- if (ret == -1)
- return NULL;
- if (ret)
- Py_RETURN_TRUE;
- Py_RETURN_FALSE;
-
-}
-#endif
-
static PyObject *obj_store(PyTdbObject *self, PyObject *args)
{
TDB_DATA key, value;
@@ -566,21 +542,13 @@ static PyMethodDef tdb_object_methods[] = {
"Return the next key in this database." },
{ "delete", (PyCFunction)obj_delete, METH_VARARGS, "S.delete(key) -> None\n"
"Delete an entry." },
-#if PY_MAJOR_VERSION < 3
- { "has_key", (PyCFunction)obj_has_key, METH_VARARGS, "S.has_key(key) -> None\n"
- "Check whether key exists in this database." },
-#endif
{ "store", (PyCFunction)obj_store, METH_VARARGS, "S.store(key, data, flag=REPLACE) -> None"
"Store data." },
{ "storev", (PyCFunction)obj_storev, METH_VARARGS, "S.storev(key, data, flag=REPLACE) -> None"
"Store several data." },
{ "add_flags", (PyCFunction)obj_add_flags, METH_VARARGS, "S.add_flags(flags) -> None" },
{ "remove_flags", (PyCFunction)obj_remove_flags, METH_VARARGS, "S.remove_flags(flags) -> None" },
-#if PY_MAJOR_VERSION >= 3
{ "keys", (PyCFunction)tdb_object_iter, METH_NOARGS, "S.keys() -> iterator" },
-#else
- { "iterkeys", (PyCFunction)tdb_object_iter, METH_NOARGS, "S.iterkeys() -> iterator" },
-#endif
{ "clear", (PyCFunction)obj_clear, METH_NOARGS, "S.clear() -> None\n"
"Wipe the entire database." },
{ "repack", (PyCFunction)obj_repack, METH_NOARGS, "S.repack() -> None\n"
@@ -784,7 +752,7 @@ static PyTypeObject PyTdb = {
.tp_dealloc = (destructor)tdb_object_dealloc,
.tp_as_mapping = &tdb_object_mapping,
.tp_as_sequence = &tdb_object_seq,
- .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_ITER,
+ .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
.tp_iter = PY_DISCARD_FUNC_SIG(getiterfunc,tdb_object_iter),
};
@@ -801,7 +769,6 @@ static PyMethodDef tdb_methods[] = {
#define MODULE_DOC "simple key-value database that supports multiple writers."
-#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
.m_name = "tdb",
@@ -809,7 +776,6 @@ static struct PyModuleDef moduledef = {
.m_size = -1,
.m_methods = tdb_methods,
};
-#endif
PyObject* module_init(void);
PyObject* module_init(void)
@@ -822,11 +788,7 @@ PyObject* module_init(void)
if (PyType_Ready(&PyTdbIterator) < 0)
return NULL;
-#if PY_MAJOR_VERSION >= 3
m = PyModule_Create(&moduledef);
-#else
- m = Py_InitModule3("tdb", tdb_methods, MODULE_DOC);
-#endif
if (m == NULL)
return NULL;
@@ -861,16 +823,8 @@ PyObject* module_init(void)
}
-#if PY_MAJOR_VERSION >= 3
PyMODINIT_FUNC PyInit_tdb(void);
PyMODINIT_FUNC PyInit_tdb(void)
{
return module_init();
}
-#else
-void inittdb(void);
-void inittdb(void)
-{
- module_init();
-}
-#endif
diff --git a/lib/tevent/pytevent.c b/lib/tevent/pytevent.c
index 6e8c8b72e1c..1af6f16c0fb 100644
--- a/lib/tevent/pytevent.c
+++ b/lib/tevent/pytevent.c
@@ -26,9 +26,6 @@
#include "replace.h"
#include <tevent.h>
-#if PY_MAJOR_VERSION >= 3
-#define PyLong_FromLong PyLong_FromLong
-#endif
/* discard signature of 'func' in favour of 'target_sig' */
#define PY_DISCARD_FUNC_SIG(target_sig, func) (target_sig)(void(*)(void))func
@@ -736,7 +733,6 @@ static PyMethodDef tevent_methods[] = {
#define MODULE_DOC PyDoc_STR("Python wrapping of talloc-maintained objects.")
-#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
.m_name = "_tevent",
@@ -744,7 +740,6 @@ static struct PyModuleDef moduledef = {
.m_size = -1,
.m_methods = tevent_methods,
};
-#endif
PyObject * module_init(void);
PyObject * module_init(void)
@@ -769,11 +764,7 @@ PyObject * module_init(void)
if (PyType_Ready(&TeventFd_Type) < 0)
return NULL;
-#if PY_MAJOR_VERSION >= 3
m = PyModule_Create(&moduledef);
-#else
- m = Py_InitModule3("_tevent", tevent_methods, MODULE_DOC);
-#endif
if (m == NULL)
return NULL;
@@ -800,16 +791,8 @@ PyObject * module_init(void)
return m;
}
-#if PY_MAJOR_VERSION >= 3
PyMODINIT_FUNC PyInit__tevent(void);
PyMODINIT_FUNC PyInit__tevent(void)
{
return module_init();
}
-#else
-void init_tevent(void);
-void init_tevent(void)
-{
- module_init();
-}
-#endif
diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm b/pidl/lib/Parse/Pidl/Samba4/Python.pm
index 5c4d3e8e087..03a901cc24d 100644
--- a/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -1747,7 +1747,7 @@ sub ConvertObjectFromPythonData($$$$$$;$$)
$self->pidl("}");
$self->pidl("if (test_var > uint_max) {");
$self->indent;
- $self->pidl("PyErr_Format(PyExc_OverflowError, \"Expected type %s within range 0 - %llu, got %llu\",\\");
+ $self->pidl("PyErr_Format(PyExc_OverflowError, \"Expected type %s within range 0 - %llu, got %llu\",");
$self->pidl(" PyLong_Type.tp_name, uint_max, test_var);");
$self->pidl($fail);
$self->deindent;
@@ -1756,7 +1756,7 @@ sub ConvertObjectFromPythonData($$$$$$;$$)
$self->deindent;
$self->pidl("} else {");
$self->indent;
- $self->pidl("PyErr_Format(PyExc_TypeError, \"Expected type %s\",\\");
+ $self->pidl("PyErr_Format(PyExc_TypeError, \"Expected type %s\",");
$self->pidl(" PyLong_Type.tp_name);");
$self->pidl($fail);
$self->deindent;
@@ -1786,7 +1786,7 @@ sub ConvertObjectFromPythonData($$$$$$;$$)
$self->pidl("}");
$self->pidl("if (test_var < int_min || test_var > int_max) {");
$self->indent;
- $self->pidl("PyErr_Format(PyExc_OverflowError, \"Expected type %s within range %lld - %lld, got %lld\",\\");
+ $self->pidl("PyErr_Format(PyExc_OverflowError, \"Expected type %s within range %lld - %lld, got %lld\",");
$self->pidl(" PyLong_Type.tp_name, int_min, int_max, test_var);");
$self->pidl($fail);
$self->deindent;
@@ -1795,7 +1795,7 @@ sub ConvertObjectFromPythonData($$$$$$;$$)
$self->deindent;
$self->pidl("} else {");
$self->indent;
- $self->pidl("PyErr_Format(PyExc_TypeError, \"Expected type %s\",\\");
+ $self->pidl("PyErr_Format(PyExc_TypeError, \"Expected type %s\",");
$self->pidl(" PyLong_Type.tp_name);");
$self->pidl($fail);
$self->deindent;
diff --git a/python/samba/netcmd/gpo.py b/python/samba/netcmd/gpo.py
index bfd3e0f05f7..340f8f55e5e 100644
--- a/python/samba/netcmd/gpo.py
+++ b/python/samba/netcmd/gpo.py
@@ -84,6 +84,8 @@ from samba.netcmd.gpcommon import (
)
from samba.policies import RegistryGroupPolicies
from samba.dcerpc.misc import REG_MULTI_SZ
+from samba.gp.gpclass import register_gp_extension, list_gp_extensions, \
+ unregister_gp_extension
def gpo_flags_string(value):
@@ -4273,6 +4275,113 @@ samba-tool gpo manage access remove {31B2F340-016D-11D2-945F-00C04FB984F9} allow
"not have sufficient privileges")
raise
+class cmd_cse_register(Command):
+ """Register a Client Side Extension (CSE) on the current host
+
+This command takes a CSE filename as an arguement, and registers it for
+applying policy on the current host. This is not necessary for CSEs which
+are distributed with the current version of Samba, but is useful for installing
+experimental CSEs or custom built CSEs.
+
+Example:
+samba-tool gpo cse register ./gp_chromium_ext.py gp_chromium_ext --machine
+ """
+
+ synopsis = "%prog <cse_file> <cse_name> [options]"
+
+ takes_optiongroups = {
+ "sambaopts": options.SambaOptions,
+ "versionopts": options.VersionOptions,
+ }
+
+ takes_options = [
+ Option("--machine", default=False, action='store_true',
+ help="Whether to register the CSE as Machine policy"),
+ Option("--user", default=False, action='store_true',
+ help="Whether to register the CSE as User policy"),
+ ]
+
+ takes_args = ["cse_file", "cse_name"]
+
+ def run(self, cse_file, cse_name, machine=False, user=False,
+ sambaopts=None, versionopts=None):
+ self.lp = sambaopts.get_loadparm()
+
+ if machine == False and user == False:
+ raise CommandError("Either --machine or --user must be selected")
+
+ ext_guid = "{%s}" % str(uuid.uuid4())
+ ext_path = os.path.realpath(cse_file)
+ ret = register_gp_extension(ext_guid, cse_name, ext_path,
+ smb_conf=self.lp.configfile,
+ machine=machine, user=user)
+ if not ret:
+ raise CommandError('Failed to register CSE "%s"' % cse_name)
+
+class cmd_cse_list(Command):
+ """List the registered Client Side Extensions (CSEs) on the current host
+
+This command lists the currently registered CSEs on the host.
+
+Example:
+samba-tool gpo cse list
+ """
+
+ synopsis = "%prog [options]"
+
+ takes_optiongroups = {
+ "sambaopts": options.SambaOptions,
+ "versionopts": options.VersionOptions,
+ }
+
+ def run(self, sambaopts=None, versionopts=None):
+ self.lp = sambaopts.get_loadparm()
+
+ cses = list_gp_extensions(self.lp.configfile)
+ for guid, gp_ext in cses.items():
+ self.outf.write("UniqueGUID : %s\n" % guid)
+ self.outf.write("FileName : %s\n" % gp_ext['DllName'])
+ self.outf.write("ProcessGroupPolicy : %s\n" % \
+ gp_ext['ProcessGroupPolicy'])
+ self.outf.write("MachinePolicy : %s\n" % \
+ str(gp_ext['MachinePolicy']))
+ self.outf.write("UserPolicy : %s\n\n" % \
+ str(gp_ext['UserPolicy']))
+
+class cmd_cse_unregister(Command):
+ """Unregister a Client Side Extension (CSE) from the current host
+
+This command takes a unique GUID as an arguement (representing a registered
+CSE), and unregisters it for applying policy on the current host. Use the
+`samba-tool gpo cse list` command to determine the unique GUIDs of CSEs.
+
+Example:
+samba-tool gpo cse unregister {3F60F344-92BF-11ED-A1EB-0242AC120002}
+ """
+
+ synopsis = "%prog <guid> [options]"
+
+ takes_optiongroups = {
+ "sambaopts": options.SambaOptions,
+ "versionopts": options.VersionOptions,
+ }
+
+ takes_args = ["guid"]
+
+ def run(self, guid, sambaopts=None, versionopts=None):
+ self.lp = sambaopts.get_loadparm()
+
+ ret = unregister_gp_extension(guid, self.lp.configfile)
+ if not ret:
+ raise CommandError('Failed to unregister CSE "%s"' % guid)
+
+class cmd_cse(SuperCommand):
+ """Manage Client Side Extensions"""
+ subcommands = {}
+ subcommands["register"] = cmd_cse_register()
+ subcommands["list"] = cmd_cse_list()
+ subcommands["unregister"] = cmd_cse_unregister()
+
class cmd_access(SuperCommand):
"""Manage Host Access Group Policy Objects"""
subcommands = {}
@@ -4317,3 +4426,4 @@ class cmd_gpo(SuperCommand):
subcommands["restore"] = cmd_restore()
subcommands["admxload"] = cmd_admxload()
subcommands["manage"] = cmd_manage()
+ subcommands["cse"] = cmd_cse()
diff --git a/python/samba/tests/samba_tool/gpo.py b/python/samba/tests/samba_tool/gpo.py
index ae19a573711..d192c1b8115 100644
--- a/python/samba/tests/samba_tool/gpo.py
+++ b/python/samba/tests/samba_tool/gpo.py
@@ -34,6 +34,8 @@ from io import StringIO
import xml.etree.ElementTree as etree
from tempfile import NamedTemporaryFile
from time import sleep
+import re
+from samba.gp.gpclass import check_guid
gpo_load_json = \
b"""
@@ -1658,6 +1660,39 @@ class GpoCmdTestCase(SambaToolCmdTest):
self.assertNotIn(ext_guids[0], out, 'Machine extension not unloaded')
self.assertNotIn(ext_guids[1], out, 'User extension not unloaded')
+ def test_cse_register_unregister_list(self):
+ with NamedTemporaryFile() as f:
+ (result, out, err) = self.runsublevelcmd("gpo", ("cse",
+ "register"),
+ f.name, 'gp_test_ext',
+ '--machine')
+ self.assertCmdSuccess(result, out, err, 'CSE register failed')
+
+ (result, out, err) = self.runsublevelcmd("gpo", ("cse",
+ "list"))
+ self.assertIn(f.name, out, 'The test cse was not found')
+ self.assertIn('ProcessGroupPolicy : gp_test_ext', out,
+ 'The test cse was not found')
+ self.assertIn('MachinePolicy : True', out,
+ 'The test cse was not enabled')
+ self.assertIn('UserPolicy : False', out,
+ 'The test cse should not have User policy enabled')
+ cse_ext = re.findall('^UniqueGUID\s+:\s+(.*)', out)
+ self.assertEquals(len(cse_ext), 1,
+ 'The test cse GUID was not found')
+ cse_ext = cse_ext[0]
+ self.assertTrue(check_guid(cse_ext),
+ 'The test cse GUID was not formatted correctly')
+
+ (result, out, err) = self.runsublevelcmd("gpo", ("cse",
+ "unregister"),
+ cse_ext)
+ self.assertCmdSuccess(result, out, err, 'CSE unregister failed')
+
+ (result, out, err) = self.runsublevelcmd("gpo", ("cse",
+ "list"))
+ self.assertNotIn(f.name, out, 'The test cse was still found')
+
def setUp(self):
"""set up a temporary GPO to work with"""
super(GpoCmdTestCase, self).setUp()
diff --git a/source4/librpc/ndr/py_misc.c b/source4/librpc/ndr/py_misc.c
index ea2092a5182..99100875689 100644
--- a/source4/librpc/ndr/py_misc.c
+++ b/source4/librpc/ndr/py_misc.c
@@ -21,7 +21,6 @@
#include "python/py3compat.h"
#include "librpc/gen_ndr/misc.h"
-#if PY_MAJOR_VERSION >= 3
static PyObject *py_GUID_richcmp(PyObject *py_self, PyObject *py_other, int op)
{
int ret;
@@ -45,25 +44,6 @@ static PyObject *py_GUID_richcmp(PyObject *py_self, PyObject *py_other, int op)
Py_INCREF(Py_NotImplemented);
return Py_NotImplemented;
}
-#else
-static int py_GUID_cmp(PyObject *py_self, PyObject *py_other)
-{
- int ret;
- struct GUID *self = pytalloc_get_ptr(py_self), *other;
- other = pytalloc_get_ptr(py_other);
- if (other == NULL)
- return -1;
-
- ret = GUID_compare(self, other);
- if (ret < 0) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list