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