#ifndef _LIBADUTILS_H
#define _LIBADUTILS_H
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <rpc/rpc.h>
#include <ldap.h>
#ifdef __cplusplus
extern "C" {
#endif
#define ADUTILS_DEF_NUM_RETRIES 2
enum ad_debug {
AD_DEBUG_ALL = 0,
AD_DEBUG_DNS = 1,
AD_DEBUG_LDAP = 2,
AD_DEBUG_DISC = 3,
AD_DEBUG_MAX = 3
};
#define ADUTILS_SID_MAX_SUB_AUTHORITIES 15
#define ADUTILS_MAXBINSID\
(1 + 1 + 6 + (ADUTILS_SID_MAX_SUB_AUTHORITIES * 4))
#define ADUTILS_MAXHEXBINSID (ADUTILS_MAXBINSID * 3)
typedef struct adutils_ad adutils_ad_t;
typedef struct adutils_entry adutils_entry_t;
typedef struct adutils_result adutils_result_t;
typedef struct adutils_ctx adutils_ctx_t;
typedef struct adutils_query_state adutils_query_state_t;
typedef void (*adutils_ldap_res_search_cb)(LDAP *ld, LDAPMessage **res,
int rc, int qid, void *argp);
typedef enum {
ADUTILS_SUCCESS = 0,
ADUTILS_ERR_INTERNAL = -10000,
ADUTILS_ERR_OTHER,
ADUTILS_ERR_NOTFOUND,
ADUTILS_ERR_RETRIABLE_NET_ERR,
ADUTILS_ERR_MEMORY,
ADUTILS_ERR_DOMAIN
} adutils_rc;
typedef enum adutils_ad_partition {
ADUTILS_AD_DATA = 389,
ADUTILS_AD_GLOBAL_CATALOG = 3268
} adutils_ad_partition_t;
typedef void (*adutils_logger)(int, const char *, ...);
extern void adutils_set_debug(enum ad_debug item, int val);
extern adutils_rc adutils_ad_alloc(adutils_ad_t **new_ad,
const char *domain_name,
adutils_ad_partition_t part);
extern void adutils_ad_free(adutils_ad_t **ad);
extern adutils_rc adutils_add_ds(adutils_ad_t *ad,
const char *host, int port);
extern adutils_rc adutils_add_domain(adutils_ad_t *ad,
const char *domain_name,
const char *domain_sid);
extern void adutils_freeresult(adutils_result_t **result);
extern adutils_rc adutils_lookup(adutils_ad_t *ad,
const char *searchfilter,
const char **attrs, const char *domain,
adutils_result_t **result);
extern char **adutils_getattr(const adutils_entry_t *entry,
const char *attrname);
extern const adutils_entry_t *adutils_getfirstentry(
adutils_result_t *result);
extern int adutils_txtsid2hexbinsid(const char *txt,
const uint32_t *rid,
char *hexbinsid, int hexbinsidlen);
extern char *adutils_bv_str(BerValue *bval);
extern boolean_t adutils_bv_uint(BerValue *bval, unsigned int *result);
extern char *adutils_bv_objsid2sidstr(BerValue *bval,
uint32_t *rid);
extern void adutils_reap_idle_connections(void);
extern char *adutils_dn2dns(const char *dn);
extern adutils_rc adutils_lookup_batch_start(adutils_ad_t *ad,
int nqueries,
adutils_ldap_res_search_cb ldap_res_search_cb,
void *ldap_res_search_argp,
adutils_query_state_t **state);
extern adutils_rc adutils_lookup_batch_add(adutils_query_state_t *state,
const char *filter, const char * const *attrs,
const char *edomain, adutils_result_t **result,
adutils_rc *rc);
extern adutils_rc adutils_lookup_batch_end(
adutils_query_state_t **state);
extern void adutils_lookup_batch_release(
adutils_query_state_t **state);
extern int adutils_lookup_check_domain(
adutils_query_state_t *state,
const char *domain);
extern int adutils_lookup_check_sid_prefix(
adutils_query_state_t *state,
const char *sid);
extern void adutils_set_logger(adutils_logger logger);
extern boolean_t domain_eq(const char *a, const char *b);
#ifdef __cplusplus
}
#endif
#endif