Allow users to give away local parts to other users.
[odin-cgi] / bin / mailredir.userv
index 07cef16..fb2d36b 100755 (executable)
@@ -66,13 +66,14 @@ Commands available:
 
        disable LPART ...
        dormant
+       giveaway LPART OWNER
        help
        list
        new [-n COUNT] [-GENOPTS] [-RECOPTS] [RECIP]
        release LPART ...
        reserve [-GENOPTS] N
        reserved
-       set [-RECOPTS] LPART
+       set [-RECOPTS] LPART ...
 
 GENOPTS ::= [-g GENERATOR] [-p PARAM=VALUE]
 RECOPTS ::= [-c COMMENT] [-r RECIP] [-x EXPIRES]
@@ -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,
@@ -165,10 +173,9 @@ EOF
       or $op->unk;
   }
   my @a = $op->rest;
-  my $l = shift @a or $op->bad;
-  @a and $op->bad;
-  $op->ok or Odin::fail "usage: set [-RECOPTS] LPART";
-  Odin::modify_redir $dom, $l, %r;
+  @a or $op->bad;
+  $op->ok or Odin::fail "usage: set [-RECOPTS] LPART ...";
+  Odin::modify_redir $dom, %r, @a;
 } else {
   Odin::fail "unknown operation `$op'";
 }