Signed-off-by: Antonio Murdaca <runcom@redhat.com>
| ... | ... |
@@ -1,6 +1,10 @@ |
| 1 | 1 |
package authorization |
| 2 | 2 |
|
| 3 |
-import "github.com/docker/docker/pkg/plugins" |
|
| 3 |
+import ( |
|
| 4 |
+ "sync" |
|
| 5 |
+ |
|
| 6 |
+ "github.com/docker/docker/pkg/plugins" |
|
| 7 |
+) |
|
| 4 | 8 |
|
| 5 | 9 |
// Plugin allows third party plugins to authorize requests and responses |
| 6 | 10 |
// in the context of docker API |
| ... | ... |
@@ -33,6 +37,7 @@ func NewPlugins(names []string) []Plugin {
|
| 33 | 33 |
type authorizationPlugin struct {
|
| 34 | 34 |
plugin *plugins.Plugin |
| 35 | 35 |
name string |
| 36 |
+ once sync.Once |
|
| 36 | 37 |
} |
| 37 | 38 |
|
| 38 | 39 |
func newAuthorizationPlugin(name string) Plugin {
|
| ... | ... |
@@ -72,12 +77,11 @@ func (a *authorizationPlugin) AuthZResponse(authReq *Request) (*Response, error) |
| 72 | 72 |
// initPlugin initializes the authorization plugin if needed |
| 73 | 73 |
func (a *authorizationPlugin) initPlugin() error {
|
| 74 | 74 |
// Lazy loading of plugins |
| 75 |
- if a.plugin == nil {
|
|
| 76 |
- var err error |
|
| 77 |
- a.plugin, err = plugins.Get(a.name, AuthZApiImplements) |
|
| 78 |
- if err != nil {
|
|
| 79 |
- return err |
|
| 75 |
+ var err error |
|
| 76 |
+ a.once.Do(func() {
|
|
| 77 |
+ if a.plugin == nil {
|
|
| 78 |
+ a.plugin, err = plugins.Get(a.name, AuthZApiImplements) |
|
| 80 | 79 |
} |
| 81 |
- } |
|
| 82 |
- return nil |
|
| 80 |
+ }) |
|
| 81 |
+ return err |
|
| 83 | 82 |
} |