From c68a55498f50946e8fca9361386e11769c63aa4e Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Fri, 16 Oct 2015 11:05:34 +0100 Subject: [PATCH] Allow users to give away local parts to other users. Organization: Straylight/Edgeware From: Mark Wooding Keep track of who created things initially so that we can track down abuse if it occurs. --- bin/mailredir.userv | 8 ++++++++ lib/Odin.pm | 3 ++- sql/setup-mail.sql | 1 + sql/update-mail-v2.sql | 10 ++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 sql/update-mail-v2.sql diff --git a/bin/mailredir.userv b/bin/mailredir.userv index f5acb06..fb2d36b 100755 --- a/bin/mailredir.userv +++ b/bin/mailredir.userv @@ -66,6 +66,7 @@ Commands available: disable LPART ... dormant + giveaway LPART OWNER help list new [-n COUNT] [-GENOPTS] [-RECOPTS] [RECIP] @@ -95,6 +96,13 @@ EOF my ($lpart, $expire, $recip, $comment) = @$r; Odin::print_columns $lpart => 24, $recip => 32, $comment => 0; } +} elsif ($op eq "giveaway") { + @ARGV >= 2 or Odin::fail "usage: giveaway OWNER LPART ..."; + my $owner = shift @ARGV; + my @l = @ARGV; + getpwnam $owner or Odin::fail "unknown user `$owner'"; + my %r = (owner => $owner); + Odin::modify_redir $dom, %r, @l; } elsif ($op eq "reserved") { @ARGV and Odin::fail "usage: reserved"; for my $r (Odin::redir_query Odin::open_db, $dom, $Odin::WHO, diff --git a/lib/Odin.pm b/lib/Odin.pm index 06b5212..154fae0 100644 --- a/lib/Odin.pm +++ b/lib/Odin.pm @@ -586,7 +586,8 @@ sub new_redir ($$\%;$) { while (@l < $n) { my $l = Odin::gen_redir_name $db, $gen; insert_record $db, "odin_mailredir", - lpart => $l, dom => $dom, owner => $WHO, st => 'live', + lpart => $l, dom => $dom, st => 'live', + owner => $WHO, creator => $WHO, recip => $r->{recip} // qualify_recip $Odin::WHO, expire => $r->{expire} // -1, comment => $r->{comment} // ""; diff --git a/sql/setup-mail.sql b/sql/setup-mail.sql index e1b535c..9369cb5 100644 --- a/sql/setup-mail.sql +++ b/sql/setup-mail.sql @@ -16,6 +16,7 @@ create table odin_mailredir (lpart varchar(64) not null, dom varchar(128) not null, owner varchar(64) not null, + creator varchar(64) not null, recip text not null default '', expire bigint not null, st varchar(16) not null default 'live', diff --git a/sql/update-mail-v2.sql b/sql/update-mail-v2.sql new file mode 100644 index 0000000..d771c7a --- /dev/null +++ b/sql/update-mail-v2.sql @@ -0,0 +1,10 @@ +/* -*-sql-*- + * + * Plain old SQL for setting up the tables for Odin mail redirection. + */ + +begin; +alter table odin_mailredir add column creator varchar(64); +update odin_mailredir set creator = owner where creator is null; +alter table odin_mailredir alter column creator set not null; +commit; -- [mdw]