Server IP : 85.214.239.14 / Your IP : 18.118.1.63 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/root/proc/3/task/3/root/proc/3/cwd/proc/3/root/lib/usrmerge/ |
Upload File : |
#!/usr/bin/perl # vim: shiftwidth=4 tabstop=4 # # Copyright 2016-2022 by Marco d'Itri <md@Linux.IT> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. use warnings; use strict; use autodie; use v5.16; convert($ARGV[0] || '/etc/shells'); exit; sub convert { my ($file) = @_; my (@shells, @nonusr_shells, %seen_in_usr); open(my $in, '<', $file); while (<$in>) { chomp; push(@shells, $_); $seen_in_usr{$1} = 1 if m#^/usr(/s?bin/.+)#; push(@nonusr_shells, $_) if m#^/s?bin/#; } close $in; my @new_shells = # and add them to the list map { "/usr$_" } # add /usr to their path grep { not $seen_in_usr{$_} } # if they do not already exist in /usr @nonusr_shells; # for each shell not in /usr return unless @new_shells; umask(0022); open(my $out, '>', "$file.tmp"); say $out $_ foreach @shells, @new_shells; close $out; rename("$file.tmp", $file); restore_context($file); } sub safe_system { my (@cmd) = @_; my $rc = system(@cmd); die "Failed to execute @cmd: $!\n" if $rc == -1; die "@cmd: rc=" . ($? >> 8) . "\n" if $rc; } sub restore_context { my ($file) = @_; return if not -x '/sbin/restorecon'; safe_system('restorecon', $file); }