home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ldapsdk.zip / libraries / libldap / delete.c < prev    next >
C/C++ Source or Header  |  2001-07-22  |  3KB  |  149 lines

  1. /* $OpenLDAP: pkg/ldap/libraries/libldap/delete.c,v 1.10.6.4 2001/07/21 19:01:39 kurt Exp $ */
  2. /*
  3.  * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
  4.  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  5.  */
  6. /*  Portions
  7.  *  Copyright (c) 1990 Regents of the University of Michigan.
  8.  *  All rights reserved.
  9.  *
  10.  *  delete.c
  11.  */
  12.  
  13. /*
  14.  * A delete request looks like this:
  15.  *    DelRequet ::= DistinguishedName,
  16.  */
  17.  
  18. #include "portable.h"
  19.  
  20. #include <stdio.h>
  21.  
  22. #include <ac/socket.h>
  23. #include <ac/string.h>
  24. #include <ac/time.h>
  25.  
  26. #include "ldap-int.h"
  27.  
  28. /*
  29.  * ldap_delete_ext - initiate an ldap extended delete operation. Parameters:
  30.  *
  31.  *    ld        LDAP descriptor
  32.  *    dn        DN of the object to delete
  33.  *    sctrls    Server Controls
  34.  *    cctrls    Client Controls
  35.  *    msgidp    Message Id Pointer
  36.  *
  37.  * Example:
  38.  *    rc = ldap_delete( ld, dn, sctrls, cctrls, msgidp );
  39.  */
  40. int
  41. ldap_delete_ext(
  42.     LDAP *ld,
  43.     LDAP_CONST char* dn,
  44.     LDAPControl **sctrls,
  45.     LDAPControl **cctrls,
  46.     int *msgidp )
  47. {
  48.     int rc;
  49.     BerElement    *ber;
  50.  
  51.     Debug( LDAP_DEBUG_TRACE, "ldap_delete\n", 0, 0, 0 );
  52.  
  53.     assert( ld != NULL );
  54.     assert( LDAP_VALID( ld ) );
  55.     assert( dn != NULL );
  56.     assert( msgidp != NULL );
  57.  
  58.     /* check client controls */
  59.     rc = ldap_int_client_controls( ld, cctrls );
  60.     if( rc != LDAP_SUCCESS ) return rc;
  61.  
  62.     /* create a message to send */
  63.     if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
  64.         ld->ld_errno = LDAP_NO_MEMORY;
  65.         return( ld->ld_errno );
  66.     }
  67.  
  68.     if ( ber_printf( ber, "{its", /* '}' */
  69.         ++ld->ld_msgid, LDAP_REQ_DELETE, dn ) == -1 )
  70.     {
  71.         ld->ld_errno = LDAP_ENCODING_ERROR;
  72.         ber_free( ber, 1 );
  73.         return( ld->ld_errno );
  74.     }
  75.  
  76.     /* Put Server Controls */
  77.     if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
  78.         ber_free( ber, 1 );
  79.         return ld->ld_errno;
  80.     }
  81.  
  82.     if ( ber_printf( ber, /*{*/ "N}" ) == -1 ) {
  83.         ld->ld_errno = LDAP_ENCODING_ERROR;
  84.         ber_free( ber, 1 );
  85.         return( ld->ld_errno );
  86.     }
  87.  
  88.     /* send the message */
  89.     *msgidp = ldap_send_initial_request( ld, LDAP_REQ_DELETE, dn, ber );
  90.  
  91.     if(*msgidp < 0)
  92.         return ld->ld_errno;
  93.  
  94.     return LDAP_SUCCESS;
  95. }
  96.  
  97. int
  98. ldap_delete_ext_s(
  99.     LDAP *ld,
  100.     LDAP_CONST char *dn,
  101.     LDAPControl **sctrls,
  102.     LDAPControl **cctrls )
  103. {
  104.     int    msgid;
  105.     int rc;
  106.     LDAPMessage    *res;
  107.  
  108.     rc = ldap_delete_ext( ld, dn, sctrls, cctrls, &msgid );
  109.     
  110.     if( rc != LDAP_SUCCESS )
  111.         return( ld->ld_errno );
  112.  
  113.     if ( ldap_result( ld, msgid, 1, (struct timeval *) NULL, &res ) == -1 )
  114.         return( ld->ld_errno );
  115.  
  116.     return( ldap_result2error( ld, res, 1 ) );
  117. }
  118. /*
  119.  * ldap_delete - initiate an ldap (and X.500) delete operation. Parameters:
  120.  *
  121.  *    ld        LDAP descriptor
  122.  *    dn        DN of the object to delete
  123.  *
  124.  * Example:
  125.  *    msgid = ldap_delete( ld, dn );
  126.  */
  127. int
  128. ldap_delete( LDAP *ld, LDAP_CONST char *dn )
  129. {
  130.     int msgid;
  131.  
  132.     /*
  133.      * A delete request looks like this:
  134.      *    DelRequet ::= DistinguishedName,
  135.      */
  136.  
  137.     Debug( LDAP_DEBUG_TRACE, "ldap_delete\n", 0, 0, 0 );
  138.  
  139.     return ldap_delete_ext( ld, dn, NULL, NULL, &msgid ) == LDAP_SUCCESS
  140.         ? msgid : -1 ;
  141. }
  142.  
  143.  
  144. int
  145. ldap_delete_s( LDAP *ld, LDAP_CONST char *dn )
  146. {
  147.     return ldap_delete_ext_s( ld, dn, NULL, NULL );
  148. }
  149.