\n"; echo "

Copying " . htmlspecialchars( $source_dn ) . "

\n"; echo "

Recursive copy progress

\n"; echo "

"; echo "\n"; echo "Building snapshot of tree to copy... "; flush(); build_tree( $source_server_id, $source_dn, $snapshot_tree ); echo " Success
\n"; flush(); // prevent script from bailing early on a long delete @set_time_limit( 0 ); $copy_result = r_copy_dn( $source_server_id, $dest_server_id, $snapshot_tree, $source_dn, $dest_dn ); echo "
\n"; } else { $copy_result = copy_dn( $source_server_id, $source_dn, $dest_server_id, $dest_dn ); } if( $copy_result ) { $edit_url="edit.php?server_id=$dest_server_id&dn=" . rawurlencode( $dest_dn ); $new_rdn = get_rdn( $dest_dn ); $container = get_container( $dest_dn ); if( session_is_registered( 'tree' ) ) { $tree = $_SESSION['tree']; $tree_icons = $_SESSION['tree_icons']; if( isset( $tree[$dest_server_id][$container] ) ) { $tree[$dest_server_id][$container][] = $dest_dn; $tree_icons[$dest_server_id][$dest_dn] = get_icon( $dest_server_id, $dest_dn ); $_SESSION['tree'] = $tree; $_SESSION['tree_icons'] = $tree_icons; session_write_close(); } } ?>
Copy successful! Would you like to view the new entry?



Copying " . htmlspecialchars( utf8_decode( $root_dn ) ) . "..."; flush(); $copy_result = copy_dn( $source_server_id, $root_dn, $dest_server_id, $dest_dn ); if( ! $copy_result ) { global $R_COPY_ERROR; return false; } echo "Success
\n"; flush(); $children = $tree[ $root_dn ]; if( is_array( $children ) && count( $children ) > 0 ) { foreach( $children as $child_dn ) { $child_rdn = get_rdn( $child_dn ); $new_dest_dn = $child_rdn . ',' . $dest_dn; r_copy_dn( $source_server_id, $dest_server_id, $tree, $child_dn, $new_dest_dn ); } } else { return true; } return true; } function copy_dn( $source_server_id, $source_dn, $dest_server_id, $dest_dn ) { global $ds; $ds = pla_ldap_connect( $dest_server_id ) or pla_error( "Could not connect to LDAP server" ); $attrs = get_object_attrs( $source_server_id, $source_dn ); $new_entry = $attrs; // modify the prefix-value (ie "bob" in cn=bob) to match the destination DN's value. $rdn_attr = substr( $dest_dn, 0, strpos( $dest_dn, '=' ) ); $rdn_value = get_rdn( $dest_dn ); $rdn_value = substr( $rdn_value, strpos( $rdn_value, '=' ) + 1 ); $new_entry[ $rdn_attr ] = $rdn_value; // don't need a dn attribute in the new entry unset( $new_entry['dn'] ); $add_result = @ldap_add( $ds, $dest_dn, $new_entry ); if( ! $add_result ) { echo "

"; pla_error( "Failed to copy $source_dn (server: $source_server_id) to " . "$dest_dn (server: $dest_server_id)", ldap_error( $ds ), ldap_errno( $ds ) ); } return $add_result; } function build_tree( $source_server_id, $root_dn, &$tree ) { $children = get_container_contents( $source_server_id, $root_dn ); if( is_array( $children ) && count( $children ) > 0 ) { $tree[ $root_dn ] = $children; foreach( $children as $child_dn ) build_tree( $source_server_id, $child_dn, $tree ); } }