[Freeipa-devel] Re: [PATCHES] Make plugins use baseldap classes.
Pavel Zuna
pzuna at redhat.com
Tue Sep 15 12:59:28 UTC 2009
Rob Crittenden wrote:
> Pavel Zůna wrote:
>> This is a series of patches that depends on patches:
>> - Improve attribute printing in the CLI.
>> - Improve ipalib.plugins.baseldap classes.
>>
>> All plugins are converted to extend baseldap classes. This makes
>> things more consistent, fixes some general bugs (with return values
>> for example) and it also makes plugins easier to maintain (as it
>> removes a lot of duplicate code).
>>
>> Because baseldap classes have features that enable us to define
>> relationships between plugins, I thought it might be best to submit
>> all of the conversions at once and have all the relationships fully
>> defined.
>>
>> Affected plugins:
>> config
>> user
>> host
>> service
>> group
>> hostgroup
>> netgroup
>> rolegroup
>> taskgroup
>> pwpolicy
>>
>> There's also a patch that fixes all unit tests.
>>
>> Jenny, I included you to Cc, because the patch introduces a lot of
>> changes to the UI (and you're probably not going to like me for this).
>>
>> Each command extending the LDAP* base classes now has a --raw option.
>> Without it, data from LDAP is formated and translated to human
>> readable. For example:
>>
>> # ipa user-show admin --all
>> ----------
>> user-show:
>> ----------
>> User: admin
>> user id: admin
>> full name: Administrator
>> last name: Administrator
>> home directory: /home/admin
>> login shell: /bin/bash
>> uid number: 999
>> gid number: 1001
>> gecos: Administrator
>> kerberos principal: admin at PZUNA
>> last password change: 20090904122852Z
>> password expiration: 20091203122852Z
>> member of groups: admins
>>
>> # ipa user-show admin --all --raw
>> ----------
>> user-show:
>> ----------
>> dn: uid=admin,cn=users,cn=accounts,dc=pzuna
>> uid: admin
>> cn: Administrator
>> sn: Administrator
>> homedirectory: /home/admin
>> loginshell: /bin/bash
>> uidnumber: 999
>> gidnumber: 1001
>> gecos: Administrator
>> krbprincipalname: admin at PZUNA
>> krblastpwdchange: 20090904122852Z
>> krbpasswordexpiration: 20091203122852Z
>> memberof: cn=admins,cn=groups,cn=accounts,dc=pzuna
>> objectclass: top
>> objectclass: person
>> objectclass: posixaccount
>> objectclass: krbprincipalaux
>> objectclass: inetuser
>>
>> Advantages: more user friendly, allows for easy localization,
>> translation of DNs to primary keys (immediately usable as input to
>> other plugin commands)
>>
>> I recommend, that you use the --raw flag for testing.
>>
>>
>>
>> I know it's a lot of changes, so I setup a git repo at:
>> git://fedorapeople.org/~pzuna/freeipa.git
>>
>> It should be up-to-date with master and all my patches are applied
>> there. I hope it makes reviewing them at least a bit easier.
>>
>> Pavel
>
> Why are you using a pre_callback() to define default values instead of
> using default_from? It seems clearer to use that.
You're probably referring to the user plugin, where gecos and krbprincipalname
defaults are set inside pre_callback. It's a residue from some time ago when we
didn't use autofill=True with default_from and it didn't have any effect on
optional parameters. It's a small change, but I included an updated version of
the patch with this email.
> This also duplicates some values in the attribute_names() dictionary. I
> wonder if this can be either created from the parameters or define a
> global set somewhere that covers all plugins.
I know, but I couldn't find a better solution. I thought we could add something
like a 'real_name' kwarg to params, but this has 2 main disadvantages:
1) it only makes sense with parameters that refer to an LDAP attribute
2) it doesn't work for attributes with no param counterparts
The global set is a good idea as long as we consider only our own plugins. 3rd
party plugins would have to modify this set to add their own attributes. Also,
attributes might have a different meaning for different objects. They usually
don't, but take 'cn' for example. We use it as an ID, name, full name (for
users), etc.
> In the user plugin 'ou' is in the default attributes. We don't use this
> attribute.
Since we don't use it, it's not going to get displayed anyway.
All the values in attribute_names, default_attribute and attribute_order are
subject to change. I set them to initial values I thought are acceptable, but I
don't think I'm the right person to decide what's going to be there. Ideally,
someone with more UI/text/user friendliness experience should review it (there's
not programming knowledge required to change the values).
> I think that in general baseldap needs to be documented to explain how
> things work. There is no explanation for object_class_config, for
> example, that it defines the attribute in cn=ipaConfig that contains the
> default list of objectclasses for the object.
Yeah, there's no documentation at this point, but I'm working on it as we "speak".
> rob
>
One more thing, I reviewed your latest patches and they make change to host and
service plugins. Your patches should be pushed first, because they are more
complex and also more important, so I posted updated versions to the
corresponding email threads on freeipa-devel.
Pavel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Make-the-user-plugin-use-baseldap-classes.patch
Type: application/mbox
Size: 13829 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20090915/7fd9e983/attachment.mbox>
More information about the Freeipa-devel
mailing list