socsvn commit: r257542 - in soc2013/dpl/head/lib/libzcap: . zlibworker
dpl at FreeBSD.org
dpl at FreeBSD.org
Fri Sep 20 19:44:22 UTC 2013
Author: dpl
Date: Fri Sep 20 19:44:22 2013
New Revision: 257542
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=257542
Log:
Update to zlibworker to handle better gzfileparams().
Modified:
soc2013/dpl/head/lib/libzcap/commands.c
soc2013/dpl/head/lib/libzcap/zlibworker/commands.c
soc2013/dpl/head/lib/libzcap/zlibworker/commands.h
soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c
Modified: soc2013/dpl/head/lib/libzcap/commands.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/commands.c Fri Sep 20 19:42:47 2013 (r257541)
+++ soc2013/dpl/head/lib/libzcap/commands.c Fri Sep 20 19:44:22 2013 (r257542)
@@ -92,7 +92,7 @@
extern bool slist_initiated;
nvlist_t *nvl, *args, *result;
-size_t gzsize = sizeof(gzFile);
+size_t gzsize = sizeof(struct gzFile_s *);
size_t gzheadersize = sizeof(gz_state);
size_t zstreamsize = sizeof(z_stream);
@@ -799,6 +799,7 @@
result = sendCommand(nvl, file);
ptr = nvlist_get_binary(result, "result", &gzsize);
memcpy(file, ptr, gzsize);
+ fprintf(stderr, "ZCAPLIB: gzopen(): %p\n", ptr);
destroy();
return(file);
}
@@ -806,7 +807,6 @@
int
zcapcmd_gzbuffer(gzFile file, unsigned size)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZBUFFER);
@@ -824,7 +824,6 @@
int
zcapcmd_gzsetparams(gzFile file, int level, int strategy)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZSETPARAMS);
@@ -899,7 +898,6 @@
int
zcapcmd_gzputs(gzFile file, const char *s)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTS);
@@ -917,7 +915,6 @@
char *
zcapcmd_gzgets(gzFile file, char *buf, int len)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZGETS);
@@ -939,7 +936,6 @@
int
zcapcmd_gzputc(gzFile file, int c)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTC);
@@ -957,7 +953,6 @@
int
zcapcmd_gzungetc(int c, gzFile file)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZUNGETC);
@@ -975,7 +970,6 @@
int
zcapcmd_gzflush(gzFile file, int flush)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZFLUSH);
@@ -993,7 +987,6 @@
z_off_t
zcapcmd_gzseek(gzFile file, z_off_t offset, int whence)
{
-
initNvl();
nvlist_add_number(nvl, "command", ZCAPCMD_GZSEEK);
Modified: soc2013/dpl/head/lib/libzcap/zlibworker/commands.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Fri Sep 20 19:42:47 2013 (r257541)
+++ soc2013/dpl/head/lib/libzcap/zlibworker/commands.c Fri Sep 20 19:44:22 2013 (r257542)
@@ -11,7 +11,7 @@
extern int zero;
extern void *data;
-size_t gzsize = sizeof(gz_state);
+size_t gzsize = sizeof(struct gzFile_s *);
size_t zstreamsize = sizeof(z_stream);
/*
@@ -254,6 +254,8 @@
mode = nvlist_get_string(args, "mode");
ret = gzdopen(fd, mode);
+
+ fprintf(stderr, "ZLIBWORKER: gzopen(): %p\n", ret);
nvlist_add_binary(result, "result", ret, gzsize);
}
@@ -275,12 +277,20 @@
zcapcmd_gzsetparams(nvlist_t *args, nvlist_t *result)
{
int ret = -1;
+ gzFile file;
+ int level, strat;
- ret = gzsetparams(
- (gzFile)nvlist_get_binary(args, "file", &gzsize),
- nvlist_get_number(args, "level"),
- nvlist_get_number(args, "strategy")
- );
+ fprintf(stderr, "We get about to get zcapcmd_gzsetparams() args\n");
+ file = (gzFile)nvlist_get_binary(args, "file", &gzsize);
+ fprintf(stderr, "We got file\n");
+ level = nvlist_get_number(args, "level");
+ fprintf(stderr, "We got level\n");
+ strat = nvlist_get_number(args, "strategy");
+ fprintf(stderr, "We got strat\n");
+
+ fprintf(stderr, "We get to gzsetparams(%p, %d, %d)\n", file, level, strat);
+ ret = gzsetparams(file, level, strat);
+ fprintf(stderr, "We finished with zcapcmd_gzsetparams()\n");
nvlist_add_number(result, "result", ret);
}
Modified: soc2013/dpl/head/lib/libzcap/zlibworker/commands.h
==============================================================================
--- soc2013/dpl/head/lib/libzcap/zlibworker/commands.h Fri Sep 20 19:42:47 2013 (r257541)
+++ soc2013/dpl/head/lib/libzcap/zlibworker/commands.h Fri Sep 20 19:44:22 2013 (r257542)
@@ -4,13 +4,9 @@
This list is taken from zlib.h, in this same directory.
All this defines represent the commands passed to the real
- zlib listening through a program, and it will recognize them.
+ zlib listening through zlibworker, and it will recognize them.
Also, the defines have been checked for not being duplicates.
- Since the only things that we can Capsicumize are: deflate()
- and inflate(), we only have to care about sending those to
- commands (related to the basic functions, and utility functions.
-
*/
#define SOCKETFILENO 3
Modified: soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Fri Sep 20 19:42:47 2013 (r257541)
+++ soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Fri Sep 20 19:44:22 2013 (r257542)
@@ -1,13 +1,17 @@
#include <sys/capability.h>
+#include <sys/types.h>
#include <err.h>
#include <nv.h>
#include <stdio.h>
+#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include "commands.h"
#include "data.h"
+#include "debug.h"
int main(int argc, char *argv[]);
static void destroy(nvlist_t *nvl, nvlist_t *args, nvlist_t *results);
@@ -75,6 +79,20 @@
/* Zero is set when we need to zero out data */
int zero = 0;
+/* At "debug.h" */
+extern int DEBUG_ZCAP;
+
+static void
+debug(const char *msg, ...)
+{
+ va_list ap;
+
+ va_start(ap, msg);
+ if (DEBUG_ZCAP == 1)
+ vfprintf(stderr, msg, ap);
+ va_end(ap);
+}
+
/* Deletes nvlists */
static void
destroy(nvlist_t *nvl, nvlist_t *args, nvlist_t *results)
@@ -106,6 +124,8 @@
/* Sandbox the process */
if (cap_enter() < 0)
err(1, "Couldn't enter capability mode");
+
+ debug("DEBUG: zlibworker(%d) entered capability mode\n", getpid());
if ((data = calloc(5*1024, 1)) == NULL)
err(1, "malloc\n");
@@ -114,6 +134,7 @@
if ((result = nvlist_create(0)) == NULL)
err(1, "Can't create result.\n");
+ debug("DEBUG: zlibworker(%d) Awaiting command\n", getpid());
if ((nvl = nvlist_recv(SOCKETFILENO)) == NULL)
err(1, "Received nvlist is NULL\n");
@@ -294,6 +315,7 @@
break;
}
+ debug("DEBUG: zlibworker(%d) About to send result\n", getpid());
if (nvlist_send(SOCKETFILENO, result) != 0)
err(1, "Couldn't send response\n");
More information about the svn-soc-all
mailing list