1cb5caa98Sdjl /* 2cb5caa98Sdjl * CDDL HEADER START 3cb5caa98Sdjl * 4cb5caa98Sdjl * The contents of this file are subject to the terms of the 5cb5caa98Sdjl * Common Development and Distribution License (the "License"). 6cb5caa98Sdjl * You may not use this file except in compliance with the License. 7cb5caa98Sdjl * 8cb5caa98Sdjl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9cb5caa98Sdjl * or http://www.opensolaris.org/os/licensing. 10cb5caa98Sdjl * See the License for the specific language governing permissions 11cb5caa98Sdjl * and limitations under the License. 12cb5caa98Sdjl * 13cb5caa98Sdjl * When distributing Covered Code, include this CDDL HEADER in each 14cb5caa98Sdjl * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15cb5caa98Sdjl * If applicable, add the following below this CDDL HEADER, with the 16cb5caa98Sdjl * fields enclosed by brackets "[]" replaced with your own identifying 17cb5caa98Sdjl * information: Portions Copyright [yyyy] [name of copyright owner] 18cb5caa98Sdjl * 19cb5caa98Sdjl * CDDL HEADER END 20cb5caa98Sdjl */ 21cb5caa98Sdjl /* 22cb5caa98Sdjl * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 23cb5caa98Sdjl * Use is subject to license terms. 24cb5caa98Sdjl */ 25cb5caa98Sdjl 26cb5caa98Sdjl #ifndef _NSCD_DB_H 27cb5caa98Sdjl #define _NSCD_DB_H 28cb5caa98Sdjl 29cb5caa98Sdjl #ifdef __cplusplus 30cb5caa98Sdjl extern "C" { 31cb5caa98Sdjl #endif 32cb5caa98Sdjl 33cb5caa98Sdjl #include <nss_dbdefs.h> /* nssuint_t */ 34cb5caa98Sdjl #include "nscd_common.h" 35cb5caa98Sdjl 36cb5caa98Sdjl /* make a pointer 8-byte aligned, or an integer a multiple of 8 */ 37cb5caa98Sdjl #define roundup(x) (((unsigned long)(x)+7) & ~7) 38cb5caa98Sdjl 39cb5caa98Sdjl /* 40cb5caa98Sdjl * type of nscd data 41cb5caa98Sdjl */ 42cb5caa98Sdjl #define NSCD_DATA_UNKNOWN 0 43cb5caa98Sdjl #define NSCD_DATA_NSW_CONFIG 1 44cb5caa98Sdjl #define NSCD_DATA_NSW_STATE_BASE 2 45cb5caa98Sdjl #define NSCD_DATA_GETENT_CTX_BASE 3 46cb5caa98Sdjl #define NSCD_DATA_BACKEND_INFO 4 47cb5caa98Sdjl #define NSCD_DATA_BACKEND_INFO_DB 5 48cb5caa98Sdjl #define NSCD_DATA_CFG_NSW_DB_INDEX 6 49cb5caa98Sdjl #define NSCD_DATA_CFG_NSW_SRC_INDEX 7 50cb5caa98Sdjl #define NSCD_DATA_CFG_PARAM_INDEX 8 51cb5caa98Sdjl #define NSCD_DATA_CFG_STAT_INDEX 9 52cb5caa98Sdjl #define NSCD_DATA_ADDR 127 53cb5caa98Sdjl #define NSCD_DATA_CTX_ADDR 128 54cb5caa98Sdjl 55cb5caa98Sdjl /* 56cb5caa98Sdjl * database operation options 57cb5caa98Sdjl */ 58cb5caa98Sdjl typedef enum { 59cb5caa98Sdjl NSCD_GET_FIRST_DB_ENTRY = 1, 60cb5caa98Sdjl NSCD_GET_NEXT_DB_ENTRY = 2, 61cb5caa98Sdjl NSCD_GET_EXACT_DB_ENTRY = 3, 62cb5caa98Sdjl NSCD_ADD_DB_ENTRY_FIRST = 4, 63cb5caa98Sdjl NSCD_ADD_DB_ENTRY_LAST = 5, 64cb5caa98Sdjl NSCD_ADD_DB_ENTRY_REPLACE = 6, 65cb5caa98Sdjl NSCD_ADD_DB_ENTRY_IF_NONE = 7, 66cb5caa98Sdjl NSCD_DEL_FIRST_DB_ENTRY = 8, 67cb5caa98Sdjl NSCD_DEL_ALL_DB_ENTRY = 9, 68cb5caa98Sdjl NSCD_DEL_EXACT_DB_ENTRY = 10 69cb5caa98Sdjl } nscd_db_option_t; 70cb5caa98Sdjl 71cb5caa98Sdjl /* 72cb5caa98Sdjl * This structure defines an instance of the 73cb5caa98Sdjl * nscd database entry. 74cb5caa98Sdjl */ 75cb5caa98Sdjl typedef struct nscd_db_entry { 76cb5caa98Sdjl int type; 77cb5caa98Sdjl int id_num; 78cb5caa98Sdjl int num_data; 79cb5caa98Sdjl int num_array; 80cb5caa98Sdjl char *name; 81cb5caa98Sdjl void **data_array; 82cb5caa98Sdjl } nscd_db_entry_t; 83cb5caa98Sdjl 84cb5caa98Sdjl /* 85cb5caa98Sdjl * sequence number attached to nscd data 86cb5caa98Sdjl */ 87cb5caa98Sdjl typedef nssuint_t nscd_seq_num_t; 88*e37190e5Smichen typedef nssuint_t nscd_cookie_num_t; 89cb5caa98Sdjl 90cb5caa98Sdjl /* 91cb5caa98Sdjl * The nscd_access_s datatype represents a nscd 92cb5caa98Sdjl * access data structure. It is an opaque structure. 93cb5caa98Sdjl */ 94cb5caa98Sdjl struct nscd_access_s; 95cb5caa98Sdjl typedef struct nscd_access_s nscd_access_t; 96cb5caa98Sdjl struct nscd_acc_data_s; 97cb5caa98Sdjl typedef struct nscd_acc_data_s nscd_acc_data_t; 98cb5caa98Sdjl 99cb5caa98Sdjl /* 100cb5caa98Sdjl * The nscd_db_t datatype represents a nscd 101cb5caa98Sdjl * database. It is also an opaque structure. 102cb5caa98Sdjl */ 103cb5caa98Sdjl struct nscd_db_s; 104cb5caa98Sdjl typedef struct nscd_db_s nscd_db_t; 105cb5caa98Sdjl 106cb5caa98Sdjl /* 107cb5caa98Sdjl * four sizes for a nscd database: 108cb5caa98Sdjl * large, medium, small, tiny 109cb5caa98Sdjl */ 110cb5caa98Sdjl #define NSCD_DB_SIZE_LARGE 1 111cb5caa98Sdjl #define NSCD_DB_SIZE_MEDIUM 2 112cb5caa98Sdjl #define NSCD_DB_SIZE_SMALL 3 113cb5caa98Sdjl #define NSCD_DB_SIZE_TINY 4 114cb5caa98Sdjl 115cb5caa98Sdjl /* 116cb5caa98Sdjl * options for _nscd_alloc() 117cb5caa98Sdjl */ 118cb5caa98Sdjl #define NSCD_ALLOC_MUTEX 0x0001 119cb5caa98Sdjl #define NSCD_ALLOC_RWLOCK 0x0002 120cb5caa98Sdjl #define NSCD_ALLOC_COND 0x0004 121cb5caa98Sdjl 122cb5caa98Sdjl /* 123cb5caa98Sdjl * prototypes 124cb5caa98Sdjl */ 125cb5caa98Sdjl nscd_seq_num_t 126cb5caa98Sdjl _nscd_get_seq_num(); 127cb5caa98Sdjl 128*e37190e5Smichen nscd_cookie_num_t 129*e37190e5Smichen _nscd_get_cookie_num(); 130cb5caa98Sdjl 131cb5caa98Sdjl nscd_acc_data_t * 132cb5caa98Sdjl _nscd_get( 133cb5caa98Sdjl nscd_acc_data_t *data); 134cb5caa98Sdjl 135cb5caa98Sdjl nscd_acc_data_t 136cb5caa98Sdjl *_nscd_set( 137cb5caa98Sdjl nscd_acc_data_t *old, 138cb5caa98Sdjl nscd_acc_data_t *new); 139cb5caa98Sdjl 140cb5caa98Sdjl void 141cb5caa98Sdjl _nscd_release( 142cb5caa98Sdjl nscd_acc_data_t *data); 143cb5caa98Sdjl 144cb5caa98Sdjl nscd_acc_data_t 145cb5caa98Sdjl *_nscd_rdlock( 146cb5caa98Sdjl nscd_acc_data_t *data); 147cb5caa98Sdjl 148cb5caa98Sdjl nscd_acc_data_t 149cb5caa98Sdjl *_nscd_wrlock( 150cb5caa98Sdjl nscd_acc_data_t *data); 151cb5caa98Sdjl 152cb5caa98Sdjl void 153cb5caa98Sdjl _nscd_rw_unlock( 154cb5caa98Sdjl nscd_acc_data_t *data); 155cb5caa98Sdjl 156cb5caa98Sdjl void 157cb5caa98Sdjl _nscd_rw_unlock_no_release( 158cb5caa98Sdjl nscd_acc_data_t *data); 159cb5caa98Sdjl 160cb5caa98Sdjl nscd_acc_data_t 161cb5caa98Sdjl *_nscd_mutex_lock( 162cb5caa98Sdjl nscd_acc_data_t *data); 163cb5caa98Sdjl 164cb5caa98Sdjl void 165cb5caa98Sdjl _nscd_mutex_unlock( 166cb5caa98Sdjl nscd_acc_data_t *data); 167cb5caa98Sdjl 168cb5caa98Sdjl void 169cb5caa98Sdjl _nscd_cond_signal( 170cb5caa98Sdjl nscd_acc_data_t *data); 171cb5caa98Sdjl 172cb5caa98Sdjl void 173cb5caa98Sdjl _nscd_cond_wait( 174cb5caa98Sdjl nscd_acc_data_t *data, 175cb5caa98Sdjl cond_t *cond); 176cb5caa98Sdjl 177cb5caa98Sdjl nscd_acc_data_t * 178cb5caa98Sdjl _nscd_alloc( 179cb5caa98Sdjl int type, 180cb5caa98Sdjl size_t size, 181cb5caa98Sdjl void (*data_free)( 182cb5caa98Sdjl nscd_acc_data_t *data), 183cb5caa98Sdjl int option); 184cb5caa98Sdjl 185cb5caa98Sdjl nscd_rc_t 186cb5caa98Sdjl _nscd_add_int_addr( 187cb5caa98Sdjl void *ptr, 188cb5caa98Sdjl int type, 189cb5caa98Sdjl nscd_seq_num_t seq_num); 190cb5caa98Sdjl 191cb5caa98Sdjl rwlock_t * 192cb5caa98Sdjl _nscd_is_int_addr( 193cb5caa98Sdjl void *ptr, 194cb5caa98Sdjl nscd_seq_num_t seq_num); 195cb5caa98Sdjl 196cb5caa98Sdjl void 197cb5caa98Sdjl _nscd_del_int_addr( 198cb5caa98Sdjl void *ptr, 199cb5caa98Sdjl nscd_seq_num_t seq_num); 200cb5caa98Sdjl 201cb5caa98Sdjl nscd_db_t * 202cb5caa98Sdjl _nscd_alloc_db( 203cb5caa98Sdjl int size); 204cb5caa98Sdjl 205cb5caa98Sdjl void 206cb5caa98Sdjl _nscd_free_db( 207cb5caa98Sdjl nscd_db_t *db); 208cb5caa98Sdjl 209cb5caa98Sdjl nscd_db_entry_t * 210cb5caa98Sdjl _nscd_alloc_db_entry( 211cb5caa98Sdjl int type, 212cb5caa98Sdjl const char *name, 213cb5caa98Sdjl int dataSize, 214cb5caa98Sdjl int num_data, 215cb5caa98Sdjl int num_array); 216cb5caa98Sdjl 217cb5caa98Sdjl const nscd_db_entry_t * 218cb5caa98Sdjl _nscd_get_db_entry( 219cb5caa98Sdjl const nscd_db_t *db, 220cb5caa98Sdjl int type, 221cb5caa98Sdjl const char *str, 222cb5caa98Sdjl nscd_db_option_t option, 223cb5caa98Sdjl int id_num); 224cb5caa98Sdjl 225cb5caa98Sdjl nscd_rc_t 226cb5caa98Sdjl _nscd_add_db_entry( 227cb5caa98Sdjl nscd_db_t *db, 228cb5caa98Sdjl const char *str, 229cb5caa98Sdjl nscd_db_entry_t *entry, 230cb5caa98Sdjl nscd_db_option_t option); 231cb5caa98Sdjl 232cb5caa98Sdjl nscd_rc_t 233cb5caa98Sdjl _nscd_delete_db_entry( 234cb5caa98Sdjl nscd_db_t *db, 235cb5caa98Sdjl int type, 236cb5caa98Sdjl const char *str, 237cb5caa98Sdjl nscd_db_option_t option, 238cb5caa98Sdjl int id_num); 239cb5caa98Sdjl 240cb5caa98Sdjl 241cb5caa98Sdjl void * 242cb5caa98Sdjl _nscd_create_int_addrDB(); 243cb5caa98Sdjl 244cb5caa98Sdjl void 245cb5caa98Sdjl _nscd_destroy_int_addrDB(); 246cb5caa98Sdjl 247cb5caa98Sdjl #ifdef __cplusplus 248cb5caa98Sdjl } 249cb5caa98Sdjl #endif 250cb5caa98Sdjl 251cb5caa98Sdjl #endif /* _NSCD_DB_H */ 252