<?
include "ldap.inc";

if (!
$mode)
    
$mode "browse";

function 
htmlStart($title "")
{
    global 
$dn;
?>
<html>
    <head>
        <title>
            <?echo $dn?>
        </title>
    </head>
    <body bgcolor=#FFFFFF>
<?
}

function 
htmlEnd()
{
    global 
$dn;
?>
    <address>LDAP Browser/1.0 - dn: <?echo $dn?></address>
    </body>
</html>
<?
}

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 
"<h1>Index of " dn2path($ldap->basedn) . "</h1>\n<pre>";
    if (!
$ldap->binddn)
        echo 
"<font color=red>(You are logged in anonymously)</font>\n";
    if (
$message)
        echo 
"<font color=red><b>$message</b></font>\n";
    echo 
'<IMG SRC="/icons/blank.gif" ALT="     "> Name                          <a href="index.html?mode=addObjectClass&dn=' rawurlencode($dn) . '">Add ObjectClass</a>          <a href="index.html?mode=addAttribute&dn=' rawurlencode($dn) . '">Add Attribute</a>        <a href="index.html?mode=addDirectory&dn=' rawurlencode($dn) . '">New Folder</a>';
    echo 
"<hr>\n";
    if (
$ldap->getParentDir())
        echo 
'<img src="/icons/back.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getParentDir()) . '">Parent Directory</a>' "\n";

    for (
$ctr 0$ctr $attrs["count"]; $ctr++)
    {
        
$flag 0;
        for (
$ctr2 0$ctr2 $attrs[$attrs[$ctr]]["count"]; $ctr2++)
            echo 
'<img src="/icons/text.gif"> <a href="index.html?mode=modifyAttribute&dn=' rawurlencode($ldap->getDN()) . '&attribute=' rawurlencode($attrs[$ctr]) . '&value=' rawurlencode($attrs[$attrs[$ctr]][$ctr2]) . '&valueNum=' $ctr2 '">' $attrs[$ctr] . "[$ctr2] = " $attrs[$attrs[$ctr]][$ctr2] . "</a>\n";
    } 

    while (
$ldap->fetch())
    {
        
$shortDN ldap_explode_dn($ldap->getDN(), 1);
        
$shortDN $shortDN[0];
        echo 
'<img src="/icons/folder.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getDN()) . '">' $shortDN "/</a>\n";
    }
    echo 
"</pre><hr>";
}

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 
"<form method=post action=index.html><input type=hidden name=dn value=\"$dn\"><h1>Modifying attribute $attribute of " dn2path($ldap->basedn) . "</h1>\n<pre>";
    if (!
$ldap->binddn)
        echo 
"(You are logged in anonymously, your modifications will fail)\n";
    echo 
'<IMG SRC="/icons/blank.gif" ALT="     "> Name                          <a href="index.html?mode=addObjectClass&dn=' rawurlencode($dn) . '">Add ObjectClass</a>          <a href="index.html?mode=addAttribute&dn=' rawurlencode($dn) . '">Add Attribute</a>        <a href="index.html?mode=addDirectory&dn=' rawurlencode($dn) . '">New Folder</a>';
    echo 
"<hr>\n";

    if (
$ldap->getParentDir())
        echo 
'<img src="/icons/back.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getParentDir()) . '">Parent Directory</a>' "\n";

    for (
$ctr 0$ctr $attrs["count"]; $ctr++)
    {
        
$flag 0;
        for (
$ctr2 0$ctr2 $attrs[$attrs[$ctr]]["count"]; $ctr2++)
        {
            if (
$attribute == $attrs[$ctr] && $valueNum == $ctr2)
            {
                if (
$attribute == "objectclass")
                    echo 
'<img src="/icons/text.gif"> ' $attrs[$ctr] . "[$ctr2] = " '</a><input type=hidden name=attribute value="' $attribute '"><input type=hidden name=oldvalue value="' $value '"><input type=text name=newvalue value="' $attrs[$attrs[$ctr]][$ctr2] . '"><input type=hidden name=mode value=submitModifyAttribute> <input type=submit name=submit value=" Delete ">' "\n";
                else
                    echo 
'<img src="/icons/text.gif"> ' $attrs[$ctr] . "[$ctr2] = " '</a><input type=hidden name=attribute value="' $attribute '"><input type=hidden name=oldvalue value="' $value '"><input type=text name=newvalue value="' $attrs[$attrs[$ctr]][$ctr2] . '"><input type=hidden name=mode value=submitModifyAttribute><input type=submit name=submit value=" Change "> <input type=submit name=submit value=" Delete ">' "\n";
            } else
                echo 
'<img src="/icons/text.gif"> <a href="index.html?mode=modifyAttribute&dn=' rawurlencode($ldap->getDN()) . '&attribute=' rawurlencode($attrs[$ctr]) . '&value=' rawurlencode($attrs[$attrs[$ctr]][$ctr2]) . '&valueNum=' $ctr2 '">' $attrs[$ctr] . "[$ctr2] = " $attrs[$attrs[$ctr]][$ctr2] . "</a>\n";
        }
    } 

    while (
$ldap->fetch())
    {
        
$shortDN ldap_explode_dn($ldap->getDN(), 1);
        
$shortDN $shortDN[0];
        echo 
'<img src="/icons/folder.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getDN()) . '">' $shortDN "/</a>\n";
    }
    echo 
