fixing syscp-feature-request #1236 (cron doesnt delete user directories)

This commit is contained in:
Michael Kaufmann (d00p)
2010-01-24 11:30:15 +00:00
parent dd595999dc
commit 9a91825f70
9 changed files with 113 additions and 15 deletions

4
TODO
View File

@@ -29,7 +29,7 @@ WONTFIX 0001260 2x F5 causes bigger fonts
WONTFIX 0001259 contract-changes optional with cron to the end of the interval
WONTFIX 0001258 Make invoices immediately
0001120 Missing function to calculate the mail traffic
0001236 the cron doesnt delete user directories
FIXED 0001236 the cron doesnt delete user directories
0001244 customer view too wide for 1024x768 resolutions
0001229 subdomains and Own vHost-Settings
FIXED 0001254 Installation no next button
@@ -67,7 +67,7 @@ FIXED 0001209 APS crashs when installing magento
0001185 Autoreponder - send mails via sendmail to set correct Return-Path header
0001211 Generated MySQL username too long
0001208 HTML Tags in Support Tickets
0001207 FTP Passw<73>rter mit Umlauten
0001207 FTP Passw<73>rter mit Umlauten
0001201 Virtualusers conflict with local users when using libnss-mysql
0001204 php5-suhosin
FIXED 0001203 Add check for PHP version and required PHP modules in install script

View File

@@ -228,11 +228,18 @@ if($page == 'customers'
$log->logAction(ADM_ACTION, LOG_INFO, "deleted user '" . $result['loginname'] . "'");
inserttask('1');
inserttask('4');
if(isset($_POST['delete_userfiles'])
&& (int)$_POST['delete_userfiles'] == 1)
{
inserttask('6', $result['loginname']);
}
redirectTo($filename, Array('page' => $page, 's' => $s));
}
else
{
ask_yesno('admin_customer_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['loginname']);
ask_yesno_withcheckbox('admin_customer_reallydelete', 'admin_customer_alsoremovefiles', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['loginname']);
}
}
}

View File

@@ -52,7 +52,8 @@ function safe_exec($exec_string, &$return_value = false)
$settings['system']['awstats_updateall_command'],
'openssl',
'unzip',
'php'
'php',
'rm'
);
//

View File

@@ -51,6 +51,15 @@ function inserttask($type, $param1 = '', $param2 = '', $param3 = '')
$db->query('INSERT INTO `' . TABLE_PANEL_TASKS . '` (`type`, `data`) VALUES ("2", "' . $db->escape($data) . '")');
$doupdate = true;
}
elseif($type == '6'
&& $param1 != '')
{
$data = Array();
$data['loginname'] = $param1;
$data = serialize($data);
$db->query('INSERT INTO `' . TABLE_PANEL_TASKS . '` (`type`, `data`) VALUES ("6", "' . $db->escape($data) . '")');
$doupdate = true;
}
if($doupdate === true
&& (int)$settings['system']['realtime_port'] !== 0)

View File

@@ -63,3 +63,35 @@ function ask_yesno($text, $yesfile, $params = array(), $targetname = '')
eval("echo \"" . getTemplate('misc/question_yesno', '1') . "\";");
exit;
}
function ask_yesno_withcheckbox($text, $chk_text, $yesfile, $params = array(), $targetname = '')
{
global $userinfo, $db, $s, $header, $footer, $lng;
$hiddenparams = '';
if(is_array($params))
{
foreach($params as $field => $value)
{
$hiddenparams.= '<input type="hidden" name="' . htmlspecialchars($field) . '" value="' . htmlspecialchars($value) . '" />' . "\n";
}
}
if(isset($lng['question'][$text]))
{
$text = $lng['question'][$text];
}
if(isset($lng['question'][$chk_text]))
{
$chk_text = $lng['question'][$chk_text];
}
$checkbox = makecheckbox('delete_userfiles', $chk_text, '1', false, '0', true, true);
$text = strtr($text, array('%s' => $targetname));
eval("echo \"" . getTemplate('misc/question_yesno_checkbox', '1') . "\";");
exit;
}

View File

