Hi William

It's a simple testing code not finished yet but i think it could help
beginners like me
Don't be cruel with me i'm not a C progorammer.
The goal here is to create 4 new attributes aCode, bCode,
aCodeHas,bCodeHash everytime a new entry is added.
A step to add is how to filter by kind of entry or by DN .

Le lun. 18 févr. 2019 à 02:26, William Brown <wbr...@suse.de> a écrit :

> Yeah, I don’t think cos can do templating.
>
> If you would be willing Oliver, would you submit your code to the project,
> and allow it to be made generic? That could help quite a few people out
> with similar queries.
>
> > On 17 Feb 2019, at 00:20, Olivier JUDITH <gnu...@gmail.com> wrote:
> >
> > Hi ,
> >
> > There is a way to add attribute to user entry automatically called CoS .
> You can take a look on this link
> >
> https://access.redhat.com/documwanentation/en-us/red_hat_directory_server/9.0/html/administration_guide/advanced_entry_management-assigning_class_of_service
> >
> > But afaik you cannot add an email based on the uid except if CoS support
> macros like ACI. To do that you have to create your own plugin see :
> https://access.redhat.com/documentation/en-us/red_hat_directory_server/9.0/html/plug-in_guide/
> > I did the same for another kind of attribute.
> > It works fine for me
> >
> >
> > Le sam. 16 févr. 2019 à 14:29, Rosario Esposito <
> rosario.espos...@na.infn.it> a écrit :
> >
> > Hello,
> > let's say whenever I create a new entry:
> >
> > uid=myuser,ou=people,dc=example,dc=com
> >
> > I would like this entry to have the attribute:
> >
> > mail: myu...@example.com
> >
> > (i.e. the value of 'mail' should be automatically set to the value of
> > 'uid' + '@example.com')
> >
> > Is there a way for 389ds to do this task automatically ?
> >
> >
> > Thanks,
> > --
> > Rosario Esposito
> > System Administrator
> > INFN - Napoli
> > Phone: +39 081 676170
> > Email: rosario.espos...@na.infn.it
> > _______________________________________________
> > 389-users mailing list -- 389-users@lists.fedoraproject.org
> > To unsubscribe send an email to 389-users-le...@lists.fedoraproject.org
> > Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
> > List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> > List Archives:
> https://lists.fedoraproject.org/archives/list/389-users@lists.fedoraproject.org
> > _______________________________________________
> > 389-users mailing list -- 389-users@lists.fedoraproject.org
> > To unsubscribe send an email to 389-users-le...@lists.fedoraproject.org
> > Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
> > List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> > List Archives:
> https://lists.fedoraproject.org/archives/list/389-users@lists.fedoraproject.org
>
> —
> Sincerely,
>
> William Brown
> Software Engineer, 389 Directory Server
> SUSE Labs
> _______________________________________________
> 389-users mailing list -- 389-users@lists.fedoraproject.org
> To unsubscribe send an email to 389-users-le...@lists.fedoraproject.org
> Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives:
> https://lists.fedoraproject.org/archives/list/389-users@lists.fedoraproject.org
>
#include <stdio.h>
#include <string.h>
#include "dirsrv/slapi-plugin.h"
#include <openssl/sha.h>

/* function prototypes */
int myCode_init( Slapi_PBlock *pb );
int myCode_setIdHash( Slapi_PBlock *pb );
int myCode_setHash( Slapi_PBlock *pb );

static const char *aCodeAttr = "aCode";
static const char *bCodeAttr = "bCode";
static const char *aCodeHashAttr = "aCodeHash";
static const char *bCodeHashAttr = "bCodeHash";

char *aCodeHashValue = "DuibLy8uRZ0I51bfOQA==";
char *bCodeHashValue = "DuibLy8uRZ0I51bfOQA==";


/* Description of the plug-in */
Slapi_PluginDesc plugindesc = { "Company-Code", "example.com", "0.1","pre-operation to add Code attributes" };

