From 81020a2ffaa13edbdaa4ff377b748fb623fe0c09 Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Mon, 14 Feb 2011 10:18:31 -0500 Subject: A mod command should not be able to remove a required attribute. Some attribute enforcement is done by schema, others should be done by the required option in a Parameter. description, for example, is required by many plugins but not the schema. We need to enforce in the framework that required options are provided. After all the setattr/addattr work is done run through the modifications and ensure that no required values will be removed. ticket 852 --- ipalib/plugins/baseldap.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'ipalib/plugins/baseldap.py') diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py index 6817af41..f403990f 100644 --- a/ipalib/plugins/baseldap.py +++ b/ipalib/plugins/baseldap.py @@ -416,6 +416,14 @@ def _check_single_value_attrs(params, entry_attrs): if a in params and not params[a].multivalue: raise errors.OnlyOneValueAllowed(attr=a) +# setattr or --option='' can cause parameters to be empty that are otherwise +# required, make sure we enforce that. +def _check_empty_attrs(params, entry_attrs): + for (a, v) in entry_attrs.iteritems(): + if v is None or (isinstance(v, basestring) and len(v) == 0): + if a in params and params[a].required: + raise errors.RequirementError(name=a) + class CallbackInterface(Method): """ @@ -799,6 +807,7 @@ class LDAPUpdate(LDAPQuery, crud.Update): ) _check_single_value_attrs(self.params, entry_attrs) + _check_empty_attrs(self.obj.params, entry_attrs) rdnupdate = False try: -- cgit