#!/bin/bash

CHRDIR=/chroot

# -----------------------------------------------------

# generate 16-char password
makepass() {
    local passwd=`makepasswd --chars=16`
    echo "$passwd"
}

# exec sql query in root
exec_sql()
{
    if [ $# -ne 1 ]
	then
	echo "Programing error!"
	exit 200
    fi

PFX=""
if ! [ -z $MYCHR ]; then
    if [ -d $MYCHR ]; then
	PFX="chroot $MYCHR"
    else
	echo "Programing error!"
	exit 200
    fi
fi

$PFX mysql --defaults-file=/etc/mysql/debian.cnf -ss -n <<STOP
$1
\q
STOP

    if [ $? -ne 0 ] ; then  echo "SQL job failed: $1" >&2
	exit 131
    fi
}

# -----------------------------------------------------

# -----------
# sanity check

if [ $# -lt 1 ]; then
    echo "Usage: mysql_chpass [username] [chroot]"
    exit 7
fi


if ! [ -z $1 ]; then

    USER=$1
    CHR=$2

    MYCHR=""

    if ! [ -z $CHR ]; then
	if [ -f "$CHRDIR/$CHR/etc/mysql/debian.cnf" ]; then
	    MYCHR="$CHRDIR/$CHR"
	    SFX=" [in $CHR chroot]"
	else
	    echo "MySQL config doesn't exist in $CHRDIR/$CHR chroot."
	    exit 6
	fi
    fi

    if ! ( exec_sql "SELECT User FROM mysql.user WHERE User='$USER' AND Host='localhost';" |grep "$USER" >/dev/null ); then
	echo "mysql user $USER@localhost doesn't exist."
	exit 3
    fi

    echo "About to change password for user $USER@localhost$SFX:"

    echo "Hint: Press [ENTER] to generate password"

    echo -n "New password: "
    read passin
    if [ -z "$passin" ]; then
	newpass=`makepass`
	echo "Generated password: $newpass"
    else
	newpass="$passin"
    fi

    echo -n "Are you sure to change password for $USER@localhost? [y/N]: "
    read sure
    if [ "$sure" == "y" ]; then
	#exec_sql "SET PASSWORD FOR '$USER'@'localhost' = PASSWORD('$newpass'); FLUSH PRIVILEGES;"
	exec_sql "SET PASSWORD FOR '$USER'@'localhost' = PASSWORD('$newpass');"
    else
	echo "Aborted."
	exit 0
    fi

fi
