Chapter 2 eDirectory Basics

Troubleshooting and managing eDirectory can be difficult if you do not have a good grasp on how eDirectory works. In preparation for the advanced information presented in this book, you need to have a baseline understanding of certain terms and concepts. This chapter provides that baseline, including information on the following:

Image   A brief history of NDS/eDirectory and its versioning

Image   The eDirectory database structure

Image   Partition and replica types

Image   Bindery services

Image   Time synchronization

Image   DHost

Image   Service Advertising Protocol (SAP) and Service Location Protocol (SLP)

Image   Object attribute names versus schema attribute names

As more and more applications are starting to include Lightweight Directory Access Protocol (LDAP) as an option to access directory services (DS), it is essential to also include LDAP terminology in your knowledge repertoire. Also discussed in this chapter is the integration of NDS and LDAP, and some of the new LDAP server features introduced for eDirectory versions 8.5 and higher.

NOTE

Much of the information presented in this chapter is also applicable to versions of NDS prior to eDirectory 8.5. Version-specific features are noted where applicable.

A Brief History of NDS/eDirectory and Its Versioning

The meaning of the acronym NDS has changed a number of times since it was first introduced with NetWare 4.0. When Novell initially introduced NDS as a component of NetWare 4.0 in 1993, NDS stood for NetWare Directory Service because at that time NDS was available only on NetWare. Working with third-party vendors such as IBM, Hewlett-Packard (HP), Microsoft, and Sun, in 1999 Novell made NDS available for a number of different platforms:

Image   NDS for Windows NT

Image   NetWare Services for UnixWare 7

Image   NDS for Solaris

Image   NetWare 4.1 Services for HP 9000

Image   Novell Network Services for AIX

Image   Novell Network Services for OS/390

Accordingly, in 1999 the meaning for the NDS acronym was changed to Novell Directory Services. Later in the same year, Novell introduced the next generation of NDS, NDS 8 for NetWare 5 servers. Shortly after that, Novell split NDS off from NetWare into a separate standalone product, with a new name—eDirectory (which essentially is a rebranding of NDS 8).

eDirectory versions 8.5 and higher are platform independent and exist for a number of operating systems, such as Solaris, Linux, Tru64, Windows NT/2000, and, of course, NetWare. NetWare 6.0 shipped with eDirectory 8.6, and NetWare 6.5 shipped with eDirectory 8.7.1.

NOTE

During the 2002–2003 time frame, Novell consolidated the code base for eDirectory 8.7 so that the same version runs on NetWare, Linux, Solaris, Windows NT/2000, AIX, and HP/UX. Support for Tru64 was dropped starting in eDirectory 8.6.

Confused about the naming? The confusion between NDS 8, eDirectory, and eDirectory 8.x stems from the fact that eDirectory 8.5 was conceived long before eDirectory (NDS 8.x) ever reached a patch level of 8.73 (or higher). Despite these versioning conflicts, eDirectory 8.x is a new product and is an extension of the feature set originally released in 1999 with eDirectory (NDS 8.x). So how do you determine if you have NDS 8, or eDirectory, or eDirectory 8.5/8.6/8.7? One way is to look at the version numbering of the NDS module.

When NDS was introduced, Novell Engineering used the industry-standard version-numbering convention, such as “version 2.96,” in version-stamping the DS module files. At the same time, it used a variant of standard version numbering (296 for version 2.96, 489 for version 4.89, and so on) to refer to the same version in print or in conversation. For instance, DS.NLM for NetWare 4.10 would report “version 4.89,” but when you were communicating with Novell or looking at the Novell Support Knowledge Base, it would be referred to as “DS 489.” By the time NetWare 5.0 was released, NDS was up to the “700 series,” while NetWare 4.11 and 4.2 continued with the “600 series” of version numbering. Next came NDS 8/eDirectory. They were given the “800 series” numbering. But Novell broke the mold when eDirectory 8.5 was released; its numbering is not the “850 series” as you might expect, but 85.xx! What is more annoying is that eDirectory 8.6 on NetWare 6.0 reports a version number in the form 10110.20!

The seemingly inconsistent numbering system is a major source of confusion for network administrators when they’re trying to figure out whether they are running NDS 8/eDirectory or eDirectory 8.x. For instance, NDS 8/eDirectory reports (via NDIR DS.NLM /VER or MODULES DS, for example) the version of DS.NLM as 8.77 when you are running NDS 8. Common logic would suggest that because DS.NLM v8.77 is numerically higher than eDirectory 8.5, you are running “the latest.” Unfortunately, this is not the case.

NOTE

Novell is now using the terms NDS 8.xx to refer to the original eDirectory product, NDS to refer to the non-cross-platform versions of NDS, and eDirectory 8.x to refer to the newer product.

NOTE

The term NDS is also used to refer to Novell’s DS technology in general. The context in which NDS is used should not cause any confusion if reference is made to the technology or to legacy versions of DS.NLM.

Table 2.1 lists the version number associated with each different version of NDS to help you determine what version of NDS/eDirectory you are running.

TABLE 2.1 NDS and eDirectory Version Numbering

Image
Image

TIP

A list of specific version numbers assigned to eDirectory 8.6 and above (including patches) can be found in Novell Technical Information Document (TID) #10066623.

The most accurate way to determine the version of NDS you are currently running is to query the DS module when it is running. For a NetWare server, you can use the console commands VERSION or MODULE DS. The following is an example of output from the MODULE command:


NETWARE61_SERVER: module ds
DS.NLM
  Loaded from [SYS:SYSTEM]
  (Address Space = OS)
  Novell eDirectory Version 8.7.1 SMP

  Version 10510.64 July 11, 2003
  Copyright 1993-2003, Novell, Inc.  All Rights Reserved.
         Image Patents Pending.


Alternatively, you can use DSREPAIR.NLM. It reports the version of DS at the top of the screen (using the Development string). NDIR.EXE run from a workstation could report inconclusive version information. For instance, the following is the output from scanning DS.NLM for NetWare 6.5:

F:>ndir systemds.nlm /ver
NETWARE_65_A/SYS:SYSTEM

   DS.NLM:
   Version Novell eDirectory Version 8.7.1 SMP
   Copyright 1993-2003 Novell, Inc.  All rights reserved.
        Image Patents Pending.
   Checksum is BA00 F7C1 2553 3F47 9F4F 43C2


Notice that the Development version string is not displayed in this output. If you examine the file using Windows Explorer, however, both the Marketing and Development strings are reported.

On non-NetWare platforms (such as Windows 2000 or Solaris), you will likely already be running at least NDS 8/eDirectory, if not eDirectory 8.5 or higher. On Windows NT/2000, you can either launch dsrepair.dlm or look at the Agent tab of ds.dlm’s configuration screen, as shown in Figure 2.1. On Unix/Linux, you use the ndsstat command to determine the exact version number:

[RH8-VM root]# ndsstat
Tree Name: RH9-NDSTREE
Server Name: .CN=RH9-VM.O=Testing.T=RH8-NDSTREE.
Binary Version: 10510.64
Root Most Entry Depth: 0
Product Version: NDS/Unix - NDS eDirectory v8.7.1 [DS]


FIGURE 2.1 Checking the version of eDirectory running on Windows 2000.

image

The eDirectory Database Structure

This section discusses the components that make up the eDirectory database structure. For any kind of database, there exists a set of rules that govern the type of information the database can contain and possible relationships between the different data items contained within. This set of rules is known as the database schema.

In simple terms, eDirectory’s schema is a set of rules that stipulate the type of objects that can exist in an eDirectory tree, the possible locations of those objects in the tree, and the information that can and must be maintained about the object. Each object belongs to an object class that specifies which attributes (that is, types of information) can be associated with the object. Every attribute is based on a set of attribute types that are, in turn, based on a standard set of attribute syntaxes.

The eDirectory schema controls not only the structure of individual objects but also the relationship among objects within the DS tree. The schema rules allow some objects to contain other subordinate objects. Thus the schema gives structure to the DS tree. Furthermore, eDirectory implements an object-oriented structure made up of objects that can receive attributes from other objects; this idea is referred to as inheritance in object-oriented paradigms.

NOTE

The concept of inheritance is simple: Any property or attribute defined at a higher level of the hierarchy automatically flows down and is available for use at the lower levels.

NOTE

You can find the set of schema files used by eDirectory installation in the SYS:SYSTEMSCHEMA directory on a NetWare server, C:NovellNDS folder in Windows, or under /usr/lib/nds-schema on Unix/Linux.

Classes

A class in eDirectory is a definition for an object type. Classes you are likely to be most familiar with are the User class, Print Queue class, and the NCP Server class. Each class definition contains a list of properties (known as Attributes) that are used to describe the class. In essence, the class definition is a blueprint or set of rules for how to make an object of a specified class.

There are three categories of classes: the effective class, the non-effective class, and the auxiliary class.

An effective class is a class that can be used to make objects that actually show up in the eDirectory tree. User, Print Queue, and NCP Server are examples of effective classes; if you search the eDirectory tree using NetWare Administrator or ConsoleOne, you can find objects that are of these types.

A non-effective class is a class whose objects do not appear in the eDirectory tree but is used to build other non-effective and effective classes. This allows classes to simply inherit the class information from the non-effective superclass rather than repetitively define it. Examples of non-effective classes are the Person, Queue, and Server classes, as illustrated in Figure 2.2.

FIGURE 2.2 An example of the NDS/eDirectory class hierarchy.

image

You can use NDS Snoop to manage and examine your schema. You can download a copy of Snoop from www.novell.com/coolsolutions/nds/features/a_ndssnoop_nds.html. Because NDS Snoop can modify the schema and NDS objects, you need to be careful when using it. Figure 2.3 shows the class hierarchy of the User class, as viewed in NDS Snoop.

FIGURE 2.3 Viewing class hierarchy by using NDS Snoop.

image

NOTE

In essence, a non-effective class can be considered a placeholder for a group of attributes. A non-effective class cannot be used to create objects but can be specified as a class from which other classes can inherit attributes.

All objects of a given effective class carry the same set of properties associated with the effective class and its parent classes (which are referred to as superclasses). There are, however, circumstances in which a set of attributes needs to be added to only a subset of objects of a given class rather than to all the objects of that class. This is where auxiliary classes come in.

NOTE

The base schema defines the following non-effective classes:

Image   ndsLoginProperties

Image   Partition

Image   Resource

Image   Server

Although Top is flagged as an effective class, no object can be created by using the Top class.

NOTE

Starting with NetWare 5, the schema class Tree Root (T=) is used to indicate the top of the tree. Previously, this was referred to as [Root]. Therefore, you will find documentation and utilities still making references to [Root], especially when discussing NDS partitioning and related concepts.

An auxiliary class is a class whose set of attributes can be added to particular eDirectory object instances rather than to an entire class of objects. For example, a network monitoring application could extend the schema of your eDirectory tree to include an On-Call Pager auxiliary class. You could then extend individual User objects with the attributes of the On-Call Pager class as needed by adding the auxiliary class to the Object Class attribute of the User object. When the auxiliary class is added, the object inherits all the attributes of the auxiliary class while retaining all its own attributes. When the auxiliary class is removed from the object, the auxiliary class attributes are removed from the object, and the object no longer has access to those attributes.

The following are some rules for using auxiliary classes:

Image   The Object class flag should only set the Auxiliary class flag.

Image   Auxiliary classes cannot have the Container flag set.

Image   Auxiliary classes cannot have the Effective class flag set.

Image   Creation fails if rules are not followed.

Image   Auxiliary classes can have mandatory attributes, optional attributes, or both. (DS will not add an auxiliary class to an object without values for all mandatory attributes.)

Image   Auxiliary classes are not required to have superclasses but may contain superclasses.

Image   Auxiliary classes should not contain Top as a superclass or define containment.

Image   Auxiliary classes and superclasses are combined.

Image   Attributes of an auxiliary class and a superclass are deleted if the auxiliary class is removed.

Image   Auxiliary classes can define naming attributes. (If an auxiliary class attribute is used to name an object, the object must be renamed to use a non-auxiliary class attribute before the auxiliary class can be removed.)

WARNING

When additional attributes are added to class definitions shipped with eDirectory (which are known as base classes), these extensions cannot be removed. On the other hand, you can remove an auxiliary class definition from the schema when you no longer need it. For instance, if you added an On-Call Pager attribute directly to the User class, you cannot remove this attribute at a later time. If you have defined an auxiliary class that contains this On-Call Pager attribute and associated this auxiliary class to existing User objects, however, you can later delete the auxiliary class when no more User objects are using it.

NOTE

Auxiliary classes are supported only by NDS 8 and higher. That is to say, NetWare 4.x (which runs NDS 6) and NetWare 5.x servers running NDS 7 do not support auxiliary classes. Objects containing auxiliary classes will be displayed as Unknown objects (but they are still known on the servers running NDS 8 or higher).

TIP

If you have a mixed-NDS-version environment that includes NDS 6 and 7, you need to ensure that you are using the latest DS.NLM updates. You can also refer to TID #10083622 for more information.

Every class in eDirectory has at least one superclass (as illustrated in Figure 2.2), with the exception of the Top class. Top is where all classes start their inheritance. This means all classes in eDirectory contain some attributes that are common to all—those defined in the Top class. Some of these common attributes are ACL, Back Link, CA Private Key, CA Public Key, Equivalent to Me, GUID, and Revision.

NOTE

Appendix C, “eDirectory Classes, Objects, and Attributes,” lists some of the most commonly encountered object class and base attribute definitions found in an NDS/eDirectory tree.

The following are some of the schema changes made since NDS/eDirectory 8:

Image   ndsLoginProperties is a new non-effective class. It contains all the attributes required for an object to authenticate to the DS tree.

Image   The Person and Organizational Person classes are now effective classes, and because they now inherit the required login attributes, Person and Organizational Person objects can log in to the DS tree.

