diff options
Diffstat (limited to 'fripost-adduser')
-rwxr-xr-x | fripost-adduser | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/fripost-adduser b/fripost-adduser index f13868d..bd73aea 100755 --- a/fripost-adduser +++ b/fripost-adduser @@ -16,19 +16,21 @@ B<fripost-adduser> [B<--verbose>] [B<--debug>] [B<--pretend>] [I<username>] =head1 DESCRIPTION -B<fripost-adduser> adds a new mailbox to the system, unless B<--pretend> -is set. +B<fripost-adduser> adds a new virtual mailbox to the system, unless +B<--pretend> is set. If no I<username> or I<password> are given, the user is prompted for them. If I<username> is not fully qualified, C<fripost.org> is appended. +If I<username> is already an existing username or alias, +B<fripost-adduser> raises an error. =head1 OPTIONS =over 8 -=item B<--prentend> +=item B<--pretend> -Only simulates the insertion. (But still query the LDAP server to check -if I<username> is already in the database.) +Only simulates the insertion. (But still query the LDAP server to ensure +that I<username> is not already in the database.) =item B<--password=>I<password> @@ -134,8 +136,8 @@ GetOptions( 'base_dn=s' => \$conf->{base_dn}, 'bind_dn=s' => \$conf->{bind_dn}, 'bind_pw=s' => \$conf->{bind_pw}, - 'debug' => \$conf->{debug}, 'pretend' => \$conf->{pretend}, + 'debug' => \$conf->{debug}, 'v|verbose' => \$conf->{verbose}, 'password=s' => \$conf->{password}, 'man' => sub { pod2usage(-exitstatus => 0, @@ -152,12 +154,15 @@ my $ldap = Fripost::Schema->new( $conf ); # Define the new user my $user; { - my $username = $ARGV[0]; - $username //= prompt_email("New username: ", 'is_user'); - - # Default domain - $username .= '@fripost.org' unless $username =~ /\@.+$/; - + my $username; + if (defined $ARGV[0]) { + $username = fix_username ($ARGV[0]); + Email::Valid->address($username) + or die "Error: `" .$username. "' is not a valid e-mail.\n"; + } + else { + $username = prompt_email("New username: ", 'is_user'); + } my ($domain, $login) = split /\@/, $username, 2; my $maildir = "$domain/$login/Maildir/"; # Trailing slash important my $isActive = 'TRUE'; @@ -184,9 +189,22 @@ my $user; confirm_or_abort(); } -die "Error: User already exists.\n" - if $ldap->searchUser($user->{username})->count; +# Check if the username already exists, or is an existing alias. +{ + die "Error: User `" .$user->{username}. "' already exists.\n" + if $ldap->user->search($user->{username})->count; + + my $res = $ldap->alias->search({ address => $user->{username} }); + if ($res->count) { + print STDERR "Error: Alias `" .$user->{username}. "' already exists. "; + print STDERR "(Targetting to "; + print STDERR (join ', ', map { '`' .$_->{goto}. "'"} ($res->entries)); + say STDERR ".)"; + exit 1; + } + exit 1; +} ## Insert the new user if ($conf->{pretend}) { |