#!/usr/local/bin/expectk proc chgpwd {oldpass newpass} { set Ctrl_C "\003" spawn passwd expect "Old password:" {exp_send "$oldpass\r"} expect { "New password:" {exp_send "$newpass\r"} default {pwfalse ; return} } expect { "Re-enter new password:" {exp_send "$newpass\r"} "Bad password:" {pwbad; exp_send $Ctrl_C; return TCL_OK"} default {pwbad ; return} } expect { "Password changed." {pwok} default {pwerror ; return} } } proc pwfalse {} { tk_dialog .errw "Falsches Paßwort" \ "Das alte Paßwort ist falsch. Bitte erneut versuchen." "" 0 "OK" focus .f1.eOld } proc pwbad {} { tk_dialog .errw "Ungültiges neues Paßwort" \ "Das neue Paßwort war nicht akzeptabel. Bitte erneut versuchen." "" 0 "OK" focus .f1.eNew1 } proc pwerror {} { tk_dialog .errw "Unerwarteter Fehler" \ "Es ist ein unerwarteter Fehler aufgetreten." "" 0 "OK" } proc pwok {} { tk_dialog .errw "Paßwort geändert" \ "Das Paßwort wurde erfolgreich geändert." "" 0 "OK" exit 0 } proc checkpw {opw npw1 npw2} { if {$npw1!=$npw2} { tk_dialog .errw "Falsche Eingabe" \ "Die Eingabe der neuen Paßwörter unterscheidet sich." "" 0 "OK" focus .f1.eNew1 return } if [catch {chgpwd $opw $npw1} err] { pwerror } } proc initUI {} { wm title . "Paßwort ändern" frame .f1 -bd 2 -relief groove label .f1.lOld -text "Altes Paßwort:" entry .f1.eOld -textvariable oldpass -width 20 -show "*" label .f1.lNew1 -text "Neues Paßwort:" entry .f1.eNew1 -textvariable newpass1 -width 20 -show "*" label .f1.lNew2 -text "Neues Paßwort:" entry .f1.eNew2 -textvariable newpass2 -width 20 -show "*" label .f1.lNochmal -text "(Wiederholung, zur Kontrolle)" frame .f2 button .f2.bOk -text "OK" -command { checkpw $oldpass $newpass1 $newpass2 } pack .f1 -side top -fill both -expand true pack .f2 -side bottom -fill x grid .f1.lOld -row 0 -column 0 -sticky ne -padx .1c -pady .1c grid .f1.eOld -row 0 -column 1 -sticky nw -padx .1c -pady .1c grid .f1.lNew1 -row 1 -column 0 -sticky ne -padx .1c -pady .1c grid .f1.eNew1 -row 1 -column 1 -sticky nw -padx .1c -pady .1c grid .f1.lNew2 -row 2 -column 0 -sticky ne -padx .1c -pady .1c grid .f1.eNew2 -row 2 -column 1 -sticky nw -padx .1c -pady .1c grid .f1.lNochmal -row 3 -column 1 -sticky ne -padx .1c pack .f2.bOk -pady .2c focus -force .f1.eOld } initUI