cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

simple.c (3444B)


      1/*
      2 * QEMU simple authorization driver
      3 *
      4 * Copyright (c) 2018 Red Hat, Inc.
      5 *
      6 * This library is free software; you can redistribute it and/or
      7 * modify it under the terms of the GNU Lesser General Public
      8 * License as published by the Free Software Foundation; either
      9 * version 2.1 of the License, or (at your option) any later version.
     10 *
     11 * This library is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14 * Lesser General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU Lesser General Public
     17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
     18 *
     19 */
     20
     21#include "qemu/osdep.h"
     22#include "authz/simple.h"
     23#include "trace.h"
     24#include "qemu/module.h"
     25#include "qom/object_interfaces.h"
     26
     27static bool qauthz_simple_is_allowed(QAuthZ *authz,
     28                                     const char *identity,
     29                                     Error **errp)
     30{
     31    QAuthZSimple *sauthz = QAUTHZ_SIMPLE(authz);
     32
     33    trace_qauthz_simple_is_allowed(authz, sauthz->identity, identity);
     34    return g_str_equal(identity, sauthz->identity);
     35}
     36
     37static void
     38qauthz_simple_prop_set_identity(Object *obj,
     39                                const char *value,
     40                                Error **errp G_GNUC_UNUSED)
     41{
     42    QAuthZSimple *sauthz = QAUTHZ_SIMPLE(obj);
     43
     44    g_free(sauthz->identity);
     45    sauthz->identity = g_strdup(value);
     46}
     47
     48
     49static char *
     50qauthz_simple_prop_get_identity(Object *obj,
     51                                Error **errp G_GNUC_UNUSED)
     52{
     53    QAuthZSimple *sauthz = QAUTHZ_SIMPLE(obj);
     54
     55    return g_strdup(sauthz->identity);
     56}
     57
     58
     59static void
     60qauthz_simple_finalize(Object *obj)
     61{
     62    QAuthZSimple *sauthz = QAUTHZ_SIMPLE(obj);
     63
     64    g_free(sauthz->identity);
     65}
     66
     67
     68static void
     69qauthz_simple_complete(UserCreatable *uc, Error **errp)
     70{
     71    QAuthZSimple *sauthz = QAUTHZ_SIMPLE(uc);
     72
     73    if (!sauthz->identity) {
     74        error_setg(errp, "The 'identity' property must be set");
     75        return;
     76    }
     77}
     78
     79
     80static void
     81qauthz_simple_class_init(ObjectClass *oc, void *data)
     82{
     83    QAuthZClass *authz = QAUTHZ_CLASS(oc);
     84    UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
     85
     86    ucc->complete = qauthz_simple_complete;
     87    authz->is_allowed = qauthz_simple_is_allowed;
     88
     89    object_class_property_add_str(oc, "identity",
     90                                  qauthz_simple_prop_get_identity,
     91                                  qauthz_simple_prop_set_identity);
     92}
     93
     94
     95QAuthZSimple *qauthz_simple_new(const char *id,
     96                                const char *identity,
     97                                Error **errp)
     98{
     99    return QAUTHZ_SIMPLE(
    100        object_new_with_props(TYPE_QAUTHZ_SIMPLE,
    101                              object_get_objects_root(),
    102                              id, errp,
    103                              "identity", identity,
    104                              NULL));
    105}
    106
    107
    108static const TypeInfo qauthz_simple_info = {
    109    .parent = TYPE_QAUTHZ,
    110    .name = TYPE_QAUTHZ_SIMPLE,
    111    .instance_size = sizeof(QAuthZSimple),
    112    .instance_finalize = qauthz_simple_finalize,
    113    .class_init = qauthz_simple_class_init,
    114    .interfaces = (InterfaceInfo[]) {
    115        { TYPE_USER_CREATABLE },
    116        { }
    117    }
    118};
    119
    120
    121static void
    122qauthz_simple_register_types(void)
    123{
    124    type_register_static(&qauthz_simple_info);
    125}
    126
    127
    128type_init(qauthz_simple_register_types);