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);
$elms = explode("\t", $line);
foreach($elms as $elm){
if(trim($elm) != '') $f[] = $elm;
if(!empty($f) && stristr($f[3], 'userquota') && stristr($f[3], 'groupquota')){
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
$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';
}
// 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);
chmod($datei, 0755);
chown($datei,'admispconfig');
chgrp($datei,'admispconfig');
}
/**
* Get the current time
*
*/
function get_time(){
$addr = 'http://www.ispconfig.org/';
$timeout = 1;
$url_parts = parse_url($addr);
$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;
}
}
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
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" && filesize($filename) > 0) $out .= "\n";
//* add the new line at the end of the file
if($append == 1) {
$out .= $new_line."\n";
}
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
}
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 != '') {
tbrehm
committed
$dir = escapeshellcmd($maildir_path.'/.'.$subfolder);
tbrehm
committed
$dir = escapeshellcmd($maildir_path);
tbrehm
committed
if(!is_dir($dir)) mkdir($dir, 0700, true);
if($user != '' && $user != 'root' && $this->is_user($user)) {
tbrehm
committed
$user = escapeshellcmd($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;
if(is_dir($dir)) chown($dir,$user);
if(is_dir($dir)) chgrp($dir,$group);
$maildirsubs = array('cur','new','tmp');
foreach ($maildirsubs as $mdsub) {
if(!is_dir($dir.'/'.$mdsub)) mkdir($dir.'/'.$mdsub, 0700, true);
if ($chown_mdsub) {
chown($dir.'/'.$mdsub, $user);
chgrp($dir.'/'.$mdsub, $group);
}
}
chmod($dir, 0700);
tbrehm
committed
/*
if($user != '' && $this->is_user($user) && $user != 'root') {
tbrehm
committed
$user = escapeshellcmd($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");
tbrehm
committed
*/
//* Add the subfolder to the subscriptions and courierimapsubscribed files
if($subfolder != '') {
// Courier
if(!is_file($maildir_path.'/courierimapsubscribed')) {
tbrehm
committed
$tmp_file = escapeshellcmd($maildir_path.'/courierimapsubscribed');
touch($tmp_file);
chmod($tmp_file, 0744);
chown($tmp_file,'vmail');
chgrp($tmp_file,'vmail');
}
$this->replaceLine($maildir_path.'/courierimapsubscribed','INBOX.'.$subfolder,'INBOX.'.$subfolder,1,1);
// Dovecot
if(!is_file($maildir_path.'/subscriptions')) {
tbrehm
committed
$tmp_file = escapeshellcmd($maildir_path.'/subscriptions');
touch($tmp_file);
chmod($tmp_file, 0744);
chown($tmp_file,'vmail');
chgrp($tmp_file,'vmail');
}
$this->replaceLine($maildir_path.'/subscriptions',$subfolder,$subfolder,1,1);
}
$app->log('Created Maildir '.$maildir_path.' with subfolder: '.$subfolder,LOGLEVEL_DEBUG);
}
//* Function to create directory paths and chown them to a user and group
function mkdirpath($path, $mode = 0755, $user = '', $group = '') {
$path_parts = explode('/',$path);
$new_path = '';
if(is_array($path_parts)) {
foreach($path_parts as $part) {
$new_path .= '/'.$part;
if(!@is_dir($new_path)) {
mkdir($new_path);
chmod($new_path,$mode);
if($user != '') chown($new_path,$user);
if($group != '') chgrp($new_path,$group);
}
}
}
}
tbrehm
committed
//* Check if a application is installed
function is_installed($appname) {
exec('which '.escapeshellcmd($appname).' 2> /dev/null',$out,$returncode);
if(isset($out[0]) && stristr($out[0],$appname) && $returncode == 0) {
return true;
} else {
return false;
}
}
function web_folder_protection($document_root,$protect) {
global $app,$conf;
//* load the server configuration options
$app->uses('getconf');
$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
if($protect == true && $web_config['web_folder_protection'] == 'y') {
//* Add protection
if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root,'..')) exec('chattr +i '.escapeshellcmd($document_root));
} else {
//* Remove protection
if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root,'..')) exec('chattr -i '.escapeshellcmd($document_root));
}
}