Date: Mon, 9 Sep 2013 16:09:03 GMT From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r257164 - in soc2013/dpl/head/lib/libzcap: . zlibworker Message-ID: <201309091609.r89G93AI006166@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dpl Date: Mon Sep 9 16:09:03 2013 New Revision: 257164 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257164 Log: Code improved. Now we're not depending on capsicum.h as before. Modified: soc2013/dpl/head/lib/libzcap/adler32.c soc2013/dpl/head/lib/libzcap/capsicum.c soc2013/dpl/head/lib/libzcap/capsicum.h soc2013/dpl/head/lib/libzcap/commands.c soc2013/dpl/head/lib/libzcap/commands.h soc2013/dpl/head/lib/libzcap/crc32.c soc2013/dpl/head/lib/libzcap/deflate.c soc2013/dpl/head/lib/libzcap/gzlib.c soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Modified: soc2013/dpl/head/lib/libzcap/adler32.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/adler32.c Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/adler32.c Mon Sep 9 16:09:03 2013 (r257164) @@ -6,6 +6,7 @@ /* @(#) $Id$ */ #include "zutil.h" +#include "commands.h" #define local static Modified: soc2013/dpl/head/lib/libzcap/capsicum.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.c Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/capsicum.c Mon Sep 9 16:09:03 2013 (r257164) @@ -1,3 +1,4 @@ +#include "debug.h" #include "capsicum.h" #include "zlib.h" @@ -8,38 +9,62 @@ #include <sys/socket.h> #include <sys/types.h> +#include <err.h> +#include <errno.h> #include <nv.h> #include <signal.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> -#include <err.h> /* * The only function allocating space * for struct sandbox is startChild(). */ -struct sandbox; -struct slisthead sandboxes; -struct sandbox * startSandbox(void *data); -void stopSandbox(struct sandbox *sandbox); +/* head of singly-linked list. */ +SLIST_HEAD(slisthead, sandbox) sandboxes = SLIST_HEAD_INITIALIZER(sandboxes); + +struct sandbox { + void * dataptr; /* Pointer to the data structure of the lib */ + int pd; /* Process descriptor */ + int socket; /* Socket we have to pass the data through */ + SLIST_ENTRY(sandbox) next; /* Singly-linked list. */ +}; + +void startSandbox(void *data); +void stopSandbox(void *ptr); void startNullSandbox(void); struct sandbox * findSandbox(void *ptr); struct sandbox *startChild(void *data); void killChild(void); void suicide(int signal); -nvlist_t * sendCommand(nvlist_t *nvl, int socket); +nvlist_t * sendCommand(nvlist_t *nvl, void *ptr); bool slist_initiated = 0; +/* At "debug.h" */ +extern int DEBUG_ZCAP; + +static void +limitfd(int fd, unsigned long long cap) +{ + cap_rights_t rights; + + cap_rights_init(&rights); + cap_rights_set(&rights, cap); + + if (cap_rights_limit(fd, &rights) < 0 && errno != ENOSYS) + err(1, "Couldn't limit fd: %d\n", fd); +} + /* * This function should be called only by: * gzopen(), deflateInit(), inflateInit(), * inflateBackInit(). */ -struct sandbox * +void startSandbox(void *data) { struct sandbox *newsandbox; @@ -50,8 +75,6 @@ /* Create and add the real sandbox */ newsandbox = startChild(data); SLIST_INSERT_HEAD(&sandboxes, newsandbox, next); - - return (newsandbox); } /* @@ -60,18 +83,17 @@ * deflateEnd, inflateEnd (inflateBackEnd). */ void -stopSandbox(struct sandbox *sandboxToStop) +stopSandbox(void *ptr) { - int pid; - - if (pdgetpid(sandboxToStop->pd, &pid) < 0) - err(1, "Couldn't get child PID"); + struct sandbox *box; - if (kill(SIGKILL, pid) < 0) - err(1, "Couldn't kill child"); + box = findSandbox(ptr); + if (DEBUG_ZCAP) + printf("DEBUG: Stopping sandbox:%d\n",box->pd ); + pdkill(box->pd, SIGKILL); - SLIST_REMOVE(&sandboxes, sandboxToStop, sandbox, next); - free(sandboxToStop); + SLIST_REMOVE(&sandboxes, box, sandbox, next); + free(box); } /* Starts the default sandbox. */ @@ -79,8 +101,12 @@ startNullSandbox(void) { struct sandbox *newsandbox; + if (DEBUG_ZCAP) + printf("DEBUG: Starting NULL sandbox\n"); + if (!slist_initiated) { SLIST_INIT(&sandboxes); + /* Here we add a sandbox used for non-structure related stuff */ /* This will be the first sandbox always */ if (SLIST_EMPTY(&sandboxes)) { @@ -124,34 +150,47 @@ sv[0] = sv[1] = 0; if (socketpair(PF_LOCAL, SOCK_STREAM, 0, sv) < 0 ) perror("zcaplib: socketpair()"); + if (DEBUG_ZCAP) + printf("DEBUG: Called socketpair(): sv[0]: %d, sv[1]: %d\n", sv[0], sv[1]); procd = pdfork(&procd, 0); - if (procd == 0 ){ - if (cap_rights_limit(STDIN_FILENO, CAP_READ) < 0) - err(1, "Couldn't limit rights"); - if (cap_rights_limit(STDOUT_FILENO, CAP_WRITE|CAP_FSTAT) < 0) - err(1, "Couldn't limit rights"); - if (cap_rights_limit(STDERR_FILENO, CAP_WRITE) < 0) - err(1, "Couldn't limit rights"); - dup2(sv[0], 3); - if (cap_rights_limit(3, CAP_WRITE|CAP_READ|CAP_POLL_EVENT) < 0) - err(1, "Couldn't limit rights"); + if (procd == 0 ) { + /* Sandbox the process */ + if (cap_enter() < 0) + err(1, "Couldn't enter capability mode"); + + if (DEBUG_ZCAP) + printf("DEBUG: STDIN_FILENO: %d\n", STDIN_FILENO); + + limitfd(STDIN_FILENO, CAP_READ); + limitfd(STDOUT_FILENO, CAP_WRITE|CAP_FSTAT); + limitfd(STDERR_FILENO, CAP_WRITE); + + if (dup2(sv[0], 3) != 3) + err(1, "Couldn't duplicate fd"); closefrom(4); + limitfd(3, CAP_WRITE|CAP_READ|CAP_POLL_EVENT); + /* execl() zlibworker */ - if ( execl("/usr/libexec/zlibworker", "zlibworker", NULL) < 0) { + if ( execl("/usr/libexec/zlibworker", "zlibworker", NULL) < 0) err(1, "Couldn't find zlibworker."); - } + exit(0); } else if (procd == -1) { err(1, "Couldn't fork"); } else { - close(sv[1]); + if ( DEBUG_ZCAP ) + printf("DEBUG: Done forking: %d\n", procd); + signal(SIGCHLD, suicide); atexit(killChild); newsandbox->dataptr = data; newsandbox->pd = procd; newsandbox->socket = sv[0]; + if (DEBUG_ZCAP) + printf("DEBUG: We have started a new sandbox.\n"); + printf("\tpd: %d, socket: %d\n", newsandbox->pd, newsandbox->socket); } return (newsandbox); } @@ -159,6 +198,8 @@ void killChild(void) { int pid; struct sandbox *box; + + /* Kill all sandboxes. */ SLIST_FOREACH(box, &sandboxes, next) if (pdgetpid(box->pd, &pid) > 0) kill(SIGKILL, pid); @@ -167,13 +208,20 @@ kill(getpid(), SIGKILL); } +/* Sends nvlist to the related sandbox. */ nvlist_t * -sendCommand(nvlist_t *nvl, int socket) +sendCommand(nvlist_t *nvl, void *ptr) { nvlist_t *new; - if( nvlist_send(socket, nvl) != 0 ) + struct sandbox *box; + + box = findSandbox(ptr); + if (DEBUG_ZCAP) + printf("DEBUG: Sending command to %d sandbox\n", box->pd); + + if( nvlist_send(box->socket, nvl) != 0 ) err(1, "zcaplib: nvlist_send() Went wrong"); - if ((new = nvlist_recv(socket)) == NULL) + if ((new = nvlist_recv(box->socket)) == NULL) err(1, "nvlist_recv(): nvlist_t is NULL"); return (new); } Modified: soc2013/dpl/head/lib/libzcap/capsicum.h ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.h Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/capsicum.h Mon Sep 9 16:09:03 2013 (r257164) @@ -8,29 +8,12 @@ #include <nv.h> -#define MAXLEN (5*1024) - -struct sandbox * startSandbox(void *data); -void stopSandbox(struct sandbox *sandbox); +void startSandbox(void *data); +void stopSandbox(void *ptr); void startNullSandbox(void); struct sandbox * findSandbox(void *ptr); struct sandbox *startChild(void *data); void killChild(void); void suicide(int signal); -nvlist_t * sendCommand(nvlist_t *nvl, int socket); - -/* head of singly-linked list. */ -SLIST_HEAD(slisthead, sandbox) sandboxes = SLIST_HEAD_INITIALIZER(sandboxes); - -/* - * This structure holds a relation of structs of data structs, - * and its related process descriptor (pd). - */ -struct sandbox { - void * dataptr; /* Pointer to the data structure of the lib */ - int pd; /* Process descriptor */ - int socket; /* Socket we have to pass the data through */ - SLIST_ENTRY(sandbox) next; /* Singly-linked list. */ -}; - -#endif /* CAPSICUM_H */ \ No newline at end of file +nvlist_t * sendCommand(nvlist_t *nvl, void *ptr); +#endif /* !CAPSICUM_H */ \ No newline at end of file Modified: soc2013/dpl/head/lib/libzcap/commands.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/commands.c Mon Sep 9 15:38:51 2013 (r257163) +++ soc2013/dpl/head/lib/libzcap/commands.c Mon Sep 9 16:09:03 2013 (r257164) @@ -8,9 +8,11 @@ #include <string.h> #include <err.h> +#include <nv.h> +#include <dnv.h> -static void initializeCommand(void); +static void initNvl(void); static void destroy(void); @@ -82,24 +84,24 @@ uLong zcapcmd_crc32_combine(uLong crc1, uLong crc2, z_off64_t len2); -extern nvlist_t *sendCommand(nvlist_t *); -extern void *data; +extern nvlist_t *sendCommand(nvlist_t *, void *ptr); +extern void startSandbox(void *data); +extern void startNullSandbox(); +extern bool slist_initiated; nvlist_t *nvl, *args, *result; size_t gzfilesize = sizeof(gzFile); size_t gzheadersize = sizeof(struct gz_header_s); size_t zstreamsize = sizeof(z_stream); -static sandbox_s* -initializeCommand(void *ptr) { - sandbox_s *sanbox; +void +initNvl() { + if (!slist_initiated) + startNullSandbox(); - sandbox = findSandbox(ptr); if( (args = nvlist_create(0)) == NULL || (nvl = nvlist_create(0)) == NULL ) err(1, "zcaplib: nvlist_create"); - - return sandbox; } static void @@ -116,7 +118,8 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); + startSandbox(strm); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEINIT); /* No worries here, strm state will be saved on zlibworker */ @@ -130,7 +133,7 @@ nvlist_add_number(args, "stream_size", stream_size); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); /* * We get the "good" struct from the worker. @@ -154,13 +157,13 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEINIT); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -177,12 +180,12 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEEND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -191,6 +194,7 @@ else err(1, "libzcap: deflateEnd() destroyed z_stream\n"); destroy(); + stopSandbox(strm); return(ret); } @@ -202,7 +206,8 @@ const z_stream *newstrm; const char *msg; - initializeCommand(); + initNvl(); + startSandbox(strm); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEINIT); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -211,7 +216,7 @@ nvlist_add_number(args, "stream_size", stream_size); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -229,13 +234,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATE); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -251,13 +256,13 @@ uLong ret; const z_stream *newstrm; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEEND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -275,14 +280,14 @@ /* XXX */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATESETDICTIONARY); nvlist_add_binary(args, "dictionary", *dictionary, dictLength); nvlist_add_number(args, "dictLength", dictLength); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -296,15 +301,15 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATECOPY); nvlist_add_binary(args, "dest", (void *)dest, zstreamsize); nvlist_add_binary(args, "source", (void *)source, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - /* The two z_streamp are now copied at the worker. */ - result = sendCommand(nvl); + /* The dest z_streamp is copied at its sandbox. */ + result = sendCommand(nvl, dest); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -318,13 +323,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATERESET); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); /* Save the reseted strm. */ @@ -341,7 +346,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEPARAMS); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -349,7 +354,7 @@ nvlist_add_number(args, "strategy", strategy); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); /* Overwrite the old streamp */ @@ -365,7 +370,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATETUNE); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -375,7 +380,7 @@ nvlist_add_number(args, "max_chain", max_chain); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -389,14 +394,14 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEBOUND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_number(args, "sourceLen", sourceLen); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -410,7 +415,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEPENDING); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -419,7 +424,7 @@ nvlist_add_number(args, "bits", *bits); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -433,7 +438,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATEPRIME); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -441,7 +446,7 @@ nvlist_add_number(args, "value", value); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -457,7 +462,7 @@ /* What happens with header->extra??? */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_DEFLATESETHEADER); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -466,7 +471,7 @@ nvlist_add_string(nvl, "comment", head->comment); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -481,13 +486,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATESETDICTIONARY); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -502,13 +507,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEGETDICTIONARY); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -522,13 +527,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATESYNC); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -542,15 +547,16 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATECOPY); nvlist_add_binary(args, "dest", (void *)dest, zstreamsize); nvlist_add_binary(args, "source", (void *)source, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - /* The two z_streamp are now copied at the worker. */ - result = sendCommand(nvl); + /* The dest z_streamp is copied at its sandbox. */ + /* XXX - There's a problem with this, we can't copy internat_state */ + result = sendCommand(nvl, dest); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -564,13 +570,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATERESET); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -586,14 +592,14 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATERESET2); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_number(nvl, "windowBits", windowBits); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -609,7 +615,7 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEPRIME); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); @@ -617,7 +623,7 @@ nvlist_add_number(args, "value", value); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -631,13 +637,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEMARK); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -652,14 +658,14 @@ /* XXX: Beware of gz_headerp extra */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEGETHEADER); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_binary(args, "head", (void *)head, gzheadersize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -677,14 +683,14 @@ /* window has to be a pointer to at least a 32kb buffer */ uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEBACKINIT); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_number(args, "windowBits", windowBits); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -701,13 +707,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEBACK); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -721,13 +727,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_INFLATEBACKEND); nvlist_add_binary(args, "strm", (void *)strm, zstreamsize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, strm); ret = dnvlist_get_number(result, "result", NULL); const z_stream *newstrm = dnvlist_get_binary(result, "newstrm", &zstreamsize, NULL, sizeof(NULL)); @@ -741,12 +747,12 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_ZLIBCOMPILEFLAGS); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, NULL); ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -759,13 +765,13 @@ { uLong ret; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_COMPRESSBOUND); nvlist_add_number(args, "sourceLen", sourceLen); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, NULL); ret = dnvlist_get_number(result, "result", NULL); destroy(); return(ret); @@ -777,14 +783,16 @@ { gzFile *fileptr; gzFile file; - initializeCommand(); + + initNvl(); + startSandbox(file); nvlist_add_number(nvl, "command", ZCAPCMD_GZOPEN); nvlist_move_descriptor(args, "fd", fd); nvlist_add_string(args, "mode", mode); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); fileptr = (gzFile *)dnvlist_get_binary(result, "result", &gzfilesize, NULL, sizeof(NULL)); file = *fileptr; @@ -798,14 +806,14 @@ zcapcmd_gzbuffer(gzFile file, unsigned size) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZBUFFER); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "size", size); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -816,7 +824,7 @@ zcapcmd_gzsetparams(gzFile file, int level, int strategy) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZSETPARAMS); nvlist_add_binary(args, "file", file, gzfilesize); @@ -824,7 +832,7 @@ nvlist_add_number(args, "strategy", strategy); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -836,14 +844,14 @@ { const void * data; - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZREAD); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); data = dnvlist_get_binary(result, "data", len, NULL, sizeof(NULL)); @@ -855,7 +863,7 @@ int zcapcmd_gzwrite(gzFile file, voidp buf, unsigned len) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZWRITE); nvlist_add_binary(args, "file", file, gzfilesize); @@ -863,7 +871,7 @@ nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -873,14 +881,14 @@ int zcapcmd_gzprintf(gzFile file, const char * str) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPRINTF); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_string(args, "str", str); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -891,14 +899,14 @@ zcapcmd_gzputs(gzFile file, const char *s) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTS); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_string(args, "s", s); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -909,14 +917,14 @@ zcapcmd_gzgets(gzFile file, char *buf, int len) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZGETS); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "len", len); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); const char *ret = dnvlist_get_string(result, "result", NULL); if (ret == NULL) @@ -931,14 +939,14 @@ zcapcmd_gzputc(gzFile file, int c) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTC); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "c", c); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -949,14 +957,14 @@ zcapcmd_gzungetc(int c, gzFile file) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZUNGETC); nvlist_add_number(args, "c", c); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_nvlist(nvl, "args", args); - result = sendCommand(nvl); + result = sendCommand(nvl, file); int ret = dnvlist_get_number(result, "result", NULL); destroy(); @@ -967,14 +975,14 @@ zcapcmd_gzflush(gzFile file, int flush) { - initializeCommand(); + initNvl(); nvlist_add_number(nvl, "command", ZCAPCMD_GZFLUSH); nvlist_add_binary(args, "file", file, gzfilesize); nvlist_add_number(args, "flush", flush); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309091609.r89G93AI006166>