#!/usr/bin/perl -w
use strict;
use vdef_globals;
use DBI();

my( $id, $crypt, $clear, $name, $home, $maildir);
my( $localpart, $domain );

my( $dbh, $sth );
my( $rows );
my $dbpass;

if($#ARGV!=0 && $#ARGV!=0){
   print "usage: vmailuser_add user\@domain.tld\n";
   exit 1;
}
$id=$ARGV[0];
$id=~/([^@]+)@([^@]+)/;
$localpart = $1;
$domain = $2;
if( !defined($localpart) || !defined($domain) )
{
   print "A valid username contains _both_ localpart and domainname. e.g. ttt\@yyy.zzz\n";
   exit 1;
}

$dbpass = readpw();

$dbh = DBI->connect($vdef_globals::db_datasource,
                    $vdef_globals::db_user, $dbpass,{'RaiseError' => 1});
$sth = $dbh->prepare("SELECT id FROM users WHERE id=".$dbh->quote($id));
$sth->execute();
$rows=$sth->rows;
$sth->finish;
if($rows>0){
   print "user $id exists\n";
}
else {
   $clear = $id;
   $name = $id;
   $home = $vdef_globals::mail_home_prefix . "/$domain/users/$localpart";
   $maildir = "$home/Maildir/";
   my $salt = join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64];
   $crypt = crypt($clear, $salt);
   $dbh->do("INSERT INTO users (id, crypt, clear, name, uid, gid, home, maildir) VALUES (" . 
      $dbh->quote($id) . "," .
      $dbh->quote($crypt) . "," .
      $dbh->quote($clear) . "," .
      $dbh->quote($name) . "," .
      $dbh->quote($vdef_globals::mail_uid) . "," .
      $dbh->quote($vdef_globals::mail_gid) . "," .
      $dbh->quote($home) . "," .
      $dbh->quote($maildir) . ")");
   mkdir $home;
   chown $vdef_globals::mail_uid, $vdef_globals::mail_gid, $home;
   system "maildirmake $maildir";
   chown $vdef_globals::mail_uid, $vdef_globals::mail_gid, 
         $maildir, "$maildir/new", "$maildir/cur", "$maildir/tmp";
}
$dbh->disconnect();

