Use shell to execute filters, fix non-determinism

This commit is contained in:
Drew DeVault 2019-03-31 15:21:04 -04:00
parent 1a4cc31d67
commit 36419d85aa
2 changed files with 5 additions and 7 deletions

View file

@ -158,7 +158,8 @@ func LoadConfig(root *string) (*AercConfig, error) {
}
if filters, err := file.GetSection("filters"); err == nil {
// TODO: Parse the filter more finely, e.g. parse the regex
for match, cmd := range filters.KeysHash() {
for _, match := range filters.KeyStrings() {
cmd := filters.KeysHash()[match]
filter := FilterConfig{
Command: cmd,
Filter: match,

View file

@ -107,16 +107,13 @@ func NewMessageViewer(conf *config.AercConfig, store *lib.MessageStore,
}
pager = exec.Command(cmd[0], cmd[1:]...)
fmt.Printf("%v\n", conf.Filters)
for _, f := range conf.Filters {
cmd, err = shlex.Split(f.Command)
if err != nil {
goto handle_error
}
mime := msg.BodyStructure.MIMEType + "/" + msg.BodyStructure.MIMESubType
switch f.FilterType {
case config.FILTER_MIMETYPE:
if fnmatch.Match(f.Filter, mime, 0) {
filter = exec.Command(cmd[0], cmd[1:]...)
filter = exec.Command("sh", "-c", f.Command)
}
case config.FILTER_HEADER:
var header string
@ -131,7 +128,7 @@ func NewMessageViewer(conf *config.AercConfig, store *lib.MessageStore,
header = formatAddresses(msg.Envelope.Cc)
}
if f.Regex.Match([]byte(header)) {
filter = exec.Command(cmd[0], cmd[1:]...)
filter = exec.Command("sh", "-c", f.Command)
}
}
if filter != nil {