Date: Thu, 1 Aug 2013 14:58:27 GMT From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r255419 - soc2013/dpl/head/lib/libzcap Message-ID: <201308011458.r71EwRgV045608@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dpl Date: Thu Aug 1 14:58:27 2013 New Revision: 255419 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=255419 Log: Everything's ready to change most of the functions! Added: soc2013/dpl/head/lib/libzcap/commands.h Modified: soc2013/dpl/head/lib/libzcap/capsicum.c soc2013/dpl/head/lib/libzcap/capsicum.h Modified: soc2013/dpl/head/lib/libzcap/capsicum.c ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.c Thu Aug 1 13:18:47 2013 (r255418) +++ soc2013/dpl/head/lib/libzcap/capsicum.c Thu Aug 1 14:58:27 2013 (r255419) @@ -9,10 +9,11 @@ int sv[2]; int startChild(void); -void waitCommand(void); void killChild(void); +nvlist_t * command(int command, int args, ... ); -int startChild() +int +startChild() { if (socketpair(PF_LOCAL, SOCK_STREAM, 0, sv) < 0 ) perror("socketpair"); @@ -22,14 +23,18 @@ close(STDIN_FILENO); close(STDERR_FILENO); cap_enter(); - waitCommand(); + /* Exec listener */ + exit(0); } else atexit(killChild); return pid; } -/* Wait for commands, and execute them */ +/* + * Wait for commands, and execute them + * This code really pertains to the listener program + void waitCommand() { @@ -38,27 +43,23 @@ while(1) { while(1){ if ((nvl = nvlist_recv(sv[1])) != NULL) - if (nvlist_exists(nvl, "com")) + if (nvlist_exists(nvl, "command")) if (nvlist_exists(nvl, "args")) break; ; } - /* Switch for "command" */ - /* Get args, and call the real lib */ - switch( nvlist_take_number(nvl, "com")){ - case SUM: + // Switch for "command" + // Get args, and call the real lib. + int com = nvlist_take_number(nvl, "command"); + if (com == SUM) { if ((args = nvlist_take_nvlist(nvl, "args")) == NULL) { perror("CHILD: nvlist_take_nvlist(nvl, 'args')"); break; } - nvlist_add_number(nvl, "result", 0 /* sum_(nvlist_take_number(args, "a")) */); - break; - default: - break; + nvlist_add_number(nvl, "result", 0 ); } - while(1){ if( nvlist_send(sv[1], nvl) == 0 ) break; @@ -68,6 +69,112 @@ } } +*/ + +nvlist_t * +command( int command, int args, ... ) +{ + nvlist_t *nvl, *nvlargs; + va_list ap; + + /* If the child is not executing, do it. */ + /* It _should_ only be tested once. + if (pid == 0) + startChild(); + + if( (nvlargs = nvlist_create(0)) == NULL || + (nvl = nvlist_create(0)) == NULL ) { + perror("nvlist_create"); + return (NULL); + } + nvlist_add_number(nvl, "command", command); + + va_start(ap, args); + // Set up args, and add it to nvl. + if (command == DEFLATEINIT){ + } else if (command == DEFLATE ) { + } else if (command == DEFLATEEND ) { + } else if (command == INFLATEINIT ) { + } else if (command == INFLATE ) { + } else if (command == INFLATEEND ) { + } else if (command == DEFLATEINIT2 ) { + } else if (command == DEFLATESETDICTIONARY ) { + } else if (command == DEFLATECOPY ) { + } else if (command == DEFLATERESET ) { + } else if (command == DEFLATEPARAMS ) { + } else if (command == DEFLATETUNE ) { + } else if (command == DEFLATEBOUND ) { + } else if (command == DEFLATEPENDING ) { + } else if (command == DEFLATEPRIME ) { + } else if (command == DEFLATESETHEADER ) { + } else if (command == INFLATEINIT2 ) { + } else if (command == INFLATESETDICTIONARY ) { + } else if (command == INFLATEGETDICTIONARY ) { + } else if (command == INFLATESYNC ) { + } else if (command == INFLATECOPY ) { + } else if (command == INFLATERESET ) { + } else if (command == INFLATERESET2 ) { + } else if (command == INFLATEPRIME ) { + } else if (command == INFLATEMARK ) { + } else if (command == INFLATEGETHEADER ) { + } else if (command == INFLATEBACKINIT ) { + } else if (command == INFLATEBACK ) { + } else if (command == INFLATEBACKEND ) { + } else if (command == ZLIBCOMPILEFLAGS ) { + } else if (command == COMPRESS ) { + } else if (command == COMPRESS2 ) { + } else if (command == COMPRESSBOUND ) { + } else if (command == UNCOMPRESS ) { + } else if (command == GZOPEN ) { + } else if (command == GZDOPEN ) { + } else if (command == GZBUFFER ) { + } else if (command == GZSETPARAMS ) { + } else if (command == GZREAD ) { + } else if (command == GZWRITE ) { + } else if (command == GZPRINTF ) { + } else if (command == GZPUTS ) { + } else if (command == GZGETS ) { + } else if (command == GZPUTC ) { + } else if (command == GZGETC ) { + } else if (command == GZUNGETC ) { + } else if (command == GZFLUSH ) { + } else if (command == GZSEEK ) { + } else if (command == GZREWIND ) { + } else if (command == GZTELL ) { + } else if (command == GZOFFSET ) { + } else if (command == GZEOF ) { + } else if (command == GZDIRECT ) { + } else if (command == GZCLOSE ) { + } else if (command == GZCLOSE_R ) { + } else if (command == GZCLOSE_W ) { + } else if (command == GZERROR ) { + } else if (command == GZCLEARERR ) { + } else if (command == ADLER32 ) { + } else if (command == ADLER32_COMBINE ) { + } else if (command == CRC32 ) { + } else if (command == CRC32_COMBINE ) { + } else { return NULL; } + + va_end(ap); + + /* send nvlist*/ + /* What about the whiles? */ + while(1){ + if( nvlist_send(sv[0], nvl) == 0 ) + break; + ; + } + + /* recv results */ + while(1){ + if ((nvl = nvlist_recv(sv[0])) != NULL) + if (nvlist_exists(nvl, "result")) + break; + ; + } + return (nvl); +} + void killChild(){ kill(pid, SIGKILL); } Modified: soc2013/dpl/head/lib/libzcap/capsicum.h ============================================================================== --- soc2013/dpl/head/lib/libzcap/capsicum.h Thu Aug 1 13:18:47 2013 (r255418) +++ soc2013/dpl/head/lib/libzcap/capsicum.h Thu Aug 1 14:58:27 2013 (r255419) @@ -1,17 +1,15 @@ /* * With Capsicum, we get a compartmentalized, and securer lib. */ -#if defined(__FreeBSD__) -# include <osreldate.h> -# if __FreeBSD_version >= 900041 -# define CAPSICUM -# include <unistd.h> -# include <stdlib.h> -# include <signal.h> -# include <sys/capability.h> -# include <sys/types.h> -# include <sys/wait.h> -# include <sys/socket.h> -# include <nv.h> -# endif +#if __FreeBSD_version >= 900041 +# define CAPSICUM +# include <unistd.h> +# include <stdlib.h> +# include <signal.h> +# include <sys/capability.h> +# include <sys/types.h> +# include <sys/wait.h> +# include <sys/socket.h> +# include <nv.h> +# include "commands.h" #endif Added: soc2013/dpl/head/lib/libzcap/commands.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2013/dpl/head/lib/libzcap/commands.h Thu Aug 1 14:58:27 2013 (r255419) @@ -0,0 +1,155 @@ +/* + This is a list of all the capsizumized zlib interfaces. + Every one of the capsicumized functions will have a define. + 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. + Also, the defines have been checked for not being duplicates. + + // basic functions + zlibVersion // Not capsicumized + deflateInit + deflate + deflateEnd + inflateInit + inflate + inflateEnd + + // Advanced functions + deflateInit2 + deflateSetDictionary + deflateCopy + deflateReset + deflateParams + deflateTune + deflateBound + deflatePending + deflatePrime + deflateSetHeader + inflateInit2 + inflateSetDictionary + inflateGetDictionary + inflateSync + inflateCopy + inflateReset + inflateReset2 + inflatePrime + inflateMark + inflateGetHeader + inflateBackInit + inflateBack + inflateBackEnd + zlibCompileFlags + + // utility functions + compress + compress2 + compressBound + uncompress + + // gzip file access functions + gzopen + gzdopen + gzbuffer + gzsetparams + gzread + gzwrite + gzprintf + gzputs + gzgets + gzputc + gzgetc + gzungetc + gzflush + gzseek + gzrewind + gztell + gzoffset + gzeof + gzdirect + gzclose + gzclose_r + gzclose_w + gzerror + gzclearerr + + // checksum functions + adler32 + adler32_combine + crc32 + crc32_combine +*/ + + +/* basic functions */ +#define DEFLATEINIT 0 +#define DEFLATE 1 +#define DEFLATEEND 2 +#define INFLATEINIT 3 +#define INFLATE 4 +#define INFLATEEND 5 + +/* Advanced functions */ +#define DEFLATEINIT2 +#define DEFLATESETDICTIONARY 6 +#define DEFLATECOPY 7 +#define DEFLATERESET 8 +#define DEFLATEPARAMS 9 +#define DEFLATETUNE 10 +#define DEFLATEBOUND 11 +#define DEFLATEPENDING 12 +#define DEFLATEPRIME 13 +#define DEFLATESETHEADER 14 +#define INFLATEINIT2 15 +#define INFLATESETDICTIONARY 16 +#define INFLATEGETDICTIONARY 17 +#define INFLATESYNC 18 +#define INFLATECOPY 19 +#define INFLATERESET 20 +#define INFLATERESET2 21 +#define INFLATEPRIME 22 +#define INFLATEMARK 23 +#define INFLATEGETHEADER 24 +#define INFLATEBACKINIT 25 +#define INFLATEBACK 26 +#define INFLATEBACKEND 27 +#define ZLIBCOMPILEFLAGS 28 + +/* utility functions */ +#define COMPRESS 29 +#define COMPRESS2 30 +#define COMPRESSBOUND 31 +#define UNCOMPRESS 32 + +/* gzip file access functions */ +#define GZOPEN 33 +#define GZDOPEN 34 +#define GZBUFFER 35 +#define GZSETPARAMS 36 +#define GZREAD 37 +#define GZWRITE 38 +#define GZPRINTF 39 +#define GZPUTS 40 +#define GZGETS 50 +#define GZPUTC 51 +#define GZGETC 52 +#define GZUNGETC 53 +#define GZFLUSH 54 +#define GZSEEK 55 +#define GZREWIND 56 +#define GZTELL 57 +#define GZOFFSET 58 +#define GZEOF 59 +#define GZDIRECT 60 +#define GZCLOSE 61 +#define GZCLOSE_R 62 +#define GZCLOSE_W 63 +#define GZERROR 64 +#define GZCLEARERR 65 + +/* checksum functions */ +#define ADLER32 66 +#define ADLER32_COMBINE 67 +#define CRC32 68 +#define CRC32_COMBINE 69
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308011458.r71EwRgV045608>