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: ad...@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: ad...@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

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to