#! /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=/usr/local
exec_prefix=${prefix}
sbindir=${exec_prefix}/sbin

# 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
