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 #ifndef _NS_CACHE_DOOR_H 27 #define _NS_CACHE_DOOR_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 /* 32 * Definitions for client side of doors-based ldap caching 33 */ 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 #include <netdb.h> 40 #include <netinet/in.h> 41 #include <arpa/inet.h> 42 #include <sys/socket.h> 43 #include <grp.h> 44 #include <pwd.h> 45 46 47 /* 48 * statistics & control structure 49 */ 50 51 typedef struct ldap_stat { 52 int ldap_numbercalls; /* number of times called */ 53 int ldap_ttl; /* time to live for positive entries */ 54 } ldap_stat_t; 55 56 57 /* 58 * Structure used to transfer arrays of strings. 59 * Buffer format: 60 * count 61 * array of offsets from start of buffer 62 * array of characters of strings 63 * charp = buf + ldap_offsets[n]; 64 */ 65 66 typedef struct ldap_strlist { 67 int ldap_count; /* number of strings */ 68 int ldap_offsets[1]; /* array of offsets */ 69 } ldap_strlist_t; 70 71 /* 72 * Structure used to request/inform config and server status changes. 73 */ 74 75 typedef struct ldap_get_chg_cookie { 76 pid_t mgr_pid; /* current process id of ldap_cachemgr */ 77 uint32_t seq_num; /* current config sequence number */ 78 } ldap_get_chg_cookie_t; 79 80 typedef struct ldap_get_change { 81 uint32_t op; /* start or stop */ 82 ldap_get_chg_cookie_t cookie; /* get status change cookie */ 83 } ldap_get_change_t; 84 85 typedef struct ldap_get_change_out { 86 uint32_t type; /* config change or server change */ 87 ldap_get_chg_cookie_t cookie; /* get status change cookie */ 88 uint32_t server_count; /* if server change: num of servers */ 89 uint32_t data_size; /* if server change: size of data */ 90 char data[sizeof (int)]; /* real size is data_size */ 91 } ldap_get_change_out_t; 92 93 typedef struct ldap_config_out { 94 ldap_get_chg_cookie_t cookie; /* get status change cookie */ 95 uint32_t data_size; /* length of the config string */ 96 char config_str[sizeof (int)]; /* real size is data_size */ 97 } ldap_config_out_t; 98 99 /* 100 * structure returned by server for all calls 101 */ 102 103 #define BUFFERSIZE 8192 104 #define OFFSET 36 105 106 typedef struct { 107 int ldap_bufferbytesused; 108 int ldap_return_code; 109 int ldap_errno; 110 111 union { 112 char config[BUFFERSIZE - OFFSET]; /* V1 Config */ 113 ldap_stat_t stats; 114 char buff[4]; 115 char ber[4]; /* BER/DER encoded packet */ 116 ldap_strlist_t strlist; 117 ldap_config_out_t config_str; 118 ldap_get_change_out_t changes; 119 } ldap_u; 120 121 } ldap_return_t; 122 123 /* 124 * calls look like this 125 */ 126 127 typedef struct { 128 int ldap_callnumber; 129 union { 130 uid_t uid; 131 gid_t gid; 132 char domainname[sizeof (int)]; /* size is indeterminate */ 133 struct { 134 int a_type; 135 int a_length; 136 char a_data[sizeof (int)]; 137 } addr; 138 char servername[sizeof (int)]; /* Format: server:port */ 139 ldap_strlist_t strlist; 140 ldap_get_change_t get_change; 141 } ldap_u; 142 } ldap_call_t; 143 /* 144 * how the client views the call process 145 */ 146 147 typedef union { 148 ldap_call_t ldap_call; 149 ldap_return_t ldap_ret; 150 char ldap_buff[sizeof (int)]; 151 } ldap_data_t; 152 153 /* Version 1 Cache Manager calls */ 154 /* Cache manager ping */ 155 #define NULLCALL 0 156 /* NativeLDAP I Get Config */ 157 #define GETLDAPCONFIG 1 158 #define GETLDAPCONFIGV1 1 159 160 /* 161 * administrative calls 162 */ 163 164 #define KILLSERVER 7 165 #define GETADMIN 8 166 #define SETADMIN 9 167 168 /* 169 * debug levels 170 */ 171 172 #define DBG_OFF 0 173 #define DBG_CANT_FIND 1 174 #define DBG_NETLOOKUPS 2 175 #define DBG_SERVER_LIST_REFRESH 3 /* debug server list refresh */ 176 #define DBG_PROFILE_REFRESH 4 /* debug profile TTL/refresh */ 177 #define DBG_ALL 6 178 179 /* Version 2 Cache Manager calls */ 180 /* NativeLDAP II Get Server and RootDSE Info */ 181 #define GETLDAPSERVER 21 182 /* NativeLDAP II Get cached data */ 183 #define GETCACHE 22 184 /* NativeLDAP II Set cached data */ 185 #define SETCACHE 23 186 /* NativeLDAP II get cache data statistics */ 187 #define GETCACHESTAT 24 188 /* Configuration change or server status change notification */ 189 #define GETSTATUSCHANGE 25 190 191 /* 192 * GETLDAPSERVER request flags 193 */ 194 195 #define NS_CACHE_NEW "0" 196 #define NS_CACHE_NORESP "1" 197 #define NS_CACHE_NEXT "2" 198 #define NS_CACHE_WRITE "3" 199 #define NS_CACHE_ADDR_HOSTNAME "H" 200 #define NS_CACHE_ADDR_IP "I" 201 202 /* 203 * GETSTATUSCHANGE operation: start or stop 204 */ 205 #define NS_STATUS_CHANGE_OP_START 1 206 #define NS_STATUS_CHANGE_OP_STOP 2 207 208 /* 209 * GETSTATUSCHANGE change type: config or server 210 */ 211 #define NS_STATUS_CHANGE_TYPE_CONFIG 1 212 #define NS_STATUS_CHANGE_TYPE_SERVER 2 213 214 /* 215 * Server status change 216 */ 217 #define NS_SERVER_CHANGE_UP "0" /* mapped to NS_SERVER_UP */ 218 #define NS_SERVER_CHANGE_DOWN "1" /* mapped to NS_SERVER_DOWN */ 219 /* 220 * GETCACHE/SETCACHE data flags 221 */ 222 #define NS_CACHE_DN2DOMAIN "DM" 223 224 /* 225 * Max size name we allow to be passed to avoid 226 * buffer overflow problems 227 */ 228 #define LDAPMAXNAMELEN 255 229 230 /* 231 * defines for client-server interaction 232 */ 233 234 #define LDAP_CACHE_DOOR_VERSION 1 235 #define LDAP_CACHE_DOOR "/var/run/ldap_cache_door" 236 #define LDAP_CACHE_DOOR_COOKIE ((void*)(0xdeadbeef^LDAP_CACHE_DOOR_VERSION)) 237 #define UPDATE_DOOR_COOKIE ((void*)(0xdeadcafe) 238 239 #define NS_CACHE_SUCCESS 0 240 #define NS_CACHE_NOTFOUND -1 241 #define NS_CACHE_CREDERROR -2 242 #define NS_CACHE_SERVERERROR -3 243 #define NS_CACHE_NOSERVER -4 244 245 int 246 __ns_ldap_trydoorcall(ldap_data_t **dptr, int *ndata, int *adata); 247 int 248 __ns_ldap_trydoorcall_getfd(); 249 int 250 __ns_ldap_trydoorcall_send(ldap_data_t **dptr, int *ndata, int *adata); 251 void 252 __ns_ldap_doorfd_close(); 253 254 #ifdef __cplusplus 255 } 256 #endif 257 258 259 #endif /* _NS_CACHE_DOOR_H */ 260