summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipalib/parameters.py6
-rw-r--r--ipalib/plugins/baseldap.py7
-rw-r--r--tests/test_xmlrpc/test_attr.py2
-rw-r--r--tests/test_xmlrpc/test_hbac_plugin.py21
4 files changed, 32 insertions, 4 deletions
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 60fb50236..5c55d8bcc 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -895,7 +895,7 @@ class Param(ReadOnly):
rule=rule,
)
- def encode(self, value):
+ def encode(self, value, force=False):
"""
Encode Python native type value to chosen backend format. Encoding is
applied for parameters representing actual attributes (attribute=True).
@@ -909,8 +909,10 @@ class Param(ReadOnly):
`Param._encode()`.
:param value: Encoded value
+ :param force: If set to true, encoding takes place even for Params
+ not marked as attribute
"""
- if not self.attribute: #pylint: disable=E1101
+ if not self.attribute and not force: #pylint: disable=E1101
return value
if self.encoder is not None: #pylint: disable=E1101
return self.encoder(value) #pylint: disable=E1101
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index daf1b07fb..3e7923479 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -937,7 +937,12 @@ last, after all sets and adds."""),
raise errors.ValidationError(name=attr, error=err.error)
except errors.ConversionError, err:
raise errors.ConversionError(name=attr, error=err.error)
- value = param.encode(value)
+ # FIXME: We use `force` when encoding because we know this is
+ # an attribute, even if it does not have the `attribute` flag
+ # set. This happens with no_update attributes, which are
+ # not cloned to Update commands. This cloning is where the flag
+ # gets set.
+ value = param.encode(value, force=True)
entry_attrs[attr] = value
else:
# unknown attribute: remove duplicite and invalid values
diff --git a/tests/test_xmlrpc/test_attr.py b/tests/test_xmlrpc/test_attr.py
index e6872a67a..c19a6948c 100644
--- a/tests/test_xmlrpc/test_attr.py
+++ b/tests/test_xmlrpc/test_attr.py
@@ -433,7 +433,7 @@ class test_attr(Declarative):
command=(
'user_mod', [user1], dict(
addattr=u'nsaccountlock=FaLsE',
- delattr=u'nsaccountlock=True')
+ delattr=u'nsaccountlock=TRUE')
),
expected=dict(
result=dict(
diff --git a/tests/test_xmlrpc/test_hbac_plugin.py b/tests/test_xmlrpc/test_hbac_plugin.py
index 78c4973c9..c7cb55bad 100644
--- a/tests/test_xmlrpc/test_hbac_plugin.py
+++ b/tests/test_xmlrpc/test_hbac_plugin.py
@@ -430,6 +430,27 @@ class test_hbac(XMLRPC_test):
# FIXME: Should this be 'enabled' or 'TRUE'?
assert_attr_equal(entry, 'ipaenabledflag', 'TRUE')
+ def test_ea_hbacrule_disable_setattr(self):
+ """
+ Test disabling HBAC rule using setattr
+ """
+ command_result = api.Command['hbacrule_mod'](
+ self.rule_name, setattr=u'ipaenabledflag=false')
+ assert command_result['result']['ipaenabledflag'] == (u'FALSE',)
+ entry = api.Command['hbacrule_show'](self.rule_name)['result']
+ assert_attr_equal(entry, 'ipaenabledflag', 'FALSE')
+
+ def test_eb_hbacrule_enable_setattr(self):
+ """
+ Test enabling HBAC rule using setattr
+ """
+ command_result = api.Command['hbacrule_mod'](
+ self.rule_name, setattr=u'ipaenabledflag=1')
+ assert command_result['result']['ipaenabledflag'] == (u'TRUE',)
+ # check it's really enabled
+ entry = api.Command['hbacrule_show'](self.rule_name)['result']
+ assert_attr_equal(entry, 'ipaenabledflag', 'TRUE')
+
@raises(errors.MutuallyExclusiveError)
def test_f_hbacrule_exclusiveuser(self):
"""