Inizializzazione di un plugin

È possibile inizializzare un plug-in SASL per comunicare con i plug-in client LDAP.

Un tipico plugin SASL LDAP contiene due punti di ingresso:
  • Una routine di inizializzazione
  • Una routine di lavoro, che implementa la funzione di autenticazione

Quando un'istanza di un'applicazione utilizza un plugin SASL per la prima volta, la libreria LDAP ottiene le informazioni di configurazione per il plugin. Le informazioni di configurazione possono provenire da ibmldap.conf o possono essere fornite esplicitamente dall'applicazione con l'API ldap_register_plugin() .

Quando si trovano le informazioni di configurazione, la libreria LDAP carica la libreria condivisa del plugin e ne richiama la routine di inizializzazione. Per default, il nome della routine di inizializzazione per un plug-in è ldap_plugin_init(). Un punto di ingresso differente può essere definito in ibmldap.confo fornito sull'API ldap_plugin_register() se il plugin è esplicitamente registrato dall'applicazione.

La routine di inizializzazione del plugin è responsabile della fornitura dell'indirizzo del suo punto di ingresso della routine di lavoro, che implementa effettivamente la funzione di autenticazione. Questa inizializzazione viene eseguita utilizzando ldap_plugin_pblock_set() per definire l'indirizzo del punto di ingresso della routine di lavoro in pblock. Ad esempio, il seguente segmento di codice rappresenta una tipica routine di inizializzazione, dove authenticate_with_fingerprint è il nome della routine fornita dal plug-in per eseguire un'autenticazione basata sulle impronte digitali:
int ldap_plugin_init ( LDAP_Pblock      *pb )
{
        int rc;
        
        rc =  ldap_plugin_pblock_set ( pb, LDAP_PLUGIN_SASL_BIND_S_FN, ( void * ) 
              authenticate_with_fingerprint );
        if ( rc != LDAP_SUCCESS ) printf("ldap_plugin_init couldn't initialize 
              worker function\n");
        return ( rc );
}

Un pblock è una struttura opaca in cui vengono memorizzati i parametri. Un pblock viene utilizzato per comunicare tra la libreria del client LDAP e un plug - in. Le API ldap_plugin_pblock_set e ldap_plugin_pblock_get vengono fornite per il tuo plug-in per impostare o ottenere i parametri nella struttura pblock .

Utilizzando ldap_plugin_pblock_get(), il plugin può anche accedere ai parametri di configurazione. Ad esempio, il seguente segmento di codice illustra come il plugin può accedere alle sue informazioni di configurazione:
   int argc;
   char ** argv;

   rc = ldap_plugin_pblock_get ( pb, LDAP_PLUGIN_ARGC, &argc );
   if (rc != LDAP_SUCCESS)
      return (rc);
   rc = ldap_plugin_pblock_get( pb, LDAP_PLUGIN_ARGV, &argv );
   if (rc != LDAP_SUCCESS)
      return (rc);

Se l'elaborazione di inizializzazione del plugin è significativa e i risultati devono essere conservati e resi disponibili alla funzione di lavoro del plugin, la routine di inizializzazione può memorizzare i risultati di inizializzazione come dati di istanza privata nella sua libreria condivisa. Quando la funzione di lavoro del plugin viene chiamata in seguito, può accedere a questi dati di istanza privata. Ad esempio, durante l'inizializzazione, potrebbe essere richiesto il plugin per stabilire una sessione con un server di sicurezza remoto. Le informazioni di sessione possono essere conservate nei dati dell'istanza privata, a cui è possibile accedere successivamente dalla funzione di lavoro del plugin.

Dopo che il plugin è stato correttamente inizializzato, la sua funzione di lavoro può essere utilizzata dalla libreria LDAP. Continuando l'esempio mostrato, se il meccanismo supportato dal plug-in è userfp, la funzione authenticate_with_fingerprint del plug-in viene richiamata quando l'applicazione emette una funzione ldap_sasl_bind_s() con mechanism="userfp". Vedi Funzione di lavoro di esempio per un esempio di una funzione di lavoro del plugin.