Newer
Older
$ip_bin = str_pad(decbin($f1),8,'0',STR_PAD_LEFT).str_pad(decbin($f2),8,'0',STR_PAD_LEFT).str_pad(decbin($f3),8,'0',STR_PAD_LEFT).str_pad(decbin($f4),8,'0',STR_PAD_LEFT);
$broadcast_bin = str_pad(substr($ip_bin, 0, $binary_netmask),32,'1',STR_PAD_RIGHT);
$broadcast_bin = wordwrap($broadcast_bin, 8, '.', 1);
list($f1,$f2,$f3,$f4) = explode('.', trim($broadcast_bin));
return bindec($f1).'.'.bindec($f2).'.'.bindec($f3).'.'.bindec($f4);
}
/**
* Get the network address information
*
*/
function network_info(){
$dist = $this->server_conf['dist'];
$output = ob_get_contents();
ob_end_clean();
$lines = explode("\n", $output);
foreach($lines as $line){
$elms = explode(' ', $line);
if(trim($elms[0]) != '' && substr($elms[0],0,1) != "\t"){
$elms[0] = trim($elms[0]);
if(strstr($dist, 'freebsd')) $elms[0] = substr($elms[0],0,-1);
$interfaces[] = $elms[0];
}
}
if(!empty($interfaces)){
foreach($interfaces as $interface){
ob_start();
if(!strstr($dist, 'freebsd')){
passthru('ifconfig '.$interface." | grep -iw 'inet' | cut -f2 -d: | cut -f1 -d' '");
passthru('ifconfig '.$interface." | grep -iw 'inet' | grep -iv 'inet6' | cut -f2 -d' '");
}
$output = trim(ob_get_contents());
ob_end_clean();
if($output != ''){
$ifconfig['INTERFACE'][$interface] = $output;
$ifconfig['IP'][$output] = $interface;
}
}
if(!empty($ifconfig)){
return $ifconfig;
} else {
return false;
}
} else {
return false;
}
}
/**
* Configure the network settings from the system
*
*/
function network_config(){
$ifconfig = $this->network_info();
if($ifconfig){
$main_interface = $ifconfig['IP'][$this->server_conf['server_ip']];
if(strstr($main_interface, ':')){
$parts = explode(':', $main_interface);
$main_interface = trim($parts[0]);
}
if($main_interface != ''){
$ips = $this->data['isp_server_ip'];
if(!empty($ips)){
foreach($ips as $ip){
if(!isset($ifconfig['IP'][$ip['server_ip']])){
$to_set[] = $ip['server_ip'];
unset($ifconfig['IP'][$ip['server_ip']]);
if(!empty($ifconfig['IP'])){
foreach($ifconfig['IP'] as $key => $val){
if(!strstr($val, 'lo') && !strstr($val, 'lp') && strstr($val, $main_interface)){
exec('ifconfig '.$val.' down &> /dev/null');
unset($ifconfig['INTERFACE'][$val]);
}
}
}
if(!empty($to_set)){
foreach($to_set as $to){
$i = 0;
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')){
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
$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;
}
}
function replaceLine($filename,$search_pattern,$new_line,$strict = 0,$append = 1) {
if($this->checkpath($filename) == false) {
$app->log("Action aborted, file is a symlink: $filename",LOGLEVEL_WARN);
return false;
}
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
$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";
}
}
file_put_contents($filename,$out);
}
function removeLine($filename,$search_pattern,$strict = 0) {
if($this->checkpath($filename) == false) {
$app->log("Action aborted, file is a symlink: $filename",LOGLEVEL_WARN);
return false;
}
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
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)) $this->chown($dir,$user);
if(is_dir($dir)) $this->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)) {
$this->mkdir($new_path);
$this->chmod($new_path,$mode);
if($user != '') $this->chown($new_path,$user);
if($group != '') $this->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;
if($this->checkpath($document_root) == false) {
$app->log("Action aborted, target is a symlink: $document_root",LOGLEVEL_DEBUG);
return false;
}
//* 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));
}
}