#!/usr/bin/perl -w
use strict;
use DBI;
use Getopt::Long;
use MySQL::Config qw( parse_defaults );

my $vmail = "/var/vmail";
my $username = "";
my $debug = 0;

GetOptions ("--vmail-root=s" => \$vmail,
            "-v" => \$debug,
            "--username=s" => \$username,
            );

die "'$vmail' doesn't exist\n" unless (-d $vmail);
die "Can't write to '$vmail'\n" unless (-w _);

my @group = ( "client" );
my %cnf = parse_defaults "my", \@group;
die "Can't determine username or password for mysql\n"
    unless (exists $cnf{user} and $cnf{password});

my $dsn = "DBI:mysql:database=postfix;host=localhost";
my $dbh = DBI->connect($dsn, $cnf{user}, $cnf{password});
die "Can't connect to Postfix database, $DBI::errstr\n"
    unless ($dbh);

my $sql = "select maildir, domain from mailbox where username='$username'";
my $mailboxes = $dbh->selectall_arrayref($sql);
die "'$username' doesn't exist, $DBI::errstr\n" unless $mailboxes;

my $maildir = ${$mailboxes}[0][0];
my $domain = ${$mailboxes}[0][1];
die "Can't find maildir for '$username'\n" unless $maildir;

my $base = "$vmail/$maildir";
unless (-d $base) {
    my $rc = `/usr/bin/maildirmake $base`;
    warn $rc if $rc;
}

$sql = "select folder, subscribed from dflt_folders where domain='$domain' or domain='all'";
my $folders = $dbh->selectall_arrayref($sql);

foreach my $folderrow (@{$folders}) {
    my $folder = ${$folderrow}[0];
    my $subscribed = ${$folderrow}[1];
    my $dir = "$vmail/${maildir}.$folder";
    unless (-d $dir) {
        foreach my $subd ("cur", "tmp", "new") {
            my $rc = `mkdir -p $dir/$subd`;
            warn $rc if $rc;
        }
    }
}

