On 2015-07-24 12:41, Martin Basti wrote:
> On 24/07/15 05:15, Fraser Tweedale wrote:
>>> diff --git a/ipalib/plugins/certprofile.py b/ipalib/plugins/certprofile.py
>>> index 
>>> 5550ed942521dbab2e783fba1570520268f9b378..fe8934690fe09499f0bacb6610d9815a2b4367a4
>>>  100644
>>> --- a/ipalib/plugins/certprofile.py
>>> +++ b/ipalib/plugins/certprofile.py
>>> @@ -233,8 +233,8 @@ class certprofile_import(LDAPCreate):
>>>  
>>>          match = self.PROFILE_ID_PATTERN.search(options['file'])
>>>          if match is None:
>>> -            raise errors.ValidationError(name='file',
>>> -                error=_("Profile ID is not present in profile data"))
>>> +            # no profileId found, use CLI value as profileId.
>>> +            options['file'] = u'profileId=%s\n%s' % (keys[0], 
>>> options['file'])
>> NACK
>>
>> This assignment has no external effect; `post_callback' is called
>> with original `options['file']' and dogtag profile import can fail
>> due to missing profileId.
>>
>> The solution is to do the same thing in post_callback; updated patch
>> attached.
>>
>> Thanks,
>> Fraser
>>
>>
> 
> I dont like to have the same code twice in pre and post callback.
> 
> Can you use contexmanager to store the right value in pre callback and
> then use it in post callback?
> (can find it in dns plugin, search for context)


Sounds good to me!

Christian

PS: Context is a fancy name for a TLS dict. ;)
From 1c7a67f331fb7d07f1e306e292e97b1df810958c Mon Sep 17 00:00:00 2001
From: Christian Heimes <chei...@redhat.com>
Date: Thu, 23 Jul 2015 17:48:56 +0200
Subject: [PATCH] certprofile-import: do not require profileId in profile data

certprofile-import no longer requires profileId in profile data. Instead
the profile ID from the command line is taken and added to the profile
data internally.

If profileId is set in the profile, then it still has to match the CLI
option.

https://fedorahosted.org/freeipa/ticket/5090
---
 ipalib/plugins/certprofile.py | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/ipalib/plugins/certprofile.py b/ipalib/plugins/certprofile.py
index ae75d43d7412d0df7c09a33c16c833995d9a3fe4..658fbca3b4eb851eb5a22190c443044f6ceb8491 100644
--- a/ipalib/plugins/certprofile.py
+++ b/ipalib/plugins/certprofile.py
@@ -11,6 +11,7 @@ from ipalib.plugins.virtual import VirtualCommand
 from ipalib.plugins.baseldap import (
     LDAPObject, LDAPSearch, LDAPCreate,
     LDAPDelete, LDAPUpdate, LDAPRetrieve)
+from ipalib.request import context
 from ipalib import ngettext
 from ipalib.text import _
 from ipapython.version import API_VERSION
@@ -230,11 +231,12 @@ class certprofile_import(LDAPCreate):
 
     def pre_callback(self, ldap, dn, entry, entry_attrs, *keys, **options):
         ca_enabled_check()
+        context.profile = options['file']
 
         match = self.PROFILE_ID_PATTERN.search(options['file'])
         if match is None:
-            raise errors.ValidationError(name='file',
-                error=_("Profile ID is not present in profile data"))
+            # no profileId found, use CLI value as profileId.
+            context.profile = u'profileId=%s\n%s' % (keys[0], context.profile)
         elif keys[0] != match.group(1):
             raise errors.ValidationError(name='file',
                 error=_("Profile ID '%(cli_value)s' does not match profile data '%(file_value)s'")
@@ -250,7 +252,7 @@ class certprofile_import(LDAPCreate):
         """
         try:
             with self.api.Backend.ra_certprofile as profile_api:
-                profile_api.create_profile(options['file'])
+                profile_api.create_profile(context.profile)
                 profile_api.enable_profile(keys[0])
         except:
             # something went wrong ; delete entry
-- 
2.4.3

Attachment: signature.asc
Description: OpenPGP digital signature

-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to