@@ -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