Skip to content
system.inc.php 38.7 KiB
Newer Older
	           				while($i >= 0){
	             				if(isset($ifconfig["INTERFACE"][$main_interface.":".$i])){
	               					$i++;
					             } else {
	               					$new_interface = $main_interface.":".$i;
	               					$i = -1;
	             				}
	           				}
	           				exec("ifconfig ".$new_interface." ".$to." netmask ".$this->server_conf["server_netzmaske"]." up &> /dev/null");
	           				$ifconfig["INTERFACE"][$new_interface] = $to;
	          			}
	        		}
	      		}
	    	}
	  	}
	}
	
	function quota_dirs(){
	  global $app;
	  $content = $app->file->unix_nl($app->file->no_comments("/etc/fstab"));
	  $lines = explode("\n", $content);
	  foreach($lines as $line){
	    $line = trim($line);
	    if($line != ""){
	      $elms = explode("\t", $line);
	      foreach($elms as $elm){
	        if(trim($elm) != "") $f[] = $elm;
	      }
	      if(!empty($f) && stristr($f[3], "userquota") && stristr($f[3], "groupquota")){
	        $q_dirs[] = trim($f[1]);
	      }
	      unset($f);
	    }
	  }
	  if(!empty($q_dirs)){
	    return $q_dirs;
	  } else {
	    return false;
	  }
	}
	
	/**
	 * Scan the trash for virusses infection
	 *
	 */
	function make_trashscan(){
		global $app;
	  	//trashscan erstellen
	  	// Template ffnen
	  	$app->tpl->clear_all();
	  	$app->tpl->define( array(table    => "trashscan.master"));
	
	  	if(!isset($this->server_conf["virusadmin"]) || trim($this->server_conf["virusadmin"]) == "") $this->server_conf["virusadmin"] = "admispconfig@localhost";
	  	if(substr($this->server_conf["virusadmin"],0,1) == "#"){
		    $notify = "no";
	  	} else {
		    $notify = "yes";
	  	}
	
	  	// Variablen zuweisen
	  	$app->tpl->assign( array(VIRUSADMIN => $this->server_conf["virusadmin"],
	                           NOTIFICATION => $notify));
	
	  	$app->tpl->parse(TABLE, table);
	
	  	$trashscan_text = $app->tpl->fetch();
	
	  	$datei = "/home/admispconfig/ispconfig/tools/clamav/bin/trashscan";
	  	$app->file->wf($datei, $trashscan_text);
	
	  	exec("chown admispconfig:admispconfig $datei &> /dev/null");
	  	exec("chmod 755 $datei");
	}
	
	/**
	 * Get the current time
	 *
	 */
	function get_time(){
	  $addr = "http://www.ispconfig.org/";
	  $timeout = 1;
	  $url_parts = parse_url($addr);
	  $path = $url_parts["path"];
	  $port = 80;
	  $urlHandle = @fsockopen($url_parts["host"], $port, $errno, $errstr, $timeout);
	  if ($urlHandle){
	    socket_set_timeout($urlHandle, $timeout);
	
	    $urlString = "GET $path HTTP/1.0\r\nHost: ".$url_parts["host"]."\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
	    if ($user) $urlString .= "Authorization: Basic ".base64_encode("$user:$pass")."\r\n";
	    $urlString .= "\r\n";
	    fputs($urlHandle, $urlString);
	
	    $month["Jan"] = "01";
	    $month["Feb"] = "02";
	    $month["Mar"] = "03";
	    $month["Apr"] = "04";
	    $month["May"] = "05";
	    $month["Jun"] = "06";
	    $month["Jul"] = "07";
	    $month["Aug"] = "08";
	    $month["Sep"] = "09";
	    $month["Oct"] = "10";
	    $month["Nov"] = "11";
	    $month["Dec"] = "12";
	    $c = 0;
	    $l = 0;
	    $startzeit = time();
	    while(!feof($urlHandle) && $c < 2 && $l == 0){
	      $line = trim(fgets($urlHandle,128));
	      $response .= $line;
	      $c = time() - $startzeit;
	      if($line == "" || substr($line, 0, 5) == "Date:") $l += 1; // nur den Header auslesen
	      if(substr($line, 0, 5) == "Date:"){
	        $parts = explode(" ", $line);
	        $tag = $parts[2];
	        $monat = $month[$parts[3]];
	        $jahr = $parts[4];
	        list($stunde, $minute, $sekunde) = explode(":", $parts[5]);
	        $timestamp = mktime($stunde,$minute,$sekunde,$monat,$tag,$jahr);
	      }
	    }
	
	    @fclose($urlHandle);
	
	    return $timestamp;
	  } else {
	    @fclose($urlHandle);
	    return false;
	  }
	}
	
	function replaceLine($filename,$search_pattern,$new_line,$strict = 0,$append = 1) {
		$lines = @file($filename);
		$out = '';
		$found = 0;
		if(is_array($lines)) {
			foreach($lines as $line) {
				if($strict == 0) {
					if(stristr($line,$search_pattern)) {
						$out .= $new_line."\n";
						$found = 1;
					} else {
						$out .= $line;
					}
				} else {
					if(trim($line) == $search_pattern) {
						$out .= $new_line."\n";
						$found = 1;
					} else {
						$out .= $line;
					}
				}
			}
		}
		
		if($found == 0) {
			//* add \n if the last line does not end with \n or \r
			if(substr($out,-1) != "\n" && substr($out,-1) != "\r") $out .= "\n";
			//* add the new line at the end of the file
			if($append == 1) $out .= $new_line."\n";
		}
		file_put_contents($filename,$out);
	}
	
	function removeLine($filename,$search_pattern,$strict = 0) {
	if($lines = @file($filename)) {
		$out = '';
		foreach($lines as $line) {
			if($strict == 0) {
				if(!stristr($line,$search_pattern)) {
					$out .= $line;
				}
			} else {
				if(!trim($line) == $search_pattern) {
					$out .= $line;
				}
			}
		}
		file_put_contents($filename,$out);
	}
	}
	
	function maildirmake($maildir_path, $user = '', $subfolder = '') {
		
		global $app;
		
		if($subfolder != '') {
			$dir = escapeshellarg($maildir_path.'/.'.$subfolder);
			$dir_cur = escapeshellarg($maildir_path.'/.'.$subfolder.'/cur');
			$dir_new = escapeshellarg($maildir_path.'/.'.$subfolder.'/new');
			$dir_tmp = escapeshellarg($maildir_path.'/.'.$subfolder.'/tmp');
		} else {
			$dir = escapeshellarg($maildir_path);
			$dir_cur = escapeshellarg($maildir_path.'/cur');
			$dir_new = escapeshellarg($maildir_path.'/new');
			$dir_tmp = escapeshellarg($maildir_path.'/tmp');
		}
		
		exec("mkdir -p $dir_cur $dir_new $dir_tmp");
		exec("chmod 0700 $dir $dir_cur $dir_new $dir_tmp");
		
		if($user != '' && $this->is_user($user) && $user != 'root') {
			$user = escapeshellarg($user);
			// I assume that the name of the (vmail group) is the same as the name of the mail user in ispconfig 3
			$group = $user;
			exec("chown $user:$group $dir $dir_cur $dir_new $dir_tmp");
		}
		
		//* Add the subfolder to the subscriptions and courierimapsubscribed files
		if($subfolder != '') {
			// Courier
			if(!is_file($maildir_path.'/courierimapsubscribed')) {
				$tmp_file = escapeshellarg($maildir_path.'/courierimapsubscribed');
				exec("touch $tmp_file && chown vmail:vmail $tmp_file");
			}
			$this->replaceLine($maildir_path.'/courierimapsubscribed','INBOX.'.$subfolder,'INBOX.'.$subfolder,1,1);
			
			// Dovecot
			if(!is_file($maildir_path.'/subscriptions')) {
				$tmp_file = escapeshellarg($maildir_path.'/subscriptions');
				exec("touch $tmp_file && chown vmail:vmail $tmp_file");
			}
			$this->replaceLine($maildir_path.'/subscriptions',$subfolder,$subfolder,1,1);
		}
		
		$app->log('Created Maildir '.$maildir_path.' with subfolder: '.$subfolder,LOGLEVEL_DEBUG);
		
	}