Image   The ability for Country, Locality, Organization, and Organizational Unit class objects to contain domain objects comes with the installation of NDS 8 and higher. The domain (not to be confused with Windows NT or Active Directory domain) and dcObject classes and the dc attribute were introduced to support RFC 2247, “Using Domains in LDAP/X.500 Distinguished Names.”

domain objects can contain all the leaf objects in the operational schema. The ability for domain objects to contain container objects such as Country, Locality, Organization, or Organizational Unit, however, does not come automatically. This functionality must be added to the schema by running the Optional Schema Enhancement option (see Figure 2.4) in DSRepair, which is for eDirectory 8.5 or higher.

FIGURE 2.4 Extending schema containment functionality.

image

Attributes

Attributes are used to define the various aspects of an object. Examples of attributes associated with a User class object are be Surname, Full Name, and Network Address. Each of these holds a piece of information relevant to the User class object in question.

NOTE

Novell documentation and utilities use the terms property and attribute interchangeably to mean the same thing.

It is important to understand other aspects of attributes. The first of these aspects is the idea of a mandatory attribute. A mandatory attribute is an attribute that is required in order for the object to be created; if a mandatory attribute is missing, the object cannot be created. The Surname attribute, for example, is required when creating a user. That is to say, if you do not provide the user’s surname, you will be unable to create the User object.

TIP

With many of the DS-aware utilities, when one or more of the mandatory attribute values have not been supplied, the Create or OK button is grayed out, preventing you from creating the object.

Loss of a mandatory attribute after creation of the object causes the object’s class attribute to be changed to Unknown. Figure 2.5 shows ConsoleOne with several Unknown objects in the tree. The circles with the question marks in the figure are yellow, making the Unknown class objects easy to spot.

FIGURE 2.5 An example of Unknown class objects in ConsoleOne.

image

There is a second type of object seen in NetWare Administrator, ConsoleOne, and other management utilities that many people mistake for an Unknown class object. This type of object appears either as a white square with a black question mark inside it in NetWare Administrator (see Figure 2.6), a cube with a black question mark beside it (see Figure 2.7), or a white dog-eared rectangle with a black question mark inside it in NDS iMonitor (see Figure 2.8). This particular type of object is not of the Unknown class but means that the necessary snap-in component for NetWare Administrator, ConsoleOne, or NDS iMonitor/iManager is not available, and consequently the object cannot be administered with the tools. Such objects are referred to as unmanaged or unmanageable objects.

FIGURE 2.6 An example of unmanageable objects in NetWare Administrator.

image

FIGURE 2.7 An example of unmanageable objects in ConsoleOne.

image

FIGURE 2.8 An example of unmanageable objects in NDS iMonitor.

image

The opposite of a mandatory attribute is an optional attribute. As the name implies, this is an attribute that is not necessary to create the object in question. The Full Name attribute of the User class is an example of an optional attribute. It can be present in the object that has been created, or it can be omitted.

Attributes can also be single valued or multivalued. A single-valued attribute, such as the Surname attribute, can contain only one value. If you change that value, the old value is replaced with the new one.

A multivalued attribute is an attribute that can contain a number of entries. The Network Address attribute is such an attribute. It can contain one entry for every workstation a user has logged in to, and when you look at the list in management tools such as NetWare Administrator or ConsoleOne, you may see multiple values listed, one for each station the user is logged in to.

FIGURE 2.9 Examining operational attributes by using DSBrowse.

image

Each class has one or more attributes designated as naming attributes (referred to with Named By in the schema definition) used to name the actual objects. These attributes can be either mandatory or optional, but you must give at least one of them a value when creating an object of that class. If the only naming attribute is declared as optional, it is, in effect, considered to be mandatory.

Naming attributes can be multivalued; in other words, more than one name (value) can be added to the naming attribute. For example, a User object can have both Tasha and Chelsea as values for the CN attribute. (Additional CN entries are associated with the Other Name field found in tools such as ConsoleOne and NetWare Administrator.)

Some object class definitions specify multiple naming attributes. For example, the NetWare server license container object is of the NLS:Product Container object class and is named by three attributes NLS:Publisher, NLS:Product, and NLS:Version. An example of a typeless relative distinguish name (RDN) for such an object is

Novell+NetWare 6 Server+600


where plus signs (+) are used to indicate where the additional attributes’ values begin.

A naming attribute does not necessarily reflect the class an object belongs to. Many classes, such as Computer, User, and Server, are named by their CN (Common Name) attribute. In such names, the naming attribute itself does not indicate which class the object belongs to, but the value of the naming attribute might suggest the nature of the object. For instance, the Security container found in eDirectory trees uses CN as its naming attribute. However, some naming attributes are closely tied to specific classes. For example, the C (Country Name) attribute is used to name only Country objects.

It is a common misconception that all leaf objects in a DS tree have CN in their typeful partial name (for example, CN=objectname). Because there is no (schema) rule stating that one must use CN as the naming attribute for a leaf object, not all leaf objects have CN in their typeful partial names. The License Certificate object is an example of such an object (see Figure 2.10). It uses NLS:License ID as the naming attribute.

FIGURE 2.10 License Certificate objects do not use CN for their naming attribute.

image

Attribute data can be represented in many different forms in the eDirectory database. In defining an attribute, you also need to define the format used to store the data. This format is called the syntax.

Syntaxes

Another important piece of the database structure to be aware of is syntax—a definition for what format an attribute’s data is in, such as “this is a text string” or “this is to be interpreted as a network address.” Table 2.2 lists all 28 syntaxes employed in every NDS/eDirectory tree. The syntax names are given in standard C-code format. Also listed in the table is the minimum DS version needed for accessing those syntaxes via LDAP.

TABLE 2.2. eDirectory Attribute Syntaxes

Image Image Image Image Image Image Image Image Image

NOTE

Attribute type definitions are built on attribute syntaxes. For example, the On-Call Pager attribute is of the type SYN_TEL_NUMBER. Software developers extending the schema can create new attribute types by using these predefined syntaxes, but they cannot create any new syntax definitions.

NOTE

The nwdsdefs.h C header file of the Novell Developer Kit (NDK) also shows a SYNTAX_COUNT (decimal value 28) definition. It is not a syntax type, but it shows the number of syntaxes defined.

Matching rules indicate the characteristics that are significant when comparing two values of the same syntax. The approximate comparison rule is used in searches and comparisons on syntaxes with lists of strings, and it can also be used with syntaxes that have multiple fields and an ID field:

Image   Strings—The approximate rule determines whether a string is present in a syntax with a string list.

Image   IDs—The approximate rule determines whether an ID matches the ID in a corresponding field while ignoring the other fields in the syntax. Although most of the application programming interface (API) structures for syntaxes require an object name, NDS replaces these names with IDs in the comparison and search operations.

Bear in mind that this NDS approximate matching rule is quite different from the LDAP approximate matching rule. In LDAP, approximate matching (known as soundAlikeMatch) means that the names sound similar. NDS does not support this type of matching; implementation of approximate matching rules is not a must for LDAP servers, as per RFC 2252.

Default ACL Templates

Every object in the DS tree has an (optional) ACL attribute so you can control and protect the object and its attribute values from being modified. The ACL holds information about which trustees have access to the object itself (entry rights) and which trustees have access to the attributes for the object. This information is stored in sets of information that contain the following:

Image   The trustee name (full DN [FDN])

Image   The attribute in question: [Entry Rights], [All Attributes Rights], or a specific attribute

Image   The privileges (such as Browse or Write)

Default ACL templates are defined for specific classes in the base schema and provide a minimum amount of access security for newly created objects. This permits ACL values to be assigned automatically when the object is created, without manual intervention. The Top class defines a default ACL template:

Object Name

Default Rights

Affected Attributes

[Creator]

Supervisor

[Entry Rights]

This allows the object that creates another object to have full control (Supervisor rights) over the created object. Because of class inheritance, all object classes get this default ACL template. As a result, all objects created have at least one ACL assignment made upon their creation. The purpose of this ACL is to ensure that every object added to the DS tree is manageable, unless manually changed later.

NOTE

At some companies, the DS administrator sets up some help desk users that have Create (but not Delete) rights in certain containers in the tree so the help desk can, for instance, create users and groups when necessary but not allow them to delete anything. Because of this default ACL template from the Top class, however, these help desk users will be able to delete the objects they created, thus defeating the intention, unless extra steps are taken. See Chapter 15, “Effectively Setting Up eDirectory Security,” for details on how to best set up help desk rights.

Because an object inherits the default ACL templates that are defined for the object class and its superclasses, the overall ACL template is the sum total of all default ACL templates of its superclasses plus any defined for that object class. For example, the NCP Server object inherits default ACL templates from Top and Server and then defines one for itself, as follows:

Object Name

Default Rights

Affected Attributes

    Class Defined For

[Creator]

Supervisor

[Entry Rights]

Top

[Self]

Supervisor

[Entry Rights]

Server

[Public]

Read

 Network Address

Server

[Public]

Read

 Messaging Server

NCP Server

The net effect is that the user who creates an NCP Server object in the tree and the server itself are granted Supervisor rights to this NCP Server object, and the other objects in the tree (through [Public]) have Read access to the server’s Network Address and Messaging Server attributes.

There are two situations in which the default ACL template values are not applied:

Image   The code that creates the object overrides the default values.

Image   The creator of the object has effective rights comparable to those in the default template. In this case, the rights are not granted explicitly.

NOTE

Only base schema objects can have default ACL templates. Software developers extending the schema cannot create any default ACL templates for new objects. When an object is created in the tree, however, the creation process can set the object’s ACLs to any value, including one that changes a value that comes from a default ACL template.

Naming Rules and Restrictions

If you are considering extending your schema, using either standard classes or auxiliary classes, you should be aware of the naming rules and restrictions of class and attribute names. For a new class name or attribute name to be a valid NDS name, it must fit two criteria:

Image   The name cannot exceed 32 characters. Spaces are allowed but are counted as part of the 32-character limit. Spaces are not recommended because they are not allowed in LDAP schema names.

Image   The name must be unique in its level of hierarchy in the NDS tree. Names are case-insensitive, although case can be used for easier visual discrimination.

For example, NDS considers Accounting and accounting to be the same and will not allow two class names or two attribute names different only in capitalization to be created. However, NDS does allow the same name to be used for a class name and an attribute name. Thus Accounting could be the name of a class and accounting the name of an attribute. For example, NDS has defined a number of classes and attributes with the same name: User (class) and User (attribute), Queue (class) and Queue (attribute), and Resource (class) and Resource (attribute).

If you want an application to also work with LDAP applications, your schema extensions should conform to the LDAP naming conventions, which are more restrictive than NDS schema naming conventions. When creating an LDAP schema name, you must conform to the following rules:

Image   Use alphanumeric characters. LDAP allows one hyphen in a name. The hyphen is the only non-alpha-numeric character allowed, and it cannot start the name. It is recommended that a name contain only alphanumeric characters, without a hyphen.

Image   Start with an alphabetic character. Numeric characters cannot start a name, nor can a hyphen.

Image   Do not include spaces.

Image   Create a unique name for the type (class or attribute). Note that like NDS, LDAP names are not case-sensitive.

Image   Do not create a name with more than 32 characters. This is actually an NDS restriction. LDAP allows longer names, but NDS does not currently support names longer than 32 characters. (At the time of this writing, there is no RFC that specifies any size limits for the various LDAP entities, such as class names or DNs.)

NOTE

The restriction on alphanumeric characters and one hyphen in the name applies only when dealing with the LDAP schema. Objects in an LDAP-compliant directory may contain multiple hyphens as well as metacharacters such as + and ;. If one of the following characters appears in the name, it must be escaped using the backslash character ():

Image   A space or # character occurring at the beginning of the string

Image   A space character occurring at the end of the string

Image   One of these characters: , + " < > ;

A typical LDAP convention is to lowercase the first word in the name and then capitalize the initial letter of other words that make up the attribute’s or class’s descriptive name. If the name is composed of a single word, it is generally used as all lowercase. Here are some examples:

chair

leatherChair

importedSofaBed

NOTE

For more information about LDAP and NDS integration, refer to the section “The LDAP Server for NDS,” later in this chapter.

The following is a brief review of some of the NDS object naming rules and conventions:

Image   NDS treats underscores the same as spaces. Therefore, name has spaces is the same as name_has_spaces. Consequently, if a DS object is called name_has_spaces, Novell’s LDAP server would return that object as the result for a search query for name has spaces.

Image   The RDN or partial name is the name of the object itself and does not include names of its parent objects (for example, CN=Tasha).

Image   The DN or FDN is the full name of an object, which includes the names of its parent objects. It is referred to as the complete name in some cases. An example is CN=Tasha.OU=Customer_Service.O=Company.

Image   The NDS context identifies an object’s location within the NDS tree. It is a list of all the container objects leading from the object toward the top of the tree, called [Root]. Each NDS client (which may be a workstation, a workstation-based utility, or a server-based application) maintains a name context. When an RDN is used, the name is expanded with the addition of the name context to the name, thus forming an FDN, before being passed to DS.

NOTE

An object is exactly, and uniquely, identified by its DN. No two objects can have the same FDN. Furthermore, no two objects can have the same RDN if they both exist in the same context, even if they are of different object classes. For example, NDS will not allow you to create a user called Tasha Golden and a group called Tasha_golden in the same container because names are case-insensitive and underscores are the same as spaces.

Image   A typeful object name uses attribute type abbreviations (based on the naming attributes) to distinguish between the different container types and leaf objects in an object’s DN or RDN.

     If you do not provide a typeful object name, NDS uses the following guidelines, known as the default typing rule, for the attribute types for each object:

Image   The leftmost object is assumed to be CN=.

Image   The rightmost object is assumed to be O=.

Image   All intermediate objects are assumed to be OU=.

     NDS, however, is smart enough to automatically determine whether the leftmost object is a leaf or container object and derive a proper type for it.

