implemented individual columns in group/host list

fixed bug in ldap.php which did not save the attribute arrays
This commit is contained in:
Roland Gruber 2003-04-02 17:16:21 +00:00
parent ee2e6f4a00
commit 0a27b5f9d1
4 changed files with 82 additions and 29 deletions

View File

@ -27,7 +27,7 @@ groupsuffix: ou=group,o=test,c=de
# suffix of Samba hosts
# e.g. ou=machines,dc=yourdomain,dc=org
hostsuffix: ou=machines,o=test,c=de
hostsuffix: o=test,c=de
# minimum and maximum UID numbers
minUID: 10000
@ -57,10 +57,10 @@ userlistAttributes: #uid;#cn;#uidNumber;#gidNumber
# entries can either be predefined values (e.g. '#cn' or '#gidNumber')
# or individual ones (e.g. 'cn:Group Name')
# values have to be seperated by semicolons
grouplistAttributes: #cn;#gidNumber
grouplistAttributes: #cn;#gidNumber;#memberUID;#description
# list of attributes to show in host list
# entries can either be predefined values (e.g. '#cn' or '#uid')
# or individual ones (e.g. 'cn:Host Name')
# values have to be seperated by semicolons
hostlistAttributes: #uid;#uidNumber;#description
hostlistAttributes: #cn;#rid;#description;gidNumber:GID

View File