"</pre><hr></form>";
}

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 
"<form method=post action=index.html><input type=hidden name=dn value=\"$dn\"><h1>Adding attribute to to " dn2path($ldap->basedn) . "</h1>\n<pre>";
    if (!
$ldap->binddn)
        echo 
"(You are logged in anonymously, your modifications will fail)\n";
    echo 
'<IMG SRC="/icons/blank.gif" ALT="     "> Name                          <a href="index.html?mode=addObjectClass&dn=' rawurlencode($dn) . '">Add ObjectClass</a>          <a href="index.html?mode=addAttribute&dn=' rawurlencode($dn) . '">Add Attribute</a>        <a href="index.html?mode=addDirectory&dn=' rawurlencode($dn) . '">New Folder</a>';
    echo 
"<hr>\n";

    if (
$ldap->getParentDir())
        echo 
'<img src="/icons/back.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getParentDir()) . '">Parent Directory</a>' "\n";

    echo 
'<img src="/icons/text.gif"> ';
    for (
$ctr 0$ctr $attrs["objectclass"]["count"]; $ctr++)
    {
        
$tmpAtt $ldap->getAllows($attrs["objectclass"][$ctr]);
        for (
$ctr2 0$ctr2 count($tmpAtt); $ctr2++)
            
$availAttrs[$tmpAtt[$ctr2]] = 1;
        
$tmpAtt $ldap->getRequires($attrs["objectclass"][$ctr]);
        for (
$ctr2 0$ctr2 count($tmpAtt); $ctr2++)
            
$availAttrs[$tmpAtt[$ctr2]] = 1;
    }

    echo 
"<select name=newAttribute>\n";
    
ksort($availAttrs);
    for (
reset($availAttrs); $k key($availAttrs); next($availAttrs))
        if (
$k != "objectclass")
            echo 
'  <option value="' $k '">' $k "</option>\n";
    echo 
"</select>= <input type=text name=newValue> ";
    echo 
'<input type=hidden name=mode value=submitAddAttribute><input type=submit name=submit value=" Add Attribute ">' "\n";

    for (
$ctr 0$ctr $attrs["count"]; $ctr++)
    {
        
$flag 0;
        for (
$ctr2 0$ctr2 $attrs[$attrs[$ctr]]["count"]; $ctr2++)
            echo 
'<img src="/icons/text.gif"> <a href="index.html?mode=modifyAttribute&dn=' rawurlencode($ldap->getDN()) . '&attribute=' rawurlencode($attrs[$ctr]) . '&value=' rawurlencode($attrs[$attrs[$ctr]][$ctr2]) . '&valueNum=' $ctr2 '">' $attrs[$ctr] . "[$ctr2] = " $attrs[$attrs[$ctr]][$ctr2] . "</a>\n";
    } 

    while (
$ldap->fetch())
    {
        
$shortDN ldap_explode_dn($ldap->getDN(), 1);
        
$shortDN $shortDN[0];
        echo 
'<img src="/icons/folder.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getDN()) . '">' $shortDN "/</a>\n";
    }
    echo 
"</pre><hr></form>";
}

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 
"<form method=post action=index.html><input type=hidden name=dn value=\"$dn\"><h1>Adding objectClass to " dn2path($ldap->basedn) . "</h1>\n<pre>";
    if (!
$ldap->binddn)
        echo 
"(You are logged in anonymously, your modifications will fail)\n";
    echo 
'<IMG SRC="/icons/blank.gif" ALT="     "> Name                          <a href="index.html?mode=addObjectClass&dn=' rawurlencode($dn) . '">Add ObjectClass</a>          <a href="index.html?mode=addAttribute&dn=' rawurlencode($dn) . '">Add Attribute</a>        <a href="index.html?mode=addDirectory&dn=' rawurlencode($dn) . '">New Folder</a>';
    echo 
