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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _NIS_PARSE_LDAP_CONF_H 28 #define _NIS_PARSE_LDAP_CONF_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #include <lber.h> 37 #include <ldap.h> 38 #include <iso/limits_iso.h> 39 #include "ldap_parse.h" 40 #include "nisdb_ldap.h" 41 42 #define DEFAULT_MAPPING_FILE "/var/nis/NIS+LDAPmapping" 43 #define YP_DEFAULT_MAPPING_FILE "/var/yp/NISLDAPmapping" 44 #define mmt_berstring_null ((__nis_mapping_match_type_t)-1) 45 #define ESCAPE_CHAR '\\' 46 #define EQUAL_CHAR '=' 47 #define COMMA_CHAR ',' 48 #define COMMA_STRING "," 49 #define OPEN_PAREN_CHAR '(' 50 #define CLOSE_PAREN_CHAR ')' 51 #define DOUBLE_QUOTE_CHAR '"' 52 #define PERIOD_CHAR '.' 53 #define COLON_CHAR ':' 54 #define POUND_SIGN '#' 55 #define SEMI_COLON_CHAR ';' 56 #define QUESTION_MARK '?' 57 #define PLUS_SIGN '+' 58 #define PERCENT_SIGN '%' 59 #define OPEN_BRACKET '[' 60 #define CLOSE_BRACKET ']' 61 #define ASTERIX_CHAR '*' 62 #define DASH_CHAR '-' 63 #define SINGLE_QUOTE_CHAR '\'' 64 #define DEFAULT_COMMENT_CHAR '#' 65 #define DEFAULT_SEP_STRING " " 66 #define SPACE_CHAR ' ' 67 68 #define FOREVER -1 69 #define FIFTEEN_SECONDS 15 70 #define TWO_MINUTES 120 71 #define THIRTY_MINUTES 1800 72 #define THREE_MINUTES 180 73 #define ONE_HOUR 3600 74 #define MAX_LDAP_CONFIG_RETRY_TIME 60 75 76 #define NO_VALUE_SET -2 77 78 #define INITIAL_UPDATE_NO_ACTION -3 79 #define NO_INITIAL_UPDATE_NO_ACTION -4 80 #define FROM_NO_INITIAL_UPDATE -5 81 #define TO_NO_INITIAL_UPDATE -6 82 83 #define BUFSIZE 8192 84 85 #ifndef UINT32_MAX 86 #define UINT32_MAX (4294967295U) 87 #endif 88 89 #define IS_TERMINAL_CHAR(c) \ 90 ((c) == QUESTION_MARK || \ 91 (c) == EQUAL_CHAR || \ 92 (c) == COMMA_CHAR || \ 93 (c) == CLOSE_PAREN_CHAR || \ 94 (c) == COLON_CHAR || \ 95 (c) == SEMI_COLON_CHAR) 96 97 #define TIME_MAX LONG_MAX 98 #define WILL_OVERFLOW_TIME(t, d) ((t) > TIME_MAX/10 || \ 99 ((t) == TIME_MAX/10 && d > TIME_MAX % 10)) 100 101 #define LIMIT_MAX (65535) 102 #define WILL_OVERFLOW_LIMIT(t, d) ((t) > LIMIT_MAX/10 || \ 103 ((t) == LIMIT_MAX/10 && d > LIMIT_MAX % 10)) 104 105 #define WILL_OVERFLOW_INT(t, d) ((t) > INT_MAX/10 || \ 106 ((t) == INT_MAX/10 && d > INT_MAX % 10)) 107 108 /* initial configuration keywords */ 109 /* for NIS+ */ 110 #define CONFIG_DN "nisplusLDAPconfigDN" 111 #define CONFIG_SERVER_LIST "nisplusLDAPconfigPreferredServerList" 112 #define CONFIG_AUTH_METHOD "nisplusLDAPconfigAuthenticationMethod" 113 #define CONFIG_TLS_OPTION "nisplusLDAPconfigTLS" 114 #define CONFIG_TLS_CERT_DB "nisplusLDAPconfigTLSCertificateDBPath" 115 #define CONFIG_PROXY_USER "nisplusLDAPconfigProxyUser" 116 #define CONFIG_PROXY_PASSWD "nisplusLDAPconfigProxyPassword" 117 118 #define IS_CONFIG_KEYWORD(x) \ 119 ((x) >= key_config_dn && (x) <= key_config_proxy_passwd) 120 121 /* LDAP server keywords */ 122 /* for NIS+ */ 123 #define PREFERRED_SERVERS "preferredServerList" 124 #define AUTH_METHOD "authenticationMethod" 125 #define TLS_OPTION "nisplusLDAPTLS" 126 #define TLS_CERT_DB "nisplusLDAPTLSCertificateDBPath" 127 #define SEARCH_BASE "defaultSearchBase" 128 #define PROXY_USER "nisplusLDAPproxyUser" 129 #define PROXY_PASSWD "nisplusLDAPproxyPassword" 130 #define LDAP_BASE_DOMAIN "nisplusLDAPbaseDomain" 131 #define BIND_TIMEOUT "nisplusLDAPbindTimeout" 132 #define SEARCH_TIMEOUT "nisplusLDAPsearchTimeout" 133 #define MODIFY_TIMEOUT "nisplusLDAPmodifyTimeout" 134 #define ADD_TIMEOUT "nisplusLDAPaddTimeout" 135 #define DELETE_TIMEOUT "nisplusLDAPdeleteTimeout" 136 #define SEARCH_TIME_LIMIT "nisplusLDAPsearchTimeLimit" 137 #define SEARCH_SIZE_LIMIT "nisplusLDAPsearchSizeLimit" 138 #define FOLLOW_REFERRAL "nisplusLDAPfollowReferral" 139 140 #define IS_BIND_INFO(x) \ 141 ((x) >= key_preferred_servers && (x) <= key_follow_referral) 142 143 /* This information will be need to determine the server behavior */ 144 145 /* for NIS+ */ 146 #define INITIAL_UPDATE_ACTION "nisplusLDAPinitialUpdateAction" 147 #define INITIAL_UPDATE_ONLY "nisplusLDAPinitialUpdateOnly" 148 #define RETRIEVE_ERROR_ACTION "nisplusLDAPretrieveErrorAction" 149 #define RETREIVE_ERROR_ATTEMPTS "nisplusLDAPretrieveErrorAttempts" 150 #define RETREIVE_ERROR_TIMEOUT "nisplusLDAPretrieveErrorTimeout" 151 #define STORE_ERROR_ACTION "nisplusLDAPstoreErrorAction" 152 #define STORE_ERROR_ATTEMPTS "nisplusLDAPstoreErrorAttempts" 153 #define STORE_ERROR_TIMEOUT "nisplusLDAPstoreErrorTimeout" 154 #define REFRESH_ERROR_ACTION "nisplusLDAPrefreshErrorAction" 155 #define REFRESH_ERROR_ATTEMPTS "nisplusLDAPrefreshErrorAttempts" 156 #define REFRESH_ERROR_TIMEOUT "nisplusLDAPrefreshErrorTimeout" 157 #define THREAD_CREATE_ERROR_ACTION \ 158 "nisplusThreadCreationErrorAction" 159 #define THREAD_CREATE_ERROR_ATTEMPTS \ 160 "nisplusThreadCreationErrorAttempts" 161 #define THREAD_CREATE_ERROR_TIMEOUT \ 162 "nisplusThreadCreationErrorTimeout" 163 #define DUMP_ERROR_ACTION "nisplusDumpErrorAction" 164 #define DUMP_ERROR_ATTEMPTS "nisplusDumpErrorAttempts" 165 #define DUMP_ERROR_TIMEOUT "nisplusDumpErrorTimeout" 166 #define RESYNC "nisplusResyncService" 167 #define UPDATE_BATCHING "nisplusUpdateBatching" 168 #define UPDATE_BATCHING_TIMEOUT "nisplusUpdateBatchingTimeout" 169 #define MATCH_FETCH "nisplusLDAPmatchFetchAction" 170 #define NUMBER_THEADS "nisplusNumberOfServiceThreads" 171 #define YP_EMULATION "ENABLE_NIS_YP_EMULATION" 172 #define MAX_RPC_RECSIZE "nisplusMaxRPCRecordSize" 173 174 #define IS_OPER_INFO(x) \ 175 ((x) >= key_initial_update_action && (x) <= key_max_rpc_recsize) 176 177 #define DB_ID_MAP "nisplusLDAPdatabaseIdMapping" 178 #define ENTRY_TTL "nisplusLDAPentryTtl" 179 #define LDAP_OBJECT_DN "nisplusLDAPobjectDN" 180 #define LDAP_TO_NISPLUS_MAP "nisplusLDAPcolumnFromAttribute" 181 #define NISPLUS_TO_LDAP_MAP "nisplusLDAPattributeFromColumn" 182 183 /* The following definitions are for NIS */ 184 185 #define YP_CONFIG_DN "nisLDAPconfigDN" 186 #define YP_CONFIG_SERVER_LIST "nisLDAPconfigPreferredServerList" 187 #define YP_CONFIG_AUTH_METHOD "nisLDAPconfigAuthenticationMethod" 188 #define YP_CONFIG_TLS_OPTION "nisLDAPconfigTLS" 189 #define YP_CONFIG_TLS_CERT_DB "nisLDAPconfigTLSCertificateDBPath" 190 #define YP_CONFIG_PROXY_USER "nisLDAPconfigProxyUser" 191 #define YP_CONFIG_PROXY_PASSWD "nisLDAPconfigProxyPassword" 192 193 #define IS_YP_CONFIG_KEYWORD(x) \ 194 ((x) >= key_yp_config_dn && (x) <= key_yp_config_proxy_passwd) 195 196 #define YP_TLS_OPTION "nisLDAPTLS" 197 #define YP_TLS_CERT_DB "nisLDAPTLSCertificateDBPath" 198 #define YP_PROXY_USER "nisLDAPproxyUser" 199 #define YP_PROXY_PASSWD "nisLDAPproxyPassword" 200 #define YP_LDAP_BASE_DOMAIN "nisLDAPbaseDomain" 201 #define YP_BIND_TIMEOUT "nisLDAPbindTimeout" 202 #define YP_SEARCH_TIMEOUT "nisLDAPsearchTimeout" 203 #define YP_MODIFY_TIMEOUT "nisLDAPmodifyTimeout" 204 #define YP_ADD_TIMEOUT "nisLDAPaddTimeout" 205 #define YP_DELETE_TIMEOUT "nisLDAPdeleteTimeout" 206 #define YP_SEARCH_TIME_LIMIT "nisLDAPsearchTimeLimit" 207 #define YP_SEARCH_SIZE_LIMIT "nisLDAPsearchSizeLimit" 208 #define YP_FOLLOW_REFERRAL "nisLDAPfollowReferral" 209 210 #define IS_YP_BIND_INFO(x) \ 211 ((x) == key_preferred_servers || \ 212 (x) == key_auth_method || \ 213 (x) == key_search_base || \ 214 ((x) >= key_yp_tls_option && (x) <= key_yp_follow_referral)) 215 216 #define YP_RETRIEVE_ERROR_ACTION "nisLDAPretrieveErrorAction" 217 #define YP_RETREIVE_ERROR_ATTEMPTS "nisLDAPretrieveErrorAttempts" 218 #define YP_RETREIVE_ERROR_TIMEOUT "nisLDAPretrieveErrorTimeout" 219 #define YP_STORE_ERROR_ACTION "nisLDAPstoreErrorAction" 220 #define YP_STORE_ERROR_ATTEMPTS "nisLDAPstoreErrorAttempts" 221 #define YP_STORE_ERROR_TIMEOUT "nisLDAPstoreErrorTimeout" 222 #define YP_MATCH_FETCH "nisLDAPmatchFetchAction" 223 224 #define IS_YP_OPER_INFO(x) \ 225 ((x) >= key_yp_retrieve_error_action && (x) <= key_yp_match_fetch) 226 227 #define YP_DOMAIN_CONTEXT "nisLDAPdomainContext" 228 #define YPPASSWDD_DOMAINS "nisLDAPyppasswddDomains" 229 230 #define IS_YP_DOMAIN_INFO(x) \ 231 ((x) >= key_yp_domain_context && (x) <= key_yppasswdd_domains) 232 233 #define YP_DB_ID_MAP "nisLDAPdatabaseIdMapping" 234 #define YP_COMMENT_CHAR "nisLDAPcommentChar" 235 #define YP_MAP_FLAGS "nisLDAPmapFlags" 236 #define YP_ENTRY_TTL "nisLDAPentryTtl" 237 #define YP_NAME_FIELDS "nisLDAPnameFields" 238 #define YP_SPLIT_FIELD "nisLDAPsplitField" 239 #define YP_REPEATED_FIELD_SEPARATORS "nisLDAPrepeatedFieldSeparators" 240 #define YP_LDAP_OBJECT_DN "nisLDAPobjectDN" 241 #define LDAP_TO_NIS_MAP "nisLDAPfieldFromAttribute" 242 #define NIS_TO_LDAP_MAP "nisLDAPattributeFromField" 243 244 #define IS_YP_MAP_ATTR(x) \ 245 ((x) == key_yp_domain_context || \ 246 (x) == key_yppasswdd_domains || \ 247 ((x) >= key_yp_db_id_map && (x) <= key_nis_to_ldap_map)) 248 249 #define DEFAULT_YP_SEARCH_TIMEOUT THREE_MINUTES 250 #define DEFAULT_BIND_TIMEOUT FIFTEEN_SECONDS 251 #define DEFAULT_SEARCH_TIMEOUT FIFTEEN_SECONDS 252 #define DEFAULT_MODIFY_TIMEOUT FIFTEEN_SECONDS 253 #define DEFAULT_ADD_TIMEOUT FIFTEEN_SECONDS 254 #define DEFAULT_DELETE_TIMEOUT FIFTEEN_SECONDS 255 256 #define DEFAULT_SEARCH_TIME_LIMIT LDAP_NO_LIMIT 257 #define DEFAULT_SEARCH_SIZE_LIMIT LDAP_NO_LIMIT 258 259 #define DEFAULT_THREAD_ERROR_ATTEMPTS FOREVER 260 #define DEFAULT_THREAD_ERROR_TIME_OUT FIFTEEN_SECONDS 261 #define DEFAULT_DUMP_ERROR_ATTEMPTS FOREVER 262 #define DEFAULT_DUMP_ERROR_TIME_OUT FIFTEEN_SECONDS 263 #define DEFAULT_RETRIEVE_ERROR_ATTEMPTS FOREVER 264 #define DEFAULT_RETRIEVE_ERROR_TIME_OUT FIFTEEN_SECONDS 265 #define DEFAULT_STORE_ERROR_ATTEMPTS FOREVER 266 #define DEFAULT_STORE_ERROR_TIME_OUT FIFTEEN_SECONDS 267 #define DEFAULT_REFRESH_ERROR_ATTEMPTS FOREVER 268 #define DEFAULT_REFRESH_ERROR_TIME_OUT FIFTEEN_SECONDS 269 270 #define DEFAULT_BATCHING_TIME_OUT TWO_MINUTES 271 #define DEFAULT_NUMBER_OF_THREADS 0 272 #define DEFAULT_YP_EMULATION 0 273 274 #define DEFAULT_TTL_HIGH (ONE_HOUR + THIRTY_MINUTES) 275 #define DEFAULT_TTL_LOW (ONE_HOUR - THIRTY_MINUTES) 276 #define DEFAULT_TTL ONE_HOUR 277 278 typedef enum { 279 no_parse_error, 280 parse_no_mem_error, 281 parse_bad_key, 282 parse_bad_continuation_error, 283 parse_line_too_long, 284 parse_internal_error, 285 parse_initial_update_action_error, 286 parse_initial_update_only_error, 287 parse_retrieve_error_action_error, 288 parse_store_error_action_error, 289 parse_refresh_error_action_error, 290 parse_thread_create_error_action_error, 291 parse_dump_error_action_error, 292 parse_resync_error, 293 parse_update_batching_error, 294 parse_match_fetch_error, 295 parse_no_object_dn, 296 parse_invalid_scope, 297 parse_invalid_ldap_search_filter, 298 parse_semi_expected_error, 299 parse_mismatched_brackets, 300 parse_unsupported_format, 301 parse_unexpected_dash, 302 parse_unmatched_escape, 303 parse_bad_lhs_format_error, 304 parse_comma_expected_error, 305 parse_equal_expected_error, 306 parse_close_paren_expected_error, 307 parse_too_many_extract_items, 308 parse_not_enough_extract_items, 309 parse_bad_print_format, 310 parse_bad_elide_char, 311 parse_start_rhs_unrecognized, 312 parse_item_expected_error, 313 parse_format_string_expected_error, 314 parse_unexpected_data_end_rule, 315 parse_bad_ttl_format_error, 316 parse_bad_auth_method_error, 317 parse_open_file_error, 318 parse_no_proxy_dn_error, 319 parse_no_config_auth_error, 320 parse_no_proxy_auth_error, 321 parse_ldap_init_error, 322 parse_ldap_bind_error, 323 parse_ldap_search_error, 324 parse_ldap_get_values_error, 325 parse_object_dn_syntax_error, 326 parse_invalid_dn, 327 parse_bad_index_format, 328 parse_bad_item_format, 329 parse_bad_ldap_item_format, 330 parse_invalid_print_arg, 331 parse_bad_extract_format_spec, 332 parse_no_db_del_mapping_rule, 333 parse_invalid_db_del_mapping_rule, 334 parse_bad_domain_name, 335 parse_bad_dn, 336 parse_yes_or_no_expected_error, 337 parse_bad_uint_error, 338 parse_bad_int_error, 339 parse_bad_command_line_attribute_format, 340 parse_no_ldap_server_error, 341 parse_bad_ber_format, 342 parse_no_config_server_addr, 343 parse_bad_time_error, 344 parse_lhs_rhs_type_mismatch, 345 parse_no_match_item, 346 parse_cannot_elide, 347 parse_bad_tls_option_error, 348 parse_ldapssl_client_init_error, 349 parse_ldapssl_init_error, 350 parse_no_available_referrals_error, 351 parse_no_config_cert_db, 352 parse_no_cert_db, 353 parse_unknown_yp_domain_error, 354 parse_unexpected_yp_domain_end_error, 355 parse_bad_map_error, 356 parse_bad_yp_comment_error, 357 parse_bad_field_separator_error, 358 parse_bad_name_field, 359 parse_yp_retrieve_error_action_error, 360 parse_yp_store_error_action_error 361 } parse_error; 362 363 typedef enum { 364 no_conn_error, 365 conn_no_mem_error, 366 conn_ldap_init_error, 367 conn_unsupported_ldap_bind_method, 368 conn_ldap_bind_error 369 } conn_error; 370 371 typedef enum { 372 key_bad = -1, 373 no_more_keys = 0, 374 key_config_dn = 1, 375 key_config_server_list, 376 key_config_auth_method, 377 key_config_tls_option, 378 key_config_tls_certificate_db, 379 key_config_proxy_user, 380 key_config_proxy_passwd, 381 key_preferred_servers, 382 key_auth_method, 383 key_tls_option, 384 key_tls_certificate_db, 385 key_search_base, 386 key_proxy_user, 387 key_proxy_passwd, 388 key_ldap_base_domain, 389 key_bind_timeout, 390 key_search_timeout, 391 key_modify_timeout, 392 key_add_timeout, 393 key_delete_timeout, 394 key_search_time_limit, 395 key_search_size_limit, 396 key_follow_referral, 397 key_initial_update_action, 398 key_initial_update_only, 399 key_retrieve_error_action, 400 key_retrieve_error_attempts, 401 key_retreive_error_timeout, 402 key_store_error_action, 403 key_store_error_attempts, 404 key_store_error_timeout, 405 key_refresh_error_action, 406 key_refresh_error_attempts, 407 key_refresh_error_timeout, 408 key_thread_create_error_action, 409 key_thread_create_error_attempts, 410 key_thread_create_error_timeout, 411 key_dump_error_action, 412 key_dump_error_attempts, 413 key_dump_error_timeout, 414 key_resync, 415 key_update_batching, 416 key_update_batching_timeout, 417 key_match_fetch, 418 key_number_threads, 419 key_yp_emulation, 420 key_max_rpc_recsize, 421 key_db_id_map, 422 key_entry_ttl, 423 key_ldap_object_dn, 424 key_ldap_to_nisplus_map, 425 key_nisplus_to_ldap_map, 426 key_yp_config_dn, 427 key_yp_config_server_list, 428 key_yp_config_auth_method, 429 key_yp_config_tls_option, 430 key_yp_config_tls_certificate_db, 431 key_yp_config_proxy_user, 432 key_yp_config_proxy_passwd, 433 key_yp_preferred_servers, 434 key_yp_auth_method, 435 key_yp_tls_option, 436 key_yp_tls_certificate_db, 437 key_yp_search_base, 438 key_yp_proxy_user, 439 key_yp_proxy_passwd, 440 key_yp_ldap_base_domain, 441 key_yp_bind_timeout, 442 key_yp_search_timeout, 443 key_yp_modify_timeout, 444 key_yp_add_timeout, 445 key_yp_delete_timeout, 446 key_yp_search_time_limit, 447 key_yp_search_size_limit, 448 key_yp_follow_referral, 449 key_yp_retrieve_error_action, 450 key_yp_retrieve_error_attempts, 451 key_yp_retreive_error_timeout, 452 key_yp_store_error_action, 453 key_yp_store_error_attempts, 454 key_yp_store_error_timeout, 455 key_yp_match_fetch, 456 key_yp_domain_context, 457 key_yppasswdd_domains, 458 key_yp_db_id_map, 459 key_yp_comment_char, 460 key_yp_map_flags, 461 key_yp_entry_ttl, 462 key_yp_name_fields, 463 key_yp_split_field, 464 key_yp_repeated_field_separators, 465 key_yp_ldap_object_dn, 466 key_ldap_to_nis_map, 467 key_nis_to_ldap_map, 468 n_config_keys 469 } config_key; 470 471 typedef enum { 472 string_token, 473 quoted_string_token, 474 equal_token, 475 comma_token, 476 open_paren_token, 477 close_paren_token, 478 colon_token, 479 no_token 480 } token_type; 481 482 typedef enum { 483 dn_no_token, 484 dn_semi_token, 485 dn_ques_token, 486 dn_colon_token, 487 dn_base_token, 488 dn_one_token, 489 dn_sub_token, 490 dn_text_token 491 } object_dn_token; 492 493 typedef enum { 494 dn_begin_parse, 495 dn_got_read_dn, 496 dn_got_read_q_scope, 497 dn_got_read_scope, 498 dn_got_read_q_filter, 499 dn_got_read_filter, 500 dn_got_write_colon, 501 dn_got_write_dn, 502 dn_got_write_q_scope, 503 dn_got_write_scope, 504 dn_got_write_q_filter, 505 dn_got_write_filter, 506 dn_got_delete_colon, 507 dn_got_delete_dsp 508 } parse_object_dn_state; 509 510 typedef enum { 511 none = 1, 512 simple, 513 cram_md5, 514 digest_md5 515 } auth_method_t; 516 517 typedef enum { 518 no_tls = 1, 519 ssl_tls 520 } tls_method_t; 521 522 typedef struct { 523 char *config_dn; 524 char *default_servers; 525 auth_method_t auth_method; 526 tls_method_t tls_method; 527 char *proxy_dn; 528 char *proxy_passwd; 529 char *tls_cert_db; 530 } __nis_config_info_t; 531 532 typedef enum { 533 follow = 1, 534 no_follow 535 } follow_referral_t; 536 537 typedef struct { 538 char *default_servers; 539 auth_method_t auth_method; 540 tls_method_t tls_method; 541 char *default_search_base; 542 char *proxy_dn; 543 char *proxy_passwd; 544 char *tls_cert_db; 545 char *default_nis_domain; 546 struct timeval bind_timeout; 547 struct timeval search_timeout; 548 struct timeval modify_timeout; 549 struct timeval add_timeout; 550 struct timeval delete_timeout; 551 int search_time_limit; 552 int search_size_limit; 553 follow_referral_t follow_referral; 554 } __nis_ldap_proxy_info; 555 556 extern __nisdb_table_mapping_t ldapDBTableMapping; 557 extern __nis_ldap_proxy_info proxyInfo; 558 extern __nis_table_mapping_t *ldapTableMapping; 559 560 extern int parse_ldap_migration(const char *const *cmdline_options, 561 const char *config_file); 562 563 extern void get_ldap_connection(LDAP **ld, time_t retry_time); 564 extern void free_ldap_connection(LDAP *ld); 565 extern void return_ldap_connection(LDAP *ld); 566 extern void free_ldap_connections(); 567 568 569 extern void initialize_parse_structs(__nis_ldap_proxy_info *proxy_info, 570 __nis_config_t *config_info, __nisdb_table_mapping_t *table_info); 571 extern void initialize_yp_parse_structs(__yp_domain_context_t *ypDomains); 572 573 /* Deallocation functions */ 574 extern void free_parse_structs(void); 575 extern void free_yp_domain_context(__yp_domain_context_t *domains); 576 extern void free_config_info(__nis_config_info_t *config_info); 577 extern void free_mapping_rule(__nis_mapping_rule_t *rule); 578 extern void free_object_dn(__nis_object_dn_t *obj_dn); 579 extern void free_mapping_format(__nis_mapping_format_t *fmt); 580 extern void free_index(__nis_index_t *index); 581 extern void free_mapping_item(__nis_mapping_item_t *item); 582 extern void free_mapping_element(__nis_mapping_element_t *e); 583 extern void free_mapping_sub_element(__nis_mapping_sub_element_t *sub); 584 extern void free_proxy_info(__nis_ldap_proxy_info *proxy_info); 585 extern void free_table_mapping(__nis_table_mapping_t *mapping); 586 587 /* Parser functions */ 588 extern int read_line(int fd, char *buffer, int buflen); 589 extern __nis_table_mapping_t *find_table_mapping(const char *s, int len, 590 __nis_table_mapping_t *table_mapping); 591 extern int second_parser_pass(__nis_table_mapping_t **table_mapping); 592 extern int final_parser_pass(__nis_table_mapping_t **table_mapping, 593 __yp_domain_context_t *ypDomains); 594 extern int finish_parse(__nis_ldap_proxy_info *proxy_info, 595 __nis_table_mapping_t **table_mapping); 596 extern void set_default_values(__nis_ldap_proxy_info *proxy_info, 597 __nis_config_t *config_info, __nisdb_table_mapping_t *table_info); 598 599 extern int add_config_attribute(config_key attrib_num, const char *attrib_val, 600 int attrib_len, __nis_config_info_t *config_info); 601 extern int add_bind_attribute(config_key attrib_num, const char *attrib_val, 602 int attrib_len, __nis_ldap_proxy_info *proxy_info); 603 extern int add_operation_attribute(config_key attrib_num, 604 const char *attrib_val, int attrib_len, __nis_config_t *config_info, 605 __nisdb_table_mapping_t *table_info); 606 extern int add_mapping_attribute(config_key attrib_num, const char *attrib_val, 607 int attrib_len, __nis_table_mapping_t **table_mapping); 608 extern int add_ypdomains_attribute(config_key attrib_num, 609 const char *attrib_val, int attrib_len, 610 __yp_domain_context_t *ypDomains); 611 extern config_key get_attrib_num(const char *s, int n); 612 bool_t is_cmd_line_option(config_key a_num); 613 614 extern const char * 615 skip_get_dn(const char *dn, const char *end); 616 extern const char *get_search_triple(const char *s, const char *end_s, 617 __nis_search_triple_t *triple); 618 extern bool_t parse_index(const char *s, const char *end_s, 619 __nis_index_t *index); 620 extern bool_t add_element(__nis_mapping_element_t *e, 621 __nis_mapping_rlhs_t *m); 622 extern const char *skip_token(const char *s, const char *end_s, 623 token_type t); 624 extern const char *get_next_extract_format_item(const char *begin_fmt, 625 const char *end_fmt, __nis_mapping_format_t *fmt); 626 extern const char *get_next_print_format_item(const char *begin_fmt, 627 const char *end_fmt, __nis_mapping_format_t *fmt); 628 extern const char *get_next_token(const char **begin_token, 629 const char **end_token, token_type *t); 630 extern const char *get_next_object_dn_token(const char **begin_ret, 631 const char **end_ret, object_dn_token *token); 632 extern const char *get_ldap_filter(const char **begin, const char **end); 633 const char *get_ava_list(const char **begin, const char **end, 634 bool_t end_nisplus); 635 636 extern void init_yptol_flag(); 637 /* Utility functions */ 638 extern char *s_strndup_esc(const char *s, int n); 639 extern char *s_strndup(const char *s, int n); 640 extern char *s_strdup(const char *s); 641 extern void *s_calloc(size_t n, size_t size); 642 extern void *s_realloc(void *s, size_t size); 643 extern bool_t is_whitespace(int c); 644 extern bool_t contains_string(const char *s1, const char *s2); 645 extern const char *skip_string(const char *s1, const char *s2, int len); 646 extern bool_t same_string(const char *s1, const char *s2, int len); 647 648 /* Error and information reporting functions */ 649 extern void report_error(const char *str, const char *attr); 650 extern void report_error2(const char *str1, const char *str2); 651 extern void report_info(const char *str, const char *arg); 652 extern void report_conn_error(conn_error e, const char *str1, const char *str2); 653 extern void warn_duplicate_map(const char *db_id, config_key attrib_num); 654 655 /* Validation functions */ 656 extern bool_t validate_dn(const char *s, int len); 657 extern bool_t validate_ldap_filter(const char *s, const char *end); 658 659 extern int start_line_num; 660 extern int cur_line_num; 661 extern int seq_num; 662 extern parse_error p_error; 663 extern char _key_val[38]; 664 extern const char *command_line_source; 665 extern const char *file_source; 666 extern const char *ldap_source; 667 extern const char *warn_file; 668 669 /* SSL and sasl-digest md5 functions */ 670 int ldapssl_client_init(const char *certdbpath, void *certdbhandle); 671 const char *ldapssl_err2string(const int prerrno); 672 LDAP *ldapssl_init(const char *defhost, int defport, int defsecure); 673 int ldap_x_sasl_digest_md5_bind_s(LDAP *ld, char *user_name, 674 struct berval *cred, 675 LDAPControl **serverctrls, LDAPControl **clientctrls); 676 677 #ifdef __cplusplus 678 } 679 #endif 680 681 #endif /* _NIS_PARSE_LDAP_CONF_H */ 682