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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2001-2003 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 #ifndef _NISDB_LDAP_H 30 #define _NISDB_LDAP_H 31 32 #include <sys/time.h> 33 #include <thread.h> 34 #include <synch.h> 35 #include <pthread.h> 36 #include <rpcsvc/nis.h> 37 38 #include "ldap_parse.h" 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 /* Types supporting rpc.nisd configuration attributes */ 45 46 /* nisplusLDAPinitialUpdate */ 47 typedef enum { 48 ini_none, 49 from_ldap, 50 from_ldap_update_only, 51 to_ldap, 52 to_ldap_update_only 53 } __nis_initial_update_t; 54 55 /* nisplusLDAPretrieveError */ 56 typedef enum { 57 use_cached, 58 ret_retry, 59 try_again, 60 ret_unavail, 61 no_such_name, 62 fail 63 } __nis_retrieve_error_t; 64 65 /* nisplusLDAPstoreError */ 66 typedef enum { 67 sto_retry, 68 system_error, 69 sto_unavail, 70 sto_fail 71 } __nis_store_error_t; 72 73 /* nisplusLDAPstoreErrorDisp */ 74 typedef enum { 75 std_delete_entry, 76 abandon 77 } __nis_store_error_disp_t; 78 79 /* nisplusLDAPrefreshError */ 80 typedef enum { 81 continue_using, 82 ref_retry, 83 continue_using_retry, 84 cache_expired, 85 tryagain 86 } __nis_refresh_error_t; 87 88 /* nisplusLDAPthreadCreationError */ 89 typedef enum { 90 pass_error, 91 cre_retry 92 } __nis_thread_creation_error_t; 93 94 /* nisplusLDAPdumpError */ 95 typedef enum { 96 de_retry, 97 rollback, 98 rollback_retry 99 } __nis_dump_error_t; 100 101 /* nisplusLDAPresyncService */ 102 typedef enum { 103 from_copy, 104 directory_locked, 105 from_live 106 } __nis_resync_service_t; 107 108 /* nisplusLDAPupdateBatching */ 109 typedef enum { 110 accumulate, 111 bounded_accumulate, 112 upd_none 113 } __nis_update_batching_t; 114 115 /* nisplusLDAPexclusiveWaitMode */ 116 typedef enum { 117 block, 118 ewm_tryagain 119 } __nis_exclusive_wait_mode_t; 120 121 /* nisplusLDAPmatchFetch */ 122 typedef enum { 123 no_match_only, 124 mat_always, 125 mat_never 126 } __nis_match_fetch_t; 127 128 /* Keep track of desired number of attempts and timeout */ 129 typedef struct { 130 int attempts; 131 time_t timeout; 132 } __nisdb_retry_t; 133 134 /* Table mapping (and related) information */ 135 typedef struct { 136 time_t initTtlLo; /* Initial lo TTL for table */ 137 time_t initTtlHi; /* Initial hi TTL for table */ 138 time_t ttl; /* TTL for table entries */ 139 time_t *expire; /* Expire times for entries */ 140 time_t enumExpire; /* Enumeration expiration */ 141 bool_t fromLDAP; /* Get data from LDAP ? */ 142 bool_t toLDAP; /* Write data to LDAP ? */ 143 bool_t isMaster; /* Are we master for this ? */ 144 __nis_retrieve_error_t retrieveError; 145 __nisdb_retry_t retrieveErrorRetry; 146 __nis_store_error_t storeError; 147 __nisdb_retry_t storeErrorRetry; 148 __nis_store_error_disp_t 149 storeErrorDisp; 150 __nis_refresh_error_t refreshError; 151 __nisdb_retry_t refreshErrorRetry; 152 __nis_match_fetch_t matchFetch; 153 __nis_table_mapping_t *tm; 154 zotypes objType; 155 zotypes expireType; 156 char *objName; 157 bool_t isDeferredTable; 158 mutex_t enumLock; 159 pthread_t enumTid; 160 int enumStat; 161 int enumDeferred; 162 uint_t enumEntries; 163 ulong_t enumTime; /* Microseconds */ 164 } __nisdb_table_mapping_t; 165 166 /* 167 * Configuration data used by the rpc.nisd proper, but not in libnisdb. 168 */ 169 typedef struct { 170 __nis_initial_update_t initialUpdate; 171 __nis_thread_creation_error_t threadCreationError; 172 __nisdb_retry_t threadCreationErrorTimeout; 173 __nis_dump_error_t dumpError; 174 __nisdb_retry_t dumpErrorTimeout; 175 __nis_resync_service_t resyncService; 176 __nis_update_batching_t updateBatching; 177 __nisdb_retry_t updateBatchingTimeout; 178 __nis_exclusive_wait_mode_t exclusiveWaitMode; 179 int numberOfServiceThreads; 180 int emulate_yp; 181 int maxRPCRecordSize; 182 } __nis_config_t; 183 184 extern __nisdb_table_mapping_t ldapDBTableMapping; 185 extern __nis_config_t ldapConfig; 186 187 #ifdef __cplusplus 188 } 189 #endif /* __cplusplus */ 190 191 #endif /* _NISDB_LDAP_H */ 192