From 0a27b5f9d13a5f6a19a955588565170bd4ad66a5 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Wed, 2 Apr 2003 17:16:21 +0000 Subject: [PATCH] implemented individual columns in group/host list fixed bug in ldap.php which did not save the attribute arrays --- lam/lam.conf | 6 ++--- lam/lib/ldap.php | 11 +++++---- lam/lib/listgroups.php | 54 +++++++++++++++++++++++++++++------------- lam/lib/listhosts.php | 40 +++++++++++++++++++++++++++---- 4 files changed, 82 insertions(+), 29 deletions(-) diff --git a/lam/lam.conf b/lam/lam.conf index e018c44c..66de67ae 100644 --- a/lam/lam.conf +++ b/lam/lam.conf @@ -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 diff --git a/lam/lib/ldap.php b/lam/lib/ldap.php index d9e1d551..182ae5b0 100644 --- a/lam/lib/ldap.php +++ b/lam/lib/ldap.php @@ -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 diff --git a/lam/lib/listgroups.php b/lam/lib/listgroups.php index 7a7c1639..c28776e3 100644 --- a/lam/lib/listgroups.php +++ b/lam/lib/listgroups.php @@ -9,18 +9,18 @@ $Id$ 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 detaexils. - + 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 code displays a list of all Samba hosts. - + */ include_once ('../config/config.php'); include_once("ldap.php"); @@ -31,7 +31,28 @@ session_save_path("../sess"); echo ""; -// 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 ("

" . _("No Groups found!") . "\n"; echo ""; -echo "" . _("Grup Name") . ""; -echo "" . _("GID Number") . ""; -echo "" . _("Group Members") . ""; -echo "" . _("Description") . ""; +// table header +for ($k = 0; $k < sizeof($desc_array); $k++) { + echo "" . $desc_array[$k] . ""; +} echo "\n"; echo ("
\n"); // print group list for ($i = 0; $i < sizeof($info)-1; $i++) { // ignore last entry in array which is "count" echo(""); - echo ("" . $info[$i]["cn"][0] . ""); - echo ("" . $info[$i]["gidnumber"][0] . ""); - // 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 (""); + // 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 (""); } - else $grouplist = ""; - echo ("" . $grouplist . ""); - echo ("" . $info[$i]["description"][0] . ""); echo("\n"); } echo (""); diff --git a/lam/lib/listhosts.php b/lam/lib/listhosts.php index 13105e6b..7ecaba25 100644 --- a/lam/lib/listhosts.php +++ b/lam/lib/listhosts.php @@ -31,9 +31,30 @@ session_save_path("../sess"); echo ""; +// 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 ("\n"); // print host table echo "\n"; echo ""; -echo ""; -echo ""; +// table header +for ($k = 0; $k < sizeof($desc_array); $k++) { + echo ""; +} echo "\n"; // print host list for ($i = 0; $i < sizeof($info)-1; $i++) { // ignore last entry in array which is "count" echo(""); - echo (""); - echo (""); + for ($k = 0; $k < sizeof($attr_array); $k++) { + echo (""); + } echo("\n"); } echo ("
" . _("Host Name") . "RID" . $desc_array[$k] . "
" . $info[$i]["cn"][0] . "" . $info[$i]["rid"][0] . ""); + // 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 ("
");