11 static const char* features[] = {
12 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
15 #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS
16 "X_OPENLDAP_V2_REFERRALS",
27 struct ldapoptions *lo;
29 if(!openldap_ldap_initialized) {
30 openldap_ldap_initialize();
33 if(outvalue == NULL) {
34 /* no place to get to */
39 lo = &openldap_ldap_global_options;
45 case LDAP_OPT_API_INFO: {
46 struct ldapapiinfo *info = (struct ldapapiinfo *) outvalue;
49 /* outvalue must point to an apiinfo structure */
53 if(info->ldapai_info_version != LDAP_API_INFO_VERSION) {
54 /* api info version mismatch */
55 info->ldapai_info_version = LDAP_API_INFO_VERSION;
59 info->ldapai_api_version = LDAP_API_VERSION;
60 info->ldapai_api_version = LDAP_API_VERSION;
61 info->ldapai_protocol_version = LDAP_VERSION_MAX;
62 if(features[0] == NULL) {
63 info->ldapai_extensions = NULL;
66 info->ldapai_extensions = malloc(sizeof(features));
68 for(i=0; features[i] != NULL; i++) {
69 info->ldapai_extensions[i] = strdup(features[i]);
72 info->ldapai_extensions[i] = NULL;
75 info->ldapai_vendor_name = strdup(LDAP_VENDOR_NAME);
76 info->ldapai_vendor_version = LDAP_VENDOR_VERSION;
87 * (int *) outvalue = ld->ld_sb.sb_sd;
91 * (int *) outvalue = lo->ldo_deref;
94 case LDAP_OPT_SIZELIMIT:
95 * (int *) outvalue = lo->ldo_sizelimit;
98 case LDAP_OPT_TIMELIMIT:
99 * (int *) outvalue = lo->ldo_timelimit;
102 case LDAP_OPT_REFERRALS:
103 * (int *) outvalue = (int) LDAP_BOOL_GET(lo, LDAP_BOOL_REFERRALS);
106 case LDAP_OPT_RESTART:
107 * (int *) outvalue = (int) LDAP_BOOL_GET(lo, LDAP_BOOL_RESTART);
110 case LDAP_OPT_DNS: /* LDAPv2 */
111 * (int *) outvalue = (int) LDAP_BOOL_GET(lo, LDAP_BOOL_DNS);
114 case LDAP_OPT_PROTOCOL_VERSION:
120 * (int *) outvalue = ld->ld_version;
123 case LDAP_OPT_SERVER_CONTROLS:
124 case LDAP_OPT_CLIENT_CONTROLS:
125 /* not yet supported */
128 case LDAP_OPT_HOST_NAME:
133 * (char **) outvalue = ld->ld_host;
136 case LDAP_OPT_ERROR_NUMBER:
141 * (int *) outvalue = ld->ld_errno;
144 case LDAP_OPT_ERROR_STRING:
145 /* not yet supported */
166 struct ldapoptions *lo;
168 if(!openldap_ldap_initialized) {
169 openldap_ldap_initialize();
172 if(invalue == NULL) {
173 /* no place to set from */
178 lo = &openldap_ldap_global_options;
180 lo = &ld->ld_options;
184 case LDAP_OPT_API_INFO:
190 lo->ldo_deref = * (int *) invalue;
193 case LDAP_OPT_SIZELIMIT:
194 lo->ldo_sizelimit = * (int *) invalue;
197 case LDAP_OPT_TIMELIMIT:
198 lo->ldo_timelimit = * (int *) invalue;
201 case LDAP_OPT_REFERRALS:
202 if((int) invalue == (int) LDAP_OPT_ON) {
203 LDAP_BOOL_SET(lo, LDAP_BOOL_REFERRALS);
205 LDAP_BOOL_CLR(lo, LDAP_BOOL_REFERRALS);
209 case LDAP_OPT_RESTART:
210 if((int) invalue == (int) LDAP_OPT_ON) {
211 LDAP_BOOL_SET(lo, LDAP_BOOL_RESTART);
213 LDAP_BOOL_CLR(lo, LDAP_BOOL_RESTART);
217 case LDAP_OPT_PROTOCOL_VERSION: {
218 int vers = * (int *) invalue;
219 if (vers < LDAP_VERSION_MIN || vers > LDAP_VERSION_MAX) {
223 ld->ld_version = vers;
226 case LDAP_OPT_SERVER_CONTROLS:
227 case LDAP_OPT_CLIENT_CONTROLS:
228 case LDAP_OPT_HOST_NAME:
229 case LDAP_OPT_ERROR_NUMBER:
230 case LDAP_OPT_ERROR_STRING:
231 /* not yet supported */