#!/bin/sh
# -*- tcl -*-
# The next line is executed by /bin/sh, but not tcl \
exec tclsh "$0" ${1+"$@"}

# $Id: autopasswd.expect,v 1.6 1999/08/27 19:39:18 moniot Exp $
# Wrapper to run passwd(1) non-interactively
#  Usage:  autopasswd username password
#    or    echo " username password" | autopasswd
#  Returns code 0 if successful, nonzero otherwise (bad password)
#
#  Author: R. Moniot, based on simpler version found in expect distribution
#  Date:   27 August 1999

package require Expect

if "$argc > 0" {

#  Get username and password from commandline if present.

    set username	[lindex $argv 0]
    set password	[lindex $argv 1]
} else {

#  Otherwise read username and password from stdin: they must be separated
#  by exactly one blank space and contain no blanks themselves.

    expect_user {
	-re "(.*) (.*)" {
	    set username $expect_out(1,string);
	    set password $expect_out(2,string)
	}
    }
}

spawn passwd $username

# The sleep is needed to give passwd time to get ready.
expect {
    "password:"		{ sleep 1; send -- "$password\r" }	# send
}

expect {
    "BAD PASSWORD:*"	{ exit 1 }
    "password:"		{ sleep 1; send -- "$password\r" }	# resend
}

expect {
    "successfully"	{ exit 0 }			# OK (Linux flavor)
    eof			{ exit 0 }			# OK (AIX flavor)
    timeout		{ exit 2 }			# something went wrong
}

exit 0
