1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 /* 27 * Additional API for Identity Mapping Service 28 */ 29 30 #ifndef _IDMAP_PRIV_H 31 #define _IDMAP_PRIV_H 32 33 34 #include <libscf.h> 35 #include <resolv.h> 36 37 #include "idmap.h" 38 #include <rpcsvc/idmap_prot.h> 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 #define IDMAP_MAX_NAME_LEN 512 45 46 #define IDMAP_ERROR(rc) (rc != IDMAP_SUCCESS && rc != IDMAP_NEXT) 47 #define IDMAP_FATAL_ERROR(rc) (rc == IDMAP_ERR_MEMORY ||\ 48 rc == IDMAP_ERR_DB) 49 50 51 /* is_user values */ 52 53 #define IDMAP_YES 1 54 #define IDMAP_NO 0 55 #define IDMAP_UNKNOWN -1 56 57 #define CHECK_NULL(s) (s != NULL ? s : "null") 58 #define EMPTY_STRING(str) (str == NULL || *str == '\0') 59 60 /* Opaque handle to batch config add/remove operations */ 61 typedef struct idmap_udt_handle idmap_udt_handle_t; 62 63 /* Opaque iterator */ 64 typedef struct idmap_iter idmap_iter_t; 65 66 67 /* 68 * Directory based name map API 69 */ 70 71 typedef struct idmap_nm_handle idmap_nm_handle_t; 72 73 /* Set namemap */ 74 extern idmap_stat idmap_set_namemap(idmap_nm_handle_t *, char *, char *, 75 int, int, int); 76 77 /* Unset namemap */ 78 extern idmap_stat idmap_unset_namemap(idmap_nm_handle_t *, char *, char *, 79 int, int, int); 80 81 extern idmap_stat idmap_get_namemap(idmap_nm_handle_t *p, int *, char **, 82 char **, int *, char **, char **); 83 84 extern void idmap_fini_namemaps(idmap_nm_handle_t *); 85 86 extern idmap_stat idmap_init_namemaps(idmap_handle_t *, idmap_nm_handle_t **, 87 char *, char *, char *, char *, int); 88 89 90 /* 91 * Update API 92 */ 93 94 /* Create handle for updates */ 95 extern idmap_stat idmap_udt_create(idmap_handle_t *, 96 idmap_udt_handle_t **); 97 98 /* Commit */ 99 extern idmap_stat idmap_udt_commit(idmap_udt_handle_t *); 100 101 /* Get index of the failed batch element */ 102 extern idmap_stat idmap_udt_get_error_index(idmap_udt_handle_t *, int64_t *); 103 104 /* Get the rule which caused the batch to failed */ 105 extern idmap_stat idmap_udt_get_error_rule(idmap_udt_handle_t *, char **, 106 char **, char **, boolean_t *, boolean_t *, boolean_t *, int *); 107 108 /* Get the rule which caused a conflict */ 109 extern idmap_stat idmap_udt_get_conflict_rule(idmap_udt_handle_t *, char **, 110 char **, char **, boolean_t *, boolean_t *, boolean_t *, int *); 111 112 /* Destroy the update handle */ 113 extern void idmap_udt_destroy(idmap_udt_handle_t *); 114 115 /* Add name-based mapping rule */ 116 extern idmap_stat idmap_udt_add_namerule(idmap_udt_handle_t *, const char *, 117 boolean_t, boolean_t, const char *, const char *, boolean_t, int); 118 119 /* Remove name-based mapping rule */ 120 extern idmap_stat idmap_udt_rm_namerule(idmap_udt_handle_t *, boolean_t, 121 boolean_t, const char *, const char *, const char *, int); 122 123 /* Flush name-based mapping rules */ 124 extern idmap_stat idmap_udt_flush_namerules(idmap_udt_handle_t *); 125 126 127 /* 128 * Iterator API 129 */ 130 131 /* Create a iterator to get SID to UID/GID mappings */ 132 extern idmap_stat idmap_iter_mappings(idmap_handle_t *, idmap_iter_t **, 133 int flag); 134 135 /* Iterate through the SID to UID/GID mappings */ 136 extern idmap_stat idmap_iter_next_mapping(idmap_iter_t *, char **, 137 idmap_rid_t *, uid_t *, char **, char **, char **, boolean_t *, 138 boolean_t *, int *, idmap_info *); 139 140 /* Create a iterator to get name-based mapping rules */ 141 extern idmap_stat idmap_iter_namerules(idmap_handle_t *, const char *, 142 boolean_t, boolean_t, const char *, const char *, idmap_iter_t **); 143 144 /* Iterate through the name-based mapping rules */ 145 extern idmap_stat idmap_iter_next_namerule(idmap_iter_t *, char **, 146 char **, char **, boolean_t *, boolean_t *, boolean_t *, int *); 147 148 /* Set the number of entries requested per batch */ 149 extern idmap_stat idmap_iter_set_limit(idmap_iter_t *, uint64_t); 150 151 /* Destroy the iterator */ 152 extern void idmap_iter_destroy(idmap_iter_t *); 153 154 155 /* 156 * Get mapping 157 */ 158 extern idmap_stat idmap_get_w2u_mapping(idmap_handle_t *, const char *, 159 idmap_rid_t *, const char *, const char *, int, int *, int *, 160 uid_t *, char **, int *, idmap_info *); 161 162 extern idmap_stat idmap_get_u2w_mapping(idmap_handle_t *, uid_t *, 163 const char *, int, int, int *, char **, idmap_rid_t *, char **, 164 char **, int *, idmap_info *); 165 166 167 /* 168 * Miscellaneous 169 */ 170 171 /* string to status */ 172 extern idmap_stat idmap_string2stat(const char *); 173 174 /* internal status to protocol status */ 175 extern idmap_stat idmap_stat4prot(idmap_stat); 176 177 /* copy idmap_namerule including strings */ 178 extern idmap_stat idmap_namerule_cpy(idmap_namerule *, idmap_namerule *); 179 180 /* copy idmap_info info including strings */ 181 extern idmap_stat idmap_info_cpy(idmap_info *to, idmap_info *from); 182 183 /* Move idmap_info info including strings */ 184 extern idmap_stat idmap_info_mov(idmap_info *to, idmap_info *from); 185 186 /* free idmap_info info from user supplied struct */ 187 extern void idmap_info_free(idmap_info *); 188 189 190 /* 191 * Extended API to batch SID to UID/GID mapping requests 192 */ 193 194 /* Given SID, get UID */ 195 extern idmap_stat idmap_getext_uidbysid(idmap_get_handle_t *, char *, 196 idmap_rid_t, int, uid_t *, idmap_info *, idmap_stat *); 197 198 /* Given SID, get GID */ 199 extern idmap_stat idmap_getext_gidbysid(idmap_get_handle_t *, char *, 200 idmap_rid_t, int, gid_t *, idmap_info *, idmap_stat *); 201 202 /* Given SID, get UID or GID */ 203 extern idmap_stat idmap_getext_pidbysid(idmap_get_handle_t *, char *, 204 idmap_rid_t, int, uid_t *, int *, idmap_info *, idmap_stat *); 205 206 /* Given UID, get SID */ 207 extern idmap_stat idmap_getext_sidbyuid(idmap_get_handle_t *, uid_t, int, 208 char **, idmap_rid_t *, idmap_info *, idmap_stat *); 209 210 /* Given GID, get SID */ 211 extern idmap_stat idmap_getext_sidbygid(idmap_get_handle_t *, gid_t, int, 212 char **, idmap_rid_t *, idmap_info *, idmap_stat *); 213 214 215 #ifdef __cplusplus 216 } 217 #endif 218 219 #endif /* _IDMAP_PRIV_H */ 220