[Freeipa-devel] Change the behaviour of addattr/setattr parameters
Adam Young
ayoung at redhat.com
Mon Aug 16 20:49:27 UTC 2010
On 08/16/2010 09:30 AM, Adam Young wrote:
> I'm going to top post this to make sure it gets seen.
> Just ran the details patch on top of this, and the user details page
> does not work with it.
>>
>> If you submit the page even with a minor edit to the full name you
>> get an error: 'login' is required.
>>
>> I've tested it out with the JSON and CURL: Here is the JSON it is
>> sending:
>>
>> {"method":"user_mod","params":[["zoe"],{"all":true,"setattr":["cn=Zoe
>> MacLeod","gidnumber=1044896486","title=","displayname=","initials=","uid=","mail=","street=","location=","postalcode=","ou=","carlicense="],"addattr":[],"givenname":"Zoe","sn":"MacPhearson","uidnumber":"1044896486","homedirectory":"/home/zoe","sizelimit":100}],"id":4}
>>
>>
>>
>> The message 'login' is required is coming from the call I added to
>> value = self.params[attr](value)
>> As it is the message inside RequirementError, which gets called from
>> parameters.py, specifically:
>>
>> def validate(self, value):
>> """
>> Check validity of ``value``.
>>
>> :param value: A proposed value for this parameter.
>> """
>> if value is None:
>> if self.required:
>> raise RequirementError(name=self.cli_name)
>>
>>
>> My guess is the correct change is to skip this call if value is
>> null, which seems to be what is happening. But I suspect we are
>> sending in bogus values to setattr. Notice this part of the JSON
>>
>> "setattr":["cn=Zoe
>> MacLeod","gidnumber=1044896486","title=","displayname=","initials=","uid=","mail=","street=","location=","postalcode=","ou=","carlicense="]
>>
>>
>>
>> My guess is that the details page shouldn't send any unset values.
>> "uid=" in particular is probably a mistake. REmoving that from the
>> JSON gets us to: an internal error has occurred.
>>
>> Here's the stack trace:
>>
>> ipa: ERROR: non-public: TypeError: 'NoneType' object is not iterable
>> Traceback (most recent call last):
>> File "/home/ayoung/devel/freeipa/ipaserver/rpcserver.py", line 206,
>> in wsgi_execute
>> result = self.Command[name](*args, **options)
>> File "/home/ayoung/devel/freeipa/ipalib/frontend.py", line 401, in
>> __call__
>> ret = self.run(*args, **options)
>> File "/home/ayoung/devel/freeipa/ipalib/frontend.py", line 674, in run
>> return self.execute(*args, **options)
>> File "/home/ayoung/devel/freeipa/ipalib/plugins/baseldap.py", line
>> 431, in execute
>> addset = set(get_attributes(options.get('addattr', [])))
>> File "/home/ayoung/devel/freeipa/ipalib/plugins/baseldap.py", line
>> 52, in get_attributes
>> for attr in attrs:
>>
>>
>> Again, this is from the __call__ code, which means it is from the
>> code I added, although now I'm not sure which parameter, if any is
>> tripped the code.
>>
>>
>> I ran the full body of unit tests on the code as commited, and they
>> all pass, as did the set of tests that Rob cobbled up (reminder: Lets
>> get those added) so I don't think the call to
>> self.params[attr](value) is wrong, but that it catches input errors
>> that would have bitten us.
>
> Thinking about it afterwards, I wondered if the extra information was
> messing it up. I tried it with just the following json and it seems to
> have worked.
>
> {"method":"user_mod","params":[["zoe"],{"all":true,"setattr":["cn=Zoe
> MacLeod","gidnumber=1044896486"],"sizelimit":100}],"id":4}
>
>
> So I think we need to identify values that have changed on the screen,
> and only send that subset in the setattr portion. Only send values in
> as addattr if they were previously unset. And avoid setting any
> values as parameters outside of setaddr or addattr.
THe attached patch does this: when a field that has been changed loses
focus, the new value is added to a collection (changed_detail). Then,
when the user clicks "update" the values in the changed_detail
collection is added to the setattr collection of the JSON request.
I'm not too clear on the difference between setattr and addattr, so I
suspect that the patch is incomplete. I just wanted to get the idea out
there. THis patch should apply on top of pzuna's two outstanding UI
patches.
>
> _______________________________________________
> Freeipa-devel mailing list
> Freeipa-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/freeipa-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-catch-update-for-setattr.patch
Type: text/x-patch
Size: 4637 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20100816/2144fa5d/attachment.bin>
More information about the Freeipa-devel
mailing list