PERFORCE change 173834 for review
Jonathan Anderson
jona at FreeBSD.org
Thu Jan 28 13:41:32 UTC 2010
http://p4web.freebsd.org/chv.cgi?CH=173834
Change 173834 by jona at jona-belle-freebsd8 on 2010/01/28 13:41:06
Initial lc_fdlist work. No mmap'ing yet.
Affected files ...
.. //depot/projects/trustedbsd/capabilities/src/lib/libcapability/Makefile#18 edit
.. //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#27 edit
.. //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability_fdlist.c#1 add
.. //depot/projects/trustedbsd/capabilities/src/tools/cap/fdlist/Makefile#1 add
.. //depot/projects/trustedbsd/capabilities/src/tools/cap/fdlist/fdlist.c#1 add
Differences ...
==== //depot/projects/trustedbsd/capabilities/src/lib/libcapability/Makefile#18 (text+ko) ====
@@ -10,7 +10,7 @@
libcapability_sandbox_io.c \
libcapability_host.c \
libcapability_host_io.c \
- libcapability_registry.c
+ libcapability_fdlist.c
INCS= libcapability.h
==== //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#27 (text+ko) ====
@@ -30,13 +30,14 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $P4: //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#26 $
+ * $P4: //depot/projects/trustedbsd/capabilities/src/lib/libcapability/libcapability.h#27 $
*/
#ifndef _LIBCAPABILITY_H_
#define _LIBCAPABILITY_H_
#include <sys/cdefs.h>
+#include <sys/capability.h>
__BEGIN_DECLS
@@ -52,29 +53,53 @@
int lcl_fd;
};
+
+/* A list of file descriptors, which can be passed around in shared memory */
+struct lc_fdlist;
+
+
+struct lc_fdlist* lc_fdlist_new(void);
+struct lc_fdlist* lc_fdlist_dup(struct lc_fdlist *orig);
+void lc_fdlist_free(struct lc_fdlist *l);
+
+/* Size of an FD list in bytes, including all associated string data */
+int lc_fdlist_size(struct lc_fdlist *l);
+
+
/*
- * A file descriptor "registry"
+ * Add a file descriptor to the list.
+ *
+ * l the list to add to
+ * subsystem a software component name, e.g. "org.freebsd.rtld-elf"
+ * classname a class name, e.g. "libdir" or "library"
+ * name an instance name, e.g. "system library dir" or "libc.so.6"
+ * fd the file descriptor
*/
-struct lc_fdregistry_entry;
-struct lc_fdregistry {
- struct lc_fdregistry_entry *entries; /* registry entries */
+int lc_fdlist_add(struct lc_fdlist **l,
+ const char *subsystem, const char *classname,
+ const char *name, int fd);
- unsigned int count; /* number of entries */
- unsigned int capacity; /* entries that we can hold */
-};
+/*
+ * Like lc_fdlist_add(), but allows capability rights to be specified. The file
+ * descriptor will be wrapped in a capability with the given rights (so if the
+ * descriptor *is* a capability, its rights will be constrained according to this
+ * rights mask)
+ */
+int lc_fdlist_addcap(struct lc_fdlist **l,
+ const char *subsystem, const char *classname,
+ const char *name, int fd, cap_rights_t rights);
/*
- * Registry operations
+ * Look up a file descriptor.
+ *
+ * Multiple entries with the same classname are allowed, so iterating through
+ * all instances of a class is done by supplying an integer 'pos' which is used
+ * internally to skip entries which have already been seen. If 'pos' is 0 or NULL,
+ * the first matching entry will be returned.
*/
-struct lc_fdregistry* lc_fdregistry_new(void);
-struct lc_fdregistry* lc_fdregistry_dup(const struct lc_fdregistry *orig);
-void lc_fdregistry_free(struct lc_fdregistry *registry);
-
-int lc_fdregistry_add(const struct lc_fdregistry *reg,
- const char *id, const char *name, int fd);
-
-int lc_fdregistry_lookup(const struct lc_fdregistry *reg,
- const char *id, char **name, int *fdp);
+int lc_fdlist_lookup(struct lc_fdlist *l,
+ const char *subsystem, const char *classname,
+ char **name, int *fdp, int *pos);
/*
* Capability interfaces.
More information about the p4-projects
mailing list