#sample custom addons
#$allowchghost=1;

sub postprint {
	print "<TR><TD>Activation:</b></TD><TD>Activate? <input type=checkbox name=activate value=activate> De-activate? <input type=checkbox name=activate value=deactivate </TD>";	

}

sub postchange {
	#can test for a custom attribute and perform action 
	my ($cn,$rest)=split(',',param('dn'));
	$cn=~/^cn=(.*?) +(.*?)( +|\(|$)/i;
	my $first=$1;
	my $last=$2;
	return if (!$mailhost || !param('activate'));
	&activate_aliases($first,$last,param('ldapuid'),param('activate'),$mailhost);
}

	
sub postcreate {
	my ($cn,$rest)=split(',',param('dn'));
	$cn=~/^cn=(.*?) +(.*?)( +|\(|$)/i;
	my $first=$1;
	my $last=$2;
	return if (!$mailhost || !param('activate'));
	&activate_aliases($first,$last,param('ldapuid'),param('activate'),$mailhost);
}

sub postdelete {
	my ($cn,$rest)=split(',',param('dn'));
	$cn=~/^cn=(.*?) +(.*?)( +|\(|$)/i;
	my $first=$1;
	my $last=$2;
	return if (!$mailhost);
	&activate_aliases($first,$last,param('ldapuid'),'deactivate',$mailhost);
}

#this function simply creates aliases for each uid in the format of
# first_last@domain and first.last@domain for legacy mail address support
# and returns the array for addition into ldap
sub postaddmulti {
	my ($att,@multivals)=@_;
	if ($att eq 'alternatemailaddress') {
            my $first=param('givenname');
	    my $last=param('sn');
	    my $uid=param('ldapuid');
	    push(@multivals,$first.".".$last."\@".$maildomain);
	    push(@multivals,$first."_".$last."\@".$maildomain);
	}
	return @multivals;
}

#this function allows attributes to be preset when creating a new user account
#this only affects attributes in @ldappersonatts
sub postaddentry {
    my ($att,$value)=@_;
    my $maildropatt="maildrop";
    #set maildrop to a default value if we have a mailhost
    if ($att eq $maildropatt) {
    	my $mailhost=param($mailhostatt) if (defined param($mailhostatt));
        my $maildrop=param('ldapuid')."\@".$mailhost if $mailhost;
        $value= $maildrop if ($maildropatt && $maildrop && !$value);

    }
    return $value;
}


sub activate_aliases {
	my ($first,$last,$uid,$mode,$server)=@_;
	if (!$first && !$last) {return;}
	if (!$mode || !$uid || !$server ) { return;}
	if ($mode=~/deactivate/i) {
		$mode='delete';
	}
	else {
		$mode='add';
	}
	$last=~s/'//g;
	$first=~s/ +/_/g;
	$last=~s/ +/_/g;
	$uid=~s/ +//g;	
	my $result=`/etc/ldap/doimap '$first' '$last' '$uid' $mode $server`;
	print "<b>Activate Results:</b> $result<br>";
}

sub modify_aliases {
	my ($uid,@aliases,$server,%ldapmod)=@_;

	if (!$uid || !$server) {return;}
	my $result=`/etc/ldap/doaliases \'blank\' \'$uid\@$server\' delete`;
	
	while (@aliases) {
		my $alias=shift (@aliases);
		if ($alias eq '') {my $mode='delete';}
		$result=`/etc/ldap/doaliases \'$alias\' \'$uid\@$server\' $mode`;
		print "Modify alias results: $result<br>";
	}
}	
1;


syntax highlighted by Code2HTML, v. 0.9.1