socsvn commit: r253432 - soc2013/dpl/head/contrib/bzip2
dpl at FreeBSD.org
dpl at FreeBSD.org
Mon Jun 24 18:54:15 UTC 2013
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 ) {
More information about the svn-soc-all
mailing list