NOTE

A typeful FDN is also known as a canonical name: a name that includes a full naming path with a type specification for each naming component. DS operates on canonical names only.

TIP

The default typing rule is only applied to untyped portions of a name; typed objects are not touched. For example, the default naming rule will expand the typeless name Kim.Webservices.L=Novell.Company to CN=Kim.OU=Webservices.L=Novell.O=Company.

WARNING

The fact that the default typing rule always assumes that the rightmost object is an Organization object (O=) and the leftmost object is an object named by CN= poses a problem to applications if the object’s topmost container is not an Organization object or if its naming attribute is not CN (as is the case for the License Certificate object). For example, if you have a Country object at the top of your tree and try to use a typeless name similar to Kim.Webservices.L=Novell.Company.C=US, you might expect the converted name to be CN=Kim.OU=Webservices.L=Novell.O=Company.C=US. Unfortunately, what you get is CN=Kim.OU=Webservices.L=Novell.OU=Company.C=US. This is because the rightmost object is already typed, and the default typing rule says that all intermediate objects are assumed to be OU= (unless they’re already typed.

Image   A typeless name does not include any of the object attribute types. For example, the typeless FDN for CN=Tasha.OU=Customer_Service.O=Company is Tasha.Customer_Service.Company.

NOTE

There is no published guideline that a DS-aware application needs to support typeful or typeless naming. Therefore, it is all up to the developer. A “well-written” utility will accept an object name in either format. However, some accept only typeful names. In most cases, unless specified, you should try the typeless name first—it is easier to type. But if the object is located in a tree branch that contains Country, Locality, or domain objects, you need to use the typeful name.

You should also be familiar with the significance of periods in DS object names. NDS uses periods as delimiters between object names in the context. This means you should not use periods when naming objects. If there is a need, however, you can use periods; ConsoleOne allows you to create an object that has embedded periods. With other tools, however, you must escape the period by using a backslash (for example, enter the name as firstname.lastname). Note that ConsoleOne permits the creation of such an object without having to escape the period and shows the object as firstname.lastname (see Figure 2.11), but other tools do not (see Figure 2.12).

FIGURE 2.11 ConsoleOne, showing a User object containing a period in its name.

image

FIGURE 2.12 NetWare Administrator, showing a backslash in an object name.

image

An LDAP query of an NDS object that has embedded periods in its name will result in the name without the periods being escaped. That is, the object will appear as firstname.lastname and not firstname.lastname, as shown in Figure 2.13.

FIGURE 2.13 LDAP, not showing escaped periods in object names.

image

NOTE

To log in as a user that has embedded periods in the name, you must escape each period when entering the name, unless the application you use takes care of that for you.

We have all become familiar with using a leading period in an object name to mean that the name is to be treated as an FDN and that the name context information should not be added to it. However, there is also a trailing period rule that not everyone is aware of. Each trailing period in a name tells DS to remove one object name from the left side of the name context before appending the remaining names to the RDN. For example, say your current name context is OU=Department1.O=Company and you specified the following RDN:

CN=Admin.


DS will remove one name (OU=Department1) from the left side of the name context and append the remaining name to the RDN (CN=Admin), producing the following FDN:

CN=Admin.O=Company


Multiple trailing periods can be used to move up multiple levels in the tree; some utilities (such as CX.EXE) will return an error if you specify too many trailing periods, taking you past the [Root] level in the tree.

NOTE

You cannot use the leading period rule in conjunction with the trailing period rule. An entry such as .CN=admin. would result in an error.

TIP

The trailing period rule can come in handy when your current name context is set to Container A (for example, containerA.department.company) but you need to specify an object name from Container B (whose context is containerB.department.company). Instead of changing your current context or having to enter a long FDN such as objectname.containerB.department.company, you can simply type objectname.containerB..

The RDN of a DS object is limited to 128 characters, and the FDN can be a maximum of 256 characters. However, the total number of intermediate containers you can specify in a typeful FDN is less than in its typeless variant, due to the overheads in typeful naming. Table 2.3 summarizes the maximum number of characters allowed in the various categories of names.

TABLE 2.3 NDS Object Naming Restrictions

Image

NOTE

Bear in mind that although the maximum number of characters allowed for an RDN is 128, most of the DS objects’ RDNs are actually restricted to 64 characters. This is because they use CN as the naming attribute, and CN is defined to be a 64-byte case-ignored string. This limitation is causing some headaches in situations where long Internet domain names are used and NetWare 6.5’s certificate service (Novell Modular Authentication Service [NMAS]) is unable to create key material objects (KMOs)—digital certificates—because a KMO object name includes the server name plus domain name. As a result, you cannot use secure Web services on these servers. Novell is aware of this shortcoming, and a longer CN limit may be introduced in a future release of eDirectory.

Partition and Replica Types

Now that you have an understanding of what makes up the eDirectory database, let’s look at how the database is distributed.

The eDirectory database is a loosely consistent, partitioned, hierarchical database. This means that the data can be divided into many different logical pieces, called partitions, and you can put a copy, or replica, of any user-created partition on a number of servers. The DS module will keep the information in different replicas synchronized, but bear in mind that at any given point in time, the information in one replica may not fully match the information in another replica. The DS module handles the discrepancy between copies by maintaining information about which copy has the most current changes and propagating, or replicating, that information to the servers that have older information. It is important to note that the eDirectory database is continually converging to a consistent state. When it completes synchronization on a partition, the partition is consistent until the next time data is changed.

When you first installed your server, the system created a number of special partitions in the eDirectory database:

Image   The System partition

Image   The Schema partition

Image   The External Reference partition

Image   The Bindery partition

The partitions discussed here are logical partitions that exist within the eDirectory database (see Figure 2.14). They are not physical partitions on a hard disk.

FIGURE 2.14 eDirectory partitions.

image

In addition, a user-defined partition may have been automatically added if the server is one of the first three servers installed in the partition.

The System Partition

The System partition keeps track of information specific to the local server. This information is not synchronized with other servers in the tree. This is the partition that the Limber process operates on. See Chapter 6, “Understanding Common eDirectory Processes,” for more information on the Limber process.

Information contained in the System partition includes the following:

Image   Information on where the server is located in the eDirectory tree, including its typeful FDN (for example, CN=RH9-VM.O=Testing).

Image   eDirectory indexes defined on the server. (See Chapter 16, “Tuning eDirectory,” for information about the use of indexes.)

Image   The state of background processes (including errors), if the server is running NDS 5.95 or later (for NetWare 4.11 and NetWare 4.2) or any version of NDS/eDirectory on NetWare 5.x and higher.

The partition ID of the System partition is always 0.

The Schema Partition

The Schema partition keeps track of all the object class and attribute definition information for the server. This information is synchronized between servers, using a process called Schema Skulk or Schema Sync, and it means that each server has a complete copy of the schema. The Schema Sync process starts with the server that contains the Master replica of the [Root] partition and propagates to the other servers with a copy of [Root]. Then it continues with the servers in the child partitions, until all servers have received a copy of the schema.

The partition ID of the Schema partition is always 1.

The External Reference Partition

The External Reference partition (commonly referred to as the ExRef partition) contains information about objects that don’t exist in a partition on the local server. For instance, when a user logs in to the network, NDS looks up the user information by performing a name resolution process (discussed in the NDS Name Resolution and Tree Walking” section in Chapter 6). The client software navigates the different partitions in the NDS tree until it finds the User object. If this process is repeated, however, every time the user logs in or the object is referenced, efficiency suffers. To avoid having to repeat the process, NDS builds an external reference (a pointer, essentially) to that object and stores it in the ExRef partition on the server from which the User object is making the request. The next time this user authenticates to the network, the external reference (exref) is used to quickly locate the object within NDS. Such exrefs are deleted if not used for an extended period of time.

NOTE

In addition to providing tree connectivity (that is, tree-walking) and speeding up object authentication, exrefs are also used to keep track of nonlocal objects when an object is added as a file system or local object trustee, or when an object is added as a member of a group.

TIP

When NDS creates an exref, a Back Link attribute is added to the referenced object to keep track of the server on which the exref was created. This becomes inefficient as the number of exrefs increases. Back links require a server to communicate with every server that contains a Read/Write replica of the partition the back link resides on. eDirectory 8.7 and higher uses the Distributed Reference Link (DRL) attribute instead of the Back Link attribute. Distributed reference links have the advantage of referencing a partition rather than a specific server. When information is needed about a DRL, any server with a replica of the partition can supply the information.

Although the ExRef partition exists on every server, only servers with exrefs populate it. Like the System partition, the ExRef partition is not synchronized with other servers. The partition ID of the ExRef partition is always 2.

NOTE

Objects stored in the ExRef partition are called, appropriately, external reference objects. These objects are simply placeholders (but are not pointers, like Alias objects) that are simply representations of the real objects existing in the tree. An exref object is not a copy of the object because it does not contain any of the attributes that the real object has.

The Bindery Partition

All servers that have IPX enabled keep track of services learned from SAP traffic; SLP services are stored in the DS database. Each of these services is stored as a bindery SAP object, and these services are classified as dynamic bindery objects because they are automatically deleted when the server is shut down or when the offered service is no longer available. To provide backward compatibility with NetWare 2.x and NetWare 3.x and bindery-based applications, every server has a SUPERVISOR (pseudo) bindery user and maintains a bindery NetWare Core Protocol (NCP) file server’s Type 4 SAP object. These two bindery objects are static in nature and cannot be removed. All this information is maintained in the server’s Bindery partition.

Like the System and ExRef partitions, the Bindery partition is not replicated to all servers. Rather, it is kept specific to the server in question. The partition ID of the Bindery partition is always 3.

User-Defined Partitions

The last type of partition is the user-defined (or user-created) partition. This is the most common type of partition, and it is likely the type you are already familiar with. Any DS server may hold a copy of a user-defined replica. Changes to a user-defined partition must be distributed to other servers that hold a copy of the same user-defined partition. When these changes occur, they are replicated under the control of the Synchronization process.

A replica is a copy of a user-defined partition that is placed on an NDS server. There is no limit to how many replicas a server can hold, subject to disk space availability. Only one replica of the same user-defined partition can exist on a server. There are six replica types:

Image   Master

Image   Read/Write

Image   Read-Only

Image   Subordinate Reference

Image   Filtered Read/Write (eDirectory 8.5 and higher)

Image   Filtered Read-Only (eDirectory 8.5 and higher)

Table 2.4 shows a summary of the capabilities of the various replica types. Each replica type is discussed in detail in the following sections.

TABLE 2.4 Replica Types and Their Capabilities

Image Image

The partition ID of a user-defined partition is always 4 or higher.

NOTE

Typically, the Master replica of [Root] will have a partition ID of 4 because that is the first user-defined partition that gets created. This may not always be the case, however, because another (Read/Write or Read-Only) replica may be designated as the Master replica at a later time and thus will have a different partition ID.

Master Replicas

The Master replica is the first copy of a new partition. When you install a new server into a new tree, that server automatically receives a Master replica of the [Root] partition. If you then create a new partition by using NDS Manager or ConsoleOne, the already-installed server receives the Master copy of that partition as well because it has the Master replica of the parent partition.

As discussed in Chapter 6, the Master replica must be available for certain partition operations, such as a partition join, a partition split, or an object/partition move. The Master replica can also be used to perform NDS operations such as object authentication, object addition, deletion, and modification.

A Master replica may be used to provide bindery emulation services because it is a writable replica type.

Read/Write Replicas

Similar to Master replicas, a Read/Write (R/W) replica is a writable replica type that can be used to effect object changes. Unlike Master replicas, however, Read/Write replicas are not directly involved in replica operations. The NDS server installation process will ensure that there exists one Master replica and two “full” replicas. (Filtered replicas do not count, as discussed later in this chapter.) When you install an NDS server into a partition that has only two replicas (one Master and one Read/Write replica, for instance), a third replica (Read/Write) will automatically be added to the new server. You normally create additional Read/Write replicas of a given partition to provide fault tolerance and to provide faster access to eDirectory data across WAN links.

TIP

If a Master replica is lost or damaged, a Read/Write replica can be promoted to become the new Master replica. See Chapter 11, “Examples from the Real World,” for some examples of this.

A Read/Write replica may be used to provide bindery emulation services because it is a writable replica type.

Read-Only Replicas

The Read-Only (R/O) replica type is seldom—if ever—used. It was added because Novell built NDS based on the X.500 directory standard, which specified Read-Only replicas.

Use of R/O replicas is strongly discouraged. They do not provide any advantages with regard to traffic management because they can actually generate more traffic than a Read/Write replica due to referral and redirection.

Any change directed at a server that holds an R/O replica of a partition would end up being redirected by the server to a server with a Read/Write or Master replica. The change would then be synchronized back to the server holding the R/O replica, through the normal synchronization process.

R/O replicas have been used to provide NDS data lookup, as in the case of an address book application. However, Filtered replicas (discussed later in this chapter) are better suited for these types of applications.

Read-Only replicas cannot be used to provide bindery emulation services because they are not writable.

Subordinate Reference Replicas

The Subordinate Reference (SubRef) replica type is the only user-defined replica type that is not actually placed manually. Rather, its creation and deletion are managed automatically by NDS. SubRef replicas are used primarily to provide tree connectivity. In simplest terms, a subordinate reference (subref) is a (downward) pointer to the child partitions. It links a parent partition to a child partition. A SubRef replica contains a complete copy of the partition root object of the child partition. It does not, however, contain any other data for the child partition. A SubRef replica has a complete copy of the partition root object, and it has a Replica attribute that contains the following information:

Image   A list of servers where replicas of the child partition are stored

Image   The servers’ network addresses (both IPX and IP)

Image   Replica types stored on these servers

Image   Other NDS partition information, such as an ACL summarizing all the effective rights at this point in the tree

In essence, a SubRef replica can be considered the glue that binds parts of the NDS tree together.

SubRef replicas cannot be used to provide bindery emulation services because they are not writable. Also, they cannot be used for fault tolerance purposes because they do not contain all the objects of a partition.

WARNING

It is possible to promote a SubRef replica to a Master replica as a last resort. However, because a SubRef replica does not contain any objects in the partition, you will lose all data in that partition. Refer to the “Server and Data Recovery” section in Chapter 11 for more details.

Filtered Replicas

eDirectory 8.5 introduced two new replica types: Filtered Read/Write and Filtered Read-Only replicas. A Filtered replica is essentially a Read/Write or Read-Only replica that holds only a subset of the objects or attributes found in a normal Read/Write or Read-Only replica. Filter replicas are used to specify which schema classes and attributes will be allowed to pass during synchronization. A Filtered replica ignores changes made to objects outside the filter.

Filtered replicas can be sparse or fractional replicas. A sparse filtered replica contains only objects of selected object classes. All other objects are filtered and not placed in the local database. A fractional Filtered replica contains only attributes of selected attribute types. All other attributes are filtered and not placed in the local database. A typical Filtered replica is both sparse and fractional because it filters both object classes and attribute types.

NOTE

An eDirectory sparse or fractional Filtered replica is also known as a virtual replica.

Filtered replicas are useful in the following situations:

Image   To control the size of the eDirectory Directory Information Base (DIB) on a server

Image   To improve search efficiency on specific object classes by storing just those object types and attributes in the replica

Image   To reduce eDirectory synchronization traffic directed at specific servers by eliminating unneeded objects and attributes from the synchronization process

To create a Filtered replica, you must first create a replication filter on the server that will host the Filtered replica. This replication filter determines which objects and attributes are allowed in the Filtered replicas that reside on the server. You create the replication filter via ConsoleOne.

NOTE

Each eDirectory server can hold only one replication filter. Consequently, all Filtered replicas stored on a server must use the same replication filter. It is possible to have a mixture of filtered replicas and unfiltered replicas on the same server.

WARNING

After a replication filter is modified, all filtered replicas that use it will be placed in the New replica state until they are refreshed with up-to-date data from the unfiltered replicas. This ensures that the information in the Filtered replicas is consistent and complete with respect to their unfiltered counterparts.

In addition to the desired classes and attributes stored in a Filtered replica, eDirectory must always synchronize attributes that are critical to the operation of eDirectory. The following schema flags cause the affected object classes and attributes to be included in a Filtered replica:

Image   SF_SPARSE_REQUIREDObject classes and attributes designated with this flag will always pass through the replication filter, regardless of the filter settings. The ACL attribute is an example (see Figure 2.15).

FIGURE 2.15 The SF_SPARSE_REQUIRED schema flag, which causes the ACL attribute to pass through a Filtered replica filter.

image

Image   SF_SPARSE_DESIREDThis flag allows desired classes and their required attributes to pass through the replication filter.

Image   SF_SPARSE_OPERATIONALThis flag identifies classes and attributes that must be cached on Filtered replicas (because they are part of the operational schema). Setting this flag on an object class or attribute type definition guarantees that the class or attribute is created as a reference object if it is not in the replication filter. The DS Revision attribute is an example of this.

eDirectory will also allow any objects referenced by an allowed attribute to pass through the filter in a reference state. For example, say a replication filter allows the object class User and attribute Group Membership but filters the object class Group. The Filtered replica will create the Group object and flag it as a reference object. The Group object is required to ensure database consistency, and the reference tag is used to ensure that the incomplete Group object does not synchronize to other servers.

Container objects in an eDirectory database are also allowed to pass through to any filtered replica. This ensures that all objects beneath the container can be created, if the filter allows them through. Container objects created in this manner are also flagged as reference objects. The Unknown object class is flagged as a container. This causes all objects with an object class type Unknown to also be created as reference objects in a Filtered replica.

NOTE

The eDirectory replica synchronization process takes advantage of Filtered replica types. If the outbounding server is running eDirectory 8.5 or higher, the destination server’s replication filter is read, and only the required data is sent. Network traffic is significantly reduced during these types of replica synchronizations. If the outbounding server is not running eDirectory 8.5 or higher, the standard replica synchronization process takes place (that is, sending all changed data), but the inbounding server accepts only the data that is allowed through the replication filter.

Filtered Read/Write replicas can make modifications to objects and attributes that pass through the replication filter. These changes will be passed to all other servers in the replica ring. However, a Filtered Read/Write replica is not allowed to fully participate in the transitive synchronization process (see the section “The Synchronization Process” in Chapter 6) and will not send changes that did not originate in the local database. This is necessary to ensure database consistency for all changes.

NOTE

Because Filtered Read/Write replicas do not contain complete information about objects, you should avoid using them to provide bindery emulation services. Filtered Read-Only replicas cannot be used to provide bindery emulation services. Furthermore, Filtered replicas do not provide fault tolerance because they do not contain complete information about the objects in a replica.

Like their Read-Only replica cousins, Filtered R/O replicas cannot make modifications to objects and attributes that pass through the replication filter. Filtered Read-Only replicas can be used for data lookup only.

NOTE

Because data in a Filtered replica is incomplete, an LDAP search could produce constrained or incomplete results. Therefore, by default, an LDAP search request does not examine filtered replicas. While you’re performing a Filtered replica search, the search may not return the results as per the replica filter due to either chaining or referral (see the “LDAP Name Resolution Models” section, later in this chapter). If you are certain that a Filtered replica holds the data you need, you can configure the LDAP server to search Filtered replicas (through the Filtered Replica Usage tab in the LDAP server object properties).

Parent/Child Relationships

Each server that contains a replica of the parent partition also contains a Subordinate Reference replica of every child partition that is not physically located on that server. Consider the sample NDS tree shown in Figure 2.16. This tree contains four partitions: Root, A, B, and C. Three file servers—FS1, FS2, and FS3—are installed in this tree, one server in each of the O= containers. Each server holds the only copy of the partition (Master replica) in which the server is contained; the [Root] partition is stored on FS1.

FIGURE 2.16 A sample NDS tree with four partitions.

image

Table 2.5 shows the replica structure in this tree.

TABLE 2.5 Replica Structure of a Sample NDS Tree

Image

FS1 contains Subordinate Reference replicas because the parent of Partitions B and C, Partition [Root], resides on the server, but Partitions B and C do not. Neither FS2 nor FS3 needs a SubRef replica because neither Partition B nor Partition C has a child partition. If the Master partition of [Root] were placed on FS2 rather than FS1, FS2 would contain Subordinate Reference replicas for Partitions A and C.

NOTE

As a rule of thumb for determining where a subordinate reference partition is going to be placed, remember that a SubRef replica will be placed everywhere the parent partition is but the child partition is not.

Bindery Services

Bindery services, also referred to occasionally as bindery emulation mode or bindery emulation services, are used to provide backward compatibility with NetWare 2.x and NetWare 3.x services and legacy bindery-only applications. These are the most common uses for bindery services:

Image   To support software that requires a login as the SUPERVISOR object in order to install it or to use it. (This situation is very rare these days, but there are still legacy applications being used.)

Image   To support legacy NetWare clients for Mac computers.

Image   To support older printing devices, such as HP JetDirect cards, manufactured before NDS was released. These devices typically work on a bindery print queue. (On rare occasions, perhaps because of a bug in a device’s firmware, the bindery mode works better than the NDS mode. As a result, bindery emulation is required.)

Bindery services are enabled as follows:

Image   On NetWare servers, using the SET BINDERY CONTEXT= console command

Image   On Windows, via the Bindery Emulation tab in the eDirectory configuration dialog (see Figure 2.17)

FIGURE 2.17 Configuring Windows for bindery emulation.

image

Image   On Unix/Linux, by setting a value for the variable n4u.nds.bindery-context in the /etc/nds.conf file

In order to enable bindery services, you must have a Master or Read/Write replica of the partition that will hold the bindery objects created by the service. Failure to do this will result in bindery services not being enabled for that container and the following error message being displayed (in the case of NetWare):

Bindery context OU=WEST.O=XYZCORP set,
         Image illegal replica type.
Error: The Bindery context container must be set to a
              location that is present in a replica on this server.
              Bindery context NOT set.
Bindery Context is set to: O=XYZCORP


Bindery services allows you to set up to 16 (or to a combined length of 255 characters) NDS contexts as an NDS server’s virtual bindery. The context you set is called the server’s bindery context.

The following are some important facts about bindery services:

Image   To use bindery services, you must set a bindery context for the NDS server.

Image   The bindery context boundary is a single container that does not include any subordinate containers. For example, say that a replica has OU=Department as its partition root, and it contains two subordinate OUs, called Sales and Support. Setting the bindery context to OU=Department does not make any of the objects in OU=Sales and OU=Support available to the bindery clients. To do that, you need to also include them in the bindery context specification, as in the following example:

SET BINDERY CONTEXT=OU=Department;
          Image OU=Sales.OU=Department; OU=Support.OU=Department


Image   Not all objects map to bindery objects. Many objects, such as Alias objects, do not have bindery equivalents. Only Users, Group, Queue, Print Server, and Bindery objects benefit from the use of bindery emulation.

Image   Each NDS server with a bindery context must hold a Master or Read/Write replica (that is, a writable replica) of the partition that includes the bindery context.

WARNING

A bindery service process is single threaded, whereas NDS is multithreaded. Therefore, if the server is servicing many bindery requests, you may experience high server CPU utilization and a slowdown of other network services provided by this server.

Time Synchronization

Although it is not a service provided by NDS, time synchronization is a very important part of maintaining the integrity of the NDS tree. Every time a change is made to an object, the change is timestamped in order to allow the change to be made on all servers holding a copy of that object, in the proper sequence. Without time synchronization, it would be possible to set up two servers with different times but holding copies of the same objects. In that case, you could change a user’s password on one server and that change might not be propagated to the second server properly, and the user would be forced to log in with his or her old password.

NOTE

It is important to realize that NDS requires that the DS servers within a network all agree on a common time. This doesn’t necessarily have to be the correct time, but everyone’s time has to be in synchronization with each other.

There are four time server types:

Image   Single Reference

Image   Reference

Image   Primary

Image   Secondary

The Single Reference, Reference, and Primary time servers are referred to as time providers, and they establish the network time. Secondary time servers determine the correct time by polling a time provider. Table 2.6 shows a summary of the legal provider/client combinations. No matter what role the time server plays within the network time synchronization, all the combinations shown in Table 2.6 provide time information to workstations (clients).

TABLE 2.6 Legal Time Provider/Client Combinations

Image

NOTE

The time server types discussed in the following sections really apply only to NetWare servers (but work over both IPX and IP). Non-NetWare DS servers always report a time server type of Secondary. Furthermore, because Novell does not provide a TimeSync module for non-NetWare platforms, you need to separately set up time synchronization by using a Network Time Protocol (NTP) application of your choosing (discussed later in this chapter).

Single Reference Time Servers

The Single Reference time server type is typically used in a small network, where one server holds the definitive time for the entire network. If you need to change the time for some reason (perhaps because the network time drifted), the Single Reference server is the one where you would change the time.

NOTE

It is generally recommended that if the time on the network needs to be changed, it should be changed with the SET TIMESYNC TIME ADJUSTMENT console command. You should not use the SET TIME console command because it does not perform the change in as orderly a manner.

A Single Reference time server is intended to be the only time source provider within a network. All other servers must receive time from this Single Reference time server and cannot in turn provide time to other servers (including back to the Single Reference time server). Consequently, a Single Reference time server is only useful in a network environment where there are no more than 30 DS servers because it is a potential single point of failure.

An external time source, such as an atomic clock located on the Internet, can be used to set the local time on a Single Reference time server. However, the Single Reference time server will not receive time information from other DS servers on the network. Consequently, the Single Reference server decides unilaterally what time it is and tells the rest of the servers on the network that it is correct. Because of this, a Single Reference time server is incompatible with other time source provider types.

NOTE

Because a Single Reference time server is the authoritative time source on an NDS network, its time is always considered to be synchronized to the network, regardless of the time on any other server.

TIP

See TID #10011518 and #10050215 for details on configuring TIMESYNC.NLM to obtain time from external time sources.

Reference Time Servers

A Reference time server does not adjust its time to match the time obtained from the other time-provider servers. In addition, a Reference server has more voting weight than other time-provider servers in the polling process (16 versus 1). The result is that the Primary time servers adjust their time to (rather quickly) converge on the time specified by the Reference time server. The Reference time server is also part of that process, however, and if the polling servers determine that the time on the Reference server is too far off, they will disregard the time change and maintain correct time.

Like Single Reference time servers, Reference time servers can use an external time source to set their local time in order to maintain accurate time. One Reference time server is allowed per NDS tree, and it can coexist with Primary time servers (but not with a Single Reference time server).

NOTE

To utilize a Reference time server, you need at least one other time-provider server, such as a Primary time server, to complement the operation of the Reference time server—so the time servers have polling partners. You cannot use a Single Reference time server in this case because it does not allow itself to be polled. It is possible to have more than one Reference time server in the same network. But because Reference servers do not adjust their internal clocks, multiple Reference servers never synchronize with each other, even though they poll each other for time information. If you need to use two or more Reference servers, you should use a common external time source to synchronize them.

NOTE

In implementations where a Reference time server is used, it is strongly recommended that you have at least two Primary time servers as well. This way, if one of the three time-provider servers becomes unavailable, the remaining two servers can still poll each other to exchange time information. If you have a Reference time server and only one Primary and one of these becomes unavailable, the remaining time server has no one to poll with and thus will lead to out-of-time synchronization with the network.

Reference time servers are generally used in medium- to large-size networks consisting of more than 30 DS servers.

Primary Time Servers

Primary time servers are used in the polling process with a Reference time server. Typically, more than one Primary time server is used in conjunction with a Reference time server. Primary time servers are best used when positioned geographically to allow time synchronization to continue with other servers, even if a link to the Reference time server is down.

A Primary time server polls another Primary time server or Reference time server to determine whether that server’s time matches its time. If the difference is less than the value of the SET TIMESYNC Synchronization Radius parameter, the Primary time server indicates that its time is synchronized. If the difference is greater than the value of the SET TIMESYNC Synchronization Radius parameter, the Primary time server adjusts its local time by 50% of the difference. This allows the Primary time servers to (slowly) converge on a correct network time instead of causing a sudden (big) jump in time change.

Secondary Time Servers

A Secondary time server receives its time from another server on the network—whether from a Single Reference, Reference, or Primary time server. Secondary time servers do not participate in polling in the sense that their time contributes nothing to the network time. They are essentially slaves to the time synchronization process. If the difference between the network time and a Secondary time server’s local time is less than the value of the SET TIMESYNC Synchronization Radius parameter, the Secondary time server indicates that its time is synchronized. Otherwise, it adjusts its local time totally (that is, by 100% of the difference) to match the network time (instead of 50% at a time, like Primary time servers).

Secondary time servers are time consumers because they receive time from a time source such as a Single Reference or Primary time server. However, Secondary time servers act as time providers to clients such as workstations. Although not normally done nor generally recommended, it is indeed possible to configure a Secondary time server to obtain time information from another Secondary time server.

Cross-Platform Time Synchronization Using NTP

The TimeSync protocol is a Novell-proprietary time synchronization protocol, first introduced with NetWare 4.0. The protocol was implemented using IPX via TIMESYNC.NLM. With the release of NetWare 5, Novell enhanced its time synchronization service to also function over IP natively and to interoperate directly with Internet standards–based NTP time sources. TIMESYNC.NLM can now handle both IP- and IPX-related communication and provides Novell TimeSync protocol, NTP client, and NTP server capability.

Instead of time server types (such as Single Reference) used by Novell, NTP uses the term stratum to indicate the accuracy of a time source. The stratum ranges from 1 to 16. 1 stands for the time source itself, 2 stands for the first server referencing that time source, 3 stands for the server referencing stratum 2, and so on. An NTP server at stratum n+1 is one that accepts time from an NTP server at stratum n. Thus a server at a lower stratum is accepted as a server that is more accurate than one at a higher stratum.

NOTE

Internet time sources are typically public-domain NTP time sources that are at Stratum 1 or 2.

NTP is very strict in considering a time source. If a time source is more than 1,000 seconds (17 minutes) away from the local clock, NTP rejects the time source and labels it as insane. Because of its refusal to accept insane time sources, NTP time sources are usually very reliable. You can find more information about NTP at www.ntp.org.

When NTP is activated on a NetWare server, the server can serve as a NTP time server for all IP-capable servers on the network. An NTP time source can be used for IPX networks if the Reference time server (running on NetWare 5 or higher) has both IP and IPX bound to its network boards or if the Reference time server is running a Compatibility Mode Driver (CMD). The IPX-based servers must be set to act as Secondary time servers.

NOTE

At the time of this writing, NTP version 3 is the Internet Draft standard, formalized in RFC 1305. NetWare 6.5 supports NTP v3, but you need to use XNTPD.NLM instead of TIMESYNC.NLM for full NTP compatibility (see TID #10084753).

NTP version 4, a significant revision of the NTP standard, is the current development version but has not yet been formalized in an RFC.

Depending on your environment, you first need to make a decision about whether to use TimeSync or NTP. You can use either method in a pure NetWare environment; however, if you have non-NetWare servers on the network, such as Unix servers, you should implement NTP. When implementing eDirectory on a mixture of NetWare and non-NetWare platforms, such as Solaris and Linux, you have no other option but to use NTP because it is the most common cross-platform time synchronization protocol.

NOTE

Although Novell does not provide applications to ensure that network time is synchronized for non-NetWare platforms, time synchronization across the network is still critical and must exist for eDirectory to function properly.

Server platforms such as Solaris and Linux provide for time synchronization via NTP as part of their core operating systems. See your operating system’s documentation for information on configuring time synchronization on those platforms. Windows NT and higher does not provide this functionality out-of-the-box, so you need a third-party application to synchronize time with this server platform. Several third-party applications exist for this function. You can find information regarding such applications at www.ntp.org/links.html.

NOTE

Simple NTP (SNTP) is an adaptation of NTP. SNTP can be used when the ultimate performance of the full NTP implementation described in RFC 1305 is not needed or justified. Therefore, you can use an SNTP application or the NET TIME facility in a Windows environment, for instance, to provide time synchronization services that eDirectory requires. (On Windows 2000 and higher, you type NET TIME /HELP at a command prompt for more information.) At the time of this writing, SNTP version 4 is the current standard; it is described in RFC 2030.

DHost

Starting with eDirectory 8.5, the eDirectory software for all supported platforms, such as Windows NT/2000 and higher, Solaris, Linux, AIX, and HP-UX, has been built on the same core code as eDirectory for NetWare. This ensures maximum compatibility between platforms and makes it easier to make the same version of software available on multiple platforms. In order for eDirectory for Windows and Unix to properly interact with the NetWare-based eDirectory and previous versions of NDS, eDirectory for non-NetWare supports a subset of NCP services. A program called DHost manages these services.

NOTE

Although DHost was first introduced with NDS for Windows NT, the cross-platform base-code consolidation did not occur until eDirectory 8.5. It was not until eDirectory 8.7.1 that a Novell Client (generally referred to as Client32) was no longer required for the Windows version of eDirectory.

DHost sits underneath eDirectory and provides the following functionality on non-NetWare platforms that the NetWare operating system provides naturally:

Image   NCP Engine—The NCP engine implements a packet-based protocol that enables a client to send requests (over IP or IPX) to and receive replies from a NetWare server or a non-NetWare server that also has an NCP engine. This allows, for instance, the DSRepair NLM to check and report on the time synchronization status of all servers in the tree, even if some of them are non-NetWare DS servers.

Image   Watchdog service—The watchdog service involves packets used to make sure workstations are still connected to the (NetWare) server. When a workstation is logged in to a server but has not transmitted a packet for some period of time (the default is 5 minutes), the server sends a watchdog query packet to the workstation. If the workstation does not send back a watchdog response packet after 5 minutes, the server sends additional queries at specified intervals, until 15 minutes have elapsed. If the workstation still has not replied, the server terminates the connection.

Image   Connection table management—NetWare assigns a unique number to any process, print server, application, workstation, or other entity that is attached to the server. The number can be different each time an attachment is made. Connection numbers are used in implementing network security and for network accounting. They reflect the objects’ places in the file server’s connection table. In addition, they provide an easy way to identify and obtain information about the objects logged in on the network.

Image   Event system—The event system provides a way for applications to monitor the activity of an individual server. You can configure eDirectory 8.7 and later to send Simple Network Management Protocol (SNMP) traps when certain DS event takes place. eDirectory 8.7.3 defined 119 traps in the Management Information Base (MIB). Out of these, 117 traps map to eDirectory events such as object creation, object move, and password change events. The other two traps, dsServerStart and ndsServerStop, are directly generated by the SNMP subagent, based on the state of the eDirectory server.

Image   Thread pool management—eDirectory is multithreaded for performance reasons. The way multithreading works is that when the system is busy, more threads are created to handle the load. Otherwise, threads are killed to avoid the extra overhead. However, it is inefficient and costly (CPU cycle-wise) to frequently create and destroy threads. Therefore, instead of a given process spinning up new threads or destroying idle threads as necessary, a number of threads are started and placed in a pool. The system then allocates the threads from the thread pool to various processes as needed, thus increasing performance.

Image   NCP extensions—The fundamental NetWare services are provided by a set of functions implemented by the NCP engine. Each routine is referred to as an NCP. NetWare allows you to register the services of an NLM as an NCP extension, allowing you to extend the services provided by the NetWare operating system while maintaining the advantages associated with NCPs. Under DHost, this feature allows eDirectory processes to register NCP extensions on non-NetWare platforms.

Image   Message digest—A message digest is a data string distilled from the contents of a text message, created using a one-way hash function. Encrypting a message digest with a private key creates a digital signature, which is an electronic means of authentication. This function supports NMAS, which is used to manage the various security policies and login methods, such as Simple password.

You can determine the status of the modules managed by DHost by using the DHost iConsole Manager (see Figure 2.18), which is accessed through NDS iMonitor. You can also use the Modules page in the DHost iConsole Manager to start and stop (load or unload) these services. However, not all modules can be stopped; system modules, such as the NCP extensions, cannot be stopped. Clicking the icon located to the right of the description toggles the status of nonsystem modules such as LDAP Server (called LDAP Agent for eDirectory), SNMP Trap Server, and HTTP Protocol Stack.

FIGURE 2.18 The Modules page of DHost iConsole.

image

You can also use DHost iConsole Manager as a diagnostic and debugging tool. It allows you to access the HTTP server when the eDirectory server is not functioning correctly. (See Chapter 7, “Diagnostic and Repair Tools,” for more information on this.)

SAP and SLP

NetWare has traditionally used SAP, a Novell-proprietary protocol, to discover and advertise various services on an IPX network. NetWare 4 uses SAP to discover and advertise NDS tree names, for instance. With NetWare 5 and higher, servers running IP use SLP instead of SAP. This is also the case when in environments that include non-NetWare-based DS servers.

Given that more and more networks are using IP as their main networking protocol (even in pure NetWare environments), SAP will eventually disappear and be completely replaced by SLP. Furthermore, in a mixed operating system environment, SLP must be used. Information about SAP has been widely available for quite some time; therefore, it is not discussed here any further. However, the following sections provide a brief review of SLP terms and concepts.

TIP

The following Novell TIDs provide information on implementing and configuring SLP:

Image   #10025313—Frequently Asked Questions about SLP

Image   #10014396—SLP Terms and Configuration Reference

Image   #10014467—Configuring a LAN/WAN Infrastructure for SLP

Image   #10059981—Configuring SLP with a SCOPED directory agent (DA)

Image   #10014466—Configuring SLP for a NetWare Client

Image   #10027163—Configuring SLP for a NetWare Server

Image   #10062474—SLP Design and Implementation Guidelines

SLP Agents

SLP supports a framework in which client applications are modeled as user agents (UAs), and service agents (SAs) advertise services. A third entity, called a directory agent (DA), provides scalability to the protocol. These agents are used to register, maintain, and locate services on a network:

Image   SAs—An SA runs on every server that is running SLP. Applications on this server register with the SA, and that information is stored in local cache memory. The SA also listens for service requests. If a request is received that matches a service that is registered, the SA will respond to that request.

Image   UAs—A UA makes requests for service information. A UA is most likely to be a client that is looking for a service. The client can be a server application. For example, NDS makes requests for SLP service information when the server is brought up.

Image   DAs—A DA stores and disseminates service information for the network. In Novell’s implementation of SLP, the DA uses NDS as the data store for this information. An SA registers its services with a DA, and a UA requests service information from the DA. The SA registers its services for a specific period of time, called the service lifetime. If the SA does not re-register, or refresh, the service before this lifetime expires, the service is purged.

NOTE

DAs are optional in an SLP implementation, but UAs and SAs are not.

The SLP framework allows the UA to directly issue requests to SAs. In such a case, the request is multicast (because the UA does not know, initially, where the service is located). SAs receiving a request for a service that they advertise unicast a reply containing the service’s location (see Figure 2.19). The multicast address that a UA sends to is 224.0.1.22. Note that this multicast packet is sent to every network and router that has multicasting enabled. Therefore, the UA may receive more than one response because every SA that receives this packet responds with service information if it has what the UA is asking for.

FIGURE 2.19 Communication methods between a UA, a DA, and SAs.

image

In larger networks, one or more DAs are generally used in order to reduce the amount of SLP-related multicast traffic attributed to service location queries. The DA functions as a central repository, or cache in this environment. SAs send register messages containing all the services they advertise to DAs and receive acknowledgements in reply. UAs unicast requests to DAs instead of to SAs if any DAs are known.

UAs and SAs discover DAs two ways. First, they issue a multicast service request (to address 224.0.1.35), looking for the DA service when they start up. Second, the DA multicasts an unsolicited advertisement periodically (but infrequently), which the UAs and SAs listen for. In either case, the agents receive a DA advertisement, thus learning the whereabouts of DAs.

NOTE

SLP uses the following two multicast addresses:

Image   224.0.1.22 for service location general multicast

Image   224.0.1.35 for DA discovery multicast

DAs listen on both UDP and TCP port number 427 for multicast traffic addressed to it.

SLP Services

SLP services are applications that run on a host (server or client) that other hosts on the network can access. Common examples of services include NDS, RCONAG6.NLM, and TIMESYNC.NLM running on a NetWare 6 server. When a NetWare 6 server starts up, these services (applications) register themselves with SLP and make themselves available to the network. From a high-level viewpoint, the information that SLP maintains about a service is the service name and the IP address or DNS name of the host (normally a server) that is running this service.

Each service on the network has a unique uniform resource locator (URL). This URL contains the details of the service, such as the IP address (or the DNS name or both) and port of the server on which this service is running and the version of SLP that this server is running. Table 2.7 lists some of the common NetWare 6.5 URL name prefixes and what they represent.

TABLE 2.7 Common NetWare 6.5 SLP Service URL Prefixes and Their SAP Equivalents

Image Image

The following is sample output of a DISPLAY SLP SERVICES console command on a NetWare 6.5 server:

DISPLAY SLP SERVICES
  Usage: display slp services [<service type>/<scope>/
               Image <predicate query>]/
    Example 1: ’display slp services’
    Example 2: ’display slp services bindery.novell//
                       Image (svcname-ws==abc*)/’

Searching Network . . .
  service:nwserver.novell:///NETWARE6A
  service:nwserver.novell:///NETWARE_51
  service:portal.novell://10.6.6.1:8008/NETWARE6A
  service:securerconsole.novell:///10.6.6.1:2036;
   Image NETWARE6A.XYZCorp.com
  service:rconsole.novell:///10.6.6.1:2034;
   Image NETWARE6A.XYZCorp.com
  service:rconsole.novell:///10.55.66.77:2034;netware_51

  service:timesync.novell://10.6.6.1
  service:timesync.novell://10.55.66.77
  service:smdr.novell://10.6.6.1:413/NETWARE6A
  service:ldap.novell:///10.6.6.1:389
  service:bindery.novell:///NETWARE6A
  service:bindery.novell:///NETWARE_51
  service:ndap.novell:///EDIR-NW51.
  service:ndap.novell:///
   Image eDir-to-eDir.DirXML-Guide-NW.EDIR-NW51.
  service:nlsmeter.novell://10.6.6.1:21571/NETWARE6A

  Displayed 15 URL’s.


SLP Scopes

When more than one DA is used, services (and SAs) advertised by the several DAs are collected together into logical groupings called scopes. The scope names are simply text strings assigned by the network administrator. A scope could indicate a location, an administrative grouping, or proximity in a network topology or some other category.

A UA is normally assigned a scope name (in which case the UA will only be able to discover that particular grouping of services). This allows a network administrator to provision services to users. Alternatively, the UA may be configured with no scope at all (that is, it is unscoped). In that case, it will discover all available scopes and allow the client application to issue requests for any service available on the network. SAs and DAs are always assigned scope names.

In Novell’s implementation, a scope is simply a container within NDS for SLP services that have been registered with a DA. The SLP Scope Unit container object is the actual storage container for SLP service information. Each Scope Unit container holds all the SLP service objects for a specific scope. It is possible to replicate this container into other partitions within the tree or within federated trees. Associated with the Scope Unit container is the attribute Scope Name. The SA and UA use Scope Name to define what scopes they are to work with.

SLP scopes are either scoped or unscoped:

Image   An unscoped scope is a general default scope. It is a grouping of all service URL information that is not tied to a particular scope. In SLP version 1, the default scope is called the unscoped scope. In SLP version 2, it is called the default scope.

Image   A scoped scope is a Scope Unit container that has been defined with a specific Scope Name attribute value.

NOTE

NetWare 5 implements SLP v1, as defined in RFC 2165. The latest support pack updates the SLP support to SLP v2, as defined in RFC 2608. NetWare 6 and later versions support SLP v2 out of the box. The related module names are SLP.NLM and SLPTCP.NLM.

For non-NetWare platforms, such as Unix or Linux, the eDirectory installation process installs OpenSLP, an open-source implementation of SLP (see www.openslp.org). This application is called slpuasa and is found in the NDSslp package. On Windows, the program is slpd.exe, and it is installed in the %WINDIR%system32NovelleDirOpenSLP folder.

NOTE

If a network requires more than one scope and you want to set up a default scope container, create a scope called Default Scope. Do not use the unscoped scope in this configuration. This will make the transition to SLP version 2 easier.

If you are using SLP v1 on a network that has many services, you need to set up multiple scopes. This is due to the 64KB limit of SLP reply packet and service information.

When a UA requests information about a specific service from a DA, it sends an SLP service type request, asking for all services of the same type (such as bindery.novell). The DA responds with a single UDP reply packet. If there are so many bindery.novell services registered in SLP that they do not all fit within one UDP packet, the DA sets an overflow bit. The UA then opens a TCP connection with the DA and asks for all the bindery.novell services again.

64KB of data is all the DA can send to the client via a TCP connection. This is because in SLP version 1.0, the Length field in the SLP response packet header is only 16 bits, allowing for up to 64KB of service data. If there is more than 64KB of a certain service type, the list is truncated. The work around is to implement multiple scopes serviced by different DAs. A better solution, however, is to upgrade to SLP v2, where the length field has been expanded to 24 bits, thus allowing for up to 16MB of response data. For more information about the SLP packet structure, see www.networksorcery.com/enp/protocol/slp.htm.

NOTE

The following is a list of how many of the common service types will fit into a 64KB response packet:

Service

   Number per response packet

bindery.novell

   700–1,100, depending on the size of partition and tree names.

ndap.novell

   Around 1,200, depending on the size of partition names.

saprrv.novell

   Around 550 IPX services.

The LDAP Server for NDS

LDAP is an Internet communications protocol standard that lets client applications access directory information. It is based on the X.500 Directory Access Protocol (DAP) but is much less complex (thus “Lightweight”) than a traditional DAP client and can be used with any other directory service that follows the X.500 standard.

To provide LDAP connectivity to NDS/eDirectory, Novell has been shipping LDAP Services for Novell NDS since NetWare 4.10. This server application lets LDAP clients access information stored in NDS/eDirectory. The current version is LDAP v3 compliant.

NOTE

LDAP servers are specific to the back-end database they support. For instance, you cannot use the Novell LDAP server for Windows (included with eDirectory for Windows) to access Active Directory, even when both are running on the same Windows server. The LDAP server basically serves as the translator between the (Internet standard) LDAP client and the (proprietary) directory service database; this is very similar to the concept of using Open Database Connectivity (ODBC) drivers to access databases.

In Novell documentation, the LDAP server for NDS/eDirectory is sometimes referred to as the LDAP agent for eDirectory because it acts on your behalf to access information from eDirectory.

NOTE

The LDAP server modules shipped with eDirectory are NLDAP.NLM for NetWare; nldap.dlm for Windows 2000/NT; libnldap.so for Linux, Solaris, and AIX systems; and libnldap.sl for HP-UX systems. Except on the NetWare platform, the LDAP server for eDirectory runs as a task under DHost. Therefore, you will not find a process called nldap.dlm in Task Manager on Windows servers, for instance. (DHost is discussed earlier in this chapter, in the section “DHost.”)

The following LDAP tools are included with LDAP Services to help you manage the LDAP server:

NOTE

On Unix/Linux, the LDAP tools are stored in /usr/ldaptools/bin (except ice, which is stored in /usr/bin). On Windows all but ndsindex are found in the NovellConsoleOne1.2in directory (ndsindex is located in NovellNDS instead). On NetWare, all but ndsindex are in the SYS:PUBLICmgmtConsoleOne1.2in directory; ndsindex is implemented as NINDEX.NLM and is located in SYS:SYSTEM.

Image   iceImports entries from a file to an LDAP directory, modifies the entries in a directory from a file, exports the entries to a file, and adds attribute and class definitions from a file.

Image   ldapaddAdds new entries to an LDAP directory.

Image   ldapdeleteDeletes entries from an LDAP directory server. The ldapdelete tool opens a connection to an LDAP server and binds and deletes one or more entries.

Image   ldapmodifyOpens a connection to an LDAP server and binds and modifies or adds entries.

Image   ldapmodrdnModifies the RDNs of entries in an LDAP directory server. Opens a connection to an LDAP server and binds and modifies the RDNs of entries.

Image   ldapsearchSearches entries in an LDAP directory server. Opens a connection to an LDAP server and binds and performs a search, using the specified filter. The filter should conform to the string representation for LDAP filters, as defined in RFC 2254.

Image   ndsindexCreates, lists, suspends, resumes, or deletes indexes for NDS servers. This tool is useful in performance tuning (see Chapter 16).

Table 2.8 summarizes the availability of features in various releases of the LDAP server for NDS. The various features are discussed in the sections that follow.

TABLE 2.8 LDAP Server for NDS Feature Comparison

Image Image Image Image

NOTE

LDAP server features are server-centric. Therefore, for an application to use a particular LDAP feature, the application must attach to an LDAP server running a version of NDS or eDirectory that supports the feature. For example, the client cannot bind to an LDAP server for eDirectory 8.6 to receive DS event notification.

LDAP and NDS/eDirectory Terminology

When combining two technologies, there is often conflict between the meanings of the terms used. This is true in the case of integrating LDAP with NDS/eDirectory. In LDAP documentation, an entry consistently means a record in the directory database. On the other hand, in DS documentation, such a record is fairly consistently called an object. Because the term object becomes ambiguous when describing object-oriented programming languages, DS developer documentation is beginning to use the LDAP term—entries—but not completely. Some functions, attribute names, and class names still use the term object. Novell product documentation for DS utilities and applications continues to use the DS term, objects.

In most DS documentation, attributes refers to the fields of a record. LDAP and X.500 conform to this standard. However, a lot of LDAP documentation also uses the word attribute to refer to the attribute’s value; NDS/eDirectory programming documentation, for example, uses attribute. However, Novell product documentation for NDS/eDirectory utilities and applications uses the term properties to describe fields in a record.

In DS, a partition is a branch of the DS tree with only one parent that is hosted on a server. In LDAP parlance, this is called a naming context. Figure 2.20 illustrates a simple hierarchical tree with four naming contexts:

Image   O=Universal_Export

Image   OU=Customer_Service, O=Universal_Export

Image   OU=Gadgets, O=Universal_Export

Image   OU=M, OU=Gadgets, O=Universal_Export

FIGURE 2.20 LDAP naming context example.

image

Just as with DS partitions, LDAP’s naming context is named by the DN of the root container. The exception is the [Root] naming context. LDAP’s root object is called a DSA-specific Entry (DSE), or root DSE, and is not part of any naming context. Each LDAP server can have different attribute values in the root DSE. (Directory system agent [DSA] is an X.500 term for the directory server.)

LDAP and eDirectory Integration

The LDAP server included with eDirectory supports the following features:

Image   Authentication support. Standard LDAP authentication methods include anonymous binds, clear-text binds, SSL and SASL (RFC 2222) binds. From DS’s perspective, these LDAP authentication methods mean the following:

Image   An anonymous bind is an unauthenticated connection with public access to the directory.

Image   A clear-text bind is an authentication over an unencrypted channel. The client sends a username and a clear-text password. The LDAP server must be configured to accept unencrypted passwords.

Image   An SSL bind is an authentication over an encrypted channel (secured by an SSL certificate). All data, including the password, is encrypted. DS clients have access to SSL binds only through LDAP.

Image   Adding, modifying, and deleting of entries and attributes in the directory.

Image   Reading, sorting, and searching of entries and attributes in the directory.

Image   Reading, adding, and deleting of schema definitions (object classes and attributes). The LDAP server for eDirectory 8.5 and higher supports the modification of class definitions and attribute definitions as long as the modifications increase functionality rather than restrict it.

LDAP Extensions and Controls

The standard LDAP protocol specification does not yet support access to replication, partition, and synchronization services. However, these services are available through (Novell-specific) LDAP extensions that are available for eDirectory 8.5 and higher.

NOTE

LDAP v3 provides a method for extending its functionality through LDAP controls and extensions. For example, RFC 2891 defines two LDAP v3 controls for server-side sorting of results; this instructs the LDAP server to sort the search results before sending them back to the client. An LDAP control is a command sequence that contains a predefined object ID (OID) that the LDAP server understands as an extension, and instructions specific for the requested action.

Keep in mind that some LDAP controls and extensions are vendor specific, and controls that are common among some vendors may not be implemented alike.

Tables 2.9, 2.10, and 2.11 show controls and extensions supported by eDirectory 8.5 and higher that allow LDAP clients to perform the following request:

Image   Naming contexts: split, join, return number of entries, abort operation

Image   Replicas: add, remove, change type, enumerate number of replicas on a server, retrieve replica information

Image   Replica synchronization: to a specified server, to all replicas, at a specified time

Image   Synchronize schemas

Image   Get effective NDS rights for attributes

Image   Get DN of logged in caller

Image   Restart the LDAP server

Image   Change Simple passwords via LDAP

Image   Monitor events (some extensions require eDirectory 8.7 and higher)

TABLE 2.9 LDAP Extensions Supported by eDirectory

Image Image Image Image

Table 2.10 lists the extensions used by the Novell Import Convert Export (ICE) utility. They are not general extensions designed for developer use but are designed to support the LDAP Bulk Update Replication Protocol (LBURP).

TABLE 2.10 ICE-Specific LDAP Extensions for eDirectory 8.5 and Higher

Image

TABLE 2.11 LDAP Controls Supported by eDirectory

Image

Persistent search is an LDAP v3 extension that enables applications to maintain a connection to an LDAP-compliant directory even after that directory has returned the results of a search request. For example, say that an LDAP application searches for all entries in the tree for which the CN attribute has a value beginning with the letter A, and 500 hits are expected. However, this application supports increments of only 10 search results. Using persistent search, this application could receive search results for this request in increments of 10 CN attributes without having to establish a new connection to the directory for each increment. Otherwise, this application would have to establish a new connection and issue a new search request for each increment.

WARNING

Two LDAP controls, 2.16.840.1.113730.3.4.9 (Virtual List View [VLV] request) and 2.16.840.1.113730.3.4.10 (VLV response), working in conjunction with the server-side sort control to provide a dynamic view of a scrolling list, are not fully supported by eDirectory. Refer to TID #10084069 for details on the limitations.

If you are unsure what extensions and controls are supported by the version of the LDAP server for eDirectory that you have, you can query its root DSE by using an LDAP search tool. For example, this is the syntax for using ldapsearch:

ldapsearch -h host -b "" -s base -D cn=admin,o=org
        Image -w password objectclass=*
        Image supportedcontrol supportedextension


The following is an example of some of the output from this command, showing just the supported extensions and controls, from a Windows 2000 server running eDirectory 8.7.3:

dn:
supportedExtension: 2.16.840.1.113719.1.142.100.1
supportedExtension: 2.16.840.1.113719.1.142.100.2
supportedExtension: 2.16.840.1.113719.1.142.100.4
supportedExtension: 2.16.840.1.113719.1.142.100.5
supportedExtension: 2.16.840.1.113719.1.142.100.6
supportedExtension: 2.16.840.1.113719.1.142.100.7
supportedExtension: 2.16.840.1.113719.1.27.100.1
supportedExtension: 2.16.840.1.113719.1.27.100.2
supportedExtension: 2.16.840.1.113719.1.27.100.3
supportedExtension: 2.16.840.1.113719.1.27.100.4
supportedExtension: 2.16.840.1.113719.1.27.100.5
supportedExtension: 2.16.840.1.113719.1.27.100.6
supportedExtension: 2.16.840.1.113719.1.27.100.7
supportedExtension: 2.16.840.1.113719.1.27.100.8

supportedExtension: 2.16.840.1.113719.1.27.100.11
supportedExtension: 2.16.840.1.113719.1.27.100.12
supportedExtension: 2.16.840.1.113719.1.27.100.13
supportedExtension: 2.16.840.1.113719.1.27.100.14
supportedExtension: 2.16.840.1.113719.1.27.100.15
supportedExtension: 2.16.840.1.113719.1.27.100.16
supportedExtension: 2.16.840.1.113719.1.27.100.17
supportedExtension: 2.16.840.1.113719.1.27.100.18
supportedExtension: 2.16.840.1.113719.1.27.100.19
supportedExtension: 2.16.840.1.113719.1.27.100.20
supportedExtension: 2.16.840.1.113719.1.27.100.21
supportedExtension: 2.16.840.1.113719.1.27.100.22
supportedExtension: 2.16.840.1.113719.1.27.100.23
supportedExtension: 2.16.840.1.113719.1.27.100.24
supportedExtension: 2.16.840.1.113719.1.27.100.25
supportedExtension: 2.16.840.1.113719.1.27.100.26
supportedExtension: 2.16.840.1.113719.1.27.100.27
supportedExtension: 2.16.840.1.113719.1.27.100.28
supportedExtension: 2.16.840.1.113719.1.27.100.29
supportedExtension: 2.16.840.1.113719.1.27.100.30
supportedExtension: 2.16.840.1.113719.1.27.100.31
supportedExtension: 2.16.840.1.113719.1.27.100.32
supportedExtension: 2.16.840.1.113719.1.27.100.33
supportedExtension: 2.16.840.1.113719.1.27.100.34
supportedExtension: 2.16.840.1.113719.1.27.100.35
supportedExtension: 2.16.840.1.113719.1.27.100.36
supportedExtension: 2.16.840.1.113719.1.27.100.37
supportedExtension: 2.16.840.1.113719.1.27.100.38
supportedExtension: 2.16.840.1.113719.1.27.100.39
supportedExtension: 2.16.840.1.113719.1.27.100.40
supportedExtension: 2.16.840.1.113719.1.27.100.41
supportedExtension: 2.16.840.1.113719.1.27.100.42
supportedExtension: 2.16.840.1.113719.1.39.42.100.1
supportedExtension: 2.16.840.1.113719.1.39.42.100.2
supportedExtension: 2.16.840.1.113719.1.39.42.100.3
supportedExtension: 2.16.840.1.113719.1.39.42.100.4
supportedExtension: 2.16.840.1.113719.1.39.42.100.5
supportedExtension: 2.16.840.1.113719.1.39.42.100.6
supportedExtension: 2.16.840.1.113719.1.39.42.100.7
supportedExtension: 2.16.840.1.113719.1.39.42.100.8
supportedExtension: 2.16.840.1.113719.1.39.42.100.9
supportedExtension: 2.16.840.1.113719.1.39.42.100.10
supportedExtension: 2.16.840.1.113719.1.39.42.100.11
supportedExtension: 2.16.840.1.113719.1.39.42.100.12
supportedExtension: 2.16.840.1.113719.1.39.42.100.13

supportedExtension: 2.16.840.1.113719.1.39.42.100.14
supportedExtension: 2.16.840.1.113719.1.39.42.100.15
supportedExtension: 2.16.840.1.113719.1.39.42.100.16
supportedExtension: 2.16.840.1.113719.1.39.42.100.17
supportedExtension: 2.16.840.1.113719.1.39.42.100.18
supportedExtension: 2.16.840.1.113719.1.39.42.100.19
supportedExtension: 2.16.840.1.113719.1.39.42.100.20
supportedExtension: 2.16.840.1.113719.1.39.42.100.21
supportedExtension: 2.16.840.1.113719.1.39.42.100.22
supportedExtension: 2.16.840.1.113719.1.27.100.9
supportedExtension: 2.16.840.1.113719.1.27.100.10
supportedExtension: 2.16.840.1.113719.1.27.100.43
supportedExtension: 2.16.840.1.113719.1.27.100.44
supportedExtension: 2.16.840.1.113719.1.27.100.45
supportedExtension: 2.16.840.1.113719.1.27.100.46
supportedExtension: 2.16.840.1.113719.1.27.100.47
supportedExtension: 2.16.840.1.113719.1.27.100.48
supportedExtension: 2.16.840.1.113719.1.27.100.49
supportedExtension: 2.16.840.1.113719.1.27.100.50
supportedExtension: 2.16.840.1.113719.1.27.100.51
supportedExtension: 2.16.840.1.113719.1.27.100.52
supportedExtension: 2.16.840.1.113719.1.27.100.53
supportedExtension: 2.16.840.1.113719.1.27.100.54
supportedExtension: 2.16.840.1.113719.1.27.100.55
supportedExtension: 2.16.840.1.113719.1.27.100.56
supportedExtension: 1.3.6.1.4.1.1466.20037
supportedExtension: 2.16.840.1.113719.1.27.100.79
supportedExtension: 2.16.840.1.113719.1.27.100.80
supportedExtension: 2.16.840.1.113719.1.27.100.84
supportedExtension: 2.16.840.1.113719.1.27.100.80
supportedExtension: 2.16.840.1.113719.1.27.103.1
supportedExtension: 2.16.840.1.113719.1.27.103.2
supportedControl: 2.16.840.1.113719.1.27.101.6
supportedControl: 2.16.840.1.113719.1.27.101.5
supportedControl: 2.16.840.1.113730.3.4.3
supportedControl: 2.16.840.1.113730.3.4.7
supportedControl: 2.16.840.1.113730.3.4.2
supportedControl: 2.16.840.1.113719.1.27.103.7


The LDAP Server object has a multivalued attribute called extensionInfo, which contains the list of supported controls and extensions supported by that server, as shown in Figure 2.21. To access this screen, you select the LDAP Server object in ConsoleOne and then right-click and select the Properties option from the context menu. Next, you select the Other tab, open the extensionInfo listing, and click the Extended Editor button, which is denoted by an ellipsis (…).

FIGURE 2.21 The extensionInfo attribute of the LDAP Server object.

image

You can deselect an extension from being supported by the server by deleting the attribute value that corresponds to the extension in question. However, because the attribute value is an octet string (SYN_OCTET_STRING), it could be cumbersome to put it back at a later time. (Note that this is not supported by Novell.) Alternatively, you can edit the value and change the starting E to a D (or basically anything other than E). This deselects the extension. Then you restart the LDAP server for the change to take effect. To reselect the extension at a later time, you change the D back to an E and restart the LDAP server.

NOTE

The server-side sort controls (1.2.840.113556.1.4.473 and 1.2.840.113556.1.4.474) are supported by the eDirectory LDAP server. However, they do not show up in the supportedControl listing shown earlier in this section.

LDAP Bind Methods

LDAP requires a client to employ a two-step process to connect with and authenticate to its back-end directory service. You first need to establish a connection to the LDAP server. This can be either an insecure, clear-text connection (with the default port 389) or a secured, encrypted connection (with the default port 636). Then the client has to perform a bind, the LDAP term for sending user information and password for the purpose of authentication, with the LDAP server. In the case of eDirectory, the supplied user credential is used for authentication against eDirectory, and the level of access is subject to eDirectory security (this includes user-level restrictions such as login time restriction and account lockout due to intrusion detection).

TIP

eDirectory’s LDAP server uses the following attributes, not just the userPassword attribute (which is essentially mapped to the public/private key pair), to control access to an account:

Image   Locked By Intruder

Image   Login Allowed Time Map (this is the login time restriction)

Image   Login Disabled

Image   Login Expiration Time

Image   Login Maximum Simultaneous

Image   Password Expiration Interval

Image   Password Required

If a user is having difficulty accessing eDirectory via LDAP and the password is verified as being valid, you should check these attributes to help determine why the client cannot access the account.

LDAP supports a number of bind methods involving just the use of usernames and passwords. The bind methods defined in RFC 2829, “Authentication Methods for LDAP,” are as follows:

Image   In an anonymous bind, the client sends empty strings for the DN/password pair. The eDirectory LDAP server establishes the client as [Public] or as the proxy user that you have configured. (The proxy user must not have a password.)

NOTE

If the LDAP connection was made by anonymous bind, the ldap_get_context_identity_name API function returns an empty string rather than [Public].

Image   In a simple bind, the client sends non-null strings for the DN/password pair. However, the data is sent as clear text across the wire when using port 389. The eDirectory LDAP server establishes the client as the supplied DN. This method is called simple bind because using identity/password pairs is simple (that is, not complicated compared to using X.509 security certificates, for instance).

NOTE

Because clear-text passwords can be easily captured off the wire with network traffic sniffer software that is easy to obtain these days, the eDirectory LDAP server accepts only TLS/SSL encrypted passwords by default. You need to specifically enable the clear-text support by unchecking the Require TLS for Simple Binds with Passwords check box either during the LDAP server installation process or in the General Information Properties tab of the LDAP Group object in ConsoleOne or iManager.

Image   In a secure bind, the DN/password pair is sent over TLS/SSL using port 636. This method is often considered a bind method, but technically, the TLS/SSL encryption sitting on top of the LDAP simple bind is securing the data; the heart of the operation is still a simple bind.

NOTE

If you have not disabled TLS/SSL for simple bind, your LDAP application may report an “ldap_bind: Confidentiality required” error. If you look in DSTrace with the +LDAP filter enabled, you will see something like this:

        Error:    "Rejecting unencrypted bind on cleartext port in
                         nds_back_bind, err[equal]13"


This is because the application is not using TLS/SSL when the LDAP server expects it.

NOTE

SSL 3.1 was released through Netscape. However, the Internet Engineering Task Force (IETF) took ownership for that standard by implementing TLS 1.0. As a result, Novell documentation often uses the two terms interchangeably or together: TLS/SSL.

Image   SASL bind uses the SASL specification as defined in RFC 2222. SASL is really a method for adding authentication support to connection-based protocols, and it does not dictate the mechanism to be used. The SASL protocol includes a command for identifying and authenticating a user to a server and for optionally negotiating a security layer for subsequent protocol interactions. The command has a required argument that identifies a SASL mechanism. (SASL mechanisms are named by text strings, ranging from 1 to 20 characters in length, consisting of uppercase letters, digits, hyphens, and/or underscores. SASL mechanism names must be registered with the Internet Assigned Numbers Authority [IANA].) Therefore, SASL binds are implementation specific.

     The LDAP server for eDirectory 8.7.1 and higher supports Digest-MD5 (RFC 2831) and NMAS_LOGIN as SASL bind methods; NMAS_LOGIN provides support for the biometrics capability in NMAS. eDirectory 8.5/8.6 supports the EXTERNAL SASL mechanism, in which the client presents an X.509 user certificate to the server, and the server checks that the certificate is signed by the eDirectory tree’s Certificate Authority (CA).

NOTE

Digest-MD5 is a required authentication method defined for LDAP v3 (RFC 2829). The LDAP servers for eDirectory prior to 8.7 did not support Digest-MD5, nor did they support extensible match search filters (discussed in the following section). Therefore, they are not fully LDAP v3 compliant; however, because most installations use SSL/TLS anyway, instead of SASL, this is not a major issue.

Every LDAP operation requires the client to be bound before the operation is attempted. After the completion of the operation (be it successful or failed), the connection is automatically terminated. Therefore, to perform an add entry operation and then a modify entry operation, you must bind twice. The exception to this rule is if you are using persistent search, where you need to bind only once to retrieve all the search results.

Access Control

Another feature introduced in LDAP v3 is the ability to apply access control. Access control determines who has rights to entry information in a directory. In an NDS tree, every entry has an ACL attribute, which contains the explicit trustee assignments that have been made to the entry and its attributes. In addition, NDS allows rights to be inherited, so that an assignment in a parent container can allow additional trustees to have access to an entry. Functions that calculate effective rights gather information from these parent containers as well as from the ACL attribute. When an LDAP client queries for effective rights, the result returned by an eDirectory LDAP server is based on the explicit assignments as well as the inherited rights. Directories that do not allow the inheritance of rights implement the functions to return only explicit trustee assignments.

The LDAP server for eDirectory 8.7 also implements support for extensible match search filtering, as defined in RFC 2251. An extensible match allows an LDAP client to specify multiple match rules for the same type of data and to include dn attribute elements in the search criteria. For example, the following extensible match filter searches for all User objects in containers that have OU=Grade5 as part of their DNs:

(&(ou:dn:=Grade5)(objectClass=user))


As you can imagine, this feature allows applications to perform complex searches much more easily. Without it, the client itself has to provide more processing in order to filter out the desired data.

LDAP Event Services

Perhaps the most useful feature of the LDAP Server is LDAP Event Services, which was added to the Novell LDAP server for eDirectory 8.7. LDAP Event Services provides a way, via the standard LDAP extension mechanism, for applications to monitor the activity of eDirectory on an individual server.

LDAP Event Services supports more than 200 events that are divided into the following event types or categories:

Image   Bindery events—These events indicate the occurrence of bindery object creation or deletion operations.

Image   Change server address events—These events indicate the detection of a server address change.

Image   Connection change events—These events indicate that the state of a connection has changed (perhaps from unauthenticated to authenticated).

Image   Dataless events—This classification includes all events that do not have associated data (for instance, a bindery context was set on a server).

Image   Debug events—These events indicate the occurrence of debugging messages sent by various NDS background processes, such as Limber.

Image   Entry events—These events indicate the occurrence of individual entry operations such as creating or deleting an object.

Image   General DS events—These are general events used to indicate a wide variety of DS operations, such as a partition join operation or a user login.

Image   Module state events—These events indicate the change of state (from active to inactive, for example) of a DHost module.

Image   Network address events—These events indicate a possible communication problem. It is triggered if DS reports a remote server down or an NCP retry timed out.

Image   Security Equivalence events—These events indicate that an entry’s security equivalence vector (SEV) is being checked.

Image   Value events—These events indicate the occurrence of attribute value operations such as deleting or adding a value.

The event system extension allows a client to specify the events for which it wants to receive notification. This information is sent in the extension request. If the extension request specifies valid events, the LDAP server keeps the connection open (through the use of the persistent search feature) and uses the intermediate extended response to notify the client when events occur. Any data associated with an event is also sent in the response. This feature provides an easy mechanism for network management applications to include eDirectory in their list of managed services.

NOTE

Although any LDAP client can register to monitor any event, access restrictions are enforced at the time of event notification. If the authenticated client does not have sufficient access rights to view all the information in the event (such as Browse rights to attributes of interest), the event will not be sent. The one exception to this rule is the perpetrator DN: If the client does not have rights to the perpetrator object, the object will be sent as a zero-length string and represented as a NULL pointer value at the client. The event notification, however, will still be sent.

Schema Mapping Between LDAP and eDirectory

The LDAP server for eDirectory automatically maps the DS attributes and classes that are defined in RFC 2256 to their LDAP-equivalent names. Alas, not all DS names can be mapped to LDAP names due to naming convention incompatibility, as discussed earlier in this chapter, in the section “Naming Rules and Restrictions.” If LDAP clients need access to DS classes and attributes that have incompatible names, you need to manually map them to LDAP-compatible names by using ConsoleOne. Even if a name is compatible with LDAP conventions, an LDAP client may still not be able to access a certain attribute because the LDAP server does not support that attribute’s syntax.

eDirectory 8.5 and higher map inetOrgPerson to the DS object class User by default. LDAP clients can access this class by using the LDAP names inetOrgPerson or user. In NDS 7 and NDS 8, by default, the User class definition does not contain all the standard attributes for inetOrgPerson. To add these attributes to the User class definition, you must update the schema by using a schema file (nov_inet.sch), available from Novell. With eDirectory 8.5 and later, however, this is all done automatically for you.

The LDAP server allows LDAP access to DS attributes if the DS attribute uses LDAP-compatible syntax. For example, any DS attribute that uses the case ignore string syntax (SYN_CI_STRING) is available through LDAP because LDAP supports this syntax (which is called directoryString in LDAP). DS attributes that use a compound syntax (such as the timestamp syntax, SYN_TIMESTAMP, with its fields for time, replica number, and event identifier) are not automatically accessible through LDAP. Instead, the LDAP server converts such a syntax to case ignore strings, using dollar ($) signs to separate fields of the same data type and (#) signs to separate fields of different data types. For example, the ACL is represented as follows:

acl: 2#subtree#cn=admin,o=testing#[All Attributes Rights]


where the first field is the trustee rights value (2 = Read), the next field indicates that it applies to the whole object (subtree), the next field is the object that has been granted the rights (cn=admin,o=testing), and the last field is the attribute name ([All Attributes Rights]). Postal Address is an example of an attribute that uses $ as data field delimiters (because all its data fields are of the type CI string):

postalAddress: CN$Street$Post Office Box$City$State$Zip Code


The LDAP server converts the DS time information (which uses the SYN_TIME syntax) to the LDAP format specified by X.208, which includes the year, month, day, hour, minute, optionally seconds, and time zone (GMT is recommended by X.208 for the time zone and uses Z as its symbol). The Login Time attribute would have a value similar to the following:

loginTime: 20031217051015Z


NOTE

The SYN_HOLD syntax is not supported through LDAP and is being phased out from use in NDS/eDirectory.

If you need to look up the attribute and class mapping between LDAP and NDS, from ConsoleOne you open the LDAP Group object, and from its Properties page, you check the Attribute Mappings (see Figure 2.22) and Class Mappings (see Figure 2.23) tabs, respectively. You can also use these tabs to add, delete, or modify the mapping assignments.

FIGURE 2.22 The Attributes Mappings tab of the LDAP Group object.

image

FIGURE 2.23 The Class Mappings tab of the LDAP Group object.

image

LDAP Name Resolution Models

Almost every LDAP operation takes a DN identifying a target entry as a parameter. The first step in performing an LDAP operation is to find a copy of the target entry somewhere in the eDirectory tree. LDAP v3 supports two basic name resolution models—chaining and referral—that are discussed in the following sections. Also discussed in the following sections is how the eDirectory LDAP server uses eDirectory knowledge references for name resolution.

NOTE

DS maintains certain information in the replica rings of each partition root object (by using the Replica attribute) and keeps track of subordinate references to partition roots. This information includes the server’s ID, address, and transport type (such as IP or IPX), and the replica type that is stored on that server. This information is termed NDS knowledge references.

Chaining

Sometimes when an LDAP client issues a request to an LDAP server, the server may not contain the target entry of the operation in its local database. However, the server can use the NDS knowledge references that it has about partitions and other servers in the eDirectory tree to contact another LDAP server that knows more about the DN. This process is called chaining, and it is a server-based form of name resolution. If necessary, the chaining process continues until the first server contacts a server that holds a replica of the entry. eDirectory then handles all the details to complete the operation. The LDAP server performs all this on behalf of the client. Therefore, unaware of the server-to-server operations, the client assumes that the first server completed the request.

NOTE

Earlier versions of the NDS LDAP server used the term traversal instead of chaining in the NWAdmin and ConsoleOne snap-ins. The current implementation consistently uses chaining in both the administration tools and documentation.

Through chaining, an LDAP server provides the following advantages:

Image   It hides all name-resolution/tree-walking details from the client.

Image   It automatically takes care of remote authentication to other LDAP servers, using the same identity with which the LDAP client is bound.

Image   It acts as a proxy for the client and requests the remote server to complete the operation. Then it reports the result to the client as though the entry were stored locally.

Image   It works seamlessly, even when some servers in the eDirectory tree don’t support LDAP services.

Chaining has disadvantages as well as advantages. For instance, the client might have to wait for some time without any feedback from the server while the server chains to resolve the name. If the operation requires the LDAP server to send many entries across a WAN link, the operation might be very time-consuming. If several servers are equally capable of processing the operation, different servers might process two requests to operate on the same entry. In 99% of the cases, this is not an issue. However, depending on the type of operation, the client may receive an erroneous indication that the requested operation—say, deletion of an entry—failed (due to duplicate processing).

Chaining can be bandwidth-intensive for large LDAP search operations. This is because in the chaining mode, the first LDAP server acts as the proxy to the client, where it receives the search results from another LDAP server and then passes the results back to the client; the data is transmitted on the network twice.

NOTE

eDirectory attempts to sort the servers by the cost associated with contacting them (such as hop count). For load balancing, when there is more than one server available, eDirectory randomly selects among the servers with the lowest cost.

In a way, LDAP chaining is similar to NDS’s tree-walking mechanism. However, there is a difference between the two in terms of performance. LDAP chaining requires a bind every time a server is chained to. If the chained-to server does not have the required entry, the overhead spent on the bind operation is wasted, and another bind has to be made to the next server. (The way around this is for the client to first do an anonymous bind to search for the target entry before binding to perform the operation. This does not always work, however, because the anonymous user may not have the necessary browse rights to the target entry, and the client application will have to be smart.) NDS tree-walking, on the other hand, does not require authentication. Only when the target object is located is an authenticated connection made to that server.

TIP

In an NDS tree where not all servers are running the LDAP service and the LDAP servers do not have partitions of the whole tree, the chaining method works better than tree-walking because the LDAP server can access the whole tree on behalf of the clients.

Referrals

Referrals are a client-based name resolution method in which the client decides what to do if the target LDAP server does not have a local copy of the target entry. In this model, whenever a server cannot find the requested DN within its local database, it uses the knowledge reference it has to generate a referral to another server that does have the desired information or knows more about the target DN. The client then makes a new request to the referred server and retries the operation. If the second LDAP server has the target DN for the operation, it performs the request; otherwise, it also sends a referral back to the client. This continues until the client contacts a server that has the entry and can perform the desired operation or until an LDAP server returns an error that the entry cannot be found. The client can also decide to not connect to the next referred server and return an error instead or prompt the user before contacting the referred server.

The main advantage of the referrals-based method is that the client has total control. When the server returns a referral to the client, the referral contains information for each of these other servers. To continue the operations, the client can be smart about which server it picks from the list, or it can prompt the user for a selection. Another advantage is that when the client knows where an entry is located, it can go directly to the server that has the entry for additional operation requests, thus increasing efficiency and reducing network traffic.

The main downside of the referral method is that the client has to be smart and know how to handle and then follow referrals. The other drawback is that an LDAP server must service every partition in the NDS tree. Otherwise, some entries will not be accessible by LDAP clients because no referrals can be generated for data in the partitions that are not serviced by an LDAP server.

NOTE

LDAP v2 does not support referrals. If the LDAP server cannot find the requested information in its local data store, it fails the search and returns an error. The University of Michigan created an extension to LDAP that allows LDAP v2 to return referrals to clients as error messages. This adds complexity to the client because it must follow the referrals, but the server retains simplicity.

LDAP v3 introduced a new type of referral call superior referrals. Superior referrals enable an eDirectory tree to refer directory requests to other directories (such as a separate eDirectory tree or one hosted on a Netscape directory server). This capability enables eDirectory to function as part of a larger directory tree that comprises two or more separate directory trees. In other words, this feature can help companies federate two or more directory trees to function as a single directory tree. For example, suppose your company acquired a subsidiary that is using eDirectory. Your company is not using eDirectory but is using an LDAP v3–compliant directory. Your company wants to add the subsidiary’s directory tree as a branch of its corporate tree. By using superior referrals, you can configure eDirectory to consult your company’s corporate directory to fulfill requests for information that resides in that directory. Superior referrals are supported by eDirectory 8.7 and higher.

LDAP Objects in NDS/eDirectory

When LDAP Services for eDirectory is installed, it creates two objects in the tree: an LDAP Group object and an LDAP Server object in the same container as the NCP Server object. These objects initially contain the default configuration for LDAP Services:

Image   The LDAP Server object (called LDAP Server – servername) represents server-specific configuration data, such as the port numbers to be used for clear-text and TLS/SSL bind, and whether the server supports anonymous binds from LDAP clients.

Image   The LDAP Group object (called LDAP Group – servername) provides common configuration data for a group of LDAP servers, such as the proxy user to be used for an anonymous bind.

     You can associate multiple LDAP Server objects with one LDAP Group object. All the associated LDAP servers then get their server-specific configuration from their LDAP Server object but get common or shared information from the LDAP Group object.

     The LDAP Services installation program creates these objects by default. Later, you can associate multiple LDAP Server objects with a single LDAP Group object (and perhaps rename the LDAP Group object to something more meaningful that does not contain the server name). You can modify the default configuration by using either the ConsoleOne LDAP snap-in or the LDAP Management task in Novell iManager. On Unix/Linux, you can also use the ldapconfig utility.

NOTE

With iManager 2.x, there is also an LDAPManagement object under the Extend container (see Figure 2.24). However, this object does not contain configuration information for LDAP Services.

FIGURE 2.24 The Extend container created by iManager 2.x.

image

WARNING

Although it is possible to associate newer versions of an LDAP Server object with older versions of LDAP Group objects, Novell does not recommend that you mix versions due to the fact that certain feature sets are only available to newer versions of LDAP Services. For example, you should avoid associating an LDAP Group object for eDirectory 8.5 with an LDAP Server object for eDirectory 8.7. However, it is okay to include eDirectory 8.7.0 and 8.7.1 LDAP Server objects with the same eDirectory 8.7.1 LDAP Group object.

Object Attribute Names Versus Schema Attribute Names

As mentioned earlier in this chapter, many of the LDAP attribute names are either the same as or derived from the NDS schema names. For instance, Account Balance in NDS is accountBalance in LDAP—you simply run the words together. Note that schema names are not case-sensitive. Therefore, the use of case in the name is just to help make the name more readily recognizable.

Frequently, schema names do not reflect their true meaning to a casual user because (mostly) programmers design them. Therefore, you often find that the attribute names used in Novell or third-party DS-aware utilities do not match those used in the schema. This makes troubleshooting using tools such as DSBrowse a little challenging because it’s difficult to locate the correct name. Table 2.12 shows some of the most commonly used User object attribute names and descriptions, as used by ConsoleOne, and their corresponding NDS and LDAP schema names.

TABLE 2.12 Attribute Names Used in ConsoleOne Versus Schema Names

Image Image

NOTE

Bear in mind that the default attribute mapping used by the LDAP server is to map DS’s Generational Qualifier attribute (which is an eight-character CI string) to the LDAP attribute generationQualifier. There is also a DS attribute called generationQualifier (which is a 32KB CI string) that is not mapped to an LDAP attribute.

TIP

Chapter 7 contains a table similar to Table 2.12 that compares the ACL attribute names used by Novell utilities with their schema names.

Summary

This chapter establishes a base of information necessary to begin looking at eDirectory tree design and troubleshooting. Starting with a look at how NDS and eDirectory version numbering work, followed by a study of classes, attributes, and syntaxes, this chapter examines how the database is structured and then moves into a discussion of the partitioning and replication features of eDirectory. This chapter also looks at why time synchronization is important to the eDirectory database. This chapter also includes a discussion about how network services are located using SAP and SLP, the functions and role of DHost in non-Netware platforms. The chapter ends with a review of LDAP support and LDAP features that are included with eDirectory.

Chapter 3, “The Directory Information Base,” examines the data store used by eDirectory—the DIB.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.146.221.32