Compare commits

...

3 Commits

Author SHA1 Message Date
Deon George
b443271175 RELEASE 0.9.7.1 2009-06-30 19:40:37 +10:00
Deon George
bbcd2cb3b6 Moved files 2009-06-30 19:39:45 +10:00
Deon George
df48b8ff9b RELEASE 0.9.7 2009-06-30 19:29:51 +10:00
505 changed files with 35778 additions and 13259 deletions

View File

@@ -28,10 +28,10 @@ in the "doc" directory.
# mkdir /var/www/tmp, and then
# chown root:daemon /var/www/tmp
# chmod 1755 /var/www/tmp
Where tmp is the $jpeg_temp_dir configured in config.php
Where tmp is the $config->custom->tmpdir['jpeg'] configured in config.php
* Windows
For jpeg photos to work properly, be sure to change $jpeg_temp_dir
For jpeg photos to work properly, be sure to change $config->custom->tmpdir['jpeg']
from "/tmp" to "c:\\temp" or similar.

View File

@@ -1 +1 @@
0.9.5
0.9.7.1

View File

@@ -1,141 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/add_attr.php,v 1.10 2004/08/15 17:39:20 uugdave Exp $
/*
* add_attr.php
* Adds an attribute/value pair to an object
*
* Variables that come in as POST vars:
* - dn
* - server_id
* - attr
* - val
* - binary
*/
require './common.php';
require 'templates/template_config.php';
$server_id = $_POST['server_id'];
$attr = $_POST['attr'];
$val = isset( $_POST['val'] ) ? $_POST['val'] : false;;
$dn = $_POST['dn'] ;
$encoded_dn = rawurlencode( $dn );
$encoded_attr = rawurlencode( $attr );
$is_binary_val = isset( $_POST['binary'] ) ? true : false;
if( ! $is_binary_val && $val == "" ) {
pla_error( $lang['left_attr_blank'] );
}
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
// special case for binary attributes (like jpegPhoto and userCertificate):
// we must go read the data from the file and override $val with the binary data
// Secondly, we must check if the ";binary" option has to be appended to the name
// of the attribute.
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $server_id, $dn, $attr, array($val) ) ) {
$search_href='search.php?search=true&form=advanced&server_id=' . $server_id . '&filter=' . $attr . '=' . $badattr;
pla_error(sprintf( $lang['unique_attr_failed'] , $attr,$badattr,$dn,$search_href ) );
}
if( $is_binary_val ) {
if( 0 == $_FILES['val']['size'] )
pla_error( $lang['file_empty'] );
if( ! is_uploaded_file( $_FILES['val']['tmp_name'] ) ) {
if( isset( $_FILES['val']['error'] ) )
switch($_FILES['val']['error']){
case 0: //no error; possible file attack!
pla_error( $lang['invalid_file'] );
case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
pla_error( $lang['uploaded_file_too_big'] );
case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
pla_error( $lang['uploaded_file_too_big'] );
case 3: //uploaded file was only partially uploaded
pla_error( $lang['uploaded_file_partial'] );
case 4: //no file was uploaded
pla_error( $lang['left_attr_blank'] );
default: //a default error, just in case! :)
pla_error( $lang['invalid_file'] );
break;
}
else
pla_error( $lang['invalid_file'] );
}
$file = $_FILES['val']['tmp_name'];
$f = fopen( $file, 'r' );
$binary_data = fread( $f, filesize( $file ) );
fclose( $f );
$val = $binary_data;
if( is_binary_option_required( $server_id, $attr ) )
$attr .=";binary";
}
// Automagically hash new userPassword attributes according to the
// chosen in config.php.
if( 0 == strcasecmp( $attr, 'userpassword' ) )
{
if( isset( $servers[$server_id]['default_hash'] ) &&
$servers[$server_id]['default_hash'] != '' )
{
$enc_type = $servers[$server_id]['default_hash'];
$val = password_hash( $val, $enc_type );
}
}
elseif( ( 0 == strcasecmp( $attr , 'sambantpassword' ) || 0 == strcasecmp( $attr , 'sambalmpassword') ) ){
$mkntPassword = new MkntPasswdUtil();
$mkntPassword->createSambaPasswords( $val );
$val = $mkntPassword->valueOf($attr);
}
$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] );
$new_entry = array( $attr => $val );
$result = @ldap_mod_add( $ds, $dn, $new_entry );
if( $result )
header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=$encoded_attr" );
else
pla_error( $lang['failed_to_add_attr'], ldap_error( $ds ) , ldap_errno( $ds ) );
// check if we need to append the ;binary option to the name
// of some binary attribute
function is_binary_option_required( $server_id, $attr ){
// list of the binary attributes which need the ";binary" option
$binary_attributes_with_options = array(
// Superior: Ldapv3 Syntaxes (1.3.6.1.4.1.1466.115.121.1)
'1.3.6.1.4.1.1466.115.121.1.8' => "userCertificate",
'1.3.6.1.4.1.1466.115.121.1.8' => "caCertificate",
'1.3.6.1.4.1.1466.115.121.1.10' => "crossCertificatePair",
'1.3.6.1.4.1.1466.115.121.1.9' => "certificateRevocationList",
'1.3.6.1.4.1.1466.115.121.1.9' => "authorityRevocationList",
// Superior: Netscape Ldap attributes types (2.16.840.1.113730.3.1)
'2.16.840.1.113730.3.1.40' => "userSMIMECertificate"
);
// quick check by attr name (short circuits the schema check if possible)
//foreach( $binary_attributes_with_options as $oid => $name )
//if( 0 == strcasecmp( $attr, $name ) )
//return true;
$schema_attr = get_schema_attribute( $server_id, $attr );
if( ! $schema_attr )
return false;
$syntax = $schema_attr->getSyntaxOID();
if( isset( $binary_attributes_with_options[ $syntax ] ) )
return true;
return false;
}
?>

View File

@@ -1,174 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/add_attr_form.php,v 1.9 2004/09/15 12:31:52 uugdave Exp $
/*
* add_attr_form.php
* Displays a form for adding an attribute/value to an LDAP entry.
*
* Variables that come in as GET vars:
* - dn (rawurlencoded)
* - server_id
*/
require './common.php';
$dn = $_GET['dn'];
$encoded_dn = rawurlencode( $dn );
$server_id = $_GET['server_id'];
$rdn = get_rdn( $dn );
$server_name = $servers[$server_id]['name'];
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$friendly_attrs = process_friendly_attr_table();
include './header.php'; ?>
<body>
<h3 class="title"><?php echo sprintf( $lang['add_new_attribute'], htmlspecialchars( $rdn ) ); ?></b></h3>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $server_name; ?></b> &nbsp;&nbsp;&nbsp; <?php echo $lang['distinguished_name']; ?>: <b><?php echo htmlspecialchars( ( $dn ) ); ?></b></h3>
<?php
$attrs = get_object_attrs( $server_id, $dn );
$oclasses = get_object_attr( $server_id, $dn, 'objectClass' );
if( ! is_array( $oclasses ) )
$oclasses = array( $oclasses );
$avail_attrs = array();
$schema_oclasses = get_schema_objectclasses( $server_id, $dn );
foreach( $oclasses as $oclass ) {
$schema_oclass = get_schema_objectclass( $server_id, $oclass, $dn );
if( $schema_oclass && 0 == strcasecmp( 'objectclass', get_class( $schema_oclass ) ) )
$avail_attrs = array_merge( $schema_oclass->getMustAttrNames( $schema_oclasses ),
$schema_oclass->getMayAttrNames( $schema_oclasses ),
$avail_attrs );
}
$avail_attrs = array_unique( $avail_attrs );
$avail_attrs = array_filter( $avail_attrs, "not_an_attr" );
sort( $avail_attrs );
$avail_binary_attrs = array();
foreach( $avail_attrs as $i => $attr ) {
if( is_attr_binary( $server_id, $attr ) ) {
$avail_binary_attrs[] = $attr;
unset( $avail_attrs[ $i ] );
}
}
?>
<br />
<center>
<?php echo $lang['add_new_attribute']; ?>
<?php if( is_array( $avail_attrs ) && count( $avail_attrs ) > 0 ) { ?>
<br />
<br />
<form action="add_attr.php" method="post">
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo htmlspecialchars($dn); ?>" />
<select name="attr"><?php
$attr_select_html = '';
usort($avail_attrs,"sortAttrs");
foreach( $avail_attrs as $a ) {
// is there a user-friendly translation available for this attribute?
if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) {
$attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" .
htmlspecialchars($a) . ")";
} else {
$attr_display = htmlspecialchars( $a );
}
echo $attr_display;
$attr_select_html .= "<option>$attr_display</option>\n";
echo "<option value=\"" . htmlspecialchars($a) . "\">$attr_display</option>";
} ?>
</select>
<input type="text" name="val" size="20" />
<input type="submit" name="submit" value="<?php echo $lang['add']; ?>" class="update_dn" />
</form>
<?php } else { ?>
<br />
<br />
<small>(<?php echo $lang['no_new_attrs_available']; ?>)</small>
<br />
<br />
<?php } ?>
<?php echo $lang['add_new_binary_attr']; ?>
<?php if( count( $avail_binary_attrs ) > 0 ) { ?>
<!-- Form to add a new BINARY attribute to this entry -->
<form action="add_attr.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo $dn; ?>" />
<input type="hidden" name="binary" value="true" />
<br />
<select name="attr">
<?php
$attr_select_html = '';
usort($avail_binary_attrs,"sortAttrs");
foreach( $avail_binary_attrs as $a ) {
// is there a user-friendly translation available for this attribute?
if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) {
$attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" .
htmlspecialchars($a) . ")";
} else {
$attr_display = htmlspecialchars( $a );
}
echo $attr_display;
$attr_select_html .= "<option>$attr_display</option>\n";
echo "<option value=\"" . htmlspecialchars($a) . "\">$attr_display</option>";
} ?>
</select>
<input type="file" name="val" size="20" />
<input type="submit" name="submit" value="<?php echo $lang['add']; ?>" class="update_dn" />
<?php
if( ! ini_get( 'file_uploads' ) )
echo "<br><small><b>" . $lang['warning_file_uploads_disabled'] . "</b></small><br>";
else
echo "<br><small><b>" . sprintf( $lang['max_file_size'], ini_get( 'upload_max_filesize' ) ) . "</b></small><br>";
?>
</form>
<?php } else { ?>
<br />
<br />
<small>(<?php echo $lang['no_new_binary_attrs_available']; ?>)</small>
<?php } ?>
</center>
</body>
</html>
<?php
/**
* Given an attribute $x, this returns true if it is NOT already specified
* in the current entry, returns false otherwise.
*/
function not_an_attr( $x )
{
global $attrs;
//return ! isset( $attrs[ strtolower( $x ) ] );
foreach( $attrs as $attr => $values )
if( 0 == strcasecmp( $attr, $x ) )
return false;
return true;
}
?>

View File

@@ -1,70 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/add_oclass.php,v 1.11 2004/08/15 17:39:20 uugdave Exp $
/*
* add_oclass.php
* Adds an objectClass to the specified dn.
* Variables that come in as POST vars:
*
* Note, this does not do any schema violation checking. That is
* performed in add_oclass_form.php.
*
* Vars that come in as POST:
* - dn (rawurlencoded)
* - server_id
* - new_oclass
* - new_attrs (array, if any)
*/
require './common.php';
$dn = rawurldecode( $_POST['dn'] );
$encoded_dn = rawurlencode( $dn );
$new_oclass = $_POST['new_oclass'];
$server_id = $_POST['server_id'];
$new_attrs = $_POST['new_attrs'];
if( is_attr_read_only( $server_id, 'objectClass' ) )
pla_error( "ObjectClasses are flagged as read only in the phpLDAPadmin configuration." );
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$new_entry = array();
$new_entry['objectClass'] = $new_oclass;
$new_attrs_entry = array();
$new_oclass_entry = array( 'objectClass' => $new_oclass );
if( is_array( $new_attrs ) && count( $new_attrs ) > 0 )
foreach( $new_attrs as $attr => $val ) {
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $server_id, $dn, $attr, array($val) ) ) {
$search_href='search.php?search=true&form=advanced&server_id=' . $server_id . '&filter=' . $attr . '=' . $badattr;
pla_error(sprintf( $lang['unique_attr_failed'] , $attr,$badattr,$dn,$search_href ) );
}
$new_entry[ $attr ] = $val;
}
//echo "<pre>";
//print_r( $new_entry );
//exit;
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
$add_res = @ldap_mod_add( $ds, $dn, $new_entry );
if( ! $add_res )
{
pla_error( $lang['could_not_perform_ldap_mod_add'], ldap_error( $ds ), ldap_errno( $ds ) );
}
else
{
header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=objectclass" );
}
?>

View File

@@ -1,127 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/add_oclass_form.php,v 1.15 2004/10/22 13:58:59 uugdave Exp $
/*
* add_oclass_form.php
* This page may simply add the objectClass and take you back to the edit page,
* but, in one condition it may prompt the user for input. That condition is this:
*
* If the user has requested to add an objectClass that requires a set of
* attributes with 1 or more not defined by the object. In that case, we will
* present a form for the user to add those attributes to the object.
*
* Variables that come in as POST vars:
* - dn (rawurlencoded)
* - server_id
* - new_oclass
*/
require './common.php';
$dn = rawurldecode( $_POST['dn'] );
$encoded_dn = rawurlencode( $dn );
$new_oclass = $_POST['new_oclass'];
$server_id = $_POST['server_id'];
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
/* Ensure that the object has defined all MUST attrs for this objectClass.
* If it hasn't, present a form to have the user enter values for all the
* newly required attrs. */
$entry = get_object_attrs( $server_id, $dn, true );
$current_attrs = array();
foreach( $entry as $attr => $junk )
$current_attrs[] = strtolower($attr);
// grab the required attributes for the new objectClass
$oclass = get_schema_objectclass( $server_id, $new_oclass );
if( $oclass )
$must_attrs = $oclass->getMustAttrs();
else
$must_attrs = array();
// We don't want any of the attr meta-data, just the string
//foreach( $must_attrs as $i => $attr )
//$must_attrs[$i] = $attr->getName();
// build a list of the attributes that this new objectClass requires,
// but that the object does not currently contain
$needed_attrs = array();
foreach( $must_attrs as $attr ) {
$attr = get_schema_attribute( $server_id, $attr->getName() );
//echo "<pre>"; var_dump( $attr ); echo "</pre>";
// First, check if one of this attr's aliases is already an attribute of this entry
foreach( $attr->getAliases() as $alias_attr_name )
if( in_array( strtolower( $alias_attr_name ), $current_attrs ) )
// Skip this attribute since it's already in the entry
continue;
if( in_array( strtolower($attr->getName()), $current_attrs ) )
continue;
// We made it this far, so the attribute needs to be added to this entry in order
// to add this objectClass
$needed_attrs[] = $attr;
}
if( count( $needed_attrs ) > 0 )
{
include './header.php'; ?>
<body>
<h3 class="title"><?php echo $lang['new_required_attrs']; ?></h3>
<h3 class="subtitle"><?php echo $lang['requires_to_add'] . ' ' . count($needed_attrs) .
' ' . $lang['new_attributes']; ?></h3>
<small>
<?php
echo $lang['new_required_attrs_instructions'];
echo ' ' . count( $needed_attrs ) . ' ' . $lang['new_attributes'] . ' ';
echo $lang['that_this_oclass_requires']; ?>
</small>
<br />
<br />
<form action="add_oclass.php" method="post">
<input type="hidden" name="new_oclass" value="<?php echo htmlspecialchars( $new_oclass ); ?>" />
<input type="hidden" name="dn" value="<?php echo $encoded_dn; ?>" />
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<table class="edit_dn" cellspacing="0">
<tr><th colspan="2"><?php echo $lang['new_required_attrs']; ?></th></tr>
<?php foreach( $needed_attrs as $count => $attr ) { ?>
<tr><td class="attr"><b><?php echo htmlspecialchars($attr->getName()); ?></b></td></tr>
<tr><td class="val"><input type="text" name="new_attrs[<?php echo htmlspecialchars($attr->getName()); ?>]" value="" size="40" /></tr>
<?php } ?>
</table>
<br />
<br />
<center><input type="submit" value="<?php echo $lang['add_oclass_and_attrs']; ?>" /></center>
</form>
</body>
</html>
<?php
}
else
{
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
$add_res = @ldap_mod_add( $ds, $dn, array( 'objectClass' => $new_oclass ) );
if( ! $add_res )
pla_error( "Could not perform ldap_mod_add operation.", ldap_error( $ds ), ldap_errno( $ds ) );
else
header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=objectClass" );
}
?>

View File

@@ -1,71 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/add_value.php,v 1.13 2004/08/15 17:39:20 uugdave Exp $
/*
* add_value.php
* Adds a value to an attribute for a given dn.
* Variables that come in as POST vars:
* - dn (rawurlencoded)
* - attr (rawurlencoded) the attribute to which we are adding a value
* - server_id
* - new_value (form element)
* - binary
*
* On success, redirect to the edit_dn page.
* On failure, echo an error.
*/
require './common.php';
$dn = rawurldecode( $_POST['dn'] );
$encoded_dn = rawurlencode( $dn );
$attr = $_POST['attr'];
$encoded_attr = rawurlencode( $attr );
$server_id = $_POST['server_id'];
$new_value = $_POST['new_value'];
$is_binary_val = isset( $_POST['binary'] ) ? true : false;
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( is_attr_read_only( $server_id, $attr ) )
pla_error( "The attribute '" . htmlspecialchars( $attr ) . "' is flagged as read only in the phpLDAPadmin configuration." );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
// special case for binary attributes:
// we must go read the data from the file.
if( $is_binary_val )
{
$file = $_FILES['new_value']['tmp_name'];
$f = fopen( $file, 'r' );
$binary_value = fread( $f, filesize( $file ) );
fclose( $f );
$new_value = $binary_value;
}
$new_entry = array( $attr => $new_value );
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $server_id, $dn, $attr, $new_entry ) ) {
$search_href='search.php?search=true&form=advanced&server_id=' . $server_id . '&filter=' . $attr . '=' . $badattr;
pla_error(sprintf( $lang['unique_attr_failed'] , $attr,$badattr,$dn,$search_href ) );
}
// Call the custom callback for each attribute modification
// and verify that it should be modified.
if( preAttrAdd( $server_id, $dn, $attr, $new_entry ) ) {
$add_result = @ldap_mod_add( $ds, $dn, $new_entry );
if( ! $add_result )
pla_error( $lang['could_not_perform_ldap_mod_add'], ldap_error( $ds ), ldap_errno( $ds ) );
}
header( "Location: edit.php?server_id=$server_id&dn=$encoded_dn&modified_attrs[]=$encoded_attr" );
?>

View File

@@ -1,44 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/collapse.php,v 1.11 2004/08/15 17:39:20 uugdave Exp $
/*
* collapse.php
* This script alters the session variable 'tree', collapsing it
* at the dn specified in the query string.
*
* Variables that come in as GET vars:
* - dn (rawurlencoded)
* - server_id
*
* Note: this script is equal and opposite to expand.php
*/
require './common.php';
$dn = $_GET['dn'];
$encoded_dn = rawurlencode( $dn );
$server_id = $_GET['server_id'];
check_server_id( $server_id ) or pla_error( "Bad server_id: " . htmlspecialchars( $server_id ) );
initialize_session_tree();
if( array_key_exists( $dn, $_SESSION['tree'][$server_id] ) )
unset( $_SESSION['tree'][$server_id][$dn] );
// This is for Opera. By putting "random junk" in the query string, it thinks
// that it does not have a cached version of the page, and will thus
// fetch the page rather than display the cached version
$time = gettimeofday();
$random_junk = md5( strtotime( 'now' ) . $time['usec'] );
// If cookies were disabled, build the url parameter for the session id.
// It will be append to the url to be redirect
$id_session_param="";
if(SID != ""){
$id_session_param = "&".session_name()."=".session_id();
}
header( "Location:tree.php?foo=$random_junk#{$server_id}_{$encoded_dn}$id_session_param" );
?>

View File

