The notes in this lecture are based on a presentation co-authored with
Dr. Thiruvathukal's former students in Distributed Systems (at Northwestern
University), `Steve Chiu <http://www2.cose.isu.edu/~chiustev/>`_ and
`Jay Pisharath <http://cucis.ece.northwestern.edu/members/jay/>`_.

University), 

`Jay Pisharath <http://cucis.ece.northwestern.edu/members/jay/>`_

Means by which information in the directory will be named and referenced,
similar to a pointer or label (or index).

Namespace can be of any topology, e.g. tree, star, triangular, or linear.
LDAP supports trees innately.

Concept of DN and its components: CN, C, ST, L, O, OU, STREET, DC, UID

Naming scheme could be internet-based or traditional, based on
organizational needs

A set of rules that determines what can be stored in a directory service

A set of rules that defines how directory servers and clients should treat
information during a directory operation

Each entity (called "attribute") has its own object identifier (called an
*oid*)

Reduce unnecessary data duplication resulted from some directory-enabled
applications

Characteristics of Directories
- Good at storing pointers to large data, not the large data
- Attribute-based information model
- High read-to-write ratio, unlike databases, file systems, or web browsers
- High search capability
- Standards-based access (for some)

The following shows how to create your own schema in LDAP (for our example
fictitious domain)::

fictitious domain):

description ATTRIBUTE ::= {
  WITH SYNTAX DirectoryString {1024}
  EQUALITY MATCHING RULE caseIgnoreMatch
  SUBSTRINGS MATCHING RULE caseIgnoreSubstringsMatch ID 2.5.4.13
}

objectclass printer
  requires cn
  allows description, pagesPerMinute, languages

objectclass networkDevice
  requires ipaddress
  allows cn, connectionSpeed

Note: the term objectclass is not the same terminology from object-oriented
programming. In LDAP, an objectclass defines a schema-aware data object but
does not define methods (functions) as in OOP.

Generic modules API: covers development for front-end communication with
LDAP client, and back-end database operations with Perl, Shell, SQL, TCL,
and Python

and Python

Database: more costly, heavy-duty transaction support, frequent writes

Web servers: delivers big image files, provides web application development
platform

FTP servers: can't do search, not attribute-based information model

Application-specific: Lotus Notes Address Book, MS Exchange Directory

Access control based on LDAP authorization information, IP address, domain
name, etc.

A multi-threaded **slapd** process can handle all incoming requests => reduced
system overhead => higher performance

 process can handle all incoming requests => reduced

Replication of data using single-master multiple-slave scheme for
high-volume environments

Highly configurable via a single configuration file that "does it all"

Preceded by the two X.500-related protocols: DAS, DIXIE (front ends)

"Lightweight": simplified encoding methods, runs directly on commonly
available TCP/IP

"Heavyweight":X.500DAPuses complex encoding methods, runs on rare OSI
network protocol stack

Simplified implementation of clients and servers by eliminating infrequent
and redundant DAP features/operations

Data elements represented as simple text strings, while messages wrapped in
binary encoding for efficiency

Uses a subset of the X.500 encoding rules to further simplify implementation

A directory service that enables a user to locate remote resources ANYWHERE
on a distributed network.

A dynamic system that provides/fetches resources based on individual user's
queries.

A model that would utilize and manage the existing system in a more
organized way.

Examples:"OmniPrint" service from anywhere on the network, location and
availability of a coffeemaker!

Application needs: data elements, service performance (latency, throughput,
e.g., 480K searches per hour)

User needs: accuracy, privacy, up-to-date, completeness, security, balance
for all users

Extensibility: Must be able to extend to distributed and replicated models

Platforms supported: Should accommodate heterogeneous platforms

T. Howes et. al., *Understanding and Deploying LDAP Directory Services*,
MacMillan Technical Publishing, 1999

LDAP bindings are provided in many languages, such as Python and Java.
OpenLDAP provides C bindings.

dn: uid=lt412-p3,ou=People,dc=cs,dc=luc,dc=edu
uid: lt412-p3
cn: LT 412 P3 Lab
givenName: LT 412 P3
sn: Lab
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$/I5v6ig6$aDHu3Idj8i98kb9XVHlvq0
shadowLastChange: 12695
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1012
gidNumber: 250
homeDirectory: /homes/users/lt412-p3
gecos: LT 412 P3 Lab

Continuous Integration and the Key Characteristics of Distributed Systems

Setting up Sphinx - Mac OSX (Using HomeBrew instead of MacPorts)