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