commit 8de79cd0c9fc4a2969d176d53e066cbe54adcc05 from: jrmu date: Mon Mar 06 05:32:14 2023 UTC Fixed bugs in mail commit - 176d5d5d9a6208946006a89a85fd93a4fafc7919 commit + 8de79cd0c9fc4a2969d176d53e066cbe54adcc05 blob - adf491de0cc69afa816d6f9942324f4c01223169 blob + cc520b037bcb7795b1f07c9b6676182bdcf4e093 --- BNC.pm +++ BNC.pm @@ -271,6 +271,7 @@ sub mcontrolpanel { if($hostmask eq '*controlpanel!znc@znc.in') { if ($text =~ /^Error: User \[cloneuser\] does not exist/) { createclone($bot); + main::putserv($bot, "PRIVMSG *status :loadmod blockuser"); foreach my $chan (@teamchans) { main::putserv($bot, "PRIVMSG $chan :Cloneuser created"); } @@ -409,7 +410,7 @@ sub mailbnc { $approvemsg = <<"EOF"; *IMPORTANT*: Your account has been created but it has not yet been -activated. To activate your account, please contact your admins +approved. To get your account approved, please contact your admins $staff on IRC and by email. EOF blob - ea264bb186718e1782b96621a9a983d02252a7ad blob + 2c81071ce140bdccf136648d4140f6f26b776bac --- Mail.pm +++ Mail.pm @@ -6,10 +6,12 @@ use strict; use warnings; use OpenBSD::Pledge; use OpenBSD::Unveil; +use File::Copy qw(copy); use MIME::Base64; use Digest::SHA qw(sha256_hex); my %conf = %main::conf; +my $chans = $conf{chans}; my $staff = $conf{staff}; my $hostname = $conf{hostname}; my $mailfrom = $conf{mailfrom}; @@ -19,9 +21,12 @@ my $smtpport = $conf{smtpport}; my $teamchans = $conf{teamchans}; my @teamchans = split /[,\s]+/m, $teamchans; my $mailwebpanel = $conf{mailwebpanel}; +my $approval = $conf{approval}; +my $expires = $conf{expires}; my $passwdpath = "/etc/mail/passwd"; my $virtualspath = "/etc/mail/virtuals"; my $senderspath = "/etc/mail/users"; +my @users; main::cbind("msg", "-", "mail", \&mmail); @@ -30,6 +35,9 @@ sub init { unveil("/usr/bin/encrypt", "rx") or die "Unable to unveil $!"; #dependencies for mail unveil("/usr/sbin/sendmail", "rx") or die "Unable to unveil $!"; + unveil($passwdpath, "rwc") or die "Unable to unveil $!"; + unveil($virtualspath, "rwc") or die "Unable to unveil $!"; + unveil($senderspath, "rwc") or die "Unable to unveil $!"; unveil("/usr/lib/libutil.so.13.1", "r") or die "Unable to unveil $!"; unveil("/bin/sh", "rx") or die "Unable to unveil $!"; } @@ -61,7 +69,14 @@ sub mmail { return; } elsif (main::isstaff($bot, $nick) && $text =~ /^approve\s+([[:ascii:]]+)/) { my $username = $1; - ### TODO: Unblock account ### + my @passwd = main::readarray($passwdpath); + foreach my $line (@passwd) { + $line =~ s/^#(${username}\@${hostname}.*)/$1/; + } + # trailing newline necessary + main::writefile("$passwdpath.bak", join("\n", @passwd)."\n"); + copy "${passwdpath}.bak", $passwdpath; + foreach my $chan (@teamchans) { main::putserv($bot, "PRIVMSG $chan :$username mail approved"); } @@ -98,14 +113,21 @@ sub mmail { main::putserv($bot, "PRIVMSG $nick :Check your email!"); mailmail($username, $pass, $email); if ($approval eq "true") { - ### TODO: Block account ### + my @passwd = main::readarray($passwdpath); + foreach my $line (@passwd) { + $line =~ s/^(${username}\@${hostname}.*)/#$1/; + } + # trailing newline necessary + main::writefile("$passwdpath.bak", join("\n", @passwd)."\n"); + copy "${passwdpath}.bak", $passwdpath; + main::putserv($bot, "PRIVMSG $nick :Your account has been created but must be manually approved by your admins ($staff) before it can be used."); foreach my $chan (@teamchans) { main::putservlocalnet($bot, "PRIVMSG $chan :$staff: $nick\'s account $username must be manually unblocked before it can be used."); } } foreach my $chan (@teamchans) { - main::putservlocalnet($bot, "PRIVMSG $chan :$nick\'s mail registration of $username@$hostname on $bot->{name} was successful, please help him connect"); + main::putservlocalnet($bot, "PRIVMSG $chan :$nick\'s mail registration of $username\@$hostname on $bot->{name} was successful, please help him connect"); } #www($newnick, $reply, $password, "bouncer"); return; @@ -192,7 +214,7 @@ sub mailmail { $approvemsg = <<"EOF"; *IMPORTANT*: Your account has been created but it has not yet been -activated. To activate your account, please contact your admins +approved. To get your account approved, please contact your admins $staff on IRC and by email. EOF @@ -202,7 +224,7 @@ Welcome to IRCNow! You created an email account: -Username: $username@$hostname +Username: $username\@$hostname Password: $password Server: $hostname IMAP Port: $imapport (STARTTLS) @@ -238,20 +260,20 @@ sub createmail { sub deletemail { my ($username) = @_; - my @passwd = readarray($passwdpath); - my @virtuals = readarray($virtualspath); - my @senders = readarray($senderspath); + my @passwd = main::readarray($passwdpath); + my @virtuals = main::readarray($virtualspath); + my @senders = main::readarray($senderspath); @passwd = grep !/^${username}\@${hostname}/, @passwd; @virtuals = grep !/^${username}\@${hostname}/, @virtuals; @senders = grep !/^${username}\@${hostname}/, @virtuals; # trailing newline necessary main::writefile("$passwdpath.bak", join("\n", @passwd)."\n"); - copy "$passwdpath.bak", $passwdpath; + copy "${passwdpath}.bak", $passwdpath; main::writefile("$virtualspath", join("\n", @virtuals)."\n"); - copy "$virtualspath.bak", $virtualspath; + copy "${virtualspath}.bak", $virtualspath; main::writefile("$senderspath", join("\n", @senders)."\n"); - copy "$senderspath.bak", $senderspath; + copy "${senderspath}.bak", $senderspath; `doas rcctl restart smtpd`; `doas rcctl reload dovecot`; blob - 14153c3d570d26cb6f92b04d67e07903dec73848 blob + 4097cd6fdf76db9b84c02aa5d68869f299dcc8df --- Shell.pm +++ Shell.pm @@ -39,7 +39,7 @@ main::cbind("msg", "-", "shell", \&mshell); sub yesterday { my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); - my $localtime = sprintf("%s%02d%04d", $months[mon], $mday-1, $year+1900); + my $localtime = sprintf("%s%02d%04d", $months[$mon], $mday-1, $year+1900); return $localtime; } sub init { @@ -176,7 +176,7 @@ sub mshell { main::whois($bot->{sock}, $nick); main::ctcp($bot->{sock}, $nick); main::putserv($bot, "PRIVMSG $nick :".`figlet $captcha`); - main::putserv($bot, "PRIVMSG $nick :$captchaURL".encode_base64($captcha)); + # main::putserv($bot, "PRIVMSG $nick :$captchaURL".encode_base64($captcha)); main::putserv($bot, "PRIVMSG $nick :Type !shell captcha "); foreach my $chan (@teamchans) { main::putservlocalnet($bot, "PRIVMSG $chan :$nick\'s captcha on $bot->{name} is $captcha"); @@ -197,7 +197,7 @@ sub mailshell { $approvemsg = <<"EOF"; *IMPORTANT*: Your account has been created but it has not yet been -activated. To activate your account, please contact your admins +approved. To get your account approved, please contact your admins $staff on IRC and by email. EOF