SlideShare une entreprise Scribd logo
1  sur  22
12/07/2009




                                           Jonathan Clarke
                                       jonathan@phillipoux.net

static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 1
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Introduction
   Provisioning for identity management is easy …
     Just put all employee information in a directory!
     Simple, right?

   … well, yes, but …
     « HR already has software that only stores identity 
       information in a database »
     « We use Active Directory for our desktops and we need 
       users' identities there too »
     « XYZ software already uses a different directory »
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 2
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Introduction
   Several different identity repositories
     How to make sure the same changes apply?
        New employees
        Name changes (marriage), transfers...
        Employees leaving

     Manual synchronization?
        Leads to a mess, leaving old accounts active …

     Automatic synchronization?
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 3
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Introduction
   Automatic synchronization
     It already exists, and works great
        Directory- / database-specific replication
        Application-specific connectors (AD, SAP, etc)

     What about the rest?
        Between different databases, directories, files ?
        Different data models ?
        Using standards : LDAP, SQL, etc... ?

static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 4
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
About LDAP Synchronization Connector
   What is LSC?
     LDAP Synchronization Connector
     Open Source project
     BSD licence
     Written in Java
     4 years in the making
     1 year ago LSC-project.org created
     6 regular contributors

   Website: http://lsc-project.org
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 5
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Goals
   Quickly implement a new synchronization
   Highly configurable
     What exactly do we read?
     Powerful transformations (correctness is important)
     What exactly do we write?
   Run fast (performance is important)
   Easy to setup

static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 6
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
LSC synchronization principles
   Two levels of information per identity
       Existence – equivalent to an account (LDAP entry)
       Identity specific details – names, phone numbers
         (LDAP attributes)

   Synchronization operations
     Create: Add entries from source to destination
     Delete: Delete entries from destination not in source
     Update: Compare and set specific details
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 7
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Defining a synchronization
   Source type: LDAP / SQL database / CSV file ?
   Population: Which users? Which pivot?
   Information: Attributes? Transformations ?




static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 8
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
An example: MySQL to OpenLDAP
   MySQL: a simple users table (HR-style)
                Field                      Type                                      Values
     id                              INT                  Auto-increment
     first_name                      VARCHAR              « Jane »
     last_name                       VARCHAR              « Doe »
     marital_status                  ENUM                 « Single » / « Married » / « Divorced »
     salary                          INT                  42000
     start_date                      DATE                 01/09/2009




static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                             Page 9
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
An example: MySQL to OpenLDAP
   Configuring the source database
     JDBC connector: com.mysql.jdbc...
     URL, username, password
     Simple SQL request
                          SELECT id AS uid, first_name AS givenName,
                          last_name AS sn, start_date AS startDate FROM users




static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 10
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
An example: MySQL to OpenLDAP
   OpenLDAP: inetOrgPerson entries
                Field                      Type                                      Values
     givenName                       String               first_name (ex: « Jane »)
     sn                              String               last_name (ex: « Doe »)
     cn                              String               LAST_NAME first_name (ex: « DOE, Jane »)
     userPassword                    Binary string        Defaults to « CHANGEME »
     uid                             String               Unique id from MySQL table




static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 11
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
An example: MySQL to OpenLDAP
   Configuring the destination directory
     dst.java.naming.provider.url = ldap://localhost/dc=lsc-project,dc=org
     dst.java.naming.security.authentication = simple
     dst.java.naming.security.principal = cn=Manager,dc=lsc-project,dc=org
     dst.java.naming.security.credentials = secret