@@ -1,162 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/common.php,v 1.55 2004/10/14 20:32:48 uugdave Exp $
/*
* common.php
* Contains code to be executed at the top of each phpLDAPadmin page.
* include this file at the top of every PHP file.
*/
// Work-around to get PLA to work in PHP5
if( phpversion() >= "5" )
ini_set( "zend.ze1_compatibility_mode", 1 );
// Turn on all notices and warnings. This helps us write cleaner code (we hope at least)
if( phpversion() >= "5" )
// E_DEBUG is PHP5 specific and prevents warnings about using 'var' to declar class members
error_reporting( 'E_DEBUG' );
else
// For PHP4
error_reporting( E_ALL );
// For PHP5 backward/forward compatibility
if( ! defined( 'E_STRICT' ) ) {
define( 'E_STRICT', 2048 );
}
/** The minimum version of PHP required to run phpLDAPadmin. */
@define( 'REQUIRED_PHP_VERSION', '4.1.0' );
/** The default setting for $search_deref if unspecified or misconfigured by user. */
@define( 'DEFAULT_SEARCH_DEREF_SETTING', LDAP_DEREF_ALWAYS );
/** The default setting for $tree_deref if unspecified or misconfigured by user. */
@define( 'DEFAULT_TREE_DEREF_SETTING', LDAP_DEREF_NEVER );
/** The default setting for $export_deref if unspecified or misconfigured by user. */
@define( 'DEFAULT_EXPORT_DEREF_SETTING', LDAP_DEREF_NEVER );
/** The default setting for $view_deref if unspecified or misconfigured by user. */
@define( 'DEFAULT_VIEW_DEREF_SETTING', LDAP_DEREF_NEVER );
// General functions needed to proceed (pla_ldap_search(), pla_error(), get_object_attrs(), etc.)
ob_start();
if( ! file_exists( realpath( './functions.php' ) ) ) {
ob_end_clean();
die( "Fatal error: Required file 'functions.php' does not exist." );
}
if( ! is_readable( realpath( './functions.php' ) ) ) {
ob_end_clean();
die( "Cannot read the file 'functions.php' its permissions are too strict." );
}
require_once realpath( './functions.php' );
ob_end_clean();
// Our custom error handler receives all error notices that pass the error_reporting()
// level set above.
set_error_handler( 'pla_error_handler' );
// Creates the language array which will be populated with localized strings
// based on the user-configured language.
$lang = array();
// config.php might not exist (if the user hasn't configured PLA yet)
// Only include it if it does exist.
if( file_exists( realpath( './config.php' ) ) ) {
ob_start();
is_readable( realpath( './config.php' ) ) or pla_error( "Could not read config.php, its permissions are too strict." );
include realpath( './config.php' );
ob_end_clean();
}
$required_files = array(
// The base English language strings
'./lang/recoded/en.php',
// Functions for managing the session (pla_session_start(), etc.)
'./session_functions.php',
// Functions for reading the server schema (get_schema_object_classes(), etc.)
'./schema_functions.php',
// Functions that can be defined by the user (preEntryDelete(), postEntryDelete(), etc.)
'./custom_functions.php',
// Functions for hashing passwords with OpenSSL binary (only if mhash not present)
'./emuhash_functions.php' );
// Include each required file and check for sanity.
foreach( $required_files as $file_name ) {
file_exists( realpath( $file_name ) )
or pla_error( "Fatal error: Required file '$file_name' does not exist." );
is_readable( realpath( $file_name ) )
or pla_error( "Fatal error: Cannot read the file '$file_name', its permissions are too strict." );
ob_start();
require_once realpath( $file_name );
ob_end_clean();
}
if( pla_session_start() )
postSessionInit();
// Language configuration. Auto or specified?
// Shall we attempt to auto-determine the language?
if( isset( $language ) ) {
if( 0 == strcasecmp( $language, "auto" ) ) {
// Make sure their browser correctly reports language. If not, skip this.
if( isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) {
// get the languages which are spetcified in the HTTP header
$HTTP_LANGS1 = preg_split ("/[;,]+/", $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
$HTTP_LANGS2 = preg_split ("/[;,]+/", $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
foreach( $HTTP_LANGS2 as $key => $value ) {
$value=preg_split ("/[-]+/", $value );
$HTTP_LANGS2[$key]=$value[0];
}
$HTTP_LANGS = array_merge ($HTTP_LANGS1, $HTTP_LANGS2);
foreach( $HTTP_LANGS as $HTTP_LANG) {
// try to grab one after the other the language file
if( file_exists( realpath( "lang/recoded/$HTTP_LANG.php" ) ) &&
is_readable( realpath( "lang/recoded/$HTTP_LANG.php" ) ) ) {
ob_start();
include realpath( "lang/recoded/$HTTP_LANG.php" );
ob_end_clean();
break;
}
}
}
} else {
// grab the language file configured in config.php
if( $language != null ) {
if( 0 == strcmp( $language, 'english' ) )
$language = 'en';
if( file_exists( realpath( "lang/recoded/$language.php" ) ) &&
is_readable( realpath( "lang/recoded/$language.php" ) ) ) {
ob_start();
include realpath( "lang/recoded/$language.php" );
ob_end_clean();
} else {
pla_error( "Could not read language file 'lang/recoded/$language.php'. Either the file
does not exist, or its permissions do not allow phpLDAPadmin to read it." );
}
}
}
}
// If config.php doesn't create the templates array, create it here.
if( ! isset( $templates ) || ! is_array( $templates ) )
$templates = array();
// Always including the 'custom' template (the most generic and flexible)
$templates['custom'] =
array( 'desc' => 'Custom',
'icon' => 'images/object.png',
'handler' => 'custom.php' );
// Strip slashes from GET, POST, and COOKIE variables if this
// PHP install is configured to automatically addslashes()
if ( get_magic_quotes_gpc() && ( ! isset( $slashes_stripped ) || ! $slashes_stripped ) ) {
array_stripslashes($_GET);
array_stripslashes($_POST);
array_stripslashes($_COOKIE);
array_stripslashes($_FILES);
$slashes_stripped = true;
}
?>

View File

@@ -1,389 +0,0 @@
<?php
/*
* The phpLDAPadmin config file
*
* This is where you customize phpLDAPadmin. The most important
* part is immediately below: The "LDAP Servers" section.
* You must specify at least one LDAP server there. You may add
* as many as you like. You can also specify your language, and
* many other options.
*
*/
/**
* phpLDAPadmin can encrypt the content of sensitive cookies if you set this
* to a big random string.
*/
$blowfish_secret = '';
// Your LDAP servers
$i=0;
$servers = array();
$servers[$i]['name'] = 'My LDAP Server'; /* A convenient name that will appear in
the tree viewer and throughout phpLDAPadmin to
identify this LDAP server to users. */
$servers[$i]['host'] = 'ldap.example.com'; /* Examples:
'ldap.example.com',
'ldaps://ldap.example.com/',
'ldapi://%2fusr%local%2fvar%2frun%2fldapi'
(Unix socket at /usr/local/var/run/ldap)
Note: Leave 'host' blank to make phpLDAPadmin
ignore this server. */
$servers[$i]['base'] = 'dc=example,dc=com'; /* The base DN of your LDAP server. Leave this
blank to have phpLDAPadmin auto-detect it for you. */
$servers[$i]['port'] = 389; /* The port your LDAP server listens on
(no quotes). 389 is standard. */
$servers[$i]['auth_type'] = 'config'; /* Three options for auth_type:
1. 'cookie': you will login via a web form,
and a client-side cookie will store your
login dn and password.
2. 'session': same as cookie but your login dn
and password are stored on the web server in
a persistent session variable.
3. 'config': specify your login dn and password
here in this config file. No login will be
required to use phpLDAPadmin for this server.
Choose wisely to protect your authentication
information appropriately for your situation. If
you choose 'cookie', your cookie contents will be
encrypted using blowfish and the secret your specify
above as $blowfish_secret. */
$servers[$i]['login_dn'] = 'cn=Manager,dc=example,dc=com';
/* The DN of the user for phpLDAPadmin to bind with.
For anonymous binds or 'cookie' or 'session' auth_types,
leave the login_dn and login_pass blank. If you specify a
login_attr in conjunction with a cookie or session auth_type,
then you can also specify the login_dn/login_pass here for
searching the directory for users (ie, if your LDAP server
does not allow anonymous binds. */
$servers[$i]['login_pass'] = 'secret'; /* Your LDAP password. If you specified an empty login_dn above, this
MUST also be blank. */
$servers[$i]['tls'] = false; /* Use TLS (Transport Layer Security) to connect to the LDAP
server. */
$servers[$i]['low_bandwidth'] = false; /* If the link between your web server and this LDAP server is
slow, it is recommended that you set 'low_bandwidth' to true.
This will cause phpLDAPadmin to forego some "fancy" features
to conserve bandwidth. */
$servers[$i]['default_hash'] = 'crypt'; /* Default password hashing algorithm.
One of md5, ssha, sha, md5crpyt, smd5, blowfish, crypt or
leave blank for now default algorithm. */
$servers[$i]['login_attr'] = 'dn'; /* If you specified 'cookie' or 'session' as the auth_type above,
you can optionally specify here an attribute
to use when logging in. If you enter 'uid'
and login as 'dsmith', phpLDAPadmin will
search for (uid=dsmith) and log in as that user. Leave
blank or specify 'dn' to use full DN for
logging in. Note also that if your LDAP server requires
you to login to perform searches, you can enter
the DN to use when searching in 'login_dn' and
'login_pass' above. You may also specify 'string', in which case
you can provide a string to use for logging users
in. See 'login_string' directly below. */
$servers[$i]['login_string'] = 'uid=<username>,ou=People,dc=example,dc=com';
/* If you specified 'cookie' or 'session' as the auth_type above,
and you specified 'string' for 'login_attr' above, you must provide
a string here for logging users in. If, for example, I
I have a lot of user entries with DNs like
"uid=dsmith,ou=People,dc=example,dc=com", then I can specify a string
"uid=<username>,ou=People,dc=example,dc=com" and my users can login with
their user names alone, i.e., "dsmith" in this case. */
$servers[$i]['login_class'] = ''; /* If 'login_attr' is used above such that phpLDAPadmin will
search for your DN at login, you may restrict the search to
a specific objectClass. E.g., set this to 'posixAccount' or
'inetOrgPerson', depending upon your setup. */
$servers[$i]['read_only'] = false; /* Specify true If you want phpLDAPadmin to not
display or permit any modification to the
LDAP server. */
$servers[$i]['show_create'] = true; /* Specify false if you do not want phpLDAPadmin to
draw the 'Create new' links in the tree viewer. */
$servers[$i]['enable_auto_uid_numbers'] = false;
/* This feature allows phpLDAPadmin to
automatically determine the next
available uidNumber for a new entry. */
$servers[$i]['auto_uid_number_mechanism'] = 'search';
/* The mechanism to use when finding the next available uidNumber.
Two possible values: 'uidpool' or 'search'. The 'uidpool'
mechanism uses an existing uidPool entry in your LDAP server
to blindly lookup the next available uidNumber. The 'search'
mechanism searches for entries with a uidNumber value and finds
the first available uidNumber (slower). */
$servers[$i]['auto_uid_number_search_base'] = 'ou=People,dc=example,dc=com';
/* The DN of the search base when the 'search'
mechanism is used above. */
$servers[$i]['auto_uid_number_min'] = 1000;
/* The minimum number to use when searching for the next
available UID number (only when 'search' is used for
auto_uid_number_mechanism' */
$servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com';
/* The DN of the uidPool entry when 'uidpool'
mechanism is used above. */
$servers[$i]['auto_uid_number_search_dn'] = '';
/* If you set this, then phpldapadmin will bind to LDAP with this user
ID when searching for the uidnumber. The idea is, this user id would
have full (readonly) access to uidnumber in your ldap directory (the
logged in user may not), so that you can be guaranteed to get a unique
uidnumber for your directory. */
$servers[$i]['auto_uid_number_search_dn_pass'] = '';
/* The password for the dn above. */
$servers[$i]['disable_anon_bind'] = false;
/* Disable the anonymous login. */
$servers[$i]['custom_pages_prefix'] = 'custom_';
/* Use customized page with prefix when available. */
$servers[$i]['unique_attrs_dn'] = '';
/* If you set this, then phpldapadmin will bind to LDAP with this user
when testing for unique attributes (as set in unique_attrs array). If you
want to enforce unique attributes, than this id should have full (readonly)
access to the attributes in question (the logged in user may not have
enough access) */
$servers[$i]['unique_attrs_dn_pass'] = '';
/* The password for the dn above */
// If you want to configure additional LDAP servers, do so below.
$i++;
$servers[$i]['name'] = 'Another server';
$servers[$i]['host'] = '';
$servers[$i]['base'] = 'dc=example,dc=com';
$servers[$i]['port'] = 389;
$servers[$i]['auth_type'] = 'config';
$servers[$i]['login_dn'] = '';
$servers[$i]['login_pass'] = '';
$servers[$i]['tls'] = false;
$servers[$i]['low_bandwidth'] = false;
$servers[$i]['default_hash'] = 'crypt';
$servers[$i]['login_attr'] = 'dn';
$servers[$i]['login_class'] = '';
$servers[$i]['read_only'] = false;
$servers[$i]['show_create'] = true;
$servers[$i]['enable_auto_uid_numbers'] = false;
$servers[$i]['auto_uid_number_mechanism'] = 'search';
$servers[$i]['auto_uid_number_search_base'] = 'ou=People,dc=example,dc=com';
$servers[$i]['auto_uid_number_min'] = 1000;
$servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com';
// If you want to configure more LDAP servers, copy and paste the above (including the "$i++;")
// The temporary storage directory where we will put jpegPhoto data
// This directory must be readable and writable by your web server
$jpeg_temp_dir = "/tmp"; // Example for Unix systems
//$jpeg_temp_dir = "c:\\temp"; // Example for Windows systems
/** **/
/** Appearance and Behavior **/
/** **/
// Set this to true if you want to hide the Request New Feature and Report bugs.
$hide_configuration_management = false;
// A format string used to display enties in the tree viewer (left-hand side)
// You can use special tokens to draw the entries as you wish. You can even mix in HTML to format the string
// Here are all the tokens you can use:
// %rdn - draw the RDN of the entry (ie, "cn=Dave")
// %dn - draw the DN of the entry (ie, "cn=Dave,ou=People,dc=example,dc=com"
// %rdnValue - draw the value of the RDN (ie, instead of "cn=Dave", just draw "Dave")
// %[attrname]- draw the value (or values) of the specified attribute.
// examle: %gidNumber
$tree_display_format = '%rdn';
//
// Examples:
//
// To draw the gidNumber and uidNumber to the right of the RDN in a small, gray font:
//$tree_display_format = '%rdn <small style="color:gray">( %gidNumber / %uidNumber )</span>';
// To draw the full DN of each entry:
//$tree_display_format = '%dn';
// To draw the objectClasses to the right in parenthesis:
//$tree_display_format = '%rdn <small style="color: gray">( %objectClass )</small>';
// To draw the user-friendly RDN value (ie, instead of "cn=Dave", just draw "Dave"):
//$tree_display_format = '%rdnValue';
// Aliases and Referrrals
//
// Similar to ldapsearh's -a option, the following options allow you to configure
// how phpLDAPadmin will treat aliases and referrals in the LDAP tree.
// For the following four settings, avaialable options include:
//
// LDAP_DEREF_NEVER - aliases are never dereferenced (eg, the contents of
// the alias itself are shown and not the referenced entry).
// LDAP_DEREF_SEARCHING - aliases should be dereferenced during the search but
// not when locating the base object of the search.
// LDAP_DEREF_FINDING - aliases should be dereferenced when locating the base
// object but not during the search.
// LDAP_DEREF_ALWAYS - aliases should be dereferenced always (eg, the contents
// of the referenced entry is shown and not the aliasing entry)
// How to handle references and aliases in the search form. See above for options.
$search_deref = LDAP_DEREF_ALWAYS;
// How to handle references and aliases in the tree viewer. See above for options.
$tree_deref = LDAP_DEREF_NEVER;
// How to handle references and aliases for exports. See above for options.
$export_deref = LDAP_DEREF_NEVER;
// How to handle references and aliases when viewing entries. See above for options.
$view_deref = LDAP_DEREF_NEVER;
// The language setting. If you set this to 'auto', phpLDAPadmin will
// attempt to determine your language automatically. Otherwise, available
// lanaguages are: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', and 'ru'
// Localization is not complete yet, but most strings have been translated.
// Please help by writing language files. See lang/en.php for an example.
$language = 'auto';
// Set to true if you want to draw a checkbox next to each entry in the tree viewer
// to be able to delete multiple entries at once
$enable_mass_delete = false;
// Set to true if you want LDAP data to be displayed read-only (without input fields)
// when a user logs in to a server anonymously
$anonymous_bind_implies_read_only = true;
// Set to true if you want phpLDAPadmin to redirect anonymous
// users to a search form with no tree viewer on the left after
// logging in.
$anonymous_bind_redirect_no_tree = false;
// If you used auth_type 'form' in the servers list, you can adjust how long the cookie will last
// (default is 0 seconds, which expires when you close the browser)
$cookie_time = 0; // seconds
// How many pixels wide do you want your left frame view (for the tree browser)
$tree_width = 320; // pixels
// How long to keep jpegPhoto temporary files in the jpeg_temp_dir directory (in seconds)
$jpeg_tmp_keep_time = 120; // seconds
// Would you like to see helpful hint text occacsionally?
$show_hints = true; // set to false to disable hints
// When using the search page, limit result size to this many entries
$search_result_size_limit = 50;
// By default, when searching you may display a list or a table of results.
// Set this to 'table' to see table formatted results.
// Set this to 'list' to see "Google" style formatted search results.
$default_search_display = 'list';
// If true, display all password hash values as "******". Note that clear-text
// passwords will always be displayed as "******", regardless of this setting.
$obfuscate_password_display = false;
/** **/
/** Simple Search Form Config **/
/** **/
// Which attributes to include in the drop-down menu of the simple search form (comma-separated)
// Change this to suit your needs for convenient searching. Be sure to change the corresponding
// list below ($search_attributes_display)
$search_attributes = "uid, cn, gidNumber, objectClass, telephoneNumber, mail, street";
// This list corresponds to the list directly above. If you want to present more readable names
// for your search attributes, do so here. Both lists must have the same number of entries.
$search_attributes_display = "User Name, Common Name, Group ID, Object Class, Phone Number, Email, Address";
// The list of attributes to display in each search result entry.
// Note that you can add * to the list to display all attributes
$search_result_attributes = "cn, sn, uid, postalAddress, telephoneNumber";
// You can re-arrange the order of the search criteria on the simple search form by modifying this array
// You cannot however change the names of the criteria. Criteria names will be translated at run-time.
$search_criteria_options = array( "equals", "starts with", "contains", "ends with", "sounds like" );
// If you want certain attributes to be editable as multi-line, include them in this list
// A multi-line textarea will be drawn instead of a single-line text field
$multi_line_attributes = array( "postalAddress", "homePostalAddress", "personalSignature" );
// A list of syntax OIDs which support multi-line attribute values:
$multi_line_syntax_oids = array(
// octet string syntax OID:
"1.3.6.1.4.1.1466.115.121.1.40",
// postal address syntax OID:
"1.3.6.1.4.1.1466.115.121.1.41" );
/** **/
/** User-friendly attribute translation **/
/** **/
$friendly_attrs = array();
// Use this array to map attribute names to user friendly names. For example, if you
// don't want to see "facsimileTelephoneNumber" but rather "Fax".
$friendly_attrs[ 'facsimileTelephoneNumber' ] = 'Fax';
$friendly_attrs[ 'telephoneNumber' ] = 'Phone';
/** **/
/** Hidden attributes **/
/** **/
// You may want to hide certain attributes from being displayed in the editor screen
// Do this by adding the desired attributes to this list (and uncomment it). This
// only affects the editor screen. Attributes will still be visible in the schema
// browser and elsewhere. An example is provided below:
// NOTE: The user must be able to read the hidden_except_dn entry to be excluded.
//$hidden_attrs = array( 'jpegPhoto', 'objectClass' );
//$hidden_except_dn = "cn=PLA UnHide,ou=Groups,c=AU";
// Hidden attributes in read-only mode. If undefined, it will be equal to $hidden_attrs.
//$hidden_attrs_ro = array( 'objectClass','shadowWarning', 'shadowLastChange', 'shadowMax',
// 'shadowFlag', 'shadowInactive', 'shadowMin', 'shadowExpire' );
/** **/
/** Read-only attributes **/
/** **/
// You may want to phpLDAPadmin to display certain attributes as read only, meaning
// that users will not be presented a form for modifying those attributes, and they
// will not be allowed to be modified on the "back-end" either. You may configure
// this list here:
// NOTE: The user must be able to read the read_only_except_dn entry to be excluded.
//$read_only_attrs = array( 'objectClass' );
//$read_only_except_dn = "cn=PLA ReadWrite,ou=Groups,c=AU";
// An example of how to specify multiple read-only attributes:
// $read_only_attrs = array( 'jpegPhoto', 'objectClass', 'someAttribute' );
/** **/
/** Unique attributes **/
/** **/
// You may want phpLDAPadmin to enforce some attributes to have unique values (ie:
// not belong to other entries in your tree. This (together with "unique_attrs_dn"
// and "unique_attrs_dn_pass" option will not let updates to occur with other attributes
// have the same value.
// NOTE: Currently the unique_attrs is NOT enforced when copying a dn. (Need to present a user with
// the option of changing the unique attributes.
//$unique_attrs = array('uid','uidNumber','mail');
/** **/
/** Predefined Queries (canned views) **/
/** **/
// To make searching easier, you may setup predefined queries below (activate the lines by removing "//")
$q=0;
$queries = array();
$queries[$q]['name'] = 'Samba Users'; /* The name that will appear in the simple search form */
$queries[$q]['server'] = '0'; /* The ldap server to query, must be defined in the $servers list above */
$queries[$q]['base'] = 'dc=example,dc=com'; /* The base to search on */
$queries[$q]['scope'] = 'sub'; /* The search scope (sub, base, one) */
$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))';
/* The LDAP filter to use */
$queries[$q]['attributes'] = 'uid, smbHome, uidNumber';
/* The attributes to return */
// Add more pre-defined queries by copying the text below
$q++;
$queries[$q]['name'] = 'Samba Computers';
$queries[$q]['server'] = '0';
$queries[$q]['base'] = 'dc=example,dc=com';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))';
$queries[$q]['attributes'] = 'uid, homeDirectory';
?>

354
config/config.php.example Normal file
View File

@@ -0,0 +1,354 @@
<?php
/**
* The phpLDAPadmin config file
*
* This is where you can customise some of the phpLDAPadmin defaults
* that are defined in config_default.php.
*
* To override a default, use the $config->custom variable to do so.
* For example, the default for defining the language in config_default.php
*
* $this->default->appearance['lang'] = array(
* 'desc'=>'Language',
* 'default'=>'auto');
*
* to override this, use $config->custom->appearance['lang'] = 'en';
*
* This file is also used to configure your LDAP server connections.
*
* You must specify at least one LDAP server there. You may add
* as many as you like. You can also specify your language, and
* many other options.
*/
/** **/
/** Miscellaneous Configuration overrides **/
/** **/
/* If you are asked to put pla in debug mode, this is how you do it: */
// $config->custom->debug['level'] = 2;
// $config->custom->debug['syslog'] = true;
/* phpLDAPadmin can encrypt the content of sensitive cookies if you set this
to a big random string. */
$config->custom->session['blowfish'] = '';
/* The language setting. If you set this to 'auto', phpLDAPadmin will
attempt to determine your language automatically. Otherwise, available
lanaguages are: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', and 'ru'
Localization is not complete yet, but most strings have been translated.
Please help by writing language files. See lang/en.php for an example. */
// $config->custom->appearance['language'] = 'auto';
/* The temporary storage directory where we will put jpegPhoto data
This directory must be readable and writable by your web server. */
// $config->custom->jpeg['tmpdir'] = "c:\\temp"; // Example for Windows systems
$config->custom->jpeg['tmpdir'] = "/tmp"; // Example for Unix systems
/** **/
/** Your LDAP servers **/
/** **/
$i=0;
$ldapservers = new LDAPServers;
/* A convenient name that will appear in the tree viewer and throughout phpLDAPadmin to
identify this LDAP server to users. */
$ldapservers->SetValue($i,'server','name','My LDAP Server');
/* Examples:
'ldap.example.com',
'ldaps://ldap.example.com/',
'ldapi://%2fusr%local%2fvar%2frun%2fldapi' (Unix socket at /usr/local/var/run/ldap) */
// $ldapservers->SetValue($i,'server','host','127.0.0.1');
/* The port your LDAP server listens on (no quotes). 389 is standard. */
// $ldapservers->SetValue($i,'server','port','389');
/* Array of base DNs of your LDAP server. Leave this blank to have phpLDAPadmin auto-detect it for you. */
// $ldapservers->SetValue($i,'server','base',array(''));
/* Three options for auth_type:
1. 'cookie': you will login via a web form, and a client-side cookie will store your
login dn and password.
2. 'session': same as cookie but your login dn and password are stored on the web server in
a persistent session variable.
3. 'config': specify your login dn and password here in this config file. No login will be
required to use phpLDAPadmin for this server.
Choose wisely to protect your authentication information appropriately for your situation. If
you choose 'cookie', your cookie contents will be encrypted using blowfish and the secret your specify
above as session['blowfish']. */
// $ldapservers->SetValue($i,'server','auth_type','cookie');
/* The DN of the user for phpLDAPadmin to bind with. For anonymous binds or 'cookie' or 'session' auth_types,
leave the login_dn and login_pass blank. If you specify a login_attr in conjunction with a cookie or
session auth_type, then you can also specify the login_dn/login_pass here for searching the directory for
users (ie, if your LDAP server does not allow anonymous binds. */
// $ldapservers->SetValue($i,'login','dn','cn=Manager,dc=example,dc=com');
/* Your LDAP password. If you specified an empty login_dn above, this MUST also be blank. */
// $ldapservers->SetValue($i,'login','pass','secret');
/* Use TLS (Transport Layer Security) to connect to the LDAP server. */
// $ldapservers->SetValue($i,'server','tls',false);
/* If the link between your web server and this LDAP server is slow, it is recommended that you set
'low_bandwidth' to true. This will cause phpLDAPadmin to forego some "fancy" features to conserve bandwidth. */
// $ldapservers->SetValue($i,'server','low_bandwidth',false);
/* Default password hashing algorithm. One of md5, ssha, sha, md5crpyt, smd5, blowfish, crypt or
leave blank for now default algorithm. */
// $ldapservers->SetValue($i,'appearance','password_hash','md5');
/* If you specified 'cookie' or 'session' as the auth_type above, you can optionally specify here an attribute
to use when logging in. If you enter 'uid' and login as 'dsmith', phpLDAPadmin will search for (uid=dsmith)
and log in as that user. Leave blank or specify 'dn' to use full DN for logging in. Note also that if your
LDAP server requires you to login to perform searches, you can enter the DN to use when searching in 'login_dn'
and 'login_pass' above. You may also specify 'string', in which case you can provide a string to use for
logging users in. See 'login_string' directly below. */
// $ldapservers->SetValue($i,'login','attr','uid');
/* If you specified 'cookie' or 'session' as the auth_type above, and you specified 'string' for 'login_attr'
above, you must provide a string here for logging users in. If, for example, I have a lot of user entries with
DNs like "uid=dsmith,ou=People,dc=example,dc=com", then I can specify a string
"uid=<username>,ou=People,dc=example,dc=com" and my users can login with their user names alone, ie: "dsmith"
in this case. */
// $ldapservers->SetValue($i,'login','string','uid=<username>,ou=People,dc=example,dc=com');
/* If 'login_attr' is used above such that phpLDAPadmin will search for your DN at login, you may restrict the
search to a specific objectClass. E.g., set this to 'posixAccount' or 'inetOrgPerson', depending upon your setup. */
// $ldapservers->SetValue($i,'login','class','');
/* Specify true If you want phpLDAPadmin to not display or permit any modification to the LDAP server. */
// $ldapservers->SetValue($i,'server','read_only',false);
/* Specify false if you do not want phpLDAPadmin to draw the 'Create new' links in the tree viewer. */
// $ldapservers->SetValue($i,'appearance','show_create',true);
/* This feature allows phpLDAPadmin to automatically determine the next available uidNumber for a new entry. */
// $ldapservers->SetValue($i,'auto_number','enable',true);
/* The mechanism to use when finding the next available uidNumber. Two possible values: 'uidpool' or 'search'.
The 'uidpool' mechanism uses an existing uidPool entry in your LDAP server to blindly lookup the next available
uidNumber. The 'search' mechanism searches for entries with a uidNumber value and finds the first available
uidNumber (slower). */
// $ldapservers->SetValue($i,'auto_number','mechanism','search');
/* The DN of the search base when the 'search' mechanism is used above. */
// $ldapservers->SetValue($i,'auto_number','search_base','ou=People,dc=example,dc=com');
/* The minimum number to use when searching for the next available UID number (only when 'search' is used for
auto_uid_number_mechanism' */
// $ldapservers->SetValue($i,'auto_number','min','1000');
/* The DN of the uidPool entry when 'uidpool' mechanism is used above. */
// $servers[$i]['auto_uid_number_uid_pool_dn'] = 'cn=uidPool,dc=example,dc=com';
/* If you set this, then phpldapadmin will bind to LDAP with this user ID when searching for the uidnumber. The
idea is, this user id would have full (readonly) access to uidnumber in your ldap directory (the logged in user
may not), so that you can be guaranteed to get a unique uidnumber for your directory. */
// $ldapservers->SetValue($i,'auto_number','dn','');
/* The password for the dn above. */
// $ldapservers->SetValue($i,'auto_number','pass','');
/* Disable the anonymous login. */
// $ldapservers->SetValue($i,'login','anon_bind',true);
/* Use customized page with prefix when available. */
// $ldapservers->SetValue($i,'custom','pages_prefix','custom_');
/* If you set this, then phpldapadmin will bind to LDAP with this user when testing for unique attributes (as set
in unique_attrs array). If you want to enforce unique attributes, than this id should have full (readonly) access
to the attributes in question (the logged in user may not have enough access) */
// $ldapservers->SetValue($i,'unique_attrs','dn','');
/* The password for the dn above */
// $ldapservers->SetValue($i,'unique_attrs','pass','');
/* If you set this, then only these DNs are allowed to log in. This array can contain individual users, groups or
ldap search filter(s). Keep in mind that the user has not authenticated yet, so this will be an anonymous search
to the LDAP server, so make your ACLs allow these searches to return results! */
// $ldapservers->SetValue($i,'login','allowed_dns',array(
// 'uid=stran,ou=People,dc=example,dc=com',
// '(&(gidNumber=811)(objectClass=groupOfNames))',
// '(|(uidNumber=200)(uidNumber=201))',
// 'cn=callcenter,ou=Group,dc=example,dc=com'));
/* Set this if you dont want this LDAP server to show in the tree */
// $ldapservers->SetValue($i,'appearance','visible',true);
/* This is the time out value in minutes for the server. After as many minutes of inactivity you will be
automatically logged out. If not set, the default value will be ( session_cache_expire()-1 ) */
// $ldapservers->SetValue($i,'login','timeout',30);
/* Set this if you want phpldapadmin to perform rename operation on entry which has children. Certain servers are known
to allow it, certain are not */
// $ldapservers->SetValue($i,'server','branch_rename',false);
/* If you want to configure additional LDAP servers, do so below. */
$i++;
$ldapservers->SetValue($i,'server','name','LDAP Server');
$ldapservers->SetValue($i,'server','host','127.0.0.1');
$ldapservers->SetValue($i,'server','port','389');
$ldapservers->SetValue($i,'server','base',array(''));
$ldapservers->SetValue($i,'server','auth_type','cookie');
$ldapservers->SetValue($i,'login','dn','');
$ldapservers->SetValue($i,'login','pass','');
$ldapservers->SetValue($i,'server','tls',false);
$ldapservers->SetValue($i,'server','low_bandwidth',false);
$ldapservers->SetValue($i,'appearance','password_hash','md5');
$ldapservers->SetValue($i,'login','attr','uid');
$ldapservers->SetValue($i,'login','string','');
$ldapservers->SetValue($i,'login','class','');
$ldapservers->SetValue($i,'server','read_only',false);
$ldapservers->SetValue($i,'appearance','show_create',true);
$ldapservers->SetValue($i,'auto_number','enable',true);
$ldapservers->SetValue($i,'auto_number','mechanism','search');
$ldapservers->SetValue($i,'auto_number','search_base','');
$ldapservers->SetValue($i,'auto_number','min','1000');
$ldapservers->SetValue($i,'auto_number','dn','');
$ldapservers->SetValue($i,'auto_number','pass','');
$ldapservers->SetValue($i,'login','anon_bind',true);
$ldapservers->SetValue($i,'custom','pages_prefix','custom_');
$ldapservers->SetValue($i,'unique_attrs','dn','');
$ldapservers->SetValue($i,'unique_attrs','pass','');
$ldapservers->SetValue($i,'appearance','visible',false);
/* If you want to configure more LDAP servers, copy and paste the above (including the "$i++;")
Dont forget to change 'visible' to true! */
/** **/
/** User-friendly attribute translation **/
/** **/
/* Use this array to map attribute names to user friendly names. For example, if you
don't want to see "facsimileTelephoneNumber" but rather "Fax". */
$friendly_attrs = array();
$friendly_attrs[ 'facsimileTelephoneNumber' ] = 'Fax';
$friendly_attrs[ 'telephoneNumber' ] = 'Phone';
/** **/
/** Support for attrs display order **/
/** **/
/* Use this array if you want to have your attributes displayed in a specific order.
You can use default attribute names or their fridenly names.
For example, "sn" will be displayed right after "givenName". All the other attributes
that are not specified in this array will be displayed after in alphabetical order. */
// $attrs_display_order = array(
// "givenName",
// "sn",
// "cn",
// "displayName",
// "uid",
// "uidNumber",
// "gidNumber",
// "homeDirectory",
// "mail",
// "userPassword"
// );
/** **/
/** Hidden attributes **/
/** **/
/* You may want to hide certain attributes from being displayed in the editor screen
Do this by adding the desired attributes to this list (and uncomment it). This
only affects the editor screen. Attributes will still be visible in the schema
browser and elsewhere. An example is provided below:
NOTE: The user must be able to read the hidden_except_dn entry to be excluded. */
//$hidden_attrs = array( 'jpegPhoto', 'objectClass' );
//$hidden_except_dn = "cn=PLA UnHide,ou=Groups,c=AU";
/* Hidden attributes in read-only mode. If undefined, it will be equal to $hidden_attrs. */
// $hidden_attrs_ro = array( 'objectClass','shadowWarning', 'shadowLastChange', 'shadowMax',
// 'shadowFlag', 'shadowInactive', 'shadowMin', 'shadowExpire');
/** **/
/** Read-only attributes **/
/** **/
/* You may want to phpLDAPadmin to display certain attributes as read only, meaning
that users will not be presented a form for modifying those attributes, and they
will not be allowed to be modified on the "back-end" either. You may configure
this list here:
NOTE: The user must be able to read the read_only_except_dn entry to be excluded. */
//$read_only_attrs = array( 'objectClass' );
//$read_only_except_dn = "cn=PLA ReadWrite,ou=Groups,c=AU";
/* An example of how to specify multiple read-only attributes: */
// $read_only_attrs = array( 'jpegPhoto', 'objectClass', 'someAttribute' );
/** **/
/** Unique attributes **/
/** **/
/* You may want phpLDAPadmin to enforce some attributes to have unique values (ie:
not belong to other entries in your tree. This (together with "unique_attrs_dn"
and "unique_attrs_dn_pass" option will not let updates to occur with other attributes
have the same value.
NOTE: Currently the unique_attrs is NOT enforced when copying a dn. (Need to present a user with
the option of changing the unique attributes. */
//$unique_attrs = array('uid','uidNumber','mail');
/** **/
/** Predefined Queries (canned views) **/
/** **/
/* To make searching easier, you may setup predefined queries below: */
$q=0;
$queries = array();
/* The name that will appear in the simple search form */
$queries[$q]['name'] = 'User List';
/* The base to search on */
$queries[$q]['base'] = 'dc=example,dc=com';
/* The search scope (sub, base, one) */
$queries[$q]['scope'] = 'sub';
/* The LDAP filter to use */
$queries[$q]['filter'] = '(&(objectClass=posixAccount)(uid=*))';
/* The attributes to return */
$queries[$q]['attributes'] = 'cn, uid, homeDirectory';
/* If you want to configure more pre-defined queries, copy and paste the above (including the "$q++;") */
$q++;
$queries[$q]['name'] = 'Samba Users';
$queries[$q]['base'] = 'dc=example,dc=com';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))';
$queries[$q]['attributes'] = 'uid, smbHome, uidNumber';
$q++;
$queries[$q]['name'] = 'Samba Computers';
$queries[$q]['base'] = 'dc=example,dc=com';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))';
$queries[$q]['attributes'] = 'uid, homeDirectory';
/** **/
/** Date type attributes **/
/** **/
/* If you wish to use the jscalendar popup to select a date graphically,
define this array of date type attributes.
Modify the file htdocs/js/date_selector.js to set up the calendar format.
The default format is:
ifFormat : '%m/%e/%Y', // format of the input field
showsTime : false, // will display a time selector
singleClick : false, // double-click mode
align : 'BR', // alignement
step : 0 // show all years in drop-down boxes
*/
?>

