This chapter identifies the conformance requirements of The Open Group Directory Services (XDS) API implementations for the DCE. For the full Open Group XDS API, see the referenced XDS specification.
The XDS interface comprises a number of functions, together with OM classes
of OM objects, which are used as the arguments and results of the
functions. Both the functions and the OM objects are based on the Abstract
Service specified in the ISO 9594-3 standard.
The interface models the directory interactions as service requests made through a number of interface functions, which take a number of input arguments. Each valid request causes an operation to be performed by the directory service, which eventually returns a status and any result of the operation.
The other arguments to the functions include a context and various service-specific arguments.
DCE XDS is characterised by the following:
String mapping is requested by setting the local_strings boolean parameter to OM_TRUE. Currently supported mappings are:
DCE XDS supports five packages, one of which is mandatory and the other
four of which are optional. Use of the optional packages is negotiated
through the ds_version () routine. The packages are as follows:
None of the OM classes defined in these packages are encodable. As a result, DCE XDS application programmers do not require the use of the XOM functions om_encode () and om_decode (), which are not supported by the DCE XOM API.
The OSI Directory Service standards define Abstract Services that requestors use to interact with the directory. Each of these Abstract Services maps to a single function call, and the detailed specifications of the calls are given in the XDS reference pages in the XDS specification. The services, and the function calls to which they map, are as follows:
The XDS function ds_receive_result (), which is used with asynchronous operations, has no counterpart in the Abstract Service.
The ds_initialize (), ds_shutdown () and ds_version () functions are used to control the XDS API, and do not initiate any directory operations.
The interface functions are summarised in
Function | Description |
---|---|
ds_abandon () | Abandons the result of a pending asynchronous operation. This function is not supported. |
ds_add_entry () | Adds a leaf entry to the DIT (Directory Information Tree). |
ds_bind () | Opens a session with a Directory User Agent (DUA), which in turn connects to a Directory Service Agent (DSA). |
ds_compare () | Compares a purported attribute value with the attribute value stored in the Directory Information Base (DIB) for a particular entry. |
ds_initialize () | Initialises the XDS interface. |
ds_list () | Enumerates the names of the immediate subordinates of a particular directory entry. |
ds_modify_entry () | Atomically performs modification of a directory entry. |
ds_modify_rdn () | Changes the Relative Distinguished Name (RDN) of a leaf entry. |
ds_read () | Queries information on a particular directory entry by name. |
ds_receive_result () | Retrieves the result of an asynchronously executed function. This function is not supported. |
ds_remove_entry () | Removes a leaf entry from the DIT. |
ds_search () | Finds entries of interest in a portion of the directory information tree. |
ds_shutdown () | Discards a workspace. |
ds_unbind () | Unbinds from a directory session. |
ds_version () | Negotiates features of the interface and service. |
The XDS interface functions are fully specified in the XDS specification. The following sections specify the extensions made for the DCE XDS API for each of the interface functions.
The DCE XDS interface does not support asynchronous operations. Thus, ds_abandon () and ds_receive_result () are redundant. A ds_abandon () call always returns a [DS_C_ABANDON_FAILED] ([DS_E_TOO_LATE]) error.
Note the following in regard to the ds_add_entry () operation:
Since CDS does not support the X.500 schema rules, some CDS objects may not contain GDS-mandatory attributes, such as object class and so on.
In order to use CDS when GDS is not active, ds_bind () must be called with the value of the session argument set to DS_DEFAULT_SESSION.
Note the following in regard to the ds_compare () operation:
No modifications apply.
For CDS, enumeration can be performed only on directories (that is, entries that are not leaf objects); if enumeration of a leaf object is attempted, the call returns a [DS_C_NAME_ERROR] ([DS_E_NO_SUCH_OBJECT]) error.
Note the following in regard to the ds_modify_entry () operation:
CDS does not support the ds_modify_rdn () operation. Attempting this operation on a CDS object results in an error return of [DS_C_SERVICE_ERROR] ([DS_E_UNWILLING_TO_PERFORM]).
Note the following in regard to the ds_read() operation:
The DCE XDS interface does not support asynchronous operations. Thus, ds_abandon () and ds_receive_result () are redundant. A ds_receive_result () function call always returns with DS_status set to [DS_SUCCESS], and the completion_flag_return argument set to DS_NO_OUTSTANDING_OPERATION.
No modifications apply.
CDS does not support the ds_search () operation. An attempt to perform a ds_search () in CDS results in an error of [DS_C_SERVICE_ERROR] ([DS_E_UNWILLING_TO PERFORM]) being returned.
No modifications apply.
No modifications apply.
No modifications apply.
Most XDS functions also return data in an invoke_id_return argument, which identifies the particular invocation; and each of the interrogation operations returns data in a result_return argument. The invoke_id_return and result_return values are returned using pointers that are supplied as arguments of the C function.
These three types of function results are described in the XDS specification.
All interface functions that invoke a directory service operation return an
invoke_id_return argument, which is an integer that identifies the
particular invocation of an operation. This information is meaningful only
if asynchronous operations are supported. Since DCE XDS does not support
asynchronous operations, the invoke_id_return value is meaningless
in DCE XDS.
The affected interface functions are:
DCE application programmers must still supply this argument, as described in the XDS reference pages (see the XDS specification), but the value returned therein should be ignored.
In synchronous mode, all functions wait until the operation is complete before returning. The thread of control is blocked within the interface during the time which elapses between the calling of a function and its return, and the function result can be used immediately after the function returns.
Implementations may define a limit on the number of asynchronous operations that can be outstanding at any one time in any one session. The limit is defined by the implementation-defined constant DS_MAX_OUTSTANDING_OPERATIONS. In DCE XDS this constant always has the value 0 (zero), because asynchronous operations are not supported.
All errors occurring during a synchronous request are reported when the function returns.
The DS_FILE_DESCRIPTOR OM attribute of DS_C_SESSION is not used by the DCE XDS API. It is always set to DS_NO_VALID_FILE_DESCRIPTOR.
The XDS specification does not define a security interface in order to avoid possibly constraining the security features of existing directory implementations.
DCE GDS proves an extension to the XDS API for security support. This is
achieved at the XDS API level through a new DSX_C_GDS_SESSION
session object which contains information on the security mechanism that
should be used. Simple authentication through the use of name and password,
and external authentication based on DCE security are supported. (See
A directory service implementation can provide automatic management of the association or connection between the user and the directory service, making and releasing connections at its discretion.
DCE XDS does not support automatic connection management. A DSA connection is established when ds_bind () is successfully called, and released when ds_unbind () is successfully called.
The object identifier associated with the GDSP is:
It has the following encoding:
The GDSP object identifier is represented by the constant DSX_GDS_PKG.
This constant, together with the other C constants associated with the
package, are contained in the <xdsgds.h> header file (see
In the following sections, the GDSP's attribute types are introduced first; descriptions of its object classes follow. Finally, the OM class hierarchy and OM class definitions required to support the new attribute types are described.
Object Identifier BER | ||
---|---|---|
Package | Attribute Type | (Hexadecimal Value) |
GDSP | DSX_A_ACL | \x2B\x0C\x02\x88\x53\x01\x03\x04\x01 |
GDSP | DSX_A_AT | \x2B\x0C\x02\x88\x53\x01\x03\x04\x06 |
GDSP | DSX_A_CDS_CELL | \x2B\x0C\x02\x88\x53\x01\x03\x04\x0D |
GDSP | DSX_A_CDS_REPLICA | \x2B\x0C\x02\x88\x53\x01\x03\x04\x0E |
GDSP | DSX_A_CLIENT | \x2B\x0C\x02\x88\x53\x01\x03\x04\x0A |
GDSP | DSX_A_DEFAULT_DSA | \x2B\x0C\x02\x88\x53\x01\x03\x04\x08 |
GDSP | DSX_A_DNLIST | \x2B\x0C\x02\x88\x53\x01\x03\x04\x0B |
GDSP | DSX_A_LOCAL_DSA | \x2B\x0C\x02\x88\x53\x01\x03\x04\x09 |
GDSP | DSX_A_MASTER_KNOWLEDGE | \x2B\x0C\x02\x88\x53\x01\x03\x04\x00 |
GDSP | DSX_A_OCT | \x2B\x0C\x02\x88\x53\x01\x03\x04\x05 |
GDSP | DSX_A_SHADOWED_BY | \x2B\x0C\x02\x88\x53\x01\x03\x04\x03 |
GDSP | DSX_A_SHADOWING_JOB | \x2B\x0C\x02\x88\x53\x01\x03\x04\x0C |
GDSP | DSX_A_SRT | \x2B\x0C\x02\x88\x53\x01\x03\x04\x04 |
GDSP | DSX_A_TIME_STAMP | \x2B\x0C\x02\x88\x53\x01\x03\x04\x02 |
Value | Multi- | Matching | ||
---|---|---|---|---|
Attribute Type | OM Value Syntax | Length | Valued | Rules |
DSX_A_ACL | Object (DSX_C_GDS_ACL) | - | no | E |
DSX_A_AT | String (OM_S_PRINTABLE_STRING) | 1-101 | yes | E,S |
DSX_A_CDS_CELL | String (OM_S_OCTET_STRING) | 1-284 | no | E |
DSX_A_CDS_REPLICA | String (OM_S_OCTET_STRING) | 1-905 | yes | E |
DSX_A_CLIENT | Only a cache attribute | - | - | - |
DSX_A_DEFAULT_DSA | Only a cache attribute | - | - | - |
DSX_A_DNLIST | Object (DS_C_DS_DN) | - | yes | E,S |
DSX_A_LOCAL_DSA | Only a cache attribute | - | - | - |
DSX_A_MASTER_KNOWLEDGE | Object (DS_C_DS_DN) | - | no | E,S |
DSX_A_OCT | String (OM_S_PRINTABLE_STRING) | 1-397 | yes | E,S |
DSX_A_SHADOWED_BY | Not used yet | - | - | - |
DSX_A_SHADOWING_JOB | Not used yet | - | - | - |
DSX_A_SRT | String (OM_S_PRINTABLE_STRING) | 1-29 | yes | E,S |
DSX_A_TIME_STAMP | String (OM_S_UTC_TIME_STRING) | 11-17 | no | E,O |
In the Matching Rules column, the abbreviations have the following meanings:
The third column of the table shows the hexadecimal values of the
octets of the BER encoding of the object identifier in hexadecimal
representation. This object identifier is derived from the root:
Object Identifier BER | |||
---|---|---|---|
Package | Attribute Type | (Hexadecimal Value) | |
GDSP | DSX_O_SCHEMA | \x2B\x0C\x02\x88\x53\x01\x03\x06\x00 |
OM_C_OBJECT (defined in the OM package) DS_C_SESSION (defined in the Directory Service Package) DSX_C_GDS_SESSION DS_C_CONTEXT (defined in the Directory Service Package) DSX_C_GDS_CONTEXT DSX_C_GDS_ACL DSX_C_GDS_ACL_ITEM
None of the OM classes in the preceding list are encodable using om_encode () and om_decode ().
An instance of OM class DSX_C_GDS_ACL describes up to five categories of rights for one or more directory users.
An instance of this OM class has the OM attributes of its superclass,
OM_C_OBJECT, in addition to the OM attributes listed in
Value | Value | Value | ||
---|---|---|---|---|
OM Attribute | Value Syntax | Length | Number | Initially |
DSX_MODIFY_PUBLIC | Object (DSX_C_GDS_ACL_ITEM) | - | 0-4 | - |
DSX_READ_STANDARD | Object (DSX_C_GDS_ACL_ITEM) | - | 0-4 | - |
DSX_MODIFY_STANDARD | Object (DSX_C_GDS_ACL_ITEM) | - | 0-4 | - |
DSX_READ_SENSITIVE | Object (DSX_C_GDS_ACL_ITEM) | - | 0-4 | - |
DSX_MODIFY_SENSITIVE | Object (DSX_C_GDS_ACL_ITEM) | - | 0-4 | - |
The OM attributes of DSX_C_GDS_ACL are as follows:
An instance of OM class DSX_C_GDS_ACL_ITEM is a component of an instance of OM class DSX_C_GDS_ACL. It specifies the user, or subtree of users, to whom an access right applies.
An instance of this OM class has the OM attributes of its superclass,
OM_C_OBJECT, in addition to the OM attributes listed in
Value | Value | Value | ||
---|---|---|---|---|
OM Attribute | Value Syntax | Length | Number | Initially |
DSX_INTERPRETATION | Enum (DSX_Interpretation) | - | 1 | - |
DSX_USER | Object(DS_C_DS_DN) | - | 1 | - |
The OM attributes of a DSX_C_GDS_ACL_ITEM are as follows:
An instance of this OM class has the OM attributes of its superclasses,
OM_C_OBJECT and DS_C_CONTEXT, in addition to the OM attributes
listed in
Value | Value | Value | ||
---|---|---|---|---|
OM Attribute | Value Syntax | Length | Number | Initially |
Service Controls | ||||
DSX_DUAFIRST | OM_S_BOOLEAN | - | 1 | OM_FALSE |
DSX_DONT_STORE | OM_S_BOOLEAN | - | 1 | OM_TRUE |
DSX_NORMAL_CLASS | OM_S_BOOLEAN | - | 1 | OM_FALSE |
DSX_PRIV_CLASS | OM_S_BOOLEAN | - | 1 | OM_FALSE |
DSX_RESIDENT_CLASS | OM_S_BOOLEAN | - | 1 | OM_FALSE |
DSX_USEDSA | OM_S_BOOLEAN | - | 1 | OM_TRUE |
DSX_DUA_CACHE | OM_S_BOOLEAN | - | 1 | OM_FALSE |
DSX_PREFER_ADM_FUNCS | OM_S_BOOLEAN | - | 1 | OM_FALSE |
DSX_SIGN_MECHANISM | Enum(DSX_Sign_Mechanism) | - | 0-1 | - |
DSX_PROT_REQUEST | Enum(DSX_Prot_Request) | - | 0-1 | - |
The OM attributes of the DSX_C_GDS_CONTEXT OM class are as follows:
When the value of this attribute is set to OM_FALSE, the information read is stored in the DUA cache, and the objects returned by ds_list () and ds_compare () are stored in the cache without their associated attribute information. The objects returned by ds_read () and ds_search () are stored in the cache with all their attributes that are capable of being stored in the cache; these are public attributes, except for the ACL attribute. This information is stored in the cache only when a list of requested attributes is supplied. If all attributes are requested, then nothing is stored in the cache.
The DUA cache categorises the information stored into three different memory classes. The user specifies the category with the following service control attributes:
All other functions always operate on the currently connected DSA.
The DSX_A_MASTER_KNOWLEDGE and DSX_A_ACL attributes are present in every GDS entry.
When an application requests that all attributes be returned in an operation, it can prevent any of the above three optional attributes from being returned by setting the value of DSX_PREFER_ADM_FUNCS to OM_FALSE.
If GDS applications (for example, GDS administration) require these attributes, they are obtained by setting this service control to OM_TRUE.
Applications can assume that an object of OM class DSX_C_GDS_CONTEXT, created with default values for all its OM attributes, works with all interface functions. Note that an application can supply the constant DS_DEFAULT_CONTEXT as the context argument to GDS functions instead of creating a DSX_C_GDS_CONTEXT OM object with all default values.
The default form of DSX_C_GDS_CONTEXT is described in
OM Attribute | Default Value |
Common Arguments | |
DS_OPERATION_PROGRESS | DS_OPERATION_NOT_STARTED |
DS_ALIASED_RDNS | 0 |
Service Controls | |
DS_CHAINING_PROHIB | OM_TRUE |
DS_DONT_DEREFERENCE_ALIASES | OM_FALSE |
DS_DONT_USE_COPY | OM_TRUE |
DS_LOCAL_SCOPE | OM_FALSE |
DS_PREFER_CHAINING | OM_FALSE |
DS_PRIORITY | DS_MEDIUM |
Local Controls | |
DS_ASYNCHRONOUS | OM_FALSE |
DS_AUTOMATIC_CONTINUATION | OM_TRUE |
Private Extensions | |
DSX_DUAFIRST | OM_FALSE |
DSX_DONT_STORE | OM_TRUE |
DSX_NORMAL_CLASS | OM_FALSE |
DSX_PRIV_CLASS | OM_FALSE |
DSX_RESIDENT_CLASS | OM_FALSE |
DSX_USEDSA | OM_TRUE |
DSX_DUA_CACHE | OM_FALSE |
DSX_PREFER_ADM_FUNCS | OM_FALSE |
DSX_SIGN_MECHANISM | Absent |
DSX_PROT_REQUEST | Absent |
DSX_C_GDS_SESSION can be passed as an argument to ds_bind ().
An instance of this OM class has the OM attributes of its superclasses,
OM_C_OBJECT and DS_C_SESSION, in addition to the OM attributes
listed in
Value | Value | Value | ||
---|---|---|---|---|
OM Attribute | Value Syntax | Length | Number | Initially |
DSX_PASSWORD | String(OM_S_OCTET_STRING) | - | 0 or 1 | - |
DSX_DIR_ID | OM_S_INTEGER | - | 1 | 1 |
DSX_AUTH_MECHANISM | Enum(DSX_Auth_Mechanism) | - | 0-1 | - |
DSX_AUTH_INFO | String(OM_S_OCTET_STRING) | - | 0-1 | - |
The OM attributes of DSX_C_GDS_SESSION are as follows:
If an authentication mechanism is selected that is not currently supported, ds_bind() returns a [DS_E_NOT_SUPPORTED] error. If the selected authentication mechanism requires the user's credentials that cannot be assembled, then a [DS_E_NO_INFO] error is returned.
Applications can assume that an object of OM class DSX_C_GDS_SESSION, created with default values for all its OM attributes, works with all interface functions. Note that an application can supply the constant DS_DEFAULT_SESSION as the session argument to ds_bind () to create a default session (instead of creating a DSX_C_GDS_SESSION OM object with all the default values), having already negotiated the GDS package.
OM Attribute | Default Value |
---|---|
DS_DSA_ADDRESS | Value obtained from the cache or absent |
DS_DSA_NAME | Value obtained from the cache or absent |
DS_FILE_DESCRIPTOR | DS_NO_VALID_FILE_DESCRIPTOR |
DSX_DIR_ID | 1 |
DSX_AUTH_MECHANISM | Absent |
DSX_AUTH_INFO | Absent |
Please note that the html version of this specification may contain formatting aberrations. The definitive version is available as an electronic publication on CD-ROM from The Open Group.
Contents | Next section | Index |