summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2016-06-30 15:45:54 +0200
committerJan Cholasta <jcholast@redhat.com>2016-07-01 09:40:04 +0200
commitcf713ac28362c40e6414e9bf9701e58e36c07deb (patch)
tree57ca75061aaea9d275dcfdf1f1b081690e247106
parente5635f7ef423c7b203004a0cbf625360d351a78e (diff)
downloadfreeipa-cf713ac28362c40e6414e9bf9701e58e36c07deb.zip
freeipa-cf713ac28362c40e6414e9bf9701e58e36c07deb.tar.gz
freeipa-cf713ac28362c40e6414e9bf9701e58e36c07deb.tar.xz
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.py10
-rw-r--r--ipalib/frontend.py19
2 files changed, 21 insertions, 8 deletions
diff --git a/ipaclient/frontend.py b/ipaclient/frontend.py
index a869e33..94d6946 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 05d19e4..f324add 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