186
copy.php
View File

@@ -1,186 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/copy.php,v 1.25 2004/08/15 17:35:25 uugdave Exp $
/*
* copy.php
* Copies a given object to create a new one.
*
* Vars that come in as POST vars
* - source_dn (rawurlencoded)
* - new_dn (form element)
* - server_id
*/
require realpath( 'common.php' );
$source_dn = $_POST['old_dn'];
$dest_dn = $_POST['new_dn'];
$encoded_dn = rawurlencode( $source_dn );
$source_server_id = $_POST['server_id'];
$dest_server_id = $_POST['dest_server_id'];
$do_recursive = ( isset( $_POST['recursive'] ) && $_POST['recursive'] == 'on' ) ? true : false;
if( is_server_read_only( $dest_server_id ) )
pla_error( $lang['copy_server_read_only'] );
check_server_id( $source_server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $source_server_id ) or pla_error( $lang['not_enough_login_info'] );
check_server_id( $dest_server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $dest_server_id ) or pla_error( $lang['not_enough_login_info'] );
include './header.php';
/* Error checking */
if( 0 == strlen( trim( $dest_dn ) ) )
pla_error( $lang['copy_dest_dn_blank'] );
if( pla_compare_dns( $source_dn,$dest_dn ) == 0 && $source_server_id == $dest_server_id )
pla_error( $lang['copy_source_dest_dn_same'] );
if( dn_exists( $dest_server_id, $dest_dn ) )
pla_error( sprintf( $lang['copy_dest_already_exists'], pretty_print_dn( $dest_dn ) ) );
if( ! dn_exists( $dest_server_id, get_container( $dest_dn ) ) )
pla_error( sprintf( $lang['copy_dest_container_does_not_exist'], pretty_print_dn( get_container($dest_dn) ) ) );
if( $do_recursive ) {
$filter = isset( $_POST['filter'] ) ? $_POST['filter'] : '(objectClass=*)';
// build a tree similar to that of the tree browser to give to r_copy_dn
$snapshot_tree = array();
echo "<body>\n";
echo "<h3 class=\"title\">". $lang['copy_copying'] . htmlspecialchars( $source_dn ) . "</h3>\n";
echo "<h3 class=\"subtitle\">" . $lang['copy_recursive_copy_progress'] ."</h3>\n";
echo "<br /><br />";
echo "<small>\n";
echo $lang['copy_building_snapshot'];
flush();
build_tree( $source_server_id, $source_dn, $snapshot_tree, $filter );
echo " <span style=\"color:green\">" . $lang['success'] . "</span><br />\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 "</small>\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( array_key_exists( 'tree', $_SESSION ) )
{
// do we not have a tree and tree icons yet? Build a new ones.
initialize_session_tree();
$tree = $_SESSION['tree'];
$tree_icons = $_SESSION['tree_icons'];
if( isset( $tree[$dest_server_id][$container] ) )
{
$tree[$dest_server_id][$container][] = $dest_dn;
sort( $tree[ $dest_server_id ][ $container ] );
$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();
}
}
?>
<!-- refresh the tree view (with the new DN renamed)
and redirect to the edit_dn page -->
<script language="javascript">
parent.left_frame.location.reload();
</script>
<br />
<center>
<?php echo $lang['copy_successful_like_to']. "<a href=\"$edit_url\">" . $lang['copy_view_new_entry'] ."</a>"?>
</center>
<br />
<br />
<br />
<br />
</body>
</html>
<?php
}
else
{
exit;
}
function r_copy_dn( $source_server_id, $dest_server_id, $tree, $root_dn, $dest_dn )
{
global $lang;
echo "<nobr>". $lang['copy_copying'] . htmlspecialchars( $root_dn ) . "...";
flush();
$copy_result = copy_dn( $source_server_id, $root_dn, $dest_server_id, $dest_dn );
if( ! $copy_result ) {
return false;
}
echo "<span style=\"color:green\">".$lang['success']."</span></nobr><br />\n";
flush();
$children = isset( $tree[ $root_dn ] ) ? $tree[ $root_dn ] : null;
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, $lang;
$ds = pla_ldap_connect( $dest_server_id );
pla_ldap_connection_is_error( $ds );
$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'] );
// Check the user-defined custom call back first
if( true === preEntryCreate( $dest_server_id, $dest_dn, $new_entry ) ) {
$add_result = @ldap_add( $ds, $dest_dn, $new_entry );
if( ! $add_result ) {
postEntryCreate( $dest_server_id, $dest_dn, $new_entry );
echo "</small><br /><br />";
pla_error( $lang['copy_failed'] . $dest_dn, ldap_error( $ds ), ldap_errno( $ds ) );
}
return $add_result;
} else {
return false;
}
}
function build_tree( $source_server_id, $root_dn, &$tree, $filter='(objectClass=*)' )
{
$children = get_container_contents( $source_server_id, $root_dn, 0, $filter );
if( is_array( $children ) && count( $children ) > 0 )
{
$tree[ $root_dn ] = $children;
foreach( $children as $child_dn )
build_tree( $source_server_id, $child_dn, $tree, $filter );
}
}

View File

@@ -1,148 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/create.php,v 1.29 2004/10/28 13:37:39 uugdave Exp $
/*
* create.php
* Creates a new object.
*
* Variables that come in as POST vars:
* - new_dn
* - attrs (an array of attributes)
* - vals (an array of values for the above attrs)
* - required_attrs (an array with indices being the attributes,
* and the values being their respective values)
* - object_classes (rawurlencoded, and serialized array of objectClasses)
* - server_id
*/
require realpath( './common.php' );
$new_dn = isset( $_POST['new_dn'] ) ? $_POST['new_dn'] : null;
$encoded_dn = rawurlencode( $new_dn );
$server_id = $_POST['server_id'];
$vals = isset( $_POST['vals'] ) ? $_POST['vals'] : array();
$attrs = isset( $_POST['attrs'] ) ? $_POST['attrs'] : array();
$required_attrs = isset( $_POST['required_attrs'] ) ? $_POST['required_attrs'] : false;
$object_classes = unserialize( rawurldecode( $_POST['object_classes'] ) );
$redirect = isset( $_POST['redirect'] ) ? $_POST['redirect'] : false;
$container = get_container( $new_dn );
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
// build the new entry
$new_entry = array();
if( isset( $required_attrs ) && is_array( $required_attrs ) ) {
foreach( $required_attrs as $attr => $val ) {
if( $val == '' )
pla_error( sprintf( $lang['create_required_attribute'], htmlspecialchars( $attr ) ) );
$new_entry[ $attr ][] = $val;
}
}
if( isset( $attrs ) && is_array( $attrs ) ) {
foreach( $attrs as $i => $attr ) {
if( is_attr_binary( $server_id, $attr ) ) {
if( isset( $_FILES['vals']['name'][$i] ) && $_FILES['vals']['name'][$i] != '' ) {
// read in the data from the file
$file = $_FILES['vals']['tmp_name'][$i];
$f = fopen( $file, 'r' );
$binary_data = fread( $f, filesize( $file ) );
fclose( $f );
$val = $binary_data;
$new_entry[ $attr ][] = $val;
}
} else {
$val = isset( $vals[$i] ) ? $vals[$i] : '';
if( '' !== trim($val) )
$new_entry[ $attr ][] = $val;
}
}
}
$new_entry['objectClass'] = $object_classes;
if( ! in_array( 'top', $new_entry['objectClass'] ) )
$new_entry['objectClass'][] = 'top';
foreach( $new_entry as $attr => $vals ) {
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $server_id, $new_dn, $attr, $vals ) ) {
$search_href='search.php?search=true&amp;form=advanced&amp;server_id=' . $server_id . '&amp;filter=' . $attr . '=' . $badattr;
pla_error(sprintf( $lang['unique_attr_failed'] , $attr,$badattr,$new_dn,$search_href ) );
}
if( ! is_attr_binary( $server_id, $attr ) )
if( is_array( $vals ) )
foreach( $vals as $i => $v )
$new_entry[ $attr ][ $i ] = $v;
else
$new_entry[ $attr ] = $vals;
}
//echo "<pre>"; var_dump( $new_dn );print_r( $new_entry ); echo "</pre>";
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
// Check the user-defined custom call back first
if( true === preEntryCreate( $server_id, $new_dn, $new_entry ) )
$add_result = @ldap_add( $ds, $new_dn, $new_entry );
else
exit;
if( $add_result )
{
postEntryCreate( $server_id, $new_dn, $new_entry );
if( $redirect )
$redirect_url = $redirect;
else
$redirect_url = "edit.php?server_id=$server_id&dn=" . rawurlencode( $new_dn );
if( array_key_exists( 'tree', $_SESSION ) )
{
$tree = $_SESSION['tree'];
$tree_icons = $_SESSION['tree_icons'];
if( isset( $tree[$server_id][$container] ) ) {
$tree[$server_id][$container][] = $new_dn;
sort( $tree[$server_id][$container] );
$tree_icons[$server_id][$new_dn] = get_icon( $server_id, $new_dn );
}
$_SESSION['tree'] = $tree;
$_SESSION['tree_icons'] = $tree_icons;
session_write_close();
}
?>
<html>
<head>
<?php if( isset( $tree[$server_id][$container] ) || $new_dn == $servers[$server_id]['base'] ) { ?>
<!-- refresh the tree view (with the new DN renamed)
and redirect to the edit_dn page -->
<script language="javascript">
parent.left_frame.location.reload();
location.href='<?php echo $redirect_url; ?>';
</script>
<?php } ?>
<meta http-equiv="refresh" content="0; url=<?php echo $redirect_url; ?>" />
</head>
<body>
<?php echo $lang['redirecting'] ?> <a href="<?php echo $redirect_url; ?>"><?php echo $lang['here']?></a>.
</body>
</html>
<?php
}
else
{
pla_error( $lang['create_could_not_add'], ldap_error( $ds ), ldap_errno( $ds ) );
}
?>

View File

@@ -1,126 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/create_form.php,v 1.21 2004/10/28 13:37:39 uugdave Exp $
/*
* create_form.php
* The menu where the user chooses an RDN, Container, and Template for creating a new entry.
* After submitting this form, the user is taken to their chosen Template handler.
*
* Variables that come in as GET vars
* - server_id (optional)
* - container (rawurlencoded) (optional)
*/
require './common.php';
require 'templates/template_config.php';
$server_id = $_REQUEST['server_id'];
$step = isset( $_REQUEST['step'] ) ? $_REQUEST['step'] : 1; // defaults to 1
$container = $_REQUEST['container'];
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id_underline'] . htmlspecialchars( $server_id ) );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$server_name = $servers[$server_id]['name'];
// build the server drop-down html
$server_menu_html = '';
if (count($servers)>1){
$server_menu_html .= '<select name="server_id">';
$js_dn_list = '';
foreach( $servers as $id => $server ) {
if( $server['host'] ) {
$server_menu_html .= '<option value="'.$id.'"' . ( $id==$server_id? ' selected="true"' : '' ) . '>';
$server_menu_html .= $server['name'] . '</option>';
}
}
$server_menu_html .= '</select>';
} else {
$server = reset($servers);
if( $server['host'] )
$server_menu_html .= '<input type="hidden" name="server_id" value="'.key($servers).'" />' .
'<b>' . $server['name'] . '</b>';
}
include './header.php'; ?>
<body>
<h3 class="title"><?php echo $lang['createf_create_object']?></h3>
<h3 class="subtitle"><?php echo $lang['createf_choose_temp']?></h3>
<center><h3><?php echo $lang['createf_select_temp']?></h3></center>
<form action="creation_template.php" method="post">
<input type="hidden" name="container" value="<?php echo htmlspecialchars( $container ); ?>" />
<table class="create">
<tr>
<td class="heading"><?php echo $lang['server']; ?>:</td>
<td><?php echo $server_menu_html; ?></td>
</tr>
<tr>
<td class="heading">
<?php echo $lang['template']; ?>:
</td>
<td>
<table class="template_display">
<tr>
<td>
<table class="templates">
<?php
$count = count( $templates );
$i = -1;
foreach( $templates as $name => $template ) {
$i++;
// Balance the columns properly
if( ( count( $templates ) % 2 == 0 && $i == intval( $count / 2 ) ) ||
( count( $templates ) % 2 == 1 && $i == intval( $count / 2 ) + 1 ) )
echo "</table></td><td><table class=\"templates\">";
// Check and see if this template should be shown in the list
$isValid = false;
if( isset($template['regexp'] ) ) {
if( @preg_match( "/".$template['regexp']."/i", $container ) ) {
$isValid = true;
}
} else {
$isValid = true;
}
?>
<tr>
<td><input type="radio" name="template" value="<?php echo htmlspecialchars($name);?>"
id="<?php echo htmlspecialchars($name); ?>"
<?php if( 0 == strcasecmp( 'Custom', $name ) ) echo ' checked';
if( ! $isValid ) echo ' disabled'; ?> />
</td>
<td class="icon"><label for="<?php echo htmlspecialchars($name);?>"><img src="<?php echo $template['icon']; ?>" /></label></td>
<td>
<label for="<?php echo htmlspecialchars($name);?>">
<?php if( 0 == strcasecmp( 'Custom', $template['desc'] ) ) echo '<b>';
if( ! $isValid ) echo "<span style=\"color: gray\"><acronym title=\"This template is not allowed in this container\">";
echo htmlspecialchars( $template['desc'] );
if( ! $isValid ) echo "</acronym></span>";
if( 0 == strcasecmp( 'Custom', $template['desc'] ) ) echo '</b>'; ?>
</label></td>
</tr>
<?php
} // end foreach ?>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"><center><input type="submit" name="submit" value="<?php echo $lang['proceed_gt']?>" /></center></td>
</tr>
</table>
</form>
</body>
</html>

View File

@@ -1,62 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/creation_template.php,v 1.18 2004/10/24 23:51:49 uugdave Exp $
/* file: creation_template.php
* This file simply acts as a plugin grabber for the creator templates in
* the directory templates/creation/
*
* Expected POST vars:
* server_id
* template
*/
require_once 'common.php';
require 'templates/template_config.php';
$template = http_get_value( 'template' );
$template !== false or pla_error( $lang['ctemplate_no_template'] );
if( $template == 'custom' ) {
foreach( $templates as $id => $template ) {
if( $template['handler'] == 'custom.php' ) {
$template = $id;
break;
}
}
}
isset( $templates[$template] ) or pla_error( sprintf( $lang['invalid_template'], htmlspecialchars( $template ) ) );
$template_id = $template;
$template = isset( $templates[$template] ) ? $templates[$template_id] : null;
$server_id = http_get_value( 'server_id' );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
$server_name = $servers[ $server_id ][ 'name' ];
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
include './header.php';
?>
<body>
<h3 class="title"><?php echo $lang['createf_create_object']?></h3>
<h3 class="subtitle"><?php echo $lang['ctemplate_on_server']?> '<?php echo htmlspecialchars( $server_name ); ?>', <?php echo $lang['using_template']?> '<?php echo htmlspecialchars( $template['desc'] ); ?>'</h3>
<?php
$handler = 'templates/creation/' . $template['handler'];
$handler = realpath( $handler );
if( ! file_exists( $handler ) )
pla_error( sprintf( $lang['template_does_not_exist'], htmlspecialchars( $template['handler'] ) ) );
if( ! is_readable( $handler ) )
pla_error( sprintf( $lang['template_not_readable'], htmlspecialchars( $template['handler'] ) ) );
include $handler;
echo "</body>\n</html>";
?>

View File

@@ -1,86 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/delete.php,v 1.18 2004/08/15 17:35:25 uugdave Exp $
/*
* delete.php
* Deletes a DN and presents a "job's done" message.
*
* Variables that come in as POST vars:
* - dn (rawurlencoded)
* - server_id
*/
require realpath( 'common.php' );
$dn = $_POST['dn'];
$encoded_dn = rawurlencode( $dn );
$server_id = $_POST['server_id'];
if( $dn === null )
pla_error( $lang['you_must_specify_a_dn'] );
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
dn_exists( $server_id, $dn ) or pla_error( sprintf( $lang['no_such_entry'], '<b>' . pretty_print_dn( $dn ) . '</b>' ) );
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
// Check the user-defined custom callback first.
if( true === preEntryDelete( $server_id, $dn ) ) {
$del_result = @ldap_delete( $ds, $dn );
} else {
exit;
}
if( $del_result )
{
// Custom callback
postEntryDelete( $server_id, $dn );
// kill the DN from the tree browser session variable and
// refresh the tree viewer frame (left_frame)
if( array_key_exists( 'tree', $_SESSION ) )
{
$tree = $_SESSION['tree'];
if( isset( $tree[$server_id] ) && is_array( $tree[$server_id] ) ) {
// does it have children? (it shouldn't, but hey, you never know)
if( isset( $tree[$server_id][$dn] ) )
unset( $tree[$server_id][$dn] );
// search and destroy
foreach( $tree[$server_id] as $tree_dn => $subtree )
foreach( $subtree as $key => $sub_tree_dn )
if( 0 == strcasecmp( $sub_tree_dn, $dn ) )
unset( $tree[$server_id][$tree_dn][$key] );
$_SESSION['tree'] = $tree;
}
session_write_close();
}
include './header.php';
?>
<script language="javascript">
parent.left_frame.location.reload();
</script>
<br />
<br />
<center><?php echo sprintf( $lang['entry_deleted_successfully'], '<b>' .pretty_print_dn($dn) . '</b>' ); ?></center>
<?php
} else {
pla_error( sprintf( $lang['could_not_delete_entry'], '<b>' . pretty_print_dn( $dn ) . '</b>' ),
ldap_error( $ds ),
ldap_errno( $ds ) );
}

View File

@@ -1,47 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/delete_attr.php,v 1.9 2004/08/15 17:39:20 uugdave Exp $
/*
* delete_attr.php
* Deletes an attribute from an entry with NO confirmation.
*
* On success, redirect to edit.php
* On failure, echo an error.
*/
require './common.php';
$server_id = $_POST['server_id'];
$dn = $_POST['dn'] ;
$encoded_dn = rawurlencode( $dn );
$attr = $_POST['attr'];
if( is_attr_read_only( $server_id, $attr ) )
pla_error( sprintf( $lang['attr_is_read_only'], htmlspecialchars( $attr ) ) );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
if( ! $attr ) pla_error( $lang['no_attr_specified'] );
if( ! $dn ) pla_error( $lang['no_dn_specified'] );
$update_array = array();
$update_array[$attr] = array();
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
$res = @ldap_modify( $ds, $dn, $update_array );
if( $res )
{
$redirect_url = "edit.php?server_id=$server_id&dn=$encoded_dn";
foreach( $update_array as $attr => $junk )
$redirect_url .= "&modified_attrs[]=$attr";
header( "Location: $redirect_url" );
}
else
{
pla_error( $lang['could_not_perform_ldap_modify'], ldap_error( $ds ), ldap_errno( $ds ) );
}
?>

View File

@@ -1,151 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/delete_form.php,v 1.17 2004/10/21 00:14:48 uugdave Exp $
/*
* delete_form.php
* Displays a last chance confirmation form to delete a dn.
*
* Variables that come in as GET vars:
* - dn (rawurlencoded)
* - server_id
*/
require './common.php';
$dn = $_GET['dn'];
$encoded_dn = rawurlencode( $dn );
$server_id = $_GET['server_id'];
$rdn = pla_explode_dn( $dn );
$rdn = $rdn[0];
$server_name = $servers[$server_id]['name'];
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$children = get_container_contents( $server_id, $dn,0,'(objectClass=*)',LDAP_DEREF_NEVER );
$has_children = count($children)>0 ? true : false;
include './header.php'; ?>
<body>
<h3 class="title"><?php echo sprintf( $lang['delete_dn'], htmlspecialchars( $rdn ) ); ?></b></h3>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $server_name; ?></b> &nbsp;&nbsp;&nbsp; <?php echo $lang['distinguished_name']; ?>: <b><?php echo htmlspecialchars( ( $dn ) ); ?></b></h3>
<?php if( $has_children ) { ?>
<center><b><?php echo $lang['permanently_delete_children']; ?></b><br /><br />
<?php
flush(); // so the user can get something on their screen while we figure out how many children this object has
if( $has_children ) {
// get the total number of child objects (whole sub-tree)
$s = pla_ldap_search( $server_id, 'objectClass=*', $dn, array('dn'), 'sub' );
$sub_tree_count = count( $s );
}
?>
<table class="delete_confirm">
<td>
<p>
<?php echo sprintf( $lang['entry_is_root_sub_tree'], $sub_tree_count ); ?>
<small>(<a href="search.php?search=true&amp;server_id=<?php echo $server_id; ?>&amp;filter=<?php echo rawurlencode('objectClass=*'); ?>&amp;base_dn=<?php echo $encoded_dn; ?>&amp;form=advanced&amp;scope=sub"><?php echo $lang['view_entries']; ?></a>)</small>
<br />
<br />
<?php echo sprintf( $lang['confirm_recursive_delete'], ($sub_tree_count-1) ); ?><br />
<br />
<small><?php echo $lang['confirm_recursive_delete_note']; ?></small>
<br />
<br />
<table width="100%">
<tr>
<td>
<center>
<form action="rdelete.php" method="post">
<input type="hidden" name="dn" value="<?php echo $dn; ?>" />
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="submit" class="scary" value="<?php echo sprintf( $lang['delete_all_x_objects'], $sub_tree_count ); ?>" />
</form>
</td>
<td>
<center>
<form action="edit.php" method="get">
<input type="hidden" name="dn" value="<?php echo htmlspecialchars($dn); ?>" />
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="submit" name="submit" value="<?php echo $lang['cancel']; ?>" class="cancel" />
</form>
</center>
</td>
</tr>
</table>
</td>
</table>
<?php flush(); ?>
<br />
<br />
<?php echo $lang['list_of_entries_to_be_deleted']; ?><br />
<select size="<?php echo min( 10, $sub_tree_count );?>" multiple disabled style="background:white; color:black;width:500px" >
<?php $i=0; ?>
<?php foreach( $s as $dn => $junk ) { ?>
<?php $i++; ?>
<option><?php echo $i; ?>. <?php echo htmlspecialchars( ( $dn ) ); ?></option>
<?php } ?>
</select>
<br />
<?php } else { ?>
<center>
<table class="delete_confirm">
<td>
<?php echo $lang['sure_permanent_delete_object']; ?><br />
<br />
<nobr><acronym title="<?php echo $lang['distinguished_name']; ?>"><?php echo $lang['dn']; ?></acronym>: <b><?php echo pretty_print_dn( $dn ); ?></b><nobr><br />
<nobr><?php echo $lang['server']; ?>: <b><?php echo htmlspecialchars($server_name); ?></b></nobr><br />
<br />
<table width="100%">
<tr>
<td>
<center>
<form action="delete.php" method="post">
<input type="hidden" name="dn" value="<?php echo htmlspecialchars($dn); ?>" />
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="submit" name="submit" value="<?php echo $lang['delete']; ?>" class="scary" />
</center>
</form>
</td>
<td>
<center>
<form action="edit.php" method="get">
<input type="hidden" name="dn" value="<?php echo $dn; ?>" />
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="submit" name="submit" value="<?php echo $lang['cancel']; ?>" class="cancel" />
</form>
</center>
</td>
</tr>
</table>
</td>
</table>
</center>
<?php } ?>
</body>
</html>

View File

