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