Skip to content

Commit 892d732

Browse files
author
Marius Cramer
committed
- added function to delete shell user home directory
1 parent 1ed92e1 commit 892d732

File tree

1 file changed

+40
-4
lines changed

1 file changed

+40
-4
lines changed

server/plugins-available/shelluser_base_plugin.inc.php

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,17 @@ function insert($event_name, $data) {
9898

9999
if($app->system->is_user($data['new']['puser'])) {
100100

101-
//* Remove webfolder protection
102-
$app->system->web_folder_protection($web['document_root'], false);
103-
104101
// Get the UID of the parent user
105102
$uid = intval($app->system->getuid($data['new']['puser']));
106103
if($uid > $this->min_uid) {
104+
//* Remove webfolder protection
105+
$app->system->web_folder_protection($web['document_root'], false);
106+
107+
if(!is_dir($data['new']['dir'])){
108+
$app->file->mkdirs(escapeshellcmd($data['new']['dir']), '0700');
109+
$app->system->chown(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['username']));
110+
$app->system->chgrp(escapeshellcmd($data['new']['dir']),escapeshellcmd($data['new']['pgroup']));
111+
}
107112
$command = 'useradd';
108113
$command .= ' -d '.escapeshellcmd($data['new']['dir']);
109114
$command .= ' -g '.escapeshellcmd($data['new']['pgroup']);
@@ -138,7 +143,6 @@ function insert($event_name, $data) {
138143

139144
//* Add webfolder protection again
140145
$app->system->web_folder_protection($web['document_root'], true);
141-
142146
} else {
143147
$app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.", LOGLEVEL_ERROR);
144148
}
@@ -247,6 +251,38 @@ function delete($event_name, $data) {
247251
// Get the UID of the user
248252
$userid = intval($app->system->getuid($data['old']['username']));
249253
if($userid > $this->min_uid) {
254+
// check if we have to delete the dir
255+
$check = $app->db->queryOneRecord('SELECT shell_user_id FROM `shell_user` WHERE `dir` = \'' . $app->db->quote($data['old']['dir']) . '\'');
256+
if(!$check && is_dir($data['old']['dir'])) {
257+
// delete dir
258+
$homedir = $data['old']['dir'];
259+
if(substr($homedir, -1) !== '/') $homedir .= '/';
260+
$files = array('.bash_logout', '.bash_history', '.bashrc', '.profile');
261+
$dirs = array('.ssh');
262+
foreach($files as $delfile) {
263+
if(is_file($homedir . $delfile) && fileowner($homedir . $delfile) == $userid) unlink($homedir . $delfile);
264+
}
265+
foreach($dirs as $deldir) {
266+
if(is_dir($homedir . $deldir) && fileowner($homedir . $deldir) == $userid) exec('rm -rf ' . escapeshellarg($homedir . $deldir));
267+
}
268+
$empty = true;
269+
$dirres = opendir($homedir);
270+
if($dirres) {
271+
while(($entry = readdir($dirres)) !== false) {
272+
if($entry != '.' && $entry != '..') {
273+
$empty = false;
274+
break;
275+
}
276+
}
277+
closedir($dirres);
278+
}
279+
if($empty == true) {
280+
rmdir($homedir);
281+
}
282+
unset($files);
283+
unset($dirs);
284+
}
285+
250286
// We delete only non jailkit users, jailkit users will be deleted by the jailkit plugin.
251287
if ($data['old']['chroot'] != "jailkit") {
252288
$command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; userdel -f';

0 commit comments

Comments
 (0)