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 (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 27 #ifndef _NS_SLDAP_H 28 #define _NS_SLDAP_H 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #include <stdio.h> 35 #include <sys/types.h> 36 #include <lber.h> 37 #include <ldap.h> 38 39 /* 40 * Version 41 */ 42 #define NS_LDAP_VERSION NS_LDAP_VERSION_2 43 #define NS_LDAP_VERSION_1 "1.0" 44 #define NS_LDAP_VERSION_2 "2.0" 45 46 /* 47 * Flags 48 */ 49 #define NS_LDAP_HARD 0x001 50 #define NS_LDAP_ALL_RES 0x002 51 52 /* Search Referral Option */ 53 typedef enum SearchRef { 54 NS_LDAP_FOLLOWREF = 0x004, 55 NS_LDAP_NOREF = 0x008 56 } SearchRef_t; 57 58 typedef enum ScopeType { 59 NS_LDAP_SCOPE_BASE = 0x010, 60 NS_LDAP_SCOPE_ONELEVEL = 0x020, 61 NS_LDAP_SCOPE_SUBTREE = 0x040 62 } ScopeType_t; 63 64 /* 65 * BE VERY CAREFUL. DO NOT USE FLAG NS_LDAP_KEEP_CONN UNLESS YOU MUST 66 * IN libsldap.so.1 THERE IS NO CONNECTION GARBAGE COLLECTION AND IF 67 * THIS FLAG GETS USED THERE MIGHT BE A CONNECTION LEAK. CURRENTLY THIS 68 * IS ONLY SUPPORTED FOR LIST AND INTENDED FOR APPLICATIONS LIKE AUTOMOUNTER 69 */ 70 71 #define NS_LDAP_KEEP_CONN 0x080 72 #define NS_LDAP_NEW_CONN 0x400 73 #define NS_LDAP_NOMAP 0x800 74 75 #define NS_LDAP_PAGE_CTRL 0x1000 76 #define NS_LDAP_NO_PAGE_CTRL 0x0000 77 78 /* 79 * NS_LDAP_NOT_CVT_DN is needed when attribute mapping is used 80 * to retrieve the DN in LDAP and DN is not to be converted when 81 * being passed back to the application. See __ns_ldap_uid2dn() 82 * and __ns_ldap_host2dn() for such usage. 83 */ 84 #define NS_LDAP_NOT_CVT_DN 0x2000 85 86 /* 87 * NS_LDAP_UPDATE_SHADOW is for a privileged caller of the 88 * __ns_ldap_repAttr() to update the shadow database on the 89 * LDAP server. 90 */ 91 #define NS_LDAP_UPDATE_SHADOW 0x4000 92 93 /* 94 * Authentication Information 95 */ 96 typedef enum CredLevel { 97 NS_LDAP_CRED_ANON = 0, 98 NS_LDAP_CRED_PROXY = 1, 99 NS_LDAP_CRED_SELF = 2 100 } CredLevel_t; 101 102 typedef enum AuthType { 103 NS_LDAP_AUTH_NONE = 0, 104 NS_LDAP_AUTH_SIMPLE = 1, 105 NS_LDAP_AUTH_SASL = 2, 106 NS_LDAP_AUTH_TLS = 3, /* implied SASL usage */ 107 NS_LDAP_AUTH_ATLS = 4 /* implied SASL usage */ 108 } AuthType_t; 109 110 typedef enum TlsType { 111 NS_LDAP_TLS_NONE = 0, 112 NS_LDAP_TLS_SIMPLE = 1, 113 NS_LDAP_TLS_SASL = 2 114 } TlsType_t; 115 116 typedef enum SaslMech { 117 NS_LDAP_SASL_NONE = 0, /* No SASL mechanism */ 118 NS_LDAP_SASL_CRAM_MD5 = 1, 119 NS_LDAP_SASL_DIGEST_MD5 = 2, 120 NS_LDAP_SASL_EXTERNAL = 3, /* currently not supported */ 121 NS_LDAP_SASL_GSSAPI = 4, 122 NS_LDAP_SASL_SPNEGO = 5 /* currently not supported */ 123 } SaslMech_t; 124 125 typedef enum SaslOpt { 126 NS_LDAP_SASLOPT_NONE = 0, 127 NS_LDAP_SASLOPT_INT = 1, 128 NS_LDAP_SASLOPT_PRIV = 2 129 } SaslOpt_t; 130 131 typedef enum PrefOnly { 132 NS_LDAP_PREF_FALSE = 0, 133 NS_LDAP_PREF_TRUE = 1 134 } PrefOnly_t; 135 136 typedef enum enableShadowUpdate { 137 NS_LDAP_ENABLE_SHADOW_UPDATE_FALSE = 0, 138 NS_LDAP_ENABLE_SHADOW_UPDATE_TRUE = 1 139 } enableShadowUpdate_t; 140 141 typedef struct UnixCred { 142 char *userID; /* Unix ID number */ 143 char *passwd; /* password */ 144 } UnixCred_t; 145 146 typedef struct CertCred { 147 char *path; /* certificate path */ 148 char *passwd; /* password */ 149 char *nickname; /* nickname */ 150 } CertCred_t; 151 152 typedef struct ns_auth { 153 AuthType_t type; 154 TlsType_t tlstype; 155 SaslMech_t saslmech; 156 SaslOpt_t saslopt; 157 } ns_auth_t; 158 159 typedef struct ns_cred { 160 ns_auth_t auth; 161 char *hostcertpath; 162 union { 163 UnixCred_t unix_cred; 164 CertCred_t cert_cred; 165 } cred; 166 } ns_cred_t; 167 168 169 typedef struct LineBuf { 170 char *str; 171 int len; 172 int alloc; 173 } LineBuf; 174 175 /* 176 * Configuration Information 177 */ 178 179 typedef enum { 180 NS_LDAP_FILE_VERSION_P = 0, 181 NS_LDAP_BINDDN_P = 1, 182 NS_LDAP_BINDPASSWD_P = 2, 183 NS_LDAP_SERVERS_P = 3, 184 NS_LDAP_SEARCH_BASEDN_P = 4, 185 NS_LDAP_AUTH_P = 5, 186 /* 187 * NS_LDAP_TRANSPORT_SEC_P is only left in for backward compatibility 188 * with version 1 clients and their configuration files. The only 189 * supported value is NS_LDAP_SEC_NONE. No application should be 190 * using this parameter type (either through getParam or setParam. 191 */ 192 NS_LDAP_TRANSPORT_SEC_P = 6, 193 NS_LDAP_SEARCH_REF_P = 7, 194 NS_LDAP_DOMAIN_P = 8, 195 NS_LDAP_EXP_P = 9, 196 NS_LDAP_CERT_PATH_P = 10, 197 NS_LDAP_CERT_PASS_P = 11, 198 NS_LDAP_SEARCH_DN_P = 12, 199 NS_LDAP_SEARCH_SCOPE_P = 13, 200 NS_LDAP_SEARCH_TIME_P = 14, 201 NS_LDAP_SERVER_PREF_P = 15, 202 NS_LDAP_PREF_ONLY_P = 16, 203 NS_LDAP_CACHETTL_P = 17, 204 NS_LDAP_PROFILE_P = 18, 205 NS_LDAP_CREDENTIAL_LEVEL_P = 19, 206 NS_LDAP_SERVICE_SEARCH_DESC_P = 20, 207 NS_LDAP_BIND_TIME_P = 21, 208 NS_LDAP_ATTRIBUTEMAP_P = 22, 209 NS_LDAP_OBJECTCLASSMAP_P = 23, 210 NS_LDAP_CERT_NICKNAME_P = 24, 211 NS_LDAP_SERVICE_AUTH_METHOD_P = 25, 212 NS_LDAP_SERVICE_CRED_LEVEL_P = 26, 213 NS_LDAP_HOST_CERTPATH_P = 27, 214 NS_LDAP_ENABLE_SHADOW_UPDATE_P = 28, 215 NS_LDAP_ADMIN_BINDDN_P = 29, 216 NS_LDAP_ADMIN_BINDPASSWD_P = 30, 217 /* 218 * The following entry (max ParamIndexType) is an internal 219 * placeholder. It must be the last (and highest value) 220 * entry in this eNum. Please update accordingly. 221 */ 222 NS_LDAP_MAX_PIT_P = 31 223 224 } ParamIndexType; 225 226 /* 227 * NONE - No self / SASL/GSSAPI configured 228 * ONLY - Only self / SASL/GSSAPI configured 229 * MIXED - self / SASL/GSSAPI is mixed with other types of configuration 230 */ 231 typedef enum { 232 NS_LDAP_SELF_GSSAPI_CONFIG_NONE = 0, 233 NS_LDAP_SELF_GSSAPI_CONFIG_ONLY = 1, 234 NS_LDAP_SELF_GSSAPI_CONFIG_MIXED = 2 235 } ns_ldap_self_gssapi_config_t; 236 237 /* 238 * __ns_ldap_*() return codes 239 */ 240 typedef enum { 241 NS_LDAP_SUCCESS = 0, /* success, no info in errorp */ 242 NS_LDAP_OP_FAILED = 1, /* failed operation, no info in errorp */ 243 NS_LDAP_NOTFOUND = 2, /* entry not found, no info in errorp */ 244 NS_LDAP_MEMORY = 3, /* memory failure, no info in errorp */ 245 NS_LDAP_CONFIG = 4, /* config problem, detail in errorp */ 246 NS_LDAP_PARTIAL = 5, /* partial result, detail in errorp */ 247 NS_LDAP_INTERNAL = 7, /* LDAP error, detail in errorp */ 248 NS_LDAP_INVALID_PARAM = 8, /* LDAP error, no info in errorp */ 249 NS_LDAP_SUCCESS_WITH_INFO 250 = 9 /* success, with info in errorp */ 251 } ns_ldap_return_code; 252 253 /* 254 * Detailed error code for NS_LDAP_CONFIG 255 */ 256 typedef enum { 257 NS_CONFIG_SYNTAX = 0, /* syntax error */ 258 NS_CONFIG_NODEFAULT = 1, /* no default value */ 259 NS_CONFIG_NOTLOADED = 2, /* configuration not loaded */ 260 NS_CONFIG_NOTALLOW = 3, /* operation requested not allowed */ 261 NS_CONFIG_FILE = 4, /* configuration file problem */ 262 NS_CONFIG_CACHEMGR = 5 /* error with door to ldap_cachemgr */ 263 } ns_ldap_config_return_code; 264 265 /* 266 * Detailed error code for NS_LDAP_PARTIAL 267 */ 268 typedef enum { 269 NS_PARTIAL_TIMEOUT = 0, /* partial results due to timeout */ 270 NS_PARTIAL_OTHER = 1 /* error encountered */ 271 } ns_ldap_partial_return_code; 272 273 /* 274 * For use by __ns_ldap_addTypedEntry() for publickey serivicetype 275 */ 276 typedef enum { 277 NS_HOSTCRED_FALSE = 0, 278 NS_HOSTCRED_TRUE = 1 279 } hostcred_t; 280 281 /* 282 * Detailed password status 283 */ 284 typedef enum { 285 NS_PASSWD_GOOD = 0, /* password is good */ 286 NS_PASSWD_ABOUT_TO_EXPIRE = 1, /* password is good but */ 287 /* about to expire */ 288 NS_PASSWD_CHANGE_NEEDED = 2, /* good but need to be */ 289 /* changed immediately */ 290 NS_PASSWD_EXPIRED = 3, /* password expired */ 291 NS_PASSWD_RETRY_EXCEEDED = 4, /* exceed retry limit; */ 292 /* account is locked */ 293 NS_PASSWD_CHANGE_NOT_ALLOWED = 5, /* can only be changed */ 294 /* by the administrator */ 295 NS_PASSWD_INVALID_SYNTAX = 6, /* can not be changed: */ 296 /* new password has */ 297 /* invalid syntax -- */ 298 /* trivial password: same */ 299 /* value as attr, cn, sn, */ 300 /* uid, etc. */ 301 /* or strong password */ 302 /* policies check */ 303 NS_PASSWD_TOO_SHORT = 7, /* can not be changed: */ 304 /* new password has */ 305 /* less chars than */ 306 /* required */ 307 NS_PASSWD_IN_HISTORY = 8, /* can not be changed: */ 308 /* reuse old password */ 309 NS_PASSWD_WITHIN_MIN_AGE = 9 /* can not be changed: */ 310 /* within minimum age */ 311 } ns_ldap_passwd_status_t; 312 313 /* 314 * Password management information structure 315 * 316 * This structure is different from AcctUsableResponse_t structure in 317 * that this structure holds result of users account mgmt information when 318 * an ldap bind is done with user name and user password. 319 */ 320 typedef struct ns_ldap_passwd_mgmt { 321 ns_ldap_passwd_status_t 322 status; /* password status */ 323 int sec_until_expired; /* seconds until expired, */ 324 /* valid if status is */ 325 /* NS_PASSWD_ABOUT_TO_EXPIRE */ 326 } ns_ldap_passwd_mgmt_t; 327 328 /* 329 * LDAP V3 control flag for account management - Used for account management 330 * when no password is provided 331 */ 332 #define NS_LDAP_ACCOUNT_USABLE_CONTROL "1.3.6.1.4.1.42.2.27.9.5.8" 333 334 /* 335 * Structure for holding the response returned by server for 336 * NS_LDAP_ACCOUNT_USABLE_CONTROL control when account is not available. 337 */ 338 typedef struct AcctUsableMoreInfo { 339 int inactive; 340 int reset; 341 int expired; 342 int rem_grace; 343 int sec_b4_unlock; 344 } AcctUsableMoreInfo_t; 345 346 /* 347 * Structure used to hold the response from the server for 348 * NS_LDAP_ACCOUNT_USABLE_CONTROL control. The ASN1 notation is as below: 349 * 350 * ACCOUNT_USABLE_RESPONSE::= CHOICE { 351 * is_available [0] INTEGER, seconds before expiration 352 * is_not_available [1] More_info 353 * } 354 * 355 * More_info::= SEQUENCE { 356 * inactive [0] BOOLEAN DEFAULT FALSE, 357 * reset [1] BOOLEAN DEFAULT FALSE, 358 * expired [2] BOOLEAN DEFAULT FALSE, 359 * remaining_grace [3] INTEGER OPTIONAL, 360 * seconds_before_unlock[4] INTEGER OPTIONAL 361 * } 362 * 363 * This structure is different from ns_ldap_passwd_mgmt_t structure in 364 * that this structure holds result of users account mgmt information when 365 * pam_ldap doesn't have the users password and proxy agent is used for 366 * obtaining the account management information. 367 */ 368 typedef struct AcctUsableResponse { 369 int choice; 370 union { 371 int seconds_before_expiry; 372 AcctUsableMoreInfo_t more_info; 373 } AcctUsableResp; 374 } AcctUsableResponse_t; 375 376 /* 377 * Simplified LDAP Naming API result structure 378 */ 379 typedef struct ns_ldap_error { 380 int status; /* LDAP error code */ 381 char *message; /* LDAP error message */ 382 ns_ldap_passwd_mgmt_t pwd_mgmt; /* LDAP password */ 383 /* management info */ 384 } ns_ldap_error_t; 385 386 typedef struct ns_ldap_attr { 387 char *attrname; /* attribute name */ 388 uint_t value_count; 389 char **attrvalue; /* attribute values */ 390 } ns_ldap_attr_t; 391 392 typedef struct ns_ldap_entry { 393 uint_t attr_count; /* number of attributes */ 394 ns_ldap_attr_t **attr_pair; /* attributes pairs */ 395 struct ns_ldap_entry *next; /* next entry */ 396 } ns_ldap_entry_t; 397 398 typedef struct ns_ldap_result { 399 uint_t entries_count; /* number of entries */ 400 ns_ldap_entry_t *entry; /* data */ 401 } ns_ldap_result_t; 402 403 /* 404 * structures for the conversion routines used by typedAddEntry() 405 */ 406 407 typedef struct _ns_netgroups { 408 char *name; 409 char **triplet; 410 char **netgroup; 411 } _ns_netgroups_t; 412 413 typedef struct _ns_netmasks { 414 char *netnumber; 415 char *netmask; 416 } _ns_netmasks_t; 417 418 typedef struct _ns_bootp { 419 char *name; 420 char **param; 421 } _ns_bootp_t; 422 423 typedef struct _ns_ethers { 424 char *name; 425 char *ether; 426 } _ns_ethers_t; 427 428 typedef struct _ns_pubkey { 429 char *name; 430 hostcred_t hostcred; 431 char *pubkey; 432 char *privkey; 433 } _ns_pubkey_t; 434 435 typedef struct _ns_alias { 436 char *alias; 437 char **member; 438 } _ns_alias_t; 439 440 typedef struct _ns_automount { 441 char *mapname; 442 char *key; 443 char *value; 444 } _ns_automount_t; 445 446 /* 447 * return values for the callback function in __ns_ldap_list() 448 */ 449 #define NS_LDAP_CB_NEXT 0 /* get the next entry */ 450 #define NS_LDAP_CB_DONE 1 /* done */ 451 452 /* 453 * Input values for the type specified in __ns_ldap_addTypedEntry() 454 * and __ns_ldap_delTypedEntry() 455 */ 456 457 #define NS_LDAP_TYPE_PASSWD "passwd" 458 #define NS_LDAP_TYPE_GROUP "group" 459 #define NS_LDAP_TYPE_HOSTS "hosts" 460 #define NS_LDAP_TYPE_IPNODES "ipnodes" 461 #define NS_LDAP_TYPE_PROFILE "prof_attr" 462 #define NS_LDAP_TYPE_RPC "rpc" 463 #define NS_LDAP_TYPE_PROTOCOLS "protocols" 464 #define NS_LDAP_TYPE_NETWORKS "networks" 465 #define NS_LDAP_TYPE_NETGROUP "netgroup" 466 #define NS_LDAP_TYPE_ALIASES "aliases" 467 #define NS_LDAP_TYPE_SERVICES "services" 468 #define NS_LDAP_TYPE_ETHERS "ethers" 469 #define NS_LDAP_TYPE_SHADOW "shadow" 470 #define NS_LDAP_TYPE_NETMASKS "netmasks" 471 #define NS_LDAP_TYPE_AUTHATTR "auth_attr" 472 #define NS_LDAP_TYPE_EXECATTR "exec_attr" 473 #define NS_LDAP_TYPE_USERATTR "user_attr" 474 #define NS_LDAP_TYPE_PROJECT "project" 475 #define NS_LDAP_TYPE_PUBLICKEY "publickey" 476 #define NS_LDAP_TYPE_AUUSER "audit_user" 477 #define NS_LDAP_TYPE_BOOTPARAMS "bootparams" 478 #define NS_LDAP_TYPE_AUTOMOUNT "auto_" 479 #define NS_LDAP_TYPE_TNRHDB "tnrhdb" 480 #define NS_LDAP_TYPE_TNRHTP "tnrhtp" 481 482 /* 483 * service descriptor/attribute mapping structure 484 */ 485 486 typedef struct ns_ldap_search_desc { 487 char *basedn; /* search base dn */ 488 ScopeType_t scope; /* search scope */ 489 char *filter; /* search filter */ 490 } ns_ldap_search_desc_t; 491 492 typedef struct ns_ldap_attribute_map { 493 char *origAttr; /* original attribute */ 494 char **mappedAttr; /* mapped attribute(s) */ 495 } ns_ldap_attribute_map_t; 496 497 typedef struct ns_ldap_objectclass_map { 498 char *origOC; /* original objectclass */ 499 char *mappedOC; /* mapped objectclass */ 500 } ns_ldap_objectclass_map_t; 501 502 /* 503 * Value of the userPassword attribute representing NO Unix password 504 */ 505 #define NS_LDAP_NO_UNIX_PASSWORD "<NO UNIX PASSWORD>" 506 507 /* Opaque handle for batch API */ 508 typedef struct ns_ldap_list_batch ns_ldap_list_batch_t; 509 510 /* 511 * The type of standalone configuration specified by a client application. 512 * The meaning of the requests is as follows: 513 * 514 * NS_CACHEMGR: libsldap will request all the configuration via door_call(3C) 515 * to ldap_cachemgr. 516 * NS_LDAP_SERVER: the consumer application has specified a directory server 517 * to communicate to. 518 * NS_PREDEFINED: reserved for internal use 519 */ 520 typedef enum { 521 NS_CACHEMGR = 0, 522 NS_LDAP_SERVER 523 } ns_standalone_request_type_t; 524 525 /* 526 * This structure describes an LDAP server specified by a client application. 527 */ 528 typedef struct ns_dir_server { 529 char *server; /* A directory server's IP */ 530 uint16_t port; /* A directory server's port. */ 531 /* Default value is 389 */ 532 char *domainName; /* A domain name being served */ 533 /* by the specified server. */ 534 /* Default value is the local */ 535 /* domain's name */ 536 char *profileName; /* A DUAProfile's name. */ 537 /* Default value is 'default' */ 538 ns_auth_t *auth; /* Authentication information used */ 539 /* during subsequent connections */ 540 char *cred; /* A credential level to be used */ 541 /* along with the authentication info */ 542 char *host_cert_path; /* A path to the certificate database */ 543 /* Default is '/vat/ldap' */ 544 char *bind_dn; /* A bind DN to be used during */ 545 /* subsequent LDAP Bind requests */ 546 char *bind_passwd; /* A bind password to be used during */ 547 /* subsequent LDAP Bind requests */ 548 } ns_dir_server_t; 549 550 /* 551 * This structure contains information describing an LDAP server. 552 */ 553 typedef struct ns_standalone_conf { 554 union { 555 ns_dir_server_t server; 556 void *predefined_conf; /* Reserved for internal use */ 557 } ds_profile; /* A type of the configuration */ 558 559 #define SA_SERVER ds_profile.server.server 560 #define SA_PORT ds_profile.server.port 561 #define SA_DOMAIN ds_profile.server.domainName 562 #define SA_PROFILE_NAME ds_profile.server.profileName 563 #define SA_AUTH ds_profile.server.auth 564 #define SA_CRED ds_profile.server.cred 565 #define SA_CERT_PATH ds_profile.server.host_cert_path 566 #define SA_BIND_DN ds_profile.server.bind_dn 567 #define SA_BIND_PWD ds_profile.server.bind_passwd 568 569 ns_standalone_request_type_t type; 570 } ns_standalone_conf_t; 571 572 /* 573 * This function "informs" libsldap that a client application has specified 574 * a directory to use. The function obtains a DUAProfile, credentials, 575 * and naming context. During all further operations on behalf 576 * of the application requested a standalone schema libsldap will use 577 * the information obtained by __ns_ldap_initStandalone() instead of 578 * door_call(3C)ing ldap_cachemgr(1M). 579 * 580 * conf 581 * A structure describing where and in which way to obtain all the 582 * configuration describing how to communicate to a choosen LDAP directory. 583 * 584 * errorp 585 * An error object describing an error occured. 586 */ 587 ns_ldap_return_code __ns_ldap_initStandalone( 588 const ns_standalone_conf_t *conf, 589 ns_ldap_error_t **errorp); 590 591 /* 592 * This function obtains the directory's base DN and a DUAProfile 593 * from a specified server. 594 * 595 * server 596 * Specifies the selected directory sever. 597 * 598 * cred 599 * Contains an authentication information and credential required to 600 * establish a connection. 601 * 602 * config 603 * If not NULL, a new configuration basing on a DUAProfile specified in the 604 * server parameter will be create and returned. 605 * 606 * baseDN 607 * If not NULL, the directory's base DN will be returned. 608 * 609 * error 610 * Describes an error, if any. 611 */ 612 ns_ldap_return_code __ns_ldap_getConnectionInfoFromDUA( 613 const ns_dir_server_t *server, 614 const ns_cred_t *cred, 615 char **config, char **baseDN, 616 ns_ldap_error_t **error); 617 618 #define SA_PROHIBIT_FALLBACK 0 619 #define SA_ALLOW_FALLBACK 1 620 621 #define DONT_SAVE_NSCONF 0 622 #define SAVE_NSCONF 1 623 624 /* 625 * This function obtains the root DSE from a specified server. 626 * 627 * server_addr 628 * An adress of a server to be connected to. 629 * 630 * rootDSE 631 * A buffer containing the root DSE in the ldap_cachmgr door call format. 632 * 633 * errorp 634 * Describes an error, if any. 635 * 636 * anon_fallback 637 * If set to 1 and establishing a connection fails, __s_api_getRootDSE() 638 * will try once again using anonymous credentials. 639 */ 640 ns_ldap_return_code __ns_ldap_getRootDSE( 641 const char *server_addr, 642 char **rootDSE, 643 ns_ldap_error_t **errorp, 644 int anon_fallback); 645 646 /* 647 * This function iterates through the list of the configured LDAP servers 648 * and "pings" those which are marked as removed or if any error occurred 649 * during the previous receiving of the server's root DSE. If the 650 * function is able to reach such a server and get its root DSE, it 651 * marks the server as on-line. Otherwise, the server's status is set 652 * to "Error". 653 * For each server the function tries to connect to, it fires up 654 * a separate thread and then waits until all the threads finish. 655 * The function returns NS_LDAP_INTERNAL if the Standalone mode was not 656 * initialized or was canceled prior to an invocation of 657 * __ns_ldap_pingOfflineServers(). 658 */ 659 ns_ldap_return_code __ns_ldap_pingOfflineServers(void); 660 661 /* 662 * This function cancels the Standalone mode and destroys the list of root DSEs. 663 */ 664 void __ns_ldap_cancelStandalone(void); 665 /* 666 * This function initializes an ns_auth_t structure provided by a caller 667 * according to a specified authentication mechanism. 668 */ 669 ns_ldap_return_code __ns_ldap_initAuth(const char *auth_mech, 670 ns_auth_t *auth, 671 ns_ldap_error_t **errorp); 672 673 /* 674 * Simplified LDAP Naming APIs 675 */ 676 int __ns_ldap_list( 677 const char *service, 678 const char *filter, 679 int (*init_filter_cb)(const ns_ldap_search_desc_t *desc, 680 char **realfilter, const void *userdata), 681 const char * const *attribute, 682 const ns_cred_t *cred, 683 const int flags, 684 ns_ldap_result_t ** result, 685 ns_ldap_error_t ** errorp, 686 int (*callback)(const ns_ldap_entry_t *entry, const void *userdata), 687 const void *userdata); 688 689 int __ns_ldap_list_batch_start( 690 ns_ldap_list_batch_t **batch); 691 692 int __ns_ldap_list_batch_add( 693 ns_ldap_list_batch_t *batch, 694 const char *service, 695 const char *filter, 696 int (*init_filter_cb)(const ns_ldap_search_desc_t *desc, 697 char **realfilter, const void *userdata), 698 const char * const *attribute, 699 const ns_cred_t *cred, 700 const int flags, 701 ns_ldap_result_t ** result, 702 ns_ldap_error_t ** errorp, 703 int *rcp, 704 int (*callback)(const ns_ldap_entry_t *entry, const void *userdata), 705 const void *userdata); 706 707 int __ns_ldap_list_batch_end( 708 ns_ldap_list_batch_t *batch); 709 710 void __ns_ldap_list_batch_release( 711 ns_ldap_list_batch_t *batch); 712 713 int __ns_ldap_addAttr( 714 const char *service, 715 const char *dn, 716 const ns_ldap_attr_t * const *attr, 717 const ns_cred_t *cred, 718 const int flags, 719 ns_ldap_error_t **errorp); 720 721 int __ns_ldap_delAttr( 722 const char *service, 723 const char *dn, 724 const ns_ldap_attr_t * const *attr, 725 const ns_cred_t *cred, 726 const int flags, 727 ns_ldap_error_t **errorp); 728 729 int __ns_ldap_repAttr( 730 const char *service, 731 const char *dn, 732 const ns_ldap_attr_t * const *attr, 733 const ns_cred_t *cred, 734 const int flags, 735 ns_ldap_error_t **errorp); 736 737 int __ns_ldap_addEntry( 738 const char *service, 739 const char *dn, 740 const ns_ldap_entry_t *entry, 741 const ns_cred_t *cred, 742 const int flags, 743 ns_ldap_error_t **errorp); 744 745 int __ns_ldap_addTypedEntry( 746 const char *servicetype, 747 const char *basedn, 748 const void *data, 749 const int create, 750 const ns_cred_t *cred, 751 const int flags, 752 ns_ldap_error_t **errorp); 753 754 int __ns_ldap_delEntry( 755 const char *service, 756 const char *dn, 757 const ns_cred_t *cred, 758 const int flags, 759 ns_ldap_error_t **errorp); 760 761 int __ns_ldap_firstEntry( 762 const char *service, 763 const char *filter, 764 int (*init_filter_cb)(const ns_ldap_search_desc_t *desc, 765 char **realfilter, const void *userdata), 766 const char * const *attribute, 767 const ns_cred_t *cred, 768 const int flags, 769 void **cookie, 770 ns_ldap_result_t ** result, 771 ns_ldap_error_t **errorp, 772 const void *userdata); 773 774 int __ns_ldap_nextEntry( 775 void *cookie, 776 ns_ldap_result_t ** result, 777 ns_ldap_error_t **errorp); 778 779 int __ns_ldap_endEntry( 780 void **cookie, 781 ns_ldap_error_t **errorp); 782 783 int __ns_ldap_freeResult( 784 ns_ldap_result_t **result); 785 786 int __ns_ldap_freeError( 787 ns_ldap_error_t **errorp); 788 789 int __ns_ldap_uid2dn( 790 const char *uid, 791 char **userDN, 792 const ns_cred_t *cred, 793 ns_ldap_error_t ** errorp); 794 795 int __ns_ldap_host2dn( 796 const char *host, 797 const char *domain, 798 char **hostDN, 799 const ns_cred_t *cred, 800 ns_ldap_error_t ** errorp); 801 802 int __ns_ldap_dn2domain( 803 const char *dn, 804 char **domain, 805 const ns_cred_t *cred, 806 ns_ldap_error_t ** errorp); 807 808 int __ns_ldap_auth( 809 const ns_cred_t *cred, 810 const int flag, 811 ns_ldap_error_t **errorp, 812 LDAPControl **serverctrls, 813 LDAPControl **clientctrls); 814 815 int __ns_ldap_freeCred( 816 ns_cred_t **credp); 817 818 int __ns_ldap_err2str( 819 int err, 820 char **strmsg); 821 822 int __ns_ldap_setParam( 823 const ParamIndexType type, 824 const void *data, 825 ns_ldap_error_t **errorp); 826 827 int __ns_ldap_getParam( 828 const ParamIndexType type, 829 void ***data, 830 ns_ldap_error_t **errorp); 831 832 int __ns_ldap_freeParam( 833 void ***data); 834 835 char **__ns_ldap_getAttr( 836 const ns_ldap_entry_t *entry, 837 const char *attrname); 838 839 ns_ldap_attr_t *__ns_ldap_getAttrStruct( 840 const ns_ldap_entry_t *entry, 841 const char *attrname); 842 843 int __ns_ldap_getServiceAuthMethods( 844 const char *service, 845 ns_auth_t ***auth, 846 ns_ldap_error_t **errorp); 847 848 int __ns_ldap_getSearchDescriptors( 849 const char *service, 850 ns_ldap_search_desc_t ***desc, 851 ns_ldap_error_t **errorp); 852 853 int __ns_ldap_freeSearchDescriptors( 854 ns_ldap_search_desc_t ***desc); 855 856 int __ns_ldap_getAttributeMaps( 857 const char *service, 858 ns_ldap_attribute_map_t ***maps, 859 ns_ldap_error_t **errorp); 860 861 int __ns_ldap_freeAttributeMaps( 862 ns_ldap_attribute_map_t ***maps); 863 864 char **__ns_ldap_getMappedAttributes( 865 const char *service, 866 const char *origAttribute); 867 868 char **__ns_ldap_getOrigAttribute( 869 const char *service, 870 const char *mappedAttribute); 871 872 int __ns_ldap_getObjectClassMaps( 873 const char *service, 874 ns_ldap_objectclass_map_t ***maps, 875 ns_ldap_error_t **errorp); 876 877 int __ns_ldap_freeObjectClassMaps( 878 ns_ldap_objectclass_map_t ***maps); 879 880 char **__ns_ldap_getMappedObjectClass( 881 const char *service, 882 const char *origObjectClass); 883 884 char **__ns_ldap_getOrigObjectClass( 885 const char *service, 886 const char *mappedObjectClass); 887 888 int __ns_ldap_getParamType( 889 const char *value, 890 ParamIndexType *type); 891 892 int __ns_ldap_getAcctMgmt( 893 const char *user, 894 AcctUsableResponse_t *acctResp); 895 896 boolean_t __ns_ldap_is_shadow_update_enabled(); 897 898 void 899 __ns_ldap_self_gssapi_only_set( 900 int flag); 901 int 902 __ns_ldap_self_gssapi_config( 903 ns_ldap_self_gssapi_config_t *config); 904 #ifdef __cplusplus 905 } 906 #endif 907 908 #endif /* _NS_SLDAP_H */ 909