[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Operational attribute plugins



I have committed a first implementation of this. It's subject to
change: I would really prefer to conform the API to the Sun ONE
DS API, except I can't find any documentation that explains
how it works (yet).

The architecture is as follows:

1. A plugin registers a callback as SLAPI_PLUGIN_OPATTR_COALESCE_FN.

2. When sending a search entry, the front-end will call all
   plugins registered for the above, with the entry set as
   SLAPI_SEARCH_RESULT_ENTRY.
  
3. The plugins can add additional attributes to be returned
   to the client by manipulating the SLAPI_PLUGIN_OPATTR_COALESCE_DATA
   parameter block value. It is a Slapi_AttrSet, which is an
   opaque handle to a list of Attributes.

Here's the example plugin I'm about to test:

static dnt_opattr_coalesce(Slapi_PBlock *pb)
{
  Slapi_AttrSet *attrs;
  Slapi_Entry *entry;
  Slapi_ValueSet *vals;
  Slapi_Value *value;
  char *dn;
  
  if (slapi_pblock_get(pb, SLAPI_PLUGIN_OPATTR_COALESCE_DATA, (void **)&attrs) != 0 ||
      slapi_pblock_get(pb, SLAPI_SEARCH_RESULT_ENTRY, (void **)&entry) != 0) { 
          return -1;
  }       
  
  dn = slapi_entry_get_dn(entry);
  value = slapi_value_new_string(dn);
  vals = slapi_valueset_new();
  slapi_valueset_add_value(vals, value);

  if (slapi_x_attrset_merge(attrs, "distinguishedName", vals) != 0) {
          return -1;
  }

  return 0;
}

It should set the "distinguishedName" attribute to the entry's
distinguished name. 

As I said, I'd really prefer to use the Sun ONE computed/virtual
attribute API, so don't get too attached to this... the advantage
of this is that it's quite simple and has minimum intrusion on the
slapd front-end.

-- Luke

--
Luke Howard | PADL Software Pty Ltd | www.padl.com