164 lines
5.2 KiB
PHP
164 lines
5.2 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
$Id$
|
||
|
|
||
|
This code is part of LDAP Account Manager (http://www.sourceforge.net/projects/lam)
|
||
|
|
||
|
This code is based on phpLDAPadmin.
|
||
|
Copyright (C) 2004 David Smith and phpLDAPadmin developers
|
||
|
|
||
|
The original code was modified to fit for LDAP Account Manager by Roland Gruber.
|
||
|
Copyright (C) 2005 Roland Gruber
|
||
|
|
||
|
This program is free software; you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation; either version 2 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program; if not, write to the Free Software
|
||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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)
|
||
|
* - new_oclass
|
||
|
*
|
||
|
* @package lists
|
||
|
* @subpackage tree
|
||
|
* @author David Smith
|
||
|
* @author Roland Gruber
|
||
|
*/
|
||
|
|
||
|
/** tree functions */
|
||
|
include_once('../../lib/tree.inc');
|
||
|
/** access to configuration */
|
||
|
include_once('../../lib/config.inc');
|
||
|
/** LDAP functions */
|
||
|
include_once('../../lib/ldap.inc');
|
||
|
/** status messages */
|
||
|
include_once('../../lib/status.inc');
|
||
|
|
||
|
// start session
|
||
|
session_save_path("../../sess");
|
||
|
@session_start();
|
||
|
|
||
|
setlanguage();
|
||
|
|
||
|
$dn = rawurldecode( $_POST['dn'] );
|
||
|
$encoded_dn = rawurlencode( $dn );
|
||
|
$new_oclass = $_POST['new_oclass'];
|
||
|
|
||
|
/* 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( $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( $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( $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 )
|
||
|
{
|
||
|
echo $_SESSION['header'];
|
||
|
|
||
|
echo "<title>LDAP Account Manager</title>\n";
|
||
|
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||
|
echo "</head>\n";
|
||
|
?>
|
||
|
<body>
|
||
|
|
||
|
<h3 class="tree_title"><?php echo _('DN') . ": " . $dn; ?></h3>
|
||
|
<h3 class="tree_subtitle"><?php echo _('There are new required attributes which need to be set.'); ?></h3>
|
||
|
|
||
|
<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; ?>" />
|
||
|
|
||
|
<table class="tree_edit_dn" cellspacing="0">
|
||
|
<tr><th colspan="2"><?php echo _('New required attributes:'); ?></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 _('Add'); ?>" /></center>
|
||
|
</form>
|
||
|
|
||
|
</body>
|
||
|
</html>
|
||
|
|
||
|
<?php
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$ds = $_SESSION['ldap']->server;
|
||
|
$add_res = @ldap_mod_add( $ds, $dn, array( 'objectClass' => $new_oclass ) );
|
||
|
if( ! $add_res ) {
|
||
|
echo $_SESSION['header'];
|
||
|
|
||
|
echo "<title>LDAP Account Manager</title>\n";
|
||
|
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../style/layout.css\">\n";
|
||
|
echo "</head>\n";
|
||
|
StatusMessage('ERROR', _("Was unable to modify attribtues from DN: %s."), ldap_error( $ds ), array($dn));
|
||
|
echo "</body></html>";
|
||
|
}
|
||
|
else
|
||
|
header( "Location: edit.php?dn=$encoded_dn&modified_attrs[]=objectClass" );
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|