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 2006 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 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #include <stdio.h> 37 #include <sys/types.h> 38 #include <lber.h> 39 #include <ldap.h> 40 41 /* 42 * Version 43 */ 44 #define NS_LDAP_VERSION NS_LDAP_VERSION_2 45 #define NS_LDAP_VERSION_1 "1.0" 46 #define NS_LDAP_VERSION_2 "2.0" 47 48 /* 49 * Flags 50 */ 51 #define NS_LDAP_HARD 0x001 52 #define NS_LDAP_ALL_RES 0x002 53 54 /* Search Referral Option */ 55 typedef enum SearchRef { 56 NS_LDAP_FOLLOWREF = 0x004, 57 NS_LDAP_NOREF = 0x008 58 } SearchRef_t; 59 60 typedef enum ScopeType { 61 NS_LDAP_SCOPE_BASE = 0x010, 62 NS_LDAP_SCOPE_ONELEVEL = 0x020, 63 NS_LDAP_SCOPE_SUBTREE = 0x040 64 } ScopeType_t; 65 66 /* 67 * BE VERY CAREFUL. DO NOT USE FLAG NS_LDAP_KEEP_CONN UNLESS YOU MUST 68 * IN libsldap.so.1 THERE IS NO CONNECTION GARBAGE COLLECTION AND IF 69 * THIS FLAG GETS USED THERE MIGHT BE A CONNECTION LEAK. CURRENTLY THIS 70 * IS ONLY SUPPORTED FOR LIST AND INTENDED FOR APPLICATIONS LIKE AUTOMOUNTER 71 */ 72 73 #define NS_LDAP_KEEP_CONN 0x080 74 #define NS_LDAP_NEW_CONN 0x400 75 #define NS_LDAP_NOMAP 0x800 76 77 #define NS_LDAP_PAGE_CTRL 0x1000 78 #define NS_LDAP_NO_PAGE_CTRL 0x0000 79 80 /* 81 * NS_LDAP_NOT_CVT_DN is needed when attribute mapping is used 82 * to retrieve the DN in LDAP and DN is not to be converted when 83 * being passed back to the application. See __ns_ldap_uid2dn() 84 * and __ns_ldap_host2dn() for such usage. 85 */ 86 #define NS_LDAP_NOT_CVT_DN 0x2000 87 88 /* 89 * Authentication Information 90 */ 91 typedef enum CredLevel { 92 NS_LDAP_CRED_ANON = 0, 93 NS_LDAP_CRED_PROXY = 1, 94 NS_LDAP_CRED_SELF = 2 /* currently not supported */ 95 } CredLevel_t; 96 97 typedef enum AuthType { 98 NS_LDAP_AUTH_NONE = 0, 99 NS_LDAP_AUTH_SIMPLE = 1, 100 NS_LDAP_AUTH_SASL = 2, 101 NS_LDAP_AUTH_TLS = 3, /* implied SASL usage */ 102 NS_LDAP_AUTH_ATLS = 4 /* implied SASL usage */ 103 } AuthType_t; 104 105 typedef enum TlsType { 106 NS_LDAP_TLS_NONE = 0, 107 NS_LDAP_TLS_SIMPLE = 1, 108 NS_LDAP_TLS_SASL = 2 109 } TlsType_t; 110 111 typedef enum SaslMech { 112 NS_LDAP_SASL_NONE = 0, /* No SASL mechanism */ 113 NS_LDAP_SASL_CRAM_MD5 = 1, 114 NS_LDAP_SASL_DIGEST_MD5 = 2, 115 NS_LDAP_SASL_EXTERNAL = 3, /* currently not supported */ 116 NS_LDAP_SASL_GSSAPI = 4, /* currently not supported */ 117 NS_LDAP_SASL_SPNEGO = 5 /* currently not supported */ 118 } SaslMech_t; 119 120 typedef enum SaslOpt { 121 NS_LDAP_SASLOPT_NONE = 0, 122 NS_LDAP_SASLOPT_INT = 1, /* currently not supported */ 123 NS_LDAP_SASLOPT_PRIV = 2 /* currently not supported */ 124 } SaslOpt_t; 125 126 typedef enum PrefOnly { 127 NS_LDAP_PREF_FALSE = 0, 128 NS_LDAP_PREF_TRUE = 1 129 } PrefOnly_t; 130 131 typedef struct UnixCred { 132 char *userID; /* Unix ID number */ 133 char *passwd; /* password */ 134 } UnixCred_t; 135 136 typedef struct CertCred { 137 char *path; /* certificate path */ 138 char *passwd; /* password */ 139 char *nickname; /* nickname */ 140 } CertCred_t; 141 142 typedef struct ns_auth { 143 AuthType_t type; 144 TlsType_t tlstype; 145 SaslMech_t saslmech; 146 SaslOpt_t saslopt; 147 } ns_auth_t; 148 149 typedef struct ns_cred { 150 ns_auth_t auth; 151 char *hostcertpath; 152 union { 153 UnixCred_t unix_cred; 154 CertCred_t cert_cred; 155 } cred; 156 } ns_cred_t; 157 158 159 typedef struct LineBuf { 160 char *str; 161 int len; 162 int alloc; 163 } LineBuf; 164 165 /* 166 * Configuration Information 167 */ 168 169 typedef enum { 170 NS_LDAP_FILE_VERSION_P = 0, 171 NS_LDAP_BINDDN_P = 1, 172 NS_LDAP_BINDPASSWD_P = 2, 173 NS_LDAP_SERVERS_P = 3, 174 NS_LDAP_SEARCH_BASEDN_P = 4, 175 NS_LDAP_AUTH_P = 5, 176 /* 177 * NS_LDAP_TRANSPORT_SEC_P is only left in for backward compatibility 178 * with version 1 clients and their configuration files. The only 179 * supported value is NS_LDAP_SEC_NONE. No application should be 180 * using this parameter type (either through getParam or setParam. 181 */ 182 NS_LDAP_TRANSPORT_SEC_P = 6, 183 NS_LDAP_SEARCH_REF_P = 7, 184 NS_LDAP_DOMAIN_P = 8, 185 NS_LDAP_EXP_P = 9, 186 NS_LDAP_CERT_PATH_P = 10, 187 NS_LDAP_CERT_PASS_P = 11, 188 NS_LDAP_SEARCH_DN_P = 12, 189 NS_LDAP_SEARCH_SCOPE_P = 13, 190 NS_LDAP_SEARCH_TIME_P = 14, 191 NS_LDAP_SERVER_PREF_P = 15, 192 NS_LDAP_PREF_ONLY_P = 16, 193 NS_LDAP_CACHETTL_P = 17, 194 NS_LDAP_PROFILE_P = 18, 195 NS_LDAP_CREDENTIAL_LEVEL_P = 19, 196 NS_LDAP_SERVICE_SEARCH_DESC_P = 20, 197 NS_LDAP_BIND_TIME_P = 21, 198 NS_LDAP_ATTRIBUTEMAP_P = 22, 199 NS_LDAP_OBJECTCLASSMAP_P = 23, 200 NS_LDAP_CERT_NICKNAME_P = 24, 201 NS_LDAP_SERVICE_AUTH_METHOD_P = 25, 202 NS_LDAP_SERVICE_CRED_LEVEL_P = 26, 203 NS_LDAP_HOST_CERTPATH_P = 27, 204 /* 205 * The following entry (max ParamIndexType) is an internal 206 * placeholder. It must be the last (and highest value) 207 * entry in this eNum. Please update accordingly. 208 */ 209 NS_LDAP_MAX_PIT_P = 28 210 211 } ParamIndexType; 212 213 /* 214 * __ns_ldap_*() return codes 215 */ 216 typedef enum { 217 NS_LDAP_SUCCESS = 0, /* success, no info in errorp */ 218 NS_LDAP_OP_FAILED = 1, /* failed operation, no info in errorp */ 219 NS_LDAP_NOTFOUND = 2, /* entry not found, no info in errorp */ 220 NS_LDAP_MEMORY = 3, /* memory failure, no info in errorp */ 221 NS_LDAP_CONFIG = 4, /* config problem, detail in errorp */ 222 NS_LDAP_PARTIAL = 5, /* partial result, detail in errorp */ 223 NS_LDAP_INTERNAL = 7, /* LDAP error, detail in errorp */ 224 NS_LDAP_INVALID_PARAM = 8, /* LDAP error, no info in errorp */ 225 NS_LDAP_SUCCESS_WITH_INFO 226 = 9 /* success, with info in errorp */ 227 } ns_ldap_return_code; 228 229 /* 230 * Detailed error code for NS_LDAP_CONFIG 231 */ 232 typedef enum { 233 NS_CONFIG_SYNTAX = 0, /* syntax error */ 234 NS_CONFIG_NODEFAULT = 1, /* no default value */ 235 NS_CONFIG_NOTLOADED = 2, /* configuration not loaded */ 236 NS_CONFIG_NOTALLOW = 3, /* operation requested not allowed */ 237 NS_CONFIG_FILE = 4, /* configuration file problem */ 238 NS_CONFIG_CACHEMGR = 5 /* error with door to ldap_cachemgr */ 239 } ns_ldap_config_return_code; 240 241 /* 242 * Detailed error code for NS_LDAP_PARTIAL 243 */ 244 typedef enum { 245 NS_PARTIAL_TIMEOUT = 0, /* partial results due to timeout */ 246 NS_PARTIAL_OTHER = 1 /* error encountered */ 247 } ns_ldap_partial_return_code; 248 249 /* 250 * For use by __ns_ldap_addTypedEntry() for publickey serivicetype 251 */ 252 typedef enum { 253 NS_HOSTCRED_FALSE = 0, 254 NS_HOSTCRED_TRUE = 1 255 } hostcred_t; 256 257 /* 258 * Detailed password status 259 */ 260 typedef enum { 261 NS_PASSWD_GOOD = 0, /* password is good */ 262 NS_PASSWD_ABOUT_TO_EXPIRE = 1, /* password is good but */ 263 /* about to expire */ 264 NS_PASSWD_CHANGE_NEEDED = 2, /* good but need to be */ 265 /* changed immediately */ 266 NS_PASSWD_EXPIRED = 3, /* password expired */ 267 NS_PASSWD_RETRY_EXCEEDED = 4, /* exceed retry limit; */ 268 /* account is locked */ 269 NS_PASSWD_CHANGE_NOT_ALLOWED = 5, /* can only be changed */ 270 /* by the administrator */ 271 NS_PASSWD_INVALID_SYNTAX = 6, /* can not be changed: */ 272 /* new password has */ 273 /* invalid syntax -- */ 274 /* same value as attr */ 275 /* cn, sn, uid, etc. */ 276 NS_PASSWD_TOO_SHORT = 7, /* can not be changed: */ 277 /* new password has */ 278 /* less chars than */ 279 /* required */ 280 NS_PASSWD_IN_HISTORY = 8, /* can not be changed: */ 281 /* reuse old password */ 282 NS_PASSWD_WITHIN_MIN_AGE = 9 /* can not be changed: */ 283 /* within minimum age */ 284 } ns_ldap_passwd_status_t; 285 286 /* 287 * Password management information structure 288 * 289 * This structure is different from AcctUsableResponse_t structure in 290 * that this structure holds result of users account mgmt information when 291 * an ldap bind is done with user name and user password. 292 */ 293 typedef struct ns_ldap_passwd_mgmt { 294 ns_ldap_passwd_status_t 295 status; /* password status */ 296 int sec_until_expired; /* seconds until expired, */ 297 /* valid if status is */ 298 /* NS_PASSWD_ABOUT_TO_EXPIRE */ 299 } ns_ldap_passwd_mgmt_t; 300 301 /* 302 * LDAP V3 control flag for account management - Used for account management 303 * when no password is provided 304 */ 305 #define NS_LDAP_ACCOUNT_USABLE_CONTROL "1.3.6.1.4.1.42.2.27.9.5.8" 306 307 /* 308 * Structure for holding the response returned by server for 309 * NS_LDAP_ACCOUNT_USABLE_CONTROL control when account is not available. 310 */ 311 typedef struct AcctUsableMoreInfo { 312 int inactive; 313 int reset; 314 int expired; 315 int rem_grace; 316 int sec_b4_unlock; 317 } AcctUsableMoreInfo_t; 318 319 /* 320 * Structure used to hold the response from the server for 321 * NS_LDAP_ACCOUNT_USABLE_CONTROL control. The ASN1 notation is as below: 322 * 323 * ACCOUNT_USABLE_RESPONSE::= CHOICE { 324 * is_available [0] INTEGER, seconds before expiration 325 * is_not_available [1] More_info 326 * } 327 * 328 * More_info::= SEQUENCE { 329 * inactive [0] BOOLEAN DEFAULT FALSE, 330 * reset [1] BOOLEAN DEFAULT FALSE, 331 * expired [2] BOOLEAN DEFAULT FALSE, 332 * remaining_grace [3] INTEGER OPTIONAL, 333 * seconds_before_unlock[4] INTEGER OPTIONAL 334 * } 335 * 336 * This structure is different from ns_ldap_passwd_mgmt_t structure in 337 * that this structure holds result of users account mgmt information when 338 * pam_ldap doesn't have the users password and proxy agent is used for 339 * obtaining the account management information. 340 */ 341 typedef struct AcctUsableResponse { 342 int choice; 343 union { 344 int seconds_before_expiry; 345 AcctUsableMoreInfo_t more_info; 346 } AcctUsableResp; 347 } AcctUsableResponse_t; 348 349 /* 350 * Simplified LDAP Naming API result structure 351 */ 352 typedef struct ns_ldap_error { 353 int status; /* LDAP error code */ 354 char *message; /* LDAP error message */ 355 ns_ldap_passwd_mgmt_t pwd_mgmt; /* LDAP password */ 356 /* management info */ 357 } ns_ldap_error_t; 358 359 typedef struct ns_ldap_attr { 360 char *attrname; /* attribute name */ 361 uint_t value_count; 362 char **attrvalue; /* attribute values */ 363 } ns_ldap_attr_t; 364 365 typedef struct ns_ldap_entry { 366 uint_t attr_count; /* number of attributes */ 367 ns_ldap_attr_t **attr_pair; /* attributes pairs */ 368 struct ns_ldap_entry *next; /* next entry */ 369 } ns_ldap_entry_t; 370 371 typedef struct ns_ldap_result { 372 uint_t entries_count; /* number of entries */ 373 ns_ldap_entry_t *entry; /* data */ 374 } ns_ldap_result_t; 375 376 /* 377 * structures for the conversion routines used by typedAddEntry() 378 */ 379 380 typedef struct _ns_netgroups { 381 char *name; 382 char **triplet; 383 char **netgroup; 384 } _ns_netgroups_t; 385 386 typedef struct _ns_netmasks { 387 char *netnumber; 388 char *netmask; 389 } _ns_netmasks_t; 390 391 typedef struct _ns_bootp { 392 char *name; 393 char **param; 394 } _ns_bootp_t; 395 396 typedef struct _ns_ethers { 397 char *name; 398 char *ether; 399 } _ns_ethers_t; 400 401 typedef struct _ns_pubkey { 402 char *name; 403 hostcred_t hostcred; 404 char *pubkey; 405 char *privkey; 406 } _ns_pubkey_t; 407 408 typedef struct _ns_alias { 409 char *alias; 410 char **member; 411 } _ns_alias_t; 412 413 typedef struct _ns_automount { 414 char *mapname; 415 char *key; 416 char *value; 417 } _ns_automount_t; 418 419 /* 420 * return values for the callback function in __ns_ldap_list() 421 */ 422 #define NS_LDAP_CB_NEXT 0 /* get the next entry */ 423 #define NS_LDAP_CB_DONE 1 /* done */ 424 425 /* 426 * Input values for the type specified in __ns_ldap_addTypedEntry() 427 * and __ns_ldap_delTypedEntry() 428 */ 429 430 #define NS_LDAP_TYPE_PASSWD "passwd" 431 #define NS_LDAP_TYPE_GROUP "group" 432 #define NS_LDAP_TYPE_HOSTS "hosts" 433 #define NS_LDAP_TYPE_IPNODES "ipnodes" 434 #define NS_LDAP_TYPE_PROFILE "prof_attr" 435 #define NS_LDAP_TYPE_RPC "rpc" 436 #define NS_LDAP_TYPE_PROTOCOLS "protocols" 437 #define NS_LDAP_TYPE_NETWORKS "networks" 438 #define NS_LDAP_TYPE_NETGROUP "netgroup" 439 #define NS_LDAP_TYPE_ALIASES "aliases" 440 #define NS_LDAP_TYPE_SERVICES "services" 441 #define NS_LDAP_TYPE_ETHERS "ethers" 442 #define NS_LDAP_TYPE_SHADOW "shadow" 443 #define NS_LDAP_TYPE_NETMASKS "netmasks" 444 #define NS_LDAP_TYPE_AUTHATTR "auth_attr" 445 #define NS_LDAP_TYPE_EXECATTR "exec_attr" 446 #define NS_LDAP_TYPE_USERATTR "user_attr" 447 #define NS_LDAP_TYPE_PROJECT "project" 448 #define NS_LDAP_TYPE_PUBLICKEY "publickey" 449 #define NS_LDAP_TYPE_AUUSER "audit_user" 450 #define NS_LDAP_TYPE_BOOTPARAMS "bootparams" 451 #define NS_LDAP_TYPE_AUTOMOUNT "auto_" 452 #define NS_LDAP_TYPE_TNRHDB "tnrhdb" 453 #define NS_LDAP_TYPE_TNRHTP "tnrhtp" 454 455 /* 456 * service descriptor/attribute mapping structure 457 */ 458 459 typedef struct ns_ldap_search_desc { 460 char *basedn; /* search base dn */ 461 ScopeType_t scope; /* search scope */ 462 char *filter; /* search filter */ 463 } ns_ldap_search_desc_t; 464 465 typedef struct ns_ldap_attribute_map { 466 char *origAttr; /* original attribute */ 467 char **mappedAttr; /* mapped attribute(s) */ 468 } ns_ldap_attribute_map_t; 469 470 typedef struct ns_ldap_objectclass_map { 471 char *origOC; /* original objectclass */ 472 char *mappedOC; /* mapped objectclass */ 473 } ns_ldap_objectclass_map_t; 474 475 /* 476 * Simplified LDAP Naming APIs 477 */ 478 int __ns_ldap_list( 479 const char *service, 480 const char *filter, 481 int (*init_filter_cb)(const ns_ldap_search_desc_t *desc, 482 char **realfilter, const void *userdata), 483 const char * const *attribute, 484 const ns_cred_t *cred, 485 const int flags, 486 ns_ldap_result_t ** result, 487 ns_ldap_error_t ** errorp, 488 int (*callback)(const ns_ldap_entry_t *entry, const void *userdata), 489 const void *userdata); 490 491 int __ns_ldap_addAttr( 492 const char *service, 493 const char *dn, 494 const ns_ldap_attr_t * const *attr, 495 const ns_cred_t *cred, 496 const int flags, 497 ns_ldap_error_t **errorp); 498 499 int __ns_ldap_delAttr( 500 const char *service, 501 const char *dn, 502 const ns_ldap_attr_t * const *attr, 503 const ns_cred_t *cred, 504 const int flags, 505 ns_ldap_error_t **errorp); 506 507 int __ns_ldap_repAttr( 508 const char *service, 509 const char *dn, 510 const ns_ldap_attr_t * const *attr, 511 const ns_cred_t *cred, 512 const int flags, 513 ns_ldap_error_t **errorp); 514 515 int __ns_ldap_addEntry( 516 const char *service, 517 const char *dn, 518 const ns_ldap_entry_t *entry, 519 const ns_cred_t *cred, 520 const int flags, 521 ns_ldap_error_t **errorp); 522 523 int __ns_ldap_addTypedEntry( 524 const char *servicetype, 525 const char *basedn, 526 const void *data, 527 const int create, 528 const ns_cred_t *cred, 529 const int flags, 530 ns_ldap_error_t **errorp); 531 532 int __ns_ldap_delEntry( 533 const char *service, 534 const char *dn, 535 const ns_cred_t *cred, 536 const int flags, 537 ns_ldap_error_t **errorp); 538 539 int __ns_ldap_firstEntry( 540 const char *service, 541 const char *filter, 542 int (*init_filter_cb)(const ns_ldap_search_desc_t *desc, 543 char **realfilter, const void *userdata), 544 const char * const *attribute, 545 const ns_cred_t *cred, 546 const int flags, 547 void **cookie, 548 ns_ldap_result_t ** result, 549 ns_ldap_error_t **errorp, 550 const void *userdata); 551 552 int __ns_ldap_nextEntry( 553 void *cookie, 554 ns_ldap_result_t ** result, 555 ns_ldap_error_t **errorp); 556 557 int __ns_ldap_endEntry( 558 void **cookie, 559 ns_ldap_error_t **errorp); 560 561 int __ns_ldap_freeResult( 562 ns_ldap_result_t **result); 563 564 int __ns_ldap_freeError( 565 ns_ldap_error_t **errorp); 566 567 int __ns_ldap_uid2dn( 568 const char *uid, 569 char **userDN, 570 const ns_cred_t *cred, 571 ns_ldap_error_t ** errorp); 572 573 int __ns_ldap_host2dn( 574 const char *host, 575 const char *domain, 576 char **hostDN, 577 const ns_cred_t *cred, 578 ns_ldap_error_t ** errorp); 579 580 int __ns_ldap_dn2domain( 581 const char *dn, 582 char **domain, 583 const ns_cred_t *cred, 584 ns_ldap_error_t ** errorp); 585 586 int __ns_ldap_auth( 587 const ns_cred_t *cred, 588 const int flag, 589 ns_ldap_error_t **errorp, 590 LDAPControl **serverctrls, 591 LDAPControl **clientctrls); 592 593 int __ns_ldap_freeCred( 594 ns_cred_t **credp); 595 596 int __ns_ldap_err2str( 597 int err, 598 char **strmsg); 599 600 int __ns_ldap_setParam( 601 const ParamIndexType type, 602 const void *data, 603 ns_ldap_error_t **errorp); 604 605 int __ns_ldap_getParam( 606 const ParamIndexType type, 607 void ***data, 608 ns_ldap_error_t **errorp); 609 610 int __ns_ldap_freeParam( 611 void ***data); 612 613 char **__ns_ldap_getAttr( 614 const ns_ldap_entry_t *entry, 615 const char *attrname); 616 617 int __ns_ldap_getServiceAuthMethods( 618 const char *service, 619 ns_auth_t ***auth, 620 ns_ldap_error_t **errorp); 621 622 int __ns_ldap_getSearchDescriptors( 623 const char *service, 624 ns_ldap_search_desc_t ***desc, 625 ns_ldap_error_t **errorp); 626 627 int __ns_ldap_freeSearchDescriptors( 628 ns_ldap_search_desc_t ***desc); 629 630 int __ns_ldap_getAttributeMaps( 631 const char *service, 632 ns_ldap_attribute_map_t ***maps, 633 ns_ldap_error_t **errorp); 634 635 int __ns_ldap_freeAttributeMaps( 636 ns_ldap_attribute_map_t ***maps); 637 638 char **__ns_ldap_getMappedAttributes( 639 const char *service, 640 const char *origAttribute); 641 642 char **__ns_ldap_getOrigAttribute( 643 const char *service, 644 const char *mappedAttribute); 645 646 int __ns_ldap_getObjectClassMaps( 647 const char *service, 648 ns_ldap_objectclass_map_t ***maps, 649 ns_ldap_error_t **errorp); 650 651 int __ns_ldap_freeObjectClassMaps( 652 ns_ldap_objectclass_map_t ***maps); 653 654 char **__ns_ldap_getMappedObjectClass( 655 const char *service, 656 const char *origObjectClass); 657 658 char **__ns_ldap_getOrigObjectClass( 659 const char *service, 660 const char *mappedObjectClass); 661 662 int __ns_ldap_getParamType( 663 const char *value, 664 ParamIndexType *type); 665 666 int __ns_ldap_getAcctMgmt( 667 const char *user, 668 AcctUsableResponse_t *acctResp); 669 #ifdef __cplusplus 670 } 671 #endif 672 673 #endif /* _NS_SLDAP_H */ 674