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>
This commit is contained in:
Jan Cholasta 2016-06-30 15:45:54 +02:00
parent e5635f7ef4
commit cf713ac283
2 changed files with 21 additions and 8 deletions

View File

@ -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):

View File

@ -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