@@ -1,6 +1,9 @@
* Project Creator:
- David Smith
* Project Developers:
- David Smith Maintainer
- Deon George Maintainer
- Xavier Renard Import/Export and Samba
- Uwe Ebel I18n
@@ -9,7 +12,7 @@
- Bayu Irawan userPassword hash, html fixes, ldap_modify fixes
- Uwe Ebel short_open_tags fix
- Andrew Tipton SUP support in schema parser
- Eigil Bjørgum UTF-8 support
- Eigil Bjørgum UTF-8 support
- Brandon Lederer DNS entry template
Nathan Rotschafer
- Steve Rigler Password hash patch
@@ -21,6 +24,15 @@
- Piotr Tarnowski i18n fixes
- Deon George Auto-uidNumber enhancements and many fixes
- Pierre Belanger Speed-ups to auto-uidNumber
- Benjamin Drieu Syslog, Hooks and other fixes
- Samuel Tran User login restriction
- Daniel van Eeden Unicode, CSS fixes
- Piotr Tarnowski More locatisation fixes
- Tomas Kuliavas Improved password encoding functions
- Alessandro De Zorzi Enhancement with the new template engine and others
- Matt Harrington Fixes
- Jonathan Thurman Add Multiple objectClasses
- And many others, whose names are lost in the changelog. Thank you.
* Translators:
@@ -30,11 +42,11 @@
- Xavier Renard French
- Dave Smith English ;)
- Richard Lucassen Dutch
- Andreu Sanchez Spanish and Catal<EFBFBD>
- Andreu Sanchez Spanish and Català
- Dmitry Gorpinenko, Russian
Aleksey Soldatov
Sergey Saukh
- Unknown Italian
- Unknown Italian, Tain, Simplified Chinese
- Alexandre Maciel Portuguese (Brasilian)
Elton Schroeder Fenner (CLeGi)
- Piotr Tarnowski (DrFugazi) Polish
@@ -45,6 +57,3 @@
If you can help translate, please join the phpldapadmin-devel mailing list:
https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel

View File

@@ -1,3 +1,78 @@
* Version 0.9.7, 2005-09-11
* Summary:
- Now fully supporting PHP5 - this will be the last version developed on PHP4.
- Revamped how you configure PLA - now using a config object and some checking,
- Revamped how you define LDAP servers - extending the LDAPServer object and adding some checking.
- Fixed all functions so that they now use the LDAPServer object.
- Introduced the template engine and configuration by XML files. (The old templates are still in this
version, unchanged from 0.9.6. They will be removed after this version is released.)
- Changed dependancy checking to just index.php, so that common.php executes faster.
- Minor improvements to compare.php
- Much improved debug logging
- Much improved caching
- Improved LDAP server info display
- Some code readability cleanup
- Add other fixes as per the ChangeLog (ChangeLogCVS.txt).
Thank you for everybody who has submitted fixes/enhancements/recommendations and feedback for this version.
* Version 0.9.6, 2005-04-03
* Summary:
The main goals for this version was to close all the outstanding bugs and apply all the submitted patchs
on sourceforge. All the sourceforge easy to do RFE's where also included.
* Notes:
- Added support for mulpiple Base DN's
- Added support to log for syslog (Benjamin Drieu)
- Added hooks feature to replace custom functions (Benjamin Drieu)
- Entry chooser now auto adds rdn entry for copy/move operations (wigi2)
- Initial support for AD Schema Retrieval
- Added login restriction (Samuel Tran)
- Added support to move objects (aka Copy then Delete) (wigi2)
- No longer show + next to objects that have no children in tree viewer (when hide_configuration_management=true)
- Added date evaluation to shadow attributes (shadowAccount)
- Added Enhancement to show attributes in a specifc order (Samuel Tran)
- Added Server Info OID descriptions
- Added new feature to compare two DNs
- Binary SID to text SID feature for MSAD objectSid entries.
- Added session timeout feature (Samuel Tran)
* New Languages:
- Taiwan (Anonymous)
- Simplfied Chinese (Anonymous)
* Changes:
- LDAP server configuration is being moved into an Object LDAPServer, all future interactions should
use this object class from now on.
- Some more conversions of english static text into language files.
- Some code cleanup, excess whitespace removal, etc...
- Tags for phpdoc updated.
- Added cvs header to files missing the header.
- LDIF Import function improvements (Xavier Renard)
- UniqueAttrs fix, now showing actual value (in multi value attribs) that breaches uniqueness
- Fixed check_lang_files when register_globals=off
- css fixes (Daniel van Eeden)
- More locatisation fixes (Piotr Tarnowski)
- Schema functions all use cached entries now by default
- Improved password encoding functions (Tomas Kuliavas)
- If auth_type = session, then dn and password is also blowfish encrypted
- Prettied up the icon index (Dave Smith)
- Make the rdn not editable in the default template.
* Fixes:
- password_check when magic_quotes_gpc is on.
- Misc fixes (Benjamin Drieu)
- Fix searchs when searching for values with brackets
- Unicode fixes (Daniel van Eeden)
- View jpeg photo minor security fix (Dave Smith)
- Check password link missing in read-only mode
* Sourceforge bug fixes:
1117099 1117316 1120048 1150947 1152962 1153360 1055401 1158148 1161425
* Version 0.9.5, 2004-12-17

View File

@@ -1,26 +1,26 @@
$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-es.txt,v 1.3 2004/03/19 20:22:54 i18phpldapadmin Exp $
Estas instrucciones dejan por sentado que tienes una instalaci<EFBFBD>n
$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-es.txt,v 1.4 2005/02/06 00:37:15 wurley Exp $
Estas instrucciones dejan por sentado que tienes una instalación
funcionando de:
a. Servidor Web (Apache, IIS, etc).
b. PHP 4.1.0 o mas nuevo (con soporte LDAP)
* Instalando phpLDAPadmin en 4 pasos muy simples:
1. Desempaqueta el archivo (si est<EFBFBD>s leyendo esto, ya lo has hecho).
2. Pon el directorio resultante 'phpldapadmin' en alg<EFBFBD>n lugar de tu
1. Desempaqueta el archivo (si estás leyendo esto, ya lo has hecho).
2. Pon el directorio resultante 'phpldapadmin' en algún lugar de tu
directorio web raiz.
3. Copia 'config.php.example' a 'config.php' y ed<EFBFBD>talo para que se
acomode a tu configuraci<EFBFBD>n y tu gusto.
4. Entonces, con el navegador ve a la direcci<EFBFBD>n que contiene los archivos
3. Copia 'config.php.example' a 'config.php' y edítalo para que se
acomode a tu configuración y tu gusto.
4. Entonces, con el navegador ve a la dirección que contiene los archivos
del directorio phpldapadmin.
* Notas del navegador
phpLDAP se desarroll<EFBFBD> bajo Mozilla, y ser<EFBFBD> donde seguramente corra mejor.
A<EFBFBD>n as<EFBFBD>, las pruebas se han hecho bajo Internet Explorer, y tendr<EFBFBD>a que funcionar
bien tambi<EFBFBD>n. No se ha hecho ninguna prueba con Konqueror (o cualquier navegador
phpLDAP se desarrolló bajo Mozilla, y será donde seguramente corra mejor.
Aún así, las pruebas se han hecho bajo Internet Explorer, y tendría que funcionar
bien también. No se ha hecho ninguna prueba con Konqueror (o cualquier navegador
basado en kthml como Safari) o Opera. Si encuentras alguna incompatibilidad, por favor
h<EFBFBD>znoslo saber.
háznoslo saber.
* Contribuidores
@@ -36,21 +36,21 @@ funcionando de:
- Bayu Irawan userPassword hash, arreglos html, arreglos ldap_modify
- Uwe Ebel arreglo short_open_tags
- Andrew Tipton soporte SUP en el parseador del esquema
- Eigil Bj<EFBFBD>rgum soporte UTF-8
- Eigil Bjørgum soporte UTF-8
- Brandon Lederer plantilla de entrada de DNS
Nathan Rotschafer
- Steve Rigler Parche para Password hash
- Chris Jackson Contrase<EFBFBD>as Blowfish y md5crypt
- Chris Jackson Contraseñas Blowfish y md5crypt
- Marius Rieder Parseador avanzado de esquema
- Nick Burch Un mont<EFBFBD>n de arreglos de realpath()
- Nick Burch Un montón de arreglos de realpath()
Traductores:
- Uwe Ebel Alem<EFBFBD>n
- Xavier Renard Franc<EFBFBD>s
- Dave Smith Ingl<EFBFBD>s ;)
- Uwe Ebel Alemán
- Xavier Renard Francés
- Dave Smith Inglés ;)
Si puedes ayudar a traducir, por favor ap<EFBFBD>ntate a la lista de correo phpldapadmin:
Si puedes ayudar a traducir, por favor apúntate a la lista de correo phpldapadmin:
https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel

View File

@@ -1,23 +1,23 @@
$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-fr.txt,v 1.3 2004/03/19 20:22:54 i18phpldapadmin Exp $
Les instructions suivantes supposent une installation en <EFBFBD>tat de marche de:
$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/INSTALL-fr.txt,v 1.4 2005/02/06 00:37:15 wurley Exp $
Les instructions suivantes supposent une installation en état de marche de:
a. Un serveur web (Apache, IIS, etc).
b. PHP 4.1.0 ou une version plus r<EFBFBD>cente (avec le support LDAP).
b. PHP 4.1.0 ou une version plus récente (avec le support LDAP).
* Installer phpLDAPadmin en quatre <EFBFBD>tapes simples:
* Installer phpLDAPadmin en quatre étapes simples:
1. D<EFBFBD>-tarrer l'archive (si vous lisez ceci, c'est que vous l'avez d<EFBFBD>j<EFBFBD> fait).
2. Mettre le r<EFBFBD>pertoire 'phpldapadmin' ainsi obtenu quelque part sous
1. Dé-tarrer l'archive (si vous lisez ceci, c'est que vous l'avez déjà fait).
2. Mettre le répertoire 'phpldapadmin' ainsi obtenu quelque part sous
la racine de votre serveur web.
3. Copier 'config.php.example' vers 'config.php' et <EFBFBD>diter selon vos besoins.
4. Ensuite, pointer votre navigateur vers le r<EFBFBD>pertoire phpldapadmin.
3. Copier 'config.php.example' vers 'config.php' et éditer selon vos besoins.
4. Ensuite, pointer votre navigateur vers le répertoire phpldapadmin.
* Notes sur les navigateurs
phpLDAPadmin a <EFBFBD>t<EFBFBD> developp<EFBFBD> avec Mozilla et fonctionnera vraisemblablement
mieux avec celui-ci. Cependant, des tests ont <EFBFBD>t<EFBFBD> effectu<EFBFBD> avec Internet Explorer
et cela devrait fonctionner <EFBFBD>galement. Aucun test n'a <EFBFBD>t<EFBFBD> r<EFBFBD>alis<EFBFBD> ni avec Konqueror
(ou un navigateur bas<EFBFBD> sur khtml comme Safari par exemple) ni avec Opera. Si
vous trouvez une incompatibilit<EFBFBD> avec votre navigateur, merci de la reporter.
phpLDAPadmin a été developpé avec Mozilla et fonctionnera vraisemblablement
mieux avec celui-ci. Cependant, des tests ont été effectué avec Internet Explorer
et cela devrait fonctionner également. Aucun test n'a été réalisé ni avec Konqueror
(ou un navigateur basé sur khtml comme Safari par exemple) ni avec Opera. Si
vous trouvez une incompatibilité avec votre navigateur, merci de la reporter.
* Contributions:
@@ -25,7 +25,7 @@ Les instructions suivantes supposent une installation en
- David Smith Maintenance
- Xavier Renard Responsable LDIF
- Marius Rieder Responsable pour les sch<EFBFBD>ma LDAP
- Marius Rieder Responsable pour les schéma LDAP
- Nate Rotschafer Directeur des releases
Auteurs de patchs:
@@ -33,25 +33,25 @@ Les instructions suivantes supposent une installation en
- Bayu Irawan hachage pour le mot de passe utilisateur,
corrections html, corrections pour ldap_modiy
- Uwe Ebel Corrections pour short_open_tags
- Andrew Tipton Support pour SUP dans le parseur de sch<EFBFBD>mas
- Eigil Bj<EFBFBD>rgum Support pour UTF-8
- Brandon Lederer Patron pour les entr<EFBFBD>es DNS
- Andrew Tipton Support pour SUP dans le parseur de schémas
- Eigil Bjørgum Support pour UTF-8
- Brandon Lederer Patron pour les entrées DNS
Nathan Rotschafer
- Steve Rigler Correction pour les hachages des mots de passe
- Chris Jackson Mots de passe Blowfish et md5crypt
- Marius Rieder Am<EFBFBD>lioration du parseur de sch<EFBFBD>mas
- Marius Rieder Amélioration du parseur de schémas
- Nick Burch Corrections multiples pour realpath()
Traducteurs:
- Uwe Ebel & Marius Reider Allemand
- Xavier Renard Fran<EFBFBD>ais
- Xavier Renard Français
- Dave Smith Anglais ;)
- Richard Lucassen N<EFBFBD>erlandais
- Richard Lucassen Néerlandais
- Andreu Sanchez Espagnol et Catalan
- Dmitry Gorpinenko Russe
- Unknown Italien
Si vous pouvez aider <EFBFBD> traduire phpLDAPAdmin, veuillez s'il vous pla<EFBFBD>t vous abonner
<EFBFBD> la liste de diffusion phpldapadmin-devel:
Si vous pouvez aider à traduire phpLDAPAdmin, veuillez s'il vous plaît vous abonner
à la liste de diffusion phpldapadmin-devel:
https://lists.sourceforge.net/mailman/listinfo/phpldapadmin-devel

View File

@@ -1,56 +0,0 @@
$Header: /cvsroot/phpldapadmin/phpldapadmin/doc/ROADMAP,v 1.19 2004/03/25 12:50:39 uugdave Exp $
phpLDAPadmin roadmap
0.9.3 planned features:
Bugfix release.
This release will focus on fixing bugs, adding minor features, and improving stability.
Samba 3.0 support in samba user and machine creation templates
Move template config to a new config file: template_config.php (or something)
0.9.4 planned features:
* Complete i18n. All strings localized.
Modification templates:
* gropOfNames (view full DNs and browse buttons)
* groupOfUniqueNames (view full DNs and browse buttons)
* http auth_type (a la phpMyAdmin)
* read-only attributes (similar to hidden attributes) in config
* Default mod template: Add a "browse" button for attributes that store DNs.
caveat: We don't have a way to reference form elements with "[]" in the name, causing a proble
with our default mod template. The "browser" button is present, but cannot populate the form
element.
* Add output buffering when including lang files so no output is sent to the browser (which could cause problems for sessions and cookies)
* Paging search results.
* Anonymous binds redirect to search page with no tree viewer (as an option in config)
* pretty-printed DNs
* DSML exports
* obfuscated password display
* more linkage in the schema browser (used by links)
* jpegs drawn in-line in searches
* configurable read-only attributes
* paging in search results (ie, viewing entries 1-50 of 436)
* Configuration for templates.
0.9.5 planned features:
Maybe create a class called Config with static functions for fetching configuration data (ie, Config::isServerReadOnly()).
or: Object-oriented server and general configuration (ie, add a class Server)
Support and test ActiveDirectory and iMail LDAP schema.
Add link to objectClass values in default mod template to jump to that objectClass in the schema viewer.
Make deref param modifiable in the advanced search form (LDAP_DEREF_ALWAYS, LDAP_DEREF_NEVER, etc.)
Better handling of aliases and referals (display the actual alias with aliasedObjectName or ref attrs, and don't follow or perhaps make it configurable like ldapsearch)
Remove all HTML from language files.
Add a random hint on the welcome page
Add blowfish encryption to encrypt cookie-stored passwords and DNs.
Support for modifying replica entries (using ldap_set_rebind_proc())
Modification templates
user
oragnizationalUnit
sambaUser (v 2 and 3)
sambaMachine
Search filter builder for simple search form (just select AND or OR for a group of criteria)
Add mass-update feature (user provides filter and set of attrs/vals to modify)
No-schema mode of operation (some servers simply won't give us schema. This becomes a problem for normal operation)
i18n localization of all creation templates
Hidden/read-only attrs on a filter-basis (ie, different users have different viewable, writable attributes)
Serious compatibility testing for additional LDAP servers.
(* means an item is complete and checed into CVS)

1218
doc/hooks.sgml Normal file

File diff suppressed because it is too large Load Diff

15
doc/test_encoding.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
# $Header: /cvsroot/phpldapadmin/phpldapadmin/doc/test_encoding.sh,v 1.1 2005/02/06 00:37:15 wurley Exp $
# $Id: test_encoding.sh,v 1.1 2005/02/06 00:37:15 wurley Exp $
# Written by: Daniel van Eeden <daniel_e@dds.nl>
# Purpose: test utf-8 encoding
for file in `find . -type f ! -name \*png ! -name \*jpg | egrep -v "^./lang/"`
do
output=`iconv ${file} -o /dev/null 2>&1`
err=$?
output=`echo ${output} | cut -d: -f2`
if [ ${err} != "0" ]; then
echo "${file}:${output}"
fi
done

View File

@@ -1,35 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/download_binary_attr.php,v 1.8 2004/08/15 17:39:20 uugdave Exp $
require './common.php';
$server_id = $_GET['server_id'];
$dn = rawurldecode( $_GET['dn'] );
$attr = $_GET['attr'];
// if there are multiple values in this attribute, which one do you want to see?
$value_num = isset( $_GET['value_num'] ) ? $_GET['value_num'] : 0;
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
dn_exists( $server_id, $dn ) or pla_error( sprintf( $lang['no_such_entry'], pretty_print_dn( $dn ) ) );
$search = @ldap_read( $ds, $dn, "(objectClass=*)", array( $attr ), 0, 0, 0, get_view_deref_setting() );
if( ! $search )
pla_error( $lang['error_performing_search'], ldap_error( $ds ), ldap_errno( $ds ) );
$entry = ldap_first_entry( $ds, $search );
$attrs = ldap_get_attributes( $ds, $entry );
$attr = ldap_first_attribute( $ds, $entry, $attrs );
$values = ldap_get_values_len( $ds, $entry, $attr );
$count = $values['count'];
// Dump the binary data to the browser
header( "Content-type: octet-stream" );
header( "Content-disposition: attachment; filename=$attr" );
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
echo $values[$value_num];
?>

View File

@@ -1,61 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/edit.php,v 1.48 2004/10/14 03:33:36 uugdave Exp $
/*
* edit.php
* Displays the specified dn from the specified server for editing
* in its template as determined by get_template(). This is a simple
* shell for displaying entries. The real work is done by the templates
* found in tempaltes/modification/
*
* Variables that come in as GET vars:
* - dn (rawurlencoded)
* - server_id
* - use_default_template (optional) If set, use the default template no matter what
* - Other vars may be set and used by the modification templates
*/
require_once realpath( 'common.php' );
require_once realpath( 'templates/template_config.php' );
$dn = isset( $_GET['dn'] ) ? $_GET['dn'] : false;
$dn !== false or pla_error( $lang['missing_dn_in_query_string'] );
$decoded_dn = rawurldecode( $dn );
$encoded_dn = rawurlencode( $decoded_dn );
$server_id = isset( $_GET['server_id'] ) ? $_GET['server_id'] : false;
$server_id !== false or pla_error( $lang['missing_server_id_in_query_string'] );
// Template authors may wish to present the user with a link back to the default, generic
// template for editing. They may use this as the target of the href to do so.
$default_href = "edit.php?server_id=$server_id&amp;dn=$encoded_dn&amp;use_default_template=true";
$use_default_template = isset( $_GET['use_default_template'] ) ? true : false;
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
if( $use_default_template ) {
require realpath( 'templates/modification/default.php' );
} else {
$template = get_template( $server_id, $dn );
$template_file = "templates/modification/$template.php";
if( file_exists( realpath( $template_file ) ) )
require realpath( $template_file );
else {
echo "\n\n";
echo $lang['missing_template_file'];
echo " <b>$template_file</b>. ";
echo $lang['using_default'];
echo "<br />\n\n";
require realpath( 'templates/modification/default.php' );
}
}
?>

View File

@@ -1,106 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/entry_chooser.php,v 1.16 2004/08/15 17:39:20 uugdave Exp $
require './common.php';
$container = isset( $_GET['container'] ) ? rawurldecode( $_GET['container'] ) : false;
$server_id = isset( $_GET['server_id'] ) ? $_GET['server_id'] : false;
$return_form_element = isset( $_GET['form_element'] ) ? htmlspecialchars( $_GET['form_element'] ) : null;
include "header.php";
echo "<h3 class=\"subtitle\">" . $lang['entry_chooser_title'] . "</h3>\n";
flush();
?>
<script language="javascript">
function returnDN( dn )
{
opener.document.<?php echo $return_form_element; ?>.value = dn;
close();
}
</script>
<?php
if( $container ) {
echo $lang['server_colon_pare'] . "<b>" . htmlspecialchars( $servers[ $server_id ][ 'name' ] ) . "</b><br />\n";
echo $lang['look_in'] . "<b>" . htmlspecialchars( $container ) . "</b><br />\n";
}
/* Has the use already begun to descend into a specific server tree? */
if( $server_id !== false && $container !== false )
{
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
$dn_list = get_container_contents( $server_id, $container, 0, '(objectClass=*)', get_tree_deref_setting() );
sort( $dn_list );
$base_dn = $servers[ $server_id ][ 'base' ];
if( ! $base_dn )
$base_dn = try_to_get_root_dn( $server_id );
if( 0 == pla_compare_dns( $container, $base_dn ) ) {
$parent_container = false;
$up_href = "entry_chooser.php?form_element=$return_form_element";
} else {
$parent_container = get_container( $container );
$up_href = "entry_chooser.php?form_element=$return_form_element&amp;server_id=$server_id&amp;container=" .
rawurlencode( $parent_container );
}
echo "&nbsp;<a href=\"$up_href\" style=\"text-decoration:none\">" .
"<img src=\"images/up.png\"> ". $lang['back_up_p'] ."</a><br />\n";
if( count( $dn_list ) == 0 )
echo "&nbsp;&nbsp;&nbsp;(". $lang['no_entries'] .")<br />\n";
else
foreach( $dn_list as $dn ) {
$href = "javascript:returnDN( '$dn' )";
echo "&nbsp;&nbsp;&nbsp;<a href=\"entry_chooser.php?form_element=$return_form_element".
"&amp;server_id=$server_id&amp;container=" .
rawurlencode( $dn ) . "\"><img src=\"images/plus.png\" /></a> " .
"<a href=\"$href\">" . htmlspecialchars( $dn ) . "</a><br />\n";
}
}
/* draw the root of the selection tree (ie, list all the servers) */
else
{
foreach( $servers as $id => $server ) {
if( $server['host'] ) {
echo "<b>" . htmlspecialchars( $server['name'] ) . "</b><br />\n";
if( ! have_auth_info( $id ) )
echo "<small>&nbsp;&nbsp;&nbsp;(" . $lang['not_logged_in'] . ")</small><br />";
else {
$dn = ( $server['base'] ? $server['base'] : try_to_get_root_dn( $id ) );
if( ! $dn ) {
echo "<small>&nbsp;&nbsp;&nbsp;(". $lang['could_not_det_base_dn'] .")</small><br />";
} else {
$href = "javascript:returnDN( '$dn' )";
echo "&nbsp;&nbsp;&nbsp;<a href=\"entry_chooser.php?form_element=" .
"$return_form_element&amp;server_id=$id&amp;container=" .
rawurlencode( $dn ) . "\"><img src=\"images/plus.png\" /></a> " .
"<a href=\"$href\">" . htmlspecialchars( $dn ) . "</a><br />\n";
}
}
}
}
}
// added by PD. 14082003,
// adding the element access allows it to work with javascript arrays
// the name of the form extracted from the first part of the URL variable.
$formpart=substr($return_form_element,0,strpos($return_form_element,"."));
// the name of the element extracted from the last part of the URL variable (after the dot)
$elmpart =substr($return_form_element,strpos($return_form_element,".")+1);
// rebuilt return value
$return_form_element = $formpart . ".elements[\"" . $elmpart . "\"]";
?>

File diff suppressed because it is too large Load Diff

View File

@@ -1,33 +0,0 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/header.php,v 1.14 2004/10/24 23:51:49 uugdave Exp $
// We want to get $language into scope in case we were included
// from within a function
global $language;
// text/xml won't work with MSIE, but is very useful for debugging xhtml code.
//@header( "Content-type: text/xml; charset=\"UTF-8\"" );
@header( "Content-type: text/html; charset=\"UTF-8\"" );
// XML version and encoding for well-behaved browsers
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $language; ?>" lang="<?php echo $language; ?>" dir="ltr">
<head>
<title>phpLDAPadmin</title>
<link rel="stylesheet" href="style.css" media="screen" />
<?php
if( isset( $server_id ) ) {
$custom_file = get_custom_file( $server_id, 'style.css' );
if( strcmp( $custom_file, 'style.css' ) != 0 ) { ?>
<link rel="stylesheet" href="<?php echo $custom_file ?>" media="screen" />
<?php } } ?>
<script src="entry_chooser.js" type="text/javascript"></script>
<script src="ie_png_work_around.js" type="text/javascript"></script>
<script src="search_util.js" type="text/javascript"></script>
<script src="generic_utils.js" type="text/javascript"></script>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>

View File

@@ -1,21 +0,0 @@
<?php
include 'common.php';
include 'header.php';
?>
<body>
<h3 class="title">Help</h3>
<br />
<center>
<p>Do you have a problem or question?</p>
<p>Perhaps you are new to LDAP and need a little guidance?</p>
<p>Help is only one click away. Visit the online <a href="http://www.phpldapadmin.com/forum">phpLDAPadmin support forum</a>.</p>
<br />
<p>(Note that paying members will receive priority support, so <a target="new" href="https://www.phpldapadmin.com/product_info.php/products_id/28">buy your membership</a> today.)</p>
</center>
</body>
</html>

168
htdocs/add_attr.php Normal file
View File

@@ -0,0 +1,168 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/add_attr.php,v 1.15.2.4 2005/10/22 14:22:47 wurley Exp $
/**
* Adds an attribute/value pair to an object
*
* Variables that come in via common.php
* - server_id
* Variables that come in as POST vars:
* - dn
* - attr
* - val
* - binary
*
* @package phpLDAPadmin
* @todo: For boolean attributes, convert the response to TRUE/FALSE.
*/
/**
*/
require './common.php';
require TMPLDIR.'template_config.php';
if( $ldapserver->isReadOnly() )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$attr = $_POST['attr'];
$val = isset( $_POST['val'] ) ? $_POST['val'] : false;;
$dn = $_POST['dn'] ;
$is_binary_val = isset( $_POST['binary'] ) ? true : false;
$encoded_dn = rawurlencode( $dn );
$encoded_attr = rawurlencode( $attr );
if( ! $is_binary_val && $val == "" ) {
pla_error( $lang['left_attr_blank'] );
}
// special case for binary attributes (like jpegPhoto and userCertificate):
// we must go read the data from the file and override $val with the binary data
// Secondly, we must check if the ";binary" option has to be appended to the name
// of the attribute.
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $ldapserver, $dn, $attr, array($val) ) ) {
$search_href = sprintf('search.php?search=true&form=advanced&server_id=%s&filter=%s=%s',$ldapserver->server_id,$attr,$badattr);
pla_error(sprintf( $lang['unique_attr_failed'],$attr,$badattr,$dn,$search_href ) );
}
if( $is_binary_val ) {
if( 0 == $_FILES['val']['size'] )
pla_error( $lang['file_empty'] );
if( ! is_uploaded_file( $_FILES['val']['tmp_name'] ) ) {
if( isset( $_FILES['val']['error'] ) )
switch($_FILES['val']['error']) {
case 0: //no error; possible file attack!
pla_error( $lang['invalid_file'] );
break;
case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
pla_error( $lang['uploaded_file_too_big'] );
break;
case 2: //uploaded file exceeds the MAX_FILE_SIZE directive specified in the html form
pla_error( $lang['uploaded_file_too_big'] );
break;
case 3: //uploaded file was only partially uploaded
pla_error( $lang['uploaded_file_partial'] );
break;
case 4: //no file was uploaded
pla_error( $lang['left_attr_blank'] );
break;
default: //a default error, just in case! :)
pla_error( $lang['invalid_file'] );
break;
}
else
pla_error( $lang['invalid_file'] );
}
$file = $_FILES['val']['tmp_name'];
$f = fopen( $file, 'r' );
$binary_data = fread( $f, filesize( $file ) );
fclose( $f );
$val = $binary_data;
if( is_binary_option_required( $ldapserver, $attr ) )
$attr .= ";binary";
}
/* Automagically hash new userPassword attributes according to the
chosen in config.php. */
if( 0 == strcasecmp( $attr, 'userpassword' ) ) {
if (trim($ldapserver->default_hash) != '' ) {
$enc_type = $ldapserver->default_hash;
$val = password_hash( $val, $enc_type );
}
}
elseif (strcasecmp($attr,'sambaNTPassword') == 0) {
$sambapassword = new smbHash;
$val = $sambapassword->nthash($val);
}
elseif (strcasecmp($attr,'sambaLMPassword') == 0) {
$sambapassword = new smbHash;
$val = $sambapassword->lmhash($val);
}
$new_entry = array( $attr => $val );
$result = @ldap_mod_add( $ldapserver->connect(), $dn, $new_entry );
if ($result)
header(sprintf('Location: edit.php?server_id=%s&dn=%s&modified_attrs[]=%s',
$ldapserver->server_id,$encoded_dn,$encoded_attr));
else
pla_error( $lang['failed_to_add_attr'],$ldapserver->error(),$ldapserver->errno() );
/**
* Check if we need to append the ;binary option to the name
* of some binary attribute
*
* @param object $ldapserver Server Object that the attribute is in.
* @param attr $attr Attribute to test to see if it requires ;binary added to it.
* @return bool
*/
function is_binary_option_required( $ldapserver, $attr ) {
// list of the binary attributes which need the ";binary" option
$binary_attributes_with_options = array(
// Superior: Ldapv3 Syntaxes (1.3.6.1.4.1.1466.115.121.1)
'1.3.6.1.4.1.1466.115.121.1.8' => "userCertificate",
'1.3.6.1.4.1.1466.115.121.1.8' => "caCertificate",
'1.3.6.1.4.1.1466.115.121.1.10' => "crossCertificatePair",
'1.3.6.1.4.1.1466.115.121.1.9' => "certificateRevocationList",
'1.3.6.1.4.1.1466.115.121.1.9' => "authorityRevocationList",
// Superior: Netscape Ldap attributes types (2.16.840.1.113730.3.1)
'2.16.840.1.113730.3.1.40' => "userSMIMECertificate"
);
// quick check by attr name (short circuits the schema check if possible)
//foreach( $binary_attributes_with_options as $oid => $name )
//if( 0 == strcasecmp( $attr, $name ) )
//return true;
$schema_attr = $ldapserver->getSchemaAttribute($attr);
if( ! $schema_attr )
return false;
$syntax = $schema_attr->getSyntaxOID();
if( isset( $binary_attributes_with_options[ $syntax ] ) )
return true;
return false;
}
?>

