I am sharing the question below with the list as I think the information is useful and relevant for everyone interested in this feature. See answers in the text.

On 05/20/2014 06:26 PM, thierry bordaz wrote:
Hello Martin, Petr,

    I implemented 'user-add --to-stage' in a very simple way. Basically rather
    than filling the 'accounts' container it fills the 'staged users' container.
    It helped me to start digging into the code.

    Now I am looking at details of this entry. Especially the attributes
    present when the entry is in staging container. So far, the entry is
    looking like:

        ldapsearch -LLL -h localhost -p 389 -D "cn=directory manager" -w
        Secret123 -b "dc=idm,dc=lab,dc=bos,dc=redhat,dc=com" uid=tb1
        dn: uid=tb1,cn=staged
        users,cn=accounts,cn=provisioning,dc=idm,dc=lab,dc=bos,d
          c=redhat,dc=com
        displayName: tb1 tb1
        cn: tb1 tb1
        objectClass: top
        objectClass: person
        objectClass: organizationalperson
        objectClass: inetorgperson
        objectClass: inetuser
        objectClass: posixaccount
        objectClass: krbprincipalaux
        objectClass: krbticketpolicyaux
        objectClass: ipaobject
        objectClass: ipasshuser
        objectClass: ipaSshGroupOfPubKeys
        loginShell: /bin/sh
        initials: tt
        gecos: tb1 tb1
        sn: tb1
        homeDirectory: /home/tb1
        uid: tb1
        mail: t...@idm.lab.bos.redhat.com
        krbPrincipalName: t...@idm.lab.bos.redhat.com
        givenName: tb1
        ipaUniqueID: 5556123c-e036-11e3-9915-001a4a104ecd
        uidNumber: 646400005
        gidNumber: 646400005
        memberOf:
        cn=ipausers,cn=groups,cn=accounts,dc=idm,dc=lab,dc=bos,dc=redhat,dc=
          com


    As you can see it contains extra objectclasses and some attributes are set
    (like uidNumber or gidNumber).
    According to the design that the entry should rather look like:


    dn: uid=tb1,cn=staged 
users,cn=accounts,cn=provisioning,dc=idm,dc=lab,dc=bos,d
      c=redhat,dc=com
    displayName: tb1 tb1
    cn: tb1 tb1
    objectClass: top
    objectClass: organizationalperson
    objectClass:krbprincipalaux
    objectClass: posixaccount
    loginShell: autogenerated
    sn: tb1
    homeDirectory: /home/tb1
    uid: tb1
    krbPrincipalName: t...@idm.lab.bos.redhat.com
    uidNumber: -1
    gidNumber: -1

    Is that correct ?

user-add sets the uidNumber and gidNumber to -1, meaning that these numbers should be autogenerated by a plugin. If the plugin scope is updated according to design to disregard staging users container, the number should stay -1 until the entry is really moved to active users container.

The same applies for ipaUniqueId, just the generation triggering text is "autogenerate".


    Then when the entry get activated ('ipa user-activate tb1 --from-stage), we
    should have the attribute being generated
    uidNumber/gidNumber/ipaUniqueId... My understanding is that those
    attributes should be generate by DS plugins when the entry is moved to
    'accounts' container. So playing with plugin scope would help to have
    staged users without all these attributes and 'accounts' users with them.

Right.


    What is not clear to me is the chapter related to the 'placeholders'. My
    understanding is that it should be a kind of template defining how to fill
    attribute values. I am looking for some code/doc dealing with placeholders
    but I do not know where to start from. Do you know any pointers on this.

I tried to write down the reasons for using placeholders in this section:
http://www.freeipa.org/page/V4/User_Life-Cycle_Management#Placeholders

Placeholder allows provisioning systems to specify only some attributes of for example posixAccount objectclass while not having to fill all the MUST attributes.

I think the example with filled "homeDirectory: /home/tuser" tells it all - homeDirectory is filled, other attributes are left for FreeIPA to generate based on it's settings.

As for UID and GID, you do not need to do anything - "-1" already means autogenerate the values. Attributes not controlled by a plugin needs to be controlled by the command that moves user from staging users to active users - following list shows how should be the values generated:

http://www.freeipa.org/page/V4/User_Life-Cycle_Management#Placeholder_Definition

HTH,
Martin

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

Reply via email to