mirror of
https://github.com/octoleo/restic.git
synced 2024-11-23 05:12:10 +00:00
main: return an exit code (12) for "bad password" errors
This commit is contained in:
parent
7462471c6b
commit
56f28c9bd5
6
changelog/unreleased/pull-4959
Normal file
6
changelog/unreleased/pull-4959
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Enhancement: Return exit code 12 for "bad password"
|
||||||
|
|
||||||
|
Restic now returns exit code 12 when it can't open the repository
|
||||||
|
because of a bad password.
|
||||||
|
|
||||||
|
https://github.com/restic/restic/pull/4959
|
@ -43,6 +43,7 @@ Exit status is 1 if there was a fatal error (no snapshot created).
|
|||||||
Exit status is 3 if some source data could not be read (incomplete snapshot created).
|
Exit status is 3 if some source data could not be read (incomplete snapshot created).
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
PreRun: func(_ *cobra.Command, _ []string) {
|
PreRun: func(_ *cobra.Command, _ []string) {
|
||||||
if backupOptions.Host == "" {
|
if backupOptions.Host == "" {
|
||||||
|
@ -27,6 +27,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -39,6 +39,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -38,6 +38,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runCopy(cmd.Context(), copyOptions, globalOptions, args)
|
return runCopy(cmd.Context(), copyOptions, globalOptions, args)
|
||||||
|
@ -47,6 +47,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -43,6 +43,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -38,6 +38,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -37,6 +37,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -39,6 +39,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -23,6 +23,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -23,6 +23,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -23,6 +23,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -43,6 +43,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -26,6 +26,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -68,6 +68,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -32,6 +32,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||||
|
@ -26,6 +26,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||||
|
@ -23,6 +23,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||||
|
@ -27,6 +27,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -41,6 +41,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -36,6 +36,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -42,6 +42,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -28,6 +28,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -27,6 +27,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -53,6 +53,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -29,6 +29,7 @@ Exit status is 0 if the command was successful.
|
|||||||
Exit status is 1 if there was any error.
|
Exit status is 1 if there was any error.
|
||||||
Exit status is 10 if the repository does not exist.
|
Exit status is 10 if the repository does not exist.
|
||||||
Exit status is 11 if the repository is already locked.
|
Exit status is 11 if the repository is already locked.
|
||||||
|
Exit status is 12 if the password is incorrect.
|
||||||
`,
|
`,
|
||||||
DisableAutoGenTag: true,
|
DisableAutoGenTag: true,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
@ -493,7 +493,7 @@ func OpenRepository(ctx context.Context, opts GlobalOptions) (*repository.Reposi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.IsFatal(err) {
|
if errors.IsFatal(err) || errors.Is(err, repository.ErrNoKeyFound) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return nil, errors.Fatalf("%s", err)
|
return nil, errors.Fatalf("%s", err)
|
||||||
|
@ -18,6 +18,7 @@ import (
|
|||||||
"github.com/restic/restic/internal/errors"
|
"github.com/restic/restic/internal/errors"
|
||||||
"github.com/restic/restic/internal/feature"
|
"github.com/restic/restic/internal/feature"
|
||||||
"github.com/restic/restic/internal/options"
|
"github.com/restic/restic/internal/options"
|
||||||
|
"github.com/restic/restic/internal/repository"
|
||||||
"github.com/restic/restic/internal/restic"
|
"github.com/restic/restic/internal/restic"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -164,6 +165,8 @@ func main() {
|
|||||||
exitMessage = fmt.Sprintf("Warning: %v", err)
|
exitMessage = fmt.Sprintf("Warning: %v", err)
|
||||||
case errors.IsFatal(err):
|
case errors.IsFatal(err):
|
||||||
exitMessage = err.Error()
|
exitMessage = err.Error()
|
||||||
|
case errors.Is(err, repository.ErrNoKeyFound):
|
||||||
|
exitMessage = fmt.Sprintf("Fatal: %v", err)
|
||||||
case err != nil:
|
case err != nil:
|
||||||
exitMessage = fmt.Sprintf("%+v", err)
|
exitMessage = fmt.Sprintf("%+v", err)
|
||||||
|
|
||||||
@ -186,6 +189,8 @@ func main() {
|
|||||||
exitCode = 10
|
exitCode = 10
|
||||||
case restic.IsAlreadyLocked(err):
|
case restic.IsAlreadyLocked(err):
|
||||||
exitCode = 11
|
exitCode = 11
|
||||||
|
case errors.Is(err, repository.ErrNoKeyFound):
|
||||||
|
exitCode = 12
|
||||||
case errors.Is(err, context.Canceled):
|
case errors.Is(err, context.Canceled):
|
||||||
exitCode = 130
|
exitCode = 130
|
||||||
default:
|
default:
|
||||||
|
@ -63,6 +63,8 @@ a more specific description.
|
|||||||
+-----+----------------------------------------------------+
|
+-----+----------------------------------------------------+
|
||||||
| 11 | Failed to lock repository (since restic 0.17.0) |
|
| 11 | Failed to lock repository (since restic 0.17.0) |
|
||||||
+-----+----------------------------------------------------+
|
+-----+----------------------------------------------------+
|
||||||
|
| 12 | Wrong password (since restic 0.17.1) |
|
||||||
|
+-----+----------------------------------------------------+
|
||||||
| 130 | Restic was interrupted using SIGINT or SIGSTOP |
|
| 130 | Restic was interrupted using SIGINT or SIGSTOP |
|
||||||
+-----+----------------------------------------------------+
|
+-----+----------------------------------------------------+
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user