197
htdocs/add_attr_form.php Normal file
View File

@@ -0,0 +1,197 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/add_attr_form.php,v 1.12.2.1 2005/10/16 20:19:16 wurley Exp $
/**
* Displays a form for adding an attribute/value to an LDAP entry.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as GET vars:
* - dn (rawurlencoded)
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if( $ldapserver->isReadOnly() )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$dn = $_GET['dn'];
$encoded_dn = rawurlencode( $dn );
$rdn = get_rdn( $dn );
$friendly_attrs = process_friendly_attr_table();
include './header.php'; ?>
<body>
<h3 class="title"><?php echo sprintf( $lang['add_new_attribute'], htmlspecialchars( $rdn ) ); ?></b></h3>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $ldapserver->name; ?></b> &nbsp;&nbsp;&nbsp; <?php echo $lang['distinguished_name']; ?>: <b><?php echo htmlspecialchars( ( $dn ) ); ?></b></h3>
<?php $attrs = get_object_attrs( $ldapserver, $dn );
$oclasses = get_object_attr( $ldapserver, $dn, 'objectClass' );
if( ! is_array( $oclasses ) )
$oclasses = array( $oclasses );
$avail_attrs = array();
$schema_oclasses = $ldapserver->SchemaObjectClasses($dn);
foreach( $oclasses as $oclass ) {
$schema_oclass = $ldapserver->getSchemaObjectClass($oclass,$dn);
if( $schema_oclass && 0 == strcasecmp( 'objectclass', get_class( $schema_oclass ) ) )
$avail_attrs = array_merge( $schema_oclass->getMustAttrNames( $schema_oclasses ),
$schema_oclass->getMayAttrNames( $schema_oclasses ),
$avail_attrs );
}
$avail_attrs = array_unique( $avail_attrs );
$avail_attrs = array_filter( $avail_attrs, "not_an_attr" );
sort( $avail_attrs );
$avail_binary_attrs = array();
foreach( $avail_attrs as $i => $attr ) {
if( is_attr_binary( $ldapserver, $attr ) ) {
$avail_binary_attrs[] = $attr;
unset( $avail_attrs[ $i ] );
}
}
?>
<br />
<center>
<?php echo $lang['add_new_attribute'];
if( is_array( $avail_attrs ) && count( $avail_attrs ) > 0 ) { ?>
<br />
<br />
<form action="add_attr.php" method="post">
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo htmlspecialchars($dn); ?>" />
<select name="attr">
<?php $attr_select_html = '';
usort($avail_attrs,"sortAttrs");
foreach( $avail_attrs as $a ) {
// is there a user-friendly translation available for this attribute?
if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) {
$attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" .
htmlspecialchars($a) . ")";
} else {
$attr_display = htmlspecialchars( $a );
}
echo $attr_display;
$attr_select_html .= "<option>$attr_display</option>\n";
echo "<option value=\"" . htmlspecialchars($a) . "\">$attr_display</option>";
} ?>
</select>
<input type="text" name="val" size="20" />
<input type="submit" name="submit" value="<?php echo $lang['add']; ?>" class="update_dn" />
</form>
<?php } else { ?>
<br />
<br />
<small>(<?php echo $lang['no_new_attrs_available']; ?>)</small>
<br />
<br />
<?php } ?>
<?php echo $lang['add_new_binary_attr'];
if( count( $avail_binary_attrs ) > 0 ) { ?>
<!-- Form to add a new BINARY attribute to this entry -->
<form action="add_attr.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo $dn; ?>" />
<input type="hidden" name="binary" value="true" />
<br />
<select name="attr">
<?php $attr_select_html = '';
usort($avail_binary_attrs,"sortAttrs");
foreach( $avail_binary_attrs as $a ) {
// is there a user-friendly translation available for this attribute?
if( isset( $friendly_attrs[ strtolower( $a ) ] ) ) {
$attr_display = htmlspecialchars( $friendly_attrs[ strtolower( $a ) ] ) . " (" .
htmlspecialchars($a) . ")";
} else {
$attr_display = htmlspecialchars( $a );
}
echo $attr_display;
$attr_select_html .= "<option>$attr_display</option>\n";
echo "<option value=\"" . htmlspecialchars($a) . "\">$attr_display</option>";
} ?>
</select>
<input type="file" name="val" size="20" />
<input type="submit" name="submit" value="<?php echo $lang['add']; ?>" class="update_dn" />
<?php if( ! ini_get( 'file_uploads' ) )
echo "<br><small><b>" . $lang['warning_file_uploads_disabled'] . "</b></small><br>";
else
echo "<br><small><b>" . sprintf( $lang['max_file_size'], ini_get( 'upload_max_filesize' ) ) . "</b></small><br>";
?>
</form>
<?php } else { ?>
<br />
<br />
<small>(<?php echo $lang['no_new_binary_attrs_available']; ?>)</small>
<?php } ?>
</center>
</body>
</html>
<?php
/**
* Given an attribute $x, this returns true if it is NOT already specified
* in the current entry, returns false otherwise.
*
* @param attr $x
* @return bool
* @ignore
*/
function not_an_attr( $x ) {
global $attrs;
//return ! isset( $attrs[ strtolower( $x ) ] );
foreach( $attrs as $attr => $values )
if( 0 == strcasecmp( $attr, $x ) )
return false;
return true;
}
?>

64
htdocs/add_oclass.php Normal file
View File

@@ -0,0 +1,64 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/add_oclass.php,v 1.16.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* Adds an objectClass to the specified dn.
*
* Note, this does not do any schema violation checking. That is
* performed in add_oclass_form.php.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as POST vars:
* - dn (rawurlencoded)
* - new_oclass
* - new_attrs (array, if any)
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if( $ldapserver->isReadOnly() )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$dn = rawurldecode( $_POST['dn'] );
$new_oclass = unserialize( rawurldecode( $_POST['new_oclass'] ) );
$new_attrs = $_POST['new_attrs'];
$encoded_dn = rawurlencode( $dn );
if( is_attr_read_only( $ldapserver, 'objectClass' ) )
pla_error( "ObjectClasses are flagged as read only in the phpLDAPadmin configuration." );
$new_entry = array();
$new_entry['objectClass'] = $new_oclass;
$new_attrs_entry = array();
$new_oclass_entry = array( 'objectClass' => $new_oclass );
if( is_array( $new_attrs ) && count( $new_attrs ) > 0 )
foreach( $new_attrs as $attr => $val ) {
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $ldapserver, $dn, $attr, array($val) ) ) {
$search_href = sprintf('search.php?search=true&form=advanced&server_id=%s&filter=%s=%s',
$ldapserver->server_id,$attr,$badattr);
pla_error(sprintf( $lang['unique_attr_failed'],$attr,$badattr,$dn,$search_href ) );
}
$new_entry[ $attr ] = $val;
}
$add_res = @ldap_mod_add( $ldapserver->connect(), $dn, $new_entry );
if (! $add_res)
pla_error($lang['could_not_perform_ldap_mod_add'],$ldapserver->error(),$ldapserver->errno());
else
header(sprintf('Location: edit.php?server_id=%s&dn=%s&modified_attrs[]=objectclass',$ldapserver->server_id,$encoded_dn));
?>

137
htdocs/add_oclass_form.php Normal file
View File

@@ -0,0 +1,137 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/add_oclass_form.php,v 1.20.2.3 2005/10/22 11:55:31 wurley Exp $
/**
* This page may simply add the objectClass and take you back to the edit page,
* but, in one condition it may prompt the user for input. That condition is this:
*
* If the user has requested to add an objectClass that requires a set of
* attributes with 1 or more not defined by the object. In that case, we will
* present a form for the user to add those attributes to the object.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as REQUEST vars:
* - dn (rawurlencoded)
* - new_oclass
*
* @package phpLDAPadmin
* @todo If an attribute expects a DN, show the dn browser.
*/
/**
*/
require './common.php';
if( $ldapserver->isReadOnly() )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
if (! isset($_POST['new_oclass']))
pla_error( $lang['no_objectclasses_selected']);
$new_oclass = $_REQUEST['new_oclass'];
$dn = rawurldecode( $_REQUEST['dn'] );
$encoded_dn = rawurlencode( $dn );
/* Ensure that the object has defined all MUST attrs for this objectClass.
* If it hasn't, present a form to have the user enter values for all the
* newly required attrs. */
$entry = get_object_attrs( $ldapserver, $dn, true );
$current_attrs = array();
foreach( $entry as $attr => $junk )
$current_attrs[] = strtolower($attr);
// grab the required attributes for the new objectClass
$schema_oclasses = $ldapserver->SchemaObjectClasses();
$must_attrs = array();
foreach( $new_oclass as $oclass_name ) {
$oclass = $ldapserver->getSchemaObjectClass($oclass_name);
if( $oclass )
$must_attrs = array_merge( $must_attrs, $oclass->getMustAttrNames( $schema_oclasses ) );
}
$must_attrs = array_unique( $must_attrs );
// We don't want any of the attr meta-data, just the string
//foreach( $must_attrs as $i => $attr )
//$must_attrs[$i] = $attr->getName();
// build a list of the attributes that this new objectClass requires,
// but that the object does not currently contain
$needed_attrs = array();
foreach( $must_attrs as $attr ) {
$attr = $ldapserver->getSchemaAttribute($attr);
//echo "<pre>"; var_dump( $attr ); echo "</pre>";
// First, check if one of this attr's aliases is already an attribute of this entry
foreach( $attr->getAliases() as $alias_attr_name )
if( in_array( strtolower( $alias_attr_name ), $current_attrs ) )
// Skip this attribute since it's already in the entry
continue;
if( in_array( strtolower($attr->getName()), $current_attrs ) )
continue;
// We made it this far, so the attribute needs to be added to this entry in order
// to add this objectClass
$needed_attrs[] = $attr;
}
if( count( $needed_attrs ) > 0 ) {
include './header.php'; ?>
<body>
<h3 class="title"><?php echo $lang['new_required_attrs']; ?></h3>
<h3 class="subtitle"><?php echo $lang['requires_to_add'] . ' ' . count($needed_attrs) .
' ' . $lang['new_attributes']; ?></h3>
<small>
<?php echo $lang['new_required_attrs_instructions'];
echo ' ' . count( $needed_attrs ) . ' ' . $lang['new_attributes'] . ' ';
echo $lang['that_this_oclass_requires']; ?>
</small>
<br />
<br />
<form action="add_oclass.php" method="post">
<input type="hidden" name="new_oclass" value="<?php echo rawurlencode( serialize( $new_oclass ) ); ?>" />
<input type="hidden" name="dn" value="<?php echo $encoded_dn; ?>" />
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<table class="edit_dn" cellspacing="0">
<tr><th colspan="2"><?php echo $lang['new_required_attrs']; ?></th></tr>
<?php foreach( $needed_attrs as $count => $attr ) { ?>
<tr><td class="attr"><b><?php echo htmlspecialchars($attr->getName()); ?></b></td></tr>
<tr><td class="val"><input type="text" name="new_attrs[<?php echo htmlspecialchars($attr->getName()); ?>]" value="" size="40" /></tr>
<?php } ?>
</table>
<br />
<br />
<center><input type="submit" value="<?php echo $lang['add_oclass_and_attrs']; ?>" /></center>
</form>
</body>
</html>
<?php } else {
$add_res = @ldap_mod_add( $ldapserver->connect(), $dn, array( 'objectClass' => $new_oclass ) );
if (! $add_res)
pla_error("Could not perform ldap_mod_add operation.",
$ldapserver->error(),$ldapserver->errno());
else
header(sprintf('Location: edit.php?server_id=%s&dn=%s&modified_attrs[]=objectClass',
$ldapserver->server_id,$encoded_dn));
}
?>

74
htdocs/add_value.php Normal file
View File

@@ -0,0 +1,74 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/add_value.php,v 1.18.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* Adds a value to an attribute for a given dn.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as POST vars:
* - dn (rawurlencoded)
* - attr (rawurlencoded) the attribute to which we are adding a value
* - new_value (form element)
* - binary
*
* On success, redirect to the edit_dn page. On failure, echo an error.
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if( $ldapserver->isReadOnly() )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$attr = $_POST['attr'];
$new_value = $_POST['new_value'];
$dn = rawurldecode( $_POST['dn'] );
$is_binary_val = isset( $_POST['binary'] ) ? true : false;
$encoded_dn = rawurlencode( $dn );
$encoded_attr = rawurlencode( $attr );
if( is_attr_read_only( $ldapserver, $attr ) )
pla_error(sprintf($lang['attr_is_read_only'],htmlspecialchars( $attr )));
// special case for binary attributes:
// we must go read the data from the file.
if( $is_binary_val ) {
$file = $_FILES['new_value']['tmp_name'];
$f = fopen( $file, 'r' );
$binary_value = fread( $f, filesize( $file ) );
fclose( $f );
$new_value = $binary_value;
}
$new_entry = array( $attr => $new_value );
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $ldapserver, $dn, $attr, $new_entry ) ) {
$search_href = sprintf('search.php?search=true&form=advanced&server_id=%s&filter=%s=%s',$ldapserver->server_id,$attr,$badattr);
pla_error(sprintf( $lang['unique_attr_failed'],$attr,$badattr,$dn,$search_href ) );
}
// Call the custom callback for each attribute modification
// and verify that it should be modified.
if( run_hook ( 'pre_attr_add', array ( 'server_id' => $ldapserver->server_id, 'dn' => $dn, 'attr_name' => $attr,
'new_value' => $new_entry ) ) ) {
$add_result = @ldap_mod_add( $ldapserver->connect(), $dn, $new_entry );
if (! $add_result)
pla_error($lang['could_not_perform_ldap_mod_add'],
$ldapserver->error(),$ldapserver->errno());
}
header(sprintf('Location: edit.php?server_id=%s&dn=%s&modified_attrs[]=%s',
$ldapserver->server_id,$encoded_dn,$encoded_attr));
?>

View File

@@ -1,49 +1,53 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/add_value_form.php,v 1.26 2004/08/15 17:39:20 uugdave Exp $
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/add_value_form.php,v 1.32.2.2 2005/10/16 20:19:16 wurley Exp $
/*
* add_value_form.php
/**
* Displays a form to allow the user to enter a new value to add
* to the existing list of values for a multi-valued attribute.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as GET vars:
* - dn (rawurlencoded)
* - attr (rawurlencoded) the attribute to which we are adding a value
* - server_id
* - attr (rawurlencoded) the attribute to which we are adding a value
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if( $ldapserver->isReadOnly() )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$attr = $_GET['attr'];
$dn = isset( $_GET['dn'] ) ? $_GET['dn'] : null;
$encoded_dn = rawurlencode( $dn );
$server_id = $_GET['server_id'];
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
if( null != $dn ) {
$rdn = get_rdn( $dn );
} else {
$rdn = null;
}
$server_name = $servers[$server_id]['name'];
$attr = $_GET['attr'];
$encoded_attr = rawurlencode( $attr );
$current_values = get_object_attr( $server_id, $dn, $attr );
$num_current_values = ( is_array($current_values) ? count($current_values) : 1 );
if (! is_null($dn))
$rdn = get_rdn( $dn );
else
$rdn = null;
$current_values = get_object_attr( $ldapserver, $dn, $attr );
$num_current_values = ( is_array($current_values) ? count($current_values) : 0 );
$is_object_class = ( 0 == strcasecmp( $attr, 'objectClass' ) ) ? true : false;
$is_jpeg_photo = is_jpeg_photo( $server_id, $attr ); //( 0 == strcasecmp( $attr, 'jpegPhoto' ) ) ? true : false;
$is_jpeg_photo = is_jpeg_photo( $ldapserver, $attr ); //( 0 == strcasecmp( $attr, 'jpegPhoto' ) ) ? true : false;
if( is_server_read_only( $server_id ) )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( $is_object_class ) {
if( $is_object_class ) {
// fetch all available objectClasses and remove those from the list that are already defined in the entry
$schema_oclasses = get_schema_objectclasses( $server_id );
$schema_oclasses = $ldapserver->SchemaObjectClasses();
foreach( $current_values as $oclass )
unset( $schema_oclasses[ strtolower( $oclass ) ] );
} else {
$schema_attr = get_schema_attribute( $server_id, $attr );
$schema_attr = $ldapserver->getSchemaAttribute($attr);
}
include './header.php'; ?>
@@ -52,62 +56,77 @@ include './header.php'; ?>
<h3 class="title">
<?php echo $lang['add_new']; ?>
<b><?php echo htmlspecialchars($attr); ?></b>
<b><?php echo htmlspecialchars($attr); ?></b>
<?php echo $lang['value_to']; ?>
<b><?php echo htmlspecialchars($rdn); ?></b></h3>
<h3 class="subtitle">
<?php echo $lang['server']; ?>:
<b><?php echo $server_name; ?></b> &nbsp;&nbsp;&nbsp;
<?php echo $lang['server']; ?>:
<b><?php echo $ldapserver->name; ?></b> &nbsp;&nbsp;&nbsp;
<?php echo $lang['distinguished_name']; ?>: <b><?php echo htmlspecialchars( $dn ); ?></b></h3>
<?php echo $lang['current_list_of']; ?> <b><?php echo $num_current_values; ?></b>
<?php echo $lang['current_list_of']; ?> <b><?php echo $num_current_values; ?></b>
<?php echo $lang['values_for_attribute']; ?> <b><?php echo htmlspecialchars($attr); ?></b>:
<?php if( $is_jpeg_photo ) { ?>
<table><td>
<?php draw_jpeg_photos( $server_id, $dn, $attr, false ); ?>
</td></table>
<!-- Temporary warning until we find a way to add jpegPhoto values without an INAPROPRIATE_MATCHING error -->
<?php if ($num_current_values) { ?>
<?php if( $is_jpeg_photo ) { ?>
<table><tr><td>
<?php draw_jpeg_photos( $ldapserver, $dn, $attr, false ); ?>
</td></tr></table>
<!-- Temporary warning until we find a way to add jpegPhoto values without an INAPROPRIATE_MATCHING error -->
<p><small>
<?php echo $lang['inappropriate_matching_note']; ?>
</small></p>
<!-- End of temporary warning -->
<?php } else if( is_attr_binary( $server_id, $attr ) ) { ?>
<?php } else if( is_attr_binary( $ldapserver, $attr ) ) { ?>
<ul>
<?php if( is_array( $vals ) ) { for( $i=1; $i<=count($vals); $i++ ) {
$href = "download_binary_attr.php?server_id=$server_id&amp;dn=$encoded_dn&amp;attr=$attr&amp;value_num=" . ($i-1); ?>
<li><a href="<?php echo $href; ?>"><img src="images/save.png" /> <?php echo $lang['download_value'] . ' ' . $i; ?>)</a></li>
<?php } } else {
$href = "download_binary_attr.php?server_id=$server_id&amp;dn=$encoded_dn&amp;attr=$attr"; ?>
<?php if( is_array( $vals ) ) {
for( $i=1; $i<=count($vals); $i++ ) {
$href = sprintf('download_binary_attr.php?server_id=%s&amp;dn=%s&amp;attr=%s&amp;value_num=%s',
$ldapserver->server_id,$encoded_dn,$attr,$i-1); ?>
<li><a href="<?php echo $href; ?>"><img src="images/save.png" /> <?php echo $lang['download_value'] . ' ' . $i; ?>)</a></li>
<?php }
} else {
$href = sprintf('download_binary_attr.php?server_id=%s&amp;dn=%s&amp;attr=%s',$ldapserver->server_id,$encoded_dn,$attr); ?>
<li><a href="<?php echo $href; ?>"><img src="images/save.png" /> <?php echo $lang['download_value']; ?></a></li>
<?php } ?>
</ul>
<!-- Temporary warning until we find a way to add jpegPhoto values without an INAPROPRIATE_MATCHING error -->
<!-- Temporary warning until we find a way to add jpegPhoto values without an INAPROPRIATE_MATCHING error -->
<p><small>
<?php echo $lang['inappropriate_matching_note']; ?>
</small></p>
<!-- End of temporary warning -->
<?php } else { ?>
<ul class="current_values">
<?php if( is_array( $current_values ) ) /*$num_current_values > 1 )*/ {
foreach( $current_values as $val ) { ?>
<ul class="current_values">
<?php if( is_array( $current_values ) ) /*$num_current_values > 1 )*/ {
foreach( $current_values as $val ) { ?>
<li><nobr><?php echo htmlspecialchars(($val)); ?></nobr></li>
<?php } ?>
<?php } ?>
<?php } else { ?>
<?php } else { ?>
<li><nobr><?php echo htmlspecialchars(($current_values)); ?></nobr></li>
<?php } ?>
<?php } ?>
</ul>
</ul>
<?php } ?>
<?php } else { ?>
<br />
<br />
<?php } ?>
<?php echo $lang['enter_value_to_add']; ?>
<br />
@@ -116,53 +135,58 @@ include './header.php'; ?>
<?php if( $is_object_class ) { ?>
<form action="add_oclass_form.php" method="post" class="new_value">
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo $encoded_dn; ?>" />
<select name="new_oclass">
<select name="new_oclass[]" multiple="true" size="15">
<?php foreach( $schema_oclasses as $name => $oclass ) {
// exclude any structural ones, as they'll only generate an LDAP_OBJECT_CLASS_VIOLATION
if ($oclass->type == "structural") continue;
?>
if ($oclass->getType() == "structural") continue; ?>
<option value="<?php echo $oclass->getName(); ?>"><?php echo $oclass->getName(); ?></option>
<?php } ?>
</select> <input type="submit" value="<?php echo $lang['add_new_objectclass']; ?>" />
</select>
<br />
<?php if( show_hints() ) { ?>
<input type="submit" value="<?php echo $lang['add_new_objectclass']; ?>" />
<br />
<?php if ($config->GetValue('appearance','show_hints')) { ?>
<small>
<br />
<img src="images/light.png" /><span class="hint"><?php echo $lang['new_required_attrs_note']; ?></span>
</small>
<?php } ?>
<?php }
<?php } else { ?>
} else { ?>
<form action="add_value.php" method="post" class="new_value" name="new_value_form"<?php
if( is_attr_binary( $server_id, $attr ) ) echo "enctype=\"multipart/form-data\""; ?>>
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<form action="add_value.php" method="post" class="new_value" name="new_value_form"<?php
if( is_attr_binary( $ldapserver, $attr ) ) echo "enctype=\"multipart/form-data\""; ?>>
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo $encoded_dn; ?>" />
<input type="hidden" name="attr" value="<?php echo $encoded_attr; ?>" />
<?php if( is_attr_binary( $server_id, $attr ) ) { ?>
<input type="file" name="new_value" />
<input type="hidden" name="binary" value="true" />
<?php } else { ?>
<?php if( is_multi_line_attr( $attr, $server_id ) ) { ?>
<textarea name="new_value" rows="3" cols="30"></textarea>
<?php } else { ?>
<input type="text" <?php
if( $schema_attr->getMaxLength() )
echo "maxlength=\"" . $schema_attr->getMaxLength() . "\" ";
?>name="new_value" size="40" value="" /><?php
// draw the "browse" button next to this input box if this attr houses DNs:
if( is_dn_attr( $server_id, $attr ) ) draw_chooser_link( "new_value_form.new_value", false ); ?>
<?php } ?>
<?php } ?>
<?php if( is_attr_binary( $ldapserver, $attr ) ) { ?>
<input type="file" name="new_value" />
<input type="hidden" name="binary" value="true" />
<?php } else {
if( is_multi_line_attr( $attr, $ldapserver->server_id ) ) { ?>
<textarea name="new_value" rows="3" cols="30"></textarea>
<?php } else { ?>
<input type="text" <?php if( $schema_attr->getMaxLength() ) echo "maxlength=\"" . $schema_attr->getMaxLength() . "\" "; ?>name="new_value" size="40" value="" />
<?php // draw the "browse" button next to this input box if this attr houses DNs:
if( is_dn_attr( $ldapserver, $attr ) )
draw_chooser_link( "new_value_form.new_value", false ); ?>
<?php }
} ?>
<input type="submit" name="submit" value="<?php echo $lang['add_new_value']; ?>" />
<br />
@@ -176,7 +200,7 @@ include './header.php'; ?>
<?php } ?>
<?php if( $schema_attr->getMaxLength() ) { ?>
<small><b><?php echo $lang['maximum_length']; ?>:</b> <?php echo number_format( $schema_attr->getMaxLength() ); ?> <?php echo $lang['characters']; ?></small><br />
<small><b><?php echo $lang['maximum_length']; ?>:</b> <?php echo number_format( $schema_attr->getMaxLength() ); ?> <?php echo $lang['characters']; ?></small><br />
<?php } ?>
</form>

