}
}
-sub new_redir ($$\%) {
- my ($dom, $gen, $r) = @_;
+sub new_redir ($$\%;$) {
+ my ($dom, $gen, $r, $n) = @_;
my $db = open_db;
- my $l;
+ my @l;
+ $n //= 1;
check_fixup_redir $r;
Odin::xact {
clear_redir_reservations $db;
- $l = Odin::gen_redir_name $db, $gen;
- insert_record $db, "odin_mailredir",
- lpart => $l, dom => $dom, owner => $WHO, st => 'live',
- recip => $r->{recip} // qualify_recip $Odin::WHO,
- expire => $r->{expire} // -1,
- comment => $r->{comment} // "";
+ while (@l < $n) {
+ my $l = Odin::gen_redir_name $db, $gen;
+ insert_record $db, "odin_mailredir",
+ lpart => $l, dom => $dom, owner => $WHO, st => 'live',
+ recip => $r->{recip} // qualify_recip $Odin::WHO,
+ expire => $r->{expire} // -1,
+ comment => $r->{comment} // "";
+ push @l, $l;
+ }
check_redir_limits $db;
} $db;
- return $l;
+ return @l;
}
sub reserve_redir ($$$) {
return $a;
}
+sub intarg {
+ my ($me, $what, $min, $max) = @_;
+ $what //= "option `-$me->{opt}'";
+ defined (my $a = $me->arg) or return undef;
+ if ($a !~ /^[-+]?\d+$/ ||
+ (defined $min && $a < $min) ||
+ (defined $max && $a > $max)) {
+ $me->err("invalid value `$a' for $what");
+ $a = undef;
+ }
+ return $a;
+}
+
sub rest { return @{$_[0]->{args}}; }
sub ok { return $_[0]->{ok}; }
sub bad { $_[0]->{ok} = 0; }