@@ -2376,6 +2376,10 @@ public function create_jailkit_programs($home_dir, $programs = array(), $options
23762376 }
23772377
23782378 public function update_jailkit_chroot ($ home_dir , $ sections = array (), $ programs = array (), $ options = array ()) {
2379+ global $ app ;
2380+
2381+ $ app ->uses ('ini_parser ' );
2382+
23792383 // Disallow operating on root directory
23802384 if (realpath ($ home_dir ) == '/ ' ) {
23812385 $ app ->log ("update_jailkit_chroot: invalid home_dir: $ home_dir " , LOGLEVEL_WARN );
@@ -2434,9 +2438,6 @@ public function update_jailkit_chroot($home_dir, $sections = array(), $programs
24342438 continue ;
24352439 }
24362440
2437- // remove dangling symlinks
2438- $ app ->log ("TODO: search for and remove dangling symlinks " , LOGLEVEL_DEBUG );
2439-
24402441 // save list of hardlinked files
24412442 if (!in_array ($ opts , 'hardlink ' ) && !in_array ($ options , 'allow_hardlink ' )) {
24422443 $ find_multiple_links = function ( $ path ) use ( &$ find_multiple_links ) {
@@ -2463,13 +2464,16 @@ public function update_jailkit_chroot($home_dir, $sections = array(), $programs
24632464 $ multiple_links = array_merge ($ multiple_links , $ ret );
24642465 }
24652466 }
2467+
2468+ // remove dangling symlinks
2469+ $ app ->log ("TODO: search for and remove dangling symlinks " , LOGLEVEL_DEBUG );
24662470 }
24672471
24682472
24692473 $ cmd = 'jk_update --jail= ' .escapeshellarg ($ home_dir ) . $ skips ;
24702474 exec ($ cmd , $ out , $ ret );
24712475 foreach ($ out as $ line ) {
2472- if (substr ( $ line , 0 , 4 ) === "skip " )) {
2476+ if (substr ( $ line , 0 , 4 ) === "skip " ) {
24732477 continue ;
24742478 }
24752479 if (preg_match ('|^(? [^ ]+){6}(.+)$ ' .preg_quote ($ home_dir , '| ' ).'| ' , $ line , $ matches )) {
@@ -2522,10 +2526,31 @@ public function update_jailkit_chroot($home_dir, $sections = array(), $programs
25222526 // Fix permissions of the root firectory
25232527 $ this ->chmod ($ home_dir . '/bin ' , 0755 , true ); // was chmod g-w $CHROOT_HOMEDIR/bin
25242528
2529+ // remove non-existent jails from /etc/jailkit/jk_socketd.ini
2530+ if (is_file ('/etc/jailkit/jk_socketd.ini ' )) {
2531+ $ rewrite = false ;
2532+ $ jk_socketd_ini = $ app ->ini_parser ->parse_ini_file ('/etc/jailkit/jk_socketd.ini ' );
2533+ foreach ($ jk_socketd_ini as $ log => $ settings ) {
2534+ $ jail = preg_replace ('|/dev/log$| ' , '' , $ log );
2535+ if ($ jail != $ log && !is_dir ($ jail )) {
2536+ unset($ jk_socketd_ini [$ log ]);
2537+ $ rewrite =true ;
2538+ }
2539+ }
2540+ if ($ rewrite ) {
2541+ $ app ->log ('update_jailkit_chroot: writing /etc/jailkit/jk_socketd.ini ' , LOGLEVEL_DEBUG );
2542+ $ app ->ini_parse ->write_ini_file ($ jk_socketd_ini , '/etc/jailkit/jk_socketd.ini ' );
2543+ }
2544+ }
2545+
25252546 return true ;
25262547 }
25272548
25282549 public function delete_jailkit_chroot ($ home_dir ) {
2550+ global $ app ;
2551+
2552+ $ app ->uses ('ini_parser ' );
2553+
25292554 // Disallow operating on root directory
25302555 if (realpath ($ home_dir ) == '/ ' ) {
25312556 $ app ->log ("delete_jailkit_chroot: invalid home_dir: $ home_dir " , LOGLEVEL_WARN );
@@ -2573,6 +2598,17 @@ public function delete_jailkit_chroot($home_dir) {
25732598 rename ($ home , $ archive );
25742599 }
25752600
2601+ // remove $home_dir from /etc/jailkit/jk_socketd.ini
2602+ if (is_file ('/etc/jailkit/jk_socketd.ini ' )) {
2603+ $ jk_socketd_ini = $ app ->ini_parser ->parse_ini_file ('/etc/jailkit/jk_socketd.ini ' );
2604+ $ log = $ home . '/dev/log ' ;
2605+ if (isset ($ jk_socketd_ini [$ log ]) {
2606+ unset($ jk_socketd_ini [$ log ]);
2607+ $ app ->log ('delete_jailkit_chroot: writing /etc/jailkit/jk_socketd.ini ' , LOGLEVEL_DEBUG );
2608+ $ app ->ini_parse ->write_ini_file ($ jk_socketd_ini , '/etc/jailkit/jk_socketd.ini ' );
2609+ }
2610+ }
2611+
25762612 return true ;
25772613 }
25782614
0 commit comments