get_groupSuffix(); $filter = "objectClass=posixGroup"; $attrs = array("cn", "gidNumber"); $sr = @ldap_search($_SESSION["ldap"]->server(), $suffix, $filter, $attrs); if ($sr) { $info = @ldap_get_entries($_SESSION["ldap"]->server(), $sr); array_shift($info); // delete count entry for ($i = 0; $i < sizeof($info); $i++) { $trans_primary_hash[$info[$i]['gidnumber'][0]] = $info[$i]['cn'][0]; } $_SESSION['trans_primary_hash'] = $trans_primary_hash; } } $usr_units = $_SESSION['usr_units']; // check if button was pressed and if we have to add/delete a user or create a PDF if ($_POST['new_user'] || $_POST['del_user'] || $_POST['pdf_user'] || $_POST['pdf_all']){ // add new user if ($_POST['new_user']){ metaRefresh("../account/useredit.php?type=user"); exit; } // delete user(s) elseif ($_POST['del_user']){ // search for checkboxes $users = array_keys($_POST, "on"); $userstr = implode(";", $users); metaRefresh("../delete.php?type=user&DN='$userstr'"); } // PDF for selected users elseif ($_POST['pdf_user']){ // search for checkboxes $users = array_keys($_POST, "on"); $list = array(); // load users from LDAP for ($i = 0; $i < sizeof($users); $i++) { $list[$i] = loaduser($users[$i]); $list[$i]->unix_password = ""; $list[$i]->smb_password = ""; } if (sizeof($list) > 0) createUserPDF($list); } // PDF for all users elseif ($_POST['pdf_all']){ $list = array(); for ($i = 0; $i < sizeof($_SESSION['userlist']); $i++) { $list[$i] = loaduser($_SESSION['userlist'][$i]['dn']); $list[$i]->unix_password = ""; $list[$i]->smb_password = ""; } if (sizeof($list) > 0) createUserPDF($list); } exit; } echo $_SESSION['header']; echo "listusers\n"; echo "\n"; echo "\n"; echo "\n"; $page = $_GET["page"]; if (!$page) $page = 1; // take maximum count of user entries shown on one page out of session if ($_SESSION["config"]->get_MaxListEntries() <= 0) { $max_pageentrys = 10; // default setting, if not yet set } else $max_pageentrys = $_SESSION["config"]->get_MaxListEntries(); // generate attribute-description table $attr_array = array(); // list of LDAP attributes to show $desc_array = array(); // list of descriptions for the attributes $attr_string = $_SESSION["config"]->get_userlistAttributes(); $temp_array = explode(";", $attr_string); $hash_table = $_SESSION["ldap"]->attributeUserArray(); // generate column attributes and descriptions 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 = strtolower(substr($temp_array[$i],1)); $attr_array[$i] = $attr; $desc_array[] = strtoupper($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] = strtoupper($attr[1]); } } $sortattrib = $_GET["sortattrib"]; if (!$sortattrib) $sortattrib = strtolower($attr_array[0]); // check search suffix if ($_POST['usr_suffix']) $usr_suffix = $_POST['usr_suffix']; // new suffix selected via combobox elseif ($_SESSION['usr_suffix']) $usr_suffix = $_SESSION['usr_suffix']; // old suffix from session else $usr_suffix = $_SESSION["config"]->get_UserSuffix(); // default suffix // generate search filter for sort links $searchfilter = ""; for ($k = 0; $k < sizeof($desc_array); $k++) { if (eregi("^([0-9a-z_\\*\\+\\-])+$", $_POST["filter" . strtolower($attr_array[$k])])) { $searchfilter = $searchfilter . "&filter" . strtolower($attr_array[$k]) . "=". $_POST["filter" . strtolower($attr_array[$k])]; } } // configure search filter // Unix/Samba3 users have the attribute "posixAccount" and do not end with "$" $filter = "(&(objectClass=posixAccount) (!(uid=*$))"; for ($k = 0; $k < sizeof($desc_array); $k++) { if (eregi("^([0-9a-z_\\*\\+\\-])+$", $_POST["filter" . strtolower($attr_array[$k])])) $filter = $filter . "(" . strtolower($attr_array[$k]) . "=" . $_POST["filter" . strtolower($attr_array[$k])] . ")"; else $_POST["filter" . strtolower($attr_array[$k])] = ""; } $filter = $filter . ")"; // read entries only from ldap server if not yet stored in session or if refresh // button is pressed or if filter is applied if ($_SESSION["userlist"] && $_GET["norefresh"]) { usort ($_SESSION["userlist"], "cmp_array"); $userinfo = $_SESSION["userlist"]; } else { $attrs = $attr_array; $sr = @ldap_search($_SESSION["ldap"]->server(), $usr_suffix, $filter, $attrs); if (ldap_errno($_SESSION["ldap"]->server()) == 4) { StatusMessage("WARN", _("LDAP sizelimit exceeded, not all entries are shown."), "See README.openldap to solve this problem."); } if ($sr) { $userinfo = ldap_get_entries ($_SESSION["ldap"]->server, $sr); ldap_free_result ($sr); if ($userinfo["count"] == 0) StatusMessage("WARN", "", _("No Users found!")); // delete first array entry which is "count" array_shift($userinfo); usort ($userinfo, "cmp_array"); $_SESSION["userlist"] = $userinfo; } else { $_SESSION['userlist'] = array(); $userinfo = array(); StatusMessage("ERROR", _("LDAP Search failed! Please check your preferences."), _("No Users found!")); } } $user_count = sizeof ($_SESSION["userlist"]); echo ("
\n"); // display table only if users exist in LDAP if ($user_count != 0) { // create navigation bar on top of user table draw_navigation_bar ($user_count); echo ("
"); } // print user table header echo "\n"; echo "\n"; // table header for ($k = 0; $k < sizeof ($desc_array); $k++) { if ($sortattrib == strtolower($attr_array[$k])) echo "\n"; } echo "\n"; echo "\n\n"; // print input boxes for filters for ($k = 0; $k < sizeof ($desc_array); $k++) { echo "\n"; } echo "\n"; if ($user_count != 0) { // translate GIDs and resort array if selected if ($trans_primary == "on") { // translate GIDs for ($i = 0; $i < sizeof($userinfo); $i++) { if ($trans_primary_hash[$userinfo[$i]['gidnumber'][0]]) { $userinfo[$i]['gidnumber'][0] = $trans_primary_hash[$userinfo[$i]['gidnumber'][0]]; } } // resort if needed if ($sortattrib == "gidnumber") { usort ($userinfo, "cmp_array"); } } // print user list $userinfo = array_slice ($userinfo, ($page - 1) * $max_pageentrys, $max_pageentrys); for ($i = 0; $i < sizeof ($userinfo); $i++) { // ignore last entry in array which is "count" echo("\n"); // check boxes if selectall = "yes" if ($_GET['selectall'] == "yes") { echo "\n"; } else { echo "\n"; } echo ("\n"); for ($k = 0; $k < sizeof($attr_array); $k++) { echo ("\n"); } echo("\n"); } // display select all link $colspan = sizeof($attr_array) + 1; echo "\n"; echo "\n"; echo "\n"; echo "\n"; } echo ("
\n"; else echo "\n"; echo "" . $desc_array[$k] . "
\n"; echo "\n"; echo "\n"; echo ("\n"); echo "
\n\n\n\n\n" . _("Edit") . "\n\n"); // print attribute values if (sizeof($userinfo[$i][strtolower($attr_array[$k])]) > 0) { if (is_array($userinfo[$i][strtolower($attr_array[$k])])) { // delete first array entry which is "count" array_shift($userinfo[$i][strtolower($attr_array[$k])]); // sort array sort($userinfo[$i][strtolower($attr_array[$k])]); // print all attribute entries seperated by "; " echo utf8_decode(implode("; ", $userinfo[$i][strtolower($attr_array[$k])])) . "\n"; } else echo utf8_decode($userinfo[$i][strtolower($attr_array[$k])]) . "\n"; } echo ("
\"select " . "" . _("Select all") . "
\n"); echo ("
"); if ($user_count != 0) { draw_navigation_bar ($user_count); echo ("
"); } if (! $_GET['norefresh']) { // generate list of possible suffixes $usr_units = $_SESSION['ldap']->search_units($_SESSION["config"]->get_UserSuffix()); } // print combobox with possible sub-DNs if (sizeof($usr_units) > 1) { echo ("

\n"); echo ("" . _("Suffix") . ": "); echo ("\n"); echo (""); echo ("

\n"); } // show translate GID to group name box if there is a column with gidnumber if (in_array("gidnumber", $attr_array)) { echo "

\n"; echo "" . _("Translate GID number to group name") . ": "; if ($trans_primary == "on") { echo ""; } else echo ""; echo ("  "); echo "

\n"; } echo ("

 

\n"); echo ("

\n"); echo ("\n"); if ($user_count != 0) { echo ("\n"); echo ("

\n"); echo ("\n"); echo ("\n"); } echo ("

\n"); echo ("

 

\n"); echo ("
\n"); echo "\n"; /** * @brief draws a navigation bar to switch between pages * * * @return void */ function draw_navigation_bar ($user_count) { global $max_pageentrys; global $page; global $sortattrib; global $searchfilter; global $trans_primary; echo ("\n"); echo ("\n"); echo ("\n"); echo ("\n
\n\n  "); if ($page != 1) echo ("<=\n"); else echo ("<="); echo (" "); if ($page < ($user_count / $max_pageentrys)) echo ("=>\n"); else echo ("=>"); echo ("\n"); echo " " . $user_count . " " . _("User(s) found") . "\n"; echo (""); for ($i = 0; $i < ($user_count / $max_pageentrys); $i++) { if ($i == $page - 1) echo (" " . ($i + 1)); else echo (" " . ($i + 1) . "\n"); } echo ("
\n"); } // compare function used for usort-method // rows are sorted with the first attribute entry of the sort column // if objects have attributes with multiple values the others are ignored function cmp_array($a, $b) { // sortattrib specifies the sort column global $sortattrib; global $attr_array; // sort by first attribute with name $sortattrib if (!$sortattrib) $sortattrib = strtolower($attr_array[0]); if ($a[$sortattrib][0] == $b[$sortattrib][0]) return 0; else if ($a[$sortattrib][0] == max($a[$sortattrib][0], $b[$sortattrib][0])) return 1; else return -1; } // save variables to session $_SESSION['usr_units'] = $usr_units; $_SESSION['usr_suffix'] = $usr_suffix; ?>