@ -67,12 +67,14 @@ class Ldap{
"cn" => _("Group Name"),
"gidNumber" => _("GID Number"),
"memberUID" => _("Group Members"),
"member" => _("Group Member DNs")
"member" => _("Group Member DNs"),
"description" => _("Group Description")
);
$this->ldapHostAttributes = array (
"UID" => _("Host Username"),
"uid" => _("Host Username"),
"cn" => _("Host Name"),
"rid" => _("Windows UID")
"rid" => _("RID (Windows UID)"),
"description" => _("Host Description")
);
}
@ -164,7 +166,8 @@ class Ldap{
// closes connection to LDAP server before serialization
function __sleep() {
$this->close();
return array("conf", "username", "password");
// define which attributes to save
return array("conf", "username", "password", "ldapUserAttributes", "ldapGroupAttributes", "ldapHostAttributes");
}
// reconnects to LDAP server when deserialized

View File

@ -31,7 +31,28 @@ session_save_path("../sess");
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\" />";
// Samba hosts have the attribute "sambaAccount" and end with "$"
// generate attribute-description table
$attr_array; // list of LDAP attributes to show
$desc_array; // list of descriptions for the attributes
$attr_string = $_SESSION["config"]->get_grouplistAttributes();
$temp_array = explode(";", $attr_string);
$hash_table = $_SESSION["ldap"]->attributeGroupArray();
for ($i = 0; $i < sizeof($temp_array); $i++) {
// if value is predifined, look up description in hash_table
if (substr($temp_array[$i],0,1) == "#") {
$attr = substr($temp_array[$i],1);
$attr_array[$i] = $attr;
$desc_array[] = $hash_table[$attr];
}
// if not predefined, the attribute is seperated by a ":" from description
else {
$attr = explode(":", $temp_array[$i]);
$attr_array[$i] = $attr[0];
$desc_array[$i] = $attr[1];
}
}
// Groups have the attribute "posixGroup"
$filter = "(objectClass=posixGroup)";
$attrs = array("cn", "gidNumber", "memberUID", "description");
$sr = @ldap_search($_SESSION["ldap"]->server(),
@ -46,25 +67,24 @@ else echo ("<br><br><font color=\"red\"><b>" . _("No Groups found!") . "</b></fo
// print host table header
echo "<table width=\"100%\">\n";
echo "<tr><th class=\"userlist\" width=12></th>";
echo "<th class=\"userlist\">" . _("Grup Name") . "</th>";
echo "<th class=\"userlist\">" . _("GID Number") . "</th>";
echo "<th class=\"userlist\">" . _("Group Members") . "</th>";
echo "<th class=\"userlist\">" . _("Description") . "</th>";
// table header
for ($k = 0; $k < sizeof($desc_array); $k++) {
echo "<th class=\"userlist\">" . $desc_array[$k] . "</th>";
}
echo "</tr>\n";
echo ("<form action=\"../templates/account.php?type=group\" method=\"post\">\n");
// print group list
for ($i = 0; $i < sizeof($info)-1; $i++) { // ignore last entry in array which is "count"
echo("<tr><td class=\"userlist\"><input type=\"radio\" name=\"DN\" value=\"" . $info[$i]["dn"] . "\"></td>");
echo ("<td class=\"userlist\">" . $info[$i]["cn"][0] . "</td>");
echo ("<td class=\"userlist\">" . $info[$i]["gidnumber"][0] . "</td>");
// create list of group members
if (sizeof($info[$i]["memberuid"]) > 0) {
array_shift($info[$i]["memberuid"]); // delete count entry
$grouplist = implode("; ", $info[$i]["memberuid"]);
for ($k = 0; $k < sizeof($attr_array); $k++) {
echo ("<td class=\"userlist\">");
// print all attribute entries seperated by "; "
if (sizeof($info[$i][strtolower($attr_array[$k])]) > 0) {
array_shift($info[$i][strtolower($attr_array[$k])]);
echo implode("; ", $info[$i][strtolower($attr_array[$k])]);
}
echo ("</td>");
}
else $grouplist = "";
echo ("<td class=\"userlist\">" . $grouplist . "</td>");
echo ("<td class=\"userlist\">" . $info[$i]["description"][0] . "</td>");
echo("</tr>\n");
}
echo ("</table>");

View File

@ -31,9 +31,30 @@ session_save_path("../sess");
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\" />";
// generate attribute-description table
$attr_array; // list of LDAP attributes to show
$desc_array; // list of descriptions for the attributes
$attr_string = $_SESSION["config"]->get_hostlistAttributes();
$temp_array = explode(";", $attr_string);
$hash_table = $_SESSION["ldap"]->attributeHostArray();
for ($i = 0; $i < sizeof($temp_array); $i++) {
// if value is predifined, look up description in hash_table
if (substr($temp_array[$i],0,1) == "#") {
$attr = substr($temp_array[$i],1);
$attr_array[$i] = $attr;
$desc_array[] = $hash_table[$attr];
}
// if not predefined, the attribute is seperated by a ":" from description
else {
$attr = explode(":", $temp_array[$i]);
$attr_array[$i] = $attr[0];
$desc_array[$i] = $attr[1];
}
}
// Samba hosts have the attribute "sambaAccount" and end with "$"
$filter = "(&(objectClass=sambaAccount) (uid=*$))";
$attrs = array("cn", "rid");
$attrs = $attr_array;
$sr = @ldap_search($_SESSION["ldap"]->server(),
$_SESSION["config"]->get_HostSuffix(),
$filter, $attrs);
@ -47,14 +68,23 @@ echo ("<form action=\"../templates/account.php?type=host\" method=\"post\">\n");
// print host table
echo "<table width=\"100%\">\n";
echo "<tr><th class=\"userlist\" width=12></th>";
echo "<th class=\"userlist\">" . _("Host Name") . "</th>";
echo "<th class=\"userlist\">RID</th>";
// table header
for ($k = 0; $k < sizeof($desc_array); $k++) {
echo "<th class=\"userlist\">" . $desc_array[$k] . "</th>";
}
echo "</tr>\n";
// print host list
for ($i = 0; $i < sizeof($info)-1; $i++) { // ignore last entry in array which is "count"
echo("<tr><td class=\"userlist\"><input type=\"radio\" name=\"DN\" value=\"" . $info[$i]["dn"] . "\"></td>");
echo ("<td class=\"userlist\">" . $info[$i]["cn"][0] . "</td>");
echo ("<td class=\"userlist\">" . $info[$i]["rid"][0] . "</td>");
for ($k = 0; $k < sizeof($attr_array); $k++) {
echo ("<td class=\"userlist\">");
// print all attribute entries seperated by "; "
if (sizeof($info[$i][strtolower($attr_array[$k])]) > 0) {
array_shift($info[$i][strtolower($attr_array[$k])]);
echo implode("; ", $info[$i][strtolower($attr_array[$k])]);
}
echo ("</td>");
}
echo("</tr>\n");
}
echo ("</table>");