#!/bin/sh # # /usr/local/bin/localresetpasswd # Copyright 2006 Jonas Smedegaard # # $Id: localresetpasswd,v 1.1 2006-08-31 22:51:03 jonas Exp $ # # Generate random password and apply to account through sudo # # TODO: Check for bad arguments # TODO: Use getopts to offer help # TODO: Support overriding options in /etc/local file # set -eu # these are overridable as environment variables WORD_LENGTH=${WORD_LENGTH:-11} VERBOSE=${VERBOSE:-yes} SIMULATE=${SIMULATE:-} simulate=${SIMULATE:+true} # echo something, but only if in verbose mode vecho() { test -n "$VERBOSE" && echo "$@" >&2 } randompass() { gpw 1 "$WORD_LENGTH" 2>&- || pwgen "$WORD_LENGTH" 1 2>&- || tr -d '\000-\057\072-\100\133-\140\173-\377' < /dev/urandom | dd bs="$WORD_LENGTH" count=1 2>&- } u=$1 shift vecho -n "Generating random password..." pass=$(randompass) vecho " Done!" sudo=sudo [ "$(id -u)" -ne 0 ] || sudo= vecho -n "Applying new password to account $u..." echo "$u:$pass" | $simulate $sudo "/usr/sbin/chpasswd" vecho " Done!" $simulate localresetpasswdexpiry "$u" vecho "New password is $pass"