42
htdocs/collapse.php Normal file
View File

@@ -0,0 +1,42 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/collapse.php,v 1.13 2005/07/22 05:55:19 wurley Exp $
/**
* This script alters the session variable 'tree', collapsing it
* at the dn specified in the query string.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as GET vars:
* - dn (rawurlencoded)
*
* Note: this script is equal and opposite to expand.php
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
$dn = $_GET['dn'];
$encoded_dn = rawurlencode($dn);
initialize_session_tree();
if (array_key_exists($dn,$_SESSION['tree'][$ldapserver->server_id]))
unset($_SESSION['tree'][$ldapserver->server_id][$dn]);
/* This is for Opera. By putting "random junk" in the query string, it thinks
that it does not have a cached version of the page, and will thus
fetch the page rather than display the cached version */
$time = gettimeofday();
$random_junk = md5(strtotime('now') . $time['usec']);
/* If cookies were disabled, build the url parameter for the session id.
It will be append to the url to be redirect */
$id_session_param = "";
if (SID != "")
$id_session_param = "&".session_name()."=".session_id();
header(sprintf('Location:tree.php?foo=%s#%s_%s%s',$random_junk,$ldapserver->server_id,$encoded_dn,$id_session_param));
?>

5
htdocs/common.php Normal file
View File

@@ -0,0 +1,5 @@
<?php
# This is a temporary file
@define('LIBDIR',sprintf('%s/',realpath('../lib/')));
require LIBDIR.'common.php';
?>

579
htdocs/compare.php Normal file
View File

@@ -0,0 +1,579 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/compare.php,v 1.10.2.3 2005/10/16 20:19:16 wurley Exp $
/**
* Compare two DNs - the destination DN is editable.
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
$dn_src = isset($_POST['dn_src']) ? $_POST['dn_src'] : null;
$dn_dst = isset($_POST['dn_dst']) ? $_POST['dn_dst'] : null;
$encoded_dn_src = rawurlencode($dn_src);
$encoded_dn_dst = rawurlencode($dn_dst);
$server_id_src = (isset($_POST['server_id_src']) ? $_POST['server_id_src'] : '');
$server_id_dst = (isset($_POST['server_id_dst']) ? $_POST['server_id_dst'] : '');
$ldapserver_src = $ldapservers->Instance($server_id_src);
if ( ! $ldapserver_src->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$ldapserver_dst = $ldapservers->Instance($server_id_dst);
if ( ! $ldapserver_src->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
dn_exists($ldapserver_src,$dn_src) or pla_error(sprintf($lang['no_such_entry'],pretty_print_dn($dn_src)));
dn_exists($ldapserver_dst,$dn_dst) or pla_error(sprintf($lang['no_such_entry'],pretty_print_dn($dn_dst)));
$friendly_attrs = process_friendly_attr_table();
$attrs_src = get_object_attrs($ldapserver_src,$dn_src,false,$config->GetValue('deref','view'));
$attrs_dst = get_object_attrs($ldapserver_dst,$dn_dst,false,$config->GetValue('deref','view'));
# Get a list of all attributes.
$attrs_all = array_keys($attrs_src);
foreach ($attrs_dst as $key => $val)
if (! in_array($key,$attrs_all))
$attrs_all[] = $key;
include './header.php';
?>
<body>
<table class="comp_dn" border=0>
<tr><td colspan=6>
<h3 class="title"><?php echo $lang['comparing']; ?></h3>
</td></tr>
<tr>
<td colspan=2 width=20%>
<h3 class="subtitle"><?php echo $lang['attribute']; ?><br />&nbsp;</h3>
</td>
<td colspan=2 width=40%>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $ldapserver_src->name; ?></b><br /><?php echo $lang['distinguished_name'];?>: <b><?php echo htmlspecialchars(($dn_src)); ?></b></h3>
</td>
<td colspan=2 width=40%>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $ldapserver_dst->name; ?></b><br /><?php echo $lang['distinguished_name'];?>: <b><?php echo htmlspecialchars(($dn_dst)); ?></b></h3>
</td>
</tr>
<tr>
<td colspan=6 align=right>
<form action="compare.php" method="post" name="compare_form">
<input type="hidden" name="server_id_src" value="<?php echo $ldapserver_dst->server_id; ?>" />
<input type="hidden" name="server_id_dst" value="<?php echo $ldapserver_src->server_id; ?>" />
<input type="hidden" name="dn_src" value="<?php echo htmlspecialchars( $dn_dst ); ?>" />
<input type="hidden" name="dn_dst" value="<?php echo htmlspecialchars( $dn_src ); ?>" />
<input type="submit" value="<?php echo $lang['switch_entry']; ?>" />
</form>
</td>
</tr>
<?php
if(! $attrs_all || ! is_array($attrs_all)) {
printf('<tr><td colspan="2">(%s)</td></tr>',$lang['no_attributes']);
print '</table>';
print '</html>';
die();
}
sort($attrs_all);
# Work through each of the attributes.
foreach ($attrs_all as $attr) {
flush();
# If this is the DN, get the next attribute.
if (! strcasecmp($attr,'dn'))
continue;
# Has the config.php specified that this attribute is to be hidden or shown?
if (is_attr_hidden($ldapserver_src,$attr) || is_attr_hidden($ldapserver_dst,$attr))
continue;
?>
<!-- Begin Attribute -->
<tr>
<?php foreach (array('src','dst') as $side) { ?>
<?php
if ($side == 'dst' && ! $ldapserver_dst->isReadOnly()) { ?>
<form action="update_confirm.php" method="post" name="edit_form">
<input type="hidden" name="server_id" value="<?php echo $ldapserver_dst->server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo $dn_dst; ?>" />
<?php }
$schema_attr_src = $ldapserver_src->getSchemaAttribute($attr,$dn_src);
$schema_attr_dst = $ldapserver_dst->getSchemaAttribute($attr,$dn_dst);
# Setup the $attr_note, which will be displayed to the right of the attr name (if any)
$attr_note = '';
$required_note = '';
# is there a user-friendly translation available for this attribute?
if (isset($friendly_attrs[strtolower($attr)])) {
$attr_display = $friendly_attrs[strtolower($attr)];
$attr_note = sprintf('<acronym title="%s">alias</acronym>',sprintf($lang['alias_for'],$attr_display,$attr));
} else {
$attr_note = '';
$attr_display = $attr;
}
# is this attribute required by an objectClass?
$required_by = '';
switch ($side) {
case 'src':
$ldapserver = $ldapserver_src;
if ($schema_attr_src)
foreach ($schema_attr_src->getRequiredByObjectClasses() as $required)
if (isset($attrs_src['objectClass']) && in_array(strtolower($required),arrayLower($attrs_src['objectClass'])))
$required_by .= $required . ' ';
# It seems that some LDAP servers (Domino) returns attributes in lower case?
elseif( isset($attrs_src['objectclass']) && in_array(strtolower($required),arrayLower($attrs_src['objectclass'])))
$required_by .= $required . ' ';
break;
case 'dst':
$ldapserver = $ldapserver_dst;
if ($schema_attr_dst)
foreach ($schema_attr_dst->getRequiredByObjectClasses() as $required)
if (isset($attrs_dst['objectClass']) && in_array(strtolower($required),arrayLower($attrs_dst['objectClass'])))
$required_by .= $required . ' ';
# It seems that some LDAP servers (Domino) returns attributes in lower case?
elseif (isset($attrs_dst['objectclass']) && in_array(strtolower($required),arrayLower($attrs_dst['objectclass'])))
$required_by .= $required . ' ';
break;
}
if ($side == 'src') { ?>
<td class="attr">
<?php $schema_href="schema.php?server_id=$server_id_src&amp;view=attributes&amp;viewvalue=".real_attr_name($attr); ?>
<b><a title="<?php echo sprintf($lang['attr_name_tooltip'],$attr) ?>" href="<?php echo $schema_href; ?>"><?php echo $attr_display; ?></a></b>
</td>
<td class="attr_note">
<sup><small><?php echo $attr_note; ?></small></sup>
</td>
<?php }
if ($required_by) {
$required_note .= sprintf('<acronym title="%s">%s</acronym>',sprintf($lang['required_for'],$required_by),$lang['required']);
?>
<td colspan=2 class="attr_note">
<sup><small><?php echo $required_note; ?></small></sup>
</td>
<?php } else { ?>
<td colspan=2 class="attr_note">&nbsp;</td>
<?php } ?>
<?php if (is_attr_read_only($ldapserver,$attr)) { ?>
<small>(<acronym title="<?php echo $lang['read_only_tooltip']; ?>"><?php echo $lang['read_only']; ?></acronym>)</small>
<?php } ?>
</td>
<?php } ?>
</tr>
<!-- End of Attribute -->
<!-- Begin Values -->
<tr>
<?php
foreach (array('src','dst') as $side) {
$vals = null; ?>
<?php
# If this attribute isnt set, then show a blank.
$toJump = 0;
switch ($side) {
case 'src':
print '<td colspan=2>&nbsp</td><td class="attr">';
if (! isset($attrs_src[$attr])) {
echo "<small>&lt;". $lang['no_value']."&gt;</small></td>";
$toJump = 1;
continue;
} else
$vals = $attrs_src[$attr];
$ldapserver = $ldapserver_src;
break;
case 'dst':
print '<td colspan=2>&nbsp</td><td class="val">';
if (! isset($attrs_dst[$attr])) {
echo "<small>&lt;". $lang['no_value']."&gt;</small></td>";
$toJump = 1;
continue;
} else
$vals = $attrs_dst[$attr];
$ldapserver = $ldapserver_dst;
break;
}
if ($toJump) continue;
/*
* Is this attribute a jpegPhoto?
*/
if (is_jpeg_photo($ldapserver,$attr)) {
switch ($side) {
case 'src':
// Don't draw the delete buttons if there is more than one jpegPhoto
// (phpLDAPadmin can't handle this case yet)
draw_jpeg_photos( $ldapserver, $dn_src, $attr, false );
break;
case 'dst':
if( $ldapserver_dst->isReadOnly() || is_attr_read_only( $ldapserver_dst, $attr ) )
draw_jpeg_photos( $ldapserver, $dn_dst, $attr, false );
else
draw_jpeg_photos( $ldapserver, $dn_dst, $attr, true );
break;
}
// proceed to the next attribute
echo "</td>\n";
continue;
}
/*
* Is this attribute binary?
*/
if( is_attr_binary( $ldapserver, $attr ) ) {
switch ($side) {
case 'src':
$href = sprintf("download_binary_attr.php?server_id=%s&dn=%s&attr=%s",$ldapserver->server_id,$encoded_dn_src,$attr);
break;
case 'dst':
$href = sprintf("download_binary_attr.php?server_id=%s&dn=%s&attr=%s",$ldapserver->server_id,$encoded_dn_dst,$attr);
break;
}
?>
<small>
<?php echo $lang['binary_value']; ?><br />
<?php if( count( $vals ) > 1 ) { for( $i=1; $i<=count($vals); $i++ ) { ?>
<a href="<?php echo $href . "&amp;value_num=$i"; ?>"><img
src="images/save.png" /> <?php echo $lang['download_value']; ?>(<?php echo $i; ?>)</a><br />
<?php } } else { ?>
<a href="<?php echo $href; ?>"><img src="images/save.png" /> <?php echo $lang['download_value']; ?></a><br />
<?php }
if( $side == 'dst' && ! $ldapserver_dst->isReadOnly() && ! is_attr_read_only( $ldapserver, $attr ) ) { ?>
<a href="javascript:deleteAttribute( '<?php echo $attr; ?>' );" style="color:red;"><img src="images/trash.png" /> <?php echo $lang['delete_attribute']; ?></a>
<?php } ?>
</small>
</td>
<?php continue;
}
/*
* Note: at this point, the attribute must be text-based (not binary or jpeg)
*/
/*
* If this server is in read-only mode or this attribute is configured as read_only,
* simply draw the attribute values and continue.
*/
if( $side == 'dst' && ($ldapserver->isReadOnly() || is_attr_read_only( $ldapserver, $attr )) ) {
if( is_array( $vals ) ) {
foreach( $vals as $i => $val ) {
if( trim( $val ) == "" )
echo "<span style=\"color:red\">[" . $lang['empty'] . "]</span><br />\n";
elseif( 0 == strcasecmp( $attr, 'userPassword' ) && $config->GetValue('appearance','obfuscate_password_display'))
echo preg_replace( '/./', '*', $val ) . "<br />";
else
echo htmlspecialchars( $val ) . "<br />";
}
} else {
if( 0 == strcasecmp( $attr, 'userPassword' ) && $config->GetValue('appearance','obfuscate_password_display'))
echo preg_replace( '/./', '*', $vals ) . "<br />";
else
echo $vals . "<br />";
}
echo "</td>";
continue;
}
/*
* Is this a userPassword attribute?
*/
if( ! strcasecmp( $attr, 'userpassword' ) ) {
$user_password = $vals[0];
$enc_type = get_enc_type( $user_password );
// Set the default hashing type if the password is blank (must be newly created)
if( $user_password == '' ) {
$enc_type = get_default_hash( $server_id );
}
if ($side == 'dst') { ?>
<input type="hidden" name="old_values[userpassword]" value="<?php echo htmlspecialchars($user_password); ?>" />
<!-- Special case of enc_type to detect changes when user changes enc_type but not the password value -->
<input size="38" type="hidden" name="old_enc_type" value="<?php echo ($enc_type==''?'clear':$enc_type); ?>" />
<?php }
if( obfuscate_password_display( $enc_type ) ) {
echo htmlspecialchars( preg_replace( "/./", "*", $user_password ) );
} else {
echo htmlspecialchars( $user_password );
} ?>
<br />
<?php if ($side == 'dst') { ?>
<input style="width: 260px" type="password" name="new_values[userpassword]" value="<?php echo htmlspecialchars( $user_password ); ?>" />
<?php echo enc_type_select_list($enc_type);
} ?>
<br />
<script language="javascript">
<!--
function passwordComparePopup()
{
mywindow = open( 'password_checker.php', 'myname', 'resizable=no,width=450,height=200,scrollbars=1' );
mywindow.location.href = 'password_checker.php?hash=<?php echo base64_encode($user_password); ?>&base64=true';
if( mywindow.opener == null )
mywindow.opener = self;
}
-->
</script>
<small><a href="javascript:passwordComparePopup()"><?php echo $lang['t_check_pass']; ?></a></small>
</td>
<?php continue;
}
/*
* Is this a boolean attribute?
*/
if( is_attr_boolean( $ldapserver, $attr) ) {
$val = $vals[0];
if ($side = 'dst') {?>
<input type="hidden" name="old_values[<?php echo htmlspecialchars( $attr ); ?>]" value="<?php echo htmlspecialchars($val); ?>" />
<select name="new_values[<?php echo htmlspecialchars( $attr ); ?>]">
<option value="TRUE"<?php echo ($val=='TRUE' ? ' selected' : ''); ?>><?php echo $lang['true']; ?></option>
<option value="FALSE"<?php echo ($val=='FALSE' ? ' selected' : ''); ?>><?php echo $lang['false']; ?></option>
<option value="">(<?php echo $lang['none_remove_value']; ?>)</option>
</select>
<?php } ?>
</td>
<?php continue;
}
/*
* End of special case attributes (non plain text).
*/
foreach( $vals as $i => $val ) {
if ($side == 'dst') {
$input_name = "new_values[" . htmlspecialchars( $attr ) . "][$i]";
// We smack an id="..." tag in here that doesn't have [][] in it to allow the
// draw_chooser_link() to identify it after the user clicks.
$input_id = "new_values_" . htmlspecialchars($attr) . "_" . $i; ?>
<!-- The old_values array will let update.php know if the entry contents changed
between the time the user loaded this page and saved their changes. -->
<input type="hidden" name="old_values[<?php echo htmlspecialchars( $attr ); ?>][<?php echo $i; ?>]" value="<?php echo htmlspecialchars($val); ?>" />
<?php }
// Is this value is a structural objectClass, make it read-only
if( 0 == strcasecmp( $attr, 'objectClass' ) ) { ?>
<a title="<?php echo $lang['view_schema_for_oclass']; ?>" href="schema.php?server_id=<?php echo $ldapserver->server_id; ?>&amp;view=objectClasses&amp;viewvalue=<?php echo htmlspecialchars( $val ); ?>"><img src="images/info.png" /></a>
<?php $schema_object = $ldapserver->getSchemaObjectClass($val);
if ($schema_object->getType() == 'structural') {
echo "$val <small>(<acronym title=\"" . sprintf( $lang['structural_object_class_cannot_remove'] ) . "\">" . $lang['structural'] . "</acronym>)</small><br />";
if ($side == 'dst') {?>
<input type="hidden" name="<?php echo $input_name; ?>" id="<?php echo $input_id; ?>" value="<?php echo htmlspecialchars($val); ?>" />
<?php }
continue;
}
}
if( is_dn_string( $val ) || is_dn_attr( $ldapserver, $attr ) ) { ?>
<a title="<?php echo sprintf( $lang['go_to_dn'], htmlspecialchars($val) ); ?>" href="edit.php?server_id=<?php echo $ldapserver->server_id; ?>&amp;dn=<?php echo rawurlencode($val); ?>"><img style="vertical-align: top" src="images/go.png" /></a>
<?php } elseif( is_mail_string( $val ) ) { ?>
<a href="mailto:<?php echo htmlspecialchars($val); ?>"><img style="vertical-align: center" src="images/mail.png" /></a>
<?php } elseif( is_url_string( $val ) ) { ?>
<a href="<?php echo htmlspecialchars($val); ?>" target="new"><img style="vertical-align: center" src="images/dc.png" /></a>
<?php }
if( is_multi_line_attr( $attr, $val, $ldapserver->server_id ) ) {
if ($side == 'dst') {?>
<textarea class="val" rows="3" cols="30" name="<?php echo $input_name; ?>" id="<?php echo $input_id; ?>"><?php echo htmlspecialchars($val); ?></textarea>
<?php } else {
echo htmlspecialchars($val);
}
} else {
if ($side == 'dst') {?>
<input type="text" class="val" name="<?php echo $input_name; ?>" id="<?php echo $input_id; ?>" value="<?php echo htmlspecialchars($val); ?>" />
<?php } else {
echo htmlspecialchars($val);
}
}
// draw a link for popping up the entry browser if this is the type of attribute
// that houses DNs.
if( is_dn_attr( $ldapserver, $attr ) )
draw_chooser_link( "edit_form.$input_id", false ); ?>
<br />
<?php } ?>
</td>
<?php } /* end foreach value */ ?>
</tr>
<?php
/* Draw the "add value" link under the list of values for this attributes */
if (! $ldapserver_dst->isReadOnly()) {
// First check if the required objectClass is in this DN
$isOK = 0;
$src_oclass = array();
$attr_object = $ldapserver_dst->getSchemaAttribute($attr,$dn_dst);
foreach ($attr_object->used_in_object_classes as $oclass) {
if (in_array(strtolower($oclass),arrayLower($attrs_dst['objectClass']))) {
$isOK = 1;
break;
} else {
// Find oclass that the source has that provides this attribute.
if (in_array($oclass,$attrs_src['objectClass']))
$src_oclass[] = $oclass;
}
}
print "<tr><td colspan=2></td><td colspan=2>&nbsp</td><td>&nbsp;</td><td>";
if (! $isOK) {
if (count($src_oclass) == 1) {
$add_href = "add_oclass_form.php?server_id=$ldapserver_dst->server_id&dn=$encoded_dn_dst&new_oclass=$src_oclass[0]";
} else {
$add_href = "add_value_form.php?server_id=$ldapserver_dst->server_id&dn=$encoded_dn_dst&attr=objectClass";
}
if ($attr == 'objectClass')
printf('<div class="add_oclass">(<a href="%s" title="%s">%s</a>)</div>',$add_href,$lang['add_oclass_and_attrs'],$lang['add_value']);
else
printf('<div class="add_oclass">(<a href="%s" title="%s">%s</a>)</div>',$add_href,sprintf($lang['need_oclass'], implode(" ",$src_oclass)),$lang['add_new_objectclass']);
} else {
if(! $schema_attr_dst->getIsSingleValue() || (! isset($vals))) {
$add_href = "add_value_form.php?server_id=$ldapserver_dst->server_id&dn=$encoded_dn_dst&attr=" . rawurlencode( $attr );
printf('<div class="add_value">(<a href="%s" title="%s">%s</a>)</div>',
$add_href,sprintf($lang['add_value_tooltip'],$attr),$lang['add_value']);
}
}
}
print "</td></tr>"; ?>
</td>
<?php flush(); ?>
</tr>
<?php } /* End foreach( $attrs as $attr => $vals ) */
if( ! $ldapserver_dst->isReadOnly( ) ) { ?>
<td colspan="2">&nbsp</td><td colspan=2><center><input type="submit" value="<?php echo $lang['save_changes']; ?>" /></center></td></tr></form>
<?php } ?>
</table>
<?php /* If this entry has a binary attribute, we need to provide a form for it to submit when deleting it. */ ?>
<script language="javascript">
//<!--
function deleteAttribute( attrName )
{
if( confirm( "<?php echo $lang['really_delete_attribute']; ?> '" + attrName + "'?" ) ) {
document.delete_attribute_form.attr.value = attrName;
document.delete_attribute_form.submit();
}
}
//-->
</script>
<!-- This form is submitted by JavaScript when the user clicks "Delete attribute" on a binary attribute -->
<form name="delete_attribute_form" action="delete_attr.php" method="post">
<input type="hidden" name="server_id" value="<?php echo $ldapserver_dst->server_id; ?>" />
<input type="hidden" name="dn" value="<?php echo $dn_dst; ?>" />
<input type="hidden" name="attr" value="FILLED IN BY JAVASCRIPT" />
</form>
</body>
</html>

79
htdocs/compare_form.php Normal file
View File

