diff options
Diffstat (limited to 'libiohelp/iohelp.h')
-rw-r--r-- | libiohelp/iohelp.h | 70 |
1 files changed, 68 insertions, 2 deletions
diff --git a/libiohelp/iohelp.h b/libiohelp/iohelp.h index 2897653d..a52d5985 100644 --- a/libiohelp/iohelp.h +++ b/libiohelp/iohelp.h @@ -1,5 +1,5 @@ -/* - Copyright (C) 1993, 1994, 1996 Free Software Foundation +/* Library providing helper functions for io servers. + Copyright (C) 1993,94,96,98,2001,02 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -64,4 +64,70 @@ void iohelp_fetch_shared_data (void *); void iohelp_put_shared_data (void *); + +/* User identification */ + +#include <idvec.h> + +struct iouser +{ + struct idvec *uids, *gids; + void *hook; /* Never used by iohelp library */ +}; + +/* Return a copy of IOUSER in CLONE. On error, *CLONE is set to NULL. */ +error_t iohelp_dup_iouser (struct iouser **clone, struct iouser *iouser); + +/* Free a reference to IOUSER. */ +void iohelp_free_iouser (struct iouser *iouser); + +/* Create a new IOUSER in USER for the specified idvecs. On error, *USER + is set to NULL. */ +error_t iohelp_create_iouser (struct iouser **user, struct idvec *uids, + struct idvec *gids); + +/* Create a new IOUSER in USER for the specified arrays. On error, *USER + is set to NULL. */ +error_t iohelp_create_complex_iouser (struct iouser **user, + const uid_t *uids, int nuids, + const gid_t *gids, int ngids); + +/* Create a new IOUSER in USER for the specified uid and gid. On error, + *USER is set to NULL. */ +error_t iohelp_create_simple_iouser (struct iouser **user, + uid_t uid, gid_t gid); + +/* Create a new IOUSER in USER with no identity. On error, *USER is set + to NULL. */ +error_t iohelp_create_empty_iouser (struct iouser **user); + +/* Create a new IOUSER in NEW_USER that restricts OLD_USER to the subset + specified by the two ID lists. This is appropriate for implementing + io_restrict_auth. */ +error_t iohelp_restrict_iouser (struct iouser **new_user, + const struct iouser *old_user, + const uid_t *uids, int nuids, + const gid_t *gids, int ngids); + +/* Conduct a reauthentication transaction, returning a new iouser in + USER. AUTHSERVER is the I/O servers auth port. The rendezvous port + provided by the user is REND_PORT. If the transaction cannot be + completed, return zero, unless PERMIT_FAILURE is non-zero. If + PERMIT_FAILURE is nonzero, then should the transaction fail, return + an iouser that has no ids. The new port to be sent to the user is + newright. On error, *USER is set to NULL. */ +error_t iohelp_reauth (struct iouser **user, auth_t authserver, + mach_port_t rend_port, mach_port_t newright, + int permit_failure); + + +/* Puts data from the malloced buffer BUF, LEN bytes long, into RBUF & RLEN, + suitable for returning from a mach rpc. If LEN > 0, BUF is freed, + regardless of whether an error is returned or not. */ +error_t iohelp_return_malloced_buffer (char *buf, size_t len, + char **rbuf, + mach_msg_type_number_t *rlen); + + + #endif |