PERFORCE change 166612 for review
Jonathan Anderson
jona at FreeBSD.org
Mon Jul 27 11:33:17 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=166612
Change 166612 by jona at jona-trustedbsd-belle-vmware on 2009/07/27 11:32:34
Implemented ua_powerbox()
Affected files ...
.. //depot/projects/trustedbsd/capabilities/src/lib/libuserangel/libuserangel.c#11 edit
Differences ...
==== //depot/projects/trustedbsd/capabilities/src/lib/libuserangel/libuserangel.c#11 (text+ko) ====
@@ -324,6 +324,53 @@
}
+int ua_powerbox(struct ua_powerbox_options *options,
+ int fds[], char *names[], int *len)
+{
+ if(angel < 0) angel = ua_find();
+ if(angel < 0) return -1;
+
+ struct ua_datum *data[2];
+ data[0] = ua_marshall_int(UA_POWERBOX);
+ data[1] = ua_marshall_powerbox(options);
+
+ for(int i = 0; i < 2; i++)
+ {
+ if(ua_send(angel, data[i], NULL, 0) < 0) return -1;
+ free(data[i]);
+ }
+
+
+ // retrieve the file descriptor(s)
+ struct ua_datum *fdcountd = ua_recv(angel, NULL, NULL);
+ if(!fdcountd) return -1;
+
+ if(ua_unmarshall_int(fdcountd, len) < 0) return -1;
+
+ uint32_t fdcount = *len;
+ int32_t fdarray[fdcount];
+
+ struct ua_datum *fd_datum = ua_recv(angel, fdarray, &fdcount);
+ if(!fd_datum) return -1;
+ *len = fdcount;
+
+ int buflen = 1024;
+ char buffer[buflen];
+ for(unsigned int i = 0; i < fdcount; i++)
+ {
+ fds[i] = fdarray[i];
+
+ int namelen = buflen;
+ if(ua_unmarshall_string(fd_datum, buffer, &namelen) < 0) return -1;
+
+ names[i] = (char*) malloc(namelen);
+ memcpy(names[i], buffer, namelen);
+ }
+
+ return 0;
+}
+
+
int ua_send(int sock, datum *d, int32_t fds[], int32_t fdlen)
{
More information about the p4-projects
mailing list