URL: https://github.com/freeipa/freeipa/pull/1033
Author: felipevolpone
 Title: #1033:  Fixing internal error in param-{find,show}
Action: opened

PR body:
"""
Fixing internal error in param-{find,show} with nonexistent object and showing 
properly error message.

Since PR #1013 probably won't be updated anymore, I created this one with 
previous work plus some additional changes.

https://pagure.io/freeipa/issue/7134

"""

To pull the PR as Git branch:
git remote add ghfreeipa https://github.com/freeipa/freeipa
git fetch ghfreeipa pull/1033/head:pr1033
git checkout pr1033
From 986b15d057e520d3e4fedb3c20fde8831ea6ee49 Mon Sep 17 00:00:00 2001
From: David Kupka <dku...@redhat.com>
Date: Tue, 29 Aug 2017 16:49:36 +0200
Subject: [PATCH 1/2] schema: Fix internal error in param-{find,show} with
 nonexistent object

---
 ipaserver/plugins/schema.py | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/ipaserver/plugins/schema.py b/ipaserver/plugins/schema.py
index 1dbbec5f03..2ed669ded1 100644
--- a/ipaserver/plugins/schema.py
+++ b/ipaserver/plugins/schema.py
@@ -624,16 +624,25 @@ def _get_obj(self, metaobj_param, **kwargs):
         return obj
 
     def _retrieve(self, metaobjectfull_name, name, **kwargs):
+        found = False
         try:
             metaobj = self.api.Command[metaobjectfull_name]
             plugin = self.api.Object['command']
         except KeyError:
-            metaobj = self.api.Object[metaobjectfull_name]
-            plugin = self.api.Object['class']
+            try:
+                metaobj = self.api.Object[metaobjectfull_name]
+                plugin = self.api.Object['class']
+            except KeyError:
+                pass
+            else:
+                found = True
+        else:
+            found = True
 
-        for param in plugin._iter_params(metaobj):
-            if param.name == name:
-                return metaobj, param
+        if found:
+            for param in plugin._iter_params(metaobj):
+                if param.name == name:
+                    return metaobj, param
 
         raise errors.NotFound(
             reason=_("%(pkey)s: %(oname)s not found") % {
@@ -646,8 +655,11 @@ def _search(self, metaobjectfull_name, **kwargs):
             metaobj = self.api.Command[metaobjectfull_name]
             plugin = self.api.Object['command']
         except KeyError:
-            metaobj = self.api.Object[metaobjectfull_name]
-            plugin = self.api.Object['class']
+            try:
+                metaobj = self.api.Object[metaobjectfull_name]
+                plugin = self.api.Object['class']
+            except KeyError:
+                return tuple()
 
         return ((metaobj, param) for param in plugin._iter_params(metaobj))
 

From 4699d07164d978d22aa1eb26af4d2d37a93636cf Mon Sep 17 00:00:00 2001
From: Felipe Volpone <fbarr...@redhat.com>
Date: Fri, 1 Sep 2017 13:44:08 -0300
Subject: [PATCH 2/2] Show error properly when name or full name are not valid

---
 ipaserver/plugins/schema.py | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/ipaserver/plugins/schema.py b/ipaserver/plugins/schema.py
index 2ed669ded1..f77418fe75 100644
--- a/ipaserver/plugins/schema.py
+++ b/ipaserver/plugins/schema.py
@@ -625,18 +625,21 @@ def _get_obj(self, metaobj_param, **kwargs):
 
     def _retrieve(self, metaobjectfull_name, name, **kwargs):
         found = False
+
         try:
             metaobj = self.api.Command[metaobjectfull_name]
-            plugin = self.api.Object['command']
         except KeyError:
-            try:
-                metaobj = self.api.Object[metaobjectfull_name]
-                plugin = self.api.Object['class']
-            except KeyError:
-                pass
-            else:
-                found = True
-        else:
+            raise errors.NotFound(
+                reason=_("%(metaobject)s: %(oname)s not found") % {
+                    'metaobject': metaobjectfull_name, 'oname': self.name,
+                }
+            )
+
+        if 'command' in self.api.Object:
+            plugin = self.api.Object['command']
+            found = True
+        elif 'class' in self.api.Object:
+            plugin = self.api.Object['class']
             found = True
 
         if found:
_______________________________________________
FreeIPA-devel mailing list -- freeipa-devel@lists.fedorahosted.org
To unsubscribe send an email to freeipa-devel-le...@lists.fedorahosted.org

Reply via email to