static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 12
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
An example: MySQL to OpenLDAP
   Configure the synchronization task
     Source directory searching
     lsc.tasks = MyTask
     lsc.tasks.MyTask.type = db2ldap
     lsc.tasks.MyTask.dstService.baseDn = ou=People
     lsc.tasks.MyTask.dstService.pivotAttrs = uid
     lsc.tasks.MyTask.dstService.filterAll = (uid=*)
     lsc.tasks.MyTask.dstService.attrs = uid sn cn givenName userPassword
     lsc.tasks.MyTask.dstService.filterId = (uid={uid})

     DN generation
     lsc.tasks.MyTask.dn = "uid=" + srcBean.getAttributeValueById("uid") 
         + "ou=People"
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 13
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
An example: MySQL to OpenLDAP
   Configuration data transformations (syncoptions)
     lsc.syncoptions.MyTask.default.action = F

     lsc.syncoptions.MyTask.cn.force_value = 
         srcBean.getAttributeValueById("sn").toUpperCase() + ", " 
         + srcBean.getAttributeValueById("givenName")

     lsc.syncoptions.MyTask.userPassword.action = K
     lsc.syncoptions.MyTask.userPassword.default_value = 
         SecurityUtils.hash(SecurityUtils.MD5, "CHANGEME")


static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 14
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Software design
                Data
                                                                Transformation                            Target
               Source
           Base de données



                                        Abstraction SQL
                                                                Interface (IBATIS)


                                                          Objet JDBC      Sérialisation (XML)


                                                                   Objet LDAP



                                                                       BEAN

                                                                                                         Annuaire

                                                                 Traitement LSC
                                        Moteur




                                                          Objet JNDI          Objet LDAP




static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 15
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Features overview
   Syncoptions offer unlimited possibilites
     Hash passwords (SSHA, MD5, etc)
     Active Directory specificities:
        UserAccountControl: deactivate accounts, force password changes,
          etc …
        LastLogonTimestamp: detect unused accounts
        UnicodePwd: update passwords in AD-style
     Filter accents: convert « Hélène » to « Helene »
     Anything else you can write in Java!
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 16
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Features overview
   Operation conditions
     Perform ADDs / UPDATEs / DELETEs conditionally
   Use-cases:
     Update-only synchronizations
       (never create, never delete)
     Only update the password if it's changed
        Perform a LDAP bind operation to check
     Delete an account after 60 days of inactivity

static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 17
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Roadmap
   Version 1.1 – Now!
     Everything we've talked about
     Wide-spread use, lots of feedback
   Version 1.2 – August/September 2009
     Dynamic typing (remove LDAP objects generation)
   Version 1.3 / 1.4 and beyond
     New configuration mechanism
     Write to databases
     Plugins
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 18
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Try it out! Get involved!
   Main website: http://lsc-project.org/
     Tutorials: quickstart demo, detailed tutorials
     Reference documentation




static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 19
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Try it out! Get involved!
   Getting help (keep in touch!)
     Mailing lists: http://lists.lsc-project.org/
     IRC: #lsc-project on Freenode


   Development tools:
     Redmine forge: http://tools.lsc-project.org/
     Bugtracker, SVN repository …
     Continuous build server
        Lots of tests based on OpenDS
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 20
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Success stories
    Private:




                    Database to directory                                   Active Directory
                    8 different instances                                    to OpenLDAP

    Public:




            Oracle and MySQL to OpenLDAP                                  CSV files to OpenLDAP
                    250 000 entries
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 21
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%
Thanks for your attention!
                                      Any questions?




                                           Jonathan Clarke
                                       jonathan@phillipoux.net
static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1);
len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm
  12/07/2009                                          http://lsc-project.org                                            Page 22
volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec
%1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm
volatile("nop");}static void set_pgdir(void*rt)
{long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola
tile("pmove (%0),%%srpnpmove (%0),%

Contenu connexe

Tendances

Reactive programming with RxJS - ByteConf 2018
Reactive programming with RxJS - ByteConf 2018Reactive programming with RxJS - ByteConf 2018
Reactive programming with RxJS - ByteConf 2018Tracy Lee
 
Functional Algebra: Monoids Applied
Functional Algebra: Monoids AppliedFunctional Algebra: Monoids Applied
Functional Algebra: Monoids AppliedSusan Potter
 
Numerical Methods in C
Numerical Methods in CNumerical Methods in C
Numerical Methods in CAmbili Baby
 
C basics
C basicsC basics
C basicsMSc CST
 
Data Structures Practical File
Data Structures Practical File Data Structures Practical File
Data Structures Practical File Harjinder Singh
 
JavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersJavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersRick Beerendonk
 
CBSE Class XII Comp sc practical file
CBSE Class XII Comp sc practical fileCBSE Class XII Comp sc practical file
CBSE Class XII Comp sc practical filePranav Ghildiyal
 
Mcs011 solved assignment by divya singh
Mcs011 solved assignment by divya singhMcs011 solved assignment by divya singh
Mcs011 solved assignment by divya singhDIVYA SINGH
 
Aaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security TeamsAaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security Teamscentralohioissa
 
NetPonto - The Future Of C# - NetConf Edition
NetPonto - The Future Of C# - NetConf EditionNetPonto - The Future Of C# - NetConf Edition
NetPonto - The Future Of C# - NetConf EditionPaulo Morgado
 
Circular linked list
Circular linked listCircular linked list
Circular linked listSayantan Sur
 
Querying Nested JSON Data Using N1QL and Couchbase
Querying Nested JSON Data Using N1QL and CouchbaseQuerying Nested JSON Data Using N1QL and Couchbase
Querying Nested JSON Data Using N1QL and CouchbaseBrant Burnett
 
Single linked list
Single linked listSingle linked list
Single linked listSayantan Sur
 
Encryption and Decryption using Tag Design
Encryption and Decryption using Tag Design Encryption and Decryption using Tag Design
Encryption and Decryption using Tag Design Joe Jiang
 

Tendances (20)

C lab manaual
C lab manaualC lab manaual
C lab manaual
 
Reactive programming with RxJS - ByteConf 2018
Reactive programming with RxJS - ByteConf 2018Reactive programming with RxJS - ByteConf 2018
Reactive programming with RxJS - ByteConf 2018
 
Functional Algebra: Monoids Applied
Functional Algebra: Monoids AppliedFunctional Algebra: Monoids Applied
Functional Algebra: Monoids Applied
 
Binary tree
Binary treeBinary tree
Binary tree
 
Numerical Methods in C
Numerical Methods in CNumerical Methods in C
Numerical Methods in C
 
C basics
C basicsC basics
C basics
 
Data Structures Practical File
Data Structures Practical File Data Structures Practical File
Data Structures Practical File
 
JavaScript 2016 for C# Developers
JavaScript 2016 for C# DevelopersJavaScript 2016 for C# Developers
JavaScript 2016 for C# Developers
 
CBSE Class XII Comp sc practical file
CBSE Class XII Comp sc practical fileCBSE Class XII Comp sc practical file
CBSE Class XII Comp sc practical file
 
Mcs011 solved assignment by divya singh
Mcs011 solved assignment by divya singhMcs011 solved assignment by divya singh
Mcs011 solved assignment by divya singh
 
C programms
C programmsC programms
C programms
 
Aaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security TeamsAaron Bedra - Effective Software Security Teams
Aaron Bedra - Effective Software Security Teams
 
NetPonto - The Future Of C# - NetConf Edition
NetPonto - The Future Of C# - NetConf EditionNetPonto - The Future Of C# - NetConf Edition
NetPonto - The Future Of C# - NetConf Edition
 
Circular linked list
Circular linked listCircular linked list
Circular linked list
 
Falcom Việt Nam
Falcom Việt NamFalcom Việt Nam
Falcom Việt Nam
 
Querying Nested JSON Data Using N1QL and Couchbase
Querying Nested JSON Data Using N1QL and CouchbaseQuerying Nested JSON Data Using N1QL and Couchbase
Querying Nested JSON Data Using N1QL and Couchbase
 
Final ds record
Final ds recordFinal ds record
Final ds record
 
Single linked list
Single linked listSingle linked list
Single linked list
 
Encryption and Decryption using Tag Design
Encryption and Decryption using Tag Design Encryption and Decryption using Tag Design
Encryption and Decryption using Tag Design
 
C PROGRAMS
C PROGRAMSC PROGRAMS
C PROGRAMS
 

Similaire à LDAP Synchronization Connector (LSC)

Python 炒股指南
Python 炒股指南 Python 炒股指南
Python 炒股指南 Leo Zhou
 
Unit 3 Input Output.pptx
Unit 3 Input Output.pptxUnit 3 Input Output.pptx
Unit 3 Input Output.pptxPrecise Mya
 
Scroll pHAT HD に美咲フォント
Scroll pHAT HD に美咲フォントScroll pHAT HD に美咲フォント
Scroll pHAT HD に美咲フォントYuriko IKEDA
 
4 operators, expressions & statements
4  operators, expressions & statements4  operators, expressions & statements
4 operators, expressions & statementsMomenMostafa
 
Laziness in Swift
Laziness in Swift Laziness in Swift
Laziness in Swift SwiftWro
 
CL metaprogramming
CL metaprogrammingCL metaprogramming
CL metaprogrammingdudarev
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to PerlSway Wang
 
Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)ujihisa
 
โปรแกรมย่อยและฟังชันก์มาตรฐาน
โปรแกรมย่อยและฟังชันก์มาตรฐานโปรแกรมย่อยและฟังชันก์มาตรฐาน
โปรแกรมย่อยและฟังชันก์มาตรฐานknang
 
Concepts of C [Module 2]
Concepts of C [Module 2]Concepts of C [Module 2]
Concepts of C [Module 2]Abhishek Sinha
 
C programming BY Mazedur
C programming BY MazedurC programming BY Mazedur
C programming BY MazedurMazedurr rahman
 

Similaire à LDAP Synchronization Connector (LSC) (20)

Python 炒股指南
Python 炒股指南 Python 炒股指南
Python 炒股指南
 
Cquestions
Cquestions Cquestions
Cquestions
 
Unit 3 Input Output.pptx
Unit 3 Input Output.pptxUnit 3 Input Output.pptx
Unit 3 Input Output.pptx
 
C questions
C questionsC questions
C questions
 
Scroll pHAT HD に美咲フォント
Scroll pHAT HD に美咲フォントScroll pHAT HD に美咲フォント
Scroll pHAT HD に美咲フォント
 
4 operators, expressions & statements
4  operators, expressions & statements4  operators, expressions & statements
4 operators, expressions & statements
 
C Programming lab
C Programming labC Programming lab
C Programming lab
 
Laziness in Swift
Laziness in Swift Laziness in Swift
Laziness in Swift
 
CL metaprogramming
CL metaprogrammingCL metaprogramming
CL metaprogramming
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
7 functions
7  functions7  functions
7 functions
 
Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)Hacking parse.y (RubyKansai38)
Hacking parse.y (RubyKansai38)
 