/* 
 * Initialization function
 *
 * This function registers your plug-in function as a
 * pre-operation search function in the Directory Server.
 * You need to specify this initialization function in the
 * server configuration file so that the server calls
 * this initialization function on startup. 
 */

#ifdef _WIN32
__declspec(dllexport)
#endif

int mySetCode_init( Slapi_PBlock *pb ) 
{
    /* Specify the version of the plug-in ( "03" in this release ) */
    if (slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION, SLAPI_PLUGIN_VERSION_03 ) != 0 ||

        /* Specify the description of the plug-in */ 
	slapi_pblock_set( pb,SLAPI_PLUGIN_DESCRIPTION, (void *) &plugindesc ) != 0 ||
    /*
    *
    */
    slapi_pblock_set( pb, SLAPI_PLUGIN_PRE_ADD_FN, (void *) myCode_setHash ) !=0 ) 
    
    {
	/* Log an error message and return -1 if a problem occurred*/
	slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_init" ,"Error registering the plug-in.\n" );
        return( -1 );
    }

    /* If successful, log a message and return 0 */
    slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_init" ,"Plug-in successfully registered.\n" );
    return( 0 );
}

/*
* Generate the hash value of code
*/

void 
hashit(void *salt, char * code, char myhash[65]) {
    unsigned char hash[SHA256_DIGEST_LENGTH];
    SHA256_CTX context;
    int i=0;

    SHA256_Init(&context);
    SHA256_Update(&context, code, strlen(code));
    SHA256_Final(hash, &context);

    for( i=0; i<SHA256_DIGEST_LENGTH; i++){
        sprintf(myhash + (i * 2), "%02x", hash[i]);
    }
    myhash[64]= 0;
}


const char *
fetch_attr(Slapi_Entry *e, const char *attrname, const char *default_val)
{
    Slapi_Attr *attr;
    Slapi_Value *val = NULL;

    if (slapi_entry_attr_find(e, attrname, &attr) != 0)
        return default_val;
    slapi_attr_first_value(attr, &val);
    return slapi_value_get_string(val);
}

int myCode_setIdHash( Slapi_PBlock *pb)
{
    slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_setEmpNumHash" ,"Plug-in Call set Emp num Hash.\n" );
    return ( 0 );
}

int myCode_setHash( Slapi_PBlock *pb )
{
    Slapi_Entry *entries;
    Slapi_DN *dn;
    char * mydn;
    Slapi_Attr *attr;
    

    slapi_pblock_get(pb, SLAPI_ADD_ENTRY, &entries);
    slapi_pblock_get(pb, SLAPI_SEARCH_TARGET, &dn);
    
    
    if ( slapi_entry_attr_find( entries, bCodeAttr, &attr) == 0 ){
        slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_setHash" ,"attribute bCode found.\n" );
        if ( slapi_entry_attr_find( entries, bCodeHashAttr, &attr) == 0 ){
            slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_Hash" ,"attribute bCodeHash found.\n" );
            
            /* Check if value is equal to generated values */
        
        }
        
    }else{
        slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_setHash" ,"attribute bCode not found.\n" );
        slapi_entry_add_string( entries, bCodeHashAttr, bCodeHashValue);
        
    }

    if ( slapi_entry_attr_find( entries, aCodeAttr, &attr) == 0 ){
        slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_setHash" ,"attribute aCode found.\n" );
        
    }else{
        slapi_log_error( SLAPI_LOG_PLUGIN, "myCode_setHash" ,"attribute aCode not found.\n" );
        slapi_entry_add_string( entries, aCodeHashAttr, aCodeHashValue);
        
    }
    return ( 0 );
}

void setaCodeHash( Slapi_Entry *entry, int update) {

}

void setbCodeHash( Slapi_Entry *entry , int update){

}
_______________________________________________
389-users mailing list -- 389-users@lists.fedoraproject.org
To unsubscribe send an email to 389-users-le...@lists.fedoraproject.org
Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/389-users@lists.fedoraproject.org

Reply via email to