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),%