pgreco / rpms / ipa

Forked from forks/areguera/rpms/ipa 4 years ago
Clone

Blame SOURCES/0177-Changing-cert-find-to-do-not-use-only-primary-key-to.patch

483b06
From d5af6b5e3ee50f97db730a4097c46baf07e09002 Mon Sep 17 00:00:00 2001
483b06
From: Felipe Volpone <felipevolpone@gmail.com>
483b06
Date: Thu, 1 Jun 2017 16:53:11 -0300
483b06
Subject: [PATCH] Changing cert-find to do not use only primary key to search
483b06
 in LDAP.
483b06
483b06
In service.py the primary key is krbCanonicalName, which we
483b06
don't want to use to do searchs. Now, cert-find uses primary
483b06
key or a specified attribute to do searches in LDAP, instead
483b06
of using only a primary key.
483b06
483b06
https://pagure.io/freeipa/issue/6948
483b06
483b06
Reviewed-By: Martin Babinsky <mbabinsk@redhat.com>
483b06
Reviewed-By: Jan Cholasta <jcholast@redhat.com>
483b06
Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
483b06
---
483b06
 ipaserver/plugins/cert.py | 27 +++++++++++++++++----------
483b06
 1 file changed, 17 insertions(+), 10 deletions(-)
483b06
483b06
diff --git a/ipaserver/plugins/cert.py b/ipaserver/plugins/cert.py
483b06
index 68402679cf0320e9c664ea89276f6c4332730a15..bb11713317abad55577b1c280253ab5d6d68c508 100644
483b06
--- a/ipaserver/plugins/cert.py
483b06
+++ b/ipaserver/plugins/cert.py
483b06
@@ -981,8 +981,8 @@ class cert(BaseCertObject):
483b06
                 param = param.clone(flags=param.flags - {'no_search'})
483b06
             yield param
483b06
 
483b06
-        for owner in self._owners():
483b06
-            yield owner.primary_key.clone_rename(
483b06
+        for owner, search_key in self._owners():
483b06
+            yield search_key.clone_rename(
483b06
                 'owner_{0}'.format(owner.name),
483b06
                 required=False,
483b06
                 multivalue=True,
483b06
@@ -992,15 +992,22 @@ class cert(BaseCertObject):
483b06
             )
483b06
 
483b06
     def _owners(self):
483b06
-        for name in ('user', 'host', 'service'):
483b06
-            yield self.api.Object[name]
483b06
+        for obj_name, search_key in [('user', None),
483b06
+                                     ('host', None),
483b06
+                                     ('service', 'krbprincipalname')]:
483b06
+            obj = self.api.Object[obj_name]
483b06
+            if search_key is None:
483b06
+                pkey = obj.primary_key
483b06
+            else:
483b06
+                pkey = obj.params[search_key]
483b06
+            yield obj, pkey
483b06
 
483b06
     def _fill_owners(self, obj):
483b06
         dns = obj.pop('owner', None)
483b06
         if dns is None:
483b06
             return
483b06
 
483b06
-        for owner in self._owners():
483b06
+        for owner, _search_key in self._owners():
483b06
             container_dn = DN(owner.container_dn, self.api.env.basedn)
483b06
             name = 'owner_' + owner.name
483b06
             for dn in dns:
483b06
@@ -1264,8 +1271,8 @@ class cert_find(Search, CertMethod):
483b06
                 option = option.clone(default=None, autofill=None)
483b06
             yield option
483b06
 
483b06
-        for owner in self.obj._owners():
483b06
-            yield owner.primary_key.clone_rename(
483b06
+        for owner, search_key in self.obj._owners():
483b06
+            yield search_key.clone_rename(
483b06
                 '{0}'.format(owner.name),
483b06
                 required=False,
483b06
                 multivalue=True,
483b06
@@ -1276,7 +1283,7 @@ class cert_find(Search, CertMethod):
483b06
                      owner.object_name_plural),
483b06
                 label=owner.object_name,
483b06
             )
483b06
-            yield owner.primary_key.clone_rename(
483b06
+            yield search_key.clone_rename(
483b06
                 'no_{0}'.format(owner.name),
483b06
                 required=False,
483b06
                 multivalue=True,
483b06
@@ -1395,7 +1402,7 @@ class cert_find(Search, CertMethod):
483b06
         ldap = self.api.Backend.ldap2
483b06
 
483b06
         filters = []
483b06
-        for owner in self.obj._owners():
483b06
+        for owner, search_key in self.obj._owners():
483b06
             for prefix, rule in (('', ldap.MATCH_ALL),
483b06
                                  ('no_', ldap.MATCH_NONE)):
483b06
                 try:
483b06
@@ -1411,7 +1418,7 @@ class cert_find(Search, CertMethod):
483b06
                     filters.append(filter)
483b06
 
483b06
                 filter = ldap.make_filter_from_attr(
483b06
-                    owner.primary_key.name,
483b06
+                    search_key.name,
483b06
                     value,
483b06
                     rule)
483b06
                 filters.append(filter)
483b06
-- 
483b06
2.9.4
483b06