[libvirt] [PATCH 17/20] vbox: reject unknown flags

Daniel P. Berrange berrange at redhat.com
Thu Jul 7 09:29:17 UTC 2011


On Wed, Jul 06, 2011 at 05:24:00PM -0600, Eric Blake wrote:
> * src/vbox/vbox_driver.c (vboxOpenDummy): Reject unknown flags.
> * src/vbox/vbox_tmpl.c (vboxOpen, vboxDomainReboot)
> (vboxNetworkOpen, vboxNetworkGetXMLDesc, vboxStorageOpen)
> (vboxStorageVolCreateXML, vboxStorageVolDelete)
> (vboxStorageVolGetXMLDesc, vboxDomainScreenshot): Likewise.
> ---
>  src/vbox/vbox_driver.c |    5 ++++-
>  src/vbox/vbox_tmpl.c   |   44 +++++++++++++++++++++++++++++++++++---------
>  2 files changed, 39 insertions(+), 10 deletions(-)
> 
> diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c
> index b20998a..3b2e95a 100644
> --- a/src/vbox/vbox_driver.c
> +++ b/src/vbox/vbox_driver.c
> @@ -142,9 +142,12 @@ int vboxRegister(void) {
> 
>  static virDrvOpenStatus vboxOpenDummy(virConnectPtr conn,
>                                        virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> -                                      unsigned int flags ATTRIBUTE_UNUSED) {
> +                                      unsigned int flags)
> +{
>      uid_t uid = getuid();
> 
> +    virCheckFlags(0, VIR_DRV_OPEN_ERROR);
> +
>      if (conn->uri == NULL ||
>          conn->uri->scheme == NULL ||
>          STRNEQ (conn->uri->scheme, "vbox") ||
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index 4a0858f..d6afa31 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -961,10 +961,13 @@ static void vboxUninitialize(vboxGlobalData *data) {
> 
>  static virDrvOpenStatus vboxOpen(virConnectPtr conn,
>                                   virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> -                                 unsigned int flags ATTRIBUTE_UNUSED) {
> +                                 unsigned int flags)
> +{
>      vboxGlobalData *data = NULL;
>      uid_t uid = getuid();
> 
> +    virCheckFlags(0, VIR_DRV_OPEN_ERROR);
> +
>      if (conn->uri == NULL) {
>          conn->uri = xmlParseURI(uid ? "vbox:///session" : "vbox:///system");
>          if (conn->uri == NULL) {
> @@ -1637,7 +1640,8 @@ cleanup:
>      return ret;
>  }
> 
> -static int vboxDomainReboot(virDomainPtr dom, unsigned int flags ATTRIBUTE_UNUSED) {
> +static int vboxDomainReboot(virDomainPtr dom, unsigned int flags)
> +{
>      VBOX_OBJECT_CHECK(dom->conn, int, -1);
>      IMachine *machine    = NULL;
>      vboxIID iid = VBOX_IID_INITIALIZER;
> @@ -1646,6 +1650,8 @@ static int vboxDomainReboot(virDomainPtr dom, unsigned int flags ATTRIBUTE_UNUSE
>      PRBool isAccessible  = PR_FALSE;
>      nsresult rc;
> 
> +    virCheckFlags(0, -1);
> +
>      vboxIIDFromUUID(&iid, dom->uuid);
>      rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine);
>      if (NS_FAILED(rc)) {
> @@ -6938,9 +6944,12 @@ static int vboxDomainEventDeregisterAny(virConnectPtr conn,
>   */
>  static virDrvOpenStatus vboxNetworkOpen(virConnectPtr conn,
>                                          virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> -                                        unsigned int flags ATTRIBUTE_UNUSED) {
> +                                        unsigned int flags)
> +{
>      vboxGlobalData *data = conn->privateData;
> 
> +    virCheckFlags(0, VIR_DRV_OPEN_ERROR);
> +
>      if (STRNEQ(conn->driver->name, "VBOX"))
>          goto cleanup;
> 
> @@ -7575,7 +7584,8 @@ static int vboxNetworkDestroy(virNetworkPtr network) {
>  }
> 
>  static char *vboxNetworkGetXMLDesc(virNetworkPtr network,
> -                                   unsigned int flags ATTRIBUTE_UNUSED) {
> +                                   unsigned int flags)
> +{
>      VBOX_OBJECT_HOST_CHECK(network->conn, char *, NULL);
>      virNetworkDefPtr def  = NULL;
>      virNetworkIpDefPtr ipdef = NULL;
> @@ -7583,6 +7593,8 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr network,
>      PRUnichar *networkInterfaceNameUtf16    = NULL;
>      IHostNetworkInterface *networkInterface = NULL;
> 
> +    virCheckFlags(0, NULL);
> +
>      if (VIR_ALLOC(def) < 0) {
>          virReportOOMError();
>          goto cleanup;
> @@ -7750,9 +7762,12 @@ cleanup:
> 
>  static virDrvOpenStatus vboxStorageOpen (virConnectPtr conn,
>                                           virConnectAuthPtr auth ATTRIBUTE_UNUSED,
> -                                         unsigned int flags ATTRIBUTE_UNUSED) {
> +                                         unsigned int flags)
> +{
>      vboxGlobalData *data = conn->privateData;
> 
> +    virCheckFlags(0, VIR_DRV_OPEN_ERROR);
> +
>      if (STRNEQ(conn->driver->name, "VBOX"))
>          goto cleanup;
> 
> @@ -8098,7 +8113,8 @@ static virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const cha
> 
>  static virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool,
>                                                  const char *xml,
> -                                                unsigned int flags ATTRIBUTE_UNUSED) {
> +                                                unsigned int flags)
> +{
>      VBOX_OBJECT_CHECK(pool->conn, virStorageVolPtr, NULL);
>      virStorageVolDefPtr  def  = NULL;
>      PRUnichar *hddFormatUtf16 = NULL;
> @@ -8106,6 +8122,8 @@ static virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool,
>      virStoragePoolDef poolDef;
>      nsresult rc;
> 
> +    virCheckFlags(0, NULL);
> +
>      /* since there is currently one default pool now
>       * and virStorageVolDefFormat() just checks it type
>       * so just assign it for now, change the behaviour
> @@ -8191,7 +8209,8 @@ cleanup:
>  }
> 
>  static int vboxStorageVolDelete(virStorageVolPtr vol,
> -                                unsigned int flags ATTRIBUTE_UNUSED) {
> +                                unsigned int flags)
> +{
>      VBOX_OBJECT_CHECK(vol->conn, int, -1);
>      vboxIID hddIID = VBOX_IID_INITIALIZER;
>      unsigned char uuid[VIR_UUID_BUFLEN];
> @@ -8201,6 +8220,8 @@ static int vboxStorageVolDelete(virStorageVolPtr vol,
>      int i = 0;
>      int j = 0;
> 
> +    virCheckFlags(0, -1);
> +
>      if (virUUIDParse(vol->key, uuid) < 0) {
>          vboxError(VIR_ERR_INVALID_ARG,
>                    _("Could not parse UUID from '%s'"), vol->key);
> @@ -8424,7 +8445,8 @@ static int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info
>      return ret;
>  }
> 
> -static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags ATTRIBUTE_UNUSED) {
> +static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags)
> +{
>      VBOX_OBJECT_CHECK(vol->conn, char *, NULL);
>      IHardDisk *hardDisk  = NULL;
>      unsigned char uuid[VIR_UUID_BUFLEN];
> @@ -8434,6 +8456,8 @@ static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags A
>      int defOk = 0;
>      nsresult rc;
> 
> +    virCheckFlags(0, NULL);
> +
>      memset(&pool, 0, sizeof(pool));
>      memset(&def, 0, sizeof(def));
> 
> @@ -8597,7 +8621,7 @@ static char *
>  vboxDomainScreenshot(virDomainPtr dom,
>                       virStreamPtr st,
>                       unsigned int screen,
> -                     unsigned int flags ATTRIBUTE_UNUSED)
> +                     unsigned int flags)
>  {
>      VBOX_OBJECT_CHECK(dom->conn, char *, NULL);
>      IConsole *console = NULL;
> @@ -8608,6 +8632,8 @@ vboxDomainScreenshot(virDomainPtr dom,
>      int tmp_fd = -1;
>      unsigned int max_screen;
> 
> +    virCheckFlags(0, NULL);
> +
>      vboxIIDFromUUID(&iid, dom->uuid);
>      rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine);
>      if (NS_FAILED(rc)) {

ACK

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list