diff options
author | Jan Cholasta <jcholast@redhat.com> | 2016-06-30 15:45:54 +0200 |
---|---|---|
committer | Jan Cholasta <jcholast@redhat.com> | 2016-07-01 09:40:04 +0200 |
commit | cf713ac28362c40e6414e9bf9701e58e36c07deb (patch) | |
tree | 57ca75061aaea9d275dcfdf1f1b081690e247106 | |
parent | e5635f7ef423c7b203004a0cbf625360d351a78e (diff) | |
download | freeipa-cf713ac28362c40e6414e9bf9701e58e36c07deb.tar.gz freeipa-cf713ac28362c40e6414e9bf9701e58e36c07deb.tar.xz freeipa-cf713ac28362c40e6414e9bf9701e58e36c07deb.zip |
client: do not crash when overriding remote command as method
Do not crash during API initialization when overriding remote command that
is not a method with MethodOverride.
https://fedorahosted.org/freeipa/ticket/4739
Reviewed-By: David Kupka <dkupka@redhat.com>
-rw-r--r-- | ipaclient/frontend.py | 10 | ||||
-rw-r--r-- | ipalib/frontend.py | 19 |
2 files changed, 21 insertions, 8 deletions
diff --git a/ipaclient/frontend.py b/ipaclient/frontend.py index a869e337a..94d694631 100644 --- a/ipaclient/frontend.py +++ b/ipaclient/frontend.py @@ -55,11 +55,17 @@ class CommandOverride(Command): class MethodOverride(CommandOverride, Method): @property def obj_name(self): - return self.next.obj_name + try: + return self.next.obj_name + except AttributeError: + return None @property def attr_name(self): - return self.next.attr_name + try: + return self.next.attr_name + except AttributeError: + return None @property def obj(self): diff --git a/ipalib/frontend.py b/ipalib/frontend.py index 05d19e4f5..f324add29 100644 --- a/ipalib/frontend.py +++ b/ipalib/frontend.py @@ -1343,7 +1343,10 @@ class Attribute(Plugin): @property def obj_full_name(self): - return self.obj.full_name + if self.obj is not None: + return self.obj.full_name + else: + return None @property def attr_name(self): @@ -1353,7 +1356,10 @@ class Attribute(Plugin): @property def obj(self): - return self.api.Object[self.obj_name, self.obj_version] + if self.obj_name is not None and self.obj_version is not None: + return self.api.Object[self.obj_name, self.obj_version] + else: + return None class Method(Attribute, Command): @@ -1426,10 +1432,11 @@ class Method(Attribute, Command): extra_args_first = False def get_output_params(self): - for param in self.obj.params(): - if 'no_output' in param.flags: - continue - yield param + if self.obj is not None: + for param in self.obj.params(): + if 'no_output' in param.flags: + continue + yield param for param in super(Method, self).get_output_params(): yield param |