M-Vault
Server Management tools can be split into four categories:
- Directory Configuration Management
- Directory Operational Management
- Directory Data Access & Management
- Directory Synchronization
This page looks at Sodium-Sync, a capability provided as part of Sodium,
one of Isode's Data Access and Management tools.
You can find information on Configuration Management (Enterprise
Directory Management), Operational Management (DConsole,
SNMP monitoring, Audit, Event and Fault Logging) and Data Access
& Management (Sodium and the web-based
Directory Services Interface).
Sodium-Sync
Sodium Sync is a capability provided as a part of Sodium to synchronize
data from one directory server to another using LDAP or X.500 DAP.

Key features of Sodium Sync:
- Synchronization is very easy to set up.
- A single GUI can be used to access both directory servers and managing
synchronization.
- Simple profiles for common synchronization types.
- Robust high performance operation.
- Filtering and data mapping functionality for advanced synchronization.
- Streamed implementation enables efficient synchronization of large
directory information trees.
- Scheduling synchronizations handled by a background process,
- Monitoring of scheduled synchronizations.
- Flexible LDIF support.
Target Deployment

Sodium Sync can be used to synchronize data between any pair of directories.
A key target for Sodium Sync is synchronization of data from Microsoft
Active Directory to Isode's M-Vault. A typical scenario is where local
data (e.g., users, certificates and CRLs) from Active Directory is synchronized
to M-Vault that acts as part of a distributed directory deployment.
This will often be used with high security deployments of M-Vault that
require use of digital signatures on all update operations.
When replicating data between two M-Vault servers, it will generally
make sense to replicate data using X.500 DISP. A discussion of approaches
to replication and synchronization, with consideration of the best approach
to use is given in the Isode white paper Replicating
and Synchronizing Data Between Directory Servers.
Simple Use of Sodium Sync
For many deployments, setup of Sodium Sync is very straightforward.
This product overview shows simple deployment first, and subsequently
looks at advanced features.
Configure Bind Profiles for Both Directories
A pre-requisite to setting up synchronization is to establish a bind
profile from Sodium to each of the directories being synchronized. Sodium
can then be used to easily locate the parts of each directory that will
be replicated. The screenshot below shows a Sodium connection to Active
Directory.

Choose Synchronization Type
When creating a new Synchronization, Sodium Sync offers the choice
of some standard synchronization profile types:

The current release of Sodium Sync provides profiles for synchronization
from Active Directory to M-Vault, and for synchronizing M-Vault to M-Vault.
It is likely that further profiles will be added to support additional
scenarios. Once created, the two simple profiles give a simple view.
This has a graphic to illustrate the full synchronization, and two tabs
that need to have data completed.

Set Source and Target
The source and target for synchronization must be set. This is done
by selecting a Sodium bind profile for source and target, and specifying
the directory name used for source and target, which may be different:

Define Scheduling
Synchronization profiles may be run manually. This is a sensible approach
for testing and for some deployments. For automatic operation, a schedule
must be specified, either as an interval between synchronizations, or
the time for a daily synchronization. When the first schedule is set
up, the Windows service or Unix process to run the synchronizations
must also be configured.

Operational Management of Synchronization

When unscheduled tasks are run from the Sodium GUI, status and errors
are shown interactively. Sodium Sync manager, shown above can be run
at any time to check on the status of synchronizations. This screen
shows defined tasks, when they are next scheduled to run, and notes
any errors on the last run. When there are problems, this screen can
be used as an entry point to diagnose problems and to access error logs.
Any errors are also logged as Isode events. These events can be monitored
using any of the approaches available as a part of the Isode event system
described here. In particular, events may be:
- Viewed with Isode's Event Viewer.
- Monitored using SNMP, with TRAPs providing information on new events.
Performance and Scaling
The current version of Sodium Sync does a "full update" on
each run. This works by reading data from both directories, and then
applying any necessary changes to the target directory. This is robust,
straightforward, and works will any LDAP or DAP directory. Incremental
updates will be added in a future release.
Sodium Sync works by streaming data, and minimizes the amount of data
it holds at any time. This enables it to scale to synchronize very large
directory information trees.
On a small system, with fast directory servers, typical performance
for Sodium Sync is around 40 entries per second (2.000 entries per minute).
This makes it practical to synchronize a few thousand entries with updates
at short intervals, and up to a few hundred thousand entries on a daily
schedule.
LDIF Support
Sodium supports use of LDIF (LDAP Interchange Format) in various ways,
including:
- Loading by Synchronization from LDIF. Where a full directory load
is needed at intervals, LDIF can be generated and Sodium Sync will
determine changes relative to the live directory and then make modifications.
This approach is often preferable to "delete and replace",
and also enables additional attributes to be added to the live directory.
- Output synchronization changes to LDIF.
- Apply changes from change LDIF
- Compare two LDIFs to generate a change LDIF
- Compare two directory sub-trees and generate a delta as LDIF. This
can be useful for comparing two similar directories.
Advanced Synchronization
For many deployments, the simple synchronization setup of Sodium Sync
will do everything needed. Sodium Sync has a range of advanced capabilities
to deal with more complex synchronization. The advanced screen, with
more complex data flow (that is drawn according to the options selected)
is shown below:

