/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2005 The OpenLDAP Foundation.
+ * Copyright 2005-2006 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
while(len > 0) {
writeres = write(fd, spew, len);
if(writeres == -1) {
- perror("could not spew write");
+ Debug( LDAP_DEBUG_ANY, "could not spew write: %s\n",
+ strerror( errno ), 0, 0 );
return -1;
}
else {
fd = open(path.bv_val, O_RDONLY);
/* error opening file (mebbe should log error) */
if(fd == -1) {
- perror("failed to open file");
+ Debug(LDAP_DEBUG_ANY, "failed to open file \"%s\": %s\n",
+ path.bv_val, strerror(errno), 0 );
}
if(path.bv_val != NULL)
fd = open( path->bv_val, O_RDONLY );
if ( fd < 0 ) {
- Debug( LDAP_DEBUG_TRACE,
+ Debug( LDAP_DEBUG_ANY,
"=> ldif_enum_tree: failed to open %s\n",
path->bv_val, 0, 0 );
return LDAP_NO_SUCH_OBJECT;
/* it shouldn't be treated as an error
* only if the directory doesn't exist */
rc = LDAP_BUSY;
- Debug( LDAP_DEBUG_TRACE,
+ Debug( LDAP_DEBUG_ANY,
"=> ldif_enum_tree: failed to opendir %s (%d)\n",
path->bv_val, errno, 0 );
}
send_res:
send_ldap_result(op, rs);
- if ( !SLAP_SHADOW( op->o_bd ))
- slap_graduate_commit_csn( op );
+ slap_graduate_commit_csn( op );
return 0;
}
Entry * entry = NULL;
int spew_res;
- if ( !SLAP_SHADOW( op->o_bd ))
- slap_mods_opattrs( op, &op->orm_modlist, 1 );
+ slap_mods_opattrs( op, &op->orm_modlist, 1 );
ldap_pvt_thread_mutex_lock(&ni->li_mutex);
dn2path(&op->o_req_ndn, &op->o_bd->be_nsuffix[0], &ni->li_base_path,
if(entry != NULL) {
rs->sr_err = apply_modify_to_entry(entry, modlst, op, rs);
if(rs->sr_err == LDAP_SUCCESS) {
+ int save_errno;
ldap_pvt_thread_mutex_lock(&entry2str_mutex);
spew_res = spew_entry(entry, &path);
+ save_errno = errno;
ldap_pvt_thread_mutex_unlock(&entry2str_mutex);
if(spew_res == -1) {
- perror("could not output entry");
+ Debug( LDAP_DEBUG_ANY,
+ "%s ldif_back_modify: could not output entry \"%s\": %s\n",
+ op->o_log_prefix, entry->e_name.bv_val, strerror( save_errno ) );
rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
}
}
rs->sr_text = NULL;
ldap_pvt_thread_mutex_unlock(&ni->li_mutex);
send_ldap_result(op, rs);
- if ( !SLAP_SHADOW( op->o_bd ))
- slap_graduate_commit_csn( op );
+ slap_graduate_commit_csn( op );
return 0;
}
struct berval path = BER_BVNULL;
int res = 0;
- if ( !SLAP_SHADOW( op->o_bd )) {
+ if ( BER_BVISEMPTY( &op->o_csn )) {
struct berval csn;
char csnbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
SLAP_FREE(path.bv_val);
ldap_pvt_thread_mutex_unlock(&ni->li_mutex);
send_ldap_result(op, rs);
- if ( !SLAP_SHADOW( op->o_bd ))
- slap_graduate_commit_csn( op );
+ slap_graduate_commit_csn( op );
return 0;
}
{
struct ldif_info *ni = (struct ldif_info *) op->o_bd->be_private;
struct berval new_dn = BER_BVNULL, new_ndn = BER_BVNULL;
- struct berval p_dn, bv = BER_BVNULL;
+ struct berval p_dn;
Entry * entry = NULL;
- LDAPRDN new_rdn = NULL;
- LDAPRDN old_rdn = NULL;
- Modifications * mods = NULL;
int res;
+ slap_mods_opattrs( op, &op->orr_modlist, 1 );
+
ldap_pvt_thread_mutex_lock( &ni->li_mutex );
ldap_pvt_thread_mutex_lock( &entry2str_mutex );
entry = (Entry *) get_entry( op, &ni->li_base_path );
/* build the mods to the entry */
if ( entry != NULL ) {
- if ( ldap_bv2rdn( &op->oq_modrdn.rs_newrdn, &new_rdn,
- (char **)&rs->sr_text, LDAP_DN_FORMAT_LDAP ) )
- {
- rs->sr_err = LDAP_INVALID_DN_SYNTAX;
- } else if ( op->oq_modrdn.rs_deleteoldrdn &&
- ldap_bv2rdn(&op->o_req_dn, &old_rdn, (char **)&rs->sr_text,
- LDAP_DN_FORMAT_LDAP ) )
- {
- rs->sr_err = LDAP_OTHER;
+ /* build new dn, and new ndn for the entry */
+ if ( op->oq_modrdn.rs_newSup != NULL ) {
+ /* new superior */
+ p_dn = *op->oq_modrdn.rs_newSup;
} else {
- /* got both rdns successfully, ready to build mods */
- if ( slap_modrdn2mods( op, rs, entry, old_rdn, new_rdn, &mods )
- != LDAP_SUCCESS )
- {
- rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
- } else {
- /* built mods successfully */
-
- /* build new dn, and new ndn for the entry */
- if ( op->oq_modrdn.rs_newSup != NULL ) {
- /* new superior */
- p_dn = *op->oq_modrdn.rs_newSup;
- } else {
- p_dn = slap_empty_bv;
- }
- dnParent( &entry->e_name, &p_dn );
- build_new_dn( &new_dn, &p_dn, &op->oq_modrdn.rs_newrdn, NULL );
- dnNormalize( 0, NULL, NULL, &new_dn, &new_ndn, NULL );
- ber_memfree_x( entry->e_name.bv_val, NULL );
- ber_memfree_x( entry->e_nname.bv_val, NULL );
- entry->e_name = new_dn;
- entry->e_nname = new_ndn;
-
- /* perform the modifications */
- res = apply_modify_to_entry( entry, mods, op, rs );
- slap_modrdn2mods_free( mods );
- if ( res == LDAP_SUCCESS ) {
- rs->sr_err = move_entry( entry, &op->o_req_ndn,
- &new_ndn,
- &op->o_bd->be_nsuffix[0],
- &ni->li_base_path );
- } else {
- rs->sr_err = res;
- }
- }
- }
-
- if ( new_rdn != NULL ) {
- ldap_rdnfree( new_rdn );
+ p_dn = slap_empty_bv;
}
-
- if ( old_rdn != NULL ) {
- ldap_rdnfree( old_rdn );
+ dnParent( &entry->e_name, &p_dn );
+ build_new_dn( &new_dn, &p_dn, &op->oq_modrdn.rs_newrdn, NULL );
+ dnNormalize( 0, NULL, NULL, &new_dn, &new_ndn, NULL );
+ ber_memfree_x( entry->e_name.bv_val, NULL );
+ ber_memfree_x( entry->e_nname.bv_val, NULL );
+ entry->e_name = new_dn;
+ entry->e_nname = new_ndn;
+
+ /* perform the modifications */
+ res = apply_modify_to_entry( entry, op->orr_modlist, op, rs );
+ if ( res == LDAP_SUCCESS ) {
+ rs->sr_err = move_entry( entry, &op->o_req_ndn,
+ &new_ndn,
+ &op->o_bd->be_nsuffix[0],
+ &ni->li_base_path );
+ } else {
+ rs->sr_err = res;
}
} else {
/* entry was null */
ldap_pvt_thread_mutex_unlock( &ni->li_mutex );
ldap_pvt_thread_mutex_unlock( &entry2str_mutex );
send_ldap_result( op, rs );
+ slap_graduate_commit_csn( op );
return 0;
}
{
struct ldif_info *ni = (struct ldif_info *) be->be_private;
if( BER_BVISEMPTY(&ni->li_base_path)) {/* missing base path */
- fprintf(stderr, "missing base path for back-ldif\n");
+ Debug( LDAP_DEBUG_ANY, "missing base path for back-ldif\n", 0, 0, 0);
return 1;
}
return 0;