#include "portable.h"
#include <stdio.h>
#include <ac/socket.h>
#include <ac/string.h>
#include <ac/time.h>
#include "ldap-int.h"
int
ldap_rename(
LDAP *ld,
LDAP_CONST char *dn,
LDAP_CONST char *newrdn,
LDAP_CONST char *newSuperior,
int deleteoldrdn,
LDAPControl **sctrls,
LDAPControl **cctrls,
int *msgidp )
{
BerElement *ber;
int rc;
#ifdef NEW_LOGGING
LDAP_LOG ( OPERATION, ENTRY, "ldap_rename\n", 0, 0, 0 );
#else
Debug( LDAP_DEBUG_TRACE, "ldap_rename\n", 0, 0, 0 );
#endif
rc = ldap_int_client_controls( ld, cctrls );
if( rc != LDAP_SUCCESS ) return rc;
if ( (ber = ldap_alloc_ber_with_options( ld )) == NULL ) {
return( LDAP_NO_MEMORY );
}
if( newSuperior != NULL ) {
if ( ld->ld_version < LDAP_VERSION3 ) {
ld->ld_errno = LDAP_NOT_SUPPORTED;
ber_free( ber, 1 );
return( ld->ld_errno );
}
rc = ber_printf( ber, "{it{ssbtsN}",
++ld->ld_msgid, LDAP_REQ_MODDN,
dn, newrdn, (ber_int_t) deleteoldrdn,
LDAP_TAG_NEWSUPERIOR, newSuperior );
} else {
rc = ber_printf( ber, "{it{ssbN}",
++ld->ld_msgid, LDAP_REQ_MODDN,
dn, newrdn, (ber_int_t) deleteoldrdn );
}
if ( rc < 0 ) {
ld->ld_errno = LDAP_ENCODING_ERROR;
ber_free( ber, 1 );
return( ld->ld_errno );
}
if( ldap_int_put_controls( ld, sctrls, ber ) != LDAP_SUCCESS ) {
ber_free( ber, 1 );
return ld->ld_errno;
}
rc = ber_printf( ber, "N}" );
if ( rc < 0 ) {
ld->ld_errno = LDAP_ENCODING_ERROR;
ber_free( ber, 1 );
return( ld->ld_errno );
}
*msgidp = ldap_send_initial_request( ld, LDAP_REQ_MODRDN, dn, ber );
if( *msgidp < 0 ) {
return( ld->ld_errno );
}
return LDAP_SUCCESS;
}
int
ldap_rename2(
LDAP *ld,
LDAP_CONST char *dn,
LDAP_CONST char *newrdn,
LDAP_CONST char *newSuperior,
int deleteoldrdn )
{
int msgid;
int rc;
#ifdef NEW_LOGGING
LDAP_LOG ( OPERATION, ENTRY, "ldap_rename2\n", 0, 0, 0 );
#else
Debug( LDAP_DEBUG_TRACE, "ldap_rename2\n", 0, 0, 0 );
#endif
rc = ldap_rename( ld, dn, newrdn, newSuperior,
deleteoldrdn, NULL, NULL, &msgid );
return rc == LDAP_SUCCESS ? msgid : -1;
}
int
ldap_modrdn2( LDAP *ld,
LDAP_CONST char *dn,
LDAP_CONST char *newrdn,
int deleteoldrdn )
{
return ldap_rename2( ld, dn, newrdn, NULL, deleteoldrdn );
}
int
ldap_modrdn( LDAP *ld, LDAP_CONST char *dn, LDAP_CONST char *newrdn )
{
return( ldap_rename2( ld, dn, newrdn, NULL, 1 ) );
}
int
ldap_rename_s(
LDAP *ld,
LDAP_CONST char *dn,
LDAP_CONST char *newrdn,
LDAP_CONST char *newSuperior,
int deleteoldrdn,
LDAPControl **sctrls,
LDAPControl **cctrls )
{
int rc;
int msgid;
LDAPMessage *res;
rc = ldap_rename( ld, dn, newrdn, newSuperior,
deleteoldrdn, sctrls, cctrls, &msgid );
if( rc != LDAP_SUCCESS ) {
return rc;
}
rc = ldap_result( ld, msgid, 1, NULL, &res );
if( rc == -1 ) {
return ld->ld_errno;
}
return ldap_result2error( ld, res, 1 );
}
int
ldap_rename2_s(
LDAP *ld,
LDAP_CONST char *dn,
LDAP_CONST char *newrdn,
LDAP_CONST char *newSuperior,
int deleteoldrdn )
{
return ldap_rename_s( ld, dn, newrdn, newSuperior,
deleteoldrdn, NULL, NULL );
}
int
ldap_modrdn2_s( LDAP *ld, LDAP_CONST char *dn, LDAP_CONST char *newrdn, int deleteoldrdn )
{
return ldap_rename_s( ld, dn, newrdn, NULL, deleteoldrdn, NULL, NULL );
}
int
ldap_modrdn_s( LDAP *ld, LDAP_CONST char *dn, LDAP_CONST char *newrdn )
{
return ldap_rename_s( ld, dn, newrdn, NULL, 1, NULL, NULL );
}