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 2008 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 #pragma ident "%Z%%M% %I% %E% SMI" 34 35 #include <libscf.h> 36 #include <syslog.h> 37 #include <resolv.h> 38 39 #include "idmap.h" 40 #include "idmap_prot.h" 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 #define IDMAP_MAX_NAME_LEN 512 47 48 #define IDMAP_ERROR(rc) (rc != IDMAP_SUCCESS && rc != IDMAP_NEXT) 49 #define IDMAP_FATAL_ERROR(rc) (rc == IDMAP_ERR_MEMORY ||\ 50 rc == IDMAP_ERR_DB) 51 52 53 /* is_user values */ 54 55 #define IDMAP_YES 1 56 #define IDMAP_NO 0 57 #define IDMAP_UNKNOWN -1 58 59 #define CHECK_NULL(s) (s != NULL ? s : "null") 60 #define EMPTY_STRING(str) (str == NULL || *str == '\0') 61 62 /* Opaque handle to batch config add/remove operations */ 63 typedef struct idmap_udt_handle idmap_udt_handle_t; 64 65 /* Opaque iterator */ 66 typedef struct idmap_iter idmap_iter_t; 67 68 69 /* 70 * Directory based name map API 71 */ 72 73 typedef struct idmap_nm_handle idmap_nm_handle_t; 74 75 /* Set namemap */ 76 extern idmap_stat idmap_set_namemap(idmap_nm_handle_t *, char *, char *, 77 int, int, int); 78 79 /* Unset namemap */ 80 extern idmap_stat idmap_unset_namemap(idmap_nm_handle_t *, char *, char *, 81 int, int, int); 82 83 extern idmap_stat idmap_get_namemap(idmap_nm_handle_t *p, int *, char **, 84 char **, int *, char **, char **); 85 86 extern void idmap_fini_namemaps(idmap_nm_handle_t *); 87 88 extern idmap_stat idmap_init_namemaps(idmap_handle_t *, idmap_nm_handle_t **, 89 char *, char *, char *, char *, int); 90 91 92 /* 93 * Update API 94 */ 95 96 /* Create handle for updates */ 97 extern idmap_stat idmap_udt_create(idmap_handle_t *, 98 idmap_udt_handle_t **); 99 100 /* Commit */ 101 extern idmap_stat idmap_udt_commit(idmap_udt_handle_t *); 102 103 /* Get index of the failed batch element */ 104 extern idmap_stat idmap_udt_get_error_index(idmap_udt_handle_t *, int64_t *); 105 106 /* Get the rule which caused the batch to failed */ 107 extern idmap_stat idmap_udt_get_error_rule(idmap_udt_handle_t *, char **, 108 char **, char **, boolean_t *, boolean_t *, boolean_t *, int *); 109 110 /* Get the rule which caused a conflict */ 111 extern idmap_stat idmap_udt_get_conflict_rule(idmap_udt_handle_t *, char **, 112 char **, char **, boolean_t *, boolean_t *, boolean_t *, int *); 113 114 /* Destroy the update handle */ 115 extern void idmap_udt_destroy(idmap_udt_handle_t *); 116 117 /* Add name-based mapping rule */ 118 extern idmap_stat idmap_udt_add_namerule(idmap_udt_handle_t *, const char *, 119 boolean_t, boolean_t, const char *, const char *, boolean_t, int); 120 121 /* Remove name-based mapping rule */ 122 extern idmap_stat idmap_udt_rm_namerule(idmap_udt_handle_t *, boolean_t, 123 boolean_t, const char *, const char *, const char *, int); 124 125 /* Flush name-based mapping rules */ 126 extern idmap_stat idmap_udt_flush_namerules(idmap_udt_handle_t *); 127 128 129 /* 130 * Iterator API 131 */ 132 133 /* Create a iterator to get SID to UID/GID mappings */ 134 extern idmap_stat idmap_iter_mappings(idmap_handle_t *, idmap_iter_t **, 135 int flag); 136 137 /* Iterate through the SID to UID/GID mappings */ 138 extern idmap_stat idmap_iter_next_mapping(idmap_iter_t *, char **, 139 idmap_rid_t *, uid_t *, char **, char **, char **, boolean_t *, 140 boolean_t *, int *, idmap_info *); 141 142 /* Create a iterator to get name-based mapping rules */ 143 extern idmap_stat idmap_iter_namerules(idmap_handle_t *, const char *, 144 boolean_t, boolean_t, const char *, const char *, idmap_iter_t **); 145 146 /* Iterate through the name-based mapping rules */ 147 extern idmap_stat idmap_iter_next_namerule(idmap_iter_t *, char **, 148 char **, char **, boolean_t *, boolean_t *, boolean_t *, int *); 149 150 /* Set the number of entries requested per batch */ 151 extern idmap_stat idmap_iter_set_limit(idmap_iter_t *, uint64_t); 152 153 /* Destroy the iterator */ 154 extern void idmap_iter_destroy(idmap_iter_t *); 155 156 157 /* 158 * Get mapping 159 */ 160 extern idmap_stat idmap_get_w2u_mapping(idmap_handle_t *, const char *, 161 idmap_rid_t *, const char *, const char *, int, int *, int *, 162 uid_t *, char **, int *, idmap_info *); 163 164 extern idmap_stat idmap_get_u2w_mapping(idmap_handle_t *, uid_t *, 165 const char *, int, int, int *, char **, idmap_rid_t *, char **, 166 char **, int *, idmap_info *); 167 168 169 /* 170 * Miscellaneous 171 */ 172 173 /* string to status */ 174 extern idmap_stat idmap_string2stat(const char *); 175 176 /* internal status to protocol status */ 177 extern idmap_stat idmap_stat4prot(idmap_stat); 178 179 /* copy idmap_namerule including strings */ 180 extern idmap_stat idmap_namerule_cpy(idmap_namerule *, idmap_namerule *); 181 182 /* copy idmap_info info including strings */ 183 extern idmap_stat idmap_info_cpy(idmap_info *to, idmap_info *from); 184 185 /* Move idmap_info info including strings */ 186 extern idmap_stat idmap_info_mov(idmap_info *to, idmap_info *from); 187 188 /* free idmap_info info from user supplied struct */ 189 extern void idmap_info_free(idmap_info *); 190 191 192 /* 193 * Extended API to batch SID to UID/GID mapping requests 194 */ 195 196 /* Given SID, get UID */ 197 extern idmap_stat idmap_getext_uidbysid(idmap_get_handle_t *, char *, 198 idmap_rid_t, int, uid_t *, idmap_info *, idmap_stat *); 199 200 /* Given SID, get GID */ 201 extern idmap_stat idmap_getext_gidbysid(idmap_get_handle_t *, char *, 202 idmap_rid_t, int, gid_t *, idmap_info *, idmap_stat *); 203 204 /* Given SID, get UID or GID */ 205 extern idmap_stat idmap_getext_pidbysid(idmap_get_handle_t *, char *, 206 idmap_rid_t, int, uid_t *, int *, idmap_info *, idmap_stat *); 207 208 /* Given UID, get SID */ 209 extern idmap_stat idmap_getext_sidbyuid(idmap_get_handle_t *, uid_t, int, 210 char **, idmap_rid_t *, idmap_info *, idmap_stat *); 211 212 /* Given GID, get SID */ 213 extern idmap_stat idmap_getext_sidbygid(idmap_get_handle_t *, gid_t, int, 214 char **, idmap_rid_t *, idmap_info *, idmap_stat *); 215 216 217 218 /* logging */ 219 extern void idmapdlog(int, const char *, ...); 220 221 /* 222 * The maximal priority to be logged to stderr: set to -1 to suppress 223 * stderr logging completely. 224 */ 225 extern void idmap_log_stderr(int); 226 227 /* write log messages to syslog? */ 228 extern void idmap_log_syslog(bool_t); 229 230 /* write log messages to syslog? */ 231 extern void idmap_log_degraded(bool_t); 232 233 #ifdef __cplusplus 234 } 235 #endif 236 237 #endif /* _IDMAP_PRIV_H */ 238