[sork] Sork Passwd errors
Chris
cjdl01 at brokensolstice.com
Sun Sep 12 03:24:00 UTC 2010
Hi,
I'm having a problem with sork passwd. I'm using Debian lenny, horde
3.2.2 and passwd 3.0.
Every time I try to change my password I get these errors at the top
of the page:
I need to use the expect backend. When I click "Change Password", I
get the following at the top of the page:
Notice: Only variable references should be returned by reference in
/usr/share/horde3/passwd/lib/Driver.php on line 110
Warning: Cannot modify header information - headers already sent by
(output started at /usr/share/horde3/passwd/lib/Driver.php:110) in
/etc/horde/passwd3/templates/common-header.inc on line 4
Warning: Cannot modify header information - headers already sent by
(output started at /usr/share/horde3/passwd/lib/Driver.php:110) in
/etc/horde/passwd3/templates/common-header.inc on line 5
It says the password change was successful ("Password changed on
Example Expect Script."), but it really is not (still same password as
it was prior).
I don't see any output in the logs in /var/log, and AFAIK, there are
no issues with the expect script (though I am no expert on this...).
Any help is appreciated.
Thank you.
expect script (this is stock with debian):
==================================================================
set host "localhost"
set login "ssh"
set program "passwd"
set prompt_string "(%|\\\$|>)"
set fingerprint_string "The authenticity of host.* can't be
established.*\nRSA key fingerprint is.*\nAre you sure you want to
continue connecting.*"
set password_string "(P|p)assword.*"
set oldpassword_string "((O|o)ld|login|\\\(current\\\) UNIX) (P|p)assword.*"
set newpassword_string "(N|n)ew.* (P|p)assword.*"
set badpassword_string "(passwd|Bad:).*\r"
set verify_string "((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)?
password|(V|v)erification|(V|v)erify|(A|a)gain).*"
set success_string "((P|p)assword.* changed|successfully)"
set login_string "(((L|l)ogin|(U|u)sername).*)"
set timeout 20
set log "/tmp/passwd.out"
set output false
set output_file "/tmp/passwd.log"
gets stdin user
gets stdin password(old)
gets stdin password(new)
log_user 0
for {set i 0} {$i<$argc} {incr i} {
set arg [lindex $argv $i]
switch -- $arg "-prompt" {
incr i
set prompt_string [lindex $argv $i]
continue
} "-password" {
incr i
set password_string [lindex $argv $i]
continue
} "-oldpassword" {
incr i
set oldpassword_string [lindex $argv $i]
continue
} "-newpassword" {
incr i
set newpassword_string [lindex $argv $i]
continue
} "-verify" {
incr i
set verify_string [lindex $argv $i]
continue
} "-success" {
incr i
set success_string [lindex $argv $i]
continue
} "-login" {
incr i
set login_string [lindex $argv $i]
continue
} "-host" {
incr i
set host [lindex $argv $i]
continue
} "-timeout" {
incr i
set timeout [lindex $argv $i]
continue
} "-log" {
incr i
set log [lindex $argv $i]
continue
} "-output" {
incr i
set output_file [lindex $argv $i]
set output true
continue
} "-telnet" {
set login "telnet"
continue
} "-ssh" {
set login "ssh"
continue
} "-rlogin" {
set login "rlogin"
continue
} "-slogin" {
set login "slogin"
continue
} "-program" {
incr i
set program [lindex $argv $i]
continue
}
}
if {$output} {
log_file $output_file
}
set err [open $log "w" "0600"]
if {[string match $login "rlogin"]} {
set pid [spawn rlogin $host -l $user]
} elseif {[string match $login "slogin"]} {
set pid [spawn slogin $host -l $user]
} elseif {[string match $login "ssh"]} {
set pid [spawn ssh $host -l $user]
} elseif {[string match $login "telnet"]} {
set pid [spawn telnet $host]
expect -re $login_string {
sleep .5
send "$user\r"
}
} else {
puts $err "Invalid login mode: valid modes: rlogin, slogin, ssh, telnet\n"
close $err
exit 1
}
expect {
-re $fingerprint_string {sleep .5
send yes\r}
-re $password_string {sleep .5
send $password(old)\r}
timeout {puts $err "Could not login to system (no
password prompt)\n"
close $err
exit 1}
}
set old_password_notentered true
expect {
-re $prompt_string {sleep .5
send $program\r}
# The following is for when passwd is the login shell
-re $oldpassword_string {sleep .5
send $password(old)\r
set old_password_notentered false}
timeout {puts $err "Could not login to system (bad
old password?)\n"
close $err
exit 1}
}
if {$old_password_notentered} {
expect {
-re $oldpassword_string {sleep .5
send $password(old)\r}
timeout {puts $err "Could not start passwd
program (no old password prompt)\n"
close $err
exit 1}
}
}
expect {
-re $newpassword_string {sleep .5
send $password(new)\r}
timeout {puts "Could not change password (bad old
password?)\n"
close $err
exit 1}
}
expect {
-re $badpassword_string {puts $err "$expect_out(0,string)"
close $err
send \003
sleep .5
exit 1}
-re $verify_string {sleep .5
send $password(new)\r}
timeout {puts $err "New password not valid (too
short, bad password, too similar, ...)\n"
close $err
send \003
sleep .5
exit 1}
}
expect {
-re $success_string {sleep .5
send exit\r}
-re $badpassword_string {puts $err "$expect_out(0,string)"
close $err
exit 1}
timeout {puts $err "Could not change password.\n"
close $err
exit 1}
}
expect {
eof {close $err
exit 0}
}
close $err
======================================================================
More information about the sork
mailing list