Revision 15dfcd45 monitor.c
b/monitor.c | ||
---|---|---|
1579 | 1579 |
monitor_printf(mon, "balloon: actual=%d\n", (int)(actual >> 20)); |
1580 | 1580 |
} |
1581 | 1581 |
|
1582 |
static void do_acl(Monitor *mon, |
|
1583 |
const char *command, |
|
1584 |
const char *aclname, |
|
1585 |
const char *match, |
|
1586 |
int has_index, |
|
1587 |
int index) |
|
1582 |
static qemu_acl *find_acl(Monitor *mon, const char *name) |
|
1588 | 1583 |
{ |
1589 |
qemu_acl *acl; |
|
1584 |
qemu_acl *acl = qemu_acl_find(name);
|
|
1590 | 1585 |
|
1591 |
acl = qemu_acl_find(aclname); |
|
1592 | 1586 |
if (!acl) { |
1593 |
monitor_printf(mon, "acl: unknown list '%s'\n", aclname); |
|
1594 |
return; |
|
1587 |
monitor_printf(mon, "acl: unknown list '%s'\n", name); |
|
1595 | 1588 |
} |
1589 |
return acl; |
|
1590 |
} |
|
1591 |
|
|
1592 |
static void do_acl_show(Monitor *mon, const char *aclname) |
|
1593 |
{ |
|
1594 |
qemu_acl *acl = find_acl(mon, aclname); |
|
1595 |
qemu_acl_entry *entry; |
|
1596 |
int i = 0; |
|
1596 | 1597 |
|
1597 |
if (strcmp(command, "show") == 0) { |
|
1598 |
int i = 0; |
|
1599 |
qemu_acl_entry *entry; |
|
1598 |
if (acl) { |
|
1600 | 1599 |
monitor_printf(mon, "policy: %s\n", |
1601 | 1600 |
acl->defaultDeny ? "deny" : "allow"); |
1602 | 1601 |
TAILQ_FOREACH(entry, &acl->entries, next) { |
1603 | 1602 |
i++; |
1604 | 1603 |
monitor_printf(mon, "%d: %s %s\n", i, |
1605 |
entry->deny ? "deny" : "allow", |
|
1606 |
entry->match); |
|
1604 |
entry->deny ? "deny" : "allow", entry->match); |
|
1607 | 1605 |
} |
1608 |
} else if (strcmp(command, "reset") == 0) { |
|
1606 |
} |
|
1607 |
} |
|
1608 |
|
|
1609 |
static void do_acl_reset(Monitor *mon, const char *aclname) |
|
1610 |
{ |
|
1611 |
qemu_acl *acl = find_acl(mon, aclname); |
|
1612 |
|
|
1613 |
if (acl) { |
|
1609 | 1614 |
qemu_acl_reset(acl); |
1610 | 1615 |
monitor_printf(mon, "acl: removed all rules\n"); |
1611 |
} else if (strcmp(command, "policy") == 0) { |
|
1612 |
if (!match) { |
|
1613 |
monitor_printf(mon, "acl: missing policy parameter\n"); |
|
1614 |
return; |
|
1615 |
} |
|
1616 |
} |
|
1617 |
} |
|
1618 |
|
|
1619 |
static void do_acl_policy(Monitor *mon, const char *aclname, |
|
1620 |
const char *policy) |
|
1621 |
{ |
|
1622 |
qemu_acl *acl = find_acl(mon, aclname); |
|
1616 | 1623 |
|
1617 |
if (strcmp(match, "allow") == 0) { |
|
1624 |
if (acl) { |
|
1625 |
if (strcmp(policy, "allow") == 0) { |
|
1618 | 1626 |
acl->defaultDeny = 0; |
1619 | 1627 |
monitor_printf(mon, "acl: policy set to 'allow'\n"); |
1620 |
} else if (strcmp(match, "deny") == 0) {
|
|
1628 |
} else if (strcmp(policy, "deny") == 0) {
|
|
1621 | 1629 |
acl->defaultDeny = 1; |
1622 | 1630 |
monitor_printf(mon, "acl: policy set to 'deny'\n"); |
1623 | 1631 |
} else { |
1624 |
monitor_printf(mon, "acl: unknown policy '%s', expected 'deny' or 'allow'\n", match); |
|
1632 |
monitor_printf(mon, "acl: unknown policy '%s', " |
|
1633 |
"expected 'deny' or 'allow'\n", policy); |
|
1625 | 1634 |
} |
1626 |
} else if ((strcmp(command, "allow") == 0) || |
|
1627 |
(strcmp(command, "deny") == 0)) { |
|
1628 |
int deny = strcmp(command, "deny") == 0 ? 1 : 0; |
|
1629 |
int ret; |
|
1635 |
} |
|
1636 |
} |
|
1630 | 1637 |
|
1631 |
if (!match) { |
|
1632 |
monitor_printf(mon, "acl: missing match parameter\n"); |
|
1638 |
static void do_acl_add(Monitor *mon, const char *aclname, |
|
1639 |
const char *match, const char *policy, |
|
1640 |
int has_index, int index) |
|
1641 |
{ |
|
1642 |
qemu_acl *acl = find_acl(mon, aclname); |
|
1643 |
int deny, ret; |
|
1644 |
|
|
1645 |
if (acl) { |
|
1646 |
if (strcmp(policy, "allow") == 0) { |
|
1647 |
deny = 0; |
|
1648 |
} else if (strcmp(policy, "deny") == 0) { |
|
1649 |
deny = 1; |
|
1650 |
} else { |
|
1651 |
monitor_printf(mon, "acl: unknown policy '%s', " |
|
1652 |
"expected 'deny' or 'allow'\n", policy); |
|
1633 | 1653 |
return; |
1634 | 1654 |
} |
1635 |
|
|
1636 | 1655 |
if (has_index) |
1637 | 1656 |
ret = qemu_acl_insert(acl, deny, match, index); |
1638 | 1657 |
else |
... | ... | |
1641 | 1660 |
monitor_printf(mon, "acl: unable to add acl entry\n"); |
1642 | 1661 |
else |
1643 | 1662 |
monitor_printf(mon, "acl: added rule at position %d\n", ret); |
1644 |
} else if (strcmp(command, "remove") == 0) {
|
|
1645 |
int ret;
|
|
1663 |
} |
|
1664 |
}
|
|
1646 | 1665 |
|
1647 |
if (!match) {
|
|
1648 |
monitor_printf(mon, "acl: missing match parameter\n");
|
|
1649 |
return;
|
|
1650 |
}
|
|
1666 |
static void do_acl_remove(Monitor *mon, const char *aclname, const char *match)
|
|
1667 |
{
|
|
1668 |
qemu_acl *acl = find_acl(mon, aclname);
|
|
1669 |
int ret;
|
|
1651 | 1670 |
|
1671 |
if (acl) { |
|
1652 | 1672 |
ret = qemu_acl_remove(acl, match); |
1653 | 1673 |
if (ret < 0) |
1654 | 1674 |
monitor_printf(mon, "acl: no matching acl entry\n"); |
1655 | 1675 |
else |
1656 | 1676 |
monitor_printf(mon, "acl: removed rule at position %d\n", ret); |
1657 |
} else { |
|
1658 |
monitor_printf(mon, "acl: unknown command '%s'\n", command); |
|
1659 | 1677 |
} |
1660 | 1678 |
} |
1661 | 1679 |
|
Also available in: Unified diff