[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