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 # suffix of Samba hosts
# e.g. ou=machines,dc=yourdomain,dc=org # 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 # minimum and maximum UID numbers
minUID: 10000 minUID: 10000
@ -57,10 +57,10 @@ userlistAttributes: #uid;#cn;#uidNumber;#gidNumber
# entries can either be predefined values (e.g. '#cn' or '#gidNumber') # entries can either be predefined values (e.g. '#cn' or '#gidNumber')
# or individual ones (e.g. 'cn:Group Name') # or individual ones (e.g. 'cn:Group Name')
# values have to be seperated by semicolons # values have to be seperated by semicolons
grouplistAttributes: #cn;#gidNumber grouplistAttributes: #cn;#gidNumber;#memberUID;#description
# list of attributes to show in host list # list of attributes to show in host list
# entries can either be predefined values (e.g. '#cn' or '#uid') # entries can either be predefined values (e.g. '#cn' or '#uid')
# or individual ones (e.g. 'cn:Host Name') # or individual ones (e.g. 'cn:Host Name')
# values have to be seperated by semicolons # 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"), "cn" => _("Group Name"),
"gidNumber" => _("GID Number"), "gidNumber" => _("GID Number"),
"memberUID" => _("Group Members"), "memberUID" => _("Group Members"),
"member" => _("Group Member DNs") "member" => _("Group Member DNs"),
"description" => _("Group Description")
); );
$this->ldapHostAttributes = array ( $this->ldapHostAttributes = array (
"UID" => _("Host Username"), "uid" => _("Host Username"),
"cn" => _("Host Name"), "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 // closes connection to LDAP server before serialization
function __sleep() { function __sleep() {
$this->close(); $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 // 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\" />"; 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)"; $filter = "(objectClass=posixGroup)";
$attrs = array("cn", "gidNumber", "memberUID", "description"); $attrs = array("cn", "gidNumber", "memberUID", "description");
$sr = @ldap_search($_SESSION["ldap"]->server(), $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 // print host table header
echo "<table width=\"100%\">\n"; echo "<table width=\"100%\">\n";
echo "<tr><th class=\"userlist\" width=12></th>"; echo "<tr><th class=\"userlist\" width=12></th>";
echo "<th class=\"userlist\">" . _("Grup Name") . "</th>"; // table header
echo "<th class=\"userlist\">" . _("GID Number") . "</th>"; for ($k = 0; $k < sizeof($desc_array); $k++) {
echo "<th class=\"userlist\">" . _("Group Members") . "</th>"; echo "<th class=\"userlist\">" . $desc_array[$k] . "</th>";
echo "<th class=\"userlist\">" . _("Description") . "</th>"; }
echo "</tr>\n"; echo "</tr>\n";
echo ("<form action=\"../templates/account.php?type=group\" method=\"post\">\n"); echo ("<form action=\"../templates/account.php?type=group\" method=\"post\">\n");
// print group list // print group list
for ($i = 0; $i < sizeof($info)-1; $i++) { // ignore last entry in array which is "count" 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("<tr><td class=\"userlist\"><input type=\"radio\" name=\"DN\" value=\"" . $info[$i]["dn"] . "\"></td>");
echo ("<td class=\"userlist\">" . $info[$i]["cn"][0] . "</td>"); for ($k = 0; $k < sizeof($attr_array); $k++) {
echo ("<td class=\"userlist\">" . $info[$i]["gidnumber"][0] . "</td>"); echo ("<td class=\"userlist\">");
// create list of group members // print all attribute entries seperated by "; "
if (sizeof($info[$i]["memberuid"]) > 0) { if (sizeof($info[$i][strtolower($attr_array[$k])]) > 0) {
array_shift($info[$i]["memberuid"]); // delete count entry array_shift($info[$i][strtolower($attr_array[$k])]);
$grouplist = implode("; ", $info[$i]["memberuid"]); 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("</tr>\n");
} }
echo ("</table>"); echo ("</table>");

View File

@ -31,9 +31,30 @@ session_save_path("../sess");
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../style/layout.css\" />"; 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 "$" // Samba hosts have the attribute "sambaAccount" and end with "$"
$filter = "(&(objectClass=sambaAccount) (uid=*$))"; $filter = "(&(objectClass=sambaAccount) (uid=*$))";
$attrs = array("cn", "rid"); $attrs = $attr_array;
$sr = @ldap_search($_SESSION["ldap"]->server(), $sr = @ldap_search($_SESSION["ldap"]->server(),
$_SESSION["config"]->get_HostSuffix(), $_SESSION["config"]->get_HostSuffix(),
$filter, $attrs); $filter, $attrs);
@ -47,14 +68,23 @@ echo ("<form action=\"../templates/account.php?type=host\" method=\"post\">\n");
// print host table // print host table
echo "<table width=\"100%\">\n"; echo "<table width=\"100%\">\n";
echo "<tr><th class=\"userlist\" width=12></th>"; echo "<tr><th class=\"userlist\" width=12></th>";
echo "<th class=\"userlist\">" . _("Host Name") . "</th>"; // table header
echo "<th class=\"userlist\">RID</th>"; for ($k = 0; $k < sizeof($desc_array); $k++) {
echo "<th class=\"userlist\">" . $desc_array[$k] . "</th>";
}
echo "</tr>\n"; echo "</tr>\n";
// print host list // print host list
for ($i = 0; $i < sizeof($info)-1; $i++) { // ignore last entry in array which is "count" 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("<tr><td class=\"userlist\"><input type=\"radio\" name=\"DN\" value=\"" . $info[$i]["dn"] . "\"></td>");
echo ("<td class=\"userlist\">" . $info[$i]["cn"][0] . "</td>"); for ($k = 0; $k < sizeof($attr_array); $k++) {
echo ("<td class=\"userlist\">" . $info[$i]["rid"][0] . "</td>"); 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("</tr>\n");
} }
echo ("</table>"); echo ("</table>");