# $Id: mailboxes.pm,v 1.1 2007/02/19 22:33:18 kiwi Exp $
# 
package mailboxes;

use Mail::RFC822::Address qw(valid);
use POSIX;
use strict;

sub new
{
	my $class = shift;

	my $this = {};
	bless $this, $class;
        print STDERR "Starting mailboxes\n";
	return $this;
}

sub init
{
	return 0;
}

sub search
{
	my $this = shift;
	my @match_entries = ();
	my $todo;
        my($row, $mailaddr, $quotedmail, $res, $sth, $path, $searchmail);
	my($base, $scope, $deref, $sizeLim, $timeLim, $filter, $attrOnly, @attrs ) = @_;

	# Checking about what looking for 
	# mail= foo -> postfix / pll VDA delivery
	# uid= foo  -> pop3/imap that supports @ -> %
	$todo = $filter;
	$todo =~ s/^\((.*)=.*\)$/\1/g;

	#print STDERR "==> Want : $todo \n";

	$mailaddr = $filter;

	if ($todo =~ "uid") {
		# replacing % -> @
		print STDERR "We get a request for UID\n";
		$mailaddr =~ s/\%/\@/g;
	}

        print STDERR "Looking for : $mailaddr \n";
	
	if (not ($mailaddr =~ s/^\(uid=(.*)\)$/\1/g)) {
		if(not ($mailaddr =~ s/^\(mail=(.*)\)$/\1/g)) {
			return(0, ());	# Filtre non authorise.
		}
	}

	if (not valid("<".$mailaddr.">")) {
		return(0, ());	# Mail non valide RFC822
	}
	
	# We get data, then format output... :)
	print STDERR "We get some results...\n";
	my $entry = 
		"dn : uid=$mailaddr,ou=mailboxes,dc=kazar,dc=net\n\t".
		"objectClass : top\n\t".
		"objectClass : kazarPerson\n\t";

		$entry .= "uid : $mailaddr\n\t";
		$entry .= "cn : Nom Prenom\n\t";
		$entry .= "description : Sample description\n\t";
		$entry .= "uidNumber : 10\n\t";
		$entry .= "gidNumber : 10\n\t";
		$entry .= "userPassword : Password\n\t";
		$entry .= "homeDirectory : /home/test\n\t";
		$entry .= "mailQuota : 50\n\t";
		$entry .= "CouriermailQuota : 50S\n\t";

	print STDERR "Sending -> $entry\n";

	push @match_entries, $entry;

	return(0, @match_entries);

}

sub compare
{
  return 0;
}

sub modify 
{
  return 0;
}

sub add
{
  return 0;
}

sub modrdn
{
  return 0;
}

sub delete
{
  return 0;
}

sub config 
{
  return 0;
}

sub bind 
{
  return 0;
}

1;

