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 #pragma ident "%Z%%M% %I% %E% SMI" 30cb5caa98Sdjl 31cb5caa98Sdjl #ifdef __cplusplus 32cb5caa98Sdjl extern "C" { 33cb5caa98Sdjl #endif 34cb5caa98Sdjl 35cb5caa98Sdjl #include <nss_dbdefs.h> /* nssuint_t */ 36cb5caa98Sdjl #include "nscd_common.h" 37cb5caa98Sdjl 38cb5caa98Sdjl /* make a pointer 8-byte aligned, or an integer a multiple of 8 */ 39cb5caa98Sdjl #define roundup(x) (((unsigned long)(x)+7) & ~7) 40cb5caa98Sdjl 41cb5caa98Sdjl /* 42cb5caa98Sdjl * type of nscd data 43cb5caa98Sdjl */ 44cb5caa98Sdjl #define NSCD_DATA_UNKNOWN 0 45cb5caa98Sdjl #define NSCD_DATA_NSW_CONFIG 1 46cb5caa98Sdjl #define NSCD_DATA_NSW_STATE_BASE 2 47cb5caa98Sdjl #define NSCD_DATA_GETENT_CTX_BASE 3 48cb5caa98Sdjl #define NSCD_DATA_BACKEND_INFO 4 49cb5caa98Sdjl #define NSCD_DATA_BACKEND_INFO_DB 5 50cb5caa98Sdjl #define NSCD_DATA_CFG_NSW_DB_INDEX 6 51cb5caa98Sdjl #define NSCD_DATA_CFG_NSW_SRC_INDEX 7 52cb5caa98Sdjl #define NSCD_DATA_CFG_PARAM_INDEX 8 53cb5caa98Sdjl #define NSCD_DATA_CFG_STAT_INDEX 9 54cb5caa98Sdjl #define NSCD_DATA_ADDR 127 55cb5caa98Sdjl #define NSCD_DATA_CTX_ADDR 128 56cb5caa98Sdjl 57cb5caa98Sdjl /* 58cb5caa98Sdjl * database operation options 59cb5caa98Sdjl */ 60cb5caa98Sdjl typedef enum { 61cb5caa98Sdjl NSCD_GET_FIRST_DB_ENTRY = 1, 62cb5caa98Sdjl NSCD_GET_NEXT_DB_ENTRY = 2, 63cb5caa98Sdjl NSCD_GET_EXACT_DB_ENTRY = 3, 64cb5caa98Sdjl NSCD_ADD_DB_ENTRY_FIRST = 4, 65cb5caa98Sdjl NSCD_ADD_DB_ENTRY_LAST = 5, 66cb5caa98Sdjl NSCD_ADD_DB_ENTRY_REPLACE = 6, 67cb5caa98Sdjl NSCD_ADD_DB_ENTRY_IF_NONE = 7, 68cb5caa98Sdjl NSCD_DEL_FIRST_DB_ENTRY = 8, 69cb5caa98Sdjl NSCD_DEL_ALL_DB_ENTRY = 9, 70cb5caa98Sdjl NSCD_DEL_EXACT_DB_ENTRY = 10 71cb5caa98Sdjl } nscd_db_option_t; 72cb5caa98Sdjl 73cb5caa98Sdjl /* 74cb5caa98Sdjl * This structure defines an instance of the 75cb5caa98Sdjl * nscd database entry. 76cb5caa98Sdjl */ 77cb5caa98Sdjl typedef struct nscd_db_entry { 78cb5caa98Sdjl int type; 79cb5caa98Sdjl int id_num; 80cb5caa98Sdjl int num_data; 81cb5caa98Sdjl int num_array; 82cb5caa98Sdjl char *name; 83cb5caa98Sdjl void **data_array; 84cb5caa98Sdjl } nscd_db_entry_t; 85cb5caa98Sdjl 86cb5caa98Sdjl /* 87cb5caa98Sdjl * sequence number attached to nscd data 88cb5caa98Sdjl */ 89cb5caa98Sdjl typedef nssuint_t nscd_seq_num_t; 90*e37190e5Smichen typedef nssuint_t nscd_cookie_num_t; 91cb5caa98Sdjl 92cb5caa98Sdjl /* 93cb5caa98Sdjl * The nscd_access_s datatype represents a nscd 94cb5caa98Sdjl * access data structure. It is an opaque structure. 95cb5caa98Sdjl */ 96cb5caa98Sdjl struct nscd_access_s; 97cb5caa98Sdjl typedef struct nscd_access_s nscd_access_t; 98cb5caa98Sdjl struct nscd_acc_data_s; 99cb5caa98Sdjl typedef struct nscd_acc_data_s nscd_acc_data_t; 100cb5caa98Sdjl 101cb5caa98Sdjl /* 102cb5caa98Sdjl * The nscd_db_t datatype represents a nscd 103cb5caa98Sdjl * database. It is also an opaque structure. 104cb5caa98Sdjl */ 105cb5caa98Sdjl struct nscd_db_s; 106cb5caa98Sdjl typedef struct nscd_db_s nscd_db_t; 107cb5caa98Sdjl 108cb5caa98Sdjl /* 109cb5caa98Sdjl * four sizes for a nscd database: 110cb5caa98Sdjl * large, medium, small, tiny 111cb5caa98Sdjl */ 112cb5caa98Sdjl #define NSCD_DB_SIZE_LARGE 1 113cb5caa98Sdjl #define NSCD_DB_SIZE_MEDIUM 2 114cb5caa98Sdjl #define NSCD_DB_SIZE_SMALL 3 115cb5caa98Sdjl #define NSCD_DB_SIZE_TINY 4 116cb5caa98Sdjl 117cb5caa98Sdjl /* 118cb5caa98Sdjl * options for _nscd_alloc() 119cb5caa98Sdjl */ 120cb5caa98Sdjl #define NSCD_ALLOC_MUTEX 0x0001 121cb5caa98Sdjl #define NSCD_ALLOC_RWLOCK 0x0002 122cb5caa98Sdjl #define NSCD_ALLOC_COND 0x0004 123cb5caa98Sdjl 124cb5caa98Sdjl /* 125cb5caa98Sdjl * prototypes 126cb5caa98Sdjl */ 127cb5caa98Sdjl nscd_seq_num_t 128cb5caa98Sdjl _nscd_get_seq_num(); 129cb5caa98Sdjl 130*e37190e5Smichen nscd_cookie_num_t 131*e37190e5Smichen _nscd_get_cookie_num(); 132cb5caa98Sdjl 133cb5caa98Sdjl nscd_acc_data_t * 134cb5caa98Sdjl _nscd_get( 135cb5caa98Sdjl nscd_acc_data_t *data); 136cb5caa98Sdjl 137cb5caa98Sdjl nscd_acc_data_t 138cb5caa98Sdjl *_nscd_set( 139cb5caa98Sdjl nscd_acc_data_t *old, 140cb5caa98Sdjl nscd_acc_data_t *new); 141cb5caa98Sdjl 142cb5caa98Sdjl void 143cb5caa98Sdjl _nscd_release( 144cb5caa98Sdjl nscd_acc_data_t *data); 145cb5caa98Sdjl 146cb5caa98Sdjl nscd_acc_data_t 147cb5caa98Sdjl *_nscd_rdlock( 148cb5caa98Sdjl nscd_acc_data_t *data); 149cb5caa98Sdjl 150cb5caa98Sdjl nscd_acc_data_t 151cb5caa98Sdjl *_nscd_wrlock( 152cb5caa98Sdjl nscd_acc_data_t *data); 153cb5caa98Sdjl 154cb5caa98Sdjl void 155cb5caa98Sdjl _nscd_rw_unlock( 156cb5caa98Sdjl nscd_acc_data_t *data); 157cb5caa98Sdjl 158cb5caa98Sdjl void 159cb5caa98Sdjl _nscd_rw_unlock_no_release( 160cb5caa98Sdjl nscd_acc_data_t *data); 161cb5caa98Sdjl 162cb5caa98Sdjl nscd_acc_data_t 163cb5caa98Sdjl *_nscd_mutex_lock( 164cb5caa98Sdjl nscd_acc_data_t *data); 165cb5caa98Sdjl 166cb5caa98Sdjl void 167cb5caa98Sdjl _nscd_mutex_unlock( 168cb5caa98Sdjl nscd_acc_data_t *data); 169cb5caa98Sdjl 170cb5caa98Sdjl void 171cb5caa98Sdjl _nscd_cond_signal( 172cb5caa98Sdjl nscd_acc_data_t *data); 173cb5caa98Sdjl 174cb5caa98Sdjl void 175cb5caa98Sdjl _nscd_cond_wait( 176cb5caa98Sdjl nscd_acc_data_t *data, 177cb5caa98Sdjl cond_t *cond); 178cb5caa98Sdjl 179cb5caa98Sdjl nscd_acc_data_t * 180cb5caa98Sdjl _nscd_alloc( 181cb5caa98Sdjl int type, 182cb5caa98Sdjl size_t size, 183cb5caa98Sdjl void (*data_free)( 184cb5caa98Sdjl nscd_acc_data_t *data), 185cb5caa98Sdjl int option); 186cb5caa98Sdjl 187cb5caa98Sdjl nscd_rc_t 188cb5caa98Sdjl _nscd_add_int_addr( 189cb5caa98Sdjl void *ptr, 190cb5caa98Sdjl int type, 191cb5caa98Sdjl nscd_seq_num_t seq_num); 192cb5caa98Sdjl 193cb5caa98Sdjl rwlock_t * 194cb5caa98Sdjl _nscd_is_int_addr( 195cb5caa98Sdjl void *ptr, 196cb5caa98Sdjl nscd_seq_num_t seq_num); 197cb5caa98Sdjl 198cb5caa98Sdjl void 199cb5caa98Sdjl _nscd_del_int_addr( 200cb5caa98Sdjl void *ptr, 201cb5caa98Sdjl nscd_seq_num_t seq_num); 202cb5caa98Sdjl 203cb5caa98Sdjl nscd_db_t * 204cb5caa98Sdjl _nscd_alloc_db( 205cb5caa98Sdjl int size); 206cb5caa98Sdjl 207cb5caa98Sdjl void 208cb5caa98Sdjl _nscd_free_db( 209cb5caa98Sdjl nscd_db_t *db); 210cb5caa98Sdjl 211cb5caa98Sdjl nscd_db_entry_t * 212cb5caa98Sdjl _nscd_alloc_db_entry( 213cb5caa98Sdjl int type, 214cb5caa98Sdjl const char *name, 215cb5caa98Sdjl int dataSize, 216cb5caa98Sdjl int num_data, 217cb5caa98Sdjl int num_array); 218cb5caa98Sdjl 219cb5caa98Sdjl const nscd_db_entry_t * 220cb5caa98Sdjl _nscd_get_db_entry( 221cb5caa98Sdjl const nscd_db_t *db, 222cb5caa98Sdjl int type, 223cb5caa98Sdjl const char *str, 224cb5caa98Sdjl nscd_db_option_t option, 225cb5caa98Sdjl int id_num); 226cb5caa98Sdjl 227cb5caa98Sdjl nscd_rc_t 228cb5caa98Sdjl _nscd_add_db_entry( 229cb5caa98Sdjl nscd_db_t *db, 230cb5caa98Sdjl const char *str, 231cb5caa98Sdjl nscd_db_entry_t *entry, 232cb5caa98Sdjl nscd_db_option_t option); 233cb5caa98Sdjl 234cb5caa98Sdjl nscd_rc_t 235cb5caa98Sdjl _nscd_delete_db_entry( 236cb5caa98Sdjl nscd_db_t *db, 237cb5caa98Sdjl int type, 238cb5caa98Sdjl const char *str, 239cb5caa98Sdjl nscd_db_option_t option, 240cb5caa98Sdjl int id_num); 241cb5caa98Sdjl 242cb5caa98Sdjl 243cb5caa98Sdjl void * 244cb5caa98Sdjl _nscd_create_int_addrDB(); 245cb5caa98Sdjl 246cb5caa98Sdjl void 247cb5caa98Sdjl _nscd_destroy_int_addrDB(); 248cb5caa98Sdjl 249cb5caa98Sdjl #ifdef __cplusplus 250cb5caa98Sdjl } 251cb5caa98Sdjl #endif 252cb5caa98Sdjl 253cb5caa98Sdjl #endif /* _NSCD_DB_H */ 254