1 /* $NetBSD: apitest.c,v 1.3 2021/08/14 16:14:55 christos Exp $ */
2
3 /* apitest.c -- OpenLDAP API Test Program */
4 /* $OpenLDAP$ */
5 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
6 *
7 * Copyright 1998-2021 The OpenLDAP Foundation.
8 * Portions Copyright 1998-2003 Kurt D. Zeilenga.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted only as authorized by the OpenLDAP
13 * Public License.
14 *
15 * A copy of this license is available in the file LICENSE in the
16 * top-level directory of the distribution or, alternatively, at
17 * <http://www.OpenLDAP.org/license.html>.
18 */
19 /* ACKNOWLEDGEMENTS:
20 * This program was originally developed by Kurt D. Zeilenga for inclusion in
21 * OpenLDAP Software.
22 */
23 #include <sys/cdefs.h>
24 __RCSID("$NetBSD: apitest.c,v 1.3 2021/08/14 16:14:55 christos Exp $");
25
26 #include "portable.h"
27
28 #include <ac/stdlib.h>
29
30 #include <stdio.h>
31
32 #include <ldap.h>
33
34 int
main(int argc,char ** argv)35 main(int argc, char **argv)
36 {
37 LDAPAPIInfo api;
38 int ival;
39 char *sval;
40
41 printf("Compile time API Information\n");
42
43 #ifdef LDAP_API_INFO_VERSION
44 api.ldapai_info_version = LDAP_API_INFO_VERSION;
45 printf(" API Info version: %d\n", (int) api.ldapai_info_version);
46 #else
47 api.ldapai_info_version = 1;
48 printf(" API Info version: unknown\n");
49 #endif
50
51 #ifdef LDAP_FEATURE_INFO_VERSION
52 printf(" Feature Info version: %d\n", (int) LDAP_FEATURE_INFO_VERSION);
53 #else
54 printf(" Feature Info version: unknown\n");
55 api.ldapai_info_version = 1;
56 #endif
57
58 #ifdef LDAP_API_VERSION
59 printf(" API version: %d\n", (int) LDAP_API_VERSION);
60 #else
61 printf(" API version: unknown\n");
62 #endif
63
64 #ifdef LDAP_VERSION
65 printf(" Protocol Version: %d\n", (int) LDAP_VERSION);
66 #else
67 printf(" Protocol Version: unknown\n");
68 #endif
69 #ifdef LDAP_VERSION_MIN
70 printf(" Protocol Min: %d\n", (int) LDAP_VERSION_MIN);
71 #else
72 printf(" Protocol Min: unknown\n");
73 #endif
74 #ifdef LDAP_VERSION_MAX
75 printf(" Protocol Max: %d\n", (int) LDAP_VERSION_MAX);
76 #else
77 printf(" Protocol Max: unknown\n");
78 #endif
79 #ifdef LDAP_VENDOR_NAME
80 printf(" Vendor Name: %s\n", LDAP_VENDOR_NAME);
81 #else
82 printf(" Vendor Name: unknown\n");
83 #endif
84 #ifdef LDAP_VENDOR_VERSION
85 printf(" Vendor Version: %d\n", (int) LDAP_VENDOR_VERSION);
86 #else
87 printf(" Vendor Version: unknown\n");
88 #endif
89
90 if(ldap_get_option(NULL, LDAP_OPT_API_INFO, &api) != LDAP_SUCCESS) {
91 fprintf(stderr, "%s: ldap_get_option(API_INFO) failed\n", argv[0]);
92 return EXIT_FAILURE;
93 }
94
95 printf("\nExecution time API Information\n");
96 printf(" API Info version: %d\n", api.ldapai_info_version);
97
98 if (api.ldapai_info_version != LDAP_API_INFO_VERSION) {
99 printf(" API INFO version mismatch: got %d, expected %d\n",
100 api.ldapai_info_version, LDAP_API_INFO_VERSION);
101 return EXIT_FAILURE;
102 }
103
104 printf(" API Version: %d\n", api.ldapai_api_version);
105 printf(" Protocol Max: %d\n", api.ldapai_protocol_version);
106
107 if(api.ldapai_extensions == NULL) {
108 printf(" Extensions: none\n");
109
110 } else {
111 int i;
112 for(i=0; api.ldapai_extensions[i] != NULL; i++) /* empty */;
113 printf(" Extensions: %d\n", i);
114 for(i=0; api.ldapai_extensions[i] != NULL; i++) {
115 #ifdef LDAP_OPT_API_FEATURE_INFO
116 LDAPAPIFeatureInfo fi;
117 fi.ldapaif_info_version = LDAP_FEATURE_INFO_VERSION;
118 fi.ldapaif_name = api.ldapai_extensions[i];
119 fi.ldapaif_version = 0;
120
121 if( ldap_get_option(NULL, LDAP_OPT_API_FEATURE_INFO, &fi) == LDAP_SUCCESS ) {
122 if(fi.ldapaif_info_version != LDAP_FEATURE_INFO_VERSION) {
123 printf(" %s feature info mismatch: got %d, expected %d\n",
124 api.ldapai_extensions[i],
125 LDAP_FEATURE_INFO_VERSION,
126 fi.ldapaif_info_version);
127
128 } else {
129 printf(" %s: version %d\n",
130 fi.ldapaif_name,
131 fi.ldapaif_version);
132 }
133
134 } else {
135 printf(" %s (NO FEATURE INFO)\n",
136 api.ldapai_extensions[i]);
137 }
138
139 #else
140 printf(" %s\n",
141 api.ldapai_extensions[i]);
142 #endif
143
144 ldap_memfree(api.ldapai_extensions[i]);
145 }
146 ldap_memfree(api.ldapai_extensions);
147 }
148
149 printf(" Vendor Name: %s\n", api.ldapai_vendor_name);
150 ldap_memfree(api.ldapai_vendor_name);
151
152 printf(" Vendor Version: %d\n", api.ldapai_vendor_version);
153
154 printf("\nExecution time Default Options\n");
155
156 if(ldap_get_option(NULL, LDAP_OPT_DEREF, &ival) != LDAP_SUCCESS) {
157 fprintf(stderr, "%s: ldap_get_option(api) failed\n", argv[0]);
158 return EXIT_FAILURE;
159 }
160 printf(" DEREF: %d\n", ival);
161
162 if(ldap_get_option(NULL, LDAP_OPT_SIZELIMIT, &ival) != LDAP_SUCCESS) {
163 fprintf(stderr, "%s: ldap_get_option(sizelimit) failed\n", argv[0]);
164 return EXIT_FAILURE;
165 }
166 printf(" SIZELIMIT: %d\n", ival);
167
168 if(ldap_get_option(NULL, LDAP_OPT_TIMELIMIT, &ival) != LDAP_SUCCESS) {
169 fprintf(stderr, "%s: ldap_get_option(timelimit) failed\n", argv[0]);
170 return EXIT_FAILURE;
171 }
172 printf(" TIMELIMIT: %d\n", ival);
173
174 if(ldap_get_option(NULL, LDAP_OPT_REFERRALS, &ival) != LDAP_SUCCESS) {
175 fprintf(stderr, "%s: ldap_get_option(referrals) failed\n", argv[0]);
176 return EXIT_FAILURE;
177 }
178 printf(" REFERRALS: %s\n", ival ? "on" : "off");
179
180 if(ldap_get_option(NULL, LDAP_OPT_RESTART, &ival) != LDAP_SUCCESS) {
181 fprintf(stderr, "%s: ldap_get_option(restart) failed\n", argv[0]);
182 return EXIT_FAILURE;
183 }
184 printf(" RESTART: %s\n", ival ? "on" : "off");
185
186 if(ldap_get_option(NULL, LDAP_OPT_PROTOCOL_VERSION, &ival) != LDAP_SUCCESS) {
187 fprintf(stderr, "%s: ldap_get_option(protocol version) failed\n", argv[0]);
188 return EXIT_FAILURE;
189 }
190 printf(" PROTOCOL VERSION: %d\n", ival);
191
192 if(ldap_get_option(NULL, LDAP_OPT_HOST_NAME, &sval) != LDAP_SUCCESS) {
193 fprintf(stderr, "%s: ldap_get_option(host name) failed\n", argv[0]);
194 return EXIT_FAILURE;
195 }
196 if( sval != NULL ) {
197 printf(" HOST NAME: %s\n", sval);
198 ldap_memfree(sval);
199 } else {
200 puts(" HOST NAME: <not set>");
201 }
202
203 #if 0
204 /* API tests */
205 { /* bindless unbind */
206 LDAP *ld;
207 int rc;
208
209 ld = ldap_init( "localhost", 389 );
210 if( ld == NULL ) {
211 perror("ldap_init");
212 return EXIT_FAILURE;
213 }
214
215 rc = ldap_unbind( ld );
216 if( rc != LDAP_SUCCESS ) {
217 perror("ldap_unbind");
218 return EXIT_FAILURE;
219 }
220 }
221 { /* bindless unbind */
222 LDAP *ld;
223 int rc;
224
225 ld = ldap_init( "localhost", 389 );
226 if( ld == NULL ) {
227 perror("ldap_init");
228 return EXIT_FAILURE;
229 }
230
231 rc = ldap_abandon_ext( ld, 0, NULL, NULL );
232 if( rc != LDAP_SERVER_DOWN ) {
233 ldap_perror( ld, "ldap_abandon");
234 return EXIT_FAILURE;
235 }
236
237 rc = ldap_unbind( ld );
238 if( rc != LDAP_SUCCESS ) {
239 perror("ldap_unbind");
240 return EXIT_FAILURE;
241 }
242 }
243 #endif
244
245 return EXIT_SUCCESS;
246 }
247