Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.1.1 & Your IP : 3.145.106.222
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
perl5 /
Delete
Unzip
Name
Size
Permission
Date
Action
Authen
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
CGI
[ DIR ]
drwxr-xr-x
2024-03-13 02:55
Data
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
Date
[ DIR ]
drwxr-xr-x
2024-03-13 02:55
Debconf
[ DIR ]
drwxr-xr-x
2024-02-16 18:55
Debian
[ DIR ]
drwxr-xr-x
2024-02-16 18:55
Encode
[ DIR ]
drwxr-xr-x
2024-03-13 02:55
Error
[ DIR ]
drwxr-xr-x
2024-02-16 18:51
File
[ DIR ]
drwxr-xr-x
2024-03-28 01:56
Font
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
Git
[ DIR ]
drwxr-xr-x
2025-01-15 06:48
HTML
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
HTTP
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
IO
[ DIR ]
drwxr-xr-x
2024-03-28 01:56
LWP
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
Locale
[ DIR ]
drwxr-xr-x
2024-02-16 18:56
Mail
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
Module
[ DIR ]
drwxr-xr-x
2024-11-20 06:28
NeedRestart
[ DIR ]
drwxr-xr-x
2024-12-06 06:04
Net
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
Sort
[ DIR ]
drwxr-xr-x
2024-02-16 18:56
Text
[ DIR ]
drwxr-xr-x
2024-02-16 18:50
Time
[ DIR ]
drwxr-xr-x
2024-03-13 02:55
Try
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
URI
[ DIR ]
drwxr-xr-x
2024-03-13 02:55
WWW
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
libwww
[ DIR ]
drwxr-xr-x
2024-03-28 01:45
CGI.pm
122.81
KB
-rw-r--r--
2022-02-03 07:38
CGI.pod
66.37
KB
-rw-r--r--
2022-02-03 07:29
DebianLinux.pm
5.28
KB
-rw-r--r--
2020-06-25 17:23
Error.pm
29.45
KB
-rw-r--r--
2020-01-31 16:15
Fh.pm
166
B
-rw-r--r--
2022-02-03 07:38
Git.pm
46.44
KB
-rw-r--r--
2025-01-13 20:13
LWP.pm
21.18
KB
-rw-r--r--
2022-01-21 21:41
MailTools.pm
458
B
-rw-r--r--
2019-05-21 14:26
MailTools.pod
2.24
KB
-rw-r--r--
2019-05-21 14:26
NeedRestart.pm
5.88
KB
-rw-r--r--
2024-12-05 11:58
TimeDate.pm
267
B
-rw-r--r--
2020-05-19 17:30
URI.pm
34.13
KB
-rw-r--r--
2021-10-25 20:58
Save
Rename
# needrestart - Restart daemons after library updates. # # Authors: # Thomas Liske <thomas@fiasko-nw.net> # # Copyright Holder: # 2013 - 2020 (C) Thomas Liske [http://fiasko-nw.net/~thomas/] # # License: # 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. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this package; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # package NeedRestart; use strict; use warnings; use Module::Find; use NeedRestart::Utils; use NeedRestart::CONT; use Sort::Naturally; use constant { NEEDRESTART_PRIO_NOAUTO => 0, NEEDRESTART_PRIO_LOW => 1, NEEDRESTART_PRIO_MEDIUM => 10, NEEDRESTART_PRIO_HIGH => 100, }; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw( NEEDRESTART_PRIO_NOAUTO NEEDRESTART_PRIO_LOW NEEDRESTART_PRIO_MEDIUM NEEDRESTART_PRIO_HIGH needrestart_ui needrestart_ui_list needrestart_interp_check needrestart_interp_source needrestart_cont_check needrestart_cont_get needrestart_cont_cmd ); our @EXPORT_OK = qw( needrestart_ui_register needrestart_ui_init needrestart_interp_register needrestart_cont_register ); our %EXPORT_TAGS = ( ui => [qw( NEEDRESTART_PRIO_LOW NEEDRESTART_PRIO_MEDIUM NEEDRESTART_PRIO_HIGH needrestart_ui_register needrestart_ui_init )], interp => [qw( needrestart_interp_register )], cont => [qw( needrestart_cont_register )], ); our $VERSION = '3.5'; my $LOGPREF = '[Core]'; my %UIs; sub needrestart_ui_register($$) { my $pkg = shift; my $prio = shift; $UIs{$pkg} = $prio; } sub needrestart_ui_init($$) { my $verbosity = shift; my $prefui = shift; # load preferred UI module if(defined($prefui)) { return if(eval "use $prefui; 1;"); } # autoload UI modules foreach my $module (findsubmod NeedRestart::UI) { unless(eval "use $module; 1;") { warn "Error loading $module: $@\n" if($@ && ($verbosity > 1)); } } } sub needrestart_ui { my $verbosity = shift; my $prefui = shift; needrestart_ui_init($verbosity, $prefui) unless(%UIs); my ($ui) = sort { ncmp($UIs{$b}, $UIs{$a}) } grep { ($UIs{$_} != NEEDRESTART_PRIO_NOAUTO) || ( defined($prefui) && ($prefui eq $_) ) } keys %UIs; return undef unless($ui); print STDERR "$LOGPREF Using UI '$ui'...\n" if($verbosity > 1); return $ui->new($verbosity); } sub needrestart_ui_list { my $verbosity = shift; my $prefui = shift; needrestart_ui_init($verbosity, $prefui) unless(%UIs); return (sort { ncmp($UIs{$b}, $UIs{$a}) } keys %UIs); } my %Interps; my %InterpCache; my $idebug; sub needrestart_interp_register($) { my $pkg = shift; $Interps{$pkg} = new $pkg($idebug); } sub needrestart_interp_init($) { $idebug = shift; # autoload Interp modules foreach my $module (findsubmod NeedRestart::Interp) { unless(eval "use $module; 1;") { warn "Error loading $module: $@\n" if($@ && $idebug); } } } sub needrestart_interp_check($$$$$) { my $debug = shift; my $pid = shift; my $bin = shift; my $blacklist = shift; my $tolerance = shift; needrestart_interp_init($debug) unless(%Interps); foreach my $interp (values %Interps) { if($interp->isa($pid, $bin)) { print STDERR "$LOGPREF #$pid is a ".(ref $interp)."\n" if($debug); my $ps = nr_ptable_pid($pid); my %files = $interp->files($pid, \%InterpCache); foreach my $path (keys %files) { next unless(scalar grep { $path =~ /$_/; } @{$blacklist}); print STDERR "$LOGPREF blacklisted: $path\n" if($debug); delete($files{$path}); } if(grep {!defined($_) || $_ > $ps->start + $tolerance} values %files) { if($debug) { print STDERR "$LOGPREF #$pid uses obsolete script file(s):"; print STDERR join("\n$LOGPREF #$pid ", '', map {(!defined($files{$_}) || $files{$_} > $ps->start ? $_ : ())} keys %files); print STDERR "\n"; } return 1; } } } return 0; } sub needrestart_interp_source($$$) { my $debug = shift; my $pid = shift; my $bin = shift; needrestart_interp_init($debug) unless(%Interps); foreach my $interp (values %Interps) { if($interp->isa($pid, $bin)) { print STDERR "$LOGPREF #$pid is a ".(ref $interp)."\n" if($debug); my $src = $interp->source($pid); print STDERR "$LOGPREF #$pid source is ".(defined($src) ? $src : 'UNKNOWN')."\n" if($debug); return ($src) if(defined($src));; return (); } } return (); } my %CONT; my $ndebug; sub needrestart_cont_register($) { my $pkg = shift; $CONT{$pkg} = new $pkg($ndebug); } sub needrestart_cont_init($) { $ndebug = shift; # autoload CONT modules foreach my $module (findsubmod NeedRestart::CONT) { unless(eval "use $module; 1;") { warn "Error loading $module: $@\n" if($@ && $ndebug); } } } sub needrestart_cont_check($$$;$) { my $debug = shift; my $pid = shift; my $bin = shift; my $norestart = shift || 0; needrestart_cont_init($debug) unless(scalar keys %CONT); foreach my $cont (values %CONT) { return 1 if($cont->check($pid, $bin, $norestart)); } return 0; } sub needrestart_cont_get($) { my $debug = shift; return map { my $cont = $_; my $n = ref $cont; $n =~ s/^NeedRestart::CONT:://; my %c = $cont->get; map { ("$n $_" => $c{$_}); } sort keys %c; } sort { (ref $a) cmp (ref $b); } values %CONT; } 1;