The rest of this section summarizes the advanced features of Sodium
Sync.
Entry Selection

Entries can be selected from the Source directory, to constrain what
is synchronized. There are three basic controls:
- Tree depth, so that entries below a specified level in the directory
information tree (DIT) are not synchronized.
- "Chop", which can exclude a specified part of the DIT,
either with or without the specified entry as illustrated above.
- Use of an LDAP or DAP filter, using the LDAP string filter representation
as defined in RFC 4515. This is a flexible selection mechanism, illustrated
below, that can be used for a number of purposes, including:
- Constraining the selection to a specific set of object classes.
- Excluding certain object classes.
- Selection of entries based on the presence or value of a specific
attribute, which might be "EmployeeType=Staff" or "Publish.To=External".
- Selection based on membership of a group.

Attribute Filtering
Attributes can be filtered by use of one or more attribute filtering
rules. Rules may apply to specific object classes or to all entries,
and are applied in a priority order. So a filter can be specified for
objects of class inetOrgPerson which will take priority of a generic
filter for objects of class Person (a super-class of inetOrgPerson).
Filters can be inclusive (synchronize the attributes specified) or exclusive
(synchronize all attributes except those specified). Sodium knows about
a very large number of attributes, and so a number of mechanisms are
provided to facilitate editing filters. The screenshot below shows editing
a filter for object class Person, and attributes selected are those
which belong to object class Person and all subclasses.

Attribute Mapping

Sodium Sync provides a number of standard mechanisms to map attributes
that may be selected and shown above. These are:
- Relocate DN. Many attributes have values that are directory names.
Sodium Sync can map a subtree from one DIT location to another. This
option maps the Directory Name valued attributes in the same way,
so they are valid on both sides of the synchronization.
- Active Directory. Active Directory uses some attributes in a way
that is not conformant to standard LDAP and X.500 usage. This mapping
changes these attributes from Active Directory to standard usage.
- Schema stripping. Sodium Sync is configured with schema knowledge
that may be extended. This option removes attributes and object class
values that are not known to Sodium. This is often convenient when
synchronizing to M-Vault, as Sodium Sync will generally have the same
schema configuration as the associated M-Vault. This stripping will
remove schema that M-Vault does not know about, and so enable the
data to be written to M-Vault.
- Schema inserting. Some LDAP sources such as Active Directory may
omit attributes that are mandatory in the schema used. This mapping
inserts dummy values so that the data sent to the target directory
is schema conformant.
- Change RDN. Sodium can be used to change the RDN of an entry to
that of an attribute contained within the entry being synchronized.
- Tree flattening. Sodium Sync can be configured to remove intermediate
naming levels.
These mappings are built using a general purpose underlying mechanism.
Isode’s goal with Sodium Sync is to provide a useful set of mappings
that may be simply selected. It is likely that new mappings will be
added in future releases.
The underlying mapping mechanism is documented and available to Sodium
Sync users. The screenshot below shows Sodium Sync with two custom mappings
added.

The custom mapping are defined in XML, and appear in the GUI when they
are defined. The specification of one of the custom mappings is illustrated
below.
| <!-- Mapping
rule-sets used by Sodium Sync --> |
|
| |
|
|
| <mapping> |
|
|
| |
<ruleset
name="ad-mappings" label="Laser Active Directory
to M-Vault standard mappings"> |
| |
| |
<rule
keyclass="person"> |
| |
| |
<move
from="wWWHomePage" attr="labeledURI"
match="^http://"/>
<move from="wWWHomePage" attr="labeledURI"
match="^https://"/>
<move from="wWWHomePage" attr="labeledURI"
subst="s|^(.+)|http://$1|"/>
<move from="othertelephone" attr="telephonenumber"/>
<move from="otherhomephone" attr="homephone"/>
<move from="othermobile" attr="mobile"/>
<move from="otherpager" attr="pager"/>
<move from="otherfacsimiletelephonenumber"
attr="facsimiletelephonenumber"/>
<copy from="mail" attr="mailLocalAddress"/>
<build_postal_address from="street postOfficeBox
l st postalcode c" attr="postalAddress"/>
<map attr="street" subst="s/
*\r?\n */, /gs"/>
<set_missing attr="mailHost" value="exchange.isode.net"/>
<add attr="objectClass" value="inetorgPerson"/>
<add attr="objectClass" value="mboxUser"/>
<conform strip="true" insert="true"/> |
| </rule> |
| <rule> |
| |
<conform
strip="true" insert="true"/> |
| </rule> |
|
| </ruleset> |
|
|
This XML language provides a flexible mechanism for mapping information,
that includes selection and transformation of attribute values using
regular expressions.
Evaluations
Sodium & Sodium-Sync are bundled as part of our M-Vault Directory
Server and can be evaluated as part of our M-Vault
Evaluation package.