commit - 36684717edbce0c82962bfe1cc406d07e1e53bc6
commit + b2b6fd905726aa542457f819ce4acd7799e198cc
blob - edd59f3042d5a57f11bf0ccbb9734409e0cbada1
blob + ff2df436c956bc21160f1837c8f91c7df654b8a1
--- BNC.pm
+++ BNC.pm
my $plainport = $conf{plainport};
my $mailfrom = $conf{mailfrom};
my $mailname = $conf{mailname};
+# File containing IRC networks
+my $netpath = "networks";
+my @networks;
#my $zncconfpath = $conf{zncconfpath} || "$zncdir/.znc/configs/znc.conf";
my $znctree = { Node => "root" };
main::cbind("msg", "-", "taillog", \&mtaillog);
main::cbind("msg", "-", "lastseen", \&mlastseen);
+# Return list of networks from filename
+# To add multiple servers for a single network, simply create a new entry with
+# the same net name; znc ignores addnetwork commands when a network already exists
+sub readnetworks {
+ my ($filename) = @_;
+ my @lines = main::readarray($filename);
+ my @networks;
+ foreach my $line (@lines) {
+ if ($line =~ /^#/ or $line =~ /^\s*$/) { # skip comments and whitespace
+ next;
+ } elsif ($line =~ /^\s*([-a-zA-Z0-9]+)\s*([-_.:a-zA-Z0-9]+)\s*(~|\+)?([0-9]+)\s*$/) {
+ my ($name, $server, $port) = ($1, $2, $4);
+ my $trustcerts;
+ if (!defined($3)) {
+ $trustcerts = 0;
+ } elsif ($3 eq "~") { # Use SSL but trust all certs
+ $port = "+".$port;
+ $trustcerts = 1;
+ } else { # Use SSL and verify certs
+ $port = "+".$port;
+ $trustcerts = 0;
+ }
+ push(@networks, {"name" => $name, "server" => $server, "port" => $port, "trustcerts" => $trustcerts });
+ } else {
+ die "network format invalid: $line\n";
+ }
+ }
+ return @networks;
+}
+
sub init {
#znc.conf file
#unveil("$zncconfpath", "r") or die "Unable to unveil $!";
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("$netpath", "r") or die "Unable to unveil $!";
#znc.log file
#unveil("$znclog", "r") or die "Unable to unveil $!";
#print treeget($znctree, "AnonIPLimit")."\n";
#print "treeget\n";
#print Dumper \treeget($znctree, "User", "Node");
#print Dumper \treeget($znctree, "User", "Network", "Node");
+
+ @networks = readnetworks($netpath);
+
+ # networks must be sorted to avoid multiple connections
+ @networks = sort @networks;
}
# parseml($tree, @lines)
if ($staff !~ /$nick/) { return; }
if ($text =~ /^network\s+del\s+([[:graph:]]+)\s+(#[[:graph:]]+)$/) {
my ($user, $chan) = ($1, $2);
- foreach my $n (@main::networks) {
+ foreach my $n (@networks) {
main::putserv($bot, "PRIVMSG *controlpanel :delchan $user $n->{name} $chan");
}
}
EOF
#LoadModule cloneuser buffextras
main::putserv($bot, "PRIVMSG *controlpanel :$msg");
- foreach my $n (@main::networks) {
+ foreach my $n (@networks) {
my $net = $n->{name};
my $server = $n->{server};
my $port = $n->{port};
blob - 456d4c05620636017f5740d85390d00f0e1b00ea
blob + dcf14b3a7a1e6dbc1c1f984d43bbcc5cad7b271f
--- botnow
+++ botnow
}
}
-my @modules;
-if (defined($conf{modules})) {
- @modules = split(/\s+/, $conf{modules});
-}
-use lib './';
-foreach my $mod (@modules) {
- require "$mod.pm";
-}
-foreach my $mod (@modules) {
- my $init = "${mod}::init";
- $init->();
-}
-
# Terms of Service; don't edit lines with the word EOF
$conf{terms} = $conf{terms} or die "ERROR: botnow.conf terms";
};
$conf{verbose} = $conf{verbose} || ERRORS;
-# File containing IRC networks
-$conf{netpath} = "networks";
-
if(defined($conf{die})) { die $conf{die}; }
-our @networks;
+my @modules;
+if (defined($conf{modules})) {
+ @modules = split(/\s+/, $conf{modules});
+}
+use lib './';
+foreach my $mod (@modules) {
+ require "$mod.pm";
+}
+foreach my $mod (@modules) {
+ my $init = "${mod}::init";
+ $init->();
+}
+
+
my @bots;
my @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
my @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
my $staff = $conf{staff};
my @stafflist = split(/ /,$staff);
my $verbose = $conf{verbose};
-my $netpath = $conf{netpath};
my $expires = $conf{expires};
unveil("./", "r") or die "Unable to unveil $!";
unveil("$confpath", "r") or die "Unable to unveil $!";
-unveil("$netpath", "r") or die "Unable to unveil $!";
unveil() or die "Unable to lock unveil $!";
#dns and inet for sockets, proc and exec for figlet
#rpath for reading file, wpath for writing file, cpath for creating path
#flock, fattr for sqlite
pledge( qw(stdio rpath wpath cpath inet dns proc exec flock fattr) ) or die "Unable to pledge: $!";
-# Return list of networks from filename
-# To add multiple servers for a single network, simply create a new entry with
-# the same net name; znc ignores addnetwork commands when a network already exists
-sub readnetworks {
- my ($filename) = @_;
- my @lines = readarray($filename);
- my @networks;
- foreach my $line (@lines) {
- if ($line =~ /^#/ or $line =~ /^\s*$/) { # skip comments and whitespace
- next;
- } elsif ($line =~ /^\s*([-a-zA-Z0-9]+)\s*([-_.:a-zA-Z0-9]+)\s*(~|\+)?([0-9]+)\s*$/) {
- my ($name, $server, $port) = ($1, $2, $4);
- my $trustcerts;
- if (!defined($3)) {
- $trustcerts = 0;
- } elsif ($3 eq "~") { # Use SSL but trust all certs
- $port = "+".$port;
- $trustcerts = 1;
- } else { # Use SSL and verify certs
- $port = "+".$port;
- $trustcerts = 0;
- }
- push(@networks, {"name" => $name, "server" => $server, "port" => $port, "trustcerts" => $trustcerts });
- } else {
- die "network format invalid: $line\n";
- }
- }
- return @networks;
-}
-
-@networks = readnetworks($netpath);
-
-# networks must be sorted to avoid multiple connections
-@networks = sort @networks;
-
# create sockets
my $sel = IO::Select->new( );
foreach my $network (@activenets) {