xref: /netbsd-src/external/bsd/openldap/dist/libraries/libldap/apitest.c (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
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