diff options
Diffstat (limited to 'system/partimage/partimaged-passwd')
-rw-r--r-- | system/partimage/partimaged-passwd | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/system/partimage/partimaged-passwd b/system/partimage/partimaged-passwd new file mode 100644 index 0000000000..1033a02708 --- /dev/null +++ b/system/partimage/partimaged-passwd @@ -0,0 +1,121 @@ +#!/bin/bash +#################################################### +# partimaged-passwd +# Copyright (C) 2006 Michael Bieb <biebl@debian.org> +#################################################### + +DB_LOAD="" +DB_DUMP="" +PASSWD_FILE="/etc/partimaged/passwd.db" + +if [ $UID -ne 0 ] ; then + : + echo "This program has to be run as root!" + exit 1 +fi + +# Check for a version of db_load/db_dump +check_db_utils() { + for i in 5.1 4.8 4.7; do + if [ -x /usr/bin/db${i}_load ] ; then + DB_LOAD=/usr/bin/db${i}_load + DB_DUMP=/usr/bin/db${i}_dump + return 0 + fi + done + return 1 +} + +help() { + echo "Manage partimaged user database." + echo + echo "Usage:" + echo " $0 [-Dhl] username password" + echo " $0 [-Dhl] username" + echo + echo " -D Delete user." + echo " -h Display this help message." + echo " -l List existing users." + echo +} + +delete_user() { + echo "Deleting user $1..." + $DB_DUMP -p $PASSWD_FILE | sed -e '1,/HEADER=END/d' -e '/DATA=END/,$d' | sed 's/^[ \t]*//' | sed "/^$1$/{n;d}" | sed "/^$1$/d" | $DB_LOAD -T -t hash ${PASSWD_FILE}.new + mv ${PASSWD_FILE}.new $PASSWD_FILE + fix_rights +} + +add_user() { + echo "Adding user $1..." + echo -e "$1\n$2" | $DB_LOAD -T -t hash $PASSWD_FILE + fix_rights +} + +list_users() { + [ -f $PASSWD_FILE ] || exit 0 + echo "Users:" + $DB_DUMP -p $PASSWD_FILE | sed -e '1,/HEADER=END/d' -e '/DATA=END/,$d' | sed 's/^[ \t]*//' | sed -n '1~2p' +} + +fix_rights() { + chmod 640 $PASSWD_FILE + chown partimag:partimag $PASSWD_FILE +} + +if ! check_db_utils ; then + echo "Could not find db_load/db_dump!" + echo "Please install the db5.1-util package." + exit 1 +fi + + + +while getopts D:hl opt +do + case "$opt" in + D) + delete_user $OPTARG + exit 0 + ;; + h) + help + exit 0 + ;; + l) + list_users + exit 0 + ;; + [?]) + help + exit 1 + ;; + esac +done + +shift $((${OPTIND}-1)) + +if [ $# -eq 1 ] ; then + echo -n "New password: " + read -s passwd1 + echo + echo -n "Re-type new password: " + read -s passwd2 + echo + if [ "$passwd1" != "$passwd2" ] ; then + echo "Passwords do not match!" + exit 1 + elif [ -z $passwd1 ] ; then + echo "Please supply a valid password!" + exit 1 + else + add_user $1 $passwd1 + fi +elif [ $# -eq 2 ] ; then + add_user $1 $2 +else + help + exit 1 +fi + +exit 0 |