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]
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'";
}
} $db;
}
-sub modify_redir ($$\%) {
- my ($dom, $l, $r) = @_;
+sub modify_redir ($\%@) {
+ my ($dom, $r, @l) = @_;
my $db = open_db;
check_fixup_redir $r;
Odin::xact {
clear_redir_reservations $db;
- my ($recip, $st) = $db->selectrow_array
- ("SELECT recip, st FROM odin_mailredir
- WHERE lpart = ? AND dom = ? AND owner = ?", undef,
- $l, $dom, $WHO);
- if (!defined $recip) { Odin::fail "unknown local part `$l'"; }
- elsif ($recip eq "") { $r->{recip} //= qualify_recip $WHO; }
- if ($st ne "live") { $r->{st} = "live"; $r->{expire} //= -1; }
- my @var = ();
- my @val = ();
- for my $v (keys %$r) {
- push @var, $v;
- push @val, $r->{$v};
+ for my $l (@l) {
+ my %r = %$r;
+ my ($recip, $st) = $db->selectrow_array
+ ("SELECT recip, st FROM odin_mailredir
+ WHERE lpart = ? AND dom = ? AND owner = ?", undef,
+ $l, $dom, $WHO);
+ if (!defined $recip) { Odin::fail "unknown local part `$l'"; }
+ elsif ($recip eq "") { $r{recip} //= qualify_recip $WHO; }
+ if ($st ne "live") { $r{st} = "live"; $r{expire} //= -1; }
+ my @var = ();
+ my @val = ();
+ for my $v (keys %r) {
+ push @var, $v;
+ push @val, $r{$v};
+ }
+ @var or fail "nothing to change";
+ $db->do("UPDATE odin_mailredir SET " .
+ join(", ", map { "$_ = ?" } @var) . " " .
+ "WHERE lpart = ? AND dom = ?", undef,
+ @val, $l, $dom);
}
- @var or fail "nothing to change";
- $db->do("UPDATE odin_mailredir SET " .
- join(", ", map { "$_ = ?" } @var) . " " .
- "WHERE lpart = ? AND dom = ?", undef,
- @val, $l, $dom);
} $db;
}