Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f2bbcab

Browse files
calaveraTibor Vass
authored andcommitted
Return 404 for all network operations without network controller.
This will prevent the api from trying to serve network requests in systems where libnetwork is not enabled, returning 404 responses in any case. Signed-off-by: David Calavera <[email protected]>
1 parent 292d3b2 commit f2bbcab

4 files changed

Lines changed: 38 additions & 6 deletions

File tree

api/server/router/network/network.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package network
22

33
import (
4+
"net/http"
5+
6+
"github.com/docker/docker/api/server/httputils"
47
"github.com/docker/docker/api/server/router"
58
"github.com/docker/docker/api/server/router/local"
69
"github.com/docker/docker/daemon"
10+
"github.com/docker/docker/errors"
11+
"golang.org/x/net/context"
712
)
813

914
// networkRouter is a router to talk with the network controller
@@ -29,13 +34,24 @@ func (r *networkRouter) Routes() []router.Route {
2934
func (r *networkRouter) initRoutes() {
3035
r.routes = []router.Route{
3136
// GET
32-
local.NewGetRoute("/networks", r.getNetworksList),
33-
local.NewGetRoute("/networks/{id:.*}", r.getNetwork),
37+
local.NewGetRoute("/networks", r.controllerEnabledMiddleware(r.getNetworksList)),
38+
local.NewGetRoute("/networks/{id:.*}", r.controllerEnabledMiddleware(r.getNetwork)),
3439
// POST
35-
local.NewPostRoute("/networks/create", r.postNetworkCreate),
36-
local.NewPostRoute("/networks/{id:.*}/connect", r.postNetworkConnect),
37-
local.NewPostRoute("/networks/{id:.*}/disconnect", r.postNetworkDisconnect),
40+
local.NewPostRoute("/networks/create", r.controllerEnabledMiddleware(r.postNetworkCreate)),
41+
local.NewPostRoute("/networks/{id:.*}/connect", r.controllerEnabledMiddleware(r.postNetworkConnect)),
42+
local.NewPostRoute("/networks/{id:.*}/disconnect", r.controllerEnabledMiddleware(r.postNetworkDisconnect)),
3843
// DELETE
39-
local.NewDeleteRoute("/networks/{id:.*}", r.deleteNetwork),
44+
local.NewDeleteRoute("/networks/{id:.*}", r.controllerEnabledMiddleware(r.deleteNetwork)),
45+
}
46+
}
47+
48+
func (r *networkRouter) controllerEnabledMiddleware(handler httputils.APIFunc) httputils.APIFunc {
49+
if r.daemon.NetworkControllerEnabled() {
50+
return handler
4051
}
52+
return networkControllerDisabled
53+
}
54+
55+
func networkControllerDisabled(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
56+
return errors.ErrorNetworkControllerNotEnabled.WithArgs()
4157
}

api/server/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ func (s *Server) makeHTTPHandler(handler httputils.APIFunc) http.HandlerFunc {
165165
func (s *Server) InitRouters(d *daemon.Daemon) {
166166
s.addRouter(local.NewRouter(d))
167167
s.addRouter(network.NewRouter(d))
168+
168169
for _, srv := range s.servers {
169170
srv.srv.Handler = s.CreateMux()
170171
}

daemon/network.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ const (
1717
NetworkByName
1818
)
1919

20+
// NetworkControllerEnabled checks if the networking stack is enabled.
21+
// This feature depends on OS primitives and it's dissabled in systems like Windows.
22+
func (daemon *Daemon) NetworkControllerEnabled() bool {
23+
return daemon.netController != nil
24+
}
25+
2026
// FindNetwork function finds a network for a given string that can represent network name or id
2127
func (daemon *Daemon) FindNetwork(idName string) (libnetwork.Network, error) {
2228
// Find by Name

errors/server.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,13 @@ var (
2424
Description: "The client version is too old for the server",
2525
HTTPStatusCode: http.StatusBadRequest,
2626
})
27+
28+
// ErrorNetworkControllerNotEnabled is generated when the networking stack in not enabled
29+
// for certain platforms, like windows.
30+
ErrorNetworkControllerNotEnabled = errcode.Register(errGroup, errcode.ErrorDescriptor{
31+
Value: "NETWORK_CONTROLLER_NOT_ENABLED",
32+
Message: "the network controller is not enabled for this platform",
33+
Description: "Docker's networking stack is disabled for this platform",
34+
HTTPStatusCode: http.StatusNotFound,
35+
})
2736
)

0 commit comments

Comments
 (0)