#!/usr/bin/perl -w

#------------------------------------------------------------
#This action provisions a Samba 4 active directory domain
#
#Copyright 2014 Koozali Foundation, Inc.
#11/15/2014: G.Zartman <gzartman@koozali.org>
#
#The code contained herein can be distributed under the same
#license as Perl
#------------------------------------------------------------

use strict;
use warnings;
use esmith::ConfigDB;

##Pull arguments
my $event = $ARGV [0];
my $AdminPass = $ARGV [1];

die 'Samba provisioning error: Missing admin password' unless ($AdminPass);

##Pull config parameters for DC provision
my $cdb = esmith::ConfigDB->open;
my $SystemName = $cdb->get('SystemName')->value || 
    die 'Samba provisioning error: SystemName not defined';
my $DomainName = $cdb->get('DomainName')->value || 
    die 'Samba provisioning error: Primary Domain Name not defined';
my $WorkGroup = $cdb->get_prop ('smb', 'Workgroup') || 
    die 'Samba provisioning error: Workgroup not defined';

##Bail if Samba has already been initialized
if ($event eq 'bootstrap-initialize-samba' && 
    $cdb->get_prop('bootstrap-console','Samba') eq 'initialized') {
    exit();
}

##Remove existing smb.conf file or the provision will error out
unlink ('/etc/samba/smb.conf') if (-e '/etc/samba/smb.conf');

##Initialize Samba Domain
my $provision = "/usr/bin/samba-tool domain provision --server-role=dc " .
                "--domain=$WorkGroup " .
                "--realm=$DomainName " .
                "--adminpass=$AdminPass " .
                "--dns-backend=SAMBA_INTERNAL " . 
                "--use-rfc2307 " .
                "--use-xattrs=yes";

system ($provision);

die "Unable to provision Samba in $event" if ($? == -1);

##Set samba key to initialized in bootstrap-console so it doesn't initialize again
if ($event eq 'bootstrap-initialize-samba') {

    $cdb->set_prop('bootstrap-console','Samba','initialized') || 
    warn "Unable to set Samba key in $event";
}
1;
