#!/usr/bin/perl -w

#----------------------------------------------------------------------
# copyright (C) 2002-2006 Mitel Networks Corporation
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 		
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 		
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
# 
#----------------------------------------------------------------------

package esmith;

use strict;
use Errno;
use esmith::ConfigDB;
use esmith::AccountsDB;
use esmith::util;
use esmith::DB

my $c = esmith::ConfigDB->open_ro || die "Couldn't open config db\n";
my $a = esmith::AccountsDB->open_ro || die "Couldn't open accounts db\n";

my $event = $ARGV [0] || die "Event name arg missing\n";;
my @mailaliases;

if ($ARGV[1])
{
    my $mailalias = $ARGV [1];
    my $g = $a->get($mailalias) ||
		die "Mailalias $mailalias not found in accounts db\n";

    my $type = $g->prop('type');
    if ($type =~ /^mailalias/)
    {
	@mailaliases = ($g);

    }
    else
    {
	die "Expected a mailalias. Got: $type\n";
    }
}

# Regenerate all the groups if the previous block failed in some way.
unless (@mailaliases)
{
    #@mailaliases = $a->mailalias; # a faire ?
    @mailaliases = $a->get_all_by_prop('type'=>'mailalias'); # a faire ?    
}

foreach my $mailalias (@mailaliases)
{
    my $mailaliasName = $mailalias->key;
    unless ($mailalias->prop('type') eq 'mailalias')
    {
        warn "Account $mailaliasName is not a mailalias account.\n";
        next;
    }
    my %properties = $mailalias->props;
    $mailaliasName =~ s/\./:/g;
    #my $group = "/var/qmail/alias/.qmail-$groupName";
    my $members = $properties{email};

    esmith::util::processTemplate(
            {
                CONFREF =>
                    {
                        Members => $members,
                    },

                TEMPLATE_PATH =>
                    "/var/qmail/alias/.qmail-mailalias",

                OUTPUT_FILENAME => "/var/qmail/alias/.qmail-$mailaliasName",
            }
        );

    unless (-f "/var/qmail/alias/.qmail-$mailaliasName-default")
    {
        symlink "/var/qmail/alias/.qmail-$mailaliasName",
                "/var/qmail/alias/.qmail-$mailaliasName-default";
    }

}

exit (0);
