idmap_api.c revision 29d55245572a5e53ba8b3d529926453d493fd1e3
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
c586600796766c83eb9485c446886fd9ed2359a9Keyur Desai * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
ad8ef92ae01ac09e533731f5a517162c634308b4Milan Jurik * Copyright Milan Jurik 2012. All rights reserved.
8ce3a03883b8748c139aa8c412b64dcc7aaee1a1Marcel Telka * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
29d55245572a5e53ba8b3d529926453d493fd1e3Jerry Jelinek * Copyright 2015 Joyent, Inc.
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * libidmap API
479ac37569625bae44ffb80071d4bc865fc710eddmstatic idmap_stat idmap_strdupnull(char **, const char *);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Free memory allocated by libidmap API
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * ptr - memory to be freed
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintoshidmap_get_prop(idmap_prop_type pr, idmap_prop_res *res)
479ac37569625bae44ffb80071d4bc865fc710eddm return (res->retcode); /* This might not be IDMAP_SUCCESS! */
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintoshidmap_get_prop_ds(idmap_prop_type pr, idmap_ad_disc_ds_t *dc)
479ac37569625bae44ffb80071d4bc865fc710eddm return (rc);
479ac37569625bae44ffb80071d4bc865fc710eddm (void) strlcpy(dc->host, res.value.idmap_prop_val_u.dsval.host,
479ac37569625bae44ffb80071d4bc865fc710eddm /* xdr doesn't guarantee 0-termination of char[]: */
479ac37569625bae44ffb80071d4bc865fc710eddm return (rc);
479ac37569625bae44ffb80071d4bc865fc710eddm * Sometimes the property is not set. In that case, str is set to NULL but
479ac37569625bae44ffb80071d4bc865fc710eddm * otherwise IDMAP_SUCCESS is returned.
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintoshidmap_get_prop_str(idmap_prop_type pr, char **str)
479ac37569625bae44ffb80071d4bc865fc710eddm return (rc);
479ac37569625bae44ffb80071d4bc865fc710eddm rc = idmap_strdupnull(str, res.value.idmap_prop_val_u.utf8val);
479ac37569625bae44ffb80071d4bc865fc710eddm return (rc);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create/Initialize handle for updates
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * udthandle - update handle
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintoshidmap_udt_create(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
cd37da7426f0c49c14ad9a8a07638ca971477566nw (xdrproc_t)xdr_idmap_update_batch, (caddr_t)&udthandle->batch,
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban /* reset handle so that it can be used again */
8e22821528b08c6dba4e8176351560f316f6d0dedmstatic void
8e22821528b08c6dba4e8176351560f316f6d0dedmidmap_namerule_parts_clear(char **windomain, char **winname,
cd37da7426f0c49c14ad9a8a07638ca971477566nw char **unixname, boolean_t *is_user, boolean_t *is_wuser,
cd37da7426f0c49c14ad9a8a07638ca971477566nw char **unixname, boolean_t *is_user, boolean_t *is_wuser,
8e22821528b08c6dba4e8176351560f316f6d0dedm if (EMPTY_STRING(rule->winname) && EMPTY_STRING(rule->unixname))
8e22821528b08c6dba4e8176351560f316f6d0dedm * Retrieve the index of the failed batch element. error_index == -1
8e22821528b08c6dba4e8176351560f316f6d0dedm * indicates failure at the beginning, -2 at the end.
8e22821528b08c6dba4e8176351560f316f6d0dedm * If idmap_udt_commit didn't return error, the returned value is undefined.
8e22821528b08c6dba4e8176351560f316f6d0dedm * Return value:
8e22821528b08c6dba4e8176351560f316f6d0dedm * IDMAP_SUCCESS
8e22821528b08c6dba4e8176351560f316f6d0dedm * Retrieve the rule which caused the batch to fail. If
8e22821528b08c6dba4e8176351560f316f6d0dedm * idmap_udt_commit didn't return error or if error_index is < 0, the
8e22821528b08c6dba4e8176351560f316f6d0dedm * retrieved rule is undefined.
8e22821528b08c6dba4e8176351560f316f6d0dedm * Return value:
8e22821528b08c6dba4e8176351560f316f6d0dedm * IDMAP_ERR_NORESULT if there is no error rule.
8e22821528b08c6dba4e8176351560f316f6d0dedm * IDMAP_SUCCESS if the rule was obtained OK.
8e22821528b08c6dba4e8176351560f316f6d0dedm * other error code (IDMAP_ERR_NOMEMORY etc)
cd37da7426f0c49c14ad9a8a07638ca971477566nw char **unixname, boolean_t *is_user, boolean_t *is_wuser,
8e22821528b08c6dba4e8176351560f316f6d0dedm * Retrieve the rule with which there was a conflict. TODO: retrieve
8e22821528b08c6dba4e8176351560f316f6d0dedm * the value.
8e22821528b08c6dba4e8176351560f316f6d0dedm * Return value:
8e22821528b08c6dba4e8176351560f316f6d0dedm * IDMAP_ERR_NORESULT if there is no error rule.
8e22821528b08c6dba4e8176351560f316f6d0dedm * IDMAP_SUCCESS if the rule was obtained OK.
8e22821528b08c6dba4e8176351560f316f6d0dedm * other error code (IDMAP_ERR_NOMEMORY etc)
8e22821528b08c6dba4e8176351560f316f6d0dedmidmap_udt_get_conflict_rule(idmap_udt_handle_t *udthandle,
cd37da7426f0c49c14ad9a8a07638ca971477566nw char **unixname, boolean_t *is_user, boolean_t *is_wuser,
8e22821528b08c6dba4e8176351560f316f6d0dedm if (udthandle->commit_stat != IDMAP_ERR_W2U_NAMERULE_CONFLICT &&
8e22821528b08c6dba4e8176351560f316f6d0dedm udthandle->commit_stat != IDMAP_ERR_U2W_NAMERULE_CONFLICT) {
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Destroy the update handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_update_batch, (caddr_t)&udthandle->batch);
8e22821528b08c6dba4e8176351560f316f6d0dedm (void) xdr_free(xdr_idmap_namerule, (caddr_t)&udthandle->error_rule);
8e22821528b08c6dba4e8176351560f316f6d0dedm (void) xdr_free(xdr_idmap_namerule, (caddr_t)&udthandle->conflict_rule);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_udt_add_namerule(idmap_udt_handle_t *udthandle, const char *windomain,
cd37da7426f0c49c14ad9a8a07638ca971477566nw boolean_t is_user, boolean_t is_wuser, const char *winname,
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban udthandle->batch.idmap_update_batch_val[udthandle->next].opnum =
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban /* The batch should still be usable */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* ARGSUSED */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwidmap_udt_rm_namerule(idmap_udt_handle_t *udthandle, boolean_t is_user,
cd37da7426f0c49c14ad9a8a07638ca971477566nw boolean_t is_wuser, const char *windomain, const char *winname,
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban udthandle->batch.idmap_update_batch_val[udthandle->next].opnum =
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw/* ARGSUSED */
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban udthandle->batch.idmap_update_batch_val[udthandle->next].opnum =
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Set the number of entries requested per batch by the iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * iter - iterator
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * limit - number of entries requested per batch
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
cd37da7426f0c49c14ad9a8a07638ca971477566nw boolean_t is_user, boolean_t is_wuser, const char *winname,
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh __ITER_CREATE(tmpiter, arg, IDMAP_LIST_NAMERULES);
ad8ef92ae01ac09e533731f5a517162c634308b4Milan Jurik xdr_free(xdr_idmap_list_namerules_1_argument, (char *)arg);
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)
cd37da7426f0c49c14ad9a8a07638ca971477566nw *is_user = namerules->rules.rules_val[iter->next].is_user;
cd37da7426f0c49c14ad9a8a07638ca971477566nw *is_wuser = namerules->rules.rules_val[iter->next].is_wuser;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw *direction = namerules->rules.rules_val[iter->next].direction;
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Create iterator to get SID to UID/GID mappings
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * iter - iterator
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintoshidmap_iter_mappings(idmap_iter_t **iter, int flag)
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh __ITER_CREATE(tmpiter, arg, 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].
cd37da7426f0c49c14ad9a8a07638ca971477566nw *is_user = (mappings->mappings.mappings_val[iter->next].id2
cd37da7426f0c49c14ad9a8a07638ca971477566nw *is_wuser = (mappings->mappings.mappings_val[iter->next].id1
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
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,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp return (idmap_getext_uidbysid(gh, sidprefix, rid, flag, uid,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Given SID, get UID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * sidprefix - SID prefix
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * rid - RID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * flag - flag
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * stat - status of the get request
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * uid - POSIX UID if stat = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * how - mapping type if stat = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Note: The output parameters will be set by idmap_get_mappings()
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejpidmap_getext_uidbysid(idmap_get_handle_t *gh, char *sidprefix, idmap_rid_t rid,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp int flag, uid_t *uid, idmap_info *info, idmap_stat *stat)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen retcode = idmap_cache_lookup_uidbysid(sidprefix, rid, uid);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (retcode == IDMAP_SUCCESS || retcode == IDMAP_ERR_MEMORY) {
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 */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen gh->retlist[gh->next].cache_res = flag & IDMAP_REQ_FLG_USE_CACHE;
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban /* Batch created so far should still be usable */
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,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp return (idmap_getext_gidbysid(gh, sidprefix, rid, flag, gid,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Given SID, get GID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * sidprefix - SID prefix
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * rid - rid
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * flag - flag
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * stat - status of the get request
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * gid - POSIX GID if stat = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * how - mapping type if stat = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Note: The output parameters will be set by idmap_get_mappings()
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejpidmap_getext_gidbysid(idmap_get_handle_t *gh, char *sidprefix, idmap_rid_t rid,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp int flag, gid_t *gid, idmap_info *info, idmap_stat *stat)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen retcode = idmap_cache_lookup_gidbysid(sidprefix, rid, gid);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (retcode == IDMAP_SUCCESS || retcode == IDMAP_ERR_MEMORY) {
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 */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen gh->retlist[gh->next].cache_res = flag & IDMAP_REQ_FLG_USE_CACHE;
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,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp return (idmap_getext_pidbysid(gh, sidprefix, rid, flag, pid, is_user,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Given SID, get POSIX ID i.e. UID/GID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * sidprefix - SID prefix
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * rid - rid
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * flag - flag
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * stat - status of the get request
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * is_user - user or group
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * pid - POSIX UID if stat = 0 and is_user = 1
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * POSIX GID if stat = 0 and is_user = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * how - mapping type if stat = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Note: The output parameters will be set by idmap_get_mappings()
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejpidmap_getext_pidbysid(idmap_get_handle_t *gh, char *sidprefix, idmap_rid_t rid,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp int flag, uid_t *pid, int *is_user, idmap_info *info, idmap_stat *stat)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen retcode = idmap_cache_lookup_pidbysid(sidprefix, rid, pid,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (retcode == IDMAP_SUCCESS || retcode == IDMAP_ERR_MEMORY) {
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 */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen gh->retlist[gh->next].cache_res = flag & IDMAP_REQ_FLG_USE_CACHE;
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,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp return (idmap_getext_sidbyuid(gh, uid, flag, sidprefix, rid,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Given UID, get SID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * uid - POSIX UID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * flag - flag
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * stat - status of the get request
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * sid - SID prefix (if stat == 0)
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * rid - rid
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * how - mapping type if stat = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Note: The output parameters will be set by idmap_get_mappings()
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejpidmap_getext_sidbyuid(idmap_get_handle_t *gh, uid_t uid, int flag,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp char **sidprefix, idmap_rid_t *rid, idmap_info *info, idmap_stat *stat)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen retcode = idmap_cache_lookup_sidbyuid(sidprefix, rid, uid);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (retcode == IDMAP_SUCCESS || retcode == IDMAP_ERR_MEMORY) {
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 */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen gh->retlist[gh->next].cache_res = flag & IDMAP_REQ_FLG_USE_CACHE;
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,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp return (idmap_getext_sidbygid(gh, gid, flag, sidprefix, rid,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Given GID, get SID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * gid - POSIX GID
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * flag - flag
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * stat - status of the get request
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * sidprefix - SID prefix (if stat == 0)
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * rid - rid
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * how - mapping type if stat = 0
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp * Note: The output parameters will be set by idmap_get_mappings()
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejpidmap_getext_sidbygid(idmap_get_handle_t *gh, gid_t gid, int flag,
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp char **sidprefix, idmap_rid_t *rid, idmap_info *info, idmap_stat *stat)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw /* sanity checks */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen retcode = idmap_cache_lookup_sidbygid(sidprefix, rid, gid);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (retcode == IDMAP_SUCCESS || retcode == IDMAP_ERR_MEMORY) {
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 */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen gh->retlist[gh->next].cache_res = flag & IDMAP_REQ_FLG_USE_CACHE;
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.
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh retcode = _idmap_clnt_call(IDMAP_GET_MAPPED_IDS,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen req_id = &gh->batch.idmap_mapping_batch_val[i].id1;
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (res.ids.ids_val[i].retcode == IDMAP_SUCCESS &&
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (res.ids.ids_val[i].retcode == IDMAP_SUCCESS &&
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (res.ids.ids_val[i].retcode == IDMAP_SUCCESS &&
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen else /* req_id->idtype == IDMAP_GID */
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Destroy the "get mapping" handle
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw (void) xdr_free(xdr_idmap_mapping_batch, (caddr_t)&gh->batch);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Get windows to unix mapping
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp uid_t *pid, char **unixname, int *direction, idmap_info *info)
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw } else if (winname) {
8e22821528b08c6dba4e8176351560f316f6d0dedm retcode = idmap_strdupnull(&request.id1domain, windomain);
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw else if (*is_user == 0)
cd37da7426f0c49c14ad9a8a07638ca971477566nw else if (*is_wuser == 0)
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh retcode = _idmap_clnt_call(IDMAP_GET_MAPPED_ID_BY_NAME,
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw * Get unix to windows mapping
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw } else if (unixname) {
cd37da7426f0c49c14ad9a8a07638ca971477566nw else if (*is_wuser == 0)
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh retcode = _idmap_clnt_call(IDMAP_GET_MAPPED_ID_BY_NAME,
8edda6281c84e0632a22f9c8dbf0d6f1558878ebbaban if (sidprefix && mapping->id2.idmap_id_u.sid.prefix &&
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw#define gettext(s) s
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_NORESULT, gettext("No results available"), EINVAL},
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban {IDMAP_ERR_NOTSUPPORTED, gettext("Operation not supported"), ENOTSUP},
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},
651c0131ccc65381cbda174bee44a4fd7a518d6bbaban {IDMAP_ERR_RPC_HANDLE, gettext("Bad RPC handle"), EBADF},
c5c4113dfcabb1eed3d4bdf7609de5170027a794nw {IDMAP_ERR_CLIENT_HANDLE, gettext("Bad client handle"), EINVAL},
8edda6281c84e0632a22f9c8dbf0d6f1558878ebbaban {IDMAP_ERR_PERMISSION_DENIED, gettext("Permission denied"), EACCES},
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},
62c6006265c37877b7a5b3c8ffce913ef559b955baban gettext("Duplicate rule or conflicts with an existing "
62c6006265c37877b7a5b3c8ffce913ef559b955baban gettext("Duplicate rule or conflicts with an existing "
48258c6b4e17f36ab09fba0bd6307d1fec9dcbcejp gettext("Mapping not found and none created (see -c option)"),
479ac37569625bae44ffb80071d4bc865fc710eddm gettext("Improper winname form found in Native LDAP"), 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
c5c4113dfcabb1eed3d4bdf7609de5170027a794nwconst char *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown return (dgettext(TEXT_DOMAIN, stattable[i].msg));
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown return (dgettext(TEXT_DOMAIN, "Unknown error"));
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) {
c5a946bac9ff4ebd4d874e1c94d41a5ffcbad287baban * This is a convenience routine which duplicates a string after
c5a946bac9ff4ebd4d874e1c94d41a5ffcbad287baban * checking for NULL pointers. This function will return success if
c5a946bac9ff4ebd4d874e1c94d41a5ffcbad287baban * either the 'to' OR 'from' pointers are NULL.
cd37da7426f0c49c14ad9a8a07638ca971477566nwidmap_namerule_cpy(idmap_namerule *to, idmap_namerule *from)
8e22821528b08c6dba4e8176351560f316f6d0dedm retval = idmap_strdupnull(&to->windomain, from->windomain);
8e22821528b08c6dba4e8176351560f316f6d0dedm retval = idmap_strdupnull(&to->unixname, from->unixname);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * Move the contents of the "info" structure from "from" to "to".
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * Get uid given Windows name
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullenidmap_getuidbywinname(const char *name, const char *domain, int flag,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen rc = idmap_cache_lookup_uidbywinname(name, domain, uid);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (rc == IDMAP_SUCCESS || rc == IDMAP_ERR_MEMORY)
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban /* Get mapping */
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh rc = idmap_get_w2u_mapping(NULL, NULL, name, domain, flag,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen &is_user, &is_wuser, uid, NULL, &direction, NULL);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (rc == IDMAP_SUCCESS && (flag & IDMAP_REQ_FLG_USE_CACHE)) {
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen /* If we have not got the domain don't store UID to winname */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen idmap_cache_add_winname2uid(name, domain, *uid, direction);
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * Get gid given Windows name
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullenidmap_getgidbywinname(const char *name, const char *domain, int flag,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen rc = idmap_cache_lookup_gidbywinname(name, domain, gid);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (rc == IDMAP_SUCCESS || rc == IDMAP_ERR_MEMORY)
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban /* Get mapping */
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh rc = idmap_get_w2u_mapping(NULL, NULL, name, domain, flag,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen &is_user, &is_wuser, gid, NULL, &direction, NULL);
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen if (rc == IDMAP_SUCCESS && (flag & IDMAP_REQ_FLG_USE_CACHE)) {
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen /* If we have not got the domain don't store GID to winname */
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen idmap_cache_add_winname2gid(name, domain, *gid, direction);
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * Get winname given pid
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullenidmap_getwinnamebypid(uid_t pid, int is_user, int flag, char **name,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen rc = idmap_cache_lookup_winnamebyuid(&winname,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen rc = idmap_cache_lookup_winnamebygid(&winname,
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban /* Get mapping */
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh rc = idmap_get_u2w_mapping(&pid, NULL, flag, is_user, NULL,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen NULL, NULL, &winname, &windomain, &direction, NULL);
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban /* Return on error */
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * The given PID may have been mapped to a locally
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * generated SID in which case there isn't any
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * Windows name
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen idmap_cache_add_winname2uid(winname, windomain,
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen idmap_cache_add_winname2gid(winname, windomain,
8ce3a03883b8748c139aa8c412b64dcc7aaee1a1Marcel Telka len = snprintf(NULL, 0, "%s@%s", winname, wd) + 1;
8ce3a03883b8748c139aa8c412b64dcc7aaee1a1Marcel Telka (void) snprintf(*name, len, "%s@%s", winname, wd);
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * Get winname given uid
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullenidmap_getwinnamebyuid(uid_t uid, int flag, char **name, char **domain)
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen return (idmap_getwinnamebypid(uid, 1, flag, name, domain));
dd5829d1456ba00e6f704e6a88e7eaae608e3c1bbaban * Get winname given gid
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullenidmap_getwinnamebygid(gid_t gid, int flag, char **name, char **domain)
3ee87bca47e74aa2719352485b80973ca6e079b7Julian Pullen return (idmap_getwinnamebypid(gid, 0, flag, name, domain));
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesidmap_stat
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States{
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States (xdrproc_t)xdr_idmap_flush_op, (caddr_t)&op,
1fdeec650620e8498c06f832ea4bd2292f7e9632joyce mcintosh (xdrproc_t)xdr_idmap_retcode, (caddr_t)&rc2, TIMEOUT);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States}
c586600796766c83eb9485c446886fd9ed2359a9Keyur Desai * syslog is the default logger.
c586600796766c83eb9485c446886fd9ed2359a9Keyur Desai * It can be overwritten by supplying a logger
c586600796766c83eb9485c446886fd9ed2359a9Keyur Desai * with idmap_set_logger()
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * Helper functions that concatenate two parts of a name and then
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * look up a value, so that the same set of functions can be used to
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * process both "in" and "out" parameters.
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_trace_get_str(nvlist_t *entry, char *n1, char *n2, char **ret)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char name[IDMAP_TRACE_NAME_MAX+1]; /* Max used is about 11 */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright return (err == 0);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_trace_get_int(nvlist_t *entry, char *n1, char *n2, int64_t *ret)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright char name[IDMAP_TRACE_NAME_MAX+1]; /* Max used is about 11 */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright return (err == 0);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_trace_print_id(FILE *out, nvlist_t *entry, char *fromto)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (idmap_trace_get_int(entry, fromto, IDMAP_TRACE_TYPE, &i64)) {
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright (void) fprintf(out, gettext("bad %d "), (int)i64);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (idmap_trace_get_str(entry, fromto, IDMAP_TRACE_NAME, &s))
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (idmap_trace_get_str(entry, fromto, IDMAP_TRACE_SID, &s))
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (idmap_trace_get_int(entry, fromto, IDMAP_TRACE_UNIXID, &i64))
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightidmap_trace_print_1(FILE *out, char *prefix, nvlist_t *entry)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (idmap_trace_get_int(entry, IDMAP_TRACE_ERROR, NULL, &i64))
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright (void) fprintf(out, gettext("Error %d "), (int)i64);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright if (idmap_trace_get_str(entry, IDMAP_TRACE_MESSAGE, NULL, &s))