[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bugfix patch for botnow
[Thread Prev] | [Thread Next]
[Date Prev] | [Date Next]
- Subject: bugfix patch for botnow
- From: izzyb <izzyb@xxxxxxxxxxxxxxx>
- Date: Sun, 6 Aug 2023 11:30:53 -0600
- To: codeforce@xxxxxxxxxx
I've come across some bugs that crash botnow while working on my libIRCNOW branch so have back ported them to main branch. I found them while playing with the !lastseen and !taillog commands. Both caused botnow to silently crash or hang. Here's a summery of changes:
1) missing unveil for znclog 2) Improved debug messages 3) replaced tail -f with tail -10. -f doesn't return so hangs the bot4) output of these commands was coded to go to teamchannels but wasn't working. should go to pm anyway; corrected.
5) $sender and $val should be local scope like the rest in the response loopAttached is a patch, or you can pull it from the main branch of my repo here: git://got.ircnow.org/izzyb-botnow.git
...Izzy
diff --git a/BNC.pm b/BNC.pm index b515689..d2c4f03 100644 --- a/BNC.pm +++ b/BNC.pm @@ -57,6 +57,7 @@ sub init { unveil("/usr/lib/libc.so.95.1", "r") or die "Unable to unveil $!"; unveil("/usr/libexec/ld.so", "r") or die "Unable to unveil $!"; unveil("/usr/bin/tail", "rx") or die "Unable to unveil $!"; + unveil("$znclog", "r") or die "unable to unveil $!"; unveil("$netpath", "r") or die "Unable to unveil $!"; @networks = readnetworks($netpath); @@ -308,7 +309,7 @@ sub mcontrolpanel { } } sub loadlog { - open(my $fh, '<', "$znclog") or die "Could not read file 'znc.log' $!"; + open(my $fh, '<', "$znclog") or die "Could not read znc log file: '$znclog' $!"; chomp(@logs = <$fh>); close $fh; } @@ -461,11 +462,9 @@ sub mtaillog { ($chan, $text) = ($args[0], $args[1]); } else { $text = $args[0]; } my $hostmask = "$nick!$host"; - open(my $fh, "-|", "/usr/bin/tail", "-f", $znclog) or die "could not start tail: $!"; + open(my $fh, "-|", "/usr/bin/tail", '-10', $znclog) or die "could not tail $znclog: $!"; while (my $line = <$fh>) { - foreach my $chan (@teamchans) { - main::putserv($bot, "PRIVMSG $chan :$line"); - } + main::putserv($bot, "PRIVMSG $nick :$line"); } } @@ -481,17 +480,13 @@ sub mlastseen { foreach my $user (@users) { my @lines = grep(/^\[\d{4}-\d\d-\d\d \d\d:\d\d:\d\d\] \[$user\] connected to ZNC from [.0-9a-fA-F:]+/, @logs); if (scalar(@lines) == 0) { - foreach my $chan (@teamchans) { - main::putserv($bot, "PRIVMSG $chan :$user never logged in"); - } + main::putserv($bot, "PRIVMSG $nick :$user never logged in"); next; } my $recent = pop(@lines); if ($recent =~ /^\[(\d{4}-\d\d-\d\d) \d\d:\d\d:\d\d\] \[$user\] connected to ZNC from [.0-9a-fA-F:]+/) { my $date = $1; - foreach my $chan (@teamchans) { - main::putserv($bot, "PRIVMSG $chan :$user $date"); - } + main::putserv($bot, "PRIVMSG $nick :$user $date"); } } } diff --git a/botnow b/botnow index 7a377ea..4905f46 100755 --- a/botnow +++ b/botnow @@ -227,7 +227,6 @@ foreach my $network (@networks) { while(my @ready = $sel->can_read) { my ($bot, $response); - my ($sender, $val); foreach my $socket (@ready) { foreach my $b (@bots) { if($socket == $b->{sock}) { @@ -413,7 +412,7 @@ while(my @ready = $sel->can_read) { debug(ALL, "$text"); } elsif ($code == 307 && $text =~ /^([-_\|`a-zA-Z0-9]+) (.*)/) { my ($sender, $key) = ($1, "registered"); - $val = $2 eq ":is a registered nick" ? "True" : "$2"; + my $val = $2 eq ":is a registered nick" ? "True" : "$2"; my $id = SQLite::id("irc", "nick", $sender, $expires); SQLite::set("irc", "id", $id, "identified", $val); debug(ALL, "$key: $val"); @@ -435,7 +434,7 @@ while(my @ready = $sel->can_read) { } elsif ($code == 315 && $text =~ /^([-_\|`a-zA-Z0-9]+) :End of \/?WHO(IS)? list/) { debug(ALL, "End of WHOIS"); } elsif ($code == 317 && $text =~ /^([-_\|`a-zA-Z0-9]+) (\d+) (\d+) :?(.*)/) { - ($sender, my $idle, my $epochtime) = ($1, $2, $3); + my ($sender, $idle, $epochtime) = ($1, $2, $3); my $id = SQLite::id("irc", "nick", $sender, $expires); SQLite::set("irc", "id", $id, "idle", $idle); # SQLite::set("irc", "id", $id, "epochtime", time());