/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _NIS_PARSE_LDAP_CONF_H
#define _NIS_PARSE_LDAP_CONF_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <lber.h>
#include <ldap.h>
#include <iso/limits_iso.h>
#include "ldap_parse.h"
#include "nisdb_ldap.h"
#define DEFAULT_MAPPING_FILE "/var/nis/NIS+LDAPmapping"
#define YP_DEFAULT_MAPPING_FILE "/var/yp/NISLDAPmapping"
#define mmt_berstring_null ((__nis_mapping_match_type_t)-1)
#define ESCAPE_CHAR '\\'
#define EQUAL_CHAR '='
#define COMMA_CHAR ','
#define COMMA_STRING ","
#define OPEN_PAREN_CHAR '('
#define CLOSE_PAREN_CHAR ')'
#define DOUBLE_QUOTE_CHAR '"'
#define PERIOD_CHAR '.'
#define COLON_CHAR ':'
#define POUND_SIGN '#'
#define SEMI_COLON_CHAR ';'
#define QUESTION_MARK '?'
#define PLUS_SIGN '+'
#define PERCENT_SIGN '%'
#define OPEN_BRACKET '['
#define CLOSE_BRACKET ']'
#define ASTERIX_CHAR '*'
#define DASH_CHAR '-'
#define SINGLE_QUOTE_CHAR '\''
#define DEFAULT_COMMENT_CHAR '#'
#define DEFAULT_SEP_STRING " "
#define SPACE_CHAR ' '
#define FOREVER -1
#define FIFTEEN_SECONDS 15
#define TWO_MINUTES 120
#define THIRTY_MINUTES 1800
#define THREE_MINUTES 180
#define ONE_HOUR 3600
#define MAX_LDAP_CONFIG_RETRY_TIME 60
#define NO_VALUE_SET -2
#define INITIAL_UPDATE_NO_ACTION -3
#define NO_INITIAL_UPDATE_NO_ACTION -4
#define FROM_NO_INITIAL_UPDATE -5
#define TO_NO_INITIAL_UPDATE -6
#define BUFSIZE 8192
#ifndef UINT32_MAX
#define UINT32_MAX (4294967295U)
#endif
#define IS_TERMINAL_CHAR(c) \
((c) == QUESTION_MARK || \
(c) == EQUAL_CHAR || \
(c) == COMMA_CHAR || \
(c) == CLOSE_PAREN_CHAR || \
(c) == COLON_CHAR || \
(c) == SEMI_COLON_CHAR)
#define TIME_MAX LONG_MAX
#define WILL_OVERFLOW_TIME(t, d) ((t) > TIME_MAX/10 || \
((t) == TIME_MAX/10 && d > TIME_MAX % 10))
#define LIMIT_MAX (65535)
#define WILL_OVERFLOW_LIMIT(t, d) ((t) > LIMIT_MAX/10 || \
((t) == LIMIT_MAX/10 && d > LIMIT_MAX % 10))
#define WILL_OVERFLOW_INT(t, d) ((t) > INT_MAX/10 || \
((t) == INT_MAX/10 && d > INT_MAX % 10))
/* initial configuration keywords */
/* for NIS+ */
#define CONFIG_DN "nisplusLDAPconfigDN"
#define CONFIG_SERVER_LIST "nisplusLDAPconfigPreferredServerList"
#define CONFIG_AUTH_METHOD "nisplusLDAPconfigAuthenticationMethod"
#define CONFIG_TLS_OPTION "nisplusLDAPconfigTLS"
#define CONFIG_TLS_CERT_DB "nisplusLDAPconfigTLSCertificateDBPath"
#define CONFIG_PROXY_USER "nisplusLDAPconfigProxyUser"
#define CONFIG_PROXY_PASSWD "nisplusLDAPconfigProxyPassword"
#define IS_CONFIG_KEYWORD(x) \
((x) >= key_config_dn && (x) <= key_config_proxy_passwd)
/* LDAP server keywords */
/* for NIS+ */
#define PREFERRED_SERVERS "preferredServerList"
#define AUTH_METHOD "authenticationMethod"
#define TLS_OPTION "nisplusLDAPTLS"
#define TLS_CERT_DB "nisplusLDAPTLSCertificateDBPath"
#define SEARCH_BASE "defaultSearchBase"
#define PROXY_USER "nisplusLDAPproxyUser"
#define PROXY_PASSWD "nisplusLDAPproxyPassword"
#define LDAP_BASE_DOMAIN "nisplusLDAPbaseDomain"
#define BIND_TIMEOUT "nisplusLDAPbindTimeout"
#define SEARCH_TIMEOUT "nisplusLDAPsearchTimeout"
#define MODIFY_TIMEOUT "nisplusLDAPmodifyTimeout"
#define ADD_TIMEOUT "nisplusLDAPaddTimeout"
#define DELETE_TIMEOUT "nisplusLDAPdeleteTimeout"
#define SEARCH_TIME_LIMIT "nisplusLDAPsearchTimeLimit"
#define SEARCH_SIZE_LIMIT "nisplusLDAPsearchSizeLimit"
#define FOLLOW_REFERRAL "nisplusLDAPfollowReferral"
#define IS_BIND_INFO(x) \
((x) >= key_preferred_servers && (x) <= key_follow_referral)
/* This information will be need to determine the server behavior */
/* for NIS+ */
#define INITIAL_UPDATE_ACTION "nisplusLDAPinitialUpdateAction"
#define INITIAL_UPDATE_ONLY "nisplusLDAPinitialUpdateOnly"
#define RETRIEVE_ERROR_ACTION "nisplusLDAPretrieveErrorAction"
#define RETREIVE_ERROR_ATTEMPTS "nisplusLDAPretrieveErrorAttempts"
#define RETREIVE_ERROR_TIMEOUT "nisplusLDAPretrieveErrorTimeout"
#define STORE_ERROR_ACTION "nisplusLDAPstoreErrorAction"
#define STORE_ERROR_ATTEMPTS "nisplusLDAPstoreErrorAttempts"
#define STORE_ERROR_TIMEOUT "nisplusLDAPstoreErrorTimeout"
#define REFRESH_ERROR_ACTION "nisplusLDAPrefreshErrorAction"
#define REFRESH_ERROR_ATTEMPTS "nisplusLDAPrefreshErrorAttempts"
#define REFRESH_ERROR_TIMEOUT "nisplusLDAPrefreshErrorTimeout"
#define THREAD_CREATE_ERROR_ACTION \
"nisplusThreadCreationErrorAction"
#define THREAD_CREATE_ERROR_ATTEMPTS \
"nisplusThreadCreationErrorAttempts"
#define THREAD_CREATE_ERROR_TIMEOUT \
"nisplusThreadCreationErrorTimeout"
#define DUMP_ERROR_ACTION "nisplusDumpErrorAction"
#define DUMP_ERROR_ATTEMPTS "nisplusDumpErrorAttempts"
#define DUMP_ERROR_TIMEOUT "nisplusDumpErrorTimeout"
#define RESYNC "nisplusResyncService"
#define UPDATE_BATCHING "nisplusUpdateBatching"
#define UPDATE_BATCHING_TIMEOUT "nisplusUpdateBatchingTimeout"
#define MATCH_FETCH "nisplusLDAPmatchFetchAction"
#define NUMBER_THEADS "nisplusNumberOfServiceThreads"
#define YP_EMULATION "ENABLE_NIS_YP_EMULATION"
#define MAX_RPC_RECSIZE "nisplusMaxRPCRecordSize"
#define IS_OPER_INFO(x) \
((x) >= key_initial_update_action && (x) <= key_max_rpc_recsize)
#define DB_ID_MAP "nisplusLDAPdatabaseIdMapping"
#define ENTRY_TTL "nisplusLDAPentryTtl"
#define LDAP_OBJECT_DN "nisplusLDAPobjectDN"
#define LDAP_TO_NISPLUS_MAP "nisplusLDAPcolumnFromAttribute"
#define NISPLUS_TO_LDAP_MAP "nisplusLDAPattributeFromColumn"
/* The following definitions are for NIS */
#define YP_CONFIG_DN "nisLDAPconfigDN"
#define YP_CONFIG_SERVER_LIST "nisLDAPconfigPreferredServerList"
#define YP_CONFIG_AUTH_METHOD "nisLDAPconfigAuthenticationMethod"
#define YP_CONFIG_TLS_OPTION "nisLDAPconfigTLS"
#define YP_CONFIG_TLS_CERT_DB "nisLDAPconfigTLSCertificateDBPath"
#define YP_CONFIG_PROXY_USER "nisLDAPconfigProxyUser"
#define YP_CONFIG_PROXY_PASSWD "nisLDAPconfigProxyPassword"
#define IS_YP_CONFIG_KEYWORD(x) \
((x) >= key_yp_config_dn && (x) <= key_yp_config_proxy_passwd)
#define YP_TLS_OPTION "nisLDAPTLS"
#define YP_TLS_CERT_DB "nisLDAPTLSCertificateDBPath"
#define YP_PROXY_USER "nisLDAPproxyUser"
#define YP_PROXY_PASSWD "nisLDAPproxyPassword"
#define YP_LDAP_BASE_DOMAIN "nisLDAPbaseDomain"
#define YP_BIND_TIMEOUT "nisLDAPbindTimeout"
#define YP_SEARCH_TIMEOUT "nisLDAPsearchTimeout"
#define YP_MODIFY_TIMEOUT "nisLDAPmodifyTimeout"
#define YP_ADD_TIMEOUT "nisLDAPaddTimeout"
#define YP_DELETE_TIMEOUT "nisLDAPdeleteTimeout"
#define YP_SEARCH_TIME_LIMIT "nisLDAPsearchTimeLimit"
#define YP_SEARCH_SIZE_LIMIT "nisLDAPsearchSizeLimit"
#define YP_FOLLOW_REFERRAL "nisLDAPfollowReferral"
#define IS_YP_BIND_INFO(x) \
((x) == key_preferred_servers || \
(x) == key_auth_method || \
(x) == key_search_base || \
((x) >= key_yp_tls_option && (x) <= key_yp_follow_referral))
#define YP_RETRIEVE_ERROR_ACTION "nisLDAPretrieveErrorAction"
#define YP_RETREIVE_ERROR_ATTEMPTS "nisLDAPretrieveErrorAttempts"
#define YP_RETREIVE_ERROR_TIMEOUT "nisLDAPretrieveErrorTimeout"
#define YP_STORE_ERROR_ACTION "nisLDAPstoreErrorAction"
#define YP_STORE_ERROR_ATTEMPTS "nisLDAPstoreErrorAttempts"
#define YP_STORE_ERROR_TIMEOUT "nisLDAPstoreErrorTimeout"
#define YP_MATCH_FETCH "nisLDAPmatchFetchAction"
#define IS_YP_OPER_INFO(x) \
((x) >= key_yp_retrieve_error_action && (x) <= key_yp_match_fetch)
#define YP_DOMAIN_CONTEXT "nisLDAPdomainContext"
#define YPPASSWDD_DOMAINS "nisLDAPyppasswddDomains"
#define IS_YP_DOMAIN_INFO(x) \
((x) >= key_yp_domain_context && (x) <= key_yppasswdd_domains)
#define YP_DB_ID_MAP "nisLDAPdatabaseIdMapping"
#define YP_COMMENT_CHAR "nisLDAPcommentChar"
#define YP_MAP_FLAGS "nisLDAPmapFlags"
#define YP_ENTRY_TTL "nisLDAPentryTtl"
#define YP_NAME_FIELDS "nisLDAPnameFields"
#define YP_SPLIT_FIELD "nisLDAPsplitField"
#define YP_REPEATED_FIELD_SEPARATORS "nisLDAPrepeatedFieldSeparators"
#define YP_LDAP_OBJECT_DN "nisLDAPobjectDN"
#define LDAP_TO_NIS_MAP "nisLDAPfieldFromAttribute"
#define NIS_TO_LDAP_MAP "nisLDAPattributeFromField"
#define IS_YP_MAP_ATTR(x) \
((x) == key_yp_domain_context || \
(x) == key_yppasswdd_domains || \
((x) >= key_yp_db_id_map && (x) <= key_nis_to_ldap_map))
#define DEFAULT_YP_SEARCH_TIMEOUT THREE_MINUTES
#define DEFAULT_BIND_TIMEOUT FIFTEEN_SECONDS
#define DEFAULT_SEARCH_TIMEOUT FIFTEEN_SECONDS
#define DEFAULT_MODIFY_TIMEOUT FIFTEEN_SECONDS
#define DEFAULT_ADD_TIMEOUT FIFTEEN_SECONDS
#define DEFAULT_DELETE_TIMEOUT FIFTEEN_SECONDS
#define DEFAULT_SEARCH_TIME_LIMIT LDAP_NO_LIMIT
#define DEFAULT_SEARCH_SIZE_LIMIT LDAP_NO_LIMIT
#define DEFAULT_THREAD_ERROR_ATTEMPTS FOREVER
#define DEFAULT_THREAD_ERROR_TIME_OUT FIFTEEN_SECONDS
#define DEFAULT_DUMP_ERROR_ATTEMPTS FOREVER
#define DEFAULT_DUMP_ERROR_TIME_OUT FIFTEEN_SECONDS
#define DEFAULT_RETRIEVE_ERROR_ATTEMPTS FOREVER
#define DEFAULT_RETRIEVE_ERROR_TIME_OUT FIFTEEN_SECONDS
#define DEFAULT_STORE_ERROR_ATTEMPTS FOREVER
#define DEFAULT_STORE_ERROR_TIME_OUT FIFTEEN_SECONDS
#define DEFAULT_REFRESH_ERROR_ATTEMPTS FOREVER
#define DEFAULT_REFRESH_ERROR_TIME_OUT FIFTEEN_SECONDS
#define DEFAULT_BATCHING_TIME_OUT TWO_MINUTES
#define DEFAULT_NUMBER_OF_THREADS 0
#define DEFAULT_YP_EMULATION 0
#define DEFAULT_TTL_HIGH (ONE_HOUR + THIRTY_MINUTES)
#define DEFAULT_TTL_LOW (ONE_HOUR - THIRTY_MINUTES)
#define DEFAULT_TTL ONE_HOUR
typedef enum {
no_parse_error,
parse_no_mem_error,
parse_bad_key,
parse_bad_continuation_error,
parse_line_too_long,
parse_internal_error,
parse_initial_update_action_error,
parse_initial_update_only_error,
parse_retrieve_error_action_error,
parse_store_error_action_error,
parse_refresh_error_action_error,
parse_thread_create_error_action_error,
parse_dump_error_action_error,
parse_resync_error,
parse_update_batching_error,
parse_match_fetch_error,
parse_no_object_dn,
parse_invalid_scope,
parse_invalid_ldap_search_filter,
parse_semi_expected_error,
parse_mismatched_brackets,
parse_unsupported_format,
parse_unexpected_dash,
parse_unmatched_escape,
parse_bad_lhs_format_error,
parse_comma_expected_error,
parse_equal_expected_error,
parse_close_paren_expected_error,
parse_too_many_extract_items,
parse_not_enough_extract_items,
parse_bad_print_format,
parse_bad_elide_char,
parse_start_rhs_unrecognized,
parse_item_expected_error,
parse_format_string_expected_error,
parse_unexpected_data_end_rule,
parse_bad_ttl_format_error,
parse_bad_auth_method_error,
parse_open_file_error,
parse_no_proxy_dn_error,
parse_no_config_auth_error,
parse_no_proxy_auth_error,
parse_ldap_init_error,
parse_ldap_bind_error,
parse_ldap_search_error,
parse_ldap_get_values_error,
parse_object_dn_syntax_error,
parse_invalid_dn,
parse_bad_index_format,
parse_bad_item_format,
parse_bad_ldap_item_format,
parse_invalid_print_arg,
parse_bad_extract_format_spec,
parse_no_db_del_mapping_rule,
parse_invalid_db_del_mapping_rule,
parse_bad_domain_name,
parse_bad_dn,
parse_yes_or_no_expected_error,
parse_bad_uint_error,
parse_bad_int_error,
parse_bad_command_line_attribute_format,
parse_no_ldap_server_error,
parse_bad_ber_format,
parse_no_config_server_addr,
parse_bad_time_error,
parse_lhs_rhs_type_mismatch,
parse_no_match_item,
parse_cannot_elide,
parse_bad_tls_option_error,
parse_ldapssl_client_init_error,
parse_ldapssl_init_error,
parse_no_available_referrals_error,
parse_no_config_cert_db,
parse_no_cert_db,
parse_unknown_yp_domain_error,
parse_unexpected_yp_domain_end_error,
parse_bad_map_error,
parse_bad_yp_comment_error,
parse_bad_field_separator_error,
parse_bad_name_field,
parse_yp_retrieve_error_action_error,
parse_yp_store_error_action_error
} parse_error;
typedef enum {
no_conn_error,
conn_no_mem_error,
conn_ldap_init_error,
conn_unsupported_ldap_bind_method,
conn_ldap_bind_error
} conn_error;
typedef enum {
key_bad = -1,
no_more_keys = 0,
key_config_dn = 1,
key_config_server_list,
key_config_auth_method,
key_config_tls_option,
key_config_tls_certificate_db,
key_config_proxy_user,
key_config_proxy_passwd,
key_preferred_servers,
key_auth_method,
key_tls_option,
key_tls_certificate_db,
key_search_base,
key_proxy_user,
key_proxy_passwd,
key_ldap_base_domain,
key_bind_timeout,
key_search_timeout,
key_modify_timeout,
key_add_timeout,
key_delete_timeout,
key_search_time_limit,
key_search_size_limit,
key_follow_referral,
key_initial_update_action,
key_initial_update_only,
key_retrieve_error_action,
key_retrieve_error_attempts,
key_retreive_error_timeout,
key_store_error_action,
key_store_error_attempts,
key_store_error_timeout,
key_refresh_error_action,
key_refresh_error_attempts,
key_refresh_error_timeout,
key_thread_create_error_action,
key_thread_create_error_attempts,
key_thread_create_error_timeout,
key_dump_error_action,
key_dump_error_attempts,
key_dump_error_timeout,
key_resync,
key_update_batching,
key_update_batching_timeout,
key_match_fetch,
key_number_threads,
key_yp_emulation,
key_max_rpc_recsize,
key_db_id_map,
key_entry_ttl,
key_ldap_object_dn,
key_ldap_to_nisplus_map,
key_nisplus_to_ldap_map,
key_yp_config_dn,
key_yp_config_server_list,
key_yp_config_auth_method,
key_yp_config_tls_option,
key_yp_config_tls_certificate_db,
key_yp_config_proxy_user,
key_yp_config_proxy_passwd,
key_yp_preferred_servers,
key_yp_auth_method,
key_yp_tls_option,
key_yp_tls_certificate_db,
key_yp_search_base,
key_yp_proxy_user,
key_yp_proxy_passwd,
key_yp_ldap_base_domain,
key_yp_bind_timeout,
key_yp_search_timeout,
key_yp_modify_timeout,
key_yp_add_timeout,
key_yp_delete_timeout,
key_yp_search_time_limit,
key_yp_search_size_limit,
key_yp_follow_referral,
key_yp_retrieve_error_action,
key_yp_retrieve_error_attempts,
key_yp_retreive_error_timeout,
key_yp_store_error_action,
key_yp_store_error_attempts,
key_yp_store_error_timeout,
key_yp_match_fetch,
key_yp_domain_context,
key_yppasswdd_domains,
key_yp_db_id_map,
key_yp_comment_char,
key_yp_map_flags,
key_yp_entry_ttl,
key_yp_name_fields,
key_yp_split_field,
key_yp_repeated_field_separators,
key_yp_ldap_object_dn,
key_ldap_to_nis_map,
key_nis_to_ldap_map,
n_config_keys
} config_key;
typedef enum {
string_token,
quoted_string_token,
equal_token,
comma_token,
open_paren_token,
close_paren_token,
colon_token,
no_token
} token_type;
typedef enum {
dn_no_token,
dn_semi_token,
dn_ques_token,
dn_colon_token,
dn_base_token,
dn_one_token,
dn_sub_token,
dn_text_token
} object_dn_token;
typedef enum {
dn_begin_parse,
dn_got_read_dn,
dn_got_read_q_scope,
dn_got_read_scope,
dn_got_read_q_filter,
dn_got_read_filter,
dn_got_write_colon,
dn_got_write_dn,
dn_got_write_q_scope,
dn_got_write_scope,
dn_got_write_q_filter,
dn_got_write_filter,
dn_got_delete_colon,
dn_got_delete_dsp
} parse_object_dn_state;
typedef enum {
none = 1,
simple,
cram_md5,
digest_md5
} auth_method_t;
typedef enum {
no_tls = 1,
ssl_tls
} tls_method_t;
typedef struct {
char *config_dn;
char *default_servers;
auth_method_t auth_method;
tls_method_t tls_method;
char *proxy_dn;
char *proxy_passwd;
char *tls_cert_db;
} __nis_config_info_t;
typedef enum {
follow = 1,
no_follow
} follow_referral_t;
typedef struct {
char *default_servers;
auth_method_t auth_method;
tls_method_t tls_method;
char *default_search_base;
char *proxy_dn;
char *proxy_passwd;
char *tls_cert_db;
char *default_nis_domain;
struct timeval bind_timeout;
struct timeval search_timeout;
struct timeval modify_timeout;
struct timeval add_timeout;
struct timeval delete_timeout;
int search_time_limit;
int search_size_limit;
follow_referral_t follow_referral;
} __nis_ldap_proxy_info;
extern __nisdb_table_mapping_t ldapDBTableMapping;
extern __nis_ldap_proxy_info proxyInfo;
extern __nis_table_mapping_t *ldapTableMapping;
extern int parse_ldap_migration(const char *const *cmdline_options,
const char *config_file);
extern void get_ldap_connection(LDAP **ld, time_t retry_time);
extern void free_ldap_connection(LDAP *ld);
extern void return_ldap_connection(LDAP *ld);
extern void free_ldap_connections();
extern void initialize_parse_structs(__nis_ldap_proxy_info *proxy_info,
__nis_config_t *config_info, __nisdb_table_mapping_t *table_info);
extern void initialize_yp_parse_structs(__yp_domain_context_t *ypDomains);
/* Deallocation functions */
extern void free_parse_structs(void);
extern void free_yp_domain_context(__yp_domain_context_t *domains);
extern void free_config_info(__nis_config_info_t *config_info);
extern void free_mapping_rule(__nis_mapping_rule_t *rule);
extern void free_object_dn(__nis_object_dn_t *obj_dn);
extern void free_mapping_format(__nis_mapping_format_t *fmt);
extern void free_index(__nis_index_t *index);
extern void free_mapping_item(__nis_mapping_item_t *item);
extern void free_mapping_element(__nis_mapping_element_t *e);
extern void free_mapping_sub_element(__nis_mapping_sub_element_t *sub);
extern void free_proxy_info(__nis_ldap_proxy_info *proxy_info);
extern void free_table_mapping(__nis_table_mapping_t *mapping);
/* Parser functions */
extern int read_line(int fd, char *buffer, int buflen);
extern __nis_table_mapping_t *find_table_mapping(const char *s, int len,
__nis_table_mapping_t *table_mapping);
extern int second_parser_pass(__nis_table_mapping_t **table_mapping);
extern int final_parser_pass(__nis_table_mapping_t **table_mapping,
__yp_domain_context_t *ypDomains);
extern int finish_parse(__nis_ldap_proxy_info *proxy_info,
__nis_table_mapping_t **table_mapping);
extern void set_default_values(__nis_ldap_proxy_info *proxy_info,
__nis_config_t *config_info, __nisdb_table_mapping_t *table_info);
extern int add_config_attribute(config_key attrib_num, const char *attrib_val,
int attrib_len, __nis_config_info_t *config_info);
extern int add_bind_attribute(config_key attrib_num, const char *attrib_val,
int attrib_len, __nis_ldap_proxy_info *proxy_info);
extern int add_operation_attribute(config_key attrib_num,
const char *attrib_val, int attrib_len, __nis_config_t *config_info,
__nisdb_table_mapping_t *table_info);
extern int add_mapping_attribute(config_key attrib_num, const char *attrib_val,
int attrib_len, __nis_table_mapping_t **table_mapping);
extern int add_ypdomains_attribute(config_key attrib_num,
const char *attrib_val, int attrib_len,
__yp_domain_context_t *ypDomains);
extern config_key get_attrib_num(const char *s, int n);
bool_t is_cmd_line_option(config_key a_num);
extern const char *
skip_get_dn(const char *dn, const char *end);
extern const char *get_search_triple(const char *s, const char *end_s,
__nis_search_triple_t *triple);
extern bool_t parse_index(const char *s, const char *end_s,
__nis_index_t *index);
extern bool_t add_element(__nis_mapping_element_t *e,
__nis_mapping_rlhs_t *m);
extern const char *skip_token(const char *s, const char *end_s,
token_type t);
extern const char *get_next_extract_format_item(const char *begin_fmt,
const char *end_fmt, __nis_mapping_format_t *fmt);
extern const char *get_next_print_format_item(const char *begin_fmt,
const char *end_fmt, __nis_mapping_format_t *fmt);
extern const char *get_next_token(const char **begin_token,
const char **end_token, token_type *t);
extern const char *get_next_object_dn_token(const char **begin_ret,
const char **end_ret, object_dn_token *token);
extern const char *get_ldap_filter(const char **begin, const char **end);
const char *get_ava_list(const char **begin, const char **end,
bool_t end_nisplus);
extern void init_yptol_flag();
/* Utility functions */
extern char *s_strndup_esc(const char *s, int n);
extern char *s_strndup(const char *s, int n);
extern char *s_strdup(const char *s);
extern void *s_calloc(size_t n, size_t size);
extern void *s_realloc(void *s, size_t size);
extern bool_t is_whitespace(int c);
extern bool_t contains_string(const char *s1, const char *s2);
extern const char *skip_string(const char *s1, const char *s2, int len);
extern bool_t same_string(const char *s1, const char *s2, int len);
/* Error and information reporting functions */
extern void report_error(const char *str, const char *attr);
extern void report_error2(const char *str1, const char *str2);
extern void report_info(const char *str, const char *arg);
extern void report_conn_error(conn_error e, const char *str1, const char *str2);
extern void warn_duplicate_map(const char *db_id, config_key attrib_num);
/* Validation functions */
extern bool_t validate_dn(const char *s, int len);
extern bool_t validate_ldap_filter(const char *s, const char *end);
extern int start_line_num;
extern int cur_line_num;
extern int seq_num;
extern parse_error p_error;
extern char _key_val[38];
extern const char *command_line_source;
extern const char *file_source;
extern const char *ldap_source;
extern const char *warn_file;
/* SSL and sasl-digest md5 functions */
int ldapssl_client_init(const char *certdbpath, void *certdbhandle);
const char *ldapssl_err2string(const int prerrno);
LDAP *ldapssl_init(const char *defhost, int defport, int defsecure);
int ldap_x_sasl_digest_md5_bind_s(LDAP *ld, char *user_name,
struct berval *cred,
LDAPControl **serverctrls, LDAPControl **clientctrls);
#ifdef __cplusplus
}
#endif
#endif /* _NIS_PARSE_LDAP_CONF_H */