The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6989

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===

From 2c1948bf07d4a0f84175ace7cf039507c72dd4e7 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Thu, 5 Mar 2020 16:16:14 +0000
Subject: [PATCH 1/2] lxc/storage/volumes: Adds API permission check for
 permission "manage-storage-volumes"

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/storage_volumes.go          | 48 ++++++++++++++++-----------------
 lxd/storage_volumes_snapshot.go | 12 ++++-----
 2 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/lxd/storage_volumes.go b/lxd/storage_volumes.go
index 1c5a63db55..0c7942416d 100644
--- a/lxd/storage_volumes.go
+++ b/lxd/storage_volumes.go
@@ -28,55 +28,55 @@ import (
 var storagePoolVolumesCmd = APIEndpoint{
        Path: "storage-pools/{name}/volumes",
 
-       Get:  APIEndpointAction{Handler: storagePoolVolumesGet, AccessHandler: 
AllowAuthenticated},
-       Post: APIEndpointAction{Handler: storagePoolVolumesPost},
+       Get:  APIEndpointAction{Handler: storagePoolVolumesGet, AccessHandler: 
AllowProjectPermission("storage-volumes", "manage-storage-volumes")},
+       Post: APIEndpointAction{Handler: storagePoolVolumesPost, AccessHandler: 
AllowProjectPermission("storage-volumes", "manage-storage-volumes")},
 }
 
 var storagePoolVolumesTypeCmd = APIEndpoint{
        Path: "storage-pools/{name}/volumes/{type}",
 
-       Get:  APIEndpointAction{Handler: storagePoolVolumesTypeGet, 
AccessHandler: AllowAuthenticated},
-       Post: APIEndpointAction{Handler: storagePoolVolumesTypePost},
+       Get:  APIEndpointAction{Handler: storagePoolVolumesTypeGet, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Post: APIEndpointAction{Handler: storagePoolVolumesTypePost, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
 }
 
 var storagePoolVolumeTypeContainerCmd = APIEndpoint{
        Path: "storage-pools/{pool}/volumes/container/{name:.*}",
 
-       Delete: APIEndpointAction{Handler: 
storagePoolVolumeTypeContainerDelete},
-       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeContainerGet, 
AccessHandler: AllowAuthenticated},
-       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeContainerPatch},
-       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeContainerPost},
-       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeContainerPut},
+       Delete: APIEndpointAction{Handler: 
storagePoolVolumeTypeContainerDelete, AccessHandler: 
AllowProjectPermission("storage-volumes", "manage-storage-volumes")},
+       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeContainerGet, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeContainerPatch, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeContainerPost, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeContainerPut, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
 }
 
 var storagePoolVolumeTypeVMCmd = APIEndpoint{
        Path: "storage-pools/{pool}/volumes/virtual-machine/{name:.*}",
 
-       Delete: APIEndpointAction{Handler: storagePoolVolumeTypeVMDelete},
-       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeVMGet, 
AccessHandler: AllowAuthenticated},
-       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeVMPatch},
-       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeVMPost},
-       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeVMPut},
+       Delete: APIEndpointAction{Handler: storagePoolVolumeTypeVMDelete, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeVMGet, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeVMPatch, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeVMPost, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeVMPut, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
 }
 
 var storagePoolVolumeTypeCustomCmd = APIEndpoint{
        Path: "storage-pools/{pool}/volumes/custom/{name}",
 
-       Delete: APIEndpointAction{Handler: storagePoolVolumeTypeCustomDelete},
-       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeCustomGet, 
AccessHandler: AllowAuthenticated},
-       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeCustomPatch},
-       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeCustomPost},
-       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeCustomPut},
+       Delete: APIEndpointAction{Handler: storagePoolVolumeTypeCustomDelete, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeCustomGet, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeCustomPatch, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeCustomPost, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeCustomPut, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
 }
 
 var storagePoolVolumeTypeImageCmd = APIEndpoint{
        Path: "storage-pools/{pool}/volumes/image/{name}",
 
-       Delete: APIEndpointAction{Handler: storagePoolVolumeTypeImageDelete},
-       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeImageGet, 
AccessHandler: AllowAuthenticated},
-       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeImagePatch},
-       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeImagePost},
-       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeImagePut},
+       Delete: APIEndpointAction{Handler: storagePoolVolumeTypeImageDelete, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Get:    APIEndpointAction{Handler: storagePoolVolumeTypeImageGet, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Patch:  APIEndpointAction{Handler: storagePoolVolumeTypeImagePatch, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Post:   APIEndpointAction{Handler: storagePoolVolumeTypeImagePost, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Put:    APIEndpointAction{Handler: storagePoolVolumeTypeImagePut, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
 }
 
 // /1.0/storage-pools/{name}/volumes
diff --git a/lxd/storage_volumes_snapshot.go b/lxd/storage_volumes_snapshot.go
index dca4382915..54c4a4c413 100644
--- a/lxd/storage_volumes_snapshot.go
+++ b/lxd/storage_volumes_snapshot.go
@@ -21,17 +21,17 @@ import (
 var storagePoolVolumeSnapshotsTypeCmd = APIEndpoint{
        Path: "storage-pools/{pool}/volumes/{type}/{name}/snapshots",
 
-       Get:  APIEndpointAction{Handler: storagePoolVolumeSnapshotsTypeGet, 
AccessHandler: AllowAuthenticated},
-       Post: APIEndpointAction{Handler: storagePoolVolumeSnapshotsTypePost},
+       Get:  APIEndpointAction{Handler: storagePoolVolumeSnapshotsTypeGet, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Post: APIEndpointAction{Handler: storagePoolVolumeSnapshotsTypePost, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
 }
 
 var storagePoolVolumeSnapshotTypeCmd = APIEndpoint{
        Path: 
"storage-pools/{pool}/volumes/{type}/{name}/snapshots/{snapshotName}",
 
-       Delete: APIEndpointAction{Handler: storagePoolVolumeSnapshotTypeDelete},
-       Get:    APIEndpointAction{Handler: storagePoolVolumeSnapshotTypeGet, 
AccessHandler: AllowAuthenticated},
-       Post:   APIEndpointAction{Handler: storagePoolVolumeSnapshotTypePost},
-       Put:    APIEndpointAction{Handler: storagePoolVolumeSnapshotTypePut},
+       Delete: APIEndpointAction{Handler: storagePoolVolumeSnapshotTypeDelete, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Get:    APIEndpointAction{Handler: storagePoolVolumeSnapshotTypeGet, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Post:   APIEndpointAction{Handler: storagePoolVolumeSnapshotTypePost, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
+       Put:    APIEndpointAction{Handler: storagePoolVolumeSnapshotTypePut, 
AccessHandler: AllowProjectPermission("storage-volumes", 
"manage-storage-volumes")},
 }
 
 func storagePoolVolumeSnapshotsTypePost(d *Daemon, r *http.Request) 
response.Response {

From 4d7376d770d5daabd4a70604824aa4833e2f4b0d Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Thu, 5 Mar 2020 16:06:15 +0000
Subject: [PATCH 2/2] lxd/daemon: Adds comment to AllowAuthenticated

To explain the apparent briefness of this function.

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/daemon.go | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lxd/daemon.go b/lxd/daemon.go
index 68931fe677..571e0ead5b 100644
--- a/lxd/daemon.go
+++ b/lxd/daemon.go
@@ -201,7 +201,10 @@ type APIEndpointAction struct {
        AllowUntrusted bool
 }
 
-// AllowAuthenticated is a AccessHandler which allows all requests
+// AllowAuthenticated is a AccessHandler which allows all requests.
+// This function doesn't do anything itself, except return the 
EmptySyncResponse that allows the request to
+// proceed. However in order to access any API route you must be 
authenticated, unless the handler's AllowUntrusted
+// property is set to true or you are an admin.
 func AllowAuthenticated(d *Daemon, r *http.Request) response.Response {
        return response.EmptySyncResponse
 }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to