@@ -0,0 +1,79 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/compare_form.php,v 1.2 2005/07/22 05:47:43 wurley Exp $
/**
* Compares to DN entries side by side.
*
* - dn (rawurlencoded)
* - server_id
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$dn = (isset($_GET['dn']) ? $_GET['dn'] : '');
$encoded_dn = rawurlencode( $dn );
$rdn = get_rdn( $dn );
$container = get_container( $dn );
$attrs = get_object_attrs( $ldapserver, $dn );
$select_server_html = server_select_list($ldapserver->server_id,true,'server_id_dst');
include './header.php'; ?>
<body>
<h3 class="title"><?php echo $lang['compare_dn']. '&nbsp;' . $rdn; ?></h3>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $ldapserver->name; ?></b>
<?php if ($dn) { ?>
&nbsp;&nbsp;&nbsp; <?php echo $lang['distinguished_name']?>: <b><?php echo $dn; ?></b>
<?php } ?>
</h3>
<center>
<?php echo $lang['compare']; ?> <b><?php echo htmlspecialchars( $rdn ); ?></b> <?php echo $lang['with']; ?>:<br />
<br />
<form action="compare.php" method="post" name="compare_form">
<input type="hidden" name="server_id_src" value="<?php echo $ldapserver->server_id; ?>" />
<table style="border-spacing: 10px">
<tr>
<?php if (! $dn) { ?>
<td><acronym title="<?php echo $lang['compf_dn_tooltip']; ?>"><?php echo $lang['compf_source_dn']; ?></acronym>:</td>
<td>
<input type="text" name="dn_src" size="45" value="<?php echo htmlspecialchars( $dn ); ?>" />
<?php draw_chooser_link( 'compare_form.dn_src', 'true', $rdn ); ?></td>
</td>
<?php } else { ?>
<input type="hidden" name="dn_src" value="<?php echo htmlspecialchars( $dn ); ?>" />
<?php } ?>
</tr>
<tr>
<td><acronym title="<?php echo $lang['compf_dn_tooltip']; ?>"><?php echo $lang['copyf_dest_dn']; ?></acronym>:</td>
<td>
<input type="text" name="dn_dst" size="45" value="" />
<?php draw_chooser_link( 'compare_form.dn_dst', 'true', '' ); ?></td>
</td>
</tr>
<tr>
<td><?php echo $lang['copyf_dest_server']?>:</td>
<td><?php echo $select_server_html; ?></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="<?php echo $lang['compare']; ?>" /></td>
</tr>
</table>
</form>
</center>
</body>
</html>

222
htdocs/copy.php Normal file
View File

@@ -0,0 +1,222 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/copy.php,v 1.35.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* Copies a given object to create a new one.
*
* Vars that come in as POST vars
* - source_dn (rawurlencoded)
* - new_dn (form element)
* - server_id
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
$server_id_src = (isset($_POST['server_id']) ? $_POST['server_id'] : '');
$server_id_dst = (isset($_POST['dest_server_id']) ? $_POST['dest_server_id'] : '');
$ldapserver_src = $ldapservers->Instance($server_id_src);
$ldapserver_dst = $ldapservers->Instance($server_id_dst);
if ($ldapserver_dst->isReadOnly())
pla_error($lang['copy_server_read_only']);
if (! $ldapserver_src->haveAuthInfo() || ! $ldapserver_dst->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$dn_src = $_POST['old_dn'];
$dn_dst = $_POST['new_dn'];
$do_recursive = (isset($_POST['recursive']) && $_POST['recursive'] == 'on') ? true : false;
$do_remove = (isset($_POST['remove']) && $_POST['remove'] == 'yes') ? true : false;
$encoded_dn = rawurlencode($dn_src);
include './header.php';
# Error checking
if (0 == strlen(trim($dn_dst)))
pla_error($lang['copy_dest_dn_blank']);
if (pla_compare_dns($dn_src,$dn_dst) == 0 && $server_id_src == $server_id_dst)
pla_error($lang['copy_source_dest_dn_same']);
if (dn_exists($ldapserver_dst,$dn_dst))
pla_error(sprintf($lang['copy_dest_already_exists'],pretty_print_dn($dn_dst)));
if (! dn_exists($ldapserver_dst,get_container($dn_dst)))
pla_error(sprintf($lang['copy_dest_container_does_not_exist'],pretty_print_dn(get_container($dn_dst))));
if ($do_recursive) {
$filter = isset($_POST['filter']) ? $_POST['filter'] : '(objectClass=*)';
# Build a tree similar to that of the tree browser to give to r_copy_dn
$snapshot_tree = array();
print '<body>';
printf('<h3 class="title">%s%s</h3>',$lang['copy_copying'],htmlspecialchars($dn_src));
printf('<h3 class="subtitle">%s</h3>',$lang['copy_recursive_copy_progress']);
print '<br /><br />';
print '<small>';
print $lang['copy_building_snapshot'];
flush();
$snapshot_tree = build_tree($ldapserver_src,$dn_src,array(),$filter);
printf('<span style="color:green">%s</span><br />',$lang['success']);
flush();
# Prevent script from bailing early on a long delete
@set_time_limit(0);
$copy_result = r_copy_dn($ldapserver_src,$ldapserver_dst,$snapshot_tree,$dn_src,$dn_dst);
print '</small>';
} else {
$copy_result = copy_dn($ldapserver_src,$ldapserver_dst,$dn_src,$dn_dst);
}
if ($copy_result) {
$edit_url = sprintf('edit.php?server_id=%s&dn=%s',$server_id_dst,rawurlencode($dn_dst));
$new_rdn = get_rdn($dn_dst);
$container = get_container($dn_dst);
if (array_key_exists('tree',$_SESSION)) {
# do we not have a tree and tree icons yet? Build a new ones.
initialize_session_tree();
$tree = $_SESSION['tree'];
$tree_icons = $_SESSION['tree_icons'];
if (isset($tree[$server_id_dst][$container])) {
$tree[$server_id_dst][$container][] = $dn_dst;
sort($tree[$server_id_dst][$container]);
$tree_icons[$server_id_dst][$dn_dst] = get_icon($ldapserver_dst,$dn_dst);
$_SESSION['tree'] = $tree;
$_SESSION['tree_icons'] = $tree_icons;
session_write_close();
}
}
?>
<center>
<?php printf('%s<a href="%s">%s</a>',$lang['copy_successful_like_to'],$edit_url,$lang['copy_view_new_entry']) ?>
</center>
<!-- refresh the tree view (with the new DN renamed)
and redirect to the edit_dn page -->
<script language="javascript">
parent.left_frame.location.reload();
</script>
</body>
</html>
<?php
if ($do_remove) {
sleep(2);
$delete_url = sprintf('delete_form.php?server_id=%s&dn=%s',$server_id_dst,rawurlencode($dn_src));
?>
<!-- redirect to the delete form -->
<script language="javascript">
parent.right_frame.location="<?php echo $delete_url; ?>"
</script>
<?php }
} else {
exit;
}
function r_copy_dn($ldapserver_src,$ldapserver_dst,$tree,$root_dn,$dn_dst) {
if (DEBUG_ENABLED)
debug_log('r_copy_dn: Entered with (%s,%s,%s,%s,%s)',2,
$ldapserver_src->server_id,$ldapserver_dst->server_id,serialize($tree),$root_dn,$dn_dst);
global $lang;
printf('<nobr>%s %s...',$lang['copy_copying'],htmlspecialchars($root_dn));
flush();
$copy_result = copy_dn($ldapserver_src,$ldapserver_dst,$root_dn,$dn_dst);
if (! $copy_result)
return false;
printf('<span style="color:green">%s</span></nobr><br />',$lang['success']);
flush();
$children = isset($tree[$root_dn]) ? $tree[$root_dn] : null;
if (is_array($children) && count($children) > 0) {
foreach($children as $child_dn) {
$child_rdn = get_rdn($child_dn);
$new_dest_dn = sprintf('%s,%s',$child_rdn,$dn_dst);
r_copy_dn($ldapserver_src,$ldapserver_dst,$tree,$child_dn,$new_dest_dn);
}
} else {
return true;
}
return true;
}
function copy_dn($ldapserver_src,$ldapserver_dst,$dn_src,$dn_dst) {
if (DEBUG_ENABLED)
debug_log('copy_dn: Entered with (%s,%s,%s,%s)',2,
$ldapserver_src->server_id,$ldapserver_dst->server_id,$dn_src,$dn_dst);
global $lang;
$new_entry = get_object_attrs($ldapserver_src,$dn_src);
# modify the prefix-value (ie "bob" in cn=bob) to match the destination DN's value.
$rdn_attr = substr($dn_dst,0,strpos($dn_dst,'='));
$rdn_value = get_rdn($dn_dst);
$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']);
# Check the user-defined custom call back first
if (true === run_hook('pre_entry_create',
array ('server_id'=>$ldapserver_dst->server_id,'dn'=>$dn_dst,'attrs'=>$new_entry))) {
$add_result = @ldap_add($ldapserver_dst->connect(),$dn_dst,$new_entry);
if (! $add_result) {
run_hook('post_entry_create',array('server_id'=>$ldapserver_dst->server_id,
'dn'=>$dn_dst,'attrs'=>$new_entry));
print '</small><br /><br />';
pla_error($lang['copy_failed'] . $dn_dst,$ldapserver_dst->error(),$ldapserver_dst->errno());
}
return $add_result;
} else {
return false;
}
}
/**
* @param object $ldapserver
* @param dn $dn
* @param array $tree
* @param string $filter
*/
function build_tree($ldapserver,$dn,$tree,$filter='(objectClass=*)') {
$children = get_container_contents($ldapserver,$dn,0,$filter);
if (is_array($children) && count($children) > 0) {
$tree[$dn] = $children;
foreach ($children as $child_dn)
$tree = build_tree($ldapserver,$child_dn,$tree,$filter);
}
if (DEBUG_ENABLED)
debug_log('build_tree: Entered with (%s,%s,%s,%s), Returning (%s)',1,
$ldapserver->server_id,$dn,serialize($tree),$filter,serialize($tree));
return $tree;
}
?>

View File

