diff options
author | Robin Jarry <robin@jarry.cc> | 2023-03-09 22:05:38 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-03-26 21:05:48 +0200 |
commit | 86441411f46ba067cb445e6590b8d12cd20c4490 (patch) | |
tree | ff8cd38569bf4b2674c14bec8c189277bdbb8428 | |
parent | 65b1524bc63ddb926c4b83b1a34b89599fd8d156 (diff) | |
download | aerc-86441411f46ba067cb445e6590b8d12cd20c4490.tar.gz |
config: report accounts.conf format errors
When accounts.conf cannot be parsed, return an error instead of assuming
that the file is non existent and wrongfully opening the new account
wizard. Use the same ini delimiters for all configuration files.
Fixes: https://todo.sr.ht/~rjarry/aerc/151
Reported-by: Jon Fineman <jon@fineman.me>
Signed-off-by: Robin Jarry <robin@jarry.cc>
Tested-by: Bence Ferdinandy <bence@ferdinandy.com>
-rw-r--r-- | config/accounts.go | 24 | ||||
-rw-r--r-- | config/binds.go | 4 |
2 files changed, 15 insertions, 13 deletions
diff --git a/config/accounts.go b/config/accounts.go index bacd7e39..656abf29 100644 --- a/config/accounts.go +++ b/config/accounts.go @@ -118,18 +118,21 @@ var Accounts []*AccountConfig func parseAccounts(root string, accts []string) error { filename := path.Join(root, "accounts.conf") - if !General.UnsafeAccountsConf { - if err := checkConfigPerms(filename); err != nil { - return err - } + err := checkConfigPerms(filename) + if errors.Is(err, os.ErrNotExist) { + // No config triggers account configuration wizard + return nil + } else if err != nil { + return err } log.Debugf("Parsing accounts configuration from %s", filename) - file, err := ini.Load(filename) + file, err := ini.LoadSources(ini.LoadOptions{ + KeyValueDelimiters: "=", + }, filename) if err != nil { - // No config triggers account configuration wizard - return nil + return err } for _, _sec := range file.SectionStrings() { @@ -241,16 +244,13 @@ func (a *AccountConfig) ParsePgpErrorLevel(sec *ini.Section, key *ini.Key) (int, // printing the fix on stdout and returning an error func checkConfigPerms(filename string) error { info, err := os.Stat(filename) - if errors.Is(err, os.ErrNotExist) { - return nil // disregard absent files - } if err != nil { return err } perms := info.Mode().Perm() - // group or others have read access - if perms&0o44 != 0 { + if perms&0o44 != 0 && !General.UnsafeAccountsConf { + // group or others have read access fmt.Fprintf(os.Stderr, "The file %v has too open permissions.\n", filename) fmt.Fprintln(os.Stderr, "This is a security issue (it contains passwords).") fmt.Fprintf(os.Stderr, "To fix it, run `chmod 600 %v`\n", filename) diff --git a/config/binds.go b/config/binds.go index 5271e0b0..79369247 100644 --- a/config/binds.go +++ b/config/binds.go @@ -107,7 +107,9 @@ func parseBinds(root string) error { } } log.Debugf("Parsing key bindings configuration from %s", filename) - binds, err := ini.Load(filename) + binds, err := ini.LoadSources(ini.LoadOptions{ + KeyValueDelimiters: "=", + }, filename) if err != nil { return err } |