#!/usr/bin/perl -w

#----------------------------------------------------------------------
# copyright (C) 2000-2001 e-smith, inc.
#
# 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
#
# Technical support for this program is available from e-smith, inc.
# For details, please visit our web site at www.e-smith.com or
# call us on 1 888 ESMITH 1 (US/Canada toll free) or +1 613 564 8000
#----------------------------------------------------------------------

package esmith;

use strict;
use Errno;
use esmith::config;
use esmith::db;
use esmith::util;

tie my %conf, "esmith::config";

my $status = db_get_prop(\%conf, "mysqld", "status");

if (defined $status && $status eq 'enabled')
{
    #----------------------------------------------------------
    # Check if MySQL data directory exists
    #----------------------------------------------------------

    if ( -d '/var/lib/mysql/mysql' )
    {
	#----------------------------------------------------------
	# Check to see if mysqld is running. It should be listening
	# on /var/lib/mysql/mysql.sock
	#----------------------------------------------------------

	my $running = 0;

	open(NETSTAT, "-|")
	    or exec qw(/bin/netstat --listening --unix);

	while (<NETSTAT>)
	{
	    if (m#/var/lib/mysql/mysql.sock#)
	    {
		++$running;
		last;
	    }
	}

	close NETSTAT;

	# You can't dump the tables if mysqld isn't running!

	unless ($running)
	{
	    warn "MySQL doesn't seem to be running!";
	    exit 1;
	}

	#----------------------------------------------------------
	# Check that the dump directory exists. This should have been
	# created by the mysql-delete-dumped-tables action.
	#----------------------------------------------------------

	unless (-d '/home/e-smith/db/mysql')
	{
	    warn "Creating /home/e-smith/db/mysql/";
	    mkdir "/home/e-smith/db/mysql", 0750;
	}

	#----------------------------------------------------------
	# Read LDAP password
	#----------------------------------------------------------
	my $pw = esmith::util::LdapPassword();

	#----------------------------------------------------------
	# Dump MySQL databases
	#----------------------------------------------------------

	my $pid = open(KID, "|-");

	if (defined $pid)
	{
	    if ($pid) # Parent
	    {
		print KID $pw;
		close KID;
		waitpid($pid, 0);
	    }
	    else
	    {
		open(STDOUT, ">/home/e-smith/db/mysql/mysql.dump");
		my @command = (qw(/usr/bin/mysqldump --add-drop-table -A -Q), "-p$pw");
		exec(@command);
	    }
	}
	else
	{
	    warn("Couldn't fork: $!");
	}

	#-------------------------------------------------------------------
	# Fix the output of the file.
	# KEY User(User) => Key (User)
	#-------------------------------------------------------------------

	open(IN, "</home/e-smith/db/mysql/mysql.dump");
	open(OUT, ">/home/e-smith/db/mysql/mysql.dump.tmp");

	while (<IN>)
	{
	    s/KEY User\(User\)/KEY \(User\)/;
	    print OUT;
	}

	print OUT "FLUSH PRIVILEGES;\n";

	close IN;
	close OUT;

	rename("/home/e-smith/db/mysql/mysql.dump.tmp",
	       "/home/e-smith/db/mysql/mysql.dump");
    }
}

exit(0);