@@ -1,81 +1,78 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/copy_form.php,v 1.19 2004/08/15 17:39:20 uugdave Exp $
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/copy_form.php,v 1.24 2005/07/22 05:47:43 wurley Exp $
/*
* copy_form.php
/**
* Copies a given object to create a new one.
*
* - dn (rawurlencoded)
* Variables that come in via common.php
* - server_id
* Variables that come in via GET variables
* - dn (rawurlencoded)
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if ($ldapserver->isReadOnly())
pla_error($lang['no_updates_in_read_only_mode']);
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$dn = $_GET['dn'] ;
$encoded_dn = rawurlencode( $dn );
$server_id = $_GET['server_id'];
$rdn = get_rdn( $dn );
$container = get_container( $dn );
check_server_id( $server_id ) or pla_error( $lang['bad_server_id_underline'] . htmlspecialchars( $server_id ) );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
$attrs = get_object_attrs( $ldapserver, $dn );
$select_server_html = server_select_list($ldapserver->server_id,true,'dest_server_id');
$children = get_container_contents( $ldapserver, $dn );
$attrs = get_object_attrs( $server_id, $dn );
$server_name = $servers[$server_id]['name'];
$select_server_html = "";
if (count($servers)>1){
$select_server_html .= '<select name="dest_server_id">';
foreach( $servers as $id => $server )
if( $server['host'] )
$select_server_html .= "<option value=\"$id\"". ($id==$server_id?" selected":"") .">" . htmlspecialchars($server['name']) . "</option>\n";
$select_server_html .= '</select>';
} else {
$server = reset($servers);
if( $server['host'] )
$select_server_html .= '<input type="hidden" name="dest_server_id" value="'.key($servers).'">' .
'<b>' . $server['name'] . '</b>';
}
$children = get_container_contents( $server_id, $dn );
include './header.php';
include './header.php';
// Draw some javaScrpt to enable/disable the filter field if this may be a recursive copy
if( is_array( $children ) && count( $children ) > 0 ) { ?>
<script language="javascript">
//<!--
<script language="javascript">
//<!--
function toggle_disable_filter_field( recursive_checkbox )
{
if( recursive_checkbox.checked ) {
recursive_checkbox.form.remove.disabled = false;
recursive_checkbox.form.filter.disabled = false;
} else {
recursive_checkbox.form.remove.disabled = true;
recursive_checkbox.form.remove.checked = false;
recursive_checkbox.form.filter.disabled = true;
}
}
//-->
</script>
//-->
</script>
<?php } ?>
<body>
<h3 class="title"><?php echo $lang['copyf_title_copy'] . $rdn; ?></h3>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $server_name; ?></b> &nbsp;&nbsp;&nbsp; <?php echo $lang['distinguished_name']?>: <b><?php echo $dn; ?></b></h3>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $ldapserver->name; ?></b> &nbsp;&nbsp;&nbsp; <?php echo $lang['distinguished_name']?>: <b><?php echo $dn; ?></b></h3>
<center>
<?php echo $lang['copyf_title_copy'] ?><b><?php echo htmlspecialchars( $rdn ); ?></b> <?php echo $lang['copyf_to_new_object']?>:<br />
<br />
<form action="copy.php" method="post" name="copy_form">
<input type="hidden" name="old_dn" value="<?php echo $dn; ?>" />
<input type="hidden" name="server_id" value="<?php echo $server_id; ?>" />
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<table style="border-spacing: 10px">
<tr>
<td><acronym title="<?php echo $lang['copyf_dest_dn_tooltip']; ?>"><?php echo $lang['copyf_dest_dn']?></acronym>:</td>
<td>
<input type="text" name="new_dn" size="45" value="<?php echo htmlspecialchars( $dn ); ?>" />
<?php draw_chooser_link( 'copy_form.new_dn' ); ?></td>
<?php draw_chooser_link( 'copy_form.new_dn', 'true', $rdn ); ?></td>
</td>
</tr>
@@ -94,8 +91,17 @@ if( is_array( $children ) && count( $children ) > 0 ) { ?>
<td><acronym title="<?php echo $lang['filter_tooltip']; ?>"><?php echo $lang['filter']; ?></acronym>:</td>
<td><input type="text" name="filter" value="(objectClass=*)" size="45" disabled />
</tr>
<tr>
<td><?php echo $lang['delete_after_copy']; ?></td>
<td><input type="checkbox" name="remove" value="yes"/ disabled>
<small>(<?php echo $lang['delete_after_copy_warn']; ?>)</small)</td>
</tr>
<?php } else { ?>
<tr>
<td><?php echo $lang['delete_after_copy']; ?></td>
<td><input type="checkbox" name="remove" value="yes"/></td>
</tr>
<?php } ?>
<tr>
<td colspan="2" align="right"><input type="submit" value="<?php echo $lang['copyf_title_copy']; ?>" /></td>
</tr>
@@ -103,14 +109,13 @@ if( is_array( $children ) && count( $children ) > 0 ) { ?>
</form>
<script language="javascript">
//<!--
/* If the user uses the back button, this way we draw the filter field
properly. */
toggle_disable_filter_field( document.copy_form.recursive );
//-->
//<!--
/* If the user uses the back button, this way we draw the filter field properly. */
toggle_disable_filter_field( document.copy_form.recursive );
//-->
</script>
<?php if( show_hints() ) {?>
<?php if ($config->GetValue('appearance','show_hints')) {?>
<small><img src="images/light.png" /><span class="hint"><?php echo $lang['copyf_note']?></span></small>
<?php } ?>

190
htdocs/create.php Normal file
View File

@@ -0,0 +1,190 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/create.php,v 1.43.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* Creates a new object.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as POST vars:
* - new_dn
* - attrs (an array of attributes)
* - vals (an array of values for the above attrs)
* - required_attrs (an array with indices being the attributes,
* and the values being their respective values)
* - object_classes (rawurlencoded, and serialized array of objectClasses)
*
* @package phpLDAPadmin
*/
/**
* @todo: posixgroup with empty memberlist generates an error.
*/
require './common.php';
if ($ldapserver->isReadOnly())
pla_error($lang['no_updates_in_read_only_mode']);
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$new_dn = isset( $_POST['new_dn'] ) ? $_POST['new_dn'] : null;
$required_attrs = isset( $_POST['required_attrs'] ) ? $_POST['required_attrs'] : false;
$object_classes = unserialize( rawurldecode( $_POST['object_classes'] ) );
$redirect = isset( $_POST['redirect'] ) ? $_POST['redirect'] : false;
$encoded_dn = rawurlencode( $new_dn );
$container = get_container( $new_dn );
// See if there are any presubmit values to work out.
if (isset($_POST['presubmit']) && count($_POST['presubmit']) && isset($_POST['template'])) {
$templates = new Templates($ldapserver->server_id);
$template = $templates->GetTemplate($_POST['template']);
foreach ($_POST['presubmit'] as $attr) {
$_POST['attrs'][] = $attr;
$_POST['form'][$attr] = $templates->EvaluateDefault($ldapserver,$template['attribute'][$attr]['presubmit'],$_POST['container']);
$_POST['vals'][] = $_POST['form'][$attr];
}
# @todo: This section needs to be cleaned up, and will be when the old templates are removed. In the mean time...
# Rebuild the $_POST['attrs'] & $_POST['vals'], as they can be inconsistent.
unset($_POST['attrs']);
unset($_POST['vals']);
foreach ($_POST['form'] as $attr => $val) {
$_POST['attrs'][] = $attr;
$_POST['vals'][] = $val;
}
}
$vals = isset( $_POST['vals'] ) ? $_POST['vals'] : array();
$attrs = isset( $_POST['attrs'] ) ? $_POST['attrs'] : array();
// build the new entry
$new_entry = array();
if( isset( $required_attrs ) && is_array( $required_attrs ) ) {
foreach( $required_attrs as $attr => $val ) {
if( $val == '' )
pla_error( sprintf( $lang['create_required_attribute'], htmlspecialchars( $attr ) ) );
$new_entry[ $attr ][] = $val;
}
}
if( isset( $attrs ) && is_array( $attrs ) ) {
foreach( $attrs as $i => $attr ) {
if( is_attr_binary( $ldapserver, $attr ) ) {
if( isset( $_FILES['vals']['name'][$i] ) && $_FILES['vals']['name'][$i] != '' ) {
// read in the data from the file
$file = $_FILES['vals']['tmp_name'][$i];
$f = fopen( $file, 'r' );
$binary_data = fread( $f, filesize( $file ) );
fclose( $f );
$val = $binary_data;
$new_entry[ $attr ][] = $val;
}
} else {
if (is_array($vals[$i])) {
# If the array has blank entries, then ignore them.
foreach ($vals[$i] as $value) {
# $new_entry[$attr] = $vals[$i];
if (trim($value))
$new_entry[$attr][] = $value;
}
} else {
$val = isset( $vals[$i] ) ? $vals[$i] : '';
if( '' !== trim($val) )
$new_entry[ $attr ][] = $val;
}
}
}
}
$new_entry['objectClass'] = $object_classes;
if( ! in_array( 'top', $new_entry['objectClass'] ) )
$new_entry['objectClass'][] = 'top';
foreach( $new_entry as $attr => $vals ) {
// Check to see if this is a unique Attribute
if( $badattr = checkUniqueAttr( $ldapserver, $new_dn, $attr, $vals ) ) {
$search_href = sprintf('search.php?search=true&amp;form=advanced&amp;server_id=%s&amp;filter=%s=%s',
$ldapserver->server_id,$attr,$badattr);
pla_error(sprintf( $lang['unique_attr_failed'],$attr,$badattr,$new_dn,$search_href ) );
}
if( ! is_attr_binary( $ldapserver, $attr ) )
if( is_array( $vals ) )
foreach( $vals as $i => $v )
$new_entry[ $attr ][ $i ] = $v;
else
$new_entry[ $attr ] = $vals;
}
//echo "<pre>"; var_dump( $new_dn );print_r( $new_entry ); echo "</pre>";
// Check the user-defined custom call back first
if( true === run_hook ( 'pre_entry_create', array ( 'server_id' => $ldapserver->server_id,'dn' => $new_dn,'attrs' => $new_entry ) ) )
$add_result = @ldap_add( $ldapserver->connect(), $new_dn, $new_entry );
else {
pla_error( $lang['create_could_not_add'] );
exit;
}
if( $add_result ) {
run_hook ( 'post_entry_create', array ( 'server_id' => $ldapserver->server_id, 'dn' => $new_dn, 'attrs' => $new_entry ) );
if ($redirect)
$redirect_url = $redirect;
else
$redirect_url = sprintf('edit.php?server_id=%s&dn=%s',$ldapserver->server_id,rawurlencode($new_dn));
if( array_key_exists( 'tree', $_SESSION ) ) {
$tree = $_SESSION['tree'];
$tree_icons = $_SESSION['tree_icons'];
if( isset( $tree[$ldapserver->server_id][$container] ) ) {
$tree[$ldapserver->server_id][$container][] = $new_dn;
sort( $tree[$ldapserver->server_id][$container] );
$tree_icons[$ldapserver->server_id][$new_dn] = get_icon( $ldapserver, $new_dn );
}
$_SESSION['tree'] = $tree;
$_SESSION['tree_icons'] = $tree_icons;
session_write_close();
}
?>
<html>
<head>
<?php if (isset($tree[$ldapserver->server_id][$container]) || in_array($new_dn,$ldapserver->getBaseDN())) { ?>
<!-- refresh the tree view (with the new DN renamed)
and redirect to the edit_dn page -->
<script language="javascript">
parent.left_frame.location.reload();
location.href='<?php echo $redirect_url; ?>';
</script>
<?php } ?>
<meta http-equiv="refresh" content="0; url=<?php echo $redirect_url; ?>" />
</head>
<body>
<?php echo $lang['redirecting'] ?> <a href="<?php echo $redirect_url; ?>"><?php echo $lang['here']?></a>.
</body>
</html>
<?php } else {
pla_error( $lang['create_could_not_add'], $ldapserver->error(), $ldapserver->errno() );
}
?>

175
htdocs/create_form.php Normal file
View File

@@ -0,0 +1,175 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/create_form.php,v 1.30.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* The menu where the user chooses an RDN, Container, and Template for creating a new entry.
* After submitting this form, the user is taken to their chosen Template handler.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as GET vars
* - container (rawurlencoded) (optional)
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
require TMPLDIR.'template_config.php';
if( $ldapserver->isReadOnly() )
pla_error( $lang['no_updates_in_read_only_mode'] );
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$step = isset( $_REQUEST['step'] ) ? $_REQUEST['step'] : 1; // defaults to 1
$container = $_REQUEST['container'];
$server_menu_html = server_select_list($ldapserver->server_id,true);
include './header.php'; ?>
<body>
<h3 class="title"><?php echo $lang['createf_create_object']?></h3>
<h3 class="subtitle"><?php echo $lang['createf_choose_temp']?></h3>
<center><h3><?php echo $lang['createf_select_temp']?></h3></center>
<form action="creation_template.php" method="post">
<input type="hidden" name="container" value="<?php echo htmlspecialchars( $container ); ?>" />
<table class="create">
<tr>
<td class="heading"><?php echo $lang['server']; ?>:</td>
<td><?php echo $server_menu_html; ?></td>
</tr>
<tr>
<td class="heading"><?php echo $lang['template']; ?>:</td>
<td>
<table class="template_display">
<tr>
<td>
<table class="templates">
<?php
$i = -1;
if ($config->GetValue('template_engine','enable')) {
$template_xml = new Templates($ldapserver->server_id);
if ($config->GetValue('template_engine','disable_old'))
$templates = $template_xml->getTemplates();
else
$templates = array_merge($template_xml->getTemplates(),$templates);
}
# Remove non-visable templates.
foreach ($templates as $index => $template)
if (isset($template['visible']) && (! $template['visible']))
unset ($templates[$index]);
$templates['custom']['title'] = 'Custom';
$templates['custom']['icon'] = 'images/object.png';
$count = count( $templates );
foreach( $templates as $name => $template ) {
$i++;
# If the template doesnt have a title, we'll use the desc field.
$template['desc'] = isset($template['title']) ? $template['title'] : $template['desc'];
# Balance the columns properly
if( ( count( $templates ) % 2 == 0 && $i == intval( $count / 2 ) ) ||
( count( $templates ) % 2 == 1 && $i == intval( $count / 2 ) + 1 ) )
echo "</table></td><td><table class=\"templates\">";
# Check and see if this template should be shown in the list
$isValid = false;
if( isset($template['regexp'] ) ) {
if( @preg_match( "/".$template['regexp']."/i", $container ) ) {
$isValid = true;
}
} else {
$isValid = true;
if (isset($template['invalid']) && $template['invalid'])
$isValid = false;
} ?>
</td>
</tr>
<tr>
<?php
if (isset($template['invalid']) && $template['invalid'] || (isset($template['handler']) && ! file_exists(TMPLDIR.'creation/'.$template['handler']))) {
?>
<td class="icon">
<img src="images/error.png" />
</td>
<?php
} else {
?>
<td>
<input type="radio" name="template" value="<?php echo htmlspecialchars($name);?>"
id="<?php echo htmlspecialchars($name); ?>"
<?php
if( 0 == strcasecmp( 'Custom', $name ) ) echo ' checked';
if( ! $isValid ) echo ' disabled';
?> />
</td>
<?php
}
?>
<td class="icon">
<label for="<?php echo htmlspecialchars($name);?>">
<img src="<?php echo $template['icon']; ?>" />
</label>
</td>
<td>
<label for="<?php echo htmlspecialchars($name);?>">
<?php if( 0 == strcasecmp( 'Custom', $template['desc'] ) ) echo '<b>';
if( ! $isValid )
if (isset($template['invalid']) && $template['invalid'])
printf('<span style="color: gray"><acronym title="%s">',$lang['template_invalid']);
else
printf('<span style="color: gray"><acronym title="%s">',$lang['template_restricted']);
echo htmlspecialchars( $template['desc'] );
if( ! $isValid ) echo "</acronym></span>";
if( 0 == strcasecmp( 'Custom', $template['desc'] ) ) echo '</b>'; ?>
</label>
</td>
</tr>
<?php } // end foreach ?>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"><center><input type="submit" name="submit" value="<?php echo $lang['proceed_gt']?>" /></center></td>
</tr>
</table>
</form>
</body>
</html>

View File

@@ -0,0 +1,71 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/creation_template.php,v 1.29 2005/09/25 16:11:44 wurley Exp $
/**
* This file simply acts as a plugin grabber for the creator templates in
* the directory templates/creation/
*
* Variables that come in via common.php
* server_id
* Expected POST vars:
* template
*
* @package phpLDAPadmin
* @deprecated This file is no longer need when the template engine is up and running.
*/
/**
*/
require './common.php';
if ($config->GetValue('template_engine','enable') && (! is_numeric($_REQUEST['template']))) {
require './template_engine.php';
die();
}
require TMPLDIR.'template_config.php';
if ($ldapserver->isReadOnly())
pla_error($lang['no_updates_in_read_only_mode']);
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$template = (isset($_REQUEST['template']) ? $_REQUEST['template'] : null);
! is_null($template) or pla_error($lang['ctemplate_no_template']);
if ($template == 'custom') {
foreach ($templates as $id => $template) {
if ($template['handler'] == 'custom.php') {
$template = $id;
break;
}
}
}
isset($templates[$template]) or pla_error(sprintf($lang['invalid_template'], htmlspecialchars($template)));
$template_id = $template;
$template = isset($templates[$template]) ? $templates[$template_id] : null;
if (! array_key_exists('no_header',$template)) {
include './header.php';
?>
<body>
<h3 class="title"><?php echo $lang['createf_create_object']?></h3>
<h3 class="subtitle"><?php echo $lang['ctemplate_on_server']?> '<?php echo htmlspecialchars($ldapserver->name); ?>', <?php echo $lang['using_template']?> '<?php echo htmlspecialchars($template['desc']); ?>'</h3>
<?php }
$handler = TMPLDIR.'creation/' . $template['handler'];
if (! file_exists($handler))
pla_error(sprintf($lang['template_does_not_exist'],htmlspecialchars($template['handler'])));
if (! is_readable($handler))
pla_error(sprintf($lang['template_not_readable'],htmlspecialchars($template['handler'])));
include $handler;
if (! array_key_exists('no_header',$template))
echo "</body>\n</html>";
?>

View File

@@ -1,10 +1,16 @@
/* $Header: /cvsroot/phpldapadmin/phpldapadmin/style.css,v 1.40 2004/10/23 21:13:16 uugdave Exp $ */
/* $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/css/style.css,v 1.44 2005/03/12 14:03:36 wurley Exp $ */
span.hint {
font-size: small;
font-weight: normal;
color: #888;
}
span.warning {
font-size: small;
font-weight: normal;
color: #f00;
}
span.x-small {
font-size: x-small;
}
@@ -81,7 +87,7 @@ table.error tr td h2 {
}
table.error tr td.img {
vertical-align: center;
vertical-align: middle;
text-align: center;
width: 20px;
}
@@ -130,7 +136,7 @@ table.template_display tr td {
table.templates tr td {
text-align: left;
vertical-align: center;
vertical-align: middle;
}
table.templates tr {
@@ -143,7 +149,7 @@ table.templates td.icon {
table.exporters tr td {
text-align: left;
vertical-align: center;
vertical-align: middle;
}
table.exporters tr {
@@ -278,11 +284,32 @@ h3.subtitle {
font-weight: normal;
}
table.comp_dn {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
font-size: 80%;
}
table.comp_dn tr {
width: 200px;
}
table.comp_dn tr td.attr {
background-color: #eee;
vertical-align: top;
}
table.comp_dn tr td.attr_note {
text-align: right;
background-color: #eee;
padding-right: 50px;
}
table.edit_dn {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
width: 500px;
width: 600px;
}
table.edit_dn input {
@@ -292,7 +319,7 @@ table.edit_dn input {
table.edit_dn input.val {
font-size: 14px;
width: 350px;
font-family: arial, helvetica, sans-serif
font-family: arial, helvetica, sans-serif;
background-color: white;
}
@@ -335,9 +362,9 @@ table.edit_dn tr td.attr a:hover {
table.edit_dn tr td.val {
text-align: left;
vertical-align: center;
vertical-align: middle;
padding-bottom: 10px;
padding-left: 80px;
padding-left: 50px;
}
@@ -615,6 +642,16 @@ table.export_form tr td {
padding: 4px;
}
table.form tr td {
vertical-align: top;
padding: 4px;
}
.attribute_failed {
color: red;
}
img.chooser {
/* This makes the chooser image line up properly when placed next to a form element in a table cell*/
vertical-align: bottom;

81
htdocs/delete.php Normal file
View File

@@ -0,0 +1,81 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/delete.php,v 1.23.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* Deletes a DN and presents a "job's done" message.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as POST vars:
* - dn (rawurlencoded)
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if ($ldapserver->isReadOnly())
pla_error($lang['no_updates_in_read_only_mode']);
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$dn = $_POST['dn'];
$encoded_dn = rawurlencode($dn);
if (is_null($dn))
pla_error($lang['you_must_specify_a_dn']);
dn_exists($ldapserver,$dn) or pla_error(sprintf($lang['no_such_entry'], '<b>' . pretty_print_dn($dn) . '</b>'));
// Check the user-defined custom callback first.
if (run_hook('pre_entry_delete',array('server_id' => $ldapserver->server_id,'dn' => $dn)))
$del_result = @ldap_delete($ldapserver->connect(), $dn);
else
pla_error(sprintf($lang['could_not_delete_entry'],'<b>'.pretty_print_dn($dn).'</b>'));
if ($del_result) {
# Custom callback
run_hook('post_entry_delete',array('server_id' => $ldapserver->server_id,'dn' => $dn));
# kill the DN from the tree browser session variable and
# refresh the tree viewer frame (left_frame)
if (array_key_exists('tree', $_SESSION)) {
$tree = $_SESSION['tree'];
if (isset($tree[$ldapserver->server_id]) && is_array($tree[$ldapserver->server_id])) {
# does it have children? (it shouldn't, but hey, you never know)
if (isset($tree[$ldapserver->server_id][$dn]))
unset($tree[$ldapserver->server_id][$dn]);
# search and destroy
foreach ($tree[$ldapserver->server_id] as $tree_dn => $subtree)
foreach ($subtree as $key => $sub_tree_dn)
if (0 == strcasecmp($sub_tree_dn, $dn))
unset($tree[$ldapserver->server_id][$tree_dn][$key]);
$_SESSION['tree'] = $tree;
}
session_write_close();
}
include './header.php'; ?>
<script language="javascript">
parent.left_frame.location.reload();
</script>
<br />
<br />
<center><?php echo sprintf($lang['entry_deleted_successfully'],'<b>'.pretty_print_dn($dn).'</b>'); ?></center>
<?php
} else {
pla_error(sprintf($lang['could_not_delete_entry'], '<b>' . pretty_print_dn($dn) . '</b>'),
$ldapserver->error(), $ldapserver->errno());
}
?>

54
htdocs/delete_attr.php Normal file
View File

@@ -0,0 +1,54 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/delete_attr.php,v 1.13.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* Deletes an attribute from an entry with NO confirmation.
*
* Variables that come in via common.php
* - server_id
*
* On success, redirect to edit.php
* On failure, echo an error.
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if ($ldapserver->isReadOnly())
pla_error($lang['no_updates_in_read_only_mode']);
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$dn = isset($_POST['dn']) ? $_POST['dn'] : null;
$attr = isset($_POST['attr']) ? $_POST['attr'] : null;
if (! $dn)
pla_error($lang['no_dn_specified']);
if (! $attr)
pla_error($lang['no_attr_specified']);
$encoded_dn = rawurlencode($dn);
if (is_attr_read_only($ldapserver,$attr))
pla_error(sprintf($lang['attr_is_read_only'],htmlspecialchars($attr)));
$update_array = array();
$update_array[$attr] = array();
$res = @ldap_modify($ldapserver->connect(),$dn,$update_array);
if ($res) {
$redirect_url = sprintf("edit.php?server_id=%s&dn=%s",$ldapserver->server_id,$encoded_dn);
foreach($update_array as $attr => $junk)
$redirect_url .= "&modified_attrs[]=$attr";
header("Location: $redirect_url");
} else {
pla_error($lang['could_not_perform_ldap_modify'],$ldapserver->error(),$ldapserver->errno());
}
?>

153
htdocs/delete_form.php Normal file
View File

@@ -0,0 +1,153 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/delete_form.php,v 1.20 2005/07/22 05:47:44 wurley Exp $
/**
* delete_form.php
* Displays a last chance confirmation form to delete a dn.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as GET vars:
* - dn (rawurlencoded)
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
if ($ldapserver->isReadOnly())
pla_error($lang['no_updates_in_read_only_mode']);
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$dn = $_GET['dn'];
$encoded_dn = rawurlencode( $dn );
$rdn = pla_explode_dn( $dn );
$rdn = $rdn[0];
$children = get_container_contents( $ldapserver,$dn,0,'(objectClass=*)',LDAP_DEREF_NEVER );
$has_children = count($children) > 0 ? true : false;
include './header.php'; ?>
<body>
<h3 class="title"><?php echo sprintf( $lang['delete_dn'], htmlspecialchars( $rdn ) ); ?></b></h3>
<h3 class="subtitle"><?php echo $lang['server']; ?>: <b><?php echo $ldapserver->name; ?></b> &nbsp;&nbsp;&nbsp; <?php echo $lang['distinguished_name']; ?>: <b><?php echo htmlspecialchars( ( $dn ) ); ?></b></h3>
<?php if( $has_children ) { ?>
<center><b><?php echo $lang['permanently_delete_children']; ?></b><br /><br />
<?php
flush();
# get the total number of child objects (whole sub-tree)
$s = pla_ldap_search( $ldapserver, 'objectClass=*', $dn, array('dn'), 'sub' );
$sub_tree_count = count( $s );
?>
<table class="delete_confirm">
<tr>
<td>
<p>
<?php echo sprintf( $lang['entry_is_root_sub_tree'], $sub_tree_count ); ?>
<small>(<a href="search.php?search=true&amp;server_id=<?php echo $ldapserver->server_id; ?>&amp;filter=<?php echo rawurlencode('objectClass=*'); ?>&amp;base_dn=<?php echo $encoded_dn; ?>&amp;form=advanced&amp;scope=sub"><?php echo $lang['view_entries']; ?></a>)</small>
<br />
<br />
<?php echo sprintf( $lang['confirm_recursive_delete'], ($sub_tree_count-1) ); ?><br />
<br />
<small><?php echo $lang['confirm_recursive_delete_note']; ?></small>
<br />
<br />
<table width="100%">
<tr>
<td>
<center>
<form action="rdelete.php" method="post">
<input type="hidden" name="dn" value="<?php echo $dn; ?>" />
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="submit" class="scary" value="<?php echo sprintf( $lang['delete_all_x_objects'], $sub_tree_count ); ?>" />
</form>
</center>
</td>
<td>
<center>
<form action="edit.php" method="get">
<input type="hidden" name="dn" value="<?php echo htmlspecialchars($dn); ?>" />
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="submit" name="submit" value="<?php echo $lang['cancel']; ?>" class="cancel" />
</form>
</center>
</td>
</tr>
</table>
</td>
</tr>
</table>
<?php flush(); ?>
<br />
<br />
<?php echo $lang['list_of_entries_to_be_deleted']; ?><br />
<select size="<?php echo min( 10, $sub_tree_count );?>" multiple disabled style="background:white; color:black;width:500px" >
<?php $i=0;
foreach( $s as $dn => $junk ) {
$i++; ?>
<option><?php echo $i; ?>. <?php echo htmlspecialchars( ( $dn ) ); ?></option>
<?php } ?>
</select>
<br />
<?php } else { ?>
<center>
<table class="delete_confirm">
<tr>
<td>
<?php echo $lang['sure_permanent_delete_object']; ?><br />
<br />
<nobr><acronym title="<?php echo $lang['distinguished_name']; ?>"><?php echo $lang['dn']; ?></acronym>: <b><?php echo pretty_print_dn( $dn ); ?></b><nobr><br />
<nobr><?php echo $lang['server']; ?>: <b><?php echo htmlspecialchars($ldapserver->name); ?></b></nobr><br />
<br />
<table width="100%">
<tr>
<td>
<center>
<form action="delete.php" method="post">
<input type="hidden" name="dn" value="<?php echo htmlspecialchars($dn); ?>" />
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="submit" name="submit" value="<?php echo $lang['delete']; ?>" class="scary" />
</form>
</center>
</td>
<td>
<center>
<form action="edit.php" method="get">
<input type="hidden" name="dn" value="<?php echo $dn; ?>" />
<input type="hidden" name="server_id" value="<?php echo $ldapserver->server_id; ?>" />
<input type="submit" name="submit" value="<?php echo $lang['cancel']; ?>" class="cancel" />
</form>
</center>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
<?php } ?>
</body>
</html>

View File

@@ -1,9 +1,14 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/documentation.php,v 1.7 2004/12/17 15:21:15 uugdave Exp $
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/documentation.php,v 1.9 2005/09/25 16:11:44 wurley Exp $
include './common.php';
include './header.php';
/**
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
//include './header.php';
echo "<body>";
@@ -13,7 +18,7 @@ switch( $view ) {
echo "<h3 class=\"title\">phpLDAPadmin Credits</h3>";
echo "<pre>";
echo "<small>";
include 'doc/CREDITS';
include DOCDIR.'CREDITS';
echo "</small>";
echo "</pre>";
echo "</body>";
@@ -24,7 +29,7 @@ switch( $view ) {
echo "<h3 class=\"title\">phpLDAPadmin ChangeLog</h3>";
echo "<pre>";
echo "<small>";
include 'doc/ChangeLog';
include DOCDIR.'ChangeLog';
echo "</small>";
echo "</pre>";
echo "</body>";
@@ -45,5 +50,3 @@ switch( $view ) {
<h3 class="doc">Modification Templates</h3>
<p class="doc">TODO: Write me.</p>

View File

@@ -1,11 +1,17 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/donate.php,v 1.7 2005/02/26 12:35:05 wurley Exp $
include 'common.php';
include 'header.php';
/**
* @package phpLDAPadmin
*/
/**
*/
include './common.php';
include './header.php';
$donate_base_href="https://sourceforge.net/donate/index.php?group_id=61828&amp;type=0";
$amounts = array( 10, 20, 50, 100 );
?>
<body>
@@ -22,10 +28,8 @@ $amounts = array( 10, 20, 50, 100 );
<?php foreach( $amounts as $amount ) { ?>
<td align="center">
<a
href="<?php echo $donate_base_href; ?>&amp;amt=<?php echo $amount; ?>"
target="new"><img
src="images/paypal-donate.png"
<a href="<?php echo $donate_base_href; ?>&amp;amt=<?php echo $amount; ?>" target="new">
<img src="images/paypal-donate.png"
alt="[<?php echo sprintf( $lang['donate_amount'], '$US ' . $amount ); ?>]"
title="<?php echo sprintf( $lang['donate_amount'], '$US ' . $amount ); ?>" /></a>
</td>
@@ -35,9 +39,7 @@ $amounts = array( 10, 20, 50, 100 );
<tr>
<?php foreach( $amounts as $amount ) { ?>
<td align="center"><?php echo sprintf( $lang['donate_amount'], '$' . $amount ); ?></td>
<?php } ?>
</tr>
@@ -45,14 +47,6 @@ $amounts = array( 10, 20, 50, 100 );
<br />
<br />
<center>
<?php echo $lang['wish_list_option']; ?>
<br />
<br />
<a href="http://www.amazon.com/gp/registry/22APPYURX48VA"><?php echo $lang['wish_list']; ?></a>
</center>
</body>
</html>

View File

@@ -0,0 +1,44 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/download_binary_attr.php,v 1.12.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* @package phpLDAPadmin
* Variables that come in via common.php
* - server_id
*/
/**
*/
require './common.php';
if ($ldapserver->isReadOnly())
pla_error($lang['no_updates_in_read_only_mode']);
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$dn = rawurldecode($_GET['dn']);
$attr = $_GET['attr'];
# if there are multiple values in this attribute, which one do you want to see?
$value_num = isset($_GET['value_num']) ? $_GET['value_num'] : 0;
dn_exists($ldapserver,$dn) or
pla_error(sprintf($lang['no_such_entry'],pretty_print_dn($dn)));
$search = @ldap_read($ldapserver->connect(),$dn,"(objectClass=*)",array($attr),0,0,0,$config->GetValue('deref','view'));
if (! $search)
pla_error($lang['error_performing_search'],$ldapserver->error(),$ldapserver->errno());
$entry = ldap_first_entry($ldapserver->connect(),$search);
$attrs = ldap_get_attributes($ldapserver->connect(),$entry);
$attr = ldap_first_attribute($ldapserver->connect(),$entry,$attrs);
$values = ldap_get_values_len($ldapserver->connect(),$entry,$attr);
$count = $values['count'];
// Dump the binary data to the browser
header("Content-type: octet-stream");
header("Content-disposition: attachment; filename=$attr");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
echo $values[$value_num];
?>

59
htdocs/edit.php Normal file
View File

@@ -0,0 +1,59 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/edit.php,v 1.56 2005/09/25 16:11:44 wurley Exp $
/**
* Displays the specified dn from the specified server for editing
* in its template as determined by get_template(). This is a simple
* shell for displaying entries. The real work is done by the templates
* found in tempaltes/modification/
*
* Variables that come in via common.php
* - server_id
* Variables that come in as GET vars:
* - dn (rawurlencoded)
* - use_default_template (optional) If set, use the default template no matter what
* - Other vars may be set and used by the modification templates
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
require TMPLDIR.'template_config.php';
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$dn = isset($_GET['dn']) ? $_GET['dn'] : false;
$dn !== false or pla_error($lang['missing_dn_in_query_string']);
$decoded_dn = rawurldecode($dn);
$encoded_dn = rawurlencode($decoded_dn);
/* Template authors may wish to present the user with a link back to the default, generic
template for editing. They may use this as the target of the href to do so.
@deprectated
*/
$default_href = sprintf("edit.php?server_id=%s&amp;dn=%s&amp;use_default_template=true",$ldapserver->server_id,$encoded_dn);
$use_default_template = isset( $_GET['use_default_template'] ) || $config->GetValue('template_engine','enable');
if( $use_default_template ) {
if ($config->GetValue('template_engine','enable'))
require './template_engine.php';
else
require TMPLDIR.'modification/default.php';
} else {
$template = get_template($ldapserver,$dn);
$template_file = TMPLDIR."modification/$template.php";
if (file_exists($template_file))
require $template_file;
else {
printf('%s <b>%s</b> %s<br />',$lang['missing_template_file'],$template_file,$lang['using_default']);
require TMPLDIR.'modification/default.php';
}
}
?>

115
htdocs/entry_chooser.php Normal file
View File

@@ -0,0 +1,115 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/entry_chooser.php,v 1.26.2.1 2005/10/09 09:07:21 wurley Exp $
/**
* Display a selection (popup window) to pick a DN.
*
* @package phpLDAPadmin
*/
/**
*/
require './common.php';
$container = isset($_GET['container']) ? rawurldecode($_GET['container']) : false;
$return_form_element = isset($_GET['form_element']) ? htmlspecialchars($_GET['form_element']) : null;
$rdn = isset($_GET['rdn']) ? htmlspecialchars($_GET['rdn']) : null;
include "./header.php";
printf('<h3 class="subtitle">%s</h3>',$lang['entry_chooser_title']);
flush();
?>
<script language="javascript">
function returnDN( dn ) {
opener.document.<?php echo $return_form_element; ?>.value = dn;
close();
}
</script>
<?php
if ($container) {
printf('%s<b>%s</b>',$lang['server_colon_pare'],htmlspecialchars($ldapserver->name));
print '<br />';
printf('%s<b>%s</b>',$lang['look_in'],htmlspecialchars($container));
print '<br />';
}
/* Has the use already begun to descend into a specific server tree? */
if (isset($ldapserver) && $container !== false) {
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
$dn_list = get_container_contents($ldapserver,$container,0,'(objectClass=*)',$config->GetValue('deref','tree'));
sort($dn_list);
foreach ($ldapserver->getBaseDN() as $base_dn) {
if (DEBUG_ENABLED)
debug_log('entry_chooser.php: Comparing BaseDN [%s] with container [%s]',9,$base_dn,$container);
if (! pla_compare_dns($container,$base_dn)) {
$parent_container = false;
$up_href = sprintf('entry_chooser.php?form_element=%s&rdn=%s',$return_form_element,$rdn);
break;
} else {
$parent_container = get_container($container);
$up_href = sprintf('entry_chooser.php?form_element=%s&rdn=%s&amp;server_id=%s&amp;container=%s',
$return_form_element,$rdn,$ldapserver->server_id,rawurlencode($parent_container));
}
}
print '&nbsp;';
printf('<a href="%s" style="text-decoration:none"><img src="images/up.png"> %s</a>',$up_href,$lang['back_up_p']);
print '<br />';
if (! count($dn_list))
printf('&nbsp;&nbsp;&nbsp;(%s)<br />',$lang['no_entries']);
else
foreach ($dn_list as $dn) {
$href = sprintf("javascript:returnDN('%s%s')",($rdn ? "$rdn," : ''),$dn);
print '&nbsp;&nbsp;&nbsp;';
printf('<a href="entry_chooser.php?server_id=%s&amp;form_element=%s&rdn=%s&amp;container=%s"><img src="images/plus.png" /></a>',
$ldapserver->server_id,$return_form_element,$rdn,rawurlencode($dn));
printf('<a href="%s">%s</a>',$href,htmlspecialchars($dn));
print '<br />';
}
/* draw the root of the selection tree (ie, list all the servers) */
} else {
foreach ($ldapservers->GetServerList() as $id) {
$ldapserver = $ldapservers->Instance($id);
if ($ldapserver->isVisible()) {
if (! $ldapserver->haveAuthInfo())
continue;
else {
printf('<b>%s</b>',htmlspecialchars($ldapserver->name));
print '<br />';
foreach ($ldapserver->getBaseDN() as $dn) {
if (! $dn) {
printf('<small>&nbsp;&nbsp;&nbsp;(%s)</small><br />',$lang['could_not_det_base_dn']);
} else {
$href = sprintf("javascript:returnDN('%s%s')",($rdn ? "$rdn," : ''),$dn);
print '&nbsp;&nbsp;&nbsp;';
printf('<a href="entry_chooser.php?server_id=%s&amp;form_element=%s&rdn=%s&amp;container=%s"><img src="images/plus.png" /></a> ',
$ldapserver->server_id,$return_form_element,$rdn,rawurlencode($dn));
printf('<a href="%s">%s</a>',$href,htmlspecialchars($dn));
print '<br />';
}
}
}
}
}
}
?>

View File

@@ -1,56 +1,52 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/expand.php,v 1.18 2004/08/15 17:39:20 uugdave Exp $
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/expand.php,v 1.22 2005/07/22 05:47:44 wurley Exp $
/*
* expand.php
/**
* This script alters the session variable 'tree', expanding it
* at the dn specified in the query string.
* at the dn specified in the query string.
*
* Variables that come in via common.php
* - server_id
* Variables that come in as GET vars:
* - dn (rawurlencoded)
* - server_id
*
* Note: this script is equal and opposite to collapse.php
* @package phpLDAPadmin
* @see collapse.php
*/
/**
*/
require './common.php';
// no expire header stuff
if (! $ldapserver->haveAuthInfo())
pla_error($lang['not_enough_login_info']);
# no expire header stuff
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
// This allows us to display large sub-trees without running out of time.
# This allows us to display large sub-trees without running out of time.
@set_time_limit( 0 );
$dn = $_GET['dn'];
$encoded_dn = rawurlencode( $dn );
$server_id = $_GET['server_id'];
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
initialize_session_tree();
$tree = $_SESSION['tree'];
$tree_icons = $_SESSION['tree_icons'];
$ds = pla_ldap_connect( $server_id );
pla_ldap_connection_is_error( $ds );
$contents = get_container_contents( $server_id, $dn, 0, '(objectClass=*)', get_tree_deref_setting() );
$contents = get_container_contents( $ldapserver, $dn, 0, '(objectClass=*)', $config->GetValue('deref','tree'));
usort( $contents, 'pla_compare_dns' );
$tree[$server_id][$dn] = $contents;
//echo "<pre>";
//var_dump( $contents );
//exit;
$tree[$ldapserver->server_id][$dn] = $contents;
foreach( $contents as $dn )
$tree_icons[$server_id][$dn] = get_icon( $server_id, $dn );
$tree_icons[$ldapserver->server_id][$dn] = get_icon( $ldapserver, $dn );
$_SESSION['tree'] = $tree;
$_SESSION['tree_icons'] = $tree_icons;
@@ -64,11 +60,10 @@ $random_junk = md5( strtotime( 'now' ) . $time['usec'] );
// If cookies were disabled, build the url parameter for the session id.
// It will be append to the url to be redirect
$id_session_param="";
if( SID != "" ){
if( SID != "" )
$id_session_param = "&".session_name()."=".session_id();
}
session_write_close();
header( "Location:tree.php?foo=$random_junk#{$server_id}_{$encoded_dn}$id_session_param" );
header(sprintf('Location:tree.php?foo=%s#%s_%s%s',$random_junk,$ldapserver->server_id,$encoded_dn,$id_session_param));
?>

View File

@@ -1,30 +1,42 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/export.php,v 1.11 2004/10/23 21:13:15 uugdave Exp $
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/export.php,v 1.15 2005/09/25 16:11:44 wurley Exp $
require 'export_functions.php';
/**
* @package phpLDAPadmin
*/
/**
*/
# Fix a bug with IE:
ini_set('session.cache_limiter','');
require './common.php';
require LIBDIR.'export_functions.php';
// get the POST parameters
$server_id = (isset($_POST['server_id']) ? $_POST['server_id'] : '');
if( ! $ldapserver->haveAuthInfo())
pla_error( $lang['not_enough_login_info'] );
$base_dn = isset($_POST['dn']) ? $_POST['dn']:NULL;
$server_id = isset($_POST['server_id']) ? $_POST['server_id']:NULL;
$format = isset( $_POST['format'] ) ? $_POST['format'] : "unix";
$scope = isset($_POST['scope']) ? $_POST['scope'] : 'base';
$filter = isset($_POST['filter']) ? $_POST['filter'] : 'objectclass=*';
$target = isset($_POST['target']) ? $_POST['target'] : 'display';
$save_as_file = isset( $_POST['save_as_file'] ) && $_POST['save_as_file'] == 'on';
$attributes = array();
// add system attributes if needed
$attributes = array();
if( isset( $_POST['sys_attr'] ) ){
array_push($attributes,'*');
array_push($attributes,'+');
}
isset($_POST['exporter_id']) or pla_error( $lang['must_choose_export_format'] );
$exporter_id = $_POST['exporter_id'];
isset($exporters[$exporter_id]) or pla_error( $lang['invalid_export_format'] );
// do some check
check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
// Initialisation of other variables
$rdn = get_rdn( $base_dn );
$friendly_rdn = get_rdn( $base_dn, 1 );
@@ -78,6 +90,7 @@ $exporter->setOutputFormat($br);
// prevent script from bailing early for long search
@set_time_limit( 0 );
// send the header
if( $save_as_file )
header( "Content-type: application/download" );

View File

@@ -1,5 +1,5 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/export_form.php,v 1.19 2004/10/24 23:51:49 uugdave Exp $
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/export_form.php,v 1.22 2005/09/25 16:11:44 wurley Exp $
/**
* export_form.php
@@ -7,9 +7,13 @@
*
* Html form to choose an export format(ldif,...)
*
* @package phpLDAPadmin
*/
/**
*/
require 'export_functions.php';
require './common.php';
require LIBDIR.'export_functions.php';
$server_id = isset( $_GET['server_id'] ) ? $_GET['server_id']:NULL ;
$format = isset( $_GET['format'] ) ? $_GET['format'] : get_line_end_format();
@@ -48,22 +52,7 @@ include './header.php'; ?>
<table>
<tr>
<td><?php echo $lang['server']; ?></td>
<td>
<?php
if( count($servers) > 1 ){
echo '<select name="server_id">';
foreach( $servers as $id => $server )
if( $server['host'] )
echo "<option value=\"$id\"". ($id==$server_id?" selected":"") .">" . htmlspecialchars($server['name']) . "</option>\n";
echo '</select>';
} else {
$server = reset($servers);
if( $server['host'] )
echo '<input type="hidden" name="server_id" value="'.key($servers).'" />' .
'<b>' . $server['name'] . '</b>';
}
?>
</td>
<td><?php print server_select_list(); ?></td>
</tr>
<tr>
<td style="white-space:nowrap"><?php echo $lang['base_dn']; ?></td>

49
htdocs/header.php Normal file
View File

@@ -0,0 +1,49 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/header.php,v 1.19.2.2 2005/10/25 20:21:15 wurley Exp $
/**
* @package phpLDAPadmin
*/
// We want to get $language into scope in case we were included
// from within a function
global $config;
$language = isset($config) ? $language = $config->GetValue('appearance','language') : 'auto';
// text/xml won't work with MSIE, but is very useful for debugging xhtml code.
//@header( "Content-type: text/xml; charset=\"UTF-8\"" );
@header( "Content-type: text/html; charset=\"UTF-8\"" );
// XML version and encoding for well-behaved browsers
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $language; ?>" lang="<?php echo $language; ?>" dir="ltr">
<head>
<?php if (isset($config) && $pagetitle = $config->GetValue('appearance','page_title')) { ?>
<title>phpLDAPadmin - <?php echo $pagetitle; ?></title>
<?php } else { ?>
<title>phpLDAPadmin</title>
<?php } ?>
<link rel="stylesheet" href="<?php echo CSSDIR ?>style.css" media="screen" />
<?php if( isset( $server_id ) ) {
$custom_file = get_custom_file( $server_id, 'style.css',CSSDIR );
if( strcmp( $custom_file, 'style.css' ) != 0 ) { ?>
<link rel="stylesheet" href="<?php echo $custom_file ?>" media="screen" />
<?php }
} ?>
<script src="<?php echo JSDIR; ?>entry_chooser.js" type="text/javascript"></script>
<script src="<?php echo JSDIR; ?>ie_png_work_around.js" type="text/javascript"></script>
<script src="<?php echo JSDIR; ?>search_util.js" type="text/javascript"></script>
<script src="<?php echo JSDIR; ?>generic_utils.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" media="all" href="js/jscalendar/calendar-blue.css" title="blue" />
<script type="text/javascript" src="js/jscalendar/calendar.js"></script>
<script type="text/javascript" src="js/jscalendar/lang/calendar-en.js"></script>
<script type="text/javascript" src="js/jscalendar/calendar-setup.js"></script>
<script type="text/javascript" src="<?php echo JSDIR; ?>date_selector.js"></script>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>

28
htdocs/help.php Normal file
View File

@@ -0,0 +1,28 @@
<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/help.php,v 1.5 2005/02/26 12:35:05 wurley Exp $
/**
* @package phpLDAPadmin
*/
/**
*/
include './common.php';
include './header.php';
$forum_href = get_href( 'forum' );
?>
<body>
<h3 class="title">Help</h3>
<br />
<center>
<p>Do you have a problem or question?</p>
<p>Perhaps you are new to LDAP and need a little guidance?</p>
<p>Help is only one click away. Visit the online <a href="<?php echo $forum_href; ?>">phpLDAPadmin support forum</a>.</p>
<br />
</center>
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 528 B

After

Width:  |  Height:  |  Size: 528 B

View File

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 278 B

BIN
htdocs/images/calendar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 342 B

After

Width:  |  Height:  |  Size: 342 B

BIN
htdocs/images/compare.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Some files were not shown because too many files have changed in this diff Show More