#! /bin/sh

# Encrypt a password in MD5 format
#   Copyright (C) 2000,2002 Free Software Foundation, Inc.
#
# This file 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.

# Replaced by the configure script.
prefix=@prefix@
exec_prefix=@exec_prefix@
sbindir=@sbindir@

# Initialize some variables.
grub_shell=${sbindir}/grub
progname="grub-md5-crypt"

# Check the arguments.
for option in "$@"; do
    case "$option" in
    -h | --help)
	cat <<EOF
Usage: $progname [OPTION]
Encrypt a password in MD5 format.

  -h, --help              print this message and exit
  -v, --version           print the version information and exit
  --grub-shell=FILE       use FILE as the grub shell

Report bugs to <bug-grub@gnu.org>.
EOF
	exit 0
	;;

    -v | --version)
	echo "$progname (GNU GRUB ${VERSION})"
	exit 0
	;;

    --grub-shell=*)
	grub_shell=`echo "$option" | sed 's/--grub-shell=//'`
	;;

    *)
	echo "$progname: unrecognized option \`$option'"
	echo "Usage: $progname [OPTION]"
	echo "Try \`$progname --help' for more information."
	exit 1
	;;
    esac
done

# Suppress echo backs. I don't know if this is really portable. -okuji
stty -echo

# Prompt to enter a password.
echo -n "Password: "
read -r password
echo

# One more time.
echo -n "Retype password: "
read -r password2
echo

# Resume echo backs.
stty echo

if test "x$password" = x; then
    echo "Empty password is not permitted."
    exit 1
fi

if test "x$password" != "x$password2"; then
    echo "Sorry, passwords do not match."
    exit 1
fi

# Run the grub shell.
$grub_shell --batch --device-map=/dev/null <<EOF \
    | grep "^Encrypted: " | sed 's/^Encrypted: //'
md5crypt
$password
quit
EOF

# Bye.
exit 0
