All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>
Cc: qemu-devel@nongnu.org, "Markus Armbruster" <armbru@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v5 09/11] authz: add QAuthZListFile object type for a file access control list
Date: Fri, 19 Oct 2018 13:53:42 +0100	[thread overview]
Message-ID: <20181019125342.GS13722@redhat.com> (raw)
In-Reply-To: <b1d61bfd-cc34-2103-35a1-86bd828e7a93@redhat.com>

On Fri, Oct 19, 2018 at 11:41:45AM +0200, Philippe Mathieu-Daudé wrote:
> On 09/10/2018 15:04, Daniel P. Berrangé wrote:
> > Add a QAuthZListFile object type that implements the QAuthZ interface. This
> > built-in implementation is a proxy around the QAtuhZList object type,
> > initializing it from an external file, and optionally, automatically
> > reloading it whenever it changes.
> > 
> > To create an instance of this object via the QMP monitor, the syntax
> > used would be:
> > 
> >       {
> >         "execute": "object-add",
> >         "arguments": {
> >           "qom-type": "authz-list-file",
> >           "id": "authz0",
> >           "parameters": {
> >             "filename": "/etc/qemu/vnc.acl",
> > 	    "refresh": "yes"
> >           }
> >         }
> >       }
> > 
> > If "refresh" is "yes", inotify is used to monitor the file,
> > automatically reloading changes. If an error occurs during reloading,
> > all authorizations will fail until the file is next successfully
> > loaded.
> > 
> > The /etc/qemu/vnc.acl file would contain a JSON representation of a
> > QAuthZList object
> > 
> >     {
> >       "rules": [
> >          { "match": "fred", "policy": "allow", "format": "exact" },
> >          { "match": "bob", "policy": "allow", "format": "exact" },
> >          { "match": "danb", "policy": "deny", "format": "glob" },
> >          { "match": "dan*", "policy": "allow", "format": "exact" },
> >       ],
> >       "policy": "deny"
> >     }
> > 
> > This sets up an authorization rule that allows 'fred', 'bob' and anyone
> > whose name starts with 'dan', except for 'danb'. Everyone unmatched is
> > denied.
> > 
> > The object can be loaded on the comand line using
> > 
> >    -object authz-list-file,id=authz0,filename=/etc/qemu/vnc.acl,refresh=yes
> > 
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> >  authz/Makefile.objs      |   1 +
> >  authz/listfile.c         | 284 +++++++++++++++++++++++++++++++++++++++
> >  authz/trace-events       |   4 +
> >  include/authz/listfile.h | 110 +++++++++++++++
> >  qemu-options.hx          |  47 +++++++
> >  5 files changed, 446 insertions(+)
> >  create mode 100644 authz/listfile.c
> >  create mode 100644 include/authz/listfile.h
> > 

> > +static void
> > +qauthz_list_file_event(int wd G_GNUC_UNUSED,
> > +                       QFileMonitorEvent ev G_GNUC_UNUSED,
> > +                       const char *name G_GNUC_UNUSED,
> > +                       void *opaque)
> > +{
> > +    QAuthZListFile *fauthz = opaque;
> > +    Error *err = NULL;
> > +
> > +    if (ev != QFILE_MONITOR_EVENT_MODIFIED &&
> > +        ev != QFILE_MONITOR_EVENT_CREATED)
> 
> You missed:
> 
>                                               {
> 
> > +        return;
> 
>        }

Opps, yes.


> > +static void
> > +qauthz_list_file_complete(UserCreatable *uc, Error **errp)
> > +{
> > +    QAuthZListFile *fauthz = QAUTHZ_LIST_FILE(uc);
> > +
> > +    fauthz->list = qauthz_list_file_load(fauthz, errp);
> > +
> > +    if (fauthz->refresh) {
> 
> Can we invert this condition?

Yes, will do

> 
> > +        gchar *dir, *file;
> > +        fauthz->file_monitor = qemu_file_monitor_get_instance(errp);
> > +        if (!fauthz->file_monitor) {
> > +            return;
> > +        }
> > +
> > +        dir = g_path_get_dirname(fauthz->filename);
> > +        if (g_str_equal(dir, ".")) {
> > +            error_setg(errp, "Filename must be an absolute path");
> 
> What about:
> 
>                goto cleanup;

Yep.

> 
> > +            g_free(dir);
> > +            return;
> > +        }
> > +        file = g_path_get_basename(fauthz->filename);
> > +        if (g_str_equal(file, ".")) {
> > +            error_setg(errp, "Path has no trailing filename component");
> 
>                goto cleanup;
> 
> > +            g_free(file);
> > +            g_free(dir);
> > +            return;
> > +        }
> > +
> > +        fauthz->file_watch = qemu_file_monitor_add_watch(
> > +            fauthz->file_monitor, dir, file,
> > +            qauthz_list_file_event, fauthz, errp);
> > +        g_free(file);
> > +        g_free(dir);
> > +        if (fauthz->file_watch < 0) {
> 
> Is this really useful? Do you plan to add more code here?

I just want to make it clear to anyone who changes the code
in future that there's an expected failure condition here.

> > +            return;
> > +        }
> > +    }
> > +}

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

  reply	other threads:[~2018-10-19 12:53 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-09 13:04 [Qemu-devel] [PATCH v5 00/11] Add a standard authorization framework Daniel P. Berrangé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 01/11] util: add helper APIs for dealing with inotify in portable manner Daniel P. Berrangé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 02/11] qom: don't require user creatable objects to be registered Daniel P. Berrangé
