[Freeipa-devel] [PATCH] Change the behaviour of addattr/setattr parameters
Adam Young
ayoung at redhat.com
Sat Aug 14 02:20:42 UTC 2010
>>
>> Here's my version, that just calls the parameter prior to updating
>> the attr. I tested it with:
>>
>> [root at ipa ~]# ipa user-mod --setattr uidnumber=555 kfrog
>> ---------------------
>> Modified user "kfrog"
>> ---------------------
>> User login: kfrog
>> First name: Kermit
>> Last name: Frog
>> Home directory: /home/kfrog
>> Login shell: /bin/sh
>> UID: 555
>> Groups: ipausers
>> [root at ipa ~]# ipa user-mod --setattr uidnumber=frog kfrog
>> ipa: ERROR: invalid 'uidnumber': must be an integer
>>
>>
>>
>>
>> _______________________________________________
>> Freeipa-devel mailing list
>> Freeipa-devel at redhat.com
>> https://www.redhat.com/mailman/listinfo/
> Pushed to Master. ACKed in IRC by rcrit, and based on a pzuna patch
> reviewd by both myself and rcrit
>
>> freeipa-devel
> Since this was a diff to a Patch ACK
>
>
> _______________________________________________
> Freeipa-devel mailing list
> Freeipa-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/freeipa-devel
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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20100813/63b1522e/attachment.htm>
More information about the Freeipa-devel
mailing list