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 )