Commit 55da9053 authored by bpssoft's avatar bpssoft
Browse files

- Add comments to system.inc.php (PEAR) and cleanup wrong tabs

- Add some functionallity to MySQL class
parent 3eeed9bd
......@@ -73,6 +73,3 @@ General tasks
- Add, extend or modify comments in PEAR syntax so that they can be read with phpdocumentor.
- Add a function to prevent brute force password attacks to the login script. E.g. by
logging all login attempts and allowing only 5 logins every 15 minutes.
Task assigned to: BPSsoft
......@@ -217,10 +217,21 @@ class db
public function closeConn()
{
if($this->linkId)
{
mysql_close($this->linkId);
return true;
} else { return false; }
}
public function freeResult()
public function freeResult($query)
{
if(mysql_free_result($query))
{
return true;
} else {
return false;
}
}
public function delete()
......
......@@ -30,970 +30,1083 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
class system{
var $FILE = "/root/ispconfig/scripts/lib/classes/ispconfig_system.lib.php";
var $server_id;
var $server_conf;
var $data;
function system(){
global $go_info;
$this->server_id = $go_info["isp"]["server_id"];
$this->server_conf = $go_info["isp"]["server_conf"];
$this->server_conf["passwd_datei"] = '/etc/passwd';
$this->server_conf["shadow_datei"] = '/etc/shadow';
$this->server_conf["group_datei"] = '/etc/group';
}
function hostname(){
$dist = $this->server_conf["dist"];
ob_start();
passthru("hostname");
$hostname = ob_get_contents();
ob_end_clean();
$hostname = trim($hostname);
ob_start();
if(!strstr($dist, "freebsd")){
passthru("dnsdomainname");
} else {
passthru("domainname");
}
$domainname = ob_get_contents();
ob_end_clean();
$domainname = trim($domainname);
if($domainname != ""){
if(!strstr($hostname, $domainname)) $hostname .= ".".$domainname;
}
return $hostname;
}
function adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort = '*'){
global $app;
if($this->is_user($user_username)){
return false;
} else {
if(trim($user_username) != '') {
$user_datei = $this->server_conf["passwd_datei"];
$shadow_datei = $this->server_conf["shadow_datei"];
$shell = realpath($shell);
if(trim($passwort) == "") $passwort = '*';
$new_user = "\n$user_username:x:$uid:$gid:$username:$homedir:$shell\n";
$app->log->msg("USER: $new_user");
$app->file->af($user_datei, $new_user);
if($shadow_datei == "/etc/shadow"){
$datum = time();
$tage = floor($datum/86400);
$new_passwd = "\n$user_username:$passwort:$tage:0:99999:7:::\n";
} else {
$new_passwd = "\n$user_username:$passwort:$uid:$gid::0:0:$username:$homedir:$shell\n";
}
$app->file->af($shadow_datei, $new_passwd);
// TB: leere Zeilen entfernen
$app->file->remove_blank_lines($shadow_datei);
$app->file->remove_blank_lines($user_datei);
// TB: user Sortierung deaktiviert
//$this->order_users_groups();
if($shadow_datei != "/etc/shadow"){
$app->file->af($shadow_datei, "\n");
// TB: leere Zeilen entfernen
$app->file->remove_blank_lines($shadow_datei);
$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
}
return true;
}
}
}
function updateuser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort = '*'){
$this->deluser($user_username);
$this->adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort);
}
function deactivateuser($user_username){
$passwort = str_rot13($this->getpasswd($user_username));
$user_attr = $this->get_user_attributes($user_username);
$uid = $user_attr["uid"];
$gid = $user_attr["gid"];
$username = $user_attr["name"];
$homedir = $user_attr["homedir"];
$shell = "/dev/null";
$this->deluser($user_username);
$this->adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort);
}
function deluser($user_username){
global $app;
if($this->is_user($user_username)){
$user_datei = $this->server_conf["passwd_datei"];
$shadow_datei = $this->server_conf["shadow_datei"];
$users = $app->file->rf($user_datei);
$lines = explode("\n", $users);
if(is_array($lines)){
$num_lines = sizeof($lines);
for($i=0;$i<$num_lines;$i++){
if(trim($lines[$i]) != ""){
list($f1,) = explode(":", $lines[$i]);
if($f1 != $user_username) $new_lines[] = $lines[$i];
}
}
$new_users = implode("\n", $new_lines);
$app->file->wf($user_datei, $new_users);
unset($new_lines);
unset($lines);
unset($new_users);
}
$app->file->remove_blank_lines($user_datei);
$passwds = $app->file->rf($shadow_datei);
$lines = explode("\n", $passwds);
if(is_array($lines)){
$num_lines = sizeof($lines);
for($i=0;$i<$num_lines;$i++){
if(trim($lines[$i]) != ""){
list($f1,) = explode(":", $lines[$i]);
if($f1 != $user_username) $new_lines[] = $lines[$i];
}
}
$new_passwds = implode("\n", $new_lines);
$app->file->wf($shadow_datei, $new_passwds);
unset($new_lines);
unset($lines);
unset($new_passwds);
}
$app->file->remove_blank_lines($shadow_datei);
$group_file = $app->file->rf($this->server_conf["group_datei"]);
$group_file_lines = explode("\n", $group_file);
foreach($group_file_lines as $group_file_line){
if(trim($group_file_line) != ""){
list($f1, $f2, $f3, $f4) = explode(":", $group_file_line);
$group_users = explode(",", str_replace(" ", "", $f4));
if(in_array($user_username, $group_users)){
$g_users = array();
foreach($group_users as $group_user){
if($group_user != $user_username) $g_users[] = $group_user;
}
$f4 = implode(",", $g_users);
}
$new_group_file[] = $f1.":".$f2.":".$f3.":".$f4;
}
}
$new_group_file = implode("\n", $new_group_file);
$app->file->wf($this->server_conf["group_datei"], $new_group_file);
// TB: auskommentiert
//$this->order_users_groups();
if($shadow_datei != "/etc/shadow"){
$app->file->af($shadow_datei, "\n");
$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
}
return true;
} else {
return false;
}
}
function addgroup($group, $gid, $members = ''){
global $app;
if($this->is_group($group)){
return false;
} else {
$group_datei = $this->server_conf["group_datei"];
$shadow_datei = $this->server_conf["shadow_datei"];
$new_group = "\n$group:x:$gid:$members\n";
$app->file->af($group_datei, $new_group);
// TB: auskommentiert
//$this->order_users_groups();
if($shadow_datei != "/etc/shadow"){
$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
}
return true;
}
}
function updategroup($group, $gid, $members = ''){
$this->delgroup($group);
$this->addgroup($group, $gid, $members);
}
function delgroup($group){
global $app;
if($this->is_group($group)){
$group_datei = $this->server_conf["group_datei"];
$shadow_datei = $this->server_conf["shadow_datei"];
$groups = $app->file->rf($group_datei);
$lines = explode("\n", $groups);
if(is_array($lines)){
$num_lines = sizeof($lines);
for($i=0;$i<$num_lines;$i++){
if(trim($lines[$i]) != ""){
list($f1,) = explode(":", $lines[$i]);
if($f1 != $group) $new_lines[] = $lines[$i];
}
}
$new_groups = implode("\n", $new_lines);
$app->file->wf($group_datei, $new_groups);
unset($new_lines);
unset($lines);
unset($new_groups);
}
// TB: auskommentiert
//$this->order_users_groups();
if($shadow_datei != "/etc/shadow"){
$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
}
return true;
} else {
return false;
}
}
function order_users_groups(){
global $app;
$user_datei = $this->server_conf["passwd_datei"];
$shadow_datei = $this->server_conf["shadow_datei"];
$group_datei = $this->server_conf["group_datei"];
$groups = $app->file->no_comments($group_datei);
$lines = explode("\n", $groups);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4) = explode(":", $line);
$arr[$f3] = $line;
}
}
}
ksort($arr);
reset($arr);
if($shadow_datei != "/etc/shadow"){
$app->file->wf($group_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0)."\n");
}else {
$app->file->wf($group_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
}
unset($arr);
$users = $app->file->no_comments($user_datei);
$lines = explode("\n", $users);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3,) = explode(":", $line);
if($f1 != "toor"){
$arr[$f3] = $line;
} else {
$arr[70000] = $line;
}
}
}
}
ksort($arr);
reset($arr);
$app->file->wf($user_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
unset($arr);
$passwds = $app->file->no_comments($shadow_datei);
$lines = explode("\n", $passwds);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3,) = explode(":", $line);
if($f1 != "toor"){
$uid = $this->getuid($f1);
if(!is_bool($uid)) $arr[$uid] = $line;
} else {
$arr[70000] = $line;
}
}
}
}
ksort($arr);
reset($arr);
$app->file->wf($shadow_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
unset($arr);
}
function find_uid_gid($min, $max){
global $app;
if($min < $max && $min >= 0 && $max >= 0 && $min <= 65536 && $max <= 65536 && is_int($min) && is_int($max)){
for($i=$min;$i<=$max;$i++){
$uid_arr[$i] = $gid_arr[$i] = 1;
}
$user_datei = $this->server_conf["passwd_datei"];
$group_datei = $this->server_conf["group_datei"];
$users = $app->file->no_comments($user_datei);
$lines = explode("\n", $users);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4, $f5, $f6, $f7) = explode(":", $line);
if($f3 >= $min && $f3 <= $max) unset($uid_arr[$f3]);
}
}
if(!empty($uid_arr)){
foreach($uid_arr as $key => $val){
$uids[] = $key;
}
$min_uid = min($uids);
unset($uid_arr);
} else {
return false;
}
}
$groups = $app->file->no_comments($group_datei);
$lines = explode("\n", $groups);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4) = explode(":", $line);
if($f3 >= $min && $f3 <= $max) unset($gid_arr[$f3]);
}
}
if(!empty($gid_arr)){
foreach($gid_arr as $key => $val){
$gids[] = $key;
}
$min_gid = min($gids);
unset($gid_arr);
} else {
return false;
}
}
$result = array_intersect($uids, $gids);
$new_id = (max($result));
unset($uids);
unset($gids);
unset($result);
if($new_id <= $max){
return $new_id;
} else {
return false;
}
} else {
return false;
}
}
function is_user($user){
global $app;
$user_datei = $this->server_conf["passwd_datei"];
$users = $app->file->no_comments($user_datei);
$lines = explode("\n", $users);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4, $f5, $f6, $f7) = explode(":", $line);
if($f1 == $user) return true;
}
}
}
return false;
}
function is_group($group){
global $app;
$group_datei = $this->server_conf["group_datei"];
$groups = $app->file->no_comments($group_datei);
$lines = explode("\n", $groups);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4) = explode(":", $line);
if($f1 == $group) return true;
}
}
}
return false;
}
function root_group(){
global $app;
$group_datei = $this->server_conf["group_datei"];
$groups = $app->file->no_comments($group_datei);
$lines = explode("\n", $groups);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4) = explode(":", $line);
if($f3 == 0) return $f1;
}
}
}
return false;
}
function get_user_groups($username){
global $app;
$user_groups = array();
$group_datei = $this->server_conf["group_datei"];
$groups = $app->file->no_comments($group_datei);
$lines = explode("\n", $groups);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4) = explode(":", $line);
if(intval($f3) < intval($this->server_conf["groupid_von"]) && trim($f1) != 'users'){
$tmp_group_users = explode(',', str_replace(' ', '', $f4));
if(in_array($username, $tmp_group_users) && trim($f1) != '') $user_groups[] = $f1;
unset($tmp_group_users);
}
}
}
}
if(!empty($user_groups)) return implode(',', $user_groups);
return '';
}
function getpasswd($user){
global $app;
if($this->is_user($user)){
$shadow_datei = $this->server_conf["shadow_datei"];
$passwds = $app->file->no_comments($shadow_datei);
$lines = explode("\n", $passwds);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2,) = explode(":", $line);
if($f1 == $user) return $f2;
}
}
}
} else {
return false;
}
}
function getuid($user){
global $app;
if($this->is_user($user)){
$user_datei = $this->server_conf["passwd_datei"];
$users = $app->file->no_comments($user_datei);
$lines = explode("\n", $users);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3,) = explode(":", $line);
if($f1 == $user) return $f3;
}
}
}
} else {
return false;
}
}
function get_user_attributes($user){
global $app;
if($this->is_user($user)){
$user_datei = $this->server_conf["passwd_datei"];
$users = $app->file->no_comments($user_datei);
$lines = explode("\n", $users);
if(is_array($lines)){
foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4, $f5, $f6, $f7) = explode(":", $line);
if($f1 == $user){
$user_attr["username"] = $f1;
$user_attr["x"] = $f2;
$user_attr["uid"] = $f3;
$user_attr["gid"] = $f4;
$user_attr["name"] = $f5;
$user_attr["homedir"] = $f6;
$user_attr["shell"] = $f7;
return $user_attr;
}
}
}
}
} else {
return false;
}
}
function chown($file, $owner, $group = ''){
$owner_change = @chown($file, $owner);
if($group != ""){
$group_change = @chgrp($file, $group);
} else {
$group_change = 1;
}
if($owner_change && $group_change){
return true;
} else {
return false;
}
}
function add_user_to_group($group, $user = 'admispconfig'){
global $app;
$group_file = $app->file->rf($this->server_conf["group_datei"]);
$group_file_lines = explode("\n", $group_file);
foreach($group_file_lines as $group_file_line){
list($group_name,$group_x,$group_id,$group_users) = explode(":",$group_file_line);
if($group_name == $group){
$group_users = explode(",", str_replace(" ", "", $group_users));
if(!in_array($user, $group_users)){
$group_users[] = $user;
}
$group_users = implode(",", $group_users);
if(substr($group_users,0,1) == ",") $group_users = substr($group_users,1);
$group_file_line = $group_name.":".$group_x.":".$group_id.":".$group_users;
}
$new_group_file[] = $group_file_line;
}
$new_group_file = implode("\n", $new_group_file);
$app->file->wf($this->server_conf["group_datei"], $new_group_file);
$app->file->remove_blank_lines($this->server_conf["group_datei"]);
if($this->server_conf["shadow_datei"] != "/etc/shadow"){
$app->log->caselog("pwd_mkdb ".$this->server_conf["shadow_datei"]." &> /dev/null", $this->FILE, __LINE__);
}
}
function usermod($user, $groups){
global $app;
if($this->is_user($user)){
$groups = explode(",", str_replace(" ", "", $groups));
$group_file = $app->file->rf($this->server_conf["group_datei"]);
$group_file_lines = explode("\n", $group_file);
foreach($group_file_lines as $group_file_line){
if(trim($group_file_line) != ""){
list($f1, $f2, $f3, $f4) = explode(":", $group_file_line);
$group_users = explode(",", str_replace(" ", "", $f4));
if(!in_array($f1, $groups)){
if(in_array($user, $group_users)){
$g_users = array();
foreach($group_users as $group_user){
if($group_user != $user) $g_users[] = $group_user;
}
$f4 = implode(",", $g_users);
}
} else {
if(!in_array($user, $group_users)){
if(trim($group_users[0]) == "") unset($group_users);
$group_users[] = $user;
}
$f4 = implode(",", $group_users);
}
$new_group_file[] = $f1.":".$f2.":".$f3.":".$f4;
}
}
$new_group_file = implode("\n", $new_group_file);
$app->file->wf($this->server_conf["group_datei"], $new_group_file);
$app->file->remove_blank_lines($this->server_conf["group_datei"]);
if($this->server_conf["shadow_datei"] != "/etc/shadow"){
$app->log->caselog("pwd_mkdb ".$this->server_conf["shadow_datei"]." &> /dev/null", $this->FILE, __LINE__);
}