VUser-Email
view release on metacpan or search on metacpan
lib/VUser/Email/Courier.pm view on Meta::CPAN
my $VERSION = '0.1.0';
my $c_sec = 'Extension Email::Courier';
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('email', 'info', \&email_info);
$eh->register_task('email', 'list', \&email_list);
$eh->register_task('domain', 'add', \&domain_add);
$eh->register_task('domain', 'mod', \&domain_mod);
$eh->register_task('domain', 'del', \&domain_del);
$eh->register_task('domain', 'info', \&domain_info);
$eh->register_task('domain', 'list', \&domain_list);
}
sub email_add {
my ($cfg, $opts, $action, $eh) = @_;
my $account = $opts->{account};
my $user;
my $domain;
split_address ($cfg, $account, \$user, \$domain);
die "'account' must be in the form user\@domain" if (!$user or !$domain);
# die if user_exists() ?
my $userdir = get_home_directory ($cfg, $user, $domain);
my $user_parentdir = $userdir;
$user_parentdir =~ s!/[^/]*$!!;
my $vuid = (getpwname($cfg->{$VUser::Email::c_sec}{'virtual user'}))[2];
my $vgid = (getgrname($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;
split_address( $cfg, $account, \$old_user, \$old_domain);
die "account must be in form user\@domain" if( !$old_user or $old_domain );
my $new_account = $opts->{newaccount};
if ($new_account and $new_account ne $account) {
# die if user_exists
# User is changing the email address for the account.
my $new_user;
my $new_domain;
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;
split_address( $cfg, $account, \$user, \$domain );
die "account must be in form user\@domain" if( !$user or !$domain );
my $userdir = get_home_directory( $cfg, $user, $domain );
rm_r ("$userdir");
}
sub email_info {
my ($cfg, $opts, $action, $eh) = @_;
}
sub email_list {
my ($cfg, $opts, $action, $eh) = @_;
}
sub domain_add {
my ($cfg, $opts, $action, $eh) = @_;
my $domain = $opts->{domain};
die "Domain already exists: $domain\n" if is_domain_hosted($cfg, $domain);
( run in 1.134 second using v1.01-cache-2.11-cpan-5511b514fd6 )