#ifndef _NS_CACHE_DOOR_H
#define _NS_CACHE_DOOR_H
#ifdef __cplusplus
extern "C" {
#endif
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <grp.h>
#include <pwd.h>
typedef struct ldap_stat {
int ldap_numbercalls;
int ldap_ttl;
} ldap_stat_t;
typedef struct ldap_strlist {
int ldap_count;
int ldap_offsets[1];
} ldap_strlist_t;
typedef struct ldap_get_chg_cookie {
pid_t mgr_pid;
uint32_t seq_num;
} ldap_get_chg_cookie_t;
typedef struct ldap_get_change {
uint32_t op;
ldap_get_chg_cookie_t cookie;
} ldap_get_change_t;
typedef struct ldap_get_change_out {
uint32_t type;
ldap_get_chg_cookie_t cookie;
uint32_t server_count;
uint32_t data_size;
char data[sizeof (int)];
} ldap_get_change_out_t;
typedef struct ldap_config_out {
ldap_get_chg_cookie_t cookie;
uint32_t data_size;
char config_str[sizeof (int)];
} ldap_config_out_t;
typedef struct ldap_admin_mod_result {
uint32_t ns_err;
uint32_t status;
uint32_t msg_size;
char msg[sizeof (int)];
} ldap_admin_mod_result_t;
#define BUFFERSIZE 8192
#define OFFSET 36
typedef struct {
int ldap_bufferbytesused;
int ldap_return_code;
int ldap_errno;
union {
char config[BUFFERSIZE - OFFSET];
ldap_stat_t stats;
char buff[4];
char ber[4];
ldap_strlist_t strlist;
ldap_config_out_t config_str;
ldap_get_change_out_t changes;
ldap_admin_mod_result_t admin_result;
} ldap_u;
} ldap_return_t;
typedef struct {
int ldap_callnumber;
union {
uid_t uid;
gid_t gid;
char domainname[sizeof (int)];
struct {
int a_type;
int a_length;
char a_data[sizeof (int)];
} addr;
char servername[sizeof (int)];
ldap_strlist_t strlist;
ldap_get_change_t get_change;
} ldap_u;
} ldap_call_t;
typedef union {
ldap_call_t ldap_call;
ldap_return_t ldap_ret;
char ldap_buff[sizeof (int)];
} ldap_data_t;
#define NULLCALL 0
#define GETLDAPCONFIG 1
#define GETLDAPCONFIGV1 1
#define KILLSERVER 7
#define GETADMIN 8
#define SETADMIN 9
#define DBG_OFF 0
#define DBG_CANT_FIND 1
#define DBG_NETLOOKUPS 2
#define DBG_SERVER_LIST_REFRESH 3
#define DBG_PROFILE_REFRESH 4
#define DBG_ALL 6
#define GETLDAPSERVER 21
#define GETCACHE 22
#define SETCACHE 23
#define GETCACHESTAT 24
#define GETSTATUSCHANGE 25
#define ADMINMODIFY 26
#define GETADMINCRED 27
#define NS_CACHE_NEW "0"
#define NS_CACHE_NORESP "1"
#define NS_CACHE_NEXT "2"
#define NS_CACHE_WRITE "3"
#define NS_CACHE_ADDR_HOSTNAME "H"
#define NS_CACHE_ADDR_IP "I"
#define NS_STATUS_CHANGE_OP_START 1
#define NS_STATUS_CHANGE_OP_STOP 2
#define NS_STATUS_CHANGE_TYPE_CONFIG 1
#define NS_STATUS_CHANGE_TYPE_SERVER 2
#define NS_SERVER_CHANGE_UP "0"
#define NS_SERVER_CHANGE_DOWN "1"
#define NS_CACHE_DN2DOMAIN "DM"
#define LDAPMAXNAMELEN 255
#define LDAP_CACHE_DOOR_VERSION 1
#define LDAP_CACHE_DOOR "/var/run/ldap_cache_door"
#define LDAP_CACHE_DOOR_COOKIE ((void*)(0xdeadbeef^LDAP_CACHE_DOOR_VERSION))
#define UPDATE_DOOR_COOKIE ((void*)(0xdeadcafe)
#define NS_CACHE_SUCCESS 0
#define NS_CACHE_NOTFOUND -1
#define NS_CACHE_CREDERROR -2
#define NS_CACHE_SERVERERROR -3
#define NS_CACHE_NOSERVER -4
int
__ns_ldap_trydoorcall(ldap_data_t **dptr, int *ndata, int *adata);
int
__ns_ldap_trydoorcall_getfd();
int
__ns_ldap_trydoorcall_send(ldap_data_t **dptr, int *ndata, int *adata);
void
__ns_ldap_doorfd_close();
#ifdef __cplusplus
}
#endif
#endif