From f5c8a71698d0a7a16c68be220e49fe64bfee7f5c Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 15 Jan 2018 11:21:06 -0600 Subject: ABC-22: Plugin sandboxing for linux/amd64 (#8068) * plugin sandboxing * remove unused type * better symlink handling, better remounting, better test, whitespace fixes, and comment on the remounting * fix test compile error * big simplification for getting mount flags * mask statfs flags to the ones we're interested in --- plugin/pluginenv/options.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'plugin/pluginenv') diff --git a/plugin/pluginenv/options.go b/plugin/pluginenv/options.go index 35ecf1d7f..43cbdac68 100644 --- a/plugin/pluginenv/options.go +++ b/plugin/pluginenv/options.go @@ -4,11 +4,10 @@ package pluginenv import ( - "fmt" - "github.com/mattermost/mattermost-server/model" "github.com/mattermost/mattermost-server/plugin" "github.com/mattermost/mattermost-server/plugin/rpcplugin" + "github.com/mattermost/mattermost-server/plugin/rpcplugin/sandbox" ) // APIProvider specifies a function that provides an API implementation to each plugin. @@ -40,14 +39,12 @@ func WebappPath(path string) Option { } } -// DefaultSupervisorProvider chooses a supervisor based on the plugin's manifest contents. E.g. if -// the manifest specifies a backend executable, it will be given an rpcplugin.Supervisor. +// DefaultSupervisorProvider chooses a supervisor based on the system and the plugin's manifest +// contents. E.g. if the manifest specifies a backend executable, it will be given an +// rpcplugin.Supervisor. func DefaultSupervisorProvider(bundle *model.BundleInfo) (plugin.Supervisor, error) { - if bundle.Manifest == nil { - return nil, fmt.Errorf("a manifest is required") - } - if bundle.Manifest.Backend == nil { - return nil, fmt.Errorf("invalid manifest: missing backend plugin") + if err := sandbox.CheckSupport(); err == nil { + return sandbox.SupervisorProvider(bundle) } return rpcplugin.SupervisorProvider(bundle) } -- cgit v1.2.3-1-g7c22