[libvirt] [PATCH v5 15/24] access: add permissions for network port objects
Laine Stump
laine at laine.org
Thu May 23 16:11:46 UTC 2019
On 5/14/19 11:48 AM, Daniel P. Berrangé wrote:
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
> src/access/genpolkit.pl | 2 +-
> src/access/viraccessdriver.h | 6 ++++
> src/access/viraccessdrivernop.c | 11 ++++++++
> src/access/viraccessdriverpolkit.c | 26 ++++++++++++++++++
> src/access/viraccessdriverstack.c | 25 +++++++++++++++++
> src/access/viraccessmanager.c | 16 +++++++++++
> src/access/viraccessmanager.h | 6 ++++
> src/access/viraccessperm.c | 6 ++++
> src/access/viraccessperm.h | 44 ++++++++++++++++++++++++++++++
> 9 files changed, 141 insertions(+), 1 deletion(-)
>
> diff --git a/src/access/genpolkit.pl b/src/access/genpolkit.pl
> index e074c90eb6..f8f20caf65 100755
> --- a/src/access/genpolkit.pl
> +++ b/src/access/genpolkit.pl
> @@ -21,7 +21,7 @@ use strict;
> use warnings;
>
> my @objects = (
> - "CONNECT", "DOMAIN", "INTERFACE",
> + "CONNECT", "DOMAIN", "INTERFACE", "NETWORK_PORT",
> "NETWORK","NODE_DEVICE", "NWFILTER_BINDING", "NWFILTER",
> "SECRET", "STORAGE_POOL", "STORAGE_VOL",
> );
> diff --git a/src/access/viraccessdriver.h b/src/access/viraccessdriver.h
> index 2cc3950f60..590d86fdf0 100644
> --- a/src/access/viraccessdriver.h
> +++ b/src/access/viraccessdriver.h
> @@ -39,6 +39,11 @@ typedef int (*virAccessDriverCheckNetworkDrv)(virAccessManagerPtr manager,
> const char *driverName,
> virNetworkDefPtr network,
> virAccessPermNetwork av);
> +typedef int (*virAccessDriverCheckNetworkPortDrv)(virAccessManagerPtr manager,
> + const char *driverName,
> + virNetworkDefPtr network,
> + virNetworkPortDefPtr port,
> + virAccessPermNetworkPort av);
> typedef int (*virAccessDriverCheckNodeDeviceDrv)(virAccessManagerPtr manager,
> const char *driverName,
> virNodeDeviceDefPtr nodedev,
> @@ -82,6 +87,7 @@ struct _virAccessDriver {
> virAccessDriverCheckDomainDrv checkDomain;
> virAccessDriverCheckInterfaceDrv checkInterface;
> virAccessDriverCheckNetworkDrv checkNetwork;
> + virAccessDriverCheckNetworkPortDrv checkNetworkPort;
> virAccessDriverCheckNodeDeviceDrv checkNodeDevice;
> virAccessDriverCheckNWFilterDrv checkNWFilter;
> virAccessDriverCheckNWFilterBindingDrv checkNWFilterBinding;
> diff --git a/src/access/viraccessdrivernop.c b/src/access/viraccessdrivernop.c
> index 98ef9206c5..5e9d9db759 100644
> --- a/src/access/viraccessdrivernop.c
> +++ b/src/access/viraccessdrivernop.c
> @@ -57,6 +57,16 @@ virAccessDriverNopCheckNetwork(virAccessManagerPtr manager ATTRIBUTE_UNUSED,
> return 1; /* Allow */
> }
>
> +static int
> +virAccessDriverNopCheckNetworkPort(virAccessManagerPtr manager ATTRIBUTE_UNUSED,
> + const char *driverName ATTRIBUTE_UNUSED,
> + virNetworkDefPtr network ATTRIBUTE_UNUSED,
> + virNetworkPortDefPtr port ATTRIBUTE_UNUSED,
> + virAccessPermNetworkPort perm ATTRIBUTE_UNUSED)
> +{
> + return 1; /* Allow */
> +}
> +
> static int
> virAccessDriverNopCheckNodeDevice(virAccessManagerPtr manager ATTRIBUTE_UNUSED,
> const char *driverName ATTRIBUTE_UNUSED,
> @@ -119,6 +129,7 @@ virAccessDriver accessDriverNop = {
> .checkDomain = virAccessDriverNopCheckDomain,
> .checkInterface = virAccessDriverNopCheckInterface,
> .checkNetwork = virAccessDriverNopCheckNetwork,
> + .checkNetworkPort = virAccessDriverNopCheckNetworkPort,
> .checkNodeDevice = virAccessDriverNopCheckNodeDevice,
> .checkNWFilter = virAccessDriverNopCheckNWFilter,
> .checkNWFilterBinding = virAccessDriverNopCheckNWFilterBinding,
> diff --git a/src/access/viraccessdriverpolkit.c b/src/access/viraccessdriverpolkit.c
> index 6954d74a15..b1473cd0a4 100644
> --- a/src/access/viraccessdriverpolkit.c
> +++ b/src/access/viraccessdriverpolkit.c
> @@ -237,6 +237,31 @@ virAccessDriverPolkitCheckNetwork(virAccessManagerPtr manager,
> attrs);
> }
>
> +static int
> +virAccessDriverPolkitCheckNetworkPort(virAccessManagerPtr manager,
> + const char *driverName,
> + virNetworkDefPtr network,
> + virNetworkPortDefPtr port,
> + virAccessPermNetworkPort perm)
> +{
> + char uuidstr1[VIR_UUID_STRING_BUFLEN];
> + char uuidstr2[VIR_UUID_STRING_BUFLEN];
> + const char *attrs[] = {
> + "connect_driver", driverName,
> + "network_name", network->name,
> + "network_uuid", uuidstr1,
> + "port_uuid", uuidstr2,
> + NULL,
> + };
> + virUUIDFormat(network->uuid, uuidstr1);
> + virUUIDFormat(port->uuid, uuidstr2);
> +
> + return virAccessDriverPolkitCheck(manager,
> + "network-port",
Bah. Most of the other calls to virAccessDriverPolkitCheck with
"typename" that is two words separate it with a "-", but the one for
nwfilter binding uses an underscore :-/ (I only noticed this because
the names of the attributes to check always use underscore, and I've
always been bothered by mixing of - and _ - too bad they don't all use
_, that would allow the same name to be used as a C identifier, and make
searching easier).
Anyway, pointless rant, sorry :-)
I can't claim to have deep knowledge of the access driver, but this
addition follows the pattern of what's already there, so:
Reviewed-by: Laine Stump <laine at laine.org>
More information about the libvir-list
mailing list