Bug 4788 - autopasswd broken -- fix supplied
autopasswd broken -- fix supplied
Product: Red Hat Linux
Classification: Retired
Component: tcltk (Show other bugs)
i386 Linux
medium Severity low
: ---
: ---
Assigned To: Jens Petersen
Depends On:
  Show dependency treegraph
Reported: 1999-08-30 17:01 EDT by Robert K. Moniot
Modified: 2008-05-01 11:37 EDT (History)
0 users

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2000-03-18 16:00:17 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Robert K. Moniot 1999-08-30 17:01:01 EDT
This is not a bug in passwd, but in autopasswd, which is
part of the expect rpm.  (I did not find expect in the list
of components above.)

The /usr/bin/autopasswd expect script does not work on
recent systems such as pentium 200+ MHz.  It does not give
the passwd program time to change the tty mode, so the first
password is printed in clear before passwd is ready to read

Below is my fixed version.  It has two improvements, in
addition to working correctly: (1) it allows the username
and password to be piped in on standard input so they do not
appear in the process table (the command-line form is also
accepted as an alternative), and (2) it returns a nonzero
error code if passwd rejects the proposed password, allowing
the script that calls autopassword to use a loop that tries
different passwords until one is accepted.

#!/usr/bin/expect -f
# $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
#  Author: R. Moniot, based on simpler version found in
expect distribution
#  Date:   27 August 1999

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

  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
Comment 1 Bernhard Rosenkraenzer 2000-02-16 08:01:59 EST
expect is a part of tcltk. Reassigning.
Comment 2 Jeff Johnson 2000-03-18 16:00:59 EST
Fixed (by adding a slightly modified copy of your patch) in tcltk-8.2.3-36
in Raw Hide.

Note You need to log in before you can comment on or make changes to this bug.