WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] tools: add XS_RESTRICT operation to C xenstore clien

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] tools: add XS_RESTRICT operation to C xenstore client libs.
From: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Date: Fri, 2 Jul 2010 13:44:58 +0100
Delivery-date: Fri, 02 Jul 2010 05:46:06 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.18 (2008-05-17)
The OCaml xenstored supports the XS_RESTRICT operation, which
deprivileges a dom0 xenstore connection so it can only affect one
domain's entries.   Add the relevant definitions to the C libraries 
so that callers can use it. 

Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>

diff -r aecf092da748 tools/ocaml/libs/xb/op.ml
--- a/tools/ocaml/libs/xb/op.ml Wed Jun 30 22:12:54 2010 +0100
+++ b/tools/ocaml/libs/xb/op.ml Fri Jul 02 13:37:02 2010 +0100
@@ -31,13 +31,13 @@
            Transaction_end; Introduce; Release;
            Getdomainpath; Write; Mkdir; Rm;
            Setperms; Watchevent; Error; Isintroduced;
-           Resume; Set_target |]
+           Resume; Set_target; Restrict |]
 let size = Array.length operation_c_mapping
 
 (* [offset_pq] has to be the same as in <xen/io/xs_wire.h> *)
 let offset_pq = size
 let operation_c_mapping_pq =
-       [| Restrict |]
+       [| |]
 let size_pq = Array.length operation_c_mapping_pq
 
 let array_search el a =
diff -r aecf092da748 tools/xenstore/xs.c
--- a/tools/xenstore/xs.c       Wed Jun 30 22:12:54 2010 +0100
+++ b/tools/xenstore/xs.c       Fri Jul 02 13:37:02 2010 +0100
@@ -615,6 +615,14 @@
        return false;
 }
 
+bool xs_restrict(struct xs_handle *h, unsigned domid)
+{
+       char buf[16];
+
+       sprintf(buf, "%d", domid);
+       return xs_bool(xs_single(h, XBT_NULL, XS_RESTRICT, buf, NULL));
+}
+
 /* Watch a node for changes (poll on fd to detect, or call read_watch()).
  * When the node (or any child) changes, fd will become readable.
  * Token is returned when watch is read, to allow matching.
diff -r aecf092da748 tools/xenstore/xs.h
--- a/tools/xenstore/xs.h       Wed Jun 30 22:12:54 2010 +0100
+++ b/tools/xenstore/xs.h       Fri Jul 02 13:37:02 2010 +0100
@@ -82,6 +82,15 @@
  */
 bool xs_rm(struct xs_handle *h, xs_transaction_t t,
           const char *path);
+
+/* Restrict a xenstore handle so that it acts as if it had the
+ * permissions of domain @domid.  The handle must currently be
+ * using domain 0's credentials.
+ *
+ * Returns false on failure, in which case the handle continues
+ * to use the old credentials, or true on success.
+ */
+bool xs_restrict(struct xs_handle *h, unsigned domid);
 
 /* Get permissions of node (first element is owner, first perms is "other").
  * Returns malloced array, or NULL: call free() after use.
diff -r aecf092da748 xen/include/public/io/xs_wire.h
--- a/xen/include/public/io/xs_wire.h   Wed Jun 30 22:12:54 2010 +0100
+++ b/xen/include/public/io/xs_wire.h   Fri Jul 02 13:37:02 2010 +0100
@@ -47,7 +47,8 @@
     XS_ERROR,
     XS_IS_DOMAIN_INTRODUCED,
     XS_RESUME,
-    XS_SET_TARGET
+    XS_SET_TARGET,
+    XS_RESTRICT
 };
 
 #define XS_WRITE_NONE "NONE"

Attachment: restrict_xenstored
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>