summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2012-04-10 07:44:21 -0400
committerRob Crittenden <rcritten@redhat.com>2012-04-09 21:54:07 -0400
commit1431c80b3c2a256bb6c10cf042f7671004695a9f (patch)
treedef20d8af18b202cac8bd3007044972617cdd268 /ipalib
parent6e5c8b25bffa2b62a2233c0347c2ed3dd081d4a9 (diff)
downloadfreeipa-1431c80b3c2a256bb6c10cf042f7671004695a9f.tar.gz
freeipa-1431c80b3c2a256bb6c10cf042f7671004695a9f.tar.xz
freeipa-1431c80b3c2a256bb6c10cf042f7671004695a9f.zip
Convert --setattr values for attributes marked no_update
Attribute Patrams marked no_update never get cloned to Update commands, and thus never receive the `attribute` flag. This makes their `encode` method a no-op, which meant they don't get properly encoded when used with --setattr, making the --setattr fail. Introduce a `force` argument to encode, which overrides checking for the attribute flag. Use this in set/add/delattr normalization, where we know we are dealing with attributes. https://fedorahosted.org/freeipa/ticket/2616
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/parameters.py6
-rw-r--r--ipalib/plugins/baseldap.py7
2 files changed, 10 insertions, 3 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