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