[Freeipa-devel] [PATCHES] Bring back old outputting functionality

Pavel Zuna pzuna at redhat.com
Wed Feb 10 11:07:45 UTC 2010


Rob Crittenden wrote:
> Pavel Zuna wrote:
>> I compiled 3 patches, that effectively bring back all the 
>> functionality we had before Jasons big patch (i.e. before introducing 
>> output validation and the common output interface).
>>
>> --all and --raw are back, but this time as global options
>> replacing DNs with primary keys is back
>> clever attribute printing (word-wrapping etc.) is back too
>>
>> To implement --all and --raw as global options, we had to find a way 
>> to propagate additional information (apart from command name and 
>> parameters) from client to server. We extended the XML-RPC signature 
>> from:
>>
>> (arg0, arg1, ..., options)
>>
>> to:
>>
>> (args, options, extras)
>>
>> The extras dict is currently only filled with the 'print_all_attrs' 
>> and 'print_raw_attrs' settings when forwarding a call. The server 
>> saves the extras dict into the thread specific context variable.
>>
>> I also replaced the decoding table in Encoder, because it didn't 
>> really work as expected in special cases. It now uses a dont-decode 
>> function. In the case of ldap2, this function checks attribute type 
>> OIDs and returns False for binary types.
>>
>> This patch introduces a little problem with the env command, because 
>> it fixes a bug/feature, that made it work before. Before outputting an 
>> attribute, we check if it isn't of type str. If it is, we assume it is 
>> binary and decode it. All values in Env are str. I propose we either 
>> write a specific output_for_cli for the env command or think about 
>> switching from str to unicode. I tried the later and it didn't cause 
>> any problems so far.
>>
>> How it's supposed to work:
>>
>> # ./ipa user-show admin
>>   User login: admin
>>   Last name: Administrator
>>   Home directory: /home/admin
>>   Login shell: /bin/bash
>>
>> # ./ipa --all user-show admin
>>   dn: uid=admin,cn=users,cn=accounts,dc=pzuna
>>   User login: admin
>>   Last name: Administrator
>>   Full name: Administrator
>>   Home directory: /home/admin
>>   GECOS field: Administrator
>>   Login shell: /bin/bash
>>   Kerberos principal: admin at PZUNA
>>   UID: 1083719807
>>   GID: 1083719807
>>   Last password change date: 20100208132706Z
>>   Password expiration date: 20100509132706Z
>>   Member of groups: admins
>>   objectclass: top, person, posixaccount, krbprincipalaux, 
>> krbticketpolicyaux, inetuser
>>
>> # ./ipa --raw user-show admin
>>   uid: admin
>>   sn: Administrator
>>   homedirectory: /home/admin
>>   loginshell: /bin/bash
>>
>> # ./ipa --all --raw user-show admin
>>   dn: uid=admin,cn=users,cn=accounts,dc=pzuna
>>   uid: admin
>>   sn: Administrator
>>   cn: Administrator
>>   homedirectory: /home/admin
>>   gecos: Administrator
>>   loginshell: /bin/bash
>>   krbprincipalname: admin at PZUNA
>>   uidnumber: 1083719807
>>   gidnumber: 1083719807
>>   krblastpwdchange: 20100208132706Z
>>   krbpasswordexpiration: 20100509132706Z
>>   memberof: cn=admins,cn=groups,cn=accounts,dc=pzuna
>>   objectclass: top
>>   objectclass: person
>>   objectclass: posixaccount
>>   objectclass: krbprincipalaux
>>   objectclass: krbticketpolicyaux
>>   objectclass: inetuser
>>
>> Pavel
> 
> Am I to assume that a plugin that wants to call 
> api.Command['some_command'] will need to set the local context for all 
> if it wants to return all values?
Well, yes.

> How are we going to do --all for tests? Isn't the environment fixed once 
> the API is initialized?
It is fixed, but we can use context in tests as well, right?

I have to admit, that this is something I didn't think through when implementing 
--all and --raw as global options. Setting context to change the behavior of 
commands called internally isn't going to look very good. :( I'll think about 
this a little more and see if I can come up with a better solution.

> rob

Pavel




More information about the Freeipa-devel mailing list