@@ -255,6 +255,7 @@ $lng['question']['extras_reallydelete_pathoptions'] = 'Do you really want to del
$lng['question']['ftp_reallydelete'] = 'Do you really want to delete the FTP account %s?';
$lng['question']['mysql_reallydelete'] = 'Do you really want to delete the database %s? This cannot be undone!';
$lng['question']['admin_configs_reallyrebuild'] = 'Do you really want to rebuild all config files?';
$lng['question']['admin_customer_alsoremovefiles'] = 'Remove user files too?';
/**
* Mails

View File

@@ -255,6 +255,7 @@ $lng['question']['extras_reallydelete_pathoptions'] = 'Wollen Sie die Optionen f
$lng['question']['ftp_reallydelete'] = 'Wollen Sie das FTP-Benutzerkonto %s wirklich l&ouml;schen?';
$lng['question']['mysql_reallydelete'] = 'Wollen Sie die Datenbank %s wirklich l&ouml;schen?<br />ACHTUNG! Alle Daten gehen unwiderruflich verloren!';
$lng['question']['admin_configs_reallyrebuild'] = 'Wollen Sie wirklich alle Konfigurationsdateien neu erstellen lassen?';
$lng['question']['admin_customer_alsoremovefiles'] = 'Auch Kunden-Daten l&ouml;schen?';
/**
* Mails

View File

@@ -54,18 +54,18 @@ while($row = $db->fetch_array($result_tasks))
if($row['type'] == '1')
{
//dhr: cleanout froxlor-generated awstats configs prior to re-creation
if ($settings[system][awstats_enabled] == '1')
if ($settings['system']['awstats_enabled'] == '1')
{
$awstatsclean[header] = "## GENERATED BY FROXLOR\n";
$awstatsclean[path] = '/etc/awstats';
$awstatsclean[dir] = dir($awstatsclean[path]);
while($awstatsclean[entry] = $awstatsclean[dir]->read()) {
$awstatsclean[fullentry] = $awstatsclean[path].'/'.$awstatsclean[entry];
$awstatsclean[fh] = fopen($awstatsclean[fullentry], 'r');
$awstatsclean[headerRead] = fgets($awstatsclean[fh], strlen($awstatsclean[header])+1);
fclose($awstatsclean[fh]);
if($awstatsclean[headerRead] == $awstatsclean[header]) {
@unlink($awstatsclean[fullentry]);
$awstatsclean['header'] = "## GENERATED BY FROXLOR\n";
$awstatsclean['path'] = '/etc/awstats';
$awstatsclean['dir'] = dir($awstatsclean['path']);
while($awstatsclean['entry'] = $awstatsclean['dir']->read()) {
$awstatsclean['fullentry'] = $awstatsclean['path'].'/'.$awstatsclean['entry'];
$awstatsclean['fh'] = fopen($awstatsclean['fullentry'], 'r');
$awstatsclean['headerRead'] = fgets($awstatsclean['fh'], strlen($awstatsclean['header'])+1);
fclose($awstatsclean['fh']);
if($awstatsclean['headerRead'] == $awstatsclean['header']) {
@unlink($awstatsclean['fullentry']);
}
}
unset($awstatsclean);
@@ -199,6 +199,32 @@ while($row = $db->fetch_array($result_tasks))
mkDirWithCorrectOwnership($directory['customerroot'], $directory['homedir'], $directory['uid'], $directory['gid']);
}
}
/**
* TYPE=6 MEANS THAT A CUSTOMER HAS BEEN DELETED AND THAT WE HAVE TO REMOVE ITS FILES
*/
elseif ($row['type'] == '6')
{
fwrite($debugHandler, ' cron_tasks: Task6 started - deleting customer data' . "\n");
$cronlog->logAction(CRON_ACTION, LOG_INFO, 'Task6 started - deleting customer data');
if(is_array($row['data']))
{
if(isset($row['data']['loginname']))
{
/*
* remove homedir
*/
$cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: rm -rf ' . escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname']));
safe_exec('rm -rf '.escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname']));
/*
* remove maildir
*/
$cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: rm -rf ' . escapeshellarg($settings['system']['vmail_homedir'] . $row['data']['loginname']));
safe_exec('rm -rf '.escapeshellarg($settings['system']['vmail_homedir'] . $row['data']['loginname']));
}
}
}
}
if($db->num_rows($result_tasks) != 0)

View File

@@ -0,0 +1,21 @@
$header
<form action="$yesfile" method="post">
<input type="hidden" name="s" value="$s" />
<input type="hidden" name="send" value="send" />
$hiddenparams
<table cellpadding="5" cellspacing="0" border="0" align="center" class="maintable_60">
<tr>
<td class="maintitle"><b>&nbsp;<img src="images/title.gif" alt="" />&nbsp;{$lng['question']['question']}</b></td>
</tr>
<tr>
<td class="field_name_center_noborder">$text</td>
<td class="field_name">$checkbox</td>
</tr>
<tr>
<td class="field_name_border_left" nowrap="nowrap" style="text-align: center;" colspan="2"><input type="submit" class="bottom" name="submitbutton" value="{$lng['panel']['yes']}" />&nbsp;<input type="button" class="bottom" value="{$lng['panel']['no']}" onclick="history.back();" /></td>
</tr>
</table>
</form>
<br />
<br />
$footer