VUser-Email
view release on metacpan or search on metacpan
lib/VUser/Email/Postfix.pm view on Meta::CPAN
our $user_exists;
sub depends { return qw(Email); }
sub init {
my $eh = shift;
my %cfg = @_;
#%meta = %VUser::Email::meta;
if (defined $main::log) {
$log = $main::log;
} else {
$log = VUser::Log->new(\%cfg, 'vuser')
}
$eh->register_task('email', 'add', \&email_add);
$eh->register_task('email', 'mod', \&email_mod);
$eh->register_task('email', 'del', \&email_del);
$eh->register_task('domain', 'add', \&domain_add);
$eh->register_task('domain', 'mod', \&domain_mod);
$eh->register_task('domain', 'del', \&domain_del);
}
sub email_add {
my ($cfg, $opts, $action, $eh) = @_;
my $account = $opts->{account};
my $user;
my $domain;
VUser::Email::split_address ($cfg, $account, \$user, \$domain);
die "'account' must be in the form user\@domain" if (!$user or !$domain);
if (defined $user_exists) {
die "User $account exists\n" if &$user_exists($cfg, $opts, $account);
}
my $userdir = $opts->{home};
if (not defined $userdir or not $userdir) {
$userdir = get_home_directory ($cfg, $user, $domain);
}
my $user_parentdir = $userdir;
$user_parentdir =~ s!/[^/]*$!!;
my $vuid = (getpwnam($cfg->{$VUser::Email::c_sec}{'virtual user'}))[2];
my $vgid = (getgrnam($cfg->{$VUser::Email::c_sec}{'virtual group'}))[2];
mkdir_p ($user_parentdir,
0775, $vuid, $vgid,
) or die "Could not create user directory: $user_parentdir\n";
my $rc = 0xffff & system ('cp', '-R', $cfg->{$VUser::Email::c_sec}{'skeldir'}, $userdir);
$rc <<= 8;
die "Can't copy skel dir ".$cfg->{$VUser::Email::c_sec}{'skeldir'}." to $userdir: $!\n" if $rc != 0;
$rc = 0xffff & system ('chown', '-R', "$vuid:$vgid", $userdir);
}
sub email_mod {
my ($cfg, $opts, $action, $eh) = @_;
my $account = $opts->{account};
my $old_user;
my $old_domain;
VUser::Email::split_address( $cfg, $account, \$old_user, \$old_domain);
die "account must be in form user\@domain\n" if( !$old_user or !$old_domain );
my $new_account = $opts->{newaccount};
if ($new_account and $new_account ne $account) {
if (defined $user_exists) {
die "User $new_account exists\n" if &$user_exists($cfg, $opts, $new_account);
}
# User is changing the email address for the account.
my $new_user;
my $new_domain;
VUser::Email::split_address( $cfg, $new_account, \$new_user, \$new_domain);
die "newaccount must be in form user\@domain" if( !$new_user or !$new_domain );
my $old_userdir = get_home_directory($cfg, $old_user, $old_domain);
my $new_userdir = get_home_directory($cfg, $new_user, $new_domain);
$log->log(LOG_DEBUG, "Old: $old_userdir");
$log->log(LOG_DEBUG, "New: $new_userdir");
VUser::ExtLib::mvdir($old_userdir, $new_userdir);
}
}
sub email_del {
my ($cfg, $opts, $action, $eh) = @_;
my $account = $opts->{account};
my $user;
my $domain;
VUser::Email::split_address( $cfg, $account, \$user, \$domain );
die "account must be in form user\@domain" if( !$user or !$domain );
if (defined $user_exists
and not &$user_exists($cfg, $opts, $account)) {
$log->log(LOG_NOTICE, "Deleting unknown user $account");
die "Deleting unknown user $account";
}
my $userdir = get_home_directory( $cfg, $user, $domain );
rm_r ("$userdir");
}
sub domain_mod {
my ($cfg, $opts, $action, $eh) = @_;
my $domain = $opts->{domain};
my $new_domain = $opts->{newdomain};
( run in 0.871 second using v1.01-cache-2.11-cpan-5511b514fd6 )