"<hr>\n";

    if (
$ldap->getParentDir())
        echo 
'<img src="/icons/back.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getParentDir()) . '">Parent Directory</a>' "\n";

    echo 
'<img src="/icons/text.gif"> ' "objectClass = ";
    
$ocs $ldap->getObjectClasses();
    echo 
"<select name=newObjectClass>\n";
    for (
$ctr 0$ctr count($ocs); $ctr++)
        echo 
'  <option value="' $ocs[$ctr] . '">' $ocs[$ctr] . "</option>\n";
    echo 
"</select>";
    echo 
'<input type=hidden name=mode value=submitAddObjectClass><input type=submit name=submit value=" Add ObjectClass ">' "\n";

    for (
$ctr 0$ctr $attrs["count"]; $ctr++)
    {
        
$flag 0;
        for (
$ctr2 0$ctr2 $attrs[$attrs[$ctr]]["count"]; $ctr2++)
            echo 
'<img src="/icons/text.gif"> <a href="index.html?mode=modifyAttribute&dn=' rawurlencode($ldap->getDN()) . '&attribute=' rawurlencode($attrs[$ctr]) . '&value=' rawurlencode($attrs[$attrs[$ctr]][$ctr2]) . '&valueNum=' $ctr2 '">' $attrs[$ctr] . "[$ctr2] = " $attrs[$attrs[$ctr]][$ctr2] . "</a>\n";
    } 

    while (
$ldap->fetch())
    {
        
$shortDN ldap_explode_dn($ldap->getDN(), 1);
        
$shortDN $shortDN[0];
        echo 
'<img src="/icons/folder.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getDN()) . '">' $shortDN "/</a>\n";
    }
    echo 
"</pre><hr></form>";
}

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 
"<form method=post action=index.html><input type=hidden name=dn value=\"$dn\"><h1>Adding objectClass $newObjectClass to " dn2path($ldap->basedn) . "</h1>\n<pre>";
    echo 
'<IMG SRC="/icons/blank.gif" ALT="     "> Name                          <a href="index.html?mode=addObjectClass&dn=' rawurlencode($dn) . '">Add ObjectClass</a>          <a href="index.html?mode=addAttribute&dn=' rawurlencode($dn) . '">Add Attribute</a>        <a href="index.html?mode=addDirectory&dn=' rawurlencode($dn) . '">New Folder</a>';
    echo 
"<hr>\n";

    if (
$ldap->getParentDir())
        echo 
'<img src="/icons/back.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getParentDir()) . '">Parent Directory</a>' "\n";

    
$flag 0;
    
$requires $ldap->getRequires($newObjectClass);
    echo 
"\nRequired\n<hr>";
    for (
$ctr 0$ctr count($requires); $ctr++)
        if (! 
$attrs[$requires[$ctr]])
        {
            echo 
'<img src="/icons/text.gif"> ' $requires[$ctr] . ' = <input type=text name="ATTRFIELD' $requires[$ctr] . '" value="' $attrs[$requires[$ctr]] . '">' "\n";
            
$flag 1;
        }
    if (! 
$flag)
        echo 
"<font color=red>All required fields already exist</font>\n";

    
$flag 0;
    
$allows $ldap->getAllows($newObjectClass);
    echo 
"\nAllowed\n<hr>";
    for (
$ctr 0$ctr count($allows); $ctr++)
        if (! 
$attrs[$allows[$ctr]])
        {
            echo 
'<img src="/icons/text.gif"> ' $allows[$ctr] . ' = <input type=text name="ATTRFIELD' $allows[$ctr] . '" value="' $attrs[$allows[$ctr]] . '">' "\n";
            
$flag 1;
        }
    if (! 
$flag)
        echo 
"<font color=red>All allowed fields already exist</font>\n";

    echo 
"\n" '                <input type=hidden name=mode value="submitAddObjectClassAttributes"><input type=hidden name=newObjectClass value=' $newObjectClass '><input type=submit name=submit value=" Add this ObjectClass ">';

    echo 