2018-10-10 15:11   ` Philippe Mathieu-Daudé
2018-10-18 18:04     ` Philippe Mathieu-Daudé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 03/11] hw/usb: don't set IN_ISDIR for inotify watch in MTP driver Daniel P. Berrangé
2018-10-10 17:00   ` Philippe Mathieu-Daudé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 04/11] hw/usb: fix const-ness for string params " Daniel P. Berrangé
2018-10-10 15:12   ` Philippe Mathieu-Daudé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 05/11] hw/usb: switch MTP to use new inotify APIs Daniel P. Berrangé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 06/11] authz: add QAuthZ object as an authorization base class Daniel P. Berrangé
2018-10-18 18:03   ` Philippe Mathieu-Daudé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 07/11] authz: add QAuthZSimple object type for easy whitelist auth checks Daniel P. Berrangé
2018-10-18 17:53   ` Philippe Mathieu-Daudé
2018-10-19 12:31     ` Daniel P. Berrangé
2018-10-19  9:56   ` Philippe Mathieu-Daudé
2018-10-19 12:32     ` Daniel P. Berrangé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 08/11] authz: add QAuthZList object type for an access control list Daniel P. Berrangé
2018-10-19  9:18   ` Philippe Mathieu-Daudé
2018-10-19  9:20     ` Daniel P. Berrangé
2018-10-19  9:33   ` Philippe Mathieu-Daudé
2018-10-19 13:13     ` Daniel P. Berrangé
2018-10-19  9:57   ` Philippe Mathieu-Daudé
2018-10-19 12:41     ` Daniel P. Berrangé
2018-10-19 12:55       ` Philippe Mathieu-Daudé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 09/11] authz: add QAuthZListFile object type for a file " Daniel P. Berrangé
2018-10-19  9:41   ` Philippe Mathieu-Daudé
2018-10-19 12:53     ` Daniel P. Berrangé [this message]
2018-10-19 12:57       ` Philippe Mathieu-Daudé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 10/11] authz: add QAuthZPAM object type for authorizing using PAM Daniel P. Berrangé
2018-10-19 10:02   ` Philippe Mathieu-Daudé
2018-10-19 11:04     ` Daniel P. Berrangé
2018-10-19 11:54       ` Philippe Mathieu-Daudé
2018-10-19 12:55     ` Daniel P. Berrangé
2018-10-19 12:58       ` Philippe Mathieu-Daudé
2018-10-09 13:04 ` [Qemu-devel] [PATCH v5 11/11] authz: delete existing ACL implementation Daniel P. Berrangé
2018-10-19  6:10   ` Philippe Mathieu-Daudé
2018-10-18 15:19 ` [Qemu-devel] [PATCH v5 00/11] Add a standard authorization framework Daniel P. Berrangé
2018-10-19 10:06   ` Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181019125342.GS13722@redhat.com \
    --to=berrange@redhat.com \
    --cc=afaerber@suse.de \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.