[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] flask: add flask-{get, set}-bool tools



# HG changeset patch
# User Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
# Date 1328196293 0
# Node ID 2d956b5baeb00b1cd560805896a427d19dd97887
# Parent  300bfdf167fa5c0bcd129914c1bd890b431fdb9e
flask: add flask-{get,set}-bool tools

These utilities can be used to modify policy booleans, which allow
minor policy changes without reloading the security policy. This can
be used to make security policy change based on external information
such as time of day, user physical presence, completion of system
boot, or other relevant variables.

Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
Committed-by: Keir Fraser <keir@xxxxxxx>
---


diff -r 300bfdf167fa -r 2d956b5baeb0 tools/flask/utils/Makefile
--- a/tools/flask/utils/Makefile        Thu Feb 02 15:24:13 2012 +0000
+++ b/tools/flask/utils/Makefile        Thu Feb 02 15:24:53 2012 +0000
@@ -11,7 +11,7 @@
 TESTFLAGS= -DTESTING
 TESTENV  = XENSTORED_ROOTDIR=$(TESTDIR) XENSTORED_RUNDIR=$(TESTDIR)
 
-CLIENTS := flask-loadpolicy flask-setenforce flask-getenforce flask-label-pci
+CLIENTS := flask-loadpolicy flask-setenforce flask-getenforce flask-label-pci 
flask-get-bool flask-set-bool
 CLIENTS_SRCS := $(patsubst flask-%,%.c,$(CLIENTS))
 CLIENTS_OBJS := $(patsubst flask-%,%.o,$(CLIENTS))
 
@@ -30,6 +30,12 @@
 flask-label-pci: label-pci.o
        $(CC) $(LDFLAGS) $< $(LDLIBS) -L$(LIBFLASK_ROOT) -lflask 
$(LDLIBS_libxenctrl) -o $@
 
+flask-get-bool: get-bool.o
+       $(CC) $(LDFLAGS) $< $(LDLIBS) -L$(LIBFLASK_ROOT) -lflask 
$(LDLIBS_libxenctrl) -o $@
+
+flask-set-bool: set-bool.o
+       $(CC) $(LDFLAGS) $< $(LDLIBS) -L$(LIBFLASK_ROOT) -lflask 
$(LDLIBS_libxenctrl) -o $@
+
 .PHONY: clean
 clean: 
        rm -f *.o *.opic *.so
diff -r 300bfdf167fa -r 2d956b5baeb0 tools/flask/utils/get-bool.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/flask/utils/get-bool.c      Thu Feb 02 15:24:53 2012 +0000
@@ -0,0 +1,90 @@
+/*
+ *  Author:  Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2,
+ *  as published by the Free Software Foundation.
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <xenctrl.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <libflask.h>
+
+static void usage(char **argv)
+{
+       fprintf(stderr, "Usage: %s {name|-a}\n", argv[0]);
+       exit(1);
+}
+
+static int all_bools(xc_interface *xch)
+{
+       int err = 0, i = 0, curr, pend;
+       char name[256];
+       while (1) {
+               err = flask_getbool_byid(xch, i, name, &curr, &pend);
+               if (err < 0) {
+                       if (errno == ENOENT)
+                               return 0;
+                       fprintf(stderr, "flask_getbool: Unable to get boolean 
#%d: %s (%d)",
+                               i, strerror(errno), err);
+                       return 2;
+               }
+               if (curr == pend)
+                       printf("%s: %d\n", name, curr);
+               else
+                       printf("%s: %d (pending %d)\n", name, curr, pend);
+               i++;
+       }
+}
+
+int main(int argc, char **argv)
+{
+       int err = 0;
+       xc_interface *xch;
+       int curr, pend;
+
+       if (argc != 2)
+               usage(argv);
+
+       xch = xc_interface_open(0,0,0);
+       if ( !xch )
+       {
+               fprintf(stderr, "Unable to create interface to xenctrl: %s\n",
+                               strerror(errno));
+               err = 1;
+               goto done;
+       }
+
+       if (!strcmp(argv[1], "-a"))
+       {
+               err = all_bools(xch);
+               goto done;
+       }
+
+       err = flask_getbool_byname(xch, argv[1], &curr, &pend);
+       if (err) {
+               fprintf(stderr, "flask_getbool: Unable to get boolean %s: %s 
(%d)",
+                       argv[1], strerror(errno), err);
+               err = 2;
+               goto done;
+       }
+
+       if (curr == pend)
+               printf("%s: %d\n", argv[1], curr);
+       else
+               printf("%s: %d (pending %d)\n", argv[1], curr, pend);
+
+ done:
+       if ( xch )
+               xc_interface_close(xch);
+
+       return err;
+}
diff -r 300bfdf167fa -r 2d956b5baeb0 tools/flask/utils/set-bool.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/flask/utils/set-bool.c      Thu Feb 02 15:24:53 2012 +0000
@@ -0,0 +1,72 @@
+/*
+ *  Author:  Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2,
+ *  as published by the Free Software Foundation.
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <xenctrl.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <libflask.h>
+
+static void usage(char **argv)
+{
+       fprintf(stderr, "Usage: %s name value\n", argv[0]);
+       exit(1);
+}
+
+static int str2bool(const char *str)
+{
+       if (str[0] == '0' || str[0] == '1')
+               return (str[0] == '1');
+       if (!strcasecmp(str, "enabled") || !strcasecmp(str, "on") || 
!strcasecmp(str, "y"))
+               return 1;
+       if (!strcasecmp(str, "disabled") || !strcasecmp(str, "off") || 
!strcasecmp(str, "n"))
+               return 0;
+       fprintf(stderr, "Unknown value %s\n", str);
+       exit(1);
+}
+
+int main(int argc, char **argv)
+{
+       int err = 0;
+       xc_interface *xch;
+       int value;
+
+       if (argc != 3)
+               usage(argv);
+
+       value = str2bool(argv[2]);
+
+       xch = xc_interface_open(0,0,0);
+       if ( !xch )
+       {
+               fprintf(stderr, "Unable to create interface to xenctrl: %s\n",
+                               strerror(errno));
+               err = 1;
+               goto done;
+       }
+
+       err = flask_setbool(xch, argv[1], value, 1);
+       if (err) {
+               fprintf(stderr, "flask_setbool: Unable to set boolean %s=%s: %s 
(%d)",
+                       argv[1], argv[2], strerror(errno), err);
+               err = 2;
+               goto done;
+       }
+
+ done:
+       if ( xch )
+               xc_interface_close(xch);
+
+       return err;
+}

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.