PERFORCE change 166810 for review
Robert Watson
rwatson at FreeBSD.org
Thu Jul 30 17:42:43 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166810
Change 166810 by rwatson at rwatson_freebsd_capabilities on 2009/07/30 17:42:09
Improve commenting.
Affected files ...
.. //depot/projects/trustedbsd/capabilities/src/tools/cap/fdrpc/fdrpc.c#5 edit
Differences ...
==== //depot/projects/trustedbsd/capabilities/src/tools/cap/fdrpc/fdrpc.c#5 (text+ko) ====
@@ -52,6 +52,9 @@
#define FDRPC_SANDBOX "./fdrpc"
+/*
+ * Unsandboxed host process with full user rights.
+ */
int
main(int argc, char *argv[])
{
@@ -65,10 +68,16 @@
if (argc != 1)
errx(-1, "usage: fdrpc_host");
- if (lch_start(FDRPC_SANDBOX, fdrpc_argv, LCH_PERMIT_STDERR, &lcsp)
- < 0)
+ /*
+ * Create a sandbox, do permit access to stderr.
+ */
+ if (lch_start(FDRPC_SANDBOX, fdrpc_argv, LCH_PERMIT_STDERR, &lcsp) < 0)
err(-1, "lch_start %s", FDRPC_SANDBOX);
+ /*
+ * Send a one-byte message to the sandbox and attach stdin as a
+ * right.
+ */
ch = 'X'; /* RPC data. */
fdcount = 1;
fd_send = STDIN_FILENO;
@@ -85,9 +94,17 @@
printf("lch_rpc_rights: OK\n");
else
printf("lch_rpc_rights: fdcount %d\n", fdcount);
+
+ /*
+ * Terminate the sandbox when done.
+ */
lch_stop(lcsp);
}
+/*
+ * Sandboxed process implementing an 'echo' RPC that accepts and returns file
+ * descriptors to the host.
+ */
int
cap_main(int argc, char *argv[])
{
@@ -101,7 +118,14 @@
if (lcs_get(&lchp) < 0)
err(-1, "lcs_get");
+ /*
+ * Serve RPCs from the host until the sandbox is killed.
+ */
while (1) {
+ /*
+ * Receive an RPC from the host, along with up to one file
+ * descriptor.
+ */
fdcount = 1;
if (lcs_recvrpc_rights(lchp, &opno, &seqno, &buffer, &len,
&fd, &fdcount) < 0) {
@@ -114,6 +138,12 @@
errx(-1, "lcs_recvrpc_rights: opno %d", opno);
if (fdcount != 1)
errx(-1, "lcs_recvrpc_rights: fdcount %d", fdcount);
+
+ /*
+ * Reply with the same message and same file descriptor.
+ * Remember to free the message and received descriptor when
+ * done.
+ */
iov.iov_len = len;
iov.iov_base = buffer;
if (lcs_sendrpc_rights(lchp, opno, seqno, &iov, 1, &fd,
More information about the p4-projects
mailing list