main: password change: exit with code 12 on wrong password

We used to return code 8, now we return code 12 as documented in
the man page.

Also adds a test.
This commit is contained in:
Jakob Unterwurzacher 2017-05-14 13:14:00 +02:00
parent d5adde1eeb
commit 18f354d84b
2 changed files with 34 additions and 5 deletions

View File

@ -76,7 +76,7 @@ func loadConfig(args *argContainer) (masterkey []byte, confFile *configfile.Conf
func changePassword(args *argContainer) {
masterkey, confFile, err := loadConfig(args)
if err != nil {
os.Exit(exitcodes.LoadConf)
exitcodes.Exit(err)
}
tlog.Info.Println("Please enter your new password.")
newPw := readpassword.Twice(args.extpass)

View File

@ -318,10 +318,10 @@ func TestInitTrailingGarbage(t *testing.T) {
}
}
// TestPasswordIncorrect makes sure the correct exit code is used when the password
// was incorrect
func TestPasswordIncorrect(t *testing.T) {
cDir := test_helpers.InitFS(t)
// TestMountPasswordIncorrect makes sure the correct exit code is used when the password
// was incorrect while mounting
func TestMountPasswordIncorrect(t *testing.T) {
cDir := test_helpers.InitFS(t) // Create filesystem with password "test"
pDir := cDir + ".mnt"
err := test_helpers.Mount(cDir, pDir, false, "-extpass", "echo WRONG", "-wpanic=false")
// vvvvvvvvvvvvvv OMG vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
@ -330,3 +330,32 @@ func TestPasswordIncorrect(t *testing.T) {
t.Errorf("want=%d, got=%d", exitcodes.PasswordIncorrect, exitCode)
}
}
// TestPasswdPasswordIncorrect makes sure the correct exit code is used when the password
// was incorrect while changing the password
func TestPasswdPasswordIncorrect(t *testing.T) {
cDir := test_helpers.InitFS(t) // Create filesystem with password "test"
// Change password
cmd := exec.Command(test_helpers.GocryptfsBinary, "-passwd", cDir)
childStdin, err := cmd.StdinPipe()
if err != nil {
t.Fatal(err)
}
err = cmd.Start()
if err != nil {
t.Fatal(err)
}
_, err = childStdin.Write([]byte("WRONGPASSWORD\nNewPassword"))
if err != nil {
t.Fatal(err)
}
err = childStdin.Close()
if err != nil {
t.Fatal(err)
}
err = cmd.Wait()
exitCode := err.(*exec.ExitError).Sys().(syscall.WaitStatus).ExitStatus()
if exitCode != exitcodes.PasswordIncorrect {
t.Errorf("want=%d, got=%d", exitcodes.PasswordIncorrect, exitCode)
}
}