include "ldap.inc";
if (!$mode)
$mode = "browse";
function htmlStart($title = "")
{
global $dn;
?>
}
function htmlEnd()
{
global $dn;
?>
LDAP Browser/1.1 - dn:
}
function showDirectory($message = "")
{
global $dn;
$ldap = new LDAP();
if (!$dn)
$dn = $ldap->basedn;
$ldap->cd($dn);
if ($ldap->cat($dn))
$attrs = $ldap->fetch();
$ldap->ls();
echo "Index of " . dn2path($ldap->basedn) . "
\n";
if (!$ldap->binddn)
echo "(You are logged in anonymously)\n";
if ($message)
echo "$message\n";
echo '
Name Add ObjectClass Add Attribute New Folder';
echo "
\n";
if ($ldap->getParentDir())
echo '
Parent Directory' . "\n";
for ($ctr = 0; $ctr < $attrs["count"]; $ctr++)
{
$flag = 0;
for ($ctr2 = 0; $ctr2 < $attrs[$attrs[$ctr]]["count"]; $ctr2++)
echo '
' . $attrs[$ctr] . "[$ctr2] = " . $attrs[$attrs[$ctr]][$ctr2] . "\n";
}
while ($ldap->fetch())
{
$shortDN = ldap_explode_dn($ldap->getDN(), 1);
$shortDN = $shortDN[0];
echo '
' . $shortDN . "/\n";
}
echo "
";
}
function modifyAttributeForm()
{
global $attribute, $value, $dn, $valueNum;
$ldap = new LDAP();
if (!$dn)
$dn = $ldap->basedn;
$ldap->cd($dn);
if ($ldap->cat($dn))
$attrs = $ldap->fetch();
$ldap->ls();
echo "";
}
function modifyAttribute()
{
global $attribute, $newvalue, $oldvalue, $dn;
$ldap = new LDAP();
$ldap->cd($dn);
if (!$ldap->cat($dn))
return(0);
if ($newvalue == "")
return("Attribute values may not be blank");
$attrs = $ldap->fetch();
for ($ctr = 0; $ctr < $attrs["count"]; $ctr++)
{
for ($ctr3 = 0, $ctr2 = 0; $ctr2 < $attrs[$attrs[$ctr]]["count"]; $ctr2++)
{
if ($attrs[$ctr] == $attribute)
{
if ($attrs[$attribute][$ctr2] == $oldvalue)
$new[$attribute][$ctr3++] = $newvalue;
else
$new[$attribute][$ctr3++] = $attrs[$attribute][$ctr2];
}
}
}
$ldap->rename($new);
}
function addAttributeForm()
{
global $dn;
$ldap = new LDAP();
if (!$dn)
$dn = $ldap->basedn;
$ldap->cd($dn);
if ($ldap->cat($dn))
$attrs = $ldap->fetch();
$ldap->ls();
echo "";
}
function addAttribute()
{
global $dn, $newAttribute, $newValue;
$ldap = new LDAP();
$ldap->cd($dn);
$ldap->cat($dn);
$oldattrs = $ldap->fetch();
for ($ctr = 0; $ctr < $oldattrs[$newAttribute]["count"]; $ctr++)
$attrs[$newAttribute][$ctr] = $oldattrs[$newAttribute][$ctr];
$attrs[$newAttribute][$ctr] = $newValue;
$ldap->modify($attrs);
return($ldap->error);
}
function addObjectClassForm()
{
global $dn;
$ldap = new LDAP();
if (!$dn)
$dn = $ldap->basedn;
$ldap->cd($dn);
if ($ldap->cat($dn))
$attrs = $ldap->fetch();
$ldap->ls();
echo "";
}
function addObjectClassAttributesForm()
{
global $dn, $newObjectClass;
$ldap = new LDAP();
if (!$dn)
$dn = $ldap->basedn;
$ldap->cd($dn);
if ($ldap->cat($dn))
$attrs = $ldap->fetch();
$OCexists = 0;
for ($ctr = 0; $ctr < count($attrs["objectclass"]); $ctr++)
if (strcasecmp($newObjectClass, $attrs["objectclass"][$ctr]) == 0)
{
showDirectory("This directory already contains the $newObjectClass objectClass\n");
return(0);
}
$ldap->ls();
echo "";
}
function addObjectClassAttributes()
{
global $dn, $newObjectClass;
$ldap = new LDAP();
$ldap->cd($dn);
$ldap->cat($dn);
$attrs = $ldap->fetch();
$ctr = 0;
for (reset($GLOBALS["HTTP_POST_VARS"]); $k = key($GLOBALS["HTTP_POST_VARS"]); next($GLOBALS["HTTP_POST_VARS"]))
if (substr($k, 0, 9) == "ATTRFIELD" && $GLOBALS["HTTP_POST_VARS"][$k] != "")
$attrAdded[substr($k, 9)][0] = $GLOBALS["HTTP_POST_VARS"][$k];
$attrAdded["objectclass"][0] = $newObjectClass;
for ($ctr = 0; $ctr < $attrs["objectclass"]["count"]; $ctr++)
$attrAdded["objectclass"][$ctr+1] = $attrs["objectclass"][$ctr];
if (!$ldap->modify($attrAdded))
return($ldap->error);
return("");
}
function dn2path($dn)
{
$tmp = ldap_explode_dn($dn, 1);
for ($ctr = count($tmp)-1; $ctr >= 0; $ctr--)
$path .= $tmp[$ctr] . "/";
return($path);
}
function deleteAttribute()
{
global $dn, $attribute, $oldvalue;
if ($attribute == "objectclass")
return(deleteObjectClassForm());
$ldap = new LDAP();
$ldap->getObjectClasses();
$ldap->cd($dn);
if (!$ldap->cat($dn))
return("Couldn't read entry $dn");
$attrs = $ldap->fetch();
$flag = 0;
for ($ctr = 0; $ctr < $attrs["objectclass"]["count"]; $ctr++)
if ($ldap->isRequired($attrs["objectclass"][$ctr], $attribute))
$flag = 1;
if ($flag)
return("The '$attribute' attribute is required by one or more objectclasses");
$delAttrs[$attribute] = $oldvalue;
$ldap->rm($delAttrs);
}
function deleteObjectClassForm()
{
global $dn, $attribute, $oldvalue;
$delAttr = array();
$ldap = new LDAP();
if (!$dn)
$dn = $ldap->basedn;
$ldap->getObjectClasses();
$ldap->cd($dn);
if (!$ldap->cat($dn))
return("Couldn't read entry $dn");
$attrs = $ldap->fetch();
$ldap->ls();
echo "Index of " . dn2path($ldap->basedn) . "
\n";
if (!$ldap->binddn)
echo "(You are logged in anonymously)\n";
echo $message;
echo "
\n";
$delOC = $oldvalue;
for ($ctr = 0, $ctr2 = 0; $ctr < $attrs["objectclass"]["count"]; $ctr++)
if ($attrs["objectclass"][$ctr] != $delOC)
$keepOC[$ctr2++] = $attrs["objectclass"][$ctr];
for ($ctr = 0, $ctr3 = 0; $ctr < $attrs["count"]; $ctr++)
{
$flag = 0;
if ($attrs[$ctr] == "objectclass")
continue;
for ($ctr2 = 0; $ctr2 < count($keepOC); $ctr2++)
if ($ldap->isRequired($keepOC[$ctr2], $attrs[$ctr]) || $ldap->isAllowed($keepOC[$ctr2], $attrs[$ctr]))
{
$flag = 1;
break;
}
if ($flag == 0)
$deleteAttrs[$ctr3++] = $attrs[$ctr];
}
echo "
";
echo "
";
}
function deleteObjectClass()
{
global $dn, $delOC;
$ldap = new LDAP();
$ldap->cd($dn);
for (reset($GLOBALS["HTTP_POST_VARS"]); $k = key($GLOBALS["HTTP_POST_VARS"]); next($GLOBALS["HTTP_POST_VARS"]))
{
if (substr($k, 0, 10) == "DELETEATTR")
{
$ind = substr($k, 10);
for ($ctr = 0; $ctr < count($GLOBALS["HTTP_POST_VARS"][$k]); $ctr++)
$delArray[$ind][$ctr] = $GLOBALS["HTTP_POST_VARS"][$k][$ctr];
}
}
$delArray["objectclass"][0] = $delOC;
if (! $ldap->rm($delArray))
return(ldap_error($ldap->cid));
return("");
}
function addDirectoryForm()
{
global $dn;
$ldap = new LDAP();
if (!$dn)
$dn = $ldap->basedn;
$ldap->cd($dn);
if ($ldap->cat($dn))
$attrs = $ldap->fetch();
$ldap->ls();
echo "";
}
function addDirectory()
{
global $dn, $newAttr, $newValue;
$ldap = new LDAP();
$ldap->cd($dn);
if (!$ldap->mkdir($newAttr, $newValue))
return($ldap->error);
return("");
}
htmlStart();
switch ($mode)
{
case "browse":
showDirectory();
break;
case "addDirectory":
addDirectoryForm();
break;
case "submitAddDirectory":
showDirectory(addDirectory());
break;
case "modifyAttribute":
modifyAttributeForm();
break;
case "submitModifyAttribute":
if ($submit == " Delete ")
deleteAttribute();
else
showDirectory(modifyAttribute());
break;
case "addObjectClass":
addObjectClassForm();
break;
case "submitAddObjectClass";
addObjectClassAttributesForm();
break;
case "submitAddObjectClassAttributes";
showDirectory(addObjectClassAttributes());
break;
case "addAttribute";
addAttributeForm();
break;
case "submitAddAttribute";
showDirectory(addAttribute());
break;
case "confirmDeleteObjectClass";
if ($submit == " Cancel ")
showDirectory("objectClass Deletion Canceled");
else
showDirectory(deleteObjectClass());
break;
}
htmlEnd();