#ifndef _IDMAP_PRIV_H
#define _IDMAP_PRIV_H
#include <libscf.h>
#include <resolv.h>
#include "idmap.h"
#include <rpcsvc/idmap_prot.h>
#ifdef __cplusplus
extern "C" {
#endif
#define IDMAP_MAX_NAME_LEN 512
#define IDMAP_ERROR(rc) (rc != IDMAP_SUCCESS && rc != IDMAP_NEXT)
#define IDMAP_FATAL_ERROR(rc) (rc == IDMAP_ERR_MEMORY ||\
rc == IDMAP_ERR_DB)
#define IDMAP_YES 1
#define IDMAP_NO 0
#define IDMAP_UNKNOWN -1
#define CHECK_NULL(s) (s != NULL ? s : "null")
#define EMPTY_STRING(str) (str == NULL || *str == '\0')
typedef struct idmap_udt_handle idmap_udt_handle_t;
typedef struct idmap_iter idmap_iter_t;
extern idmap_stat idmap_udt_create(idmap_udt_handle_t **);
extern idmap_stat idmap_udt_commit(idmap_udt_handle_t *);
extern idmap_stat idmap_udt_get_error_index(idmap_udt_handle_t *, int64_t *);
extern idmap_stat idmap_udt_get_error_rule(idmap_udt_handle_t *, char **,
char **, char **, boolean_t *, boolean_t *, boolean_t *, int *);
extern idmap_stat idmap_udt_get_conflict_rule(idmap_udt_handle_t *, char **,
char **, char **, boolean_t *, boolean_t *, boolean_t *, int *);
extern void idmap_udt_destroy(idmap_udt_handle_t *);
extern idmap_stat idmap_udt_add_namerule(idmap_udt_handle_t *, const char *,
boolean_t, boolean_t, const char *, const char *, boolean_t, int);
extern idmap_stat idmap_udt_rm_namerule(idmap_udt_handle_t *, boolean_t,
boolean_t, const char *, const char *, const char *, int);
extern idmap_stat idmap_udt_flush_namerules(idmap_udt_handle_t *);
extern idmap_stat idmap_flush(idmap_flush_op);
extern idmap_stat idmap_iter_mappings(idmap_iter_t **, int flag);
extern idmap_stat idmap_iter_next_mapping(idmap_iter_t *, char **,
idmap_rid_t *, uid_t *, char **, char **, char **, boolean_t *,
boolean_t *, int *, idmap_info *);
extern idmap_stat idmap_iter_namerules(const char *,
boolean_t, boolean_t, const char *, const char *, idmap_iter_t **);
extern idmap_stat idmap_iter_next_namerule(idmap_iter_t *, char **,
char **, char **, boolean_t *, boolean_t *, boolean_t *, int *);
extern idmap_stat idmap_iter_set_limit(idmap_iter_t *, uint64_t);
extern void idmap_iter_destroy(idmap_iter_t *);
extern idmap_stat idmap_get_w2u_mapping(const char *,
idmap_rid_t *, const char *, const char *, int, int *, int *,
uid_t *, char **, int *, idmap_info *);
extern idmap_stat idmap_get_u2w_mapping(uid_t *,
const char *, int, int, int *, char **, idmap_rid_t *, char **,
char **, int *, idmap_info *);
extern idmap_stat idmap_string2stat(const char *);
extern idmap_stat idmap_stat4prot(idmap_stat);
extern idmap_stat idmap_namerule_cpy(idmap_namerule *, idmap_namerule *);
extern void idmap_info_mov(idmap_info *to, idmap_info *from);
extern void idmap_info_free(idmap_info *);
extern void idmap_how_clear(idmap_how *);
extern idmap_stat idmap_getext_uidbysid(idmap_get_handle_t *, char *,
idmap_rid_t, int, uid_t *, idmap_info *, idmap_stat *);
extern idmap_stat idmap_getext_gidbysid(idmap_get_handle_t *, char *,
idmap_rid_t, int, gid_t *, idmap_info *, idmap_stat *);
extern idmap_stat idmap_getext_pidbysid(idmap_get_handle_t *, char *,
idmap_rid_t, int, uid_t *, int *, idmap_info *, idmap_stat *);
extern idmap_stat idmap_getext_sidbyuid(idmap_get_handle_t *, uid_t, int,
char **, idmap_rid_t *, idmap_info *, idmap_stat *);
extern idmap_stat idmap_getext_sidbygid(idmap_get_handle_t *, gid_t, int,
char **, idmap_rid_t *, idmap_info *, idmap_stat *);
extern idmap_stat idmap_get_prop_ds(idmap_prop_type, idmap_ad_disc_ds_t *);
extern idmap_stat idmap_get_prop_str(idmap_prop_type, char **);
#define IDMAP_TRACE_NAME_MAX 100
#define IDMAP_TRACE_TYPE "-type"
#define IDMAP_TRACE_NAME "-name"
#define IDMAP_TRACE_SID "-sid"
#define IDMAP_TRACE_UNIXID "-unixid"
#define IDMAP_TRACE_ERROR "error"
#define IDMAP_TRACE_MESSAGE "message"
extern void idmap_trace_print_1(FILE *out, char *prefix, nvlist_t *entry);
extern void idmap_trace_print(FILE *out, char *prefix, nvlist_t *trace);
#ifdef __cplusplus
}
#endif
#endif