1) Input file formats

1.1) dmformat

	This data format is based on the QUIPU Entry Data Block format with the 
	
inclusion of "source" and "rootedAt" statements. The "source" statement names the 

data source, whilst the "rootedAt" lines define the parent entries for the particular 

entries to be updated. This facilitates the inclusion of data from multiple directory 

nodes in a single dmformat file.


1.1.1) An example of a short dmformat file

source= ccData

rootedAt=c=GB@o=University College London@ou=Computer Science

cn= Paul Barker
cn= P Barker
sn= Barker
uid= paulb
mail= P.Barker@cs.ucl.ac.uk
mhsORAddresses= /I=P/S=Barker/OU=cs/O=ucl/PRMD=UK.AC/ADMD=GOLD 400/C=GB/
userClass= csresstaff
roomNumber= G21
personalTitle= Mr
telephoneNumber= +44 71-380-7366
ou= Computer Science
acl= self # write # attributes # userpassword
acl= others # compare # attributes # userpassword
acl= others # read # attributes # telephoneNumber$surname$objectClass$userClass$roomNumber$rfc822Mailbox$textEncodedORaddress$userid$accessControlList
objectClass= person & newPilotPerson & organizationalPerson & pilotObject & quipuObject & top & mhsUser & telBookObject
phoneBookVersion= 2.0

cn= David Goodman
cn= D Goodman
sn= Goodman
uid= dgoodman
mail= D.Goodman@cs.ucl.ac.uk
mhsORAddresses= /I=D/S=Goodman/OU=cs/O=ucl/PRMD=UK.AC/ADMD=GOLD 400/C=GB/
userClass= csadmin
roomNumber= G24
personalTitle= Mr
telephoneNumber= +44 71-380-7294
ou= Computer Science
acl= self # write # attributes # userpassword
acl= others # compare # attributes # userpassword
acl= others # read # attributes # telephoneNumber$surname$objectClass$userClass$roomNumber$rfc822Mailbox$textEncodedORaddress$userid$accessControlList
objectClass= person & newPilotPerson & organizationalPerson & pilotObject & quipuObject & top & mhsUser & telBookObject
phoneBookVersion= 2.0

rootedAt=c=GB@o=University College London@ou=Mathematics

# ... and so on


1.2) newdmformat
	
	Given the need to indicate when a given data source is adding an
	
attribute type to an entry for the first time a further format has been defined. 

This new format is the dmformat with a prepended "newdmformat"

statement plus the usage of the following leading characters :-


Leading character	Indicates		Example

$			Add an entry		$cn= Paul Barker

!			Delete an entry		!cn= Paul Barker

*			Modify an RDN		cn= Pauline Barker % personalTitle=Miss
						*cn= Pauline Barker % personalTitle=Mrs

+			Add an attribute	+room= G22

-			Delete an attribute	-room

>			Add a value		>favouriteDrink= Whisky

<			Delete a value		<favouriteDrink= Water


1.2.1) An example of a short newdmformat file

newdmformat

source= ccData

rootedAt=c=GB@o=University College London@ou=Computer Science

cn= Andreas Antonopoulos
# Add a favouriteDrink attribute and then add a further value..
+favouriteDrink= Wine
>favouriteDrink= Spring water
# Add an additional object class attribute value..
>objectClass= bulkDataEntryDetails

cn= Fred Bloggs
# delete his favouriteDrink attribute..
-favouriteDrink
#remove a telephoneNumber attribute value..
<telephoneNumber= 0634-661122

# remove an entry..
!cn= John Bloggs

rootedAt=c=GB@o=University College London@ou=Mathematics

# modify an RDN..
cn= Frederica Bloggs % personalTitle= Miss
*cn= Frederica Blogss % personalTitle= Mrs

# ... and so on


2) Sub-directory lists


	Support is provided for data sources that can not be
readily structured to match the Directory e.g. a telephone data
source that holds data for all of the organisational units of 
the Registry in one long list, when the Directory holds
them as distinct OUs.

	 A sub-directory list may be defined to indicate precisely
which OUs a given data source is to be applied to e.g.

if the Registry units are held in the Directory as:-

   		    o=UCL

ou=Art ou=Accounts ou=Exams ou=Records ou=Zoology

then we could update the Registry OUs using..
	   
	rootedAt = c=GB@o=UCL@bulkSubDirList=RegistryList

	# updates for the Registry OUs..

Where the RegistryList (which must be held at {c=GB@o=UCL}
given the above rootedAt) is defined as..

	bulkSubDirList=RegistryList
	bulkSubTreeDN= c=GB@o=UCL
	bulkSubTreeDNextension= ou=Accounts
	bulkSubTreeDNextension= ou=Exams
	bulkSubTreeDNextension= ou=Records.


	Whilst if the Registry had been held in the Directory as:-

	      o=UCL
			   
	   ou=Registry

ou=Accounts ou=Exams ou=Records

then a special "All" sub-directories case could be used..

	rootedAt = c=GB@o=UCL@ou=Registry@bulkSubDirList=All

	# updates for the Registry OUs..



3) Master source update rules

==================================================================================================
Update		Data source is a	nonMasterUpdatedAttrType   	Update
required	master source		has type already listed 	attempted
==================================================================================================

Add Attribute	    No	 						Add Attribute which
						 	 	 	will fail if the directory
						 	 	 	already holds any value(s)

  "       "	    Yes				Yes			Add Attribute after
						 	 	 	a Remove Attribute has
						 	 	 	cleared existing values

  "       "	    Yes				No			Add attribute (or add value
  									if values already present)
==================================================================================================

Add Value	    No	 						ADD ATTRIBUTE which
						 	 	 	will fail if the directory
						 	 	 	already holds any value(s)

 "     "	    Yes							Add Value

==================================================================================================

Delete Attribute    No	 	 					NONE

 "     "	    Yes	 	 					Delete Attribute

==================================================================================================

Delete Value	    No	 	 					NONE

 "     "	    Yes							Delete Value (unless last
									directory value, when
									DELETE ATTRIBUTE used.)
==================================================================================================
