mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-10-29 17:52:32 +00:00
backport of commit b48e826d26 (#19590)
Co-authored-by: Violet Hynes <violet.hynes@hashicorp.com>
This commit is contained in:
committed by
GitHub
parent
b7b5296293
commit
99e4d5c283
3
changelog/19585.txt
Normal file
3
changelog/19585.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
```release-note:bug
|
||||
core: Fixed issue with remounting mounts that have a non-trailing space in the 'to' or 'from' paths.
|
||||
```
|
||||
@@ -416,6 +416,72 @@ func TestSysMount_put(t *testing.T) {
|
||||
// for more info.
|
||||
}
|
||||
|
||||
// TestSysRemountSpacesFrom ensure we succeed in a remount where the 'from' mount has spaces in the name
|
||||
func TestSysRemountSpacesFrom(t *testing.T) {
|
||||
core, _, token := vault.TestCoreUnsealed(t)
|
||||
ln, addr := TestServer(t, core)
|
||||
defer ln.Close()
|
||||
TestServerAuth(t, addr, token)
|
||||
|
||||
resp := testHttpPost(t, token, addr+"/v1/sys/mounts/foo%20bar", map[string]interface{}{
|
||||
"type": "kv",
|
||||
"description": "foo",
|
||||
})
|
||||
testResponseStatus(t, resp, 204)
|
||||
|
||||
resp = testHttpPost(t, token, addr+"/v1/sys/remount", map[string]interface{}{
|
||||
"from": "foo bar",
|
||||
"to": "baz",
|
||||
})
|
||||
testResponseStatus(t, resp, 200)
|
||||
}
|
||||
|
||||
// TestSysRemountSpacesTo ensure we succeed in a remount where the 'to' mount has spaces in the name
|
||||
func TestSysRemountSpacesTo(t *testing.T) {
|
||||
core, _, token := vault.TestCoreUnsealed(t)
|
||||
ln, addr := TestServer(t, core)
|
||||
defer ln.Close()
|
||||
TestServerAuth(t, addr, token)
|
||||
|
||||
resp := testHttpPost(t, token, addr+"/v1/sys/mounts/foo%20bar", map[string]interface{}{
|
||||
"type": "kv",
|
||||
"description": "foo",
|
||||
})
|
||||
testResponseStatus(t, resp, 204)
|
||||
|
||||
resp = testHttpPost(t, token, addr+"/v1/sys/remount", map[string]interface{}{
|
||||
"from": "foo bar",
|
||||
"to": "bar baz",
|
||||
})
|
||||
testResponseStatus(t, resp, 200)
|
||||
}
|
||||
|
||||
// TestSysRemountTrailingSpaces ensures we fail on trailing spaces
|
||||
func TestSysRemountTrailingSpaces(t *testing.T) {
|
||||
core, _, token := vault.TestCoreUnsealed(t)
|
||||
ln, addr := TestServer(t, core)
|
||||
defer ln.Close()
|
||||
TestServerAuth(t, addr, token)
|
||||
|
||||
resp := testHttpPost(t, token, addr+"/v1/sys/mounts/foo%20bar", map[string]interface{}{
|
||||
"type": "kv",
|
||||
"description": "foo",
|
||||
})
|
||||
testResponseStatus(t, resp, 204)
|
||||
|
||||
resp = testHttpPost(t, token, addr+"/v1/sys/remount", map[string]interface{}{
|
||||
"from": "foo bar",
|
||||
"to": " baz ",
|
||||
})
|
||||
testResponseStatus(t, resp, 400)
|
||||
|
||||
resp = testHttpPost(t, token, addr+"/v1/sys/remount", map[string]interface{}{
|
||||
"from": " foo bar ",
|
||||
"to": "baz",
|
||||
})
|
||||
testResponseStatus(t, resp, 400)
|
||||
}
|
||||
|
||||
func TestSysRemount(t *testing.T) {
|
||||
core, _, token := vault.TestCoreUnsealed(t)
|
||||
ln, addr := TestServer(t, core)
|
||||
|
||||
@@ -1381,11 +1381,11 @@ func (b *SystemBackend) handleRemount(ctx context.Context, req *logical.Request,
|
||||
logical.ErrInvalidRequest
|
||||
}
|
||||
|
||||
if strings.Contains(fromPath, " ") {
|
||||
return logical.ErrorResponse("'from' path cannot contain whitespace"), logical.ErrInvalidRequest
|
||||
if strings.HasPrefix(fromPath, " ") || strings.HasSuffix(fromPath, " ") {
|
||||
return logical.ErrorResponse("'from' path cannot contain trailing whitespace"), logical.ErrInvalidRequest
|
||||
}
|
||||
if strings.Contains(toPath, " ") {
|
||||
return logical.ErrorResponse("'to' path cannot contain whitespace"), logical.ErrInvalidRequest
|
||||
if strings.HasPrefix(toPath, " ") || strings.HasSuffix(toPath, " ") {
|
||||
return logical.ErrorResponse("'to' path cannot contain trailing whitespace"), logical.ErrInvalidRequest
|
||||
}
|
||||
|
||||
fromPathDetails := b.Core.splitNamespaceAndMountFromPath(ns.Path, fromPath)
|
||||
|
||||
@@ -1026,34 +1026,38 @@ func TestSystemBackend_remount_nonPrintable(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSystemBackend_remount_spacesInFromPath(t *testing.T) {
|
||||
// TestSystemBackend_remount_trailingSpacesInFromPath ensures we error when
|
||||
// there are trailing spaces in the 'from' path during a remount.
|
||||
func TestSystemBackend_remount_trailingSpacesInFromPath(t *testing.T) {
|
||||
b := testSystemBackend(t)
|
||||
|
||||
req := logical.TestRequest(t, logical.UpdateOperation, "remount")
|
||||
req.Data["from"] = " foo / "
|
||||
req.Data["from"] = " foo/ "
|
||||
req.Data["to"] = "bar"
|
||||
req.Data["config"] = structs.Map(MountConfig{})
|
||||
resp, err := b.HandleRequest(namespace.RootContext(nil), req)
|
||||
if err != logical.ErrInvalidRequest {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
if resp.Data["error"] != `'from' path cannot contain whitespace` {
|
||||
if resp.Data["error"] != `'from' path cannot contain trailing whitespace` {
|
||||
t.Fatalf("bad: %v", resp)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSystemBackend_remount_spacesInToPath(t *testing.T) {
|
||||
// TestSystemBackend_remount_trailingSpacesInToPath ensures we error when
|
||||
// there are trailing spaces in the 'to' path during a remount.
|
||||
func TestSystemBackend_remount_trailingSpacesInToPath(t *testing.T) {
|
||||
b := testSystemBackend(t)
|
||||
|
||||
req := logical.TestRequest(t, logical.UpdateOperation, "remount")
|
||||
req.Data["from"] = "foo"
|
||||
req.Data["to"] = " bar / "
|
||||
req.Data["to"] = " bar/ "
|
||||
req.Data["config"] = structs.Map(MountConfig{})
|
||||
resp, err := b.HandleRequest(namespace.RootContext(nil), req)
|
||||
if err != logical.ErrInvalidRequest {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
if resp.Data["error"] != `'to' path cannot contain whitespace` {
|
||||
if resp.Data["error"] != `'to' path cannot contain trailing whitespace` {
|
||||
t.Fatalf("bad: %v", resp)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user