From owner-svn-soc-all@FreeBSD.ORG Mon Jun 24 18:54:15 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 03D20A32 for ; Mon, 24 Jun 2013 18:54:15 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) by mx1.freebsd.org (Postfix) with ESMTP id DBF1C18F4 for ; Mon, 24 Jun 2013 18:54:14 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r5OIsEi0048977 for ; Mon, 24 Jun 2013 18:54:14 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r5OIsE36048975 for svn-soc-all@FreeBSD.org; Mon, 24 Jun 2013 18:54:14 GMT (envelope-from dpl@FreeBSD.org) Date: Mon, 24 Jun 2013 18:54:14 GMT Message-Id: <201306241854.r5OIsE36048975@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r253432 - soc2013/dpl/head/contrib/bzip2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 24 Jun 2013 18:54:15 -0000 Author: dpl Date: Mon Jun 24 18:54:14 2013 New Revision: 253432 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253432 Log: Added recvfds() and sendfds(). Modified: soc2013/dpl/head/contrib/bzip2/bzip2.c Modified: soc2013/dpl/head/contrib/bzip2/bzip2.c ============================================================================== --- soc2013/dpl/head/contrib/bzip2/bzip2.c Mon Jun 24 18:40:06 2013 (r253431) +++ soc2013/dpl/head/contrib/bzip2/bzip2.c Mon Jun 24 18:54:14 2013 (r253432) @@ -221,28 +221,74 @@ FILE *outputHandleJustInCase; Int32 workFactor; -#if CAPSICUM -int sv[2], len; -char buf[1]; -char cms[CMSG_SPACE(sizeof(int))]; -struct iovec iov; -struct cmsghdr *cmsg; -struct msghdr msg; - -buf[0] = 0; -iov.iov_base = buf; -iov.iov_len = 1; - -cmsg->cmsg_len = CMSG_LEN(sizeof (int)); -cmsg->cmsg_level = SOL_SOCKET; -cmsg->cmsg_type = SOL_RIGHTS; - -msg.msg_name = NULL; -msg.,msg_namelen = 0; -msg.msg_iov = &iov; -msg.msg_iovlen = 1; -/* msg.msg_control = (caddr_t)cms; */ -/* msg.msg_controllen = CMSG_LEN(sizeof(int)); */ +#if CAPSICUM == 1 +int sv[2], fds[2], len; +int sendfds(int, int*); +int recvfds(int); + +int +sendfds(int s, int fd[2]) +{ + char buf[1]; + struct iovec iov; + struct msghdr msg; + struct cmsghdr *cmsg; + char cms[CMSG_SPACE(2*sizeof(int))]; + + buf[0] = 0; + iov.iov_base = buf; + iov.iov_len = 1; + + memset(&msg, 0, sizeof msg); + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + msg.msg_control = (caddr_t)cms; + msg.msg_controllen = CMSG_LEN(2*sizeof(int)); + + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_len = CMSG_LEN(sizeof(int)); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + memmove(CMSG_DATA(cmsg), &fd, 2*sizeof(int)); + + if((sendmsg(s, &msg, 0)) != (int)iov.iov_len) + return -1; + return 0; +} + +int +recvfds(int s) +{ + int n; + int fds[2]; + char buf[1]; + struct iovec iov; + struct msghdr msg; + struct cmsghdr *cmsg; + char cms[CMSG_SPACE(2*sizeof(int))]; + + iov.iov_base = buf; + iov.iov_len = 1; + + memset(&msg, 0, sizeof msg); + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + + msg.msg_control = (caddr_t)cms; + msg.msg_controllen = sizeof cms; + + if((n = recvmsg(s, &msg, 0)) < 0) + return -1; + if(n == 0){ + fprintf ( stderr, + "\n%s: recvfds: Unexpected EOF.\n", + progName); + return -1; + } + cmsg = CMSG_FIRSTHDR(&msg); + memmove(&fds, CMSG_DATA(cmsg), sizeof(int)); + return fds; +} #endif static void panic ( const Char* ) NORETURN; @@ -1377,8 +1423,7 @@ exit(1); default: - /* Send the two FDs */ - /* sendmsg(); */ + wait(NULL); return; } @@ -1394,10 +1439,6 @@ FILE *inStr; FILE *outStr; Int32 n, i; -# if CAPSICUM - Int32 infd; - pid_t forkpid; -# endif Bool magicNumberOK; Bool cantGuess; struct MY_STAT statBuf; @@ -1491,13 +1532,13 @@ } if ( srcMode != SM_I2O ){ -# if CAPSICUM - infd = open( inName, O_RDONLY ); - cap_rights_limit(infd, CAP_READ); - inStr = fdopen ( infd, "rb" ); -# else +/*# if CAPSICUM*/ + /*infd = open( inName, O_RDONLY );*/ + /*cap_rights_limit(infd, CAP_READ);*/ + /*inStr = fdopen ( infd, "rb" );*/ +/*# else*/ inStr = fopen ( inName, "rb" ); -# endif +/*# endif*/ } switch ( srcMode ) {