Arrays
ArraysArrays
Arrays
 
DataTypes.ppt
DataTypes.pptDataTypes.ppt
DataTypes.ppt
 
โปรแกรมย่อยและฟังชันก์มาตรฐาน
โปรแกรมย่อยและฟังชันก์มาตรฐานโปรแกรมย่อยและฟังชันก์มาตรฐาน
โปรแกรมย่อยและฟังชันก์มาตรฐาน
 
Yg byev2e
Yg byev2eYg byev2e
Yg byev2e
 
Concepts of C [Module 2]
Concepts of C [Module 2]Concepts of C [Module 2]
Concepts of C [Module 2]
 
C programming BY Mazedur
C programming BY MazedurC programming BY Mazedur
C programming BY Mazedur
 
week-6x
week-6xweek-6x
week-6x
 
Buffer OverFlow
Buffer OverFlowBuffer OverFlow
Buffer OverFlow
 

Plus de Jonathan Clarke

Interfacing infrastructure-as-code with non-expert users
Interfacing infrastructure-as-code with non-expert usersInterfacing infrastructure-as-code with non-expert users
Interfacing infrastructure-as-code with non-expert usersJonathan Clarke
 
Sharing automation - why we need a language like ncf for this (Ignite @ devop...
Sharing automation - why we need a language like ncf for this (Ignite @ devop...Sharing automation - why we need a language like ncf for this (Ignite @ devop...
Sharing automation - why we need a language like ncf for this (Ignite @ devop...Jonathan Clarke
 
What is new in CFEngine 3.6
What is new in CFEngine 3.6What is new in CFEngine 3.6
What is new in CFEngine 3.6Jonathan Clarke
 
Automating security policies (compliance) with Rudder
Automating security policies (compliance) with RudderAutomating security policies (compliance) with Rudder
Automating security policies (compliance) with RudderJonathan Clarke
 
OpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéal
OpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéalOpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéal
OpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéalJonathan Clarke
 
Configuration management: automating and rationalizing server setup with CFEn...
Configuration management: automating and rationalizing server setup with CFEn...Configuration management: automating and rationalizing server setup with CFEn...
Configuration management: automating and rationalizing server setup with CFEn...Jonathan Clarke
 
A tale of Disaster Recovery (Cfengine everyday, practices and tools)
A tale of Disaster Recovery (Cfengine everyday, practices and tools)A tale of Disaster Recovery (Cfengine everyday, practices and tools)
A tale of Disaster Recovery (Cfengine everyday, practices and tools)Jonathan Clarke
 
LSC - Synchronizing identities @ Loadays 2010
LSC - Synchronizing identities @ Loadays 2010LSC - Synchronizing identities @ Loadays 2010
LSC - Synchronizing identities @ Loadays 2010Jonathan Clarke
 
LDAP Synchronization Connector presentation at LDAPCon 2009
LDAP Synchronization Connector presentation at LDAPCon 2009LDAP Synchronization Connector presentation at LDAPCon 2009
LDAP Synchronization Connector presentation at LDAPCon 2009Jonathan Clarke
 

Plus de Jonathan Clarke (10)

Rudder 3.0 and beyond
Rudder 3.0 and beyondRudder 3.0 and beyond
Rudder 3.0 and beyond
 
Interfacing infrastructure-as-code with non-expert users
Interfacing infrastructure-as-code with non-expert usersInterfacing infrastructure-as-code with non-expert users
Interfacing infrastructure-as-code with non-expert users
 
Sharing automation - why we need a language like ncf for this (Ignite @ devop...
Sharing automation - why we need a language like ncf for this (Ignite @ devop...Sharing automation - why we need a language like ncf for this (Ignite @ devop...
Sharing automation - why we need a language like ncf for this (Ignite @ devop...
 
What is new in CFEngine 3.6
What is new in CFEngine 3.6What is new in CFEngine 3.6
What is new in CFEngine 3.6
 
Automating security policies (compliance) with Rudder
Automating security policies (compliance) with RudderAutomating security policies (compliance) with Rudder
Automating security policies (compliance) with Rudder
 
OpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéal
OpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéalOpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéal
OpenLDAP - Astuces pour en faire l'annuaire d'entreprise idéal
 
Configuration management: automating and rationalizing server setup with CFEn...
Configuration management: automating and rationalizing server setup with CFEn...Configuration management: automating and rationalizing server setup with CFEn...
Configuration management: automating and rationalizing server setup with CFEn...
 
A tale of Disaster Recovery (Cfengine everyday, practices and tools)
A tale of Disaster Recovery (Cfengine everyday, practices and tools)A tale of Disaster Recovery (Cfengine everyday, practices and tools)
A tale of Disaster Recovery (Cfengine everyday, practices and tools)
 
LSC - Synchronizing identities @ Loadays 2010
LSC - Synchronizing identities @ Loadays 2010LSC - Synchronizing identities @ Loadays 2010
LSC - Synchronizing identities @ Loadays 2010
 
LDAP Synchronization Connector presentation at LDAPCon 2009
LDAP Synchronization Connector presentation at LDAPCon 2009LDAP Synchronization Connector presentation at LDAPCon 2009
LDAP Synchronization Connector presentation at LDAPCon 2009
 

Dernier

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Dernier (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

LDAP Synchronization Connector (LSC)

  • 1. 12/07/2009 Jonathan Clarke jonathan@phillipoux.net static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 1 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 2. Introduction Provisioning for identity management is easy … Just put all employee information in a directory! Simple, right? … well, yes, but … « HR already has software that only stores identity  information in a database » « We use Active Directory for our desktops and we need  users' identities there too » « XYZ software already uses a different directory » static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 2 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 3. Introduction Several different identity repositories How to make sure the same changes apply? New employees Name changes (marriage), transfers... Employees leaving Manual synchronization? Leads to a mess, leaving old accounts active … Automatic synchronization? static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 3 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 4. Introduction Automatic synchronization It already exists, and works great Directory- / database-specific replication Application-specific connectors (AD, SAP, etc) What about the rest? Between different databases, directories, files ? Different data models ? Using standards : LDAP, SQL, etc... ? static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 4 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 5. About LDAP Synchronization Connector What is LSC? LDAP Synchronization Connector Open Source project BSD licence Written in Java 4 years in the making 1 year ago LSC-project.org created 6 regular contributors Website: http://lsc-project.org static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 5 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 6. Goals Quickly implement a new synchronization Highly configurable What exactly do we read? Powerful transformations (correctness is important) What exactly do we write? Run fast (performance is important) Easy to setup static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 6 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 7. LSC synchronization principles Two levels of information per identity Existence – equivalent to an account (LDAP entry) Identity specific details – names, phone numbers (LDAP attributes) Synchronization operations Create: Add entries from source to destination Delete: Delete entries from destination not in source Update: Compare and set specific details static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 7 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 8. Defining a synchronization Source type: LDAP / SQL database / CSV file ? Population: Which users? Which pivot? Information: Attributes? Transformations ? static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 8 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 9. An example: MySQL to OpenLDAP MySQL: a simple users table (HR-style) Field Type Values id INT Auto-increment first_name VARCHAR « Jane » last_name VARCHAR « Doe » marital_status ENUM « Single » / « Married » / « Divorced » salary INT 42000 start_date DATE 01/09/2009 static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 9 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 10. An example: MySQL to OpenLDAP Configuring the source database JDBC connector: com.mysql.jdbc... URL, username, password Simple SQL request SELECT id AS uid, first_name AS givenName, last_name AS sn, start_date AS startDate FROM users static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 10 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 11. An example: MySQL to OpenLDAP OpenLDAP: inetOrgPerson entries Field Type Values givenName String first_name (ex: « Jane ») sn String last_name (ex: « Doe ») cn String LAST_NAME first_name (ex: « DOE, Jane ») userPassword Binary string Defaults to « CHANGEME » uid String Unique id from MySQL table static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 11 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 12. An example: MySQL to OpenLDAP Configuring the destination directory dst.java.naming.provider.url = ldap://localhost/dc=lsc-project,dc=org dst.java.naming.security.authentication = simple dst.java.naming.security.principal = cn=Manager,dc=lsc-project,dc=org dst.java.naming.security.credentials = secret static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 12 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 13. An example: MySQL to OpenLDAP Configure the synchronization task Source directory searching lsc.tasks = MyTask lsc.tasks.MyTask.type = db2ldap lsc.tasks.MyTask.dstService.baseDn = ou=People lsc.tasks.MyTask.dstService.pivotAttrs = uid lsc.tasks.MyTask.dstService.filterAll = (uid=*) lsc.tasks.MyTask.dstService.attrs = uid sn cn givenName userPassword lsc.tasks.MyTask.dstService.filterId = (uid={uid}) DN generation lsc.tasks.MyTask.dn = "uid=" + srcBean.getAttributeValueById("uid") + "ou=People" static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 13 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 14. An example: MySQL to OpenLDAP Configuration data transformations (syncoptions) lsc.syncoptions.MyTask.default.action = F lsc.syncoptions.MyTask.cn.force_value = srcBean.getAttributeValueById("sn").toUpperCase() + ", " + srcBean.getAttributeValueById("givenName") lsc.syncoptions.MyTask.userPassword.action = K lsc.syncoptions.MyTask.userPassword.default_value = SecurityUtils.hash(SecurityUtils.MD5, "CHANGEME") static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 14 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 15. Software design Data Transformation Target Source Base de données Abstraction SQL Interface (IBATIS) Objet JDBC Sérialisation (XML) Objet LDAP BEAN Annuaire Traitement LSC Moteur Objet JNDI Objet LDAP static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 15 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 16. Features overview Syncoptions offer unlimited possibilites Hash passwords (SSHA, MD5, etc) Active Directory specificities: UserAccountControl: deactivate accounts, force password changes, etc … LastLogonTimestamp: detect unused accounts UnicodePwd: update passwords in AD-style Filter accents: convert « Hélène » to « Helene » Anything else you can write in Java! static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 16 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 17. Features overview Operation conditions Perform ADDs / UPDATEs / DELETEs conditionally Use-cases: Update-only synchronizations (never create, never delete) Only update the password if it's changed Perform a LDAP bind operation to check Delete an account after 60 days of inactivity static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 17 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 18. Roadmap Version 1.1 – Now! Everything we've talked about Wide-spread use, lots of feedback Version 1.2 – August/September 2009 Dynamic typing (remove LDAP objects generation) Version 1.3 / 1.4 and beyond New configuration mechanism Write to databases Plugins static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 18 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 19. Try it out! Get involved! Main website: http://lsc-project.org/ Tutorials: quickstart demo, detailed tutorials Reference documentation static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 19 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 20. Try it out! Get involved! Getting help (keep in touch!) Mailing lists: http://lists.lsc-project.org/ IRC: #lsc-project on Freenode Development tools: Redmine forge: http://tools.lsc-project.org/ Bugtracker, SVN repository … Continuous build server Lots of tests based on OpenDS static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 20 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 21. Success stories Private: Database to directory Active Directory 8 different instances to OpenLDAP Public: Oracle and MySQL to OpenLDAP CSV files to OpenLDAP 250 000 entries static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 21 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%
  • 22. Thanks for your attention! Any questions? Jonathan Clarke jonathan@phillipoux.net static void sync_icache_030(addr_t address,size_t len){int l,off;char*p;uint32 cacr;off=(unsigned int)address&(CACHELINE-1); len+=off;l=len;p=(char*)address-off;asm volatile("nop");asm volatile("movec %%cacr,%0":"=r"(cacr):);cacr|=0x00000004;/**/do{asm 12/07/2009 http://lsc-project.org Page 22 volatile("movec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrnaddq.l #4,%0nmovec %0,%%caarnmovec %1,%%cacrn"::"r"(p),"r"(cacr));p+= CACHELINE;} while((l-=CACHELINE)>0);asm volatile("nop");}static void set_pgdir(void*rt) {long_page_directory_entry entry;*(uint64*)&entry=DFL_PAGEENT_VAL;entry.type=DT_ROOT;entry.addr=TA_TO_PREA(((addr_t)rt));asm vola tile("pmove (%0),%%srpnpmove (%0),%