This is an automated email from the git hooks/post-receive script.
firstyear pushed a commit to branch master
in repository lib389.
commit 65499d461d28f9debf1671b6a07c9fc99e3beb66
Author: Ilias Stamatis <stamatis.iliass(a)gmail.com>
Date: Mon Jun 19 04:00:21 2017 +0300
Issue 31 - Add status command and SkipNested support for MemberOf
Description:
- Add a generic function for displaying plugin's status.
- Make sure that existing Plugin.status() works properly with py3.
- Add support for configuring memberOfSkipNested attr.
- Add dsconf support and cli tests for memberOfSkipNested attr.
- Define must-have attributes for MemberOf.
https://pagure.io/lib389/issue/31
Author: Ilias95
Review by: wibrown (Thanks, great work!)
---
lib389/cli_conf/plugin.py | 7 ++++++
lib389/cli_conf/plugins/memberof.py | 33 +++++++++++++++++++++++++-
lib389/plugins.py | 22 +++++++++++++----
lib389/tests/cli/conf_plugins/memberof_test.py | 31 +++++++++++++++++++++++-
4 files changed, 86 insertions(+), 7 deletions(-)
diff --git a/lib389/cli_conf/plugin.py b/lib389/cli_conf/plugin.py
index 2d02f87..70b75a0 100644
--- a/lib389/cli_conf/plugin.py
+++ b/lib389/cli_conf/plugin.py
@@ -76,6 +76,13 @@ def generic_disable(inst, basedn, log, args):
plugin.disable()
log.info("Disabled %s", plugin.rdn)
+def generic_status(inst, basedn, log, args):
+ plugin = args.plugin_cls(inst)
+ if plugin.status() == True:
+ log.info("%s is enabled", plugin.rdn)
+ else:
+ log.info("%s is disabled", plugin.rdn)
+
def create_parser(subparsers):
plugin_parser = subparsers.add_parser('plugin', help="Manage plugins
available on the server")
diff --git a/lib389/cli_conf/plugins/memberof.py b/lib389/cli_conf/plugins/memberof.py
index ceaecad..943a20d 100644
--- a/lib389/cli_conf/plugins/memberof.py
+++ b/lib389/cli_conf/plugins/memberof.py
@@ -9,7 +9,8 @@
import ldap
from lib389.plugins import MemberOfPlugin
-from lib389.cli_conf.plugin import generic_enable, generic_disable, generic_show
+from lib389.cli_conf.plugin import (
+ generic_enable, generic_disable, generic_status, generic_show)
def manage_attr(inst, basedn, log, args):
@@ -75,6 +76,24 @@ def disable_allbackends(inst, basedn, log, args):
plugin.disable_allbackends()
log.info("memberOfAllBackends disabled successfully")
+def display_skipnested(inst, basedn, log, args):
+ plugin = MemberOfPlugin(inst)
+ val = plugin.get_skipnested_formatted()
+ if not val:
+ log.info("memberOfSkipNested is not set")
+ else:
+ log.info(val)
+
+def enable_skipnested(inst, basedn, log, args):
+ plugin = MemberOfPlugin(inst)
+ plugin.enable_skipnested()
+ log.info("memberOfSkipNested set successfully")
+
+def disable_skipnested(inst, basedn, log, args):
+ plugin = MemberOfPlugin(inst)
+ plugin.disable_skipnested()
+ log.info("memberOfSkipNested unset successfully")
+
def manage_autoaddoc(inst, basedn, log, args):
if args.value == "del":
remove_autoaddoc(inst, basedn, log, args)
@@ -185,6 +204,9 @@ def create_parser(subparsers):
disable_parser = subcommands.add_parser('disable', help='disable memberof
plugin')
disable_parser.set_defaults(func=generic_disable, plugin_cls=MemberOfPlugin)
+ status_parser = subcommands.add_parser('status', help='display memberof
plugin status')
+ status_parser.set_defaults(func=generic_status, plugin_cls=MemberOfPlugin)
+
attr_parser = subcommands.add_parser('attr', help='get or set
memberofattr')
attr_parser.set_defaults(func=manage_attr)
attr_parser.add_argument('value', nargs='?', help='The value to
set as memberofattr')
@@ -209,6 +231,15 @@ def create_parser(subparsers):
off_allbackends_parser = allbackends_subcommands.add_parser('off',
help='disable all backends for memberof')
off_allbackends_parser.set_defaults(func=disable_allbackends)
+ skipnested_parser = subcommands.add_parser('skipnested', help='get or
manage memberofskipnested')
+ skipnested_parser.set_defaults(func=display_skipnested)
+ # argparse doesn't support optional subparsers in python2!
+ skipnested_subcommands = skipnested_parser.add_subparsers(help='action')
+ on_skipnested_parser = skipnested_subcommands.add_parser('on', help='skip
nested groups for memberof')
+ on_skipnested_parser.set_defaults(func=enable_skipnested)
+ off_skipnested_parser = skipnested_subcommands.add_parser('off',
help="don't skip nested groups for memberof")
+ off_skipnested_parser.set_defaults(func=disable_skipnested)
+
autoaddoc_parser = subcommands.add_parser('autoaddoc', help='get or set
memberofautoaddoc')
autoaddoc_parser.set_defaults(func=manage_autoaddoc)
autoaddoc_parser.add_argument('value', nargs='?',
choices=['nsmemberof', 'inetuser', 'inetadmin', 'del'],
diff --git a/lib389/plugins.py b/lib389/plugins.py
index bde4c92..57e983e 100644
--- a/lib389/plugins.py
+++ b/lib389/plugins.py
@@ -8,10 +8,11 @@
import ldap
import copy
+
from lib389.properties import *
from lib389._constants import *
-
from lib389._mapped_object import DSLdapObjects, DSLdapObject
+from lib389.utils import ensure_str
class Plugin(DSLdapObject):
_plugin_properties = {
@@ -42,9 +43,7 @@ class Plugin(DSLdapObject):
self.set('nsslapd-pluginEnabled', 'off')
def status(self):
- if self.get_attr_val('nsslapd-pluginEnabled') == 'on':
- return True
- return False
+ return ensure_str(self.get_attr_val('nsslapd-pluginEnabled')) ==
'on'
def create(self, rdn=None, properties=None, basedn=None):
# When we create plugins, we don't want people to have to consider all
@@ -167,7 +166,8 @@ class MemberOfPlugin(Plugin):
def __init__(self, instance, dn="cn=MemberOf Plugin,cn=plugins,cn=config",
batch=False):
super(MemberOfPlugin, self).__init__(instance, dn, batch)
- self._create_objectclasses = ['top', 'nsSlapdPlugin',
'extensibleObject']
+ self._create_objectclasses.extend(['extensibleObject'])
+ self._must_attributes.extend(['memberOfGroupAttr',
'memberOfAttr'])
def get_attr(self):
return self.get_attr_val('memberofattr')
@@ -202,6 +202,18 @@ class MemberOfPlugin(Plugin):
def disable_allbackends(self):
self.set('memberofallbackends', 'off')
+ def get_skipnested(self):
+ return self.get_attr_val('memberofskipnested')
+
+ def get_skipnested_formatted(self):
+ return self.display_attr('memberofskipnested')
+
+ def enable_skipnested(self):
+ self.set('memberofskipnested', 'on')
+
+ def disable_skipnested(self):
+ self.set('memberofskipnested', 'off')
+
def get_autoaddoc(self):
return self.get_attr_val('memberofautoaddoc')
diff --git a/lib389/tests/cli/conf_plugins/memberof_test.py
b/lib389/tests/cli/conf_plugins/memberof_test.py
index 4c8296a..e05b629 100644
--- a/lib389/tests/cli/conf_plugins/memberof_test.py
+++ b/lib389/tests/cli/conf_plugins/memberof_test.py
@@ -24,7 +24,7 @@ def topology(request):
# At the moment memberof plugin needs to be enabled in order to perform
# syntax checking. Additionally, we have to restart the server in order
- # for the action of enabling the pluging to take effect.
+ # for the action of enabling the plugin to take effect.
plugin.enable()
topology.standalone.restart()
topology.logcap.flush()
@@ -153,6 +153,35 @@ def test_disable_all_backends(topology):
assert topology.logcap.contains(": off")
topology.logcap.flush()
+def test_get_skipnested_when_not_set(topology):
+ args = FakeArgs()
+
+ memberof_cli.display_skipnested(topology.standalone, None, topology.logcap.log,
args)
+ assert topology.logcap.contains("memberOfSkipNested is not set")
+ topology.logcap.flush()
+
+def test_set_skipnested(topology):
+ args = FakeArgs()
+
+ memberof_cli.enable_skipnested(topology.standalone, None, topology.logcap.log, args)
+ assert topology.logcap.contains("set successfully")
+ topology.logcap.flush()
+
+ memberof_cli.display_skipnested(topology.standalone, None, topology.logcap.log,
args)
+ assert topology.logcap.contains(": on")
+ topology.logcap.flush()
+
+def test_unset_skipnested(topology):
+ args = FakeArgs()
+
+ memberof_cli.disable_skipnested(topology.standalone, None, topology.logcap.log,
args)
+ assert topology.logcap.contains("unset successfully")
+ topology.logcap.flush()
+
+ memberof_cli.display_skipnested(topology.standalone, None, topology.logcap.log,
args)
+ assert topology.logcap.contains(": off")
+ topology.logcap.flush()
+
def test_set_autoaddoc(topology):
args = FakeArgs()
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.