"\nExisting\n<hr>";
    for (
$ctr 0$ctr $attrs["count"]; $ctr++)
    {
        
$flag 0;
        for (
$ctr2 0$ctr2 $attrs[$attrs[$ctr]]["count"]; $ctr2++)
        {
            if (! (
$ldap->isRequired($newObjectClass$attrs[$ctr]) || $ldap->isAllowed($newObjectClass$attrs[$ctr])))
                    echo 
'<img src="/icons/text.gif"> <a href="index.html?mode=modifyAttribute&dn=' rawurlencode($ldap->getDN()) . '&attribute=' rawurlencode($attrs[$ctr]) . '&value=' rawurlencode($attrs[$attrs[$ctr]][$ctr2]) . '&valueNum=' $ctr2 '">' $attrs[$ctr] . "[$ctr2] = " $attrs[$attrs[$ctr]][$ctr2] . "</a>\n";
        }
    } 

    while (
$ldap->fetch())
    {
        
$shortDN ldap_explode_dn($ldap->getDN(), 1);
        
$shortDN $shortDN[0];
        echo 
'<img src="/icons/folder.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getDN()) . '">' $shortDN "/</a>\n";
    }
    echo 
"</pre><hr></form>";
}

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($k09) == "ATTRFIELD" && $GLOBALS["HTTP_POST_VARS"][$k] != "")
            
$attrAdded[substr($k9)][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($dn1);
    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 
"<h1>Index of " dn2path($ldap->basedn) . "</h1>\n<pre>";
    if (!
$ldap->binddn)
        echo 
"<font color=red>(You are logged in anonymously)</font>\n";
    echo 
$message;
    echo 
"<hr>\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 
"<form method=post action=index.html><input type=hidden name=dn value=\"$dn\">Deleting the '$delOC' objectClass requires that the following attributes are deleted:<br>\n<ul>";
    for (
$ctr 0$ctr count($deleteAttrs); $ctr++)
        for (
$ctr2 0$ctr2 $attrs[$deleteAttrs[$ctr]]["count"]; $ctr2++)
            echo 
"<li><input type=hidden name=\"DELETEATTR" $deleteAttrs[$ctr] . "[$ctr2]\" value=\"" $attrs[$deleteAttrs[$ctr]][$ctr2] . "\">" $deleteAttrs[$ctr] . "[$ctr2] = " $attrs[$deleteAttrs[$ctr]][$ctr2] . "\n";

    echo 
"</ul>";
    echo 
"<ul><table width=40%><tr><td><input type=hidden name=delOC value=\"$delOC\"><input type=hidden name=mode value=confirmDeleteObjectClass><input type=submit name=submit value=\" Cancel \"></td><td><input type=submit name=submit value=\" Delete \"></td></tr></table></ul></form>";
    echo 
"<hr>";
}

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($k010) == "DELETEATTR")
        {
            
$ind substr($k10);
            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 
"<form method=post action=index.html><input type=hidden name=dn value=\"$dn\"><h1>Adding subdirectory to " dn2path($ldap->basedn) . "</h1>\n<pre>";
    if (!
$ldap->binddn)
        echo 
"(You are logged in anonymously, your modifications will fail)\n";
    echo 
'<IMG SRC="/icons/blank.gif" ALT="     "> Name                          <a href="index.html?mode=addObjectClass&dn=' rawurlencode($dn) . '">Add ObjectClass</a>          <a href="index.html?mode=addAttribute&dn=' rawurlencode($dn) . '">Add Attribute</a>        <a href="index.html?mode=addDirectory&dn=' rawurlencode($dn) . '">New Folder</a>';
    echo 
"<hr>\n";

    if (
$ldap->getParentDir())
        echo 
'<img src="/icons/back.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getParentDir()) . '">Parent Directory</a>' "\n";

    echo 
'<img src="/icons/folder.gif"> <input type=text name=newAttr> = <input type=text name=newValue> <input type=hidden name=mode value=submitAddDirectory><input type=hidden name=dn value="' $dn '"><input type=submit name=submit value=" Create Directory ">' "\n";

    for (
$ctr 0$ctr $attrs["count"]; $ctr++)
        for (
$ctr2 0$ctr2 $attrs[$attrs[$ctr]]["count"]; $ctr2++)
            echo 
'<img src="/icons/text.gif"> <a href="index.html?mode=modifyAttribute&dn=' rawurlencode($ldap->getDN()) . '&attribute=' rawurlencode($attrs[$ctr]) . '&value=' rawurlencode($attrs[$attrs[$ctr]][$ctr2]) . '&valueNum=' $ctr2 '">' $attrs[$ctr] . "[$ctr2] = " $attrs[$attrs[$ctr]][$ctr2] . "</a>\n";

    while (
$ldap->fetch())
    {
        
$shortDN ldap_explode_dn($ldap->getDN(), 1);
        
$shortDN $shortDN[0];
        echo 
'<img src="/icons/folder.gif"> <a href="index.html?mode=browse&dn=' rawurlencode($ldap->getDN()) . '">' $shortDN "/</a>\n";
    }
    echo 
"</pre><hr></form>";
}

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();