idmap_api.c revision 9581d9f4f3b1515f88149f920c7e786b4fb901d4
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * CDDL HEADER START
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * The contents of this file are subject to the terms of the
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Common Development and Distribution License (the "License").
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * You may not use this file except in compliance with the License.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * See the License for the specific language governing permissions
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * and limitations under the License.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * When distributing Covered Code, include this CDDL HEADER in each
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * If applicable, add the following below this CDDL HEADER, with the
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * fields enclosed by brackets "[]" replaced with your own identifying
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * information: Portions Copyright [yyyy] [name of copyright owner]
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * CDDL HEADER END
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Use is subject to license terms.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#pragma ident "%Z%%M% %I% %E% SMI"
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * libidmap API
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#define __ITER_ERR_RETURN(itera, argu, xdr_argu, iretcod)\
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Free memory allocated by libidmap API
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * ptr - memory to be freed
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create and Initialize idmap client handle for rpc/doors
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * handle - idmap handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Finalize idmap handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * handle - idmap handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create/Initialize handle for updates
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * udthandle - update handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_udt_create(idmap_handle_t *handle, idmap_udt_handle_t **udthandle) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * All the updates specified by the update handle are committed
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * in a single transaction. i.e either all succeed or none.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * udthandle - update handle with the update requests
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Return value:
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Status of the commit
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (xdrproc_t)xdr_idmap_update_batch, (caddr_t)&udthandle->batch,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Destroy the update handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_update_batch, (caddr_t)&udthandle->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_udt_add_namerule(idmap_udt_handle_t *udthandle, const char *windomain,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw boolean_t is_user, const char *winname, const char *unixname,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_update_batch, (caddr_t)&udthandle->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* ARGSUSED */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_udt_rm_namerule(idmap_udt_handle_t *udthandle, boolean_t is_user,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_update_batch, (caddr_t)&udthandle->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* ARGSUSED */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_udt_flush_namerules(idmap_udt_handle_t *udthandle, boolean_t is_user) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw retcode = _udt_extend_batch(udthandle, OP_FLUSH_NAMERULES);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw udthandle->batch.idmap_update_batch_val[udthandle->next].
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_update_batch, (caddr_t)&udthandle->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Set the number of entries requested per batch by the iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * iter - iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * limit - number of entries requested per batch
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_iter_set_limit(idmap_iter_t *iter, uint64_t limit) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create iterator to get name-based mapping rules
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * windomain - Windows domain
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * is_user - user or group rules
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * winname - Windows user or group name
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * unixname - Unix user or group name
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * iter - iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_iter_namerules(idmap_handle_t *handle, const char *windomain,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw __ITER_CREATE(tmpiter, arg, handle, IDMAP_LIST_NAMERULES);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Iterate through the name-based mapping rules
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * iter - iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * windomain - Windows domain
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * winname - Windows user or group name
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * unixname - Unix user or group name
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * is_nt4 - NT4 or AD
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * direction - bi(0), win2unix(1), unix2win(2)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Return value:
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * 0 - done
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * 1 - more results available
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * < 0 - error
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_iter_next_namerule(idmap_iter_t *iter, char **windomain,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (namerules == NULL || namerules->rules.rules_len == 0)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *direction = namerules->rules.rules_val[iter->next].direction;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create iterator to get SID to UID/GID mappings
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * is_user - user or group
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * iter - iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_iter_mappings(idmap_handle_t *handle, boolean_t is_user,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw __ITER_CREATE(tmpiter, arg, handle, IDMAP_LIST_MAPPINGS);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Iterate through the SID to UID/GID mappings
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * iter - iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * sid - SID in canonical form
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * pid - UID or GID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Return value:
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * 0 - done
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * 1 - more results available
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * < 0 - error
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_iter_next_mapping(idmap_iter_t *iter, char **sidprefix,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (mappings == NULL || mappings->mappings.mappings_len == 0)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *direction = mappings->mappings.mappings_val[iter->next].
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Destroy the iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw _xdr_argument = (xdrproc_t)xdr_idmap_list_namerules_1_argument;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw _xdr_argument = (xdrproc_t)xdr_idmap_list_mappings_1_argument;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create handle to get SID to UID/GID mapping entries
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * gh - "get mapping" handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_get_create(idmap_handle_t *handle, idmap_get_handle_t **gh) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* allocate the handle */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Given SID, get UID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * sidprefix - SID prefix
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * rid - RID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * flag - flag
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * stat - status of the get request
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * uid - POSIX UID if stat = 0
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Note: The output parameters will be set by idmap_get_mappings()
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_get_uidbysid(idmap_get_handle_t *gh, char *sidprefix, idmap_rid_t rid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Extend the request array and the return list */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((retcode = _get_ids_extend_batch(gh)) != IDMAP_SUCCESS)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup the request */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((mapping->id1.idmap_id_u.sid.prefix = strdup(sidprefix)) == NULL) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup pointers for the result */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Given SID, get GID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * sidprefix - SID prefix
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * rid - rid
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * flag - flag
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * stat - status of the get request
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * gid - POSIX GID if stat = 0
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Note: The output parameters will be set by idmap_get_mappings()
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_get_gidbysid(idmap_get_handle_t *gh, char *sidprefix, idmap_rid_t rid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Extend the request array and the return list */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((retcode = _get_ids_extend_batch(gh)) != IDMAP_SUCCESS)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup the request */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((mapping->id1.idmap_id_u.sid.prefix = strdup(sidprefix)) == NULL) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup pointers for the result */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Given SID, get POSIX ID i.e. UID/GID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * sidprefix - SID prefix
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * rid - rid
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * flag - flag
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * stat - status of the get request
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * is_user - user or group
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * pid - POSIX UID if stat = 0 and is_user = 1
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * POSIX GID if stat = 0 and is_user = 0
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Note: The output parameters will be set by idmap_get_mappings()
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_get_pidbysid(idmap_get_handle_t *gh, char *sidprefix, idmap_rid_t rid,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Extend the request array and the return list */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((retcode = _get_ids_extend_batch(gh)) != IDMAP_SUCCESS)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup the request */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((mapping->id1.idmap_id_u.sid.prefix = strdup(sidprefix)) == NULL) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup pointers for the result */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Given UID, get SID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * uid - POSIX UID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * flag - flag
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * stat - status of the get request
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * sid - SID prefix (if stat == 0)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * rid - rid
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Note: The output parameters will be set by idmap_get_mappings()
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_get_sidbyuid(idmap_get_handle_t *gh, uid_t uid, int flag,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Extend the request array and the return list */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((retcode = _get_ids_extend_batch(gh)) != IDMAP_SUCCESS)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup the request */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup pointers for the result */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Given GID, get SID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * gid - POSIX GID
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * flag - flag
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * stat - status of the get request
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * sidprefix - SID prefix (if stat == 0)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * rid - rid
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Note: The output parameters will be set by idmap_get_mappings()
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_get_sidbygid(idmap_get_handle_t *gh, gid_t gid, int flag,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Extend the request array and the return list */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if ((retcode = _get_ids_extend_batch(gh)) != IDMAP_SUCCESS)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup the request */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Setup pointers for the result */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Process the batched "get mapping" requests. The results (i.e.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * status and identity) will be available in the data areas
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * provided by individual requests.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Destroy the "get mapping" handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Get windows to unix mapping
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw } else if (winname) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw else if (*is_user == 0)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Get unix to windows mapping
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw } else if (unixname) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * utf8str to string
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_utf82str(char **out, size_t outsize, idmap_utf8str *in) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw if (outsize == 0) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) memcpy(*out, in->idmap_utf8str_val, in->idmap_utf8str_len);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * string to utf8str
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_str2utf8(idmap_utf8str **out, const char *in, int flag) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* include the null terminator */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* Don't malloc, simply assign */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) memcpy(tmp->idmap_utf8str_val, in, tmp->idmap_utf8str_len);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#define gettext(s) s
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_NORESULT, gettext("No results available"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_NOTSUPPORTED, gettext("Operation not supported"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw gettext("Invalid Windows to UNIX name-based rule"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw gettext("Invalid UNIX to Windows name-based rule"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_IDTYPE, gettext("Invalid identity type"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_RPC_HANDLE, gettext("Bad RPC handle"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_CLIENT_HANDLE, gettext("Bad client handle"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_PERMISSION_DENIED, gettext("Permisssion denied"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_DOMAIN_NOTFOUND, gettext("Domain not found"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_UPDATE_NOTALLOWED, gettext("Update not allowed"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_CFG_CHANGE, gettext("Invalid configuration change"), EINVAL},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Get description of status code
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * status - Status code returned by libidmap API call
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Return Value:
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * human-readable localized description of idmap_stat
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* ARGSUSED */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwconst char *
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_stat2string(idmap_handle_t *handle, idmap_stat status) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Get status code from string
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#define return_cmp(a) \
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw return (IDMAP_ERR_ ## a);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Map the given status to one that can be returned by the protocol
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw switch (status) {