 
      Step 5: Perform the Operations
The following code fragments show the ds_add_entry( ), ds_list( ), and the ds_remove_entry( ) calls. 
First, the two ds_add_entry( ) function calls add the attribute lists contained in attr_list1 and attr_list2 to the distinguished names represented by dn_brendan 
and dn_sinead, respectively: 
 
/* Add two entries to the GDS server.                */ 
if (ds_add_entry(bound_session, DS_DEFAULT_CONTEXT, 
   dn_brendan, attr_list1, 
   &invoke_id) != DS_SUCCESS) 
   printf("ds_add_entry() error\n"); 
  
if (ds_add_entry(bound_session, DS_DEFAULT_CONTEXT, 
   dn_sinead, attr_list2, 
   &invoke_id) != DS_SUCCESS) 
   printf("ds_add_entry() error\n"); 
  
Next, list all the subordinates of the object referenced by the distinguished name /C=ie/O=sni/OU=ap: 
if (ds_list(bound_session, DS_DEFAULT_CONTEXT, dn_ap, 
   &result, &invoke_id) 
   != DS_SUCCESS) 
   printf("ds_list() error\n"); 
  
The ds_list( ) call returns the result in the private object result to the workspace.  The components of result are represented by OM attributes in the OM class 
DS_C_LIST_RESULT (as shown in the following figure) and can only be read by a series of om_get( ) calls. 
 
  OM Class DS_C_LIST_RESULT 
  
Finally, remove the two entries from the directory: 
if (ds_remove_entry(bound_session, DS_DEFAULT_CONTEXT, 
    dn_brendan, &invoke_id) 
    != DS_SUCCESS) 
    printf("ds_remove_entry() error\n"); 
  
if (ds_remove_entry(bound_session, DS_DEFAULT_CONTEXT, 
    dn_sinead, &invoke_id) 
    != DS_SUCCESS) 
    printf("ds_remove_entry() error